"use strict";
global.__starttime = Date.now();
global.__isMain = require.main === module;
//#region \0rolldown/runtime.js
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __esmMin = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
var __exportAll = (all, no_symbols) => {
	let target = {};
	for (var name in all) __defProp(target, name, {
		get: all[name],
		enumerable: true
	});
	if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
	return target;
};
var __copyProps = (to, from, except, desc) => {
	if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
		key = keys[i];
		if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
			get: ((k) => from[k]).bind(null, key),
			enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
		});
	}
	return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
	value: mod,
	enumerable: true
}) : target, mod));
var __toCommonJS = (mod) => __hasOwnProp.call(mod, "module.exports") ? mod["module.exports"] : __copyProps(__defProp({}, "__esModule", { value: true }), mod);
//#endregion
let util = require("util");
let fs = require("fs");
fs = __toESM(fs);
let path = require("path");
path = __toESM(path);
let os = require("os");
os = __toESM(os);
let child_process = require("child_process");
let node_stream = require("node:stream");
let net = require("net");
net = __toESM(net, 1);
let events = require("events");
events = __toESM(events, 1);
let buffer = require("buffer");
let node_zlib = require("node:zlib");
node_zlib = __toESM(node_zlib, 1);
let url = require("url");
let http = require("http");
http = __toESM(http, 1);
let https = require("https");
https = __toESM(https, 1);
let assert = require("assert");
assert = __toESM(assert, 1);
let tls = require("tls");
tls = __toESM(tls, 1);
let v8 = require("v8");
//#region node_modules/ansi-styles/index.js
var ansi_styles_exports = /* @__PURE__ */ __exportAll({
	backgroundColorNames: () => backgroundColorNames,
	colorNames: () => colorNames,
	default: () => ansiStyles,
	foregroundColorNames: () => foregroundColorNames,
	modifierNames: () => modifierNames
});
function assembleStyles() {
	const codes = /* @__PURE__ */ new Map();
	for (const [groupName, group] of Object.entries(styles$2)) {
		for (const [styleName, style] of Object.entries(group)) {
			styles$2[styleName] = {
				open: `\u001B[${style[0]}m`,
				close: `\u001B[${style[1]}m`
			};
			group[styleName] = styles$2[styleName];
			codes.set(style[0], style[1]);
		}
		Object.defineProperty(styles$2, groupName, {
			value: group,
			enumerable: false
		});
	}
	Object.defineProperty(styles$2, "codes", {
		value: codes,
		enumerable: false
	});
	styles$2.color.close = "\x1B[39m";
	styles$2.bgColor.close = "\x1B[49m";
	styles$2.color.ansi = wrapAnsi16();
	styles$2.color.ansi256 = wrapAnsi256();
	styles$2.color.ansi16m = wrapAnsi16m();
	styles$2.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
	styles$2.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
	styles$2.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
	Object.defineProperties(styles$2, {
		rgbToAnsi256: {
			value(red, green, blue) {
				if (red === green && green === blue) {
					if (red < 8) return 16;
					if (red > 248) return 231;
					return Math.round((red - 8) / 247 * 24) + 232;
				}
				return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);
			},
			enumerable: false
		},
		hexToRgb: {
			value(hex) {
				const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
				if (!matches) return [
					0,
					0,
					0
				];
				let [colorString] = matches;
				if (colorString.length === 3) colorString = [...colorString].map((character) => character + character).join("");
				const integer = Number.parseInt(colorString, 16);
				return [
					integer >> 16 & 255,
					integer >> 8 & 255,
					integer & 255
				];
			},
			enumerable: false
		},
		hexToAnsi256: {
			value: (hex) => styles$2.rgbToAnsi256(...styles$2.hexToRgb(hex)),
			enumerable: false
		},
		ansi256ToAnsi: {
			value(code) {
				if (code < 8) return 30 + code;
				if (code < 16) return 90 + (code - 8);
				let red;
				let green;
				let blue;
				if (code >= 232) {
					red = ((code - 232) * 10 + 8) / 255;
					green = red;
					blue = red;
				} else {
					code -= 16;
					const remainder = code % 36;
					red = Math.floor(code / 36) / 5;
					green = Math.floor(remainder / 6) / 5;
					blue = remainder % 6 / 5;
				}
				const value = Math.max(red, green, blue) * 2;
				if (value === 0) return 30;
				let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
				if (value === 2) result += 60;
				return result;
			},
			enumerable: false
		},
		rgbToAnsi: {
			value: (red, green, blue) => styles$2.ansi256ToAnsi(styles$2.rgbToAnsi256(red, green, blue)),
			enumerable: false
		},
		hexToAnsi: {
			value: (hex) => styles$2.ansi256ToAnsi(styles$2.hexToAnsi256(hex)),
			enumerable: false
		}
	});
	return styles$2;
}
var ANSI_BACKGROUND_OFFSET, wrapAnsi16, wrapAnsi256, wrapAnsi16m, styles$2, modifierNames, foregroundColorNames, backgroundColorNames, colorNames, ansiStyles;
var init_ansi_styles = __esmMin((() => {
	ANSI_BACKGROUND_OFFSET = 10;
	wrapAnsi16 = (offset = 0) => (code) => `\u001B[${code + offset}m`;
	wrapAnsi256 = (offset = 0) => (code) => `\u001B[${38 + offset};5;${code}m`;
	wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`;
	styles$2 = {
		modifier: {
			reset: [0, 0],
			bold: [1, 22],
			dim: [2, 22],
			italic: [3, 23],
			underline: [4, 24],
			overline: [53, 55],
			inverse: [7, 27],
			hidden: [8, 28],
			strikethrough: [9, 29]
		},
		color: {
			black: [30, 39],
			red: [31, 39],
			green: [32, 39],
			yellow: [33, 39],
			blue: [34, 39],
			magenta: [35, 39],
			cyan: [36, 39],
			white: [37, 39],
			blackBright: [90, 39],
			gray: [90, 39],
			grey: [90, 39],
			redBright: [91, 39],
			greenBright: [92, 39],
			yellowBright: [93, 39],
			blueBright: [94, 39],
			magentaBright: [95, 39],
			cyanBright: [96, 39],
			whiteBright: [97, 39]
		},
		bgColor: {
			bgBlack: [40, 49],
			bgRed: [41, 49],
			bgGreen: [42, 49],
			bgYellow: [43, 49],
			bgBlue: [44, 49],
			bgMagenta: [45, 49],
			bgCyan: [46, 49],
			bgWhite: [47, 49],
			bgBlackBright: [100, 49],
			bgGray: [100, 49],
			bgGrey: [100, 49],
			bgRedBright: [101, 49],
			bgGreenBright: [102, 49],
			bgYellowBright: [103, 49],
			bgBlueBright: [104, 49],
			bgMagentaBright: [105, 49],
			bgCyanBright: [106, 49],
			bgWhiteBright: [107, 49]
		}
	};
	modifierNames = Object.keys(styles$2.modifier);
	foregroundColorNames = Object.keys(styles$2.color);
	backgroundColorNames = Object.keys(styles$2.bgColor);
	colorNames = [...foregroundColorNames, ...backgroundColorNames];
	ansiStyles = assembleStyles();
}));
//#endregion
//#region node_modules/ansi-regex/index.js
function ansiRegex({ onlyFirst = false } = {}) {
	return new RegExp(`(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]`, onlyFirst ? void 0 : "g");
}
var init_ansi_regex = __esmMin((() => {}));
//#endregion
//#region node_modules/strip-ansi/index.js
var strip_ansi_exports = /* @__PURE__ */ __exportAll({ default: () => stripAnsi$1 });
function stripAnsi$1(string) {
	if (typeof string !== "string") throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
	if (!string.includes("\x1B") && !string.includes("")) return string;
	return string.replace(regex$1, "");
}
var regex$1;
var init_strip_ansi = __esmMin((() => {
	init_ansi_regex();
	regex$1 = ansiRegex();
}));
//#endregion
//#region node_modules/debounce/index.js
var debounce_exports = /* @__PURE__ */ __exportAll({ default: () => debounce$1 });
function debounce$1(function_, wait = 100, options = {}) {
	if (typeof function_ !== "function") throw new TypeError(`Expected the first parameter to be a function, got \`${typeof function_}\`.`);
	if (wait < 0) throw new RangeError("`wait` must not be negative.");
	if (typeof options === "boolean") throw new TypeError("The `options` parameter must be an object, not a boolean. Use `{immediate: true}` instead.");
	const { immediate } = options;
	let storedContext;
	let storedArguments;
	let timeoutId;
	let timestamp;
	let result;
	function run() {
		const callContext = storedContext;
		const callArguments = storedArguments;
		storedContext = void 0;
		storedArguments = void 0;
		result = function_.apply(callContext, callArguments);
		return result;
	}
	function later() {
		const last = Date.now() - timestamp;
		if (last < wait && last >= 0) timeoutId = setTimeout(later, wait - last);
		else {
			timeoutId = void 0;
			if (!immediate) result = run();
		}
	}
	const debounced = function(...arguments_) {
		if (storedContext && this !== storedContext && Object.getPrototypeOf(this) === Object.getPrototypeOf(storedContext)) throw new Error("Debounced method called with different contexts of the same prototype.");
		storedContext = this;
		storedArguments = arguments_;
		timestamp = Date.now();
		const callNow = immediate && !timeoutId;
		if (!timeoutId) timeoutId = setTimeout(later, wait);
		if (callNow) {
			result = run();
			return result;
		}
	};
	Object.defineProperty(debounced, "isPending", { get() {
		return timeoutId !== void 0;
	} });
	debounced.clear = () => {
		if (!timeoutId) return;
		clearTimeout(timeoutId);
		timeoutId = void 0;
		storedContext = void 0;
		storedArguments = void 0;
	};
	debounced.flush = () => {
		if (!timeoutId) return;
		debounced.trigger();
	};
	debounced.trigger = () => {
		result = run();
		debounced.clear();
	};
	return debounced;
}
var init_debounce = __esmMin((() => {}));
//#endregion
//#region node_modules/glob/dist/commonjs/index.min.js
var require_index_min$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
	var R = (n, t) => () => (t || n((t = { exports: {} }).exports, t), t.exports);
	var Ge = R((Y) => {
		"use strict";
		Object.defineProperty(Y, "__esModule", { value: !0 });
		Y.range = Y.balanced = void 0;
		var Gs = (n, t, e) => {
			let s = n instanceof RegExp ? Ie(n, e) : n, i = t instanceof RegExp ? Ie(t, e) : t, r = s !== null && i != null && (0, Y.range)(s, i, e);
			return r && {
				start: r[0],
				end: r[1],
				pre: e.slice(0, r[0]),
				body: e.slice(r[0] + s.length, r[1]),
				post: e.slice(r[1] + i.length)
			};
		};
		Y.balanced = Gs;
		var Ie = (n, t) => {
			let e = t.match(n);
			return e ? e[0] : null;
		}, zs = (n, t, e) => {
			let s, i, r, h, o, a = e.indexOf(n), l = e.indexOf(t, a + 1), f = a;
			if (a >= 0 && l > 0) {
				if (n === t) return [a, l];
				for (s = [], r = e.length; f >= 0 && !o;) {
					if (f === a) s.push(f), a = e.indexOf(n, f + 1);
					else if (s.length === 1) {
						let c = s.pop();
						c !== void 0 && (o = [c, l]);
					} else i = s.pop(), i !== void 0 && i < r && (r = i, h = l), l = e.indexOf(t, f + 1);
					f = a < l && a >= 0 ? a : l;
				}
				s.length && h !== void 0 && (o = [r, h]);
			}
			return o;
		};
		Y.range = zs;
	});
	var Ke = R((it) => {
		"use strict";
		Object.defineProperty(it, "__esModule", { value: !0 });
		it.EXPANSION_MAX = void 0;
		it.expand = ei;
		var ze = Ge(), Ue = "\0SLASH" + Math.random() + "\0", $e = "\0OPEN" + Math.random() + "\0", ue = "\0CLOSE" + Math.random() + "\0", qe = "\0COMMA" + Math.random() + "\0", He = "\0PERIOD" + Math.random() + "\0", Us = new RegExp(Ue, "g"), $s = new RegExp($e, "g"), qs = new RegExp(ue, "g"), Hs = new RegExp(qe, "g"), Vs = new RegExp(He, "g"), Ks = /\\\\/g, Xs = /\\{/g, Ys = /\\}/g, Js = /\\,/g, Zs = /\\./g;
		it.EXPANSION_MAX = 1e5;
		function ce(n) {
			return isNaN(n) ? n.charCodeAt(0) : parseInt(n, 10);
		}
		function Qs(n) {
			return n.replace(Ks, Ue).replace(Xs, $e).replace(Ys, ue).replace(Js, qe).replace(Zs, He);
		}
		function ti(n) {
			return n.replace(Us, "\\").replace($s, "{").replace(qs, "}").replace(Hs, ",").replace(Vs, ".");
		}
		function Ve(n) {
			if (!n) return [""];
			let t = [], e = (0, ze.balanced)("{", "}", n);
			if (!e) return n.split(",");
			let { pre: s, body: i, post: r } = e, h = s.split(",");
			h[h.length - 1] += "{" + i + "}";
			let o = Ve(r);
			return r.length && (h[h.length - 1] += o.shift(), h.push.apply(h, o)), t.push.apply(t, h), t;
		}
		function ei(n, t = {}) {
			if (!n) return [];
			let { max: e = it.EXPANSION_MAX } = t;
			return n.slice(0, 2) === "{}" && (n = "\\{\\}" + n.slice(2)), ht(Qs(n), e, !0).map(ti);
		}
		function si(n) {
			return "{" + n + "}";
		}
		function ii(n) {
			return /^-?0\d/.test(n);
		}
		function ri(n, t) {
			return n <= t;
		}
		function ni(n, t) {
			return n >= t;
		}
		function ht(n, t, e) {
			let s = [], i = (0, ze.balanced)("{", "}", n);
			if (!i) return [n];
			let r = i.pre, h = i.post.length ? ht(i.post, t, !1) : [""];
			if (/\$$/.test(i.pre)) for (let o = 0; o < h.length && o < t; o++) {
				let a = r + "{" + i.body + "}" + h[o];
				s.push(a);
			}
			else {
				let o = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body), a = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body), l = o || a, f = i.body.indexOf(",") >= 0;
				if (!l && !f) return i.post.match(/,(?!,).*\}/) ? (n = i.pre + "{" + i.body + ue + i.post, ht(n, t, !0)) : [n];
				let c;
				if (l) c = i.body.split(/\.\./);
				else if (c = Ve(i.body), c.length === 1 && c[0] !== void 0 && (c = ht(c[0], t, !1).map(si), c.length === 1)) return h.map((u) => i.pre + c[0] + u);
				let d;
				if (l && c[0] !== void 0 && c[1] !== void 0) {
					let u = ce(c[0]), m = ce(c[1]), p = Math.max(c[0].length, c[1].length), b = c.length === 3 && c[2] !== void 0 ? Math.abs(ce(c[2])) : 1, w = ri;
					m < u && (b *= -1, w = ni);
					let E = c.some(ii);
					d = [];
					for (let y = u; w(y, m); y += b) {
						let S;
						if (a) S = String.fromCharCode(y), S === "\\" && (S = "");
						else if (S = String(y), E) {
							let B = p - S.length;
							if (B > 0) {
								let U = new Array(B + 1).join("0");
								y < 0 ? S = "-" + U + S.slice(1) : S = U + S;
							}
						}
						d.push(S);
					}
				} else {
					d = [];
					for (let u = 0; u < c.length; u++) d.push.apply(d, ht(c[u], t, !1));
				}
				for (let u = 0; u < d.length; u++) for (let m = 0; m < h.length && s.length < t; m++) {
					let p = r + d[u] + h[m];
					(!e || l || p) && s.push(p);
				}
			}
			return s;
		}
	});
	var Xe = R((Ct) => {
		"use strict";
		Object.defineProperty(Ct, "__esModule", { value: !0 });
		Ct.assertValidPattern = void 0;
		var hi = 1024 * 64, oi = (n) => {
			if (typeof n != "string") throw new TypeError("invalid pattern");
			if (n.length > hi) throw new TypeError("pattern is too long");
		};
		Ct.assertValidPattern = oi;
	});
	var Je = R((Rt) => {
		"use strict";
		Object.defineProperty(Rt, "__esModule", { value: !0 });
		Rt.parseClass = void 0;
		var ai = {
			"[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", !0],
			"[:alpha:]": ["\\p{L}\\p{Nl}", !0],
			"[:ascii:]": ["\\x00-\\x7f", !1],
			"[:blank:]": ["\\p{Zs}\\t", !0],
			"[:cntrl:]": ["\\p{Cc}", !0],
			"[:digit:]": ["\\p{Nd}", !0],
			"[:graph:]": [
				"\\p{Z}\\p{C}",
				!0,
				!0
			],
			"[:lower:]": ["\\p{Ll}", !0],
			"[:print:]": ["\\p{C}", !0],
			"[:punct:]": ["\\p{P}", !0],
			"[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", !0],
			"[:upper:]": ["\\p{Lu}", !0],
			"[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", !0],
			"[:xdigit:]": ["A-Fa-f0-9", !1]
		}, ot = (n) => n.replace(/[[\]\\-]/g, "\\$&"), li = (n) => n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), Ye = (n) => n.join(""), ci = (n, t) => {
			let e = t;
			if (n.charAt(e) !== "[") throw new Error("not in a brace expression");
			let s = [], i = [], r = e + 1, h = !1, o = !1, a = !1, l = !1, f = e, c = "";
			t: for (; r < n.length;) {
				let p = n.charAt(r);
				if ((p === "!" || p === "^") && r === e + 1) {
					l = !0, r++;
					continue;
				}
				if (p === "]" && h && !a) {
					f = r + 1;
					break;
				}
				if (h = !0, p === "\\" && !a) {
					a = !0, r++;
					continue;
				}
				if (p === "[" && !a) {
					for (let [b, [w, v, E]] of Object.entries(ai)) if (n.startsWith(b, r)) {
						if (c) return [
							"$.",
							!1,
							n.length - e,
							!0
						];
						r += b.length, E ? i.push(w) : s.push(w), o = o || v;
						continue t;
					}
				}
				if (a = !1, c) {
					p > c ? s.push(ot(c) + "-" + ot(p)) : p === c && s.push(ot(p)), c = "", r++;
					continue;
				}
				if (n.startsWith("-]", r + 1)) {
					s.push(ot(p + "-")), r += 2;
					continue;
				}
				if (n.startsWith("-", r + 1)) {
					c = p, r += 2;
					continue;
				}
				s.push(ot(p)), r++;
			}
			if (f < r) return [
				"",
				!1,
				0,
				!1
			];
			if (!s.length && !i.length) return [
				"$.",
				!1,
				n.length - e,
				!0
			];
			if (i.length === 0 && s.length === 1 && /^\\?.$/.test(s[0]) && !l) return [
				li(s[0].length === 2 ? s[0].slice(-1) : s[0]),
				!1,
				f - e,
				!1
			];
			let d = "[" + (l ? "^" : "") + Ye(s) + "]", u = "[" + (l ? "" : "^") + Ye(i) + "]";
			return [
				s.length && i.length ? "(" + d + "|" + u + ")" : s.length ? d : u,
				o,
				f - e,
				!0
			];
		};
		Rt.parseClass = ci;
	});
	var kt = R((At) => {
		"use strict";
		Object.defineProperty(At, "__esModule", { value: !0 });
		At.unescape = void 0;
		var ui = (n, { windowsPathsNoEscape: t = !1, magicalBraces: e = !0 } = {}) => e ? t ? n.replace(/\[([^\/\\])\]/g, "$1") : n.replace(/((?!\\).|^)\[([^\/\\])\]/g, "$1$2").replace(/\\([^\/])/g, "$1") : t ? n.replace(/\[([^\/\\{}])\]/g, "$1") : n.replace(/((?!\\).|^)\[([^\/\\{}])\]/g, "$1$2").replace(/\\([^\/{}])/g, "$1");
		At.unescape = ui;
	});
	var pe = R((Dt) => {
		"use strict";
		Object.defineProperty(Dt, "__esModule", { value: !0 });
		Dt.AST = void 0;
		var fi = Je(), Mt = kt(), di = new Set([
			"!",
			"?",
			"+",
			"*",
			"@"
		]), Ze = (n) => di.has(n), pi = "(?!(?:^|/)\\.\\.?(?:$|/))", Pt = "(?!\\.)", mi = new Set(["[", "."]), gi = new Set(["..", "."]), wi = /* @__PURE__ */ new Set("().*{}+?[]^$\\!"), bi = (n) => n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), de = "[^/]", Qe = de + "*?", ts = de + "+?";
		Dt.AST = class n {
			type;
			#t;
			#s;
			#n = !1;
			#r = [];
			#h;
			#S;
			#w;
			#c = !1;
			#o;
			#f;
			#u = !1;
			constructor(t, e, s = {}) {
				this.type = t, t && (this.#s = !0), this.#h = e, this.#t = this.#h ? this.#h.#t : this, this.#o = this.#t === this ? s : this.#t.#o, this.#w = this.#t === this ? [] : this.#t.#w, t === "!" && !this.#t.#c && this.#w.push(this), this.#S = this.#h ? this.#h.#r.length : 0;
			}
			get hasMagic() {
				if (this.#s !== void 0) return this.#s;
				for (let t of this.#r) if (typeof t != "string" && (t.type || t.hasMagic)) return this.#s = !0;
				return this.#s;
			}
			toString() {
				return this.#f !== void 0 ? this.#f : this.type ? this.#f = this.type + "(" + this.#r.map((t) => String(t)).join("|") + ")" : this.#f = this.#r.map((t) => String(t)).join("");
			}
			#a() {
				if (this !== this.#t) throw new Error("should only call on root");
				if (this.#c) return this;
				this.toString(), this.#c = !0;
				let t;
				for (; t = this.#w.pop();) {
					if (t.type !== "!") continue;
					let e = t, s = e.#h;
					for (; s;) {
						for (let i = e.#S + 1; !s.type && i < s.#r.length; i++) for (let r of t.#r) {
							if (typeof r == "string") throw new Error("string part in extglob AST??");
							r.copyIn(s.#r[i]);
						}
						e = s, s = e.#h;
					}
				}
				return this;
			}
			push(...t) {
				for (let e of t) if (e !== "") {
					if (typeof e != "string" && !(e instanceof n && e.#h === this)) throw new Error("invalid part: " + e);
					this.#r.push(e);
				}
			}
			toJSON() {
				let t = this.type === null ? this.#r.slice().map((e) => typeof e == "string" ? e : e.toJSON()) : [this.type, ...this.#r.map((e) => e.toJSON())];
				return this.isStart() && !this.type && t.unshift([]), this.isEnd() && (this === this.#t || this.#t.#c && this.#h?.type === "!") && t.push({}), t;
			}
			isStart() {
				if (this.#t === this) return !0;
				if (!this.#h?.isStart()) return !1;
				if (this.#S === 0) return !0;
				let t = this.#h;
				for (let e = 0; e < this.#S; e++) {
					let s = t.#r[e];
					if (!(s instanceof n && s.type === "!")) return !1;
				}
				return !0;
			}
			isEnd() {
				if (this.#t === this || this.#h?.type === "!") return !0;
				if (!this.#h?.isEnd()) return !1;
				if (!this.type) return this.#h?.isEnd();
				let t = this.#h ? this.#h.#r.length : 0;
				return this.#S === t - 1;
			}
			copyIn(t) {
				typeof t == "string" ? this.push(t) : this.push(t.clone(this));
			}
			clone(t) {
				let e = new n(this.type, t);
				for (let s of this.#r) e.copyIn(s);
				return e;
			}
			static #i(t, e, s, i) {
				let r = !1, h = !1, o = -1, a = !1;
				if (e.type === null) {
					let u = s, m = "";
					for (; u < t.length;) {
						let p = t.charAt(u++);
						if (r || p === "\\") {
							r = !r, m += p;
							continue;
						}
						if (h) {
							u === o + 1 ? (p === "^" || p === "!") && (a = !0) : p === "]" && !(u === o + 2 && a) && (h = !1), m += p;
							continue;
						} else if (p === "[") {
							h = !0, o = u, a = !1, m += p;
							continue;
						}
						if (!i.noext && Ze(p) && t.charAt(u) === "(") {
							e.push(m), m = "";
							let b = new n(p, e);
							u = n.#i(t, b, u, i), e.push(b);
							continue;
						}
						m += p;
					}
					return e.push(m), u;
				}
				let l = s + 1, f = new n(null, e), c = [], d = "";
				for (; l < t.length;) {
					let u = t.charAt(l++);
					if (r || u === "\\") {
						r = !r, d += u;
						continue;
					}
					if (h) {
						l === o + 1 ? (u === "^" || u === "!") && (a = !0) : u === "]" && !(l === o + 2 && a) && (h = !1), d += u;
						continue;
					} else if (u === "[") {
						h = !0, o = l, a = !1, d += u;
						continue;
					}
					if (Ze(u) && t.charAt(l) === "(") {
						f.push(d), d = "";
						let m = new n(u, f);
						f.push(m), l = n.#i(t, m, l, i);
						continue;
					}
					if (u === "|") {
						f.push(d), d = "", c.push(f), f = new n(null, e);
						continue;
					}
					if (u === ")") return d === "" && e.#r.length === 0 && (e.#u = !0), f.push(d), d = "", e.push(...c, f), l;
					d += u;
				}
				return e.type = null, e.#s = void 0, e.#r = [t.substring(s - 1)], l;
			}
			static fromGlob(t, e = {}) {
				let s = new n(null, void 0, e);
				return n.#i(t, s, 0, e), s;
			}
			toMMPattern() {
				if (this !== this.#t) return this.#t.toMMPattern();
				let t = this.toString(), [e, s, i, r] = this.toRegExpSource();
				if (!(i || this.#s || this.#o.nocase && !this.#o.nocaseMagicOnly && t.toUpperCase() !== t.toLowerCase())) return s;
				let o = (this.#o.nocase ? "i" : "") + (r ? "u" : "");
				return Object.assign(new RegExp(`^${e}$`, o), {
					_src: e,
					_glob: t
				});
			}
			get options() {
				return this.#o;
			}
			toRegExpSource(t) {
				let e = t ?? !!this.#o.dot;
				if (this.#t === this && this.#a(), !this.type) {
					let a = this.isStart() && this.isEnd() && !this.#r.some((u) => typeof u != "string"), l = this.#r.map((u) => {
						let [m, p, b, w] = typeof u == "string" ? n.#v(u, this.#s, a) : u.toRegExpSource(t);
						return this.#s = this.#s || b, this.#n = this.#n || w, m;
					}).join(""), f = "";
					if (this.isStart() && typeof this.#r[0] == "string" && !(this.#r.length === 1 && gi.has(this.#r[0]))) {
						let m = mi, p = e && m.has(l.charAt(0)) || l.startsWith("\\.") && m.has(l.charAt(2)) || l.startsWith("\\.\\.") && m.has(l.charAt(4)), b = !e && !t && m.has(l.charAt(0));
						f = p ? pi : b ? Pt : "";
					}
					let c = "";
					return this.isEnd() && this.#t.#c && this.#h?.type === "!" && (c = "(?:$|\\/)"), [
						f + l + c,
						(0, Mt.unescape)(l),
						this.#s = !!this.#s,
						this.#n
					];
				}
				let s = this.type === "*" || this.type === "+", i = this.type === "!" ? "(?:(?!(?:" : "(?:", r = this.#d(e);
				if (this.isStart() && this.isEnd() && !r && this.type !== "!") {
					let a = this.toString();
					return this.#r = [a], this.type = null, this.#s = void 0, [
						a,
						(0, Mt.unescape)(this.toString()),
						!1,
						!1
					];
				}
				let h = !s || t || e || !Pt ? "" : this.#d(!0);
				h === r && (h = ""), h && (r = `(?:${r})(?:${h})*?`);
				let o = "";
				if (this.type === "!" && this.#u) o = (this.isStart() && !e ? Pt : "") + ts;
				else {
					let a = this.type === "!" ? "))" + (this.isStart() && !e && !t ? Pt : "") + Qe + ")" : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && h ? ")" : this.type === "*" && h ? ")?" : `)${this.type}`;
					o = i + r + a;
				}
				return [
					o,
					(0, Mt.unescape)(r),
					this.#s = !!this.#s,
					this.#n
				];
			}
			#d(t) {
				return this.#r.map((e) => {
					if (typeof e == "string") throw new Error("string type in extglob ast??");
					let [s, i, r, h] = e.toRegExpSource(t);
					return this.#n = this.#n || h, s;
				}).filter((e) => !(this.isStart() && this.isEnd()) || !!e).join("|");
			}
			static #v(t, e, s = !1) {
				let i = !1, r = "", h = !1, o = !1;
				for (let a = 0; a < t.length; a++) {
					let l = t.charAt(a);
					if (i) {
						i = !1, r += (wi.has(l) ? "\\" : "") + l;
						continue;
					}
					if (l === "*") {
						if (o) continue;
						o = !0, r += s && /^[*]+$/.test(t) ? ts : Qe, e = !0;
						continue;
					} else o = !1;
					if (l === "\\") {
						a === t.length - 1 ? r += "\\\\" : i = !0;
						continue;
					}
					if (l === "[") {
						let [f, c, d, u] = (0, fi.parseClass)(t, a);
						if (d) {
							r += f, h = h || c, a += d - 1, e = e || u;
							continue;
						}
					}
					if (l === "?") {
						r += de, e = !0;
						continue;
					}
					r += bi(l);
				}
				return [
					r,
					(0, Mt.unescape)(t),
					!!e,
					h
				];
			}
		};
	});
	var me = R((Ft) => {
		"use strict";
		Object.defineProperty(Ft, "__esModule", { value: !0 });
		Ft.escape = void 0;
		var yi = (n, { windowsPathsNoEscape: t = !1, magicalBraces: e = !1 } = {}) => e ? t ? n.replace(/[?*()[\]{}]/g, "[$&]") : n.replace(/[?*()[\]\\{}]/g, "\\$&") : t ? n.replace(/[?*()[\]]/g, "[$&]") : n.replace(/[?*()[\]\\]/g, "\\$&");
		Ft.escape = yi;
	});
	var H = R((g) => {
		"use strict";
		Object.defineProperty(g, "__esModule", { value: !0 });
		g.unescape = g.escape = g.AST = g.Minimatch = g.match = g.makeRe = g.braceExpand = g.defaults = g.filter = g.GLOBSTAR = g.sep = g.minimatch = void 0;
		var Si = Ke(), jt = Xe(), is = pe(), vi = me(), Ei = kt(), _i = (n, t, e = {}) => ((0, jt.assertValidPattern)(t), !e.nocomment && t.charAt(0) === "#" ? !1 : new J(t, e).match(n));
		g.minimatch = _i;
		var Oi = /^\*+([^+@!?\*\[\(]*)$/, xi = (n) => (t) => !t.startsWith(".") && t.endsWith(n), Ti = (n) => (t) => t.endsWith(n), Ci = (n) => (n = n.toLowerCase(), (t) => !t.startsWith(".") && t.toLowerCase().endsWith(n)), Ri = (n) => (n = n.toLowerCase(), (t) => t.toLowerCase().endsWith(n)), Ai = /^\*+\.\*+$/, ki = (n) => !n.startsWith(".") && n.includes("."), Mi = (n) => n !== "." && n !== ".." && n.includes("."), Pi = /^\.\*+$/, Di = (n) => n !== "." && n !== ".." && n.startsWith("."), Fi = /^\*+$/, ji = (n) => n.length !== 0 && !n.startsWith("."), Ni = (n) => n.length !== 0 && n !== "." && n !== "..", Li = /^\?+([^+@!?\*\[\(]*)?$/, Wi = ([n, t = ""]) => {
			let e = rs([n]);
			return t ? (t = t.toLowerCase(), (s) => e(s) && s.toLowerCase().endsWith(t)) : e;
		}, Bi = ([n, t = ""]) => {
			let e = ns([n]);
			return t ? (t = t.toLowerCase(), (s) => e(s) && s.toLowerCase().endsWith(t)) : e;
		}, Ii = ([n, t = ""]) => {
			let e = ns([n]);
			return t ? (s) => e(s) && s.endsWith(t) : e;
		}, Gi = ([n, t = ""]) => {
			let e = rs([n]);
			return t ? (s) => e(s) && s.endsWith(t) : e;
		}, rs = ([n]) => {
			let t = n.length;
			return (e) => e.length === t && !e.startsWith(".");
		}, ns = ([n]) => {
			let t = n.length;
			return (e) => e.length === t && e !== "." && e !== "..";
		}, hs = typeof process == "object" && process ? typeof process.env == "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix", es = {
			win32: { sep: "\\" },
			posix: { sep: "/" }
		};
		g.sep = hs === "win32" ? es.win32.sep : es.posix.sep;
		g.minimatch.sep = g.sep;
		g.GLOBSTAR = Symbol("globstar **");
		g.minimatch.GLOBSTAR = g.GLOBSTAR;
		var Ui = "[^/]*?", $i = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?", qi = "(?:(?!(?:\\/|^)\\.).)*?", Hi = (n, t = {}) => (e) => (0, g.minimatch)(e, n, t);
		g.filter = Hi;
		g.minimatch.filter = g.filter;
		var F = (n, t = {}) => Object.assign({}, n, t), Vi = (n) => {
			if (!n || typeof n != "object" || !Object.keys(n).length) return g.minimatch;
			let t = g.minimatch;
			return Object.assign((s, i, r = {}) => t(s, i, F(n, r)), {
				Minimatch: class extends t.Minimatch {
					constructor(i, r = {}) {
						super(i, F(n, r));
					}
					static defaults(i) {
						return t.defaults(F(n, i)).Minimatch;
					}
				},
				AST: class extends t.AST {
					constructor(i, r, h = {}) {
						super(i, r, F(n, h));
					}
					static fromGlob(i, r = {}) {
						return t.AST.fromGlob(i, F(n, r));
					}
				},
				unescape: (s, i = {}) => t.unescape(s, F(n, i)),
				escape: (s, i = {}) => t.escape(s, F(n, i)),
				filter: (s, i = {}) => t.filter(s, F(n, i)),
				defaults: (s) => t.defaults(F(n, s)),
				makeRe: (s, i = {}) => t.makeRe(s, F(n, i)),
				braceExpand: (s, i = {}) => t.braceExpand(s, F(n, i)),
				match: (s, i, r = {}) => t.match(s, i, F(n, r)),
				sep: t.sep,
				GLOBSTAR: g.GLOBSTAR
			});
		};
		g.defaults = Vi;
		g.minimatch.defaults = g.defaults;
		var Ki = (n, t = {}) => ((0, jt.assertValidPattern)(n), t.nobrace || !/\{(?:(?!\{).)*\}/.test(n) ? [n] : (0, Si.expand)(n, { max: t.braceExpandMax }));
		g.braceExpand = Ki;
		g.minimatch.braceExpand = g.braceExpand;
		var Xi = (n, t = {}) => new J(n, t).makeRe();
		g.makeRe = Xi;
		g.minimatch.makeRe = g.makeRe;
		var Yi = (n, t, e = {}) => {
			let s = new J(t, e);
			return n = n.filter((i) => s.match(i)), s.options.nonull && !n.length && n.push(t), n;
		};
		g.match = Yi;
		g.minimatch.match = g.match;
		var ss = /[?*]|[+@!]\(.*?\)|\[|\]/, Ji = (n) => n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), J = class {
			options;
			set;
			pattern;
			windowsPathsNoEscape;
			nonegate;
			negate;
			comment;
			empty;
			preserveMultipleSlashes;
			partial;
			globSet;
			globParts;
			nocase;
			isWindows;
			platform;
			windowsNoMagicRoot;
			regexp;
			constructor(t, e = {}) {
				(0, jt.assertValidPattern)(t), e = e || {}, this.options = e, this.pattern = t, this.platform = e.platform || hs, this.isWindows = this.platform === "win32";
				let s = "allowWindowsEscape";
				this.windowsPathsNoEscape = !!e.windowsPathsNoEscape || e[s] === !1, this.windowsPathsNoEscape && (this.pattern = this.pattern.replace(/\\/g, "/")), this.preserveMultipleSlashes = !!e.preserveMultipleSlashes, this.regexp = null, this.negate = !1, this.nonegate = !!e.nonegate, this.comment = !1, this.empty = !1, this.partial = !!e.partial, this.nocase = !!this.options.nocase, this.windowsNoMagicRoot = e.windowsNoMagicRoot !== void 0 ? e.windowsNoMagicRoot : !!(this.isWindows && this.nocase), this.globSet = [], this.globParts = [], this.set = [], this.make();
			}
			hasMagic() {
				if (this.options.magicalBraces && this.set.length > 1) return !0;
				for (let t of this.set) for (let e of t) if (typeof e != "string") return !0;
				return !1;
			}
			debug(...t) {}
			make() {
				let t = this.pattern, e = this.options;
				if (!e.nocomment && t.charAt(0) === "#") {
					this.comment = !0;
					return;
				}
				if (!t) {
					this.empty = !0;
					return;
				}
				this.parseNegate(), this.globSet = [...new Set(this.braceExpand())], e.debug && (this.debug = (...r) => console.error(...r)), this.debug(this.pattern, this.globSet);
				let s = this.globSet.map((r) => this.slashSplit(r));
				this.globParts = this.preprocess(s), this.debug(this.pattern, this.globParts);
				let i = this.globParts.map((r, h, o) => {
					if (this.isWindows && this.windowsNoMagicRoot) {
						let a = r[0] === "" && r[1] === "" && (r[2] === "?" || !ss.test(r[2])) && !ss.test(r[3]), l = /^[a-z]:/i.test(r[0]);
						if (a) return [...r.slice(0, 4), ...r.slice(4).map((f) => this.parse(f))];
						if (l) return [r[0], ...r.slice(1).map((f) => this.parse(f))];
					}
					return r.map((a) => this.parse(a));
				});
				if (this.debug(this.pattern, i), this.set = i.filter((r) => r.indexOf(!1) === -1), this.isWindows) for (let r = 0; r < this.set.length; r++) {
					let h = this.set[r];
					h[0] === "" && h[1] === "" && this.globParts[r][2] === "?" && typeof h[3] == "string" && /^[a-z]:$/i.test(h[3]) && (h[2] = "?");
				}
				this.debug(this.pattern, this.set);
			}
			preprocess(t) {
				if (this.options.noglobstar) for (let s = 0; s < t.length; s++) for (let i = 0; i < t[s].length; i++) t[s][i] === "**" && (t[s][i] = "*");
				let { optimizationLevel: e = 1 } = this.options;
				return e >= 2 ? (t = this.firstPhasePreProcess(t), t = this.secondPhasePreProcess(t)) : e >= 1 ? t = this.levelOneOptimize(t) : t = this.adjascentGlobstarOptimize(t), t;
			}
			adjascentGlobstarOptimize(t) {
				return t.map((e) => {
					let s = -1;
					for (; (s = e.indexOf("**", s + 1)) !== -1;) {
						let i = s;
						for (; e[i + 1] === "**";) i++;
						i !== s && e.splice(s, i - s);
					}
					return e;
				});
			}
			levelOneOptimize(t) {
				return t.map((e) => (e = e.reduce((s, i) => {
					let r = s[s.length - 1];
					return i === "**" && r === "**" ? s : i === ".." && r && r !== ".." && r !== "." && r !== "**" ? (s.pop(), s) : (s.push(i), s);
				}, []), e.length === 0 ? [""] : e));
			}
			levelTwoFileOptimize(t) {
				Array.isArray(t) || (t = this.slashSplit(t));
				let e = !1;
				do {
					if (e = !1, !this.preserveMultipleSlashes) {
						for (let i = 1; i < t.length - 1; i++) {
							let r = t[i];
							i === 1 && r === "" && t[0] === "" || (r === "." || r === "") && (e = !0, t.splice(i, 1), i--);
						}
						t[0] === "." && t.length === 2 && (t[1] === "." || t[1] === "") && (e = !0, t.pop());
					}
					let s = 0;
					for (; (s = t.indexOf("..", s + 1)) !== -1;) {
						let i = t[s - 1];
						i && i !== "." && i !== ".." && i !== "**" && (e = !0, t.splice(s - 1, 2), s -= 2);
					}
				} while (e);
				return t.length === 0 ? [""] : t;
			}
			firstPhasePreProcess(t) {
				let e = !1;
				do {
					e = !1;
					for (let s of t) {
						let i = -1;
						for (; (i = s.indexOf("**", i + 1)) !== -1;) {
							let h = i;
							for (; s[h + 1] === "**";) h++;
							h > i && s.splice(i + 1, h - i);
							let o = s[i + 1], a = s[i + 2], l = s[i + 3];
							if (o !== ".." || !a || a === "." || a === ".." || !l || l === "." || l === "..") continue;
							e = !0, s.splice(i, 1);
							let f = s.slice(0);
							f[i] = "**", t.push(f), i--;
						}
						if (!this.preserveMultipleSlashes) {
							for (let h = 1; h < s.length - 1; h++) {
								let o = s[h];
								h === 1 && o === "" && s[0] === "" || (o === "." || o === "") && (e = !0, s.splice(h, 1), h--);
							}
							s[0] === "." && s.length === 2 && (s[1] === "." || s[1] === "") && (e = !0, s.pop());
						}
						let r = 0;
						for (; (r = s.indexOf("..", r + 1)) !== -1;) {
							let h = s[r - 1];
							if (h && h !== "." && h !== ".." && h !== "**") {
								e = !0;
								let a = r === 1 && s[r + 1] === "**" ? ["."] : [];
								s.splice(r - 1, 2, ...a), s.length === 0 && s.push(""), r -= 2;
							}
						}
					}
				} while (e);
				return t;
			}
			secondPhasePreProcess(t) {
				for (let e = 0; e < t.length - 1; e++) for (let s = e + 1; s < t.length; s++) {
					let i = this.partsMatch(t[e], t[s], !this.preserveMultipleSlashes);
					if (i) {
						t[e] = [], t[s] = i;
						break;
					}
				}
				return t.filter((e) => e.length);
			}
			partsMatch(t, e, s = !1) {
				let i = 0, r = 0, h = [], o = "";
				for (; i < t.length && r < e.length;) if (t[i] === e[r]) h.push(o === "b" ? e[r] : t[i]), i++, r++;
				else if (s && t[i] === "**" && e[r] === t[i + 1]) h.push(t[i]), i++;
				else if (s && e[r] === "**" && t[i] === e[r + 1]) h.push(e[r]), r++;
				else if (t[i] === "*" && e[r] && (this.options.dot || !e[r].startsWith(".")) && e[r] !== "**") {
					if (o === "b") return !1;
					o = "a", h.push(t[i]), i++, r++;
				} else if (e[r] === "*" && t[i] && (this.options.dot || !t[i].startsWith(".")) && t[i] !== "**") {
					if (o === "a") return !1;
					o = "b", h.push(e[r]), i++, r++;
				} else return !1;
				return t.length === e.length && h;
			}
			parseNegate() {
				if (this.nonegate) return;
				let t = this.pattern, e = !1, s = 0;
				for (let i = 0; i < t.length && t.charAt(i) === "!"; i++) e = !e, s++;
				s && (this.pattern = t.slice(s)), this.negate = e;
			}
			matchOne(t, e, s = !1) {
				let i = this.options;
				if (this.isWindows) {
					let p = typeof t[0] == "string" && /^[a-z]:$/i.test(t[0]), b = !p && t[0] === "" && t[1] === "" && t[2] === "?" && /^[a-z]:$/i.test(t[3]), w = typeof e[0] == "string" && /^[a-z]:$/i.test(e[0]), v = !w && e[0] === "" && e[1] === "" && e[2] === "?" && typeof e[3] == "string" && /^[a-z]:$/i.test(e[3]), E = b ? 3 : p ? 0 : void 0, y = v ? 3 : w ? 0 : void 0;
					if (typeof E == "number" && typeof y == "number") {
						let [S, B] = [t[E], e[y]];
						S.toLowerCase() === B.toLowerCase() && (e[y] = S, y > E ? e = e.slice(y) : E > y && (t = t.slice(E)));
					}
				}
				let { optimizationLevel: r = 1 } = this.options;
				r >= 2 && (t = this.levelTwoFileOptimize(t)), this.debug("matchOne", this, {
					file: t,
					pattern: e
				}), this.debug("matchOne", t.length, e.length);
				for (var h = 0, o = 0, a = t.length, l = e.length; h < a && o < l; h++, o++) {
					this.debug("matchOne loop");
					var f = e[o], c = t[h];
					if (this.debug(e, f, c), f === !1) return !1;
					if (f === g.GLOBSTAR) {
						this.debug("GLOBSTAR", [
							e,
							f,
							c
						]);
						var d = h, u = o + 1;
						if (u === l) {
							for (this.debug("** at the end"); h < a; h++) if (t[h] === "." || t[h] === ".." || !i.dot && t[h].charAt(0) === ".") return !1;
							return !0;
						}
						for (; d < a;) {
							var m = t[d];
							if (this.debug(`
globstar while`, t, d, e, u, m), this.matchOne(t.slice(d), e.slice(u), s)) return this.debug("globstar found match!", d, a, m), !0;
							if (m === "." || m === ".." || !i.dot && m.charAt(0) === ".") {
								this.debug("dot detected!", t, d, e, u);
								break;
							}
							this.debug("globstar swallow a segment, and continue"), d++;
						}
						return !!(s && (this.debug(`
>>> no match, partial?`, t, d, e, u), d === a));
					}
					let p;
					if (typeof f == "string" ? (p = c === f, this.debug("string match", f, c, p)) : (p = f.test(c), this.debug("pattern match", f, c, p)), !p) return !1;
				}
				if (h === a && o === l) return !0;
				if (h === a) return s;
				if (o === l) return h === a - 1 && t[h] === "";
				throw new Error("wtf?");
			}
			braceExpand() {
				return (0, g.braceExpand)(this.pattern, this.options);
			}
			parse(t) {
				(0, jt.assertValidPattern)(t);
				let e = this.options;
				if (t === "**") return g.GLOBSTAR;
				if (t === "") return "";
				let s, i = null;
				(s = t.match(Fi)) ? i = e.dot ? Ni : ji : (s = t.match(Oi)) ? i = (e.nocase ? e.dot ? Ri : Ci : e.dot ? Ti : xi)(s[1]) : (s = t.match(Li)) ? i = (e.nocase ? e.dot ? Bi : Wi : e.dot ? Ii : Gi)(s) : (s = t.match(Ai)) ? i = e.dot ? Mi : ki : (s = t.match(Pi)) && (i = Di);
				let r = is.AST.fromGlob(t, this.options).toMMPattern();
				return i && typeof r == "object" && Reflect.defineProperty(r, "test", { value: i }), r;
			}
			makeRe() {
				if (this.regexp || this.regexp === !1) return this.regexp;
				let t = this.set;
				if (!t.length) return this.regexp = !1, this.regexp;
				let e = this.options, s = e.noglobstar ? Ui : e.dot ? $i : qi, i = new Set(e.nocase ? ["i"] : []), r = t.map((a) => {
					let l = a.map((c) => {
						if (c instanceof RegExp) for (let d of c.flags.split("")) i.add(d);
						return typeof c == "string" ? Ji(c) : c === g.GLOBSTAR ? g.GLOBSTAR : c._src;
					});
					l.forEach((c, d) => {
						let u = l[d + 1], m = l[d - 1];
						c !== g.GLOBSTAR || m === g.GLOBSTAR || (m === void 0 ? u !== void 0 && u !== g.GLOBSTAR ? l[d + 1] = "(?:\\/|" + s + "\\/)?" + u : l[d] = s : u === void 0 ? l[d - 1] = m + "(?:\\/|\\/" + s + ")?" : u !== g.GLOBSTAR && (l[d - 1] = m + "(?:\\/|\\/" + s + "\\/)" + u, l[d + 1] = g.GLOBSTAR));
					});
					let f = l.filter((c) => c !== g.GLOBSTAR);
					if (this.partial && f.length >= 1) {
						let c = [];
						for (let d = 1; d <= f.length; d++) c.push(f.slice(0, d).join("/"));
						return "(?:" + c.join("|") + ")";
					}
					return f.join("/");
				}).join("|"), [h, o] = t.length > 1 ? ["(?:", ")"] : ["", ""];
				r = "^" + h + r + o + "$", this.partial && (r = "^(?:\\/|" + h + r.slice(1, -1) + o + ")$"), this.negate && (r = "^(?!" + r + ").+$");
				try {
					this.regexp = new RegExp(r, [...i].join(""));
				} catch {
					this.regexp = !1;
				}
				return this.regexp;
			}
			slashSplit(t) {
				return this.preserveMultipleSlashes ? t.split("/") : this.isWindows && /^\/\/[^\/]+/.test(t) ? ["", ...t.split(/\/+/)] : t.split(/\/+/);
			}
			match(t, e = this.partial) {
				if (this.debug("match", t, this.pattern), this.comment) return !1;
				if (this.empty) return t === "";
				if (t === "/" && e) return !0;
				let s = this.options;
				this.isWindows && (t = t.split("\\").join("/"));
				let i = this.slashSplit(t);
				this.debug(this.pattern, "split", i);
				let r = this.set;
				this.debug(this.pattern, "set", r);
				let h = i[i.length - 1];
				if (!h) for (let o = i.length - 2; !h && o >= 0; o--) h = i[o];
				for (let o = 0; o < r.length; o++) {
					let a = r[o], l = i;
					if (s.matchBase && a.length === 1 && (l = [h]), this.matchOne(l, a, e)) return s.flipNegate ? !0 : !this.negate;
				}
				return s.flipNegate ? !1 : this.negate;
			}
			static defaults(t) {
				return g.minimatch.defaults(t).Minimatch;
			}
		};
		g.Minimatch = J;
		var Zi = pe();
		Object.defineProperty(g, "AST", {
			enumerable: !0,
			get: function() {
				return Zi.AST;
			}
		});
		var Qi = me();
		Object.defineProperty(g, "escape", {
			enumerable: !0,
			get: function() {
				return Qi.escape;
			}
		});
		var tr = kt();
		Object.defineProperty(g, "unescape", {
			enumerable: !0,
			get: function() {
				return tr.unescape;
			}
		});
		g.minimatch.AST = is.AST;
		g.minimatch.Minimatch = J;
		g.minimatch.escape = vi.escape;
		g.minimatch.unescape = Ei.unescape;
	});
	var fs = R((Wt) => {
		"use strict";
		Object.defineProperty(Wt, "__esModule", { value: !0 });
		Wt.LRUCache = void 0;
		var er = typeof performance == "object" && performance && typeof performance.now == "function" ? performance : Date, as = /* @__PURE__ */ new Set(), ge = typeof process == "object" && process ? process : {}, ls = (n, t, e, s) => {
			typeof ge.emitWarning == "function" ? ge.emitWarning(n, t, e, s) : console.error(`[${e}] ${t}: ${n}`);
		}, Lt = globalThis.AbortController, os = globalThis.AbortSignal;
		if (typeof Lt > "u") {
			os = class {
				onabort;
				_onabort = [];
				reason;
				aborted = !1;
				addEventListener(e, s) {
					this._onabort.push(s);
				}
			}, Lt = class {
				constructor() {
					t();
				}
				signal = new os();
				abort(e) {
					if (!this.signal.aborted) {
						this.signal.reason = e, this.signal.aborted = !0;
						for (let s of this.signal._onabort) s(e);
						this.signal.onabort?.(e);
					}
				}
			};
			let n = ge.env?.LRU_CACHE_IGNORE_AC_WARNING !== "1", t = () => {
				n && (n = !1, ls("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.", "NO_ABORT_CONTROLLER", "ENOTSUP", t));
			};
		}
		var sr = (n) => !as.has(n), V = (n) => n && n === Math.floor(n) && n > 0 && isFinite(n), cs = (n) => V(n) ? n <= Math.pow(2, 8) ? Uint8Array : n <= Math.pow(2, 16) ? Uint16Array : n <= Math.pow(2, 32) ? Uint32Array : n <= Number.MAX_SAFE_INTEGER ? Nt : null : null, Nt = class extends Array {
			constructor(n) {
				super(n), this.fill(0);
			}
		}, ir = class at {
			heap;
			length;
			static #t = !1;
			static create(t) {
				let e = cs(t);
				if (!e) return [];
				at.#t = !0;
				let s = new at(t, e);
				return at.#t = !1, s;
			}
			constructor(t, e) {
				if (!at.#t) throw new TypeError("instantiate Stack using Stack.create(n)");
				this.heap = new e(t), this.length = 0;
			}
			push(t) {
				this.heap[this.length++] = t;
			}
			pop() {
				return this.heap[--this.length];
			}
		};
		Wt.LRUCache = class us {
			#t;
			#s;
			#n;
			#r;
			#h;
			#S;
			#w;
			#c;
			get perf() {
				return this.#c;
			}
			ttl;
			ttlResolution;
			ttlAutopurge;
			updateAgeOnGet;
			updateAgeOnHas;
			allowStale;
			noDisposeOnSet;
			noUpdateTTL;
			maxEntrySize;
			sizeCalculation;
			noDeleteOnFetchRejection;
			noDeleteOnStaleGet;
			allowStaleOnFetchAbort;
			allowStaleOnFetchRejection;
			ignoreFetchAbort;
			#o;
			#f;
			#u;
			#a;
			#i;
			#d;
			#v;
			#y;
			#p;
			#R;
			#m;
			#O;
			#x;
			#g;
			#b;
			#E;
			#T;
			#e;
			#F;
			static unsafeExposeInternals(t) {
				return {
					starts: t.#x,
					ttls: t.#g,
					autopurgeTimers: t.#b,
					sizes: t.#O,
					keyMap: t.#u,
					keyList: t.#a,
					valList: t.#i,
					next: t.#d,
					prev: t.#v,
					get head() {
						return t.#y;
					},
					get tail() {
						return t.#p;
					},
					free: t.#R,
					isBackgroundFetch: (e) => t.#l(e),
					backgroundFetch: (e, s, i, r) => t.#z(e, s, i, r),
					moveToTail: (e) => t.#N(e),
					indexes: (e) => t.#k(e),
					rindexes: (e) => t.#M(e),
					isStale: (e) => t.#_(e)
				};
			}
			get max() {
				return this.#t;
			}
			get maxSize() {
				return this.#s;
			}
			get calculatedSize() {
				return this.#f;
			}
			get size() {
				return this.#o;
			}
			get fetchMethod() {
				return this.#S;
			}
			get memoMethod() {
				return this.#w;
			}
			get dispose() {
				return this.#n;
			}
			get onInsert() {
				return this.#r;
			}
			get disposeAfter() {
				return this.#h;
			}
			constructor(t) {
				let { max: e = 0, ttl: s, ttlResolution: i = 1, ttlAutopurge: r, updateAgeOnGet: h, updateAgeOnHas: o, allowStale: a, dispose: l, onInsert: f, disposeAfter: c, noDisposeOnSet: d, noUpdateTTL: u, maxSize: m = 0, maxEntrySize: p = 0, sizeCalculation: b, fetchMethod: w, memoMethod: v, noDeleteOnFetchRejection: E, noDeleteOnStaleGet: y, allowStaleOnFetchRejection: S, allowStaleOnFetchAbort: B, ignoreFetchAbort: U, perf: et } = t;
				if (et !== void 0 && typeof et?.now != "function") throw new TypeError("perf option must have a now() method if specified");
				if (this.#c = et ?? er, e !== 0 && !V(e)) throw new TypeError("max option must be a nonnegative integer");
				let st = e ? cs(e) : Array;
				if (!st) throw new Error("invalid max value: " + e);
				if (this.#t = e, this.#s = m, this.maxEntrySize = p || this.#s, this.sizeCalculation = b, this.sizeCalculation) {
					if (!this.#s && !this.maxEntrySize) throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");
					if (typeof this.sizeCalculation != "function") throw new TypeError("sizeCalculation set to non-function");
				}
				if (v !== void 0 && typeof v != "function") throw new TypeError("memoMethod must be a function if defined");
				if (this.#w = v, w !== void 0 && typeof w != "function") throw new TypeError("fetchMethod must be a function if specified");
				if (this.#S = w, this.#T = !!w, this.#u = /* @__PURE__ */ new Map(), this.#a = new Array(e).fill(void 0), this.#i = new Array(e).fill(void 0), this.#d = new st(e), this.#v = new st(e), this.#y = 0, this.#p = 0, this.#R = ir.create(e), this.#o = 0, this.#f = 0, typeof l == "function" && (this.#n = l), typeof f == "function" && (this.#r = f), typeof c == "function" ? (this.#h = c, this.#m = []) : (this.#h = void 0, this.#m = void 0), this.#E = !!this.#n, this.#F = !!this.#r, this.#e = !!this.#h, this.noDisposeOnSet = !!d, this.noUpdateTTL = !!u, this.noDeleteOnFetchRejection = !!E, this.allowStaleOnFetchRejection = !!S, this.allowStaleOnFetchAbort = !!B, this.ignoreFetchAbort = !!U, this.maxEntrySize !== 0) {
					if (this.#s !== 0 && !V(this.#s)) throw new TypeError("maxSize must be a positive integer if specified");
					if (!V(this.maxEntrySize)) throw new TypeError("maxEntrySize must be a positive integer if specified");
					this.#$();
				}
				if (this.allowStale = !!a, this.noDeleteOnStaleGet = !!y, this.updateAgeOnGet = !!h, this.updateAgeOnHas = !!o, this.ttlResolution = V(i) || i === 0 ? i : 1, this.ttlAutopurge = !!r, this.ttl = s || 0, this.ttl) {
					if (!V(this.ttl)) throw new TypeError("ttl must be a positive integer if specified");
					this.#P();
				}
				if (this.#t === 0 && this.ttl === 0 && this.#s === 0) throw new TypeError("At least one of max, maxSize, or ttl is required");
				if (!this.ttlAutopurge && !this.#t && !this.#s) {
					let le = "LRU_CACHE_UNBOUNDED";
					sr(le) && (as.add(le), ls("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.", "UnboundedCacheWarning", le, us));
				}
			}
			getRemainingTTL(t) {
				return this.#u.has(t) ? Infinity : 0;
			}
			#P() {
				let t = new Nt(this.#t), e = new Nt(this.#t);
				this.#g = t, this.#x = e;
				let s = this.ttlAutopurge ? new Array(this.#t) : void 0;
				this.#b = s, this.#W = (h, o, a = this.#c.now()) => {
					if (e[h] = o !== 0 ? a : 0, t[h] = o, s?.[h] && (clearTimeout(s[h]), s[h] = void 0), o !== 0 && s) {
						let l = setTimeout(() => {
							this.#_(h) && this.#A(this.#a[h], "expire");
						}, o + 1);
						l.unref && l.unref(), s[h] = l;
					}
				}, this.#C = (h) => {
					e[h] = t[h] !== 0 ? this.#c.now() : 0;
				}, this.#D = (h, o) => {
					if (t[o]) {
						let a = t[o], l = e[o];
						if (!a || !l) return;
						h.ttl = a, h.start = l, h.now = i || r();
						h.remainingTTL = a - (h.now - l);
					}
				};
				let i = 0, r = () => {
					let h = this.#c.now();
					if (this.ttlResolution > 0) {
						i = h;
						let o = setTimeout(() => i = 0, this.ttlResolution);
						o.unref && o.unref();
					}
					return h;
				};
				this.getRemainingTTL = (h) => {
					let o = this.#u.get(h);
					if (o === void 0) return 0;
					let a = t[o], l = e[o];
					if (!a || !l) return Infinity;
					return a - ((i || r()) - l);
				}, this.#_ = (h) => {
					let o = e[h], a = t[h];
					return !!a && !!o && (i || r()) - o > a;
				};
			}
			#C = () => {};
			#D = () => {};
			#W = () => {};
			#_ = () => !1;
			#$() {
				let t = new Nt(this.#t);
				this.#f = 0, this.#O = t, this.#L = (e) => {
					this.#f -= t[e], t[e] = 0;
				}, this.#B = (e, s, i, r) => {
					if (this.#l(s)) return 0;
					if (!V(i)) if (r) {
						if (typeof r != "function") throw new TypeError("sizeCalculation must be a function");
						if (i = r(s, e), !V(i)) throw new TypeError("sizeCalculation return invalid (expect positive integer)");
					} else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");
					return i;
				}, this.#j = (e, s, i) => {
					if (t[e] = s, this.#s) {
						let r = this.#s - t[e];
						for (; this.#f > r;) this.#G(!0);
					}
					this.#f += t[e], i && (i.entrySize = s, i.totalCalculatedSize = this.#f);
				};
			}
			#L = (t) => {};
			#j = (t, e, s) => {};
			#B = (t, e, s, i) => {
				if (s || i) throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");
				return 0;
			};
			*#k({ allowStale: t = this.allowStale } = {}) {
				if (this.#o) for (let e = this.#p; !(!this.#I(e) || ((t || !this.#_(e)) && (yield e), e === this.#y));) e = this.#v[e];
			}
			*#M({ allowStale: t = this.allowStale } = {}) {
				if (this.#o) for (let e = this.#y; !(!this.#I(e) || ((t || !this.#_(e)) && (yield e), e === this.#p));) e = this.#d[e];
			}
			#I(t) {
				return t !== void 0 && this.#u.get(this.#a[t]) === t;
			}
			*entries() {
				for (let t of this.#k()) this.#i[t] !== void 0 && this.#a[t] !== void 0 && !this.#l(this.#i[t]) && (yield [this.#a[t], this.#i[t]]);
			}
			*rentries() {
				for (let t of this.#M()) this.#i[t] !== void 0 && this.#a[t] !== void 0 && !this.#l(this.#i[t]) && (yield [this.#a[t], this.#i[t]]);
			}
			*keys() {
				for (let t of this.#k()) {
					let e = this.#a[t];
					e !== void 0 && !this.#l(this.#i[t]) && (yield e);
				}
			}
			*rkeys() {
				for (let t of this.#M()) {
					let e = this.#a[t];
					e !== void 0 && !this.#l(this.#i[t]) && (yield e);
				}
			}
			*values() {
				for (let t of this.#k()) this.#i[t] !== void 0 && !this.#l(this.#i[t]) && (yield this.#i[t]);
			}
			*rvalues() {
				for (let t of this.#M()) this.#i[t] !== void 0 && !this.#l(this.#i[t]) && (yield this.#i[t]);
			}
			[Symbol.iterator]() {
				return this.entries();
			}
			[Symbol.toStringTag] = "LRUCache";
			find(t, e = {}) {
				for (let s of this.#k()) {
					let i = this.#i[s], r = this.#l(i) ? i.__staleWhileFetching : i;
					if (r !== void 0 && t(r, this.#a[s], this)) return this.get(this.#a[s], e);
				}
			}
			forEach(t, e = this) {
				for (let s of this.#k()) {
					let i = this.#i[s], r = this.#l(i) ? i.__staleWhileFetching : i;
					r !== void 0 && t.call(e, r, this.#a[s], this);
				}
			}
			rforEach(t, e = this) {
				for (let s of this.#M()) {
					let i = this.#i[s], r = this.#l(i) ? i.__staleWhileFetching : i;
					r !== void 0 && t.call(e, r, this.#a[s], this);
				}
			}
			purgeStale() {
				let t = !1;
				for (let e of this.#M({ allowStale: !0 })) this.#_(e) && (this.#A(this.#a[e], "expire"), t = !0);
				return t;
			}
			info(t) {
				let e = this.#u.get(t);
				if (e === void 0) return;
				let s = this.#i[e], i = this.#l(s) ? s.__staleWhileFetching : s;
				if (i === void 0) return;
				let r = { value: i };
				if (this.#g && this.#x) {
					let h = this.#g[e], o = this.#x[e];
					if (h && o) r.ttl = h - (this.#c.now() - o), r.start = Date.now();
				}
				return this.#O && (r.size = this.#O[e]), r;
			}
			dump() {
				let t = [];
				for (let e of this.#k({ allowStale: !0 })) {
					let s = this.#a[e], i = this.#i[e], r = this.#l(i) ? i.__staleWhileFetching : i;
					if (r === void 0 || s === void 0) continue;
					let h = { value: r };
					if (this.#g && this.#x) {
						h.ttl = this.#g[e];
						let o = this.#c.now() - this.#x[e];
						h.start = Math.floor(Date.now() - o);
					}
					this.#O && (h.size = this.#O[e]), t.unshift([s, h]);
				}
				return t;
			}
			load(t) {
				this.clear();
				for (let [e, s] of t) {
					if (s.start) {
						let i = Date.now() - s.start;
						s.start = this.#c.now() - i;
					}
					this.set(e, s.value, s);
				}
			}
			set(t, e, s = {}) {
				if (e === void 0) return this.delete(t), this;
				let { ttl: i = this.ttl, start: r, noDisposeOnSet: h = this.noDisposeOnSet, sizeCalculation: o = this.sizeCalculation, status: a } = s, { noUpdateTTL: l = this.noUpdateTTL } = s, f = this.#B(t, e, s.size || 0, o);
				if (this.maxEntrySize && f > this.maxEntrySize) return a && (a.set = "miss", a.maxEntrySizeExceeded = !0), this.#A(t, "set"), this;
				let c = this.#o === 0 ? void 0 : this.#u.get(t);
				if (c === void 0) c = this.#o === 0 ? this.#p : this.#R.length !== 0 ? this.#R.pop() : this.#o === this.#t ? this.#G(!1) : this.#o, this.#a[c] = t, this.#i[c] = e, this.#u.set(t, c), this.#d[this.#p] = c, this.#v[c] = this.#p, this.#p = c, this.#o++, this.#j(c, f, a), a && (a.set = "add"), l = !1, this.#F && this.#r?.(e, t, "add");
				else {
					this.#N(c);
					let d = this.#i[c];
					if (e !== d) {
						if (this.#T && this.#l(d)) {
							d.__abortController.abort(/* @__PURE__ */ new Error("replaced"));
							let { __staleWhileFetching: u } = d;
							u !== void 0 && !h && (this.#E && this.#n?.(u, t, "set"), this.#e && this.#m?.push([
								u,
								t,
								"set"
							]));
						} else h || (this.#E && this.#n?.(d, t, "set"), this.#e && this.#m?.push([
							d,
							t,
							"set"
						]));
						if (this.#L(c), this.#j(c, f, a), this.#i[c] = e, a) {
							a.set = "replace";
							let u = d && this.#l(d) ? d.__staleWhileFetching : d;
							u !== void 0 && (a.oldValue = u);
						}
					} else a && (a.set = "update");
					this.#F && this.onInsert?.(e, t, e === d ? "update" : "replace");
				}
				if (i !== 0 && !this.#g && this.#P(), this.#g && (l || this.#W(c, i, r), a && this.#D(a, c)), !h && this.#e && this.#m) {
					let d = this.#m, u;
					for (; u = d?.shift();) this.#h?.(...u);
				}
				return this;
			}
			pop() {
				try {
					for (; this.#o;) {
						let t = this.#i[this.#y];
						if (this.#G(!0), this.#l(t)) {
							if (t.__staleWhileFetching) return t.__staleWhileFetching;
						} else if (t !== void 0) return t;
					}
				} finally {
					if (this.#e && this.#m) {
						let t = this.#m, e;
						for (; e = t?.shift();) this.#h?.(...e);
					}
				}
			}
			#G(t) {
				let e = this.#y, s = this.#a[e], i = this.#i[e];
				return this.#T && this.#l(i) ? i.__abortController.abort(/* @__PURE__ */ new Error("evicted")) : (this.#E || this.#e) && (this.#E && this.#n?.(i, s, "evict"), this.#e && this.#m?.push([
					i,
					s,
					"evict"
				])), this.#L(e), this.#b?.[e] && (clearTimeout(this.#b[e]), this.#b[e] = void 0), t && (this.#a[e] = void 0, this.#i[e] = void 0, this.#R.push(e)), this.#o === 1 ? (this.#y = this.#p = 0, this.#R.length = 0) : this.#y = this.#d[e], this.#u.delete(s), this.#o--, e;
			}
			has(t, e = {}) {
				let { updateAgeOnHas: s = this.updateAgeOnHas, status: i } = e, r = this.#u.get(t);
				if (r !== void 0) {
					let h = this.#i[r];
					if (this.#l(h) && h.__staleWhileFetching === void 0) return !1;
					if (this.#_(r)) i && (i.has = "stale", this.#D(i, r));
					else return s && this.#C(r), i && (i.has = "hit", this.#D(i, r)), !0;
				} else i && (i.has = "miss");
				return !1;
			}
			peek(t, e = {}) {
				let { allowStale: s = this.allowStale } = e, i = this.#u.get(t);
				if (i === void 0 || !s && this.#_(i)) return;
				let r = this.#i[i];
				return this.#l(r) ? r.__staleWhileFetching : r;
			}
			#z(t, e, s, i) {
				let r = e === void 0 ? void 0 : this.#i[e];
				if (this.#l(r)) return r;
				let h = new Lt(), { signal: o } = s;
				o?.addEventListener("abort", () => h.abort(o.reason), { signal: h.signal });
				let a = {
					signal: h.signal,
					options: s,
					context: i
				}, l = (p, b = !1) => {
					let { aborted: w } = h.signal, v = s.ignoreFetchAbort && p !== void 0, E = s.ignoreFetchAbort || !!(s.allowStaleOnFetchAbort && p !== void 0);
					if (s.status && (w && !b ? (s.status.fetchAborted = !0, s.status.fetchError = h.signal.reason, v && (s.status.fetchAbortIgnored = !0)) : s.status.fetchResolved = !0), w && !v && !b) return c(h.signal.reason, E);
					let y = u, S = this.#i[e];
					return (S === u || v && b && S === void 0) && (p === void 0 ? y.__staleWhileFetching !== void 0 ? this.#i[e] = y.__staleWhileFetching : this.#A(t, "fetch") : (s.status && (s.status.fetchUpdated = !0), this.set(t, p, a.options))), p;
				}, f = (p) => (s.status && (s.status.fetchRejected = !0, s.status.fetchError = p), c(p, !1)), c = (p, b) => {
					let { aborted: w } = h.signal, v = w && s.allowStaleOnFetchAbort, E = v || s.allowStaleOnFetchRejection, y = E || s.noDeleteOnFetchRejection, S = u;
					if (this.#i[e] === u && (!y || !b && S.__staleWhileFetching === void 0 ? this.#A(t, "fetch") : v || (this.#i[e] = S.__staleWhileFetching)), E) return s.status && S.__staleWhileFetching !== void 0 && (s.status.returnedStale = !0), S.__staleWhileFetching;
					if (S.__returned === S) throw p;
				}, d = (p, b) => {
					let w = this.#S?.(t, r, a);
					w && w instanceof Promise && w.then((v) => p(v === void 0 ? void 0 : v), b), h.signal.addEventListener("abort", () => {
						(!s.ignoreFetchAbort || s.allowStaleOnFetchAbort) && (p(void 0), s.allowStaleOnFetchAbort && (p = (v) => l(v, !0)));
					});
				};
				s.status && (s.status.fetchDispatched = !0);
				let u = new Promise(d).then(l, f), m = Object.assign(u, {
					__abortController: h,
					__staleWhileFetching: r,
					__returned: void 0
				});
				return e === void 0 ? (this.set(t, m, {
					...a.options,
					status: void 0
				}), e = this.#u.get(t)) : this.#i[e] = m, m;
			}
			#l(t) {
				if (!this.#T) return !1;
				let e = t;
				return !!e && e instanceof Promise && e.hasOwnProperty("__staleWhileFetching") && e.__abortController instanceof Lt;
			}
			async fetch(t, e = {}) {
				let { allowStale: s = this.allowStale, updateAgeOnGet: i = this.updateAgeOnGet, noDeleteOnStaleGet: r = this.noDeleteOnStaleGet, ttl: h = this.ttl, noDisposeOnSet: o = this.noDisposeOnSet, size: a = 0, sizeCalculation: l = this.sizeCalculation, noUpdateTTL: f = this.noUpdateTTL, noDeleteOnFetchRejection: c = this.noDeleteOnFetchRejection, allowStaleOnFetchRejection: d = this.allowStaleOnFetchRejection, ignoreFetchAbort: u = this.ignoreFetchAbort, allowStaleOnFetchAbort: m = this.allowStaleOnFetchAbort, context: p, forceRefresh: b = !1, status: w, signal: v } = e;
				if (!this.#T) return w && (w.fetch = "get"), this.get(t, {
					allowStale: s,
					updateAgeOnGet: i,
					noDeleteOnStaleGet: r,
					status: w
				});
				let E = {
					allowStale: s,
					updateAgeOnGet: i,
					noDeleteOnStaleGet: r,
					ttl: h,
					noDisposeOnSet: o,
					size: a,
					sizeCalculation: l,
					noUpdateTTL: f,
					noDeleteOnFetchRejection: c,
					allowStaleOnFetchRejection: d,
					allowStaleOnFetchAbort: m,
					ignoreFetchAbort: u,
					status: w,
					signal: v
				}, y = this.#u.get(t);
				if (y === void 0) {
					w && (w.fetch = "miss");
					let S = this.#z(t, y, E, p);
					return S.__returned = S;
				} else {
					let S = this.#i[y];
					if (this.#l(S)) {
						let st = s && S.__staleWhileFetching !== void 0;
						return w && (w.fetch = "inflight", st && (w.returnedStale = !0)), st ? S.__staleWhileFetching : S.__returned = S;
					}
					let B = this.#_(y);
					if (!b && !B) return w && (w.fetch = "hit"), this.#N(y), i && this.#C(y), w && this.#D(w, y), S;
					let U = this.#z(t, y, E, p), et = U.__staleWhileFetching !== void 0 && s;
					return w && (w.fetch = B ? "stale" : "refresh", et && B && (w.returnedStale = !0)), et ? U.__staleWhileFetching : U.__returned = U;
				}
			}
			async forceFetch(t, e = {}) {
				let s = await this.fetch(t, e);
				if (s === void 0) throw new Error("fetch() returned undefined");
				return s;
			}
			memo(t, e = {}) {
				let s = this.#w;
				if (!s) throw new Error("no memoMethod provided to constructor");
				let { context: i, forceRefresh: r, ...h } = e, o = this.get(t, h);
				if (!r && o !== void 0) return o;
				let a = s(t, o, {
					options: h,
					context: i
				});
				return this.set(t, a, h), a;
			}
			get(t, e = {}) {
				let { allowStale: s = this.allowStale, updateAgeOnGet: i = this.updateAgeOnGet, noDeleteOnStaleGet: r = this.noDeleteOnStaleGet, status: h } = e, o = this.#u.get(t);
				if (o !== void 0) {
					let a = this.#i[o], l = this.#l(a);
					return h && this.#D(h, o), this.#_(o) ? (h && (h.get = "stale"), l ? (h && s && a.__staleWhileFetching !== void 0 && (h.returnedStale = !0), s ? a.__staleWhileFetching : void 0) : (r || this.#A(t, "expire"), h && s && (h.returnedStale = !0), s ? a : void 0)) : (h && (h.get = "hit"), l ? a.__staleWhileFetching : (this.#N(o), i && this.#C(o), a));
				} else h && (h.get = "miss");
			}
			#U(t, e) {
				this.#v[e] = t, this.#d[t] = e;
			}
			#N(t) {
				t !== this.#p && (t === this.#y ? this.#y = this.#d[t] : this.#U(this.#v[t], this.#d[t]), this.#U(this.#p, t), this.#p = t);
			}
			delete(t) {
				return this.#A(t, "delete");
			}
			#A(t, e) {
				let s = !1;
				if (this.#o !== 0) {
					let i = this.#u.get(t);
					if (i !== void 0) if (this.#b?.[i] && (clearTimeout(this.#b?.[i]), this.#b[i] = void 0), s = !0, this.#o === 1) this.#q(e);
					else {
						this.#L(i);
						let r = this.#i[i];
						if (this.#l(r) ? r.__abortController.abort(/* @__PURE__ */ new Error("deleted")) : (this.#E || this.#e) && (this.#E && this.#n?.(r, t, e), this.#e && this.#m?.push([
							r,
							t,
							e
						])), this.#u.delete(t), this.#a[i] = void 0, this.#i[i] = void 0, i === this.#p) this.#p = this.#v[i];
						else if (i === this.#y) this.#y = this.#d[i];
						else {
							let h = this.#v[i];
							this.#d[h] = this.#d[i];
							let o = this.#d[i];
							this.#v[o] = this.#v[i];
						}
						this.#o--, this.#R.push(i);
					}
				}
				if (this.#e && this.#m?.length) {
					let i = this.#m, r;
					for (; r = i?.shift();) this.#h?.(...r);
				}
				return s;
			}
			clear() {
				return this.#q("delete");
			}
			#q(t) {
				for (let e of this.#M({ allowStale: !0 })) {
					let s = this.#i[e];
					if (this.#l(s)) s.__abortController.abort(/* @__PURE__ */ new Error("deleted"));
					else {
						let i = this.#a[e];
						this.#E && this.#n?.(s, i, t), this.#e && this.#m?.push([
							s,
							i,
							t
						]);
					}
				}
				if (this.#u.clear(), this.#i.fill(void 0), this.#a.fill(void 0), this.#g && this.#x) {
					this.#g.fill(0), this.#x.fill(0);
					for (let e of this.#b ?? []) e !== void 0 && clearTimeout(e);
					this.#b?.fill(void 0);
				}
				if (this.#O && this.#O.fill(0), this.#y = 0, this.#p = 0, this.#R.length = 0, this.#f = 0, this.#o = 0, this.#e && this.#m) {
					let e = this.#m, s;
					for (; s = e?.shift();) this.#h?.(...s);
				}
			}
		};
	});
	var Oe = R((P) => {
		"use strict";
		var nr = P && P.__importDefault || function(n) {
			return n && n.__esModule ? n : { default: n };
		};
		Object.defineProperty(P, "__esModule", { value: !0 });
		P.Minipass = P.isWritable = P.isReadable = P.isStream = void 0;
		var ds = typeof process == "object" && process ? process : {
			stdout: null,
			stderr: null
		}, _e = require("node:events"), ws = nr(require("node:stream")), hr = require("node:string_decoder"), or = (n) => !!n && typeof n == "object" && (n instanceof qt || n instanceof ws.default || (0, P.isReadable)(n) || (0, P.isWritable)(n));
		P.isStream = or;
		var ar = (n) => !!n && typeof n == "object" && n instanceof _e.EventEmitter && typeof n.pipe == "function" && n.pipe !== ws.default.Writable.prototype.pipe;
		P.isReadable = ar;
		var lr = (n) => !!n && typeof n == "object" && n instanceof _e.EventEmitter && typeof n.write == "function" && typeof n.end == "function";
		P.isWritable = lr;
		var $ = Symbol("EOF"), q = Symbol("maybeEmitEnd"), K = Symbol("emittedEnd"), Bt = Symbol("emittingEnd"), lt = Symbol("emittedError"), It = Symbol("closed"), ps = Symbol("read"), Gt = Symbol("flush"), ms = Symbol("flushChunk"), L = Symbol("encoding"), rt = Symbol("decoder"), x = Symbol("flowing"), ct = Symbol("paused"), nt = Symbol("resume"), T = Symbol("buffer"), M = Symbol("pipes"), C = Symbol("bufferLength"), we = Symbol("bufferPush"), zt = Symbol("bufferShift"), k = Symbol("objectMode"), O = Symbol("destroyed"), be = Symbol("error"), ye = Symbol("emitData"), gs = Symbol("emitEnd"), Se = Symbol("emitEnd2"), I = Symbol("async"), ve = Symbol("abort"), Ut = Symbol("aborted"), ut = Symbol("signal"), Z = Symbol("dataListeners"), D = Symbol("discarded"), ft = (n) => Promise.resolve().then(n), cr = (n) => n(), ur = (n) => n === "end" || n === "finish" || n === "prefinish", fr = (n) => n instanceof ArrayBuffer || !!n && typeof n == "object" && n.constructor && n.constructor.name === "ArrayBuffer" && n.byteLength >= 0, dr = (n) => !Buffer.isBuffer(n) && ArrayBuffer.isView(n), $t = class {
			src;
			dest;
			opts;
			ondrain;
			constructor(t, e, s) {
				this.src = t, this.dest = e, this.opts = s, this.ondrain = () => t[nt](), this.dest.on("drain", this.ondrain);
			}
			unpipe() {
				this.dest.removeListener("drain", this.ondrain);
			}
			proxyErrors(t) {}
			end() {
				this.unpipe(), this.opts.end && this.dest.end();
			}
		}, Ee = class extends $t {
			unpipe() {
				this.src.removeListener("error", this.proxyErrors), super.unpipe();
			}
			constructor(t, e, s) {
				super(t, e, s), this.proxyErrors = (i) => this.dest.emit("error", i), t.on("error", this.proxyErrors);
			}
		}, pr = (n) => !!n.objectMode, mr = (n) => !n.objectMode && !!n.encoding && n.encoding !== "buffer", qt = class extends _e.EventEmitter {
			[x] = !1;
			[ct] = !1;
			[M] = [];
			[T] = [];
			[k];
			[L];
			[I];
			[rt];
			[$] = !1;
			[K] = !1;
			[Bt] = !1;
			[It] = !1;
			[lt] = null;
			[C] = 0;
			[O] = !1;
			[ut];
			[Ut] = !1;
			[Z] = 0;
			[D] = !1;
			writable = !0;
			readable = !0;
			constructor(...t) {
				let e = t[0] || {};
				if (super(), e.objectMode && typeof e.encoding == "string") throw new TypeError("Encoding and objectMode may not be used together");
				pr(e) ? (this[k] = !0, this[L] = null) : mr(e) ? (this[L] = e.encoding, this[k] = !1) : (this[k] = !1, this[L] = null), this[I] = !!e.async, this[rt] = this[L] ? new hr.StringDecoder(this[L]) : null, e && e.debugExposeBuffer === !0 && Object.defineProperty(this, "buffer", { get: () => this[T] }), e && e.debugExposePipes === !0 && Object.defineProperty(this, "pipes", { get: () => this[M] });
				let { signal: s } = e;
				s && (this[ut] = s, s.aborted ? this[ve]() : s.addEventListener("abort", () => this[ve]()));
			}
			get bufferLength() {
				return this[C];
			}
			get encoding() {
				return this[L];
			}
			set encoding(t) {
				throw new Error("Encoding must be set at instantiation time");
			}
			setEncoding(t) {
				throw new Error("Encoding must be set at instantiation time");
			}
			get objectMode() {
				return this[k];
			}
			set objectMode(t) {
				throw new Error("objectMode must be set at instantiation time");
			}
			get async() {
				return this[I];
			}
			set async(t) {
				this[I] = this[I] || !!t;
			}
			[ve]() {
				this[Ut] = !0, this.emit("abort", this[ut]?.reason), this.destroy(this[ut]?.reason);
			}
			get aborted() {
				return this[Ut];
			}
			set aborted(t) {}
			write(t, e, s) {
				if (this[Ut]) return !1;
				if (this[$]) throw new Error("write after end");
				if (this[O]) return this.emit("error", Object.assign(/* @__PURE__ */ new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" })), !0;
				typeof e == "function" && (s = e, e = "utf8"), e || (e = "utf8");
				let i = this[I] ? ft : cr;
				if (!this[k] && !Buffer.isBuffer(t)) {
					if (dr(t)) t = Buffer.from(t.buffer, t.byteOffset, t.byteLength);
					else if (fr(t)) t = Buffer.from(t);
					else if (typeof t != "string") throw new Error("Non-contiguous data written to non-objectMode stream");
				}
				return this[k] ? (this[x] && this[C] !== 0 && this[Gt](!0), this[x] ? this.emit("data", t) : this[we](t), this[C] !== 0 && this.emit("readable"), s && i(s), this[x]) : t.length ? (typeof t == "string" && !(e === this[L] && !this[rt]?.lastNeed) && (t = Buffer.from(t, e)), Buffer.isBuffer(t) && this[L] && (t = this[rt].write(t)), this[x] && this[C] !== 0 && this[Gt](!0), this[x] ? this.emit("data", t) : this[we](t), this[C] !== 0 && this.emit("readable"), s && i(s), this[x]) : (this[C] !== 0 && this.emit("readable"), s && i(s), this[x]);
			}
			read(t) {
				if (this[O]) return null;
				if (this[D] = !1, this[C] === 0 || t === 0 || t && t > this[C]) return this[q](), null;
				this[k] && (t = null), this[T].length > 1 && !this[k] && (this[T] = [this[L] ? this[T].join("") : Buffer.concat(this[T], this[C])]);
				let e = this[ps](t || null, this[T][0]);
				return this[q](), e;
			}
			[ps](t, e) {
				if (this[k]) this[zt]();
				else {
					let s = e;
					t === s.length || t === null ? this[zt]() : typeof s == "string" ? (this[T][0] = s.slice(t), e = s.slice(0, t), this[C] -= t) : (this[T][0] = s.subarray(t), e = s.subarray(0, t), this[C] -= t);
				}
				return this.emit("data", e), !this[T].length && !this[$] && this.emit("drain"), e;
			}
			end(t, e, s) {
				return typeof t == "function" && (s = t, t = void 0), typeof e == "function" && (s = e, e = "utf8"), t !== void 0 && this.write(t, e), s && this.once("end", s), this[$] = !0, this.writable = !1, (this[x] || !this[ct]) && this[q](), this;
			}
			[nt]() {
				this[O] || (!this[Z] && !this[M].length && (this[D] = !0), this[ct] = !1, this[x] = !0, this.emit("resume"), this[T].length ? this[Gt]() : this[$] ? this[q]() : this.emit("drain"));
			}
			resume() {
				return this[nt]();
			}
			pause() {
				this[x] = !1, this[ct] = !0, this[D] = !1;
			}
			get destroyed() {
				return this[O];
			}
			get flowing() {
				return this[x];
			}
			get paused() {
				return this[ct];
			}
			[we](t) {
				this[k] ? this[C] += 1 : this[C] += t.length, this[T].push(t);
			}
			[zt]() {
				return this[k] ? this[C] -= 1 : this[C] -= this[T][0].length, this[T].shift();
			}
			[Gt](t = !1) {
				do				;
while (this[ms](this[zt]()) && this[T].length);
				!t && !this[T].length && !this[$] && this.emit("drain");
			}
			[ms](t) {
				return this.emit("data", t), this[x];
			}
			pipe(t, e) {
				if (this[O]) return t;
				this[D] = !1;
				let s = this[K];
				return e = e || {}, t === ds.stdout || t === ds.stderr ? e.end = !1 : e.end = e.end !== !1, e.proxyErrors = !!e.proxyErrors, s ? e.end && t.end() : (this[M].push(e.proxyErrors ? new Ee(this, t, e) : new $t(this, t, e)), this[I] ? ft(() => this[nt]()) : this[nt]()), t;
			}
			unpipe(t) {
				let e = this[M].find((s) => s.dest === t);
				e && (this[M].length === 1 ? (this[x] && this[Z] === 0 && (this[x] = !1), this[M] = []) : this[M].splice(this[M].indexOf(e), 1), e.unpipe());
			}
			addListener(t, e) {
				return this.on(t, e);
			}
			on(t, e) {
				let s = super.on(t, e);
				if (t === "data") this[D] = !1, this[Z]++, !this[M].length && !this[x] && this[nt]();
				else if (t === "readable" && this[C] !== 0) super.emit("readable");
				else if (ur(t) && this[K]) super.emit(t), this.removeAllListeners(t);
				else if (t === "error" && this[lt]) {
					let i = e;
					this[I] ? ft(() => i.call(this, this[lt])) : i.call(this, this[lt]);
				}
				return s;
			}
			removeListener(t, e) {
				return this.off(t, e);
			}
			off(t, e) {
				let s = super.off(t, e);
				return t === "data" && (this[Z] = this.listeners("data").length, this[Z] === 0 && !this[D] && !this[M].length && (this[x] = !1)), s;
			}
			removeAllListeners(t) {
				let e = super.removeAllListeners(t);
				return (t === "data" || t === void 0) && (this[Z] = 0, !this[D] && !this[M].length && (this[x] = !1)), e;
			}
			get emittedEnd() {
				return this[K];
			}
			[q]() {
				!this[Bt] && !this[K] && !this[O] && this[T].length === 0 && this[$] && (this[Bt] = !0, this.emit("end"), this.emit("prefinish"), this.emit("finish"), this[It] && this.emit("close"), this[Bt] = !1);
			}
			emit(t, ...e) {
				let s = e[0];
				if (t !== "error" && t !== "close" && t !== O && this[O]) return !1;
				if (t === "data") return !this[k] && !s ? !1 : this[I] ? (ft(() => this[ye](s)), !0) : this[ye](s);
				if (t === "end") return this[gs]();
				if (t === "close") {
					if (this[It] = !0, !this[K] && !this[O]) return !1;
					let r = super.emit("close");
					return this.removeAllListeners("close"), r;
				} else if (t === "error") {
					this[lt] = s, super.emit(be, s);
					let r = !this[ut] || this.listeners("error").length ? super.emit("error", s) : !1;
					return this[q](), r;
				} else if (t === "resume") {
					let r = super.emit("resume");
					return this[q](), r;
				} else if (t === "finish" || t === "prefinish") {
					let r = super.emit(t);
					return this.removeAllListeners(t), r;
				}
				let i = super.emit(t, ...e);
				return this[q](), i;
			}
			[ye](t) {
				for (let s of this[M]) s.dest.write(t) === !1 && this.pause();
				let e = this[D] ? !1 : super.emit("data", t);
				return this[q](), e;
			}
			[gs]() {
				return this[K] ? !1 : (this[K] = !0, this.readable = !1, this[I] ? (ft(() => this[Se]()), !0) : this[Se]());
			}
			[Se]() {
				if (this[rt]) {
					let e = this[rt].end();
					if (e) {
						for (let s of this[M]) s.dest.write(e);
						this[D] || super.emit("data", e);
					}
				}
				for (let e of this[M]) e.end();
				let t = super.emit("end");
				return this.removeAllListeners("end"), t;
			}
			async collect() {
				let t = Object.assign([], { dataLength: 0 });
				this[k] || (t.dataLength = 0);
				let e = this.promise();
				return this.on("data", (s) => {
					t.push(s), this[k] || (t.dataLength += s.length);
				}), await e, t;
			}
			async concat() {
				if (this[k]) throw new Error("cannot concat in objectMode");
				let t = await this.collect();
				return this[L] ? t.join("") : Buffer.concat(t, t.dataLength);
			}
			async promise() {
				return new Promise((t, e) => {
					this.on(O, () => e(/* @__PURE__ */ new Error("stream destroyed"))), this.on("error", (s) => e(s)), this.on("end", () => t());
				});
			}
			[Symbol.asyncIterator]() {
				this[D] = !1;
				let t = !1, e = async () => (this.pause(), t = !0, {
					value: void 0,
					done: !0
				});
				return {
					next: () => {
						if (t) return e();
						let i = this.read();
						if (i !== null) return Promise.resolve({
							done: !1,
							value: i
						});
						if (this[$]) return e();
						let r, h, o = (c) => {
							this.off("data", a), this.off("end", l), this.off(O, f), e(), h(c);
						}, a = (c) => {
							this.off("error", o), this.off("end", l), this.off(O, f), this.pause(), r({
								value: c,
								done: !!this[$]
							});
						}, l = () => {
							this.off("error", o), this.off("data", a), this.off(O, f), e(), r({
								done: !0,
								value: void 0
							});
						}, f = () => o(/* @__PURE__ */ new Error("stream destroyed"));
						return new Promise((c, d) => {
							h = d, r = c, this.once(O, f), this.once("error", o), this.once("end", l), this.once("data", a);
						});
					},
					throw: e,
					return: e,
					[Symbol.asyncIterator]() {
						return this;
					},
					[Symbol.asyncDispose]: async () => {}
				};
			}
			[Symbol.iterator]() {
				this[D] = !1;
				let t = !1, e = () => (this.pause(), this.off(be, e), this.off(O, e), this.off("end", e), t = !0, {
					done: !0,
					value: void 0
				}), s = () => {
					if (t) return e();
					let i = this.read();
					return i === null ? e() : {
						done: !1,
						value: i
					};
				};
				return this.once("end", e), this.once(be, e), this.once(O, e), {
					next: s,
					throw: e,
					return: e,
					[Symbol.iterator]() {
						return this;
					},
					[Symbol.dispose]: () => {}
				};
			}
			destroy(t) {
				if (this[O]) return t ? this.emit("error", t) : this.emit(O), this;
				this[O] = !0, this[D] = !0, this[T].length = 0, this[C] = 0;
				let e = this;
				return typeof e.close == "function" && !this[It] && e.close(), t ? this.emit("error", t) : this.emit(O), this;
			}
			static get isStream() {
				return P.isStream;
			}
		};
		P.Minipass = qt;
	});
	var Ms = R((_) => {
		"use strict";
		var gr = _ && _.__createBinding || (Object.create ? (function(n, t, e, s) {
			s === void 0 && (s = e);
			var i = Object.getOwnPropertyDescriptor(t, e);
			(!i || ("get" in i ? !t.__esModule : i.writable || i.configurable)) && (i = {
				enumerable: !0,
				get: function() {
					return t[e];
				}
			}), Object.defineProperty(n, s, i);
		}) : (function(n, t, e, s) {
			s === void 0 && (s = e), n[s] = t[e];
		})), wr = _ && _.__setModuleDefault || (Object.create ? (function(n, t) {
			Object.defineProperty(n, "default", {
				enumerable: !0,
				value: t
			});
		}) : function(n, t) {
			n.default = t;
		}), br = _ && _.__importStar || function(n) {
			if (n && n.__esModule) return n;
			var t = {};
			if (n != null) for (var e in n) e !== "default" && Object.prototype.hasOwnProperty.call(n, e) && gr(t, n, e);
			return wr(t, n), t;
		};
		Object.defineProperty(_, "__esModule", { value: !0 });
		_.PathScurry = _.Path = _.PathScurryDarwin = _.PathScurryPosix = _.PathScurryWin32 = _.PathScurryBase = _.PathPosix = _.PathWin32 = _.PathBase = _.ChildrenCache = _.ResolveCache = void 0;
		var Qt = fs(), Yt = require("node:path"), yr = require("node:url"), pt = require("fs"), Sr = br(require("node:fs")), vr = pt.realpathSync.native, Ht = require("node:fs/promises"), bs = Oe(), mt = {
			lstatSync: pt.lstatSync,
			readdir: pt.readdir,
			readdirSync: pt.readdirSync,
			readlinkSync: pt.readlinkSync,
			realpathSync: vr,
			promises: {
				lstat: Ht.lstat,
				readdir: Ht.readdir,
				readlink: Ht.readlink,
				realpath: Ht.realpath
			}
		}, _s = (n) => !n || n === mt || n === Sr ? mt : {
			...mt,
			...n,
			promises: {
				...mt.promises,
				...n.promises || {}
			}
		}, Os = /^\\\\\?\\([a-z]:)\\?$/i, Er = (n) => n.replace(/\//g, "\\").replace(Os, "$1\\"), _r = /[\\\/]/, N = 0, xs = 1, Ts = 2, G = 4, Cs = 6, Rs = 8, Q = 10, As = 12, j = 15, dt = ~j, xe = 16, ys = 32, gt = 64, W = 128, Vt = 256, Xt = 512, Ss = gt | W | Xt, Or = 1023, Te = (n) => n.isFile() ? Rs : n.isDirectory() ? G : n.isSymbolicLink() ? Q : n.isCharacterDevice() ? Ts : n.isBlockDevice() ? Cs : n.isSocket() ? As : n.isFIFO() ? xs : N, vs = new Qt.LRUCache({ max: 2 ** 12 }), wt = (n) => {
			let t = vs.get(n);
			if (t) return t;
			let e = n.normalize("NFKD");
			return vs.set(n, e), e;
		}, Es = new Qt.LRUCache({ max: 2 ** 12 }), Kt = (n) => {
			let t = Es.get(n);
			if (t) return t;
			let e = wt(n.toLowerCase());
			return Es.set(n, e), e;
		}, bt = class extends Qt.LRUCache {
			constructor() {
				super({ max: 256 });
			}
		};
		_.ResolveCache = bt;
		var Jt = class extends Qt.LRUCache {
			constructor(t = 16 * 1024) {
				super({
					maxSize: t,
					sizeCalculation: (e) => e.length + 1
				});
			}
		};
		_.ChildrenCache = Jt;
		var ks = Symbol("PathScurry setAsCwd"), A = class {
			name;
			root;
			roots;
			parent;
			nocase;
			isCWD = !1;
			#t;
			#s;
			get dev() {
				return this.#s;
			}
			#n;
			get mode() {
				return this.#n;
			}
			#r;
			get nlink() {
				return this.#r;
			}
			#h;
			get uid() {
				return this.#h;
			}
			#S;
			get gid() {
				return this.#S;
			}
			#w;
			get rdev() {
				return this.#w;
			}
			#c;
			get blksize() {
				return this.#c;
			}
			#o;
			get ino() {
				return this.#o;
			}
			#f;
			get size() {
				return this.#f;
			}
			#u;
			get blocks() {
				return this.#u;
			}
			#a;
			get atimeMs() {
				return this.#a;
			}
			#i;
			get mtimeMs() {
				return this.#i;
			}
			#d;
			get ctimeMs() {
				return this.#d;
			}
			#v;
			get birthtimeMs() {
				return this.#v;
			}
			#y;
			get atime() {
				return this.#y;
			}
			#p;
			get mtime() {
				return this.#p;
			}
			#R;
			get ctime() {
				return this.#R;
			}
			#m;
			get birthtime() {
				return this.#m;
			}
			#O;
			#x;
			#g;
			#b;
			#E;
			#T;
			#e;
			#F;
			#P;
			#C;
			get parentPath() {
				return (this.parent || this).fullpath();
			}
			get path() {
				return this.parentPath;
			}
			constructor(t, e = N, s, i, r, h, o) {
				this.name = t, this.#O = r ? Kt(t) : wt(t), this.#e = e & Or, this.nocase = r, this.roots = i, this.root = s || this, this.#F = h, this.#g = o.fullpath, this.#E = o.relative, this.#T = o.relativePosix, this.parent = o.parent, this.parent ? this.#t = this.parent.#t : this.#t = _s(o.fs);
			}
			depth() {
				return this.#x !== void 0 ? this.#x : this.parent ? this.#x = this.parent.depth() + 1 : this.#x = 0;
			}
			childrenCache() {
				return this.#F;
			}
			resolve(t) {
				if (!t) return this;
				let e = this.getRootString(t), i = t.substring(e.length).split(this.splitSep);
				return e ? this.getRoot(e).#D(i) : this.#D(i);
			}
			#D(t) {
				let e = this;
				for (let s of t) e = e.child(s);
				return e;
			}
			children() {
				let t = this.#F.get(this);
				if (t) return t;
				let e = Object.assign([], { provisional: 0 });
				return this.#F.set(this, e), this.#e &= ~xe, e;
			}
			child(t, e) {
				if (t === "" || t === ".") return this;
				if (t === "..") return this.parent || this;
				let s = this.children(), i = this.nocase ? Kt(t) : wt(t);
				for (let a of s) if (a.#O === i) return a;
				let r = this.parent ? this.sep : "", h = this.#g ? this.#g + r + t : void 0, o = this.newChild(t, N, {
					...e,
					parent: this,
					fullpath: h
				});
				return this.canReaddir() || (o.#e |= W), s.push(o), o;
			}
			relative() {
				if (this.isCWD) return "";
				if (this.#E !== void 0) return this.#E;
				let t = this.name, e = this.parent;
				if (!e) return this.#E = this.name;
				let s = e.relative();
				return s + (!s || !e.parent ? "" : this.sep) + t;
			}
			relativePosix() {
				if (this.sep === "/") return this.relative();
				if (this.isCWD) return "";
				if (this.#T !== void 0) return this.#T;
				let t = this.name, e = this.parent;
				if (!e) return this.#T = this.fullpathPosix();
				let s = e.relativePosix();
				return s + (!s || !e.parent ? "" : "/") + t;
			}
			fullpath() {
				if (this.#g !== void 0) return this.#g;
				let t = this.name, e = this.parent;
				if (!e) return this.#g = this.name;
				let i = e.fullpath() + (e.parent ? this.sep : "") + t;
				return this.#g = i;
			}
			fullpathPosix() {
				if (this.#b !== void 0) return this.#b;
				if (this.sep === "/") return this.#b = this.fullpath();
				if (!this.parent) {
					let i = this.fullpath().replace(/\\/g, "/");
					return /^[a-z]:\//i.test(i) ? this.#b = `//?/${i}` : this.#b = i;
				}
				let t = this.parent, e = t.fullpathPosix(), s = e + (!e || !t.parent ? "" : "/") + this.name;
				return this.#b = s;
			}
			isUnknown() {
				return (this.#e & j) === N;
			}
			isType(t) {
				return this[`is${t}`]();
			}
			getType() {
				return this.isUnknown() ? "Unknown" : this.isDirectory() ? "Directory" : this.isFile() ? "File" : this.isSymbolicLink() ? "SymbolicLink" : this.isFIFO() ? "FIFO" : this.isCharacterDevice() ? "CharacterDevice" : this.isBlockDevice() ? "BlockDevice" : this.isSocket() ? "Socket" : "Unknown";
			}
			isFile() {
				return (this.#e & j) === Rs;
			}
			isDirectory() {
				return (this.#e & j) === G;
			}
			isCharacterDevice() {
				return (this.#e & j) === Ts;
			}
			isBlockDevice() {
				return (this.#e & j) === Cs;
			}
			isFIFO() {
				return (this.#e & j) === xs;
			}
			isSocket() {
				return (this.#e & j) === As;
			}
			isSymbolicLink() {
				return (this.#e & Q) === Q;
			}
			lstatCached() {
				return this.#e & ys ? this : void 0;
			}
			readlinkCached() {
				return this.#P;
			}
			realpathCached() {
				return this.#C;
			}
			readdirCached() {
				let t = this.children();
				return t.slice(0, t.provisional);
			}
			canReadlink() {
				if (this.#P) return !0;
				if (!this.parent) return !1;
				let t = this.#e & j;
				return !(t !== N && t !== Q || this.#e & Vt || this.#e & W);
			}
			calledReaddir() {
				return !!(this.#e & xe);
			}
			isENOENT() {
				return !!(this.#e & W);
			}
			isNamed(t) {
				return this.nocase ? this.#O === Kt(t) : this.#O === wt(t);
			}
			async readlink() {
				let t = this.#P;
				if (t) return t;
				if (this.canReadlink() && this.parent) try {
					let e = await this.#t.promises.readlink(this.fullpath()), s = (await this.parent.realpath())?.resolve(e);
					if (s) return this.#P = s;
				} catch (e) {
					this.#M(e.code);
					return;
				}
			}
			readlinkSync() {
				let t = this.#P;
				if (t) return t;
				if (this.canReadlink() && this.parent) try {
					let e = this.#t.readlinkSync(this.fullpath()), s = this.parent.realpathSync()?.resolve(e);
					if (s) return this.#P = s;
				} catch (e) {
					this.#M(e.code);
					return;
				}
			}
			#W(t) {
				this.#e |= xe;
				for (let e = t.provisional; e < t.length; e++) {
					let s = t[e];
					s && s.#_();
				}
			}
			#_() {
				this.#e & W || (this.#e = (this.#e | W) & dt, this.#$());
			}
			#$() {
				let t = this.children();
				t.provisional = 0;
				for (let e of t) e.#_();
			}
			#L() {
				this.#e |= Xt, this.#j();
			}
			#j() {
				if (this.#e & gt) return;
				let t = this.#e;
				(t & j) === G && (t &= dt), this.#e = t | gt, this.#$();
			}
			#B(t = "") {
				t === "ENOTDIR" || t === "EPERM" ? this.#j() : t === "ENOENT" ? this.#_() : this.children().provisional = 0;
			}
			#k(t = "") {
				t === "ENOTDIR" ? this.parent.#j() : t === "ENOENT" && this.#_();
			}
			#M(t = "") {
				let e = this.#e;
				e |= Vt, t === "ENOENT" && (e |= W), (t === "EINVAL" || t === "UNKNOWN") && (e &= dt), this.#e = e, t === "ENOTDIR" && this.parent && this.parent.#j();
			}
			#I(t, e) {
				return this.#z(t, e) || this.#G(t, e);
			}
			#G(t, e) {
				let s = Te(t), i = this.newChild(t.name, s, { parent: this }), r = i.#e & j;
				return r !== G && r !== Q && r !== N && (i.#e |= gt), e.unshift(i), e.provisional++, i;
			}
			#z(t, e) {
				for (let s = e.provisional; s < e.length; s++) {
					let i = e[s];
					if ((this.nocase ? Kt(t.name) : wt(t.name)) === i.#O) return this.#l(t, i, s, e);
				}
			}
			#l(t, e, s, i) {
				let r = e.name;
				return e.#e = e.#e & dt | Te(t), r !== t.name && (e.name = t.name), s !== i.provisional && (s === i.length - 1 ? i.pop() : i.splice(s, 1), i.unshift(e)), i.provisional++, e;
			}
			async lstat() {
				if ((this.#e & W) === 0) try {
					return this.#U(await this.#t.promises.lstat(this.fullpath())), this;
				} catch (t) {
					this.#k(t.code);
				}
			}
			lstatSync() {
				if ((this.#e & W) === 0) try {
					return this.#U(this.#t.lstatSync(this.fullpath())), this;
				} catch (t) {
					this.#k(t.code);
				}
			}
			#U(t) {
				let { atime: e, atimeMs: s, birthtime: i, birthtimeMs: r, blksize: h, blocks: o, ctime: a, ctimeMs: l, dev: f, gid: c, ino: d, mode: u, mtime: m, mtimeMs: p, nlink: b, rdev: w, size: v, uid: E } = t;
				this.#y = e, this.#a = s, this.#m = i, this.#v = r, this.#c = h, this.#u = o, this.#R = a, this.#d = l, this.#s = f, this.#S = c, this.#o = d, this.#n = u, this.#p = m, this.#i = p, this.#r = b, this.#w = w, this.#f = v, this.#h = E;
				let y = Te(t);
				this.#e = this.#e & dt | y | ys, y !== N && y !== G && y !== Q && (this.#e |= gt);
			}
			#N = [];
			#A = !1;
			#q(t) {
				this.#A = !1;
				let e = this.#N.slice();
				this.#N.length = 0, e.forEach((s) => s(null, t));
			}
			readdirCB(t, e = !1) {
				if (!this.canReaddir()) {
					e ? t(null, []) : queueMicrotask(() => t(null, []));
					return;
				}
				let s = this.children();
				if (this.calledReaddir()) {
					let r = s.slice(0, s.provisional);
					e ? t(null, r) : queueMicrotask(() => t(null, r));
					return;
				}
				if (this.#N.push(t), this.#A) return;
				this.#A = !0;
				let i = this.fullpath();
				this.#t.readdir(i, { withFileTypes: !0 }, (r, h) => {
					if (r) this.#B(r.code), s.provisional = 0;
					else {
						for (let o of h) this.#I(o, s);
						this.#W(s);
					}
					this.#q(s.slice(0, s.provisional));
				});
			}
			#H;
			async readdir() {
				if (!this.canReaddir()) return [];
				let t = this.children();
				if (this.calledReaddir()) return t.slice(0, t.provisional);
				let e = this.fullpath();
				if (this.#H) await this.#H;
				else {
					let s = () => {};
					this.#H = new Promise((i) => s = i);
					try {
						for (let i of await this.#t.promises.readdir(e, { withFileTypes: !0 })) this.#I(i, t);
						this.#W(t);
					} catch (i) {
						this.#B(i.code), t.provisional = 0;
					}
					this.#H = void 0, s();
				}
				return t.slice(0, t.provisional);
			}
			readdirSync() {
				if (!this.canReaddir()) return [];
				let t = this.children();
				if (this.calledReaddir()) return t.slice(0, t.provisional);
				let e = this.fullpath();
				try {
					for (let s of this.#t.readdirSync(e, { withFileTypes: !0 })) this.#I(s, t);
					this.#W(t);
				} catch (s) {
					this.#B(s.code), t.provisional = 0;
				}
				return t.slice(0, t.provisional);
			}
			canReaddir() {
				if (this.#e & Ss) return !1;
				let t = j & this.#e;
				return t === N || t === G || t === Q;
			}
			shouldWalk(t, e) {
				return (this.#e & G) === G && !(this.#e & Ss) && !t.has(this) && (!e || e(this));
			}
			async realpath() {
				if (this.#C) return this.#C;
				if (!((Xt | Vt | W) & this.#e)) try {
					let t = await this.#t.promises.realpath(this.fullpath());
					return this.#C = this.resolve(t);
				} catch {
					this.#L();
				}
			}
			realpathSync() {
				if (this.#C) return this.#C;
				if (!((Xt | Vt | W) & this.#e)) try {
					let t = this.#t.realpathSync(this.fullpath());
					return this.#C = this.resolve(t);
				} catch {
					this.#L();
				}
			}
			[ks](t) {
				if (t === this) return;
				t.isCWD = !1, this.isCWD = !0;
				let e = /* @__PURE__ */ new Set([]), s = [], i = this;
				for (; i && i.parent;) e.add(i), i.#E = s.join(this.sep), i.#T = s.join("/"), i = i.parent, s.push("..");
				for (i = t; i && i.parent && !e.has(i);) i.#E = void 0, i.#T = void 0, i = i.parent;
			}
		};
		_.PathBase = A;
		var yt = class n extends A {
			sep = "\\";
			splitSep = _r;
			constructor(t, e = N, s, i, r, h, o) {
				super(t, e, s, i, r, h, o);
			}
			newChild(t, e = N, s = {}) {
				return new n(t, e, this.root, this.roots, this.nocase, this.childrenCache(), s);
			}
			getRootString(t) {
				return Yt.win32.parse(t).root;
			}
			getRoot(t) {
				if (t = Er(t.toUpperCase()), t === this.root.name) return this.root;
				for (let [e, s] of Object.entries(this.roots)) if (this.sameRoot(t, e)) return this.roots[t] = s;
				return this.roots[t] = new Et(t, this).root;
			}
			sameRoot(t, e = this.root.name) {
				return t = t.toUpperCase().replace(/\//g, "\\").replace(Os, "$1\\"), t === e;
			}
		};
		_.PathWin32 = yt;
		var St = class n extends A {
			splitSep = "/";
			sep = "/";
			constructor(t, e = N, s, i, r, h, o) {
				super(t, e, s, i, r, h, o);
			}
			getRootString(t) {
				return t.startsWith("/") ? "/" : "";
			}
			getRoot(t) {
				return this.root;
			}
			newChild(t, e = N, s = {}) {
				return new n(t, e, this.root, this.roots, this.nocase, this.childrenCache(), s);
			}
		};
		_.PathPosix = St;
		var vt = class {
			root;
			rootPath;
			roots;
			cwd;
			#t;
			#s;
			#n;
			nocase;
			#r;
			constructor(t = process.cwd(), e, s, { nocase: i, childrenCacheSize: r = 16 * 1024, fs: h = mt } = {}) {
				this.#r = _s(h), (t instanceof URL || t.startsWith("file://")) && (t = (0, yr.fileURLToPath)(t));
				let o = e.resolve(t);
				this.roots = Object.create(null), this.rootPath = this.parseRootPath(o), this.#t = new bt(), this.#s = new bt(), this.#n = new Jt(r);
				let a = o.substring(this.rootPath.length).split(s);
				if (a.length === 1 && !a[0] && a.pop(), i === void 0) throw new TypeError("must provide nocase setting to PathScurryBase ctor");
				this.nocase = i, this.root = this.newRoot(this.#r), this.roots[this.rootPath] = this.root;
				let l = this.root, f = a.length - 1, c = e.sep, d = this.rootPath, u = !1;
				for (let m of a) {
					let p = f--;
					l = l.child(m, {
						relative: new Array(p).fill("..").join(c),
						relativePosix: new Array(p).fill("..").join("/"),
						fullpath: d += (u ? "" : c) + m
					}), u = !0;
				}
				this.cwd = l;
			}
			depth(t = this.cwd) {
				return typeof t == "string" && (t = this.cwd.resolve(t)), t.depth();
			}
			childrenCache() {
				return this.#n;
			}
			resolve(...t) {
				let e = "";
				for (let r = t.length - 1; r >= 0; r--) {
					let h = t[r];
					if (!(!h || h === ".") && (e = e ? `${h}/${e}` : h, this.isAbsolute(h))) break;
				}
				let s = this.#t.get(e);
				if (s !== void 0) return s;
				let i = this.cwd.resolve(e).fullpath();
				return this.#t.set(e, i), i;
			}
			resolvePosix(...t) {
				let e = "";
				for (let r = t.length - 1; r >= 0; r--) {
					let h = t[r];
					if (!(!h || h === ".") && (e = e ? `${h}/${e}` : h, this.isAbsolute(h))) break;
				}
				let s = this.#s.get(e);
				if (s !== void 0) return s;
				let i = this.cwd.resolve(e).fullpathPosix();
				return this.#s.set(e, i), i;
			}
			relative(t = this.cwd) {
				return typeof t == "string" && (t = this.cwd.resolve(t)), t.relative();
			}
			relativePosix(t = this.cwd) {
				return typeof t == "string" && (t = this.cwd.resolve(t)), t.relativePosix();
			}
			basename(t = this.cwd) {
				return typeof t == "string" && (t = this.cwd.resolve(t)), t.name;
			}
			dirname(t = this.cwd) {
				return typeof t == "string" && (t = this.cwd.resolve(t)), (t.parent || t).fullpath();
			}
			async readdir(t = this.cwd, e = { withFileTypes: !0 }) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
				let { withFileTypes: s } = e;
				if (t.canReaddir()) {
					let i = await t.readdir();
					return s ? i : i.map((r) => r.name);
				} else return [];
			}
			readdirSync(t = this.cwd, e = { withFileTypes: !0 }) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
				let { withFileTypes: s = !0 } = e;
				return t.canReaddir() ? s ? t.readdirSync() : t.readdirSync().map((i) => i.name) : [];
			}
			async lstat(t = this.cwd) {
				return typeof t == "string" && (t = this.cwd.resolve(t)), t.lstat();
			}
			lstatSync(t = this.cwd) {
				return typeof t == "string" && (t = this.cwd.resolve(t)), t.lstatSync();
			}
			async readlink(t = this.cwd, { withFileTypes: e } = { withFileTypes: !1 }) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd);
				let s = await t.readlink();
				return e ? s : s?.fullpath();
			}
			readlinkSync(t = this.cwd, { withFileTypes: e } = { withFileTypes: !1 }) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd);
				let s = t.readlinkSync();
				return e ? s : s?.fullpath();
			}
			async realpath(t = this.cwd, { withFileTypes: e } = { withFileTypes: !1 }) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd);
				let s = await t.realpath();
				return e ? s : s?.fullpath();
			}
			realpathSync(t = this.cwd, { withFileTypes: e } = { withFileTypes: !1 }) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t.withFileTypes, t = this.cwd);
				let s = t.realpathSync();
				return e ? s : s?.fullpath();
			}
			async walk(t = this.cwd, e = {}) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
				let { withFileTypes: s = !0, follow: i = !1, filter: r, walkFilter: h } = e, o = [];
				(!r || r(t)) && o.push(s ? t : t.fullpath());
				let a = /* @__PURE__ */ new Set(), l = (c, d) => {
					a.add(c), c.readdirCB((u, m) => {
						if (u) return d(u);
						let p = m.length;
						if (!p) return d();
						let b = () => {
							--p === 0 && d();
						};
						for (let w of m) (!r || r(w)) && o.push(s ? w : w.fullpath()), i && w.isSymbolicLink() ? w.realpath().then((v) => v?.isUnknown() ? v.lstat() : v).then((v) => v?.shouldWalk(a, h) ? l(v, b) : b()) : w.shouldWalk(a, h) ? l(w, b) : b();
					}, !0);
				}, f = t;
				return new Promise((c, d) => {
					l(f, (u) => {
						if (u) return d(u);
						c(o);
					});
				});
			}
			walkSync(t = this.cwd, e = {}) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
				let { withFileTypes: s = !0, follow: i = !1, filter: r, walkFilter: h } = e, o = [];
				(!r || r(t)) && o.push(s ? t : t.fullpath());
				let a = new Set([t]);
				for (let l of a) {
					let f = l.readdirSync();
					for (let c of f) {
						(!r || r(c)) && o.push(s ? c : c.fullpath());
						let d = c;
						if (c.isSymbolicLink()) {
							if (!(i && (d = c.realpathSync()))) continue;
							d.isUnknown() && d.lstatSync();
						}
						d.shouldWalk(a, h) && a.add(d);
					}
				}
				return o;
			}
			[Symbol.asyncIterator]() {
				return this.iterate();
			}
			iterate(t = this.cwd, e = {}) {
				return typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd), this.stream(t, e)[Symbol.asyncIterator]();
			}
			[Symbol.iterator]() {
				return this.iterateSync();
			}
			*iterateSync(t = this.cwd, e = {}) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
				let { withFileTypes: s = !0, follow: i = !1, filter: r, walkFilter: h } = e;
				(!r || r(t)) && (yield s ? t : t.fullpath());
				let o = new Set([t]);
				for (let a of o) {
					let l = a.readdirSync();
					for (let f of l) {
						(!r || r(f)) && (yield s ? f : f.fullpath());
						let c = f;
						if (f.isSymbolicLink()) {
							if (!(i && (c = f.realpathSync()))) continue;
							c.isUnknown() && c.lstatSync();
						}
						c.shouldWalk(o, h) && o.add(c);
					}
				}
			}
			stream(t = this.cwd, e = {}) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
				let { withFileTypes: s = !0, follow: i = !1, filter: r, walkFilter: h } = e, o = new bs.Minipass({ objectMode: !0 });
				(!r || r(t)) && o.write(s ? t : t.fullpath());
				let a = /* @__PURE__ */ new Set(), l = [t], f = 0, c = () => {
					let d = !1;
					for (; !d;) {
						let u = l.shift();
						if (!u) {
							f === 0 && o.end();
							return;
						}
						f++, a.add(u);
						let m = (b, w, v = !1) => {
							if (b) return o.emit("error", b);
							if (i && !v) {
								let E = [];
								for (let y of w) y.isSymbolicLink() && E.push(y.realpath().then((S) => S?.isUnknown() ? S.lstat() : S));
								if (E.length) {
									Promise.all(E).then(() => m(null, w, !0));
									return;
								}
							}
							for (let E of w) E && (!r || r(E)) && (o.write(s ? E : E.fullpath()) || (d = !0));
							f--;
							for (let E of w) {
								let y = E.realpathCached() || E;
								y.shouldWalk(a, h) && l.push(y);
							}
							d && !o.flowing ? o.once("drain", c) : p || c();
						}, p = !0;
						u.readdirCB(m, !0), p = !1;
					}
				};
				return c(), o;
			}
			streamSync(t = this.cwd, e = {}) {
				typeof t == "string" ? t = this.cwd.resolve(t) : t instanceof A || (e = t, t = this.cwd);
				let { withFileTypes: s = !0, follow: i = !1, filter: r, walkFilter: h } = e, o = new bs.Minipass({ objectMode: !0 }), a = /* @__PURE__ */ new Set();
				(!r || r(t)) && o.write(s ? t : t.fullpath());
				let l = [t], f = 0, c = () => {
					let d = !1;
					for (; !d;) {
						let u = l.shift();
						if (!u) {
							f === 0 && o.end();
							return;
						}
						f++, a.add(u);
						let m = u.readdirSync();
						for (let p of m) (!r || r(p)) && (o.write(s ? p : p.fullpath()) || (d = !0));
						f--;
						for (let p of m) {
							let b = p;
							if (p.isSymbolicLink()) {
								if (!(i && (b = p.realpathSync()))) continue;
								b.isUnknown() && b.lstatSync();
							}
							b.shouldWalk(a, h) && l.push(b);
						}
					}
					d && !o.flowing && o.once("drain", c);
				};
				return c(), o;
			}
			chdir(t = this.cwd) {
				let e = this.cwd;
				this.cwd = typeof t == "string" ? this.cwd.resolve(t) : t, this.cwd[ks](e);
			}
		};
		_.PathScurryBase = vt;
		var Et = class extends vt {
			sep = "\\";
			constructor(t = process.cwd(), e = {}) {
				let { nocase: s = !0 } = e;
				super(t, Yt.win32, "\\", {
					...e,
					nocase: s
				}), this.nocase = s;
				for (let i = this.cwd; i; i = i.parent) i.nocase = this.nocase;
			}
			parseRootPath(t) {
				return Yt.win32.parse(t).root.toUpperCase();
			}
			newRoot(t) {
				return new yt(this.rootPath, G, void 0, this.roots, this.nocase, this.childrenCache(), { fs: t });
			}
			isAbsolute(t) {
				return t.startsWith("/") || t.startsWith("\\") || /^[a-z]:(\/|\\)/i.test(t);
			}
		};
		_.PathScurryWin32 = Et;
		var _t = class extends vt {
			sep = "/";
			constructor(t = process.cwd(), e = {}) {
				let { nocase: s = !1 } = e;
				super(t, Yt.posix, "/", {
					...e,
					nocase: s
				}), this.nocase = s;
			}
			parseRootPath(t) {
				return "/";
			}
			newRoot(t) {
				return new St(this.rootPath, G, void 0, this.roots, this.nocase, this.childrenCache(), { fs: t });
			}
			isAbsolute(t) {
				return t.startsWith("/");
			}
		};
		_.PathScurryPosix = _t;
		var Zt = class extends _t {
			constructor(t = process.cwd(), e = {}) {
				let { nocase: s = !0 } = e;
				super(t, {
					...e,
					nocase: s
				});
			}
		};
		_.PathScurryDarwin = Zt;
		_.Path = process.platform === "win32" ? yt : St;
		_.PathScurry = process.platform === "win32" ? Et : process.platform === "darwin" ? Zt : _t;
	});
	var Re = R((te) => {
		"use strict";
		Object.defineProperty(te, "__esModule", { value: !0 });
		te.Pattern = void 0;
		var xr = H(), Tr = (n) => n.length >= 1, Cr = (n) => n.length >= 1, Rr = Symbol.for("nodejs.util.inspect.custom");
		te.Pattern = class n {
			#t;
			#s;
			#n;
			length;
			#r;
			#h;
			#S;
			#w;
			#c;
			#o;
			#f = !0;
			constructor(t, e, s, i) {
				if (!Tr(t)) throw new TypeError("empty pattern list");
				if (!Cr(e)) throw new TypeError("empty glob list");
				if (e.length !== t.length) throw new TypeError("mismatched pattern list and glob list lengths");
				if (this.length = t.length, s < 0 || s >= this.length) throw new TypeError("index out of range");
				if (this.#t = t, this.#s = e, this.#n = s, this.#r = i, this.#n === 0) {
					if (this.isUNC()) {
						let [r, h, o, a, ...l] = this.#t, [f, c, d, u, ...m] = this.#s;
						l[0] === "" && (l.shift(), m.shift());
						let p = [
							r,
							h,
							o,
							a,
							""
						].join("/"), b = [
							f,
							c,
							d,
							u,
							""
						].join("/");
						this.#t = [p, ...l], this.#s = [b, ...m], this.length = this.#t.length;
					} else if (this.isDrive() || this.isAbsolute()) {
						let [r, ...h] = this.#t, [o, ...a] = this.#s;
						h[0] === "" && (h.shift(), a.shift());
						let l = r + "/", f = o + "/";
						this.#t = [l, ...h], this.#s = [f, ...a], this.length = this.#t.length;
					}
				}
			}
			[Rr]() {
				return "Pattern <" + this.#s.slice(this.#n).join("/") + ">";
			}
			pattern() {
				return this.#t[this.#n];
			}
			isString() {
				return typeof this.#t[this.#n] == "string";
			}
			isGlobstar() {
				return this.#t[this.#n] === xr.GLOBSTAR;
			}
			isRegExp() {
				return this.#t[this.#n] instanceof RegExp;
			}
			globString() {
				return this.#S = this.#S || (this.#n === 0 ? this.isAbsolute() ? this.#s[0] + this.#s.slice(1).join("/") : this.#s.join("/") : this.#s.slice(this.#n).join("/"));
			}
			hasMore() {
				return this.length > this.#n + 1;
			}
			rest() {
				return this.#h !== void 0 ? this.#h : this.hasMore() ? (this.#h = new n(this.#t, this.#s, this.#n + 1, this.#r), this.#h.#o = this.#o, this.#h.#c = this.#c, this.#h.#w = this.#w, this.#h) : this.#h = null;
			}
			isUNC() {
				let t = this.#t;
				return this.#c !== void 0 ? this.#c : this.#c = this.#r === "win32" && this.#n === 0 && t[0] === "" && t[1] === "" && typeof t[2] == "string" && !!t[2] && typeof t[3] == "string" && !!t[3];
			}
			isDrive() {
				let t = this.#t;
				return this.#w !== void 0 ? this.#w : this.#w = this.#r === "win32" && this.#n === 0 && this.length > 1 && typeof t[0] == "string" && /^[a-z]:$/i.test(t[0]);
			}
			isAbsolute() {
				let t = this.#t;
				return this.#o !== void 0 ? this.#o : this.#o = t[0] === "" && t.length > 1 || this.isDrive() || this.isUNC();
			}
			root() {
				let t = this.#t[0];
				return typeof t == "string" && this.isAbsolute() && this.#n === 0 ? t : "";
			}
			checkFollowGlobstar() {
				return !(this.#n === 0 || !this.isGlobstar() || !this.#f);
			}
			markFollowGlobstar() {
				return this.#n === 0 || !this.isGlobstar() || !this.#f ? !1 : (this.#f = !1, !0);
			}
		};
	});
	var ke = R((ee) => {
		"use strict";
		Object.defineProperty(ee, "__esModule", { value: !0 });
		ee.Ignore = void 0;
		var Ps = H(), Ar = Re(), kr = typeof process == "object" && process && typeof process.platform == "string" ? process.platform : "linux", Ae = class {
			relative;
			relativeChildren;
			absolute;
			absoluteChildren;
			platform;
			mmopts;
			constructor(t, { nobrace: e, nocase: s, noext: i, noglobstar: r, platform: h = kr }) {
				this.relative = [], this.absolute = [], this.relativeChildren = [], this.absoluteChildren = [], this.platform = h, this.mmopts = {
					dot: !0,
					nobrace: e,
					nocase: s,
					noext: i,
					noglobstar: r,
					optimizationLevel: 2,
					platform: h,
					nocomment: !0,
					nonegate: !0
				};
				for (let o of t) this.add(o);
			}
			add(t) {
				let e = new Ps.Minimatch(t, this.mmopts);
				for (let s = 0; s < e.set.length; s++) {
					let i = e.set[s], r = e.globParts[s];
					if (!i || !r) throw new Error("invalid pattern object");
					for (; i[0] === "." && r[0] === ".";) i.shift(), r.shift();
					let h = new Ar.Pattern(i, r, 0, this.platform), o = new Ps.Minimatch(h.globString(), this.mmopts), a = r[r.length - 1] === "**", l = h.isAbsolute();
					l ? this.absolute.push(o) : this.relative.push(o), a && (l ? this.absoluteChildren.push(o) : this.relativeChildren.push(o));
				}
			}
			ignored(t) {
				let e = t.fullpath(), s = `${e}/`, i = t.relative() || ".", r = `${i}/`;
				for (let h of this.relative) if (h.match(i) || h.match(r)) return !0;
				for (let h of this.absolute) if (h.match(e) || h.match(s)) return !0;
				return !1;
			}
			childrenIgnored(t) {
				let e = t.fullpath() + "/", s = (t.relative() || ".") + "/";
				for (let i of this.relativeChildren) if (i.match(s)) return !0;
				for (let i of this.absoluteChildren) if (i.match(e)) return !0;
				return !1;
			}
		};
		ee.Ignore = Ae;
	});
	var Fs = R((z) => {
		"use strict";
		Object.defineProperty(z, "__esModule", { value: !0 });
		z.Processor = z.SubWalks = z.MatchRecord = z.HasWalkedCache = void 0;
		var Ds = H(), se = class n {
			store;
			constructor(t = /* @__PURE__ */ new Map()) {
				this.store = t;
			}
			copy() {
				return new n(new Map(this.store));
			}
			hasWalked(t, e) {
				return this.store.get(t.fullpath())?.has(e.globString());
			}
			storeWalked(t, e) {
				let s = t.fullpath(), i = this.store.get(s);
				i ? i.add(e.globString()) : this.store.set(s, new Set([e.globString()]));
			}
		};
		z.HasWalkedCache = se;
		var ie = class {
			store = /* @__PURE__ */ new Map();
			add(t, e, s) {
				let i = (e ? 2 : 0) | (s ? 1 : 0), r = this.store.get(t);
				this.store.set(t, r === void 0 ? i : i & r);
			}
			entries() {
				return [...this.store.entries()].map(([t, e]) => [
					t,
					!!(e & 2),
					!!(e & 1)
				]);
			}
		};
		z.MatchRecord = ie;
		var re = class {
			store = /* @__PURE__ */ new Map();
			add(t, e) {
				if (!t.canReaddir()) return;
				let s = this.store.get(t);
				s ? s.find((i) => i.globString() === e.globString()) || s.push(e) : this.store.set(t, [e]);
			}
			get(t) {
				let e = this.store.get(t);
				if (!e) throw new Error("attempting to walk unknown path");
				return e;
			}
			entries() {
				return this.keys().map((t) => [t, this.store.get(t)]);
			}
			keys() {
				return [...this.store.keys()].filter((t) => t.canReaddir());
			}
		};
		z.SubWalks = re;
		z.Processor = class n {
			hasWalkedCache;
			matches = new ie();
			subwalks = new re();
			patterns;
			follow;
			dot;
			opts;
			constructor(t, e) {
				this.opts = t, this.follow = !!t.follow, this.dot = !!t.dot, this.hasWalkedCache = e ? e.copy() : new se();
			}
			processPatterns(t, e) {
				this.patterns = e;
				let s = e.map((i) => [t, i]);
				for (let [i, r] of s) {
					this.hasWalkedCache.storeWalked(i, r);
					let h = r.root(), o = r.isAbsolute() && this.opts.absolute !== !1;
					if (h) {
						i = i.resolve(h === "/" && this.opts.root !== void 0 ? this.opts.root : h);
						let c = r.rest();
						if (c) r = c;
						else {
							this.matches.add(i, !0, !1);
							continue;
						}
					}
					if (i.isENOENT()) continue;
					let a, l, f = !1;
					for (; typeof (a = r.pattern()) == "string" && (l = r.rest());) i = i.resolve(a), r = l, f = !0;
					if (a = r.pattern(), l = r.rest(), f) {
						if (this.hasWalkedCache.hasWalked(i, r)) continue;
						this.hasWalkedCache.storeWalked(i, r);
					}
					if (typeof a == "string") {
						let c = a === ".." || a === "" || a === ".";
						this.matches.add(i.resolve(a), o, c);
						continue;
					} else if (a === Ds.GLOBSTAR) {
						(!i.isSymbolicLink() || this.follow || r.checkFollowGlobstar()) && this.subwalks.add(i, r);
						let c = l?.pattern(), d = l?.rest();
						if (!l || (c === "" || c === ".") && !d) this.matches.add(i, o, c === "" || c === ".");
						else if (c === "..") {
							let u = i.parent || i;
							d ? this.hasWalkedCache.hasWalked(u, d) || this.subwalks.add(u, d) : this.matches.add(u, o, !0);
						}
					} else a instanceof RegExp && this.subwalks.add(i, r);
				}
				return this;
			}
			subwalkTargets() {
				return this.subwalks.keys();
			}
			child() {
				return new n(this.opts, this.hasWalkedCache);
			}
			filterEntries(t, e) {
				let s = this.subwalks.get(t), i = this.child();
				for (let r of e) for (let h of s) {
					let o = h.isAbsolute(), a = h.pattern(), l = h.rest();
					a === Ds.GLOBSTAR ? i.testGlobstar(r, h, l, o) : a instanceof RegExp ? i.testRegExp(r, a, l, o) : i.testString(r, a, l, o);
				}
				return i;
			}
			testGlobstar(t, e, s, i) {
				if ((this.dot || !t.name.startsWith(".")) && (e.hasMore() || this.matches.add(t, i, !1), t.canReaddir() && (this.follow || !t.isSymbolicLink() ? this.subwalks.add(t, e) : t.isSymbolicLink() && (s && e.checkFollowGlobstar() ? this.subwalks.add(t, s) : e.markFollowGlobstar() && this.subwalks.add(t, e)))), s) {
					let r = s.pattern();
					if (typeof r == "string" && r !== ".." && r !== "" && r !== ".") this.testString(t, r, s.rest(), i);
					else if (r === "..") {
						let h = t.parent || t;
						this.subwalks.add(h, s);
					} else r instanceof RegExp && this.testRegExp(t, r, s.rest(), i);
				}
			}
			testRegExp(t, e, s, i) {
				e.test(t.name) && (s ? this.subwalks.add(t, s) : this.matches.add(t, i, !1));
			}
			testString(t, e, s, i) {
				t.isNamed(e) && (s ? this.subwalks.add(t, s) : this.matches.add(t, i, !1));
			}
		};
	});
	var Ls = R((X) => {
		"use strict";
		Object.defineProperty(X, "__esModule", { value: !0 });
		X.GlobStream = X.GlobWalker = X.GlobUtil = void 0;
		var Mr = Oe(), js = ke(), Ns = Fs(), Pr = (n, t) => typeof n == "string" ? new js.Ignore([n], t) : Array.isArray(n) ? new js.Ignore(n, t) : n, Ot = class {
			path;
			patterns;
			opts;
			seen = /* @__PURE__ */ new Set();
			paused = !1;
			aborted = !1;
			#t = [];
			#s;
			#n;
			signal;
			maxDepth;
			includeChildMatches;
			constructor(t, e, s) {
				if (this.patterns = t, this.path = e, this.opts = s, this.#n = !s.posix && s.platform === "win32" ? "\\" : "/", this.includeChildMatches = s.includeChildMatches !== !1, (s.ignore || !this.includeChildMatches) && (this.#s = Pr(s.ignore ?? [], s), !this.includeChildMatches && typeof this.#s.add != "function")) throw new Error("cannot ignore child matches, ignore lacks add() method.");
				this.maxDepth = s.maxDepth || Infinity, s.signal && (this.signal = s.signal, this.signal.addEventListener("abort", () => {
					this.#t.length = 0;
				}));
			}
			#r(t) {
				return this.seen.has(t) || !!this.#s?.ignored?.(t);
			}
			#h(t) {
				return !!this.#s?.childrenIgnored?.(t);
			}
			pause() {
				this.paused = !0;
			}
			resume() {
				if (this.signal?.aborted) return;
				this.paused = !1;
				let t;
				for (; !this.paused && (t = this.#t.shift());) t();
			}
			onResume(t) {
				this.signal?.aborted || (this.paused ? this.#t.push(t) : t());
			}
			async matchCheck(t, e) {
				if (e && this.opts.nodir) return;
				let s;
				if (this.opts.realpath) {
					if (s = t.realpathCached() || await t.realpath(), !s) return;
					t = s;
				}
				let r = t.isUnknown() || this.opts.stat ? await t.lstat() : t;
				if (this.opts.follow && this.opts.nodir && r?.isSymbolicLink()) {
					let h = await r.realpath();
					h && (h.isUnknown() || this.opts.stat) && await h.lstat();
				}
				return this.matchCheckTest(r, e);
			}
			matchCheckTest(t, e) {
				return t && (this.maxDepth === Infinity || t.depth() <= this.maxDepth) && (!e || t.canReaddir()) && (!this.opts.nodir || !t.isDirectory()) && (!this.opts.nodir || !this.opts.follow || !t.isSymbolicLink() || !t.realpathCached()?.isDirectory()) && !this.#r(t) ? t : void 0;
			}
			matchCheckSync(t, e) {
				if (e && this.opts.nodir) return;
				let s;
				if (this.opts.realpath) {
					if (s = t.realpathCached() || t.realpathSync(), !s) return;
					t = s;
				}
				let r = t.isUnknown() || this.opts.stat ? t.lstatSync() : t;
				if (this.opts.follow && this.opts.nodir && r?.isSymbolicLink()) {
					let h = r.realpathSync();
					h && (h?.isUnknown() || this.opts.stat) && h.lstatSync();
				}
				return this.matchCheckTest(r, e);
			}
			matchFinish(t, e) {
				if (this.#r(t)) return;
				if (!this.includeChildMatches && this.#s?.add) {
					let r = `${t.relativePosix()}/**`;
					this.#s.add(r);
				}
				let s = this.opts.absolute === void 0 ? e : this.opts.absolute;
				this.seen.add(t);
				let i = this.opts.mark && t.isDirectory() ? this.#n : "";
				if (this.opts.withFileTypes) this.matchEmit(t);
				else if (s) {
					let r = this.opts.posix ? t.fullpathPosix() : t.fullpath();
					this.matchEmit(r + i);
				} else {
					let r = this.opts.posix ? t.relativePosix() : t.relative(), h = this.opts.dotRelative && !r.startsWith(".." + this.#n) ? "." + this.#n : "";
					this.matchEmit(r ? h + r + i : "." + i);
				}
			}
			async match(t, e, s) {
				let i = await this.matchCheck(t, s);
				i && this.matchFinish(i, e);
			}
			matchSync(t, e, s) {
				let i = this.matchCheckSync(t, s);
				i && this.matchFinish(i, e);
			}
			walkCB(t, e, s) {
				this.signal?.aborted && s(), this.walkCB2(t, e, new Ns.Processor(this.opts), s);
			}
			walkCB2(t, e, s, i) {
				if (this.#h(t)) return i();
				if (this.signal?.aborted && i(), this.paused) {
					this.onResume(() => this.walkCB2(t, e, s, i));
					return;
				}
				s.processPatterns(t, e);
				let r = 1, h = () => {
					--r === 0 && i();
				};
				for (let [o, a, l] of s.matches.entries()) this.#r(o) || (r++, this.match(o, a, l).then(() => h()));
				for (let o of s.subwalkTargets()) {
					if (this.maxDepth !== Infinity && o.depth() >= this.maxDepth) continue;
					r++;
					let a = o.readdirCached();
					o.calledReaddir() ? this.walkCB3(o, a, s, h) : o.readdirCB((l, f) => this.walkCB3(o, f, s, h), !0);
				}
				h();
			}
			walkCB3(t, e, s, i) {
				s = s.filterEntries(t, e);
				let r = 1, h = () => {
					--r === 0 && i();
				};
				for (let [o, a, l] of s.matches.entries()) this.#r(o) || (r++, this.match(o, a, l).then(() => h()));
				for (let [o, a] of s.subwalks.entries()) r++, this.walkCB2(o, a, s.child(), h);
				h();
			}
			walkCBSync(t, e, s) {
				this.signal?.aborted && s(), this.walkCB2Sync(t, e, new Ns.Processor(this.opts), s);
			}
			walkCB2Sync(t, e, s, i) {
				if (this.#h(t)) return i();
				if (this.signal?.aborted && i(), this.paused) {
					this.onResume(() => this.walkCB2Sync(t, e, s, i));
					return;
				}
				s.processPatterns(t, e);
				let r = 1, h = () => {
					--r === 0 && i();
				};
				for (let [o, a, l] of s.matches.entries()) this.#r(o) || this.matchSync(o, a, l);
				for (let o of s.subwalkTargets()) {
					if (this.maxDepth !== Infinity && o.depth() >= this.maxDepth) continue;
					r++;
					let a = o.readdirSync();
					this.walkCB3Sync(o, a, s, h);
				}
				h();
			}
			walkCB3Sync(t, e, s, i) {
				s = s.filterEntries(t, e);
				let r = 1, h = () => {
					--r === 0 && i();
				};
				for (let [o, a, l] of s.matches.entries()) this.#r(o) || this.matchSync(o, a, l);
				for (let [o, a] of s.subwalks.entries()) r++, this.walkCB2Sync(o, a, s.child(), h);
				h();
			}
		};
		X.GlobUtil = Ot;
		var Pe = class extends Ot {
			matches = /* @__PURE__ */ new Set();
			constructor(t, e, s) {
				super(t, e, s);
			}
			matchEmit(t) {
				this.matches.add(t);
			}
			async walk() {
				if (this.signal?.aborted) throw this.signal.reason;
				return this.path.isUnknown() && await this.path.lstat(), await new Promise((t, e) => {
					this.walkCB(this.path, this.patterns, () => {
						this.signal?.aborted ? e(this.signal.reason) : t(this.matches);
					});
				}), this.matches;
			}
			walkSync() {
				if (this.signal?.aborted) throw this.signal.reason;
				return this.path.isUnknown() && this.path.lstatSync(), this.walkCBSync(this.path, this.patterns, () => {
					if (this.signal?.aborted) throw this.signal.reason;
				}), this.matches;
			}
		};
		X.GlobWalker = Pe;
		var De = class extends Ot {
			results;
			constructor(t, e, s) {
				super(t, e, s), this.results = new Mr.Minipass({
					signal: this.signal,
					objectMode: !0
				}), this.results.on("drain", () => this.resume()), this.results.on("resume", () => this.resume());
			}
			matchEmit(t) {
				this.results.write(t), this.results.flowing || this.pause();
			}
			stream() {
				let t = this.path;
				return t.isUnknown() ? t.lstat().then(() => {
					this.walkCB(t, this.patterns, () => this.results.end());
				}) : this.walkCB(t, this.patterns, () => this.results.end()), this.results;
			}
			streamSync() {
				return this.path.isUnknown() && this.path.lstatSync(), this.walkCBSync(this.path, this.patterns, () => this.results.end()), this.results;
			}
		};
		X.GlobStream = De;
	});
	var je = R((oe) => {
		"use strict";
		Object.defineProperty(oe, "__esModule", { value: !0 });
		oe.Glob = void 0;
		var Dr = H(), Fr = require("node:url"), ne = Ms(), jr = Re(), he = Ls(), Nr = typeof process == "object" && process && typeof process.platform == "string" ? process.platform : "linux", Fe = class {
			absolute;
			cwd;
			root;
			dot;
			dotRelative;
			follow;
			ignore;
			magicalBraces;
			mark;
			matchBase;
			maxDepth;
			nobrace;
			nocase;
			nodir;
			noext;
			noglobstar;
			pattern;
			platform;
			realpath;
			scurry;
			stat;
			signal;
			windowsPathsNoEscape;
			withFileTypes;
			includeChildMatches;
			opts;
			patterns;
			constructor(t, e) {
				if (!e) throw new TypeError("glob options required");
				if (this.withFileTypes = !!e.withFileTypes, this.signal = e.signal, this.follow = !!e.follow, this.dot = !!e.dot, this.dotRelative = !!e.dotRelative, this.nodir = !!e.nodir, this.mark = !!e.mark, e.cwd ? (e.cwd instanceof URL || e.cwd.startsWith("file://")) && (e.cwd = (0, Fr.fileURLToPath)(e.cwd)) : this.cwd = "", this.cwd = e.cwd || "", this.root = e.root, this.magicalBraces = !!e.magicalBraces, this.nobrace = !!e.nobrace, this.noext = !!e.noext, this.realpath = !!e.realpath, this.absolute = e.absolute, this.includeChildMatches = e.includeChildMatches !== !1, this.noglobstar = !!e.noglobstar, this.matchBase = !!e.matchBase, this.maxDepth = typeof e.maxDepth == "number" ? e.maxDepth : Infinity, this.stat = !!e.stat, this.ignore = e.ignore, this.withFileTypes && this.absolute !== void 0) throw new Error("cannot set absolute and withFileTypes:true");
				if (typeof t == "string" && (t = [t]), this.windowsPathsNoEscape = !!e.windowsPathsNoEscape || e.allowWindowsEscape === !1, this.windowsPathsNoEscape && (t = t.map((a) => a.replace(/\\/g, "/"))), this.matchBase) {
					if (e.noglobstar) throw new TypeError("base matching requires globstar");
					t = t.map((a) => a.includes("/") ? a : `./**/${a}`);
				}
				if (this.pattern = t, this.platform = e.platform || Nr, this.opts = {
					...e,
					platform: this.platform
				}, e.scurry) {
					if (this.scurry = e.scurry, e.nocase !== void 0 && e.nocase !== e.scurry.nocase) throw new Error("nocase option contradicts provided scurry option");
				} else {
					let a = e.platform === "win32" ? ne.PathScurryWin32 : e.platform === "darwin" ? ne.PathScurryDarwin : e.platform ? ne.PathScurryPosix : ne.PathScurry;
					this.scurry = new a(this.cwd, {
						nocase: e.nocase,
						fs: e.fs
					});
				}
				this.nocase = this.scurry.nocase;
				let s = this.platform === "darwin" || this.platform === "win32", i = {
					braceExpandMax: 1e4,
					...e,
					dot: this.dot,
					matchBase: this.matchBase,
					nobrace: this.nobrace,
					nocase: this.nocase,
					nocaseMagicOnly: s,
					nocomment: !0,
					noext: this.noext,
					nonegate: !0,
					optimizationLevel: 2,
					platform: this.platform,
					windowsPathsNoEscape: this.windowsPathsNoEscape,
					debug: !!this.opts.debug
				}, [h, o] = this.pattern.map((a) => new Dr.Minimatch(a, i)).reduce((a, l) => (a[0].push(...l.set), a[1].push(...l.globParts), a), [[], []]);
				this.patterns = h.map((a, l) => {
					let f = o[l];
					if (!f) throw new Error("invalid pattern object");
					return new jr.Pattern(a, f, 0, this.platform);
				});
			}
			async walk() {
				return [...await new he.GlobWalker(this.patterns, this.scurry.cwd, {
					...this.opts,
					maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
					platform: this.platform,
					nocase: this.nocase,
					includeChildMatches: this.includeChildMatches
				}).walk()];
			}
			walkSync() {
				return [...new he.GlobWalker(this.patterns, this.scurry.cwd, {
					...this.opts,
					maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
					platform: this.platform,
					nocase: this.nocase,
					includeChildMatches: this.includeChildMatches
				}).walkSync()];
			}
			stream() {
				return new he.GlobStream(this.patterns, this.scurry.cwd, {
					...this.opts,
					maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
					platform: this.platform,
					nocase: this.nocase,
					includeChildMatches: this.includeChildMatches
				}).stream();
			}
			streamSync() {
				return new he.GlobStream(this.patterns, this.scurry.cwd, {
					...this.opts,
					maxDepth: this.maxDepth !== Infinity ? this.maxDepth + this.scurry.cwd.depth() : Infinity,
					platform: this.platform,
					nocase: this.nocase,
					includeChildMatches: this.includeChildMatches
				}).streamSync();
			}
			iterateSync() {
				return this.streamSync()[Symbol.iterator]();
			}
			[Symbol.iterator]() {
				return this.iterateSync();
			}
			iterate() {
				return this.stream()[Symbol.asyncIterator]();
			}
			[Symbol.asyncIterator]() {
				return this.iterate();
			}
		};
		oe.Glob = Fe;
	});
	var Ne = R((ae) => {
		"use strict";
		Object.defineProperty(ae, "__esModule", { value: !0 });
		ae.hasMagic = void 0;
		var Lr = H(), Wr = (n, t = {}) => {
			Array.isArray(n) || (n = [n]);
			for (let e of n) if (new Lr.Minimatch(e, t).hasMagic()) return !0;
			return !1;
		};
		ae.hasMagic = Wr;
	});
	Object.defineProperty(exports, "__esModule", { value: !0 });
	exports.glob = exports.sync = exports.iterate = exports.iterateSync = exports.stream = exports.streamSync = exports.Ignore = exports.hasMagic = exports.Glob = exports.unescape = exports.escape = void 0;
	exports.globStreamSync = xt;
	exports.globStream = Le;
	exports.globSync = We;
	exports.globIterateSync = Tt;
	exports.globIterate = Be;
	var Ws = H(), tt = je(), Br = Ne(), Is = H();
	Object.defineProperty(exports, "escape", {
		enumerable: !0,
		get: function() {
			return Is.escape;
		}
	});
	Object.defineProperty(exports, "unescape", {
		enumerable: !0,
		get: function() {
			return Is.unescape;
		}
	});
	var Ir = je();
	Object.defineProperty(exports, "Glob", {
		enumerable: !0,
		get: function() {
			return Ir.Glob;
		}
	});
	var Gr = Ne();
	Object.defineProperty(exports, "hasMagic", {
		enumerable: !0,
		get: function() {
			return Gr.hasMagic;
		}
	});
	var zr = ke();
	Object.defineProperty(exports, "Ignore", {
		enumerable: !0,
		get: function() {
			return zr.Ignore;
		}
	});
	function xt(n, t = {}) {
		return new tt.Glob(n, t).streamSync();
	}
	function Le(n, t = {}) {
		return new tt.Glob(n, t).stream();
	}
	function We(n, t = {}) {
		return new tt.Glob(n, t).walkSync();
	}
	async function Bs(n, t = {}) {
		return new tt.Glob(n, t).walk();
	}
	function Tt(n, t = {}) {
		return new tt.Glob(n, t).iterateSync();
	}
	function Be(n, t = {}) {
		return new tt.Glob(n, t).iterate();
	}
	exports.streamSync = xt;
	exports.stream = Object.assign(Le, { sync: xt });
	exports.iterateSync = Tt;
	exports.iterate = Object.assign(Be, { sync: Tt });
	exports.sync = Object.assign(We, {
		stream: xt,
		iterate: Tt
	});
	exports.glob = Object.assign(Bs, {
		glob: Bs,
		globSync: We,
		sync: exports.sync,
		globStream: Le,
		stream: exports.stream,
		globStreamSync: xt,
		streamSync: exports.streamSync,
		globIterate: Be,
		iterate: exports.iterate,
		globIterateSync: Tt,
		iterateSync: exports.iterateSync,
		Glob: tt.Glob,
		hasMagic: Br.hasMagic,
		escape: Ws.escape,
		unescape: Ws.unescape
	});
	exports.glob.glob = exports.glob;
}));
//#endregion
//#region node_modules/balanced-match/dist/commonjs/index.js
var require_commonjs$2 = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.range = exports.balanced = void 0;
	const balanced = (a, b, str) => {
		const ma = a instanceof RegExp ? maybeMatch(a, str) : a;
		const mb = b instanceof RegExp ? maybeMatch(b, str) : b;
		const r = ma !== null && mb != null && (0, exports.range)(ma, mb, str);
		return r && {
			start: r[0],
			end: r[1],
			pre: str.slice(0, r[0]),
			body: str.slice(r[0] + ma.length, r[1]),
			post: str.slice(r[1] + mb.length)
		};
	};
	exports.balanced = balanced;
	const maybeMatch = (reg, str) => {
		const m = str.match(reg);
		return m ? m[0] : null;
	};
	const range = (a, b, str) => {
		let begs, beg, left, right = void 0, result;
		let ai = str.indexOf(a);
		let bi = str.indexOf(b, ai + 1);
		let i = ai;
		if (ai >= 0 && bi > 0) {
			if (a === b) return [ai, bi];
			begs = [];
			left = str.length;
			while (i >= 0 && !result) {
				if (i === ai) {
					begs.push(i);
					ai = str.indexOf(a, i + 1);
				} else if (begs.length === 1) {
					const r = begs.pop();
					if (r !== void 0) result = [r, bi];
				} else {
					beg = begs.pop();
					if (beg !== void 0 && beg < left) {
						left = beg;
						right = bi;
					}
					bi = str.indexOf(b, i + 1);
				}
				i = ai < bi && ai >= 0 ? ai : bi;
			}
			if (begs.length && right !== void 0) result = [left, right];
		}
		return result;
	};
	exports.range = range;
}));
//#endregion
//#region node_modules/brace-expansion/dist/commonjs/index.js
var require_commonjs$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.EXPANSION_MAX = void 0;
	exports.expand = expand;
	const balanced_match_1 = require_commonjs$2();
	const escSlash = "\0SLASH" + Math.random() + "\0";
	const escOpen = "\0OPEN" + Math.random() + "\0";
	const escClose = "\0CLOSE" + Math.random() + "\0";
	const escComma = "\0COMMA" + Math.random() + "\0";
	const escPeriod = "\0PERIOD" + Math.random() + "\0";
	const escSlashPattern = new RegExp(escSlash, "g");
	const escOpenPattern = new RegExp(escOpen, "g");
	const escClosePattern = new RegExp(escClose, "g");
	const escCommaPattern = new RegExp(escComma, "g");
	const escPeriodPattern = new RegExp(escPeriod, "g");
	const slashPattern = /\\\\/g;
	const openPattern = /\\{/g;
	const closePattern = /\\}/g;
	const commaPattern = /\\,/g;
	const periodPattern = /\\\./g;
	exports.EXPANSION_MAX = 1e5;
	function numeric(str) {
		return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);
	}
	function escapeBraces(str) {
		return str.replace(slashPattern, escSlash).replace(openPattern, escOpen).replace(closePattern, escClose).replace(commaPattern, escComma).replace(periodPattern, escPeriod);
	}
	function unescapeBraces(str) {
		return str.replace(escSlashPattern, "\\").replace(escOpenPattern, "{").replace(escClosePattern, "}").replace(escCommaPattern, ",").replace(escPeriodPattern, ".");
	}
	/**
	* Basically just str.split(","), but handling cases
	* where we have nested braced sections, which should be
	* treated as individual members, like {a,{b,c},d}
	*/
	function parseCommaParts(str) {
		if (!str) return [""];
		const parts = [];
		const m = (0, balanced_match_1.balanced)("{", "}", str);
		if (!m) return str.split(",");
		const { pre, body, post } = m;
		const p = pre.split(",");
		p[p.length - 1] += "{" + body + "}";
		const postParts = parseCommaParts(post);
		if (post.length) {
			p[p.length - 1] += postParts.shift();
			p.push.apply(p, postParts);
		}
		parts.push.apply(parts, p);
		return parts;
	}
	function expand(str, options = {}) {
		if (!str) return [];
		const { max = exports.EXPANSION_MAX } = options;
		if (str.slice(0, 2) === "{}") str = "\\{\\}" + str.slice(2);
		return expand_(escapeBraces(str), max, true).map(unescapeBraces);
	}
	function embrace(str) {
		return "{" + str + "}";
	}
	function isPadded(el) {
		return /^-?0\d/.test(el);
	}
	function lte(i, y) {
		return i <= y;
	}
	function gte(i, y) {
		return i >= y;
	}
	function expand_(str, max, isTop) {
		/** @type {string[]} */
		const expansions = [];
		const m = (0, balanced_match_1.balanced)("{", "}", str);
		if (!m) return [str];
		const pre = m.pre;
		const post = m.post.length ? expand_(m.post, max, false) : [""];
		if (/\$$/.test(m.pre)) for (let k = 0; k < post.length && k < max; k++) {
			const expansion = pre + "{" + m.body + "}" + post[k];
			expansions.push(expansion);
		}
		else {
			const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
			const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
			const isSequence = isNumericSequence || isAlphaSequence;
			const isOptions = m.body.indexOf(",") >= 0;
			if (!isSequence && !isOptions) {
				if (m.post.match(/,(?!,).*\}/)) {
					str = m.pre + "{" + m.body + escClose + m.post;
					return expand_(str, max, true);
				}
				return [str];
			}
			let n;
			if (isSequence) n = m.body.split(/\.\./);
			else {
				n = parseCommaParts(m.body);
				if (n.length === 1 && n[0] !== void 0) {
					n = expand_(n[0], max, false).map(embrace);
					/* c8 ignore start */
					if (n.length === 1) return post.map((p) => m.pre + n[0] + p);
				}
			}
			let N;
			if (isSequence && n[0] !== void 0 && n[1] !== void 0) {
				const x = numeric(n[0]);
				const y = numeric(n[1]);
				const width = Math.max(n[0].length, n[1].length);
				let incr = n.length === 3 && n[2] !== void 0 ? Math.max(Math.abs(numeric(n[2])), 1) : 1;
				let test = lte;
				if (y < x) {
					incr *= -1;
					test = gte;
				}
				const pad = n.some(isPadded);
				N = [];
				for (let i = x; test(i, y) && N.length < max; i += incr) {
					let c;
					if (isAlphaSequence) {
						c = String.fromCharCode(i);
						if (c === "\\") c = "";
					} else {
						c = String(i);
						if (pad) {
							const need = width - c.length;
							if (need > 0) {
								const z = new Array(need + 1).join("0");
								if (i < 0) c = "-" + z + c.slice(1);
								else c = z + c;
							}
						}
					}
					N.push(c);
				}
			} else {
				N = [];
				for (let j = 0; j < n.length; j++) N.push.apply(N, expand_(n[j], max, false));
			}
			for (let j = 0; j < N.length; j++) for (let k = 0; k < post.length && expansions.length < max; k++) {
				const expansion = pre + N[j] + post[k];
				if (!isTop || isSequence || expansion) expansions.push(expansion);
			}
		}
		return expansions;
	}
}));
//#endregion
//#region node_modules/minimatch/dist/commonjs/assert-valid-pattern.js
var require_assert_valid_pattern = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.assertValidPattern = void 0;
	const MAX_PATTERN_LENGTH = 1024 * 64;
	const assertValidPattern = (pattern) => {
		if (typeof pattern !== "string") throw new TypeError("invalid pattern");
		if (pattern.length > MAX_PATTERN_LENGTH) throw new TypeError("pattern is too long");
	};
	exports.assertValidPattern = assertValidPattern;
}));
//#endregion
//#region node_modules/minimatch/dist/commonjs/brace-expressions.js
var require_brace_expressions = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.parseClass = void 0;
	const posixClasses = {
		"[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true],
		"[:alpha:]": ["\\p{L}\\p{Nl}", true],
		"[:ascii:]": ["\\x00-\\x7f", false],
		"[:blank:]": ["\\p{Zs}\\t", true],
		"[:cntrl:]": ["\\p{Cc}", true],
		"[:digit:]": ["\\p{Nd}", true],
		"[:graph:]": [
			"\\p{Z}\\p{C}",
			true,
			true
		],
		"[:lower:]": ["\\p{Ll}", true],
		"[:print:]": ["\\p{C}", true],
		"[:punct:]": ["\\p{P}", true],
		"[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", true],
		"[:upper:]": ["\\p{Lu}", true],
		"[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true],
		"[:xdigit:]": ["A-Fa-f0-9", false]
	};
	const braceEscape = (s) => s.replace(/[[\]\\-]/g, "\\$&");
	const regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
	const rangesToString = (ranges) => ranges.join("");
	const parseClass = (glob, position) => {
		const pos = position;
		/* c8 ignore start */
		if (glob.charAt(pos) !== "[") throw new Error("not in a brace expression");
		/* c8 ignore stop */
		const ranges = [];
		const negs = [];
		let i = pos + 1;
		let sawStart = false;
		let uflag = false;
		let escaping = false;
		let negate = false;
		let endPos = pos;
		let rangeStart = "";
		WHILE: while (i < glob.length) {
			const c = glob.charAt(i);
			if ((c === "!" || c === "^") && i === pos + 1) {
				negate = true;
				i++;
				continue;
			}
			if (c === "]" && sawStart && !escaping) {
				endPos = i + 1;
				break;
			}
			sawStart = true;
			if (c === "\\") {
				if (!escaping) {
					escaping = true;
					i++;
					continue;
				}
			}
			if (c === "[" && !escaping) {
				for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) if (glob.startsWith(cls, i)) {
					if (rangeStart) return [
						"$.",
						false,
						glob.length - pos,
						true
					];
					i += cls.length;
					if (neg) negs.push(unip);
					else ranges.push(unip);
					uflag = uflag || u;
					continue WHILE;
				}
			}
			escaping = false;
			if (rangeStart) {
				if (c > rangeStart) ranges.push(braceEscape(rangeStart) + "-" + braceEscape(c));
				else if (c === rangeStart) ranges.push(braceEscape(c));
				rangeStart = "";
				i++;
				continue;
			}
			if (glob.startsWith("-]", i + 1)) {
				ranges.push(braceEscape(c + "-"));
				i += 2;
				continue;
			}
			if (glob.startsWith("-", i + 1)) {
				rangeStart = c;
				i += 2;
				continue;
			}
			ranges.push(braceEscape(c));
			i++;
		}
		if (endPos < i) return [
			"",
			false,
			0,
			false
		];
		if (!ranges.length && !negs.length) return [
			"$.",
			false,
			glob.length - pos,
			true
		];
		if (negs.length === 0 && ranges.length === 1 && /^\\?.$/.test(ranges[0]) && !negate) return [
			regexpEscape(ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0]),
			false,
			endPos - pos,
			false
		];
		const sranges = "[" + (negate ? "^" : "") + rangesToString(ranges) + "]";
		const snegs = "[" + (negate ? "" : "^") + rangesToString(negs) + "]";
		return [
			ranges.length && negs.length ? "(" + sranges + "|" + snegs + ")" : ranges.length ? sranges : snegs,
			uflag,
			endPos - pos,
			true
		];
	};
	exports.parseClass = parseClass;
}));
//#endregion
//#region node_modules/minimatch/dist/commonjs/unescape.js
var require_unescape = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.unescape = void 0;
	/**
	* Un-escape a string that has been escaped with {@link escape}.
	*
	* If the {@link MinimatchOptions.windowsPathsNoEscape} option is used, then
	* square-bracket escapes are removed, but not backslash escapes.
	*
	* For example, it will turn the string `'[*]'` into `*`, but it will not
	* turn `'\\*'` into `'*'`, because `\` is a path separator in
	* `windowsPathsNoEscape` mode.
	*
	* When `windowsPathsNoEscape` is not set, then both square-bracket escapes and
	* backslash escapes are removed.
	*
	* Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
	* or unescaped.
	*
	* When `magicalBraces` is not set, escapes of braces (`{` and `}`) will not be
	* unescaped.
	*/
	const unescape = (s, { windowsPathsNoEscape = false, magicalBraces = true } = {}) => {
		if (magicalBraces) return windowsPathsNoEscape ? s.replace(/\[([^/\\])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^/\\])\]/g, "$1$2").replace(/\\([^/])/g, "$1");
		return windowsPathsNoEscape ? s.replace(/\[([^/\\{}])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^/\\{}])\]/g, "$1$2").replace(/\\([^/{}])/g, "$1");
	};
	exports.unescape = unescape;
}));
//#endregion
//#region node_modules/minimatch/dist/commonjs/ast.js
var require_ast = /* @__PURE__ */ __commonJSMin(((exports) => {
	var _a;
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.AST = void 0;
	const brace_expressions_js_1 = require_brace_expressions();
	const unescape_js_1 = require_unescape();
	const types = new Set([
		"!",
		"?",
		"+",
		"*",
		"@"
	]);
	const isExtglobType = (c) => types.has(c);
	const isExtglobAST = (c) => isExtglobType(c.type);
	const adoptionMap = new Map([
		["!", ["@"]],
		["?", ["?", "@"]],
		["@", ["@"]],
		["*", [
			"*",
			"+",
			"?",
			"@"
		]],
		["+", ["+", "@"]]
	]);
	const adoptionWithSpaceMap = new Map([
		["!", ["?"]],
		["@", ["?"]],
		["+", ["?", "*"]]
	]);
	const adoptionAnyMap = new Map([
		["!", ["?", "@"]],
		["?", ["?", "@"]],
		["@", ["?", "@"]],
		["*", [
			"*",
			"+",
			"?",
			"@"
		]],
		["+", [
			"+",
			"@",
			"?",
			"*"
		]]
	]);
	const usurpMap = new Map([
		["!", new Map([["!", "@"]])],
		["?", new Map([["*", "*"], ["+", "*"]])],
		["@", new Map([
			["!", "!"],
			["?", "?"],
			["@", "@"],
			["*", "*"],
			["+", "+"]
		])],
		["+", new Map([["?", "*"], ["*", "*"]])]
	]);
	const startNoTraversal = "(?!(?:^|/)\\.\\.?(?:$|/))";
	const startNoDot = "(?!\\.)";
	const addPatternStart = new Set(["[", "."]);
	const justDots = new Set(["..", "."]);
	const reSpecials = /* @__PURE__ */ new Set("().*{}+?[]^$\\!");
	const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
	const qmark = "[^/]";
	const star = "[^/]*?";
	const starNoEmpty = "[^/]+?";
	let ID = 0;
	var AST = class {
		type;
		#root;
		#hasMagic;
		#uflag = false;
		#parts = [];
		#parent;
		#parentIndex;
		#negs;
		#filledNegs = false;
		#options;
		#toString;
		#emptyExt = false;
		id = ++ID;
		get depth() {
			return (this.#parent?.depth ?? -1) + 1;
		}
		[Symbol.for("nodejs.util.inspect.custom")]() {
			return {
				"@@type": "AST",
				id: this.id,
				type: this.type,
				root: this.#root.id,
				parent: this.#parent?.id,
				depth: this.depth,
				partsLength: this.#parts.length,
				parts: this.#parts
			};
		}
		constructor(type, parent, options = {}) {
			this.type = type;
			if (type) this.#hasMagic = true;
			this.#parent = parent;
			this.#root = this.#parent ? this.#parent.#root : this;
			this.#options = this.#root === this ? options : this.#root.#options;
			this.#negs = this.#root === this ? [] : this.#root.#negs;
			if (type === "!" && !this.#root.#filledNegs) this.#negs.push(this);
			this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
		}
		get hasMagic() {
			/* c8 ignore start */
			if (this.#hasMagic !== void 0) return this.#hasMagic;
			/* c8 ignore stop */
			for (const p of this.#parts) {
				if (typeof p === "string") continue;
				if (p.type || p.hasMagic) return this.#hasMagic = true;
			}
			return this.#hasMagic;
		}
		toString() {
			return this.#toString !== void 0 ? this.#toString : !this.type ? this.#toString = this.#parts.map((p) => String(p)).join("") : this.#toString = this.type + "(" + this.#parts.map((p) => String(p)).join("|") + ")";
		}
		#fillNegs() {
			/* c8 ignore start */
			if (this !== this.#root) throw new Error("should only call on root");
			if (this.#filledNegs) return this;
			/* c8 ignore stop */
			this.toString();
			this.#filledNegs = true;
			let n;
			while (n = this.#negs.pop()) {
				if (n.type !== "!") continue;
				let p = n;
				let pp = p.#parent;
				while (pp) {
					for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) for (const part of n.#parts) {
						/* c8 ignore start */
						if (typeof part === "string") throw new Error("string part in extglob AST??");
						/* c8 ignore stop */
						part.copyIn(pp.#parts[i]);
					}
					p = pp;
					pp = p.#parent;
				}
			}
			return this;
		}
		push(...parts) {
			for (const p of parts) {
				if (p === "") continue;
				/* c8 ignore start */
				if (typeof p !== "string" && !(p instanceof _a && p.#parent === this)) throw new Error("invalid part: " + p);
				/* c8 ignore stop */
				this.#parts.push(p);
			}
		}
		toJSON() {
			const ret = this.type === null ? this.#parts.slice().map((p) => typeof p === "string" ? p : p.toJSON()) : [this.type, ...this.#parts.map((p) => p.toJSON())];
			if (this.isStart() && !this.type) ret.unshift([]);
			if (this.isEnd() && (this === this.#root || this.#root.#filledNegs && this.#parent?.type === "!")) ret.push({});
			return ret;
		}
		isStart() {
			if (this.#root === this) return true;
			if (!this.#parent?.isStart()) return false;
			if (this.#parentIndex === 0) return true;
			const p = this.#parent;
			for (let i = 0; i < this.#parentIndex; i++) {
				const pp = p.#parts[i];
				if (!(pp instanceof _a && pp.type === "!")) return false;
			}
			return true;
		}
		isEnd() {
			if (this.#root === this) return true;
			if (this.#parent?.type === "!") return true;
			if (!this.#parent?.isEnd()) return false;
			if (!this.type) return this.#parent?.isEnd();
			/* c8 ignore start */
			const pl = this.#parent ? this.#parent.#parts.length : 0;
			/* c8 ignore stop */
			return this.#parentIndex === pl - 1;
		}
		copyIn(part) {
			if (typeof part === "string") this.push(part);
			else this.push(part.clone(this));
		}
		clone(parent) {
			const c = new _a(this.type, parent);
			for (const p of this.#parts) c.copyIn(p);
			return c;
		}
		static #parseAST(str, ast, pos, opt, extDepth) {
			const maxDepth = opt.maxExtglobRecursion ?? 2;
			let escaping = false;
			let inBrace = false;
			let braceStart = -1;
			let braceNeg = false;
			if (ast.type === null) {
				let i = pos;
				let acc = "";
				while (i < str.length) {
					const c = str.charAt(i++);
					if (escaping || c === "\\") {
						escaping = !escaping;
						acc += c;
						continue;
					}
					if (inBrace) {
						if (i === braceStart + 1) {
							if (c === "^" || c === "!") braceNeg = true;
						} else if (c === "]" && !(i === braceStart + 2 && braceNeg)) inBrace = false;
						acc += c;
						continue;
					} else if (c === "[") {
						inBrace = true;
						braceStart = i;
						braceNeg = false;
						acc += c;
						continue;
					}
					if (!opt.noext && isExtglobType(c) && str.charAt(i) === "(" && extDepth <= maxDepth) {
						ast.push(acc);
						acc = "";
						const ext = new _a(c, ast);
						i = _a.#parseAST(str, ext, i, opt, extDepth + 1);
						ast.push(ext);
						continue;
					}
					acc += c;
				}
				ast.push(acc);
				return i;
			}
			let i = pos + 1;
			let part = new _a(null, ast);
			const parts = [];
			let acc = "";
			while (i < str.length) {
				const c = str.charAt(i++);
				if (escaping || c === "\\") {
					escaping = !escaping;
					acc += c;
					continue;
				}
				if (inBrace) {
					if (i === braceStart + 1) {
						if (c === "^" || c === "!") braceNeg = true;
					} else if (c === "]" && !(i === braceStart + 2 && braceNeg)) inBrace = false;
					acc += c;
					continue;
				} else if (c === "[") {
					inBrace = true;
					braceStart = i;
					braceNeg = false;
					acc += c;
					continue;
				}
				/* c8 ignore stop */
				if (!opt.noext && isExtglobType(c) && str.charAt(i) === "(" && (extDepth <= maxDepth || ast && ast.#canAdoptType(c))) {
					const depthAdd = ast && ast.#canAdoptType(c) ? 0 : 1;
					part.push(acc);
					acc = "";
					const ext = new _a(c, part);
					part.push(ext);
					i = _a.#parseAST(str, ext, i, opt, extDepth + depthAdd);
					continue;
				}
				if (c === "|") {
					part.push(acc);
					acc = "";
					parts.push(part);
					part = new _a(null, ast);
					continue;
				}
				if (c === ")") {
					if (acc === "" && ast.#parts.length === 0) ast.#emptyExt = true;
					part.push(acc);
					acc = "";
					ast.push(...parts, part);
					return i;
				}
				acc += c;
			}
			ast.type = null;
			ast.#hasMagic = void 0;
			ast.#parts = [str.substring(pos - 1)];
			return i;
		}
		#canAdoptWithSpace(child) {
			return this.#canAdopt(child, adoptionWithSpaceMap);
		}
		#canAdopt(child, map = adoptionMap) {
			if (!child || typeof child !== "object" || child.type !== null || child.#parts.length !== 1 || this.type === null) return false;
			const gc = child.#parts[0];
			if (!gc || typeof gc !== "object" || gc.type === null) return false;
			return this.#canAdoptType(gc.type, map);
		}
		#canAdoptType(c, map = adoptionAnyMap) {
			return !!map.get(this.type)?.includes(c);
		}
		#adoptWithSpace(child, index) {
			const gc = child.#parts[0];
			const blank = new _a(null, gc, this.options);
			blank.#parts.push("");
			gc.push(blank);
			this.#adopt(child, index);
		}
		#adopt(child, index) {
			const gc = child.#parts[0];
			this.#parts.splice(index, 1, ...gc.#parts);
			for (const p of gc.#parts) if (typeof p === "object") p.#parent = this;
			this.#toString = void 0;
		}
		#canUsurpType(c) {
			return !!usurpMap.get(this.type)?.has(c);
		}
		#canUsurp(child) {
			if (!child || typeof child !== "object" || child.type !== null || child.#parts.length !== 1 || this.type === null || this.#parts.length !== 1) return false;
			const gc = child.#parts[0];
			if (!gc || typeof gc !== "object" || gc.type === null) return false;
			return this.#canUsurpType(gc.type);
		}
		#usurp(child) {
			const m = usurpMap.get(this.type);
			const gc = child.#parts[0];
			const nt = m?.get(gc.type);
			/* c8 ignore start - impossible */
			if (!nt) return false;
			/* c8 ignore stop */
			this.#parts = gc.#parts;
			for (const p of this.#parts) if (typeof p === "object") p.#parent = this;
			this.type = nt;
			this.#toString = void 0;
			this.#emptyExt = false;
		}
		static fromGlob(pattern, options = {}) {
			const ast = new _a(null, void 0, options);
			_a.#parseAST(pattern, ast, 0, options, 0);
			return ast;
		}
		toMMPattern() {
			/* c8 ignore start */
			if (this !== this.#root) return this.#root.toMMPattern();
			/* c8 ignore stop */
			const glob = this.toString();
			const [re, body, hasMagic, uflag] = this.toRegExpSource();
			if (!(hasMagic || this.#hasMagic || this.#options.nocase && !this.#options.nocaseMagicOnly && glob.toUpperCase() !== glob.toLowerCase())) return body;
			const flags = (this.#options.nocase ? "i" : "") + (uflag ? "u" : "");
			return Object.assign(new RegExp(`^${re}$`, flags), {
				_src: re,
				_glob: glob
			});
		}
		get options() {
			return this.#options;
		}
		toRegExpSource(allowDot) {
			const dot = allowDot ?? !!this.#options.dot;
			if (this.#root === this) {
				this.#flatten();
				this.#fillNegs();
			}
			if (!isExtglobAST(this)) {
				const noEmpty = this.isStart() && this.isEnd() && !this.#parts.some((s) => typeof s !== "string");
				const src = this.#parts.map((p) => {
					const [re, _, hasMagic, uflag] = typeof p === "string" ? _a.#parseGlob(p, this.#hasMagic, noEmpty) : p.toRegExpSource(allowDot);
					this.#hasMagic = this.#hasMagic || hasMagic;
					this.#uflag = this.#uflag || uflag;
					return re;
				}).join("");
				let start = "";
				if (this.isStart()) {
					if (typeof this.#parts[0] === "string") {
						if (!(this.#parts.length === 1 && justDots.has(this.#parts[0]))) {
							const aps = addPatternStart;
							const needNoTrav = dot && aps.has(src.charAt(0)) || src.startsWith("\\.") && aps.has(src.charAt(2)) || src.startsWith("\\.\\.") && aps.has(src.charAt(4));
							const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));
							start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : "";
						}
					}
				}
				let end = "";
				if (this.isEnd() && this.#root.#filledNegs && this.#parent?.type === "!") end = "(?:$|\\/)";
				return [
					start + src + end,
					(0, unescape_js_1.unescape)(src),
					this.#hasMagic = !!this.#hasMagic,
					this.#uflag
				];
			}
			const repeated = this.type === "*" || this.type === "+";
			const start = this.type === "!" ? "(?:(?!(?:" : "(?:";
			let body = this.#partsToRegExp(dot);
			if (this.isStart() && this.isEnd() && !body && this.type !== "!") {
				const s = this.toString();
				const me = this;
				me.#parts = [s];
				me.type = null;
				me.#hasMagic = void 0;
				return [
					s,
					(0, unescape_js_1.unescape)(this.toString()),
					false,
					false
				];
			}
			let bodyDotAllowed = !repeated || allowDot || dot || false ? "" : this.#partsToRegExp(true);
			if (bodyDotAllowed === body) bodyDotAllowed = "";
			if (bodyDotAllowed) body = `(?:${body})(?:${bodyDotAllowed})*?`;
			let final = "";
			if (this.type === "!" && this.#emptyExt) final = (this.isStart() && !dot ? startNoDot : "") + starNoEmpty;
			else {
				const close = this.type === "!" ? "))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + "[^/]*?)" : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`;
				final = start + body + close;
			}
			return [
				final,
				(0, unescape_js_1.unescape)(body),
				this.#hasMagic = !!this.#hasMagic,
				this.#uflag
			];
		}
		#flatten() {
			if (!isExtglobAST(this)) {
				for (const p of this.#parts) if (typeof p === "object") p.#flatten();
			} else {
				let iterations = 0;
				let done = false;
				do {
					done = true;
					for (let i = 0; i < this.#parts.length; i++) {
						const c = this.#parts[i];
						if (typeof c === "object") {
							c.#flatten();
							if (this.#canAdopt(c)) {
								done = false;
								this.#adopt(c, i);
							} else if (this.#canAdoptWithSpace(c)) {
								done = false;
								this.#adoptWithSpace(c, i);
							} else if (this.#canUsurp(c)) {
								done = false;
								this.#usurp(c);
							}
						}
					}
				} while (!done && ++iterations < 10);
			}
			this.#toString = void 0;
		}
		#partsToRegExp(dot) {
			return this.#parts.map((p) => {
				/* c8 ignore start */
				if (typeof p === "string") throw new Error("string type in extglob ast??");
				/* c8 ignore stop */
				const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);
				this.#uflag = this.#uflag || uflag;
				return re;
			}).filter((p) => !(this.isStart() && this.isEnd()) || !!p).join("|");
		}
		static #parseGlob(glob, hasMagic, noEmpty = false) {
			let escaping = false;
			let re = "";
			let uflag = false;
			let inStar = false;
			for (let i = 0; i < glob.length; i++) {
				const c = glob.charAt(i);
				if (escaping) {
					escaping = false;
					re += (reSpecials.has(c) ? "\\" : "") + c;
					continue;
				}
				if (c === "*") {
					if (inStar) continue;
					inStar = true;
					re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star;
					hasMagic = true;
					continue;
				} else inStar = false;
				if (c === "\\") {
					if (i === glob.length - 1) re += "\\\\";
					else escaping = true;
					continue;
				}
				if (c === "[") {
					const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i);
					if (consumed) {
						re += src;
						uflag = uflag || needUflag;
						i += consumed - 1;
						hasMagic = hasMagic || magic;
						continue;
					}
				}
				if (c === "?") {
					re += qmark;
					hasMagic = true;
					continue;
				}
				re += regExpEscape(c);
			}
			return [
				re,
				(0, unescape_js_1.unescape)(glob),
				!!hasMagic,
				uflag
			];
		}
	};
	exports.AST = AST;
	_a = AST;
}));
//#endregion
//#region node_modules/minimatch/dist/commonjs/escape.js
var require_escape = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.escape = void 0;
	/**
	* Escape all magic characters in a glob pattern.
	*
	* If the {@link MinimatchOptions.windowsPathsNoEscape}
	* option is used, then characters are escaped by wrapping in `[]`, because
	* a magic character wrapped in a character class can only be satisfied by
	* that exact character.  In this mode, `\` is _not_ escaped, because it is
	* not interpreted as a magic character, but instead as a path separator.
	*
	* If the {@link MinimatchOptions.magicalBraces} option is used,
	* then braces (`{` and `}`) will be escaped.
	*/
	const escape = (s, { windowsPathsNoEscape = false, magicalBraces = false } = {}) => {
		if (magicalBraces) return windowsPathsNoEscape ? s.replace(/[?*()[\]{}]/g, "[$&]") : s.replace(/[?*()[\]\\{}]/g, "\\$&");
		return windowsPathsNoEscape ? s.replace(/[?*()[\]]/g, "[$&]") : s.replace(/[?*()[\]\\]/g, "\\$&");
	};
	exports.escape = escape;
}));
//#endregion
//#region node_modules/minimatch/dist/commonjs/index.js
var require_commonjs = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.unescape = exports.escape = exports.AST = exports.Minimatch = exports.match = exports.makeRe = exports.braceExpand = exports.defaults = exports.filter = exports.GLOBSTAR = exports.sep = exports.minimatch = void 0;
	const brace_expansion_1 = require_commonjs$1();
	const assert_valid_pattern_js_1 = require_assert_valid_pattern();
	const ast_js_1 = require_ast();
	const escape_js_1 = require_escape();
	const unescape_js_1 = require_unescape();
	const minimatch = (p, pattern, options = {}) => {
		(0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
		if (!options.nocomment && pattern.charAt(0) === "#") return false;
		return new Minimatch(pattern, options).match(p);
	};
	exports.minimatch = minimatch;
	const starDotExtRE = /^\*+([^+@!?*[(]*)$/;
	const starDotExtTest = (ext) => (f) => !f.startsWith(".") && f.endsWith(ext);
	const starDotExtTestDot = (ext) => (f) => f.endsWith(ext);
	const starDotExtTestNocase = (ext) => {
		ext = ext.toLowerCase();
		return (f) => !f.startsWith(".") && f.toLowerCase().endsWith(ext);
	};
	const starDotExtTestNocaseDot = (ext) => {
		ext = ext.toLowerCase();
		return (f) => f.toLowerCase().endsWith(ext);
	};
	const starDotStarRE = /^\*+\.\*+$/;
	const starDotStarTest = (f) => !f.startsWith(".") && f.includes(".");
	const starDotStarTestDot = (f) => f !== "." && f !== ".." && f.includes(".");
	const dotStarRE = /^\.\*+$/;
	const dotStarTest = (f) => f !== "." && f !== ".." && f.startsWith(".");
	const starRE = /^\*+$/;
	const starTest = (f) => f.length !== 0 && !f.startsWith(".");
	const starTestDot = (f) => f.length !== 0 && f !== "." && f !== "..";
	const qmarksRE = /^\?+([^+@!?*[(]*)?$/;
	const qmarksTestNocase = ([$0, ext = ""]) => {
		const noext = qmarksTestNoExt([$0]);
		if (!ext) return noext;
		ext = ext.toLowerCase();
		return (f) => noext(f) && f.toLowerCase().endsWith(ext);
	};
	const qmarksTestNocaseDot = ([$0, ext = ""]) => {
		const noext = qmarksTestNoExtDot([$0]);
		if (!ext) return noext;
		ext = ext.toLowerCase();
		return (f) => noext(f) && f.toLowerCase().endsWith(ext);
	};
	const qmarksTestDot = ([$0, ext = ""]) => {
		const noext = qmarksTestNoExtDot([$0]);
		return !ext ? noext : (f) => noext(f) && f.endsWith(ext);
	};
	const qmarksTest = ([$0, ext = ""]) => {
		const noext = qmarksTestNoExt([$0]);
		return !ext ? noext : (f) => noext(f) && f.endsWith(ext);
	};
	const qmarksTestNoExt = ([$0]) => {
		const len = $0.length;
		return (f) => f.length === len && !f.startsWith(".");
	};
	const qmarksTestNoExtDot = ([$0]) => {
		const len = $0.length;
		return (f) => f.length === len && f !== "." && f !== "..";
	};
	/* c8 ignore start */
	const defaultPlatform = typeof process === "object" && process ? typeof process.env === "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix";
	const path = {
		win32: { sep: "\\" },
		posix: { sep: "/" }
	};
	/* c8 ignore stop */
	exports.sep = defaultPlatform === "win32" ? path.win32.sep : path.posix.sep;
	exports.minimatch.sep = exports.sep;
	exports.GLOBSTAR = Symbol("globstar **");
	exports.minimatch.GLOBSTAR = exports.GLOBSTAR;
	const star = "[^/]*?";
	const twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?";
	const twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?";
	const filter = (pattern, options = {}) => (p) => (0, exports.minimatch)(p, pattern, options);
	exports.filter = filter;
	exports.minimatch.filter = exports.filter;
	const ext = (a, b = {}) => Object.assign({}, a, b);
	const defaults = (def) => {
		if (!def || typeof def !== "object" || !Object.keys(def).length) return exports.minimatch;
		const orig = exports.minimatch;
		const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));
		return Object.assign(m, {
			Minimatch: class Minimatch extends orig.Minimatch {
				constructor(pattern, options = {}) {
					super(pattern, ext(def, options));
				}
				static defaults(options) {
					return orig.defaults(ext(def, options)).Minimatch;
				}
			},
			AST: class AST extends orig.AST {
				/* c8 ignore start */
				constructor(type, parent, options = {}) {
					super(type, parent, ext(def, options));
				}
				/* c8 ignore stop */
				static fromGlob(pattern, options = {}) {
					return orig.AST.fromGlob(pattern, ext(def, options));
				}
			},
			unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),
			escape: (s, options = {}) => orig.escape(s, ext(def, options)),
			filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),
			defaults: (options) => orig.defaults(ext(def, options)),
			makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),
			braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),
			match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),
			sep: orig.sep,
			GLOBSTAR: exports.GLOBSTAR
		});
	};
	exports.defaults = defaults;
	exports.minimatch.defaults = exports.defaults;
	const braceExpand = (pattern, options = {}) => {
		(0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
		if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) return [pattern];
		return (0, brace_expansion_1.expand)(pattern, { max: options.braceExpandMax });
	};
	exports.braceExpand = braceExpand;
	exports.minimatch.braceExpand = exports.braceExpand;
	const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();
	exports.makeRe = makeRe;
	exports.minimatch.makeRe = exports.makeRe;
	const match = (list, pattern, options = {}) => {
		const mm = new Minimatch(pattern, options);
		list = list.filter((f) => mm.match(f));
		if (mm.options.nonull && !list.length) list.push(pattern);
		return list;
	};
	exports.match = match;
	exports.minimatch.match = exports.match;
	const globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/;
	const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
	var Minimatch = class {
		options;
		set;
		pattern;
		windowsPathsNoEscape;
		nonegate;
		negate;
		comment;
		empty;
		preserveMultipleSlashes;
		partial;
		globSet;
		globParts;
		nocase;
		isWindows;
		platform;
		windowsNoMagicRoot;
		maxGlobstarRecursion;
		regexp;
		constructor(pattern, options = {}) {
			(0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
			options = options || {};
			this.options = options;
			this.maxGlobstarRecursion = options.maxGlobstarRecursion ?? 200;
			this.pattern = pattern;
			this.platform = options.platform || defaultPlatform;
			this.isWindows = this.platform === "win32";
			const awe = "allowWindowsEscape";
			this.windowsPathsNoEscape = !!options.windowsPathsNoEscape || options[awe] === false;
			if (this.windowsPathsNoEscape) this.pattern = this.pattern.replace(/\\/g, "/");
			this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;
			this.regexp = null;
			this.negate = false;
			this.nonegate = !!options.nonegate;
			this.comment = false;
			this.empty = false;
			this.partial = !!options.partial;
			this.nocase = !!this.options.nocase;
			this.windowsNoMagicRoot = options.windowsNoMagicRoot !== void 0 ? options.windowsNoMagicRoot : !!(this.isWindows && this.nocase);
			this.globSet = [];
			this.globParts = [];
			this.set = [];
			this.make();
		}
		hasMagic() {
			if (this.options.magicalBraces && this.set.length > 1) return true;
			for (const pattern of this.set) for (const part of pattern) if (typeof part !== "string") return true;
			return false;
		}
		debug(..._) {}
		make() {
			const pattern = this.pattern;
			const options = this.options;
			if (!options.nocomment && pattern.charAt(0) === "#") {
				this.comment = true;
				return;
			}
			if (!pattern) {
				this.empty = true;
				return;
			}
			this.parseNegate();
			this.globSet = [...new Set(this.braceExpand())];
			if (options.debug) this.debug = (...args) => console.error(...args);
			this.debug(this.pattern, this.globSet);
			const rawGlobParts = this.globSet.map((s) => this.slashSplit(s));
			this.globParts = this.preprocess(rawGlobParts);
			this.debug(this.pattern, this.globParts);
			let set = this.globParts.map((s, _, __) => {
				if (this.isWindows && this.windowsNoMagicRoot) {
					const isUNC = s[0] === "" && s[1] === "" && (s[2] === "?" || !globMagic.test(s[2])) && !globMagic.test(s[3]);
					const isDrive = /^[a-z]:/i.test(s[0]);
					if (isUNC) return [...s.slice(0, 4), ...s.slice(4).map((ss) => this.parse(ss))];
					else if (isDrive) return [s[0], ...s.slice(1).map((ss) => this.parse(ss))];
				}
				return s.map((ss) => this.parse(ss));
			});
			this.debug(this.pattern, set);
			this.set = set.filter((s) => s.indexOf(false) === -1);
			if (this.isWindows) for (let i = 0; i < this.set.length; i++) {
				const p = this.set[i];
				if (p[0] === "" && p[1] === "" && this.globParts[i][2] === "?" && typeof p[3] === "string" && /^[a-z]:$/i.test(p[3])) p[2] = "?";
			}
			this.debug(this.pattern, this.set);
		}
		preprocess(globParts) {
			if (this.options.noglobstar) {
				for (const partset of globParts) for (let j = 0; j < partset.length; j++) if (partset[j] === "**") partset[j] = "*";
			}
			const { optimizationLevel = 1 } = this.options;
			if (optimizationLevel >= 2) {
				globParts = this.firstPhasePreProcess(globParts);
				globParts = this.secondPhasePreProcess(globParts);
			} else if (optimizationLevel >= 1) globParts = this.levelOneOptimize(globParts);
			else globParts = this.adjascentGlobstarOptimize(globParts);
			return globParts;
		}
		adjascentGlobstarOptimize(globParts) {
			return globParts.map((parts) => {
				let gs = -1;
				while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
					let i = gs;
					while (parts[i + 1] === "**") i++;
					if (i !== gs) parts.splice(gs, i - gs);
				}
				return parts;
			});
		}
		levelOneOptimize(globParts) {
			return globParts.map((parts) => {
				parts = parts.reduce((set, part) => {
					const prev = set[set.length - 1];
					if (part === "**" && prev === "**") return set;
					if (part === "..") {
						if (prev && prev !== ".." && prev !== "." && prev !== "**") {
							set.pop();
							return set;
						}
					}
					set.push(part);
					return set;
				}, []);
				return parts.length === 0 ? [""] : parts;
			});
		}
		levelTwoFileOptimize(parts) {
			if (!Array.isArray(parts)) parts = this.slashSplit(parts);
			let didSomething = false;
			do {
				didSomething = false;
				if (!this.preserveMultipleSlashes) {
					for (let i = 1; i < parts.length - 1; i++) {
						const p = parts[i];
						if (i === 1 && p === "" && parts[0] === "") continue;
						if (p === "." || p === "") {
							didSomething = true;
							parts.splice(i, 1);
							i--;
						}
					}
					if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
						didSomething = true;
						parts.pop();
					}
				}
				let dd = 0;
				while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
					const p = parts[dd - 1];
					if (p && p !== "." && p !== ".." && p !== "**" && !(this.isWindows && /^[a-z]:$/i.test(p))) {
						didSomething = true;
						parts.splice(dd - 1, 2);
						dd -= 2;
					}
				}
			} while (didSomething);
			return parts.length === 0 ? [""] : parts;
		}
		firstPhasePreProcess(globParts) {
			let didSomething = false;
			do {
				didSomething = false;
				for (let parts of globParts) {
					let gs = -1;
					while (-1 !== (gs = parts.indexOf("**", gs + 1))) {
						let gss = gs;
						while (parts[gss + 1] === "**") gss++;
						if (gss > gs) parts.splice(gs + 1, gss - gs);
						let next = parts[gs + 1];
						const p = parts[gs + 2];
						const p2 = parts[gs + 3];
						if (next !== "..") continue;
						if (!p || p === "." || p === ".." || !p2 || p2 === "." || p2 === "..") continue;
						didSomething = true;
						parts.splice(gs, 1);
						const other = parts.slice(0);
						other[gs] = "**";
						globParts.push(other);
						gs--;
					}
					if (!this.preserveMultipleSlashes) {
						for (let i = 1; i < parts.length - 1; i++) {
							const p = parts[i];
							if (i === 1 && p === "" && parts[0] === "") continue;
							if (p === "." || p === "") {
								didSomething = true;
								parts.splice(i, 1);
								i--;
							}
						}
						if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
							didSomething = true;
							parts.pop();
						}
					}
					let dd = 0;
					while (-1 !== (dd = parts.indexOf("..", dd + 1))) {
						const p = parts[dd - 1];
						if (p && p !== "." && p !== ".." && p !== "**") {
							didSomething = true;
							const splin = dd === 1 && parts[dd + 1] === "**" ? ["."] : [];
							parts.splice(dd - 1, 2, ...splin);
							if (parts.length === 0) parts.push("");
							dd -= 2;
						}
					}
				}
			} while (didSomething);
			return globParts;
		}
		secondPhasePreProcess(globParts) {
			for (let i = 0; i < globParts.length - 1; i++) for (let j = i + 1; j < globParts.length; j++) {
				const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
				if (matched) {
					globParts[i] = [];
					globParts[j] = matched;
					break;
				}
			}
			return globParts.filter((gs) => gs.length);
		}
		partsMatch(a, b, emptyGSMatch = false) {
			let ai = 0;
			let bi = 0;
			let result = [];
			let which = "";
			while (ai < a.length && bi < b.length) if (a[ai] === b[bi]) {
				result.push(which === "b" ? b[bi] : a[ai]);
				ai++;
				bi++;
			} else if (emptyGSMatch && a[ai] === "**" && b[bi] === a[ai + 1]) {
				result.push(a[ai]);
				ai++;
			} else if (emptyGSMatch && b[bi] === "**" && a[ai] === b[bi + 1]) {
				result.push(b[bi]);
				bi++;
			} else if (a[ai] === "*" && b[bi] && (this.options.dot || !b[bi].startsWith(".")) && b[bi] !== "**") {
				if (which === "b") return false;
				which = "a";
				result.push(a[ai]);
				ai++;
				bi++;
			} else if (b[bi] === "*" && a[ai] && (this.options.dot || !a[ai].startsWith(".")) && a[ai] !== "**") {
				if (which === "a") return false;
				which = "b";
				result.push(b[bi]);
				ai++;
				bi++;
			} else return false;
			return a.length === b.length && result;
		}
		parseNegate() {
			if (this.nonegate) return;
			const pattern = this.pattern;
			let negate = false;
			let negateOffset = 0;
			for (let i = 0; i < pattern.length && pattern.charAt(i) === "!"; i++) {
				negate = !negate;
				negateOffset++;
			}
			if (negateOffset) this.pattern = pattern.slice(negateOffset);
			this.negate = negate;
		}
		matchOne(file, pattern, partial = false) {
			let fileStartIndex = 0;
			let patternStartIndex = 0;
			if (this.isWindows) {
				const fileDrive = typeof file[0] === "string" && /^[a-z]:$/i.test(file[0]);
				const fileUNC = !fileDrive && file[0] === "" && file[1] === "" && file[2] === "?" && /^[a-z]:$/i.test(file[3]);
				const patternDrive = typeof pattern[0] === "string" && /^[a-z]:$/i.test(pattern[0]);
				const patternUNC = !patternDrive && pattern[0] === "" && pattern[1] === "" && pattern[2] === "?" && typeof pattern[3] === "string" && /^[a-z]:$/i.test(pattern[3]);
				const fdi = fileUNC ? 3 : fileDrive ? 0 : void 0;
				const pdi = patternUNC ? 3 : patternDrive ? 0 : void 0;
				if (typeof fdi === "number" && typeof pdi === "number") {
					const [fd, pd] = [file[fdi], pattern[pdi]];
					if (fd.toLowerCase() === pd.toLowerCase()) {
						pattern[pdi] = fd;
						patternStartIndex = pdi;
						fileStartIndex = fdi;
					}
				}
			}
			const { optimizationLevel = 1 } = this.options;
			if (optimizationLevel >= 2) file = this.levelTwoFileOptimize(file);
			if (pattern.includes(exports.GLOBSTAR)) return this.#matchGlobstar(file, pattern, partial, fileStartIndex, patternStartIndex);
			return this.#matchOne(file, pattern, partial, fileStartIndex, patternStartIndex);
		}
		#matchGlobstar(file, pattern, partial, fileIndex, patternIndex) {
			const firstgs = pattern.indexOf(exports.GLOBSTAR, patternIndex);
			const lastgs = pattern.lastIndexOf(exports.GLOBSTAR);
			const [head, body, tail] = partial ? [
				pattern.slice(patternIndex, firstgs),
				pattern.slice(firstgs + 1),
				[]
			] : [
				pattern.slice(patternIndex, firstgs),
				pattern.slice(firstgs + 1, lastgs),
				pattern.slice(lastgs + 1)
			];
			if (head.length) {
				const fileHead = file.slice(fileIndex, fileIndex + head.length);
				if (!this.#matchOne(fileHead, head, partial, 0, 0)) return false;
				fileIndex += head.length;
				patternIndex += head.length;
			}
			let fileTailMatch = 0;
			if (tail.length) {
				if (tail.length + fileIndex > file.length) return false;
				let tailStart = file.length - tail.length;
				if (this.#matchOne(file, tail, partial, tailStart, 0)) fileTailMatch = tail.length;
				else {
					if (file[file.length - 1] !== "" || fileIndex + tail.length === file.length) return false;
					tailStart--;
					if (!this.#matchOne(file, tail, partial, tailStart, 0)) return false;
					fileTailMatch = tail.length + 1;
				}
			}
			if (!body.length) {
				let sawSome = !!fileTailMatch;
				for (let i = fileIndex; i < file.length - fileTailMatch; i++) {
					const f = String(file[i]);
					sawSome = true;
					if (f === "." || f === ".." || !this.options.dot && f.startsWith(".")) return false;
				}
				return partial || sawSome;
			}
			const bodySegments = [[[], 0]];
			let currentBody = bodySegments[0];
			let nonGsParts = 0;
			const nonGsPartsSums = [0];
			for (const b of body) if (b === exports.GLOBSTAR) {
				nonGsPartsSums.push(nonGsParts);
				currentBody = [[], 0];
				bodySegments.push(currentBody);
			} else {
				currentBody[0].push(b);
				nonGsParts++;
			}
			let i = bodySegments.length - 1;
			const fileLength = file.length - fileTailMatch;
			for (const b of bodySegments) b[1] = fileLength - (nonGsPartsSums[i--] + b[0].length);
			return !!this.#matchGlobStarBodySections(file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch);
		}
		#matchGlobStarBodySections(file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail) {
			const bs = bodySegments[bodyIndex];
			if (!bs) {
				for (let i = fileIndex; i < file.length; i++) {
					sawTail = true;
					const f = file[i];
					if (f === "." || f === ".." || !this.options.dot && f.startsWith(".")) return false;
				}
				return sawTail;
			}
			const [body, after] = bs;
			while (fileIndex <= after) {
				if (this.#matchOne(file.slice(0, fileIndex + body.length), body, partial, fileIndex, 0) && globStarDepth < this.maxGlobstarRecursion) {
					const sub = this.#matchGlobStarBodySections(file, bodySegments, fileIndex + body.length, bodyIndex + 1, partial, globStarDepth + 1, sawTail);
					if (sub !== false) return sub;
				}
				const f = file[fileIndex];
				if (f === "." || f === ".." || !this.options.dot && f.startsWith(".")) return false;
				fileIndex++;
			}
			return partial || null;
		}
		#matchOne(file, pattern, partial, fileIndex, patternIndex) {
			let fi;
			let pi;
			let pl;
			let fl;
			for (fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
				this.debug("matchOne loop");
				let p = pattern[pi];
				let f = file[fi];
				this.debug(pattern, p, f);
				/* c8 ignore start */
				if (p === false || p === exports.GLOBSTAR) return false;
				/* c8 ignore stop */
				let hit;
				if (typeof p === "string") {
					hit = f === p;
					this.debug("string match", p, f, hit);
				} else {
					hit = p.test(f);
					this.debug("pattern match", p, f, hit);
				}
				if (!hit) return false;
			}
			if (fi === fl && pi === pl) return true;
			else if (fi === fl) return partial;
			else if (pi === pl) return fi === fl - 1 && file[fi] === "";
			else throw new Error("wtf?");
			/* c8 ignore stop */
		}
		braceExpand() {
			return (0, exports.braceExpand)(this.pattern, this.options);
		}
		parse(pattern) {
			(0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
			const options = this.options;
			if (pattern === "**") return exports.GLOBSTAR;
			if (pattern === "") return "";
			let m;
			let fastTest = null;
			if (m = pattern.match(starRE)) fastTest = options.dot ? starTestDot : starTest;
			else if (m = pattern.match(starDotExtRE)) fastTest = (options.nocase ? options.dot ? starDotExtTestNocaseDot : starDotExtTestNocase : options.dot ? starDotExtTestDot : starDotExtTest)(m[1]);
			else if (m = pattern.match(qmarksRE)) fastTest = (options.nocase ? options.dot ? qmarksTestNocaseDot : qmarksTestNocase : options.dot ? qmarksTestDot : qmarksTest)(m);
			else if (m = pattern.match(starDotStarRE)) fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
			else if (m = pattern.match(dotStarRE)) fastTest = dotStarTest;
			const re = ast_js_1.AST.fromGlob(pattern, this.options).toMMPattern();
			if (fastTest && typeof re === "object") Reflect.defineProperty(re, "test", { value: fastTest });
			return re;
		}
		makeRe() {
			if (this.regexp || this.regexp === false) return this.regexp;
			const set = this.set;
			if (!set.length) {
				this.regexp = false;
				return this.regexp;
			}
			const options = this.options;
			const twoStar = options.noglobstar ? star : options.dot ? twoStarDot : twoStarNoDot;
			const flags = new Set(options.nocase ? ["i"] : []);
			let re = set.map((pattern) => {
				const pp = pattern.map((p) => {
					if (p instanceof RegExp) for (const f of p.flags.split("")) flags.add(f);
					return typeof p === "string" ? regExpEscape(p) : p === exports.GLOBSTAR ? exports.GLOBSTAR : p._src;
				});
				pp.forEach((p, i) => {
					const next = pp[i + 1];
					const prev = pp[i - 1];
					if (p !== exports.GLOBSTAR || prev === exports.GLOBSTAR) return;
					if (prev === void 0) if (next !== void 0 && next !== exports.GLOBSTAR) pp[i + 1] = "(?:\\/|" + twoStar + "\\/)?" + next;
					else pp[i] = twoStar;
					else if (next === void 0) pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + ")?";
					else if (next !== exports.GLOBSTAR) {
						pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + "\\/)" + next;
						pp[i + 1] = exports.GLOBSTAR;
					}
				});
				const filtered = pp.filter((p) => p !== exports.GLOBSTAR);
				if (this.partial && filtered.length >= 1) {
					const prefixes = [];
					for (let i = 1; i <= filtered.length; i++) prefixes.push(filtered.slice(0, i).join("/"));
					return "(?:" + prefixes.join("|") + ")";
				}
				return filtered.join("/");
			}).join("|");
			const [open, close] = set.length > 1 ? ["(?:", ")"] : ["", ""];
			re = "^" + open + re + close + "$";
			if (this.partial) re = "^(?:\\/|" + open + re.slice(1, -1) + close + ")$";
			if (this.negate) re = "^(?!" + re + ").+$";
			try {
				this.regexp = new RegExp(re, [...flags].join(""));
			} catch {
				this.regexp = false;
			}
			/* c8 ignore stop */
			return this.regexp;
		}
		slashSplit(p) {
			if (this.preserveMultipleSlashes) return p.split("/");
			else if (this.isWindows && /^\/\/[^/]+/.test(p)) return ["", ...p.split(/\/+/)];
			else return p.split(/\/+/);
		}
		match(f, partial = this.partial) {
			this.debug("match", f, this.pattern);
			if (this.comment) return false;
			if (this.empty) return f === "";
			if (f === "/" && partial) return true;
			const options = this.options;
			if (this.isWindows) f = f.split("\\").join("/");
			const ff = this.slashSplit(f);
			this.debug(this.pattern, "split", ff);
			const set = this.set;
			this.debug(this.pattern, "set", set);
			let filename = ff[ff.length - 1];
			if (!filename) for (let i = ff.length - 2; !filename && i >= 0; i--) filename = ff[i];
			for (const pattern of set) {
				let file = ff;
				if (options.matchBase && pattern.length === 1) file = [filename];
				if (this.matchOne(file, pattern, partial)) {
					if (options.flipNegate) return true;
					return !this.negate;
				}
			}
			if (options.flipNegate) return false;
			return this.negate;
		}
		static defaults(def) {
			return exports.minimatch.defaults(def).Minimatch;
		}
	};
	exports.Minimatch = Minimatch;
	/* c8 ignore start */
	var ast_js_2 = require_ast();
	Object.defineProperty(exports, "AST", {
		enumerable: true,
		get: function() {
			return ast_js_2.AST;
		}
	});
	var escape_js_2 = require_escape();
	Object.defineProperty(exports, "escape", {
		enumerable: true,
		get: function() {
			return escape_js_2.escape;
		}
	});
	var unescape_js_2 = require_unescape();
	Object.defineProperty(exports, "unescape", {
		enumerable: true,
		get: function() {
			return unescape_js_2.unescape;
		}
	});
	/* c8 ignore stop */
	exports.minimatch.AST = ast_js_1.AST;
	exports.minimatch.Minimatch = Minimatch;
	exports.minimatch.escape = escape_js_1.escape;
	exports.minimatch.unescape = unescape_js_1.unescape;
}));
//#endregion
//#region node_modules/isexe/dist/commonjs/index.min.js
var require_index_min$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
	var a = (t, e) => () => (e || t((e = { exports: {} }).exports, e), e.exports);
	var _ = a((i) => {
		"use strict";
		Object.defineProperty(i, "__esModule", { value: !0 });
		i.sync = i.isexe = void 0;
		var M = require("node:fs"), x = require("node:fs/promises"), q = async (t, e = {}) => {
			let { ignoreErrors: r = !1 } = e;
			try {
				return d(await (0, x.stat)(t), e);
			} catch (s) {
				let n = s;
				if (r || n.code === "EACCES") return !1;
				throw n;
			}
		};
		i.isexe = q;
		var m = (t, e = {}) => {
			let { ignoreErrors: r = !1 } = e;
			try {
				return d((0, M.statSync)(t), e);
			} catch (s) {
				let n = s;
				if (r || n.code === "EACCES") return !1;
				throw n;
			}
		};
		i.sync = m;
		var d = (t, e) => t.isFile() && A(t, e), A = (t, e) => {
			let r = e.uid ?? process.getuid?.(), s = e.groups ?? process.getgroups?.() ?? [], n = e.gid ?? process.getgid?.() ?? s[0];
			if (r === void 0 || n === void 0) throw new Error("cannot get uid or gid");
			let u = new Set([n, ...s]), c = t.mode, S = t.uid, P = t.gid, f = parseInt("100", 8), l = parseInt("010", 8);
			return !!(c & parseInt("001", 8) || c & l && u.has(P) || c & f && S === r || c & 72 && r === 0);
		};
	});
	var g = a((o) => {
		"use strict";
		Object.defineProperty(o, "__esModule", { value: !0 });
		o.sync = o.isexe = void 0;
		var T = require("node:fs"), I = require("node:fs/promises"), D = require("node:path"), F = async (t, e = {}) => {
			let { ignoreErrors: r = !1 } = e;
			try {
				return y(await (0, I.stat)(t), t, e);
			} catch (s) {
				let n = s;
				if (r || n.code === "EACCES") return !1;
				throw n;
			}
		};
		o.isexe = F;
		var L = (t, e = {}) => {
			let { ignoreErrors: r = !1 } = e;
			try {
				return y((0, T.statSync)(t), t, e);
			} catch (s) {
				let n = s;
				if (r || n.code === "EACCES") return !1;
				throw n;
			}
		};
		o.sync = L;
		var B = (t, e) => {
			let { pathExt: r = process.env.PATHEXT || "" } = e, s = r.split(D.delimiter);
			if (s.indexOf("") !== -1) return !0;
			for (let n of s) {
				let u = n.toLowerCase(), c = t.substring(t.length - u.length).toLowerCase();
				if (u && c === u) return !0;
			}
			return !1;
		}, y = (t, e, r) => t.isFile() && B(e, r);
	});
	var p = a((h) => {
		"use strict";
		Object.defineProperty(h, "__esModule", { value: !0 });
	});
	var v = exports && exports.__createBinding || (Object.create ? (function(t, e, r, s) {
		s === void 0 && (s = r);
		var n = Object.getOwnPropertyDescriptor(e, r);
		(!n || ("get" in n ? !e.__esModule : n.writable || n.configurable)) && (n = {
			enumerable: !0,
			get: function() {
				return e[r];
			}
		}), Object.defineProperty(t, s, n);
	}) : (function(t, e, r, s) {
		s === void 0 && (s = r), t[s] = e[r];
	})), G = exports && exports.__setModuleDefault || (Object.create ? (function(t, e) {
		Object.defineProperty(t, "default", {
			enumerable: !0,
			value: e
		});
	}) : function(t, e) {
		t.default = e;
	}), w = exports && exports.__importStar || (function() {
		var t = function(e) {
			return t = Object.getOwnPropertyNames || function(r) {
				var s = [];
				for (var n in r) Object.prototype.hasOwnProperty.call(r, n) && (s[s.length] = n);
				return s;
			}, t(e);
		};
		return function(e) {
			if (e && e.__esModule) return e;
			var r = {};
			if (e != null) for (var s = t(e), n = 0; n < s.length; n++) s[n] !== "default" && v(r, e, s[n]);
			return G(r, e), r;
		};
	})(), X = exports && exports.__exportStar || function(t, e) {
		for (var r in t) r !== "default" && !Object.prototype.hasOwnProperty.call(e, r) && v(e, t, r);
	};
	Object.defineProperty(exports, "__esModule", { value: !0 });
	exports.sync = exports.isexe = exports.posix = exports.win32 = void 0;
	var E = w(_());
	exports.posix = E;
	var O = w(g());
	exports.win32 = O;
	X(p(), exports);
	var b = (process.env._ISEXE_TEST_PLATFORM_ || process.platform) === "win32" ? O : E;
	exports.isexe = b.isexe;
	exports.sync = b.sync;
}));
//#endregion
//#region node_modules/which/lib/index.js
var require_lib$2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const { isexe, sync: isexeSync } = require_index_min$1();
	const { join, delimiter, sep, posix } = require("path");
	const isWindows = process.platform === "win32";
	/* istanbul ignore next */
	const rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? "" : sep}]`.replace(/(\\)/g, "\\$1"));
	const rRel = new RegExp(`^\\.${rSlash.source}`);
	const getNotFoundError = (cmd) => Object.assign(/* @__PURE__ */ new Error(`not found: ${cmd}`), { code: "ENOENT" });
	const getPathInfo = (cmd, { path: optPath = process.env.PATH, pathExt: optPathExt = process.env.PATHEXT, delimiter: optDelimiter = delimiter }) => {
		const pathEnv = cmd.match(rSlash) ? [""] : [...isWindows ? [process.cwd()] : [], ...(optPath || "").split(optDelimiter)];
		if (isWindows) {
			const pathExtExe = optPathExt || [
				".EXE",
				".CMD",
				".BAT",
				".COM"
			].join(optDelimiter);
			const pathExt = pathExtExe.split(optDelimiter).flatMap((item) => [item, item.toLowerCase()]);
			if (cmd.includes(".") && pathExt[0] !== "") pathExt.unshift("");
			return {
				pathEnv,
				pathExt,
				pathExtExe
			};
		}
		return {
			pathEnv,
			pathExt: [""]
		};
	};
	const getPathPart = (raw, cmd) => {
		const pathPart = /^".*"$/.test(raw) ? raw.slice(1, -1) : raw;
		return (!pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : "") + join(pathPart, cmd);
	};
	const which = async (cmd, opt = {}) => {
		const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
		const found = [];
		for (const envPart of pathEnv) {
			const p = getPathPart(envPart, cmd);
			for (const ext of pathExt) {
				const withExt = p + ext;
				if (await isexe(withExt, {
					pathExt: pathExtExe,
					ignoreErrors: true
				})) {
					if (!opt.all) return withExt;
					found.push(withExt);
				}
			}
		}
		if (opt.all && found.length) return found;
		if (opt.nothrow) return null;
		throw getNotFoundError(cmd);
	};
	const whichSync = (cmd, opt = {}) => {
		const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);
		const found = [];
		for (const pathEnvPart of pathEnv) {
			const p = getPathPart(pathEnvPart, cmd);
			for (const ext of pathExt) {
				const withExt = p + ext;
				if (isexeSync(withExt, {
					pathExt: pathExtExe,
					ignoreErrors: true
				})) {
					if (!opt.all) return withExt;
					found.push(withExt);
				}
			}
		}
		if (opt.all && found.length) return found;
		if (opt.nothrow) return null;
		throw getNotFoundError(cmd);
	};
	module.exports = which;
	which.sync = whichSync;
}));
//#endregion
//#region node_modules/semver/internal/constants.js
var require_constants = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SEMVER_SPEC_VERSION = "2.0.0";
	const MAX_LENGTH = 256;
	const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
	module.exports = {
		MAX_LENGTH,
		MAX_SAFE_COMPONENT_LENGTH: 16,
		MAX_SAFE_BUILD_LENGTH: MAX_LENGTH - 6,
		MAX_SAFE_INTEGER,
		RELEASE_TYPES: [
			"major",
			"premajor",
			"minor",
			"preminor",
			"patch",
			"prepatch",
			"prerelease"
		],
		SEMVER_SPEC_VERSION,
		FLAG_INCLUDE_PRERELEASE: 1,
		FLAG_LOOSE: 2
	};
}));
//#endregion
//#region node_modules/semver/internal/debug.js
var require_debug$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {};
}));
//#endregion
//#region node_modules/semver/internal/re.js
var require_re = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const { MAX_SAFE_COMPONENT_LENGTH, MAX_SAFE_BUILD_LENGTH, MAX_LENGTH } = require_constants();
	const debug = require_debug$1();
	exports = module.exports = {};
	const re = exports.re = [];
	const safeRe = exports.safeRe = [];
	const src = exports.src = [];
	const safeSrc = exports.safeSrc = [];
	const t = exports.t = {};
	let R = 0;
	const LETTERDASHNUMBER = "[a-zA-Z0-9-]";
	const safeRegexReplacements = [
		["\\s", 1],
		["\\d", MAX_LENGTH],
		[LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]
	];
	const makeSafeRegex = (value) => {
		for (const [token, max] of safeRegexReplacements) value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);
		return value;
	};
	const createToken = (name, value, isGlobal) => {
		const safe = makeSafeRegex(value);
		const index = R++;
		debug(name, index, value);
		t[name] = index;
		src[index] = value;
		safeSrc[index] = safe;
		re[index] = new RegExp(value, isGlobal ? "g" : void 0);
		safeRe[index] = new RegExp(safe, isGlobal ? "g" : void 0);
	};
	createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
	createToken("NUMERICIDENTIFIERLOOSE", "\\d+");
	createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
	createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})\\.(${src[t.NUMERICIDENTIFIER]})`);
	createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})\\.(${src[t.NUMERICIDENTIFIERLOOSE]})`);
	createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);
	createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);
	createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
	createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
	createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`);
	createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
	createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);
	createToken("FULL", `^${src[t.FULLPLAIN]}$`);
	createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);
	createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`);
	createToken("GTLT", "((?:<|>)?=?)");
	createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
	createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
	createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:\\.(${src[t.XRANGEIDENTIFIER]})(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?)?)?`);
	createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?)?)?`);
	createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
	createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
	createToken("COERCEPLAIN", `(^|[^\\d])(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}})(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
	createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
	createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?(?:${src[t.BUILD]})?(?:$|[^\\d])`);
	createToken("COERCERTL", src[t.COERCE], true);
	createToken("COERCERTLFULL", src[t.COERCEFULL], true);
	createToken("LONETILDE", "(?:~>?)");
	createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true);
	exports.tildeTrimReplace = "$1~";
	createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
	createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
	createToken("LONECARET", "(?:\\^)");
	createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true);
	exports.caretTrimReplace = "$1^";
	createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
	createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
	createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
	createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
	createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
	exports.comparatorTrimReplace = "$1$2$3";
	createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})\\s+-\\s+(${src[t.XRANGEPLAIN]})\\s*$`);
	createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})\\s+-\\s+(${src[t.XRANGEPLAINLOOSE]})\\s*$`);
	createToken("STAR", "(<|>)?=?\\s*\\*");
	createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$");
	createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$");
}));
//#endregion
//#region node_modules/semver/internal/parse-options.js
var require_parse_options = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const looseOption = Object.freeze({ loose: true });
	const emptyOpts = Object.freeze({});
	const parseOptions = (options) => {
		if (!options) return emptyOpts;
		if (typeof options !== "object") return looseOption;
		return options;
	};
	module.exports = parseOptions;
}));
//#endregion
//#region node_modules/semver/internal/identifiers.js
var require_identifiers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const numeric = /^[0-9]+$/;
	const compareIdentifiers = (a, b) => {
		if (typeof a === "number" && typeof b === "number") return a === b ? 0 : a < b ? -1 : 1;
		const anum = numeric.test(a);
		const bnum = numeric.test(b);
		if (anum && bnum) {
			a = +a;
			b = +b;
		}
		return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
	};
	const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);
	module.exports = {
		compareIdentifiers,
		rcompareIdentifiers
	};
}));
//#endregion
//#region node_modules/semver/classes/semver.js
var require_semver$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const debug = require_debug$1();
	const { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
	const { safeRe: re, t } = require_re();
	const parseOptions = require_parse_options();
	const { compareIdentifiers } = require_identifiers();
	module.exports = class SemVer {
		constructor(version, options) {
			options = parseOptions(options);
			if (version instanceof SemVer) if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) return version;
			else version = version.version;
			else if (typeof version !== "string") throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`);
			if (version.length > MAX_LENGTH) throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);
			debug("SemVer", version, options);
			this.options = options;
			this.loose = !!options.loose;
			this.includePrerelease = !!options.includePrerelease;
			const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
			if (!m) throw new TypeError(`Invalid Version: ${version}`);
			this.raw = version;
			this.major = +m[1];
			this.minor = +m[2];
			this.patch = +m[3];
			if (this.major > MAX_SAFE_INTEGER || this.major < 0) throw new TypeError("Invalid major version");
			if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) throw new TypeError("Invalid minor version");
			if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) throw new TypeError("Invalid patch version");
			if (!m[4]) this.prerelease = [];
			else this.prerelease = m[4].split(".").map((id) => {
				if (/^[0-9]+$/.test(id)) {
					const num = +id;
					if (num >= 0 && num < MAX_SAFE_INTEGER) return num;
				}
				return id;
			});
			this.build = m[5] ? m[5].split(".") : [];
			this.format();
		}
		format() {
			this.version = `${this.major}.${this.minor}.${this.patch}`;
			if (this.prerelease.length) this.version += `-${this.prerelease.join(".")}`;
			return this.version;
		}
		toString() {
			return this.version;
		}
		compare(other) {
			debug("SemVer.compare", this.version, this.options, other);
			if (!(other instanceof SemVer)) {
				if (typeof other === "string" && other === this.version) return 0;
				other = new SemVer(other, this.options);
			}
			if (other.version === this.version) return 0;
			return this.compareMain(other) || this.comparePre(other);
		}
		compareMain(other) {
			if (!(other instanceof SemVer)) other = new SemVer(other, this.options);
			if (this.major < other.major) return -1;
			if (this.major > other.major) return 1;
			if (this.minor < other.minor) return -1;
			if (this.minor > other.minor) return 1;
			if (this.patch < other.patch) return -1;
			if (this.patch > other.patch) return 1;
			return 0;
		}
		comparePre(other) {
			if (!(other instanceof SemVer)) other = new SemVer(other, this.options);
			if (this.prerelease.length && !other.prerelease.length) return -1;
			else if (!this.prerelease.length && other.prerelease.length) return 1;
			else if (!this.prerelease.length && !other.prerelease.length) return 0;
			let i = 0;
			do {
				const a = this.prerelease[i];
				const b = other.prerelease[i];
				debug("prerelease compare", i, a, b);
				if (a === void 0 && b === void 0) return 0;
				else if (b === void 0) return 1;
				else if (a === void 0) return -1;
				else if (a === b) continue;
				else return compareIdentifiers(a, b);
			} while (++i);
		}
		compareBuild(other) {
			if (!(other instanceof SemVer)) other = new SemVer(other, this.options);
			let i = 0;
			do {
				const a = this.build[i];
				const b = other.build[i];
				debug("build compare", i, a, b);
				if (a === void 0 && b === void 0) return 0;
				else if (b === void 0) return 1;
				else if (a === void 0) return -1;
				else if (a === b) continue;
				else return compareIdentifiers(a, b);
			} while (++i);
		}
		inc(release, identifier, identifierBase) {
			if (release.startsWith("pre")) {
				if (!identifier && identifierBase === false) throw new Error("invalid increment argument: identifier is empty");
				if (identifier) {
					const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);
					if (!match || match[1] !== identifier) throw new Error(`invalid identifier: ${identifier}`);
				}
			}
			switch (release) {
				case "premajor":
					this.prerelease.length = 0;
					this.patch = 0;
					this.minor = 0;
					this.major++;
					this.inc("pre", identifier, identifierBase);
					break;
				case "preminor":
					this.prerelease.length = 0;
					this.patch = 0;
					this.minor++;
					this.inc("pre", identifier, identifierBase);
					break;
				case "prepatch":
					this.prerelease.length = 0;
					this.inc("patch", identifier, identifierBase);
					this.inc("pre", identifier, identifierBase);
					break;
				case "prerelease":
					if (this.prerelease.length === 0) this.inc("patch", identifier, identifierBase);
					this.inc("pre", identifier, identifierBase);
					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":
					if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) this.major++;
					this.minor = 0;
					this.patch = 0;
					this.prerelease = [];
					break;
				case "minor":
					if (this.patch !== 0 || this.prerelease.length === 0) this.minor++;
					this.patch = 0;
					this.prerelease = [];
					break;
				case "patch":
					if (this.prerelease.length === 0) this.patch++;
					this.prerelease = [];
					break;
				case "pre": {
					const base = Number(identifierBase) ? 1 : 0;
					if (this.prerelease.length === 0) this.prerelease = [base];
					else {
						let i = this.prerelease.length;
						while (--i >= 0) if (typeof this.prerelease[i] === "number") {
							this.prerelease[i]++;
							i = -2;
						}
						if (i === -1) {
							if (identifier === this.prerelease.join(".") && identifierBase === false) throw new Error("invalid increment argument: identifier already exists");
							this.prerelease.push(base);
						}
					}
					if (identifier) {
						let prerelease = [identifier, base];
						if (identifierBase === false) prerelease = [identifier];
						if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
							if (isNaN(this.prerelease[1])) this.prerelease = prerelease;
						} else this.prerelease = prerelease;
					}
					break;
				}
				default: throw new Error(`invalid increment argument: ${release}`);
			}
			this.raw = this.format();
			if (this.build.length) this.raw += `+${this.build.join(".")}`;
			return this;
		}
	};
}));
//#endregion
//#region node_modules/semver/functions/parse.js
var require_parse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const parse = (version, options, throwErrors = false) => {
		if (version instanceof SemVer) return version;
		try {
			return new SemVer(version, options);
		} catch (er) {
			if (!throwErrors) return null;
			throw er;
		}
	};
	module.exports = parse;
}));
//#endregion
//#region node_modules/semver/functions/valid.js
var require_valid$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const parse = require_parse();
	const valid = (version, options) => {
		const v = parse(version, options);
		return v ? v.version : null;
	};
	module.exports = valid;
}));
//#endregion
//#region node_modules/semver/functions/clean.js
var require_clean = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const parse = require_parse();
	const clean = (version, options) => {
		const s = parse(version.trim().replace(/^[=v]+/, ""), options);
		return s ? s.version : null;
	};
	module.exports = clean;
}));
//#endregion
//#region node_modules/semver/functions/inc.js
var require_inc = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const inc = (version, release, options, identifier, identifierBase) => {
		if (typeof options === "string") {
			identifierBase = identifier;
			identifier = options;
			options = void 0;
		}
		try {
			return new SemVer(version instanceof SemVer ? version.version : version, options).inc(release, identifier, identifierBase).version;
		} catch (er) {
			return null;
		}
	};
	module.exports = inc;
}));
//#endregion
//#region node_modules/semver/functions/diff.js
var require_diff$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const parse = require_parse();
	const diff = (version1, version2) => {
		const v1 = parse(version1, null, true);
		const v2 = parse(version2, null, true);
		const comparison = v1.compare(v2);
		if (comparison === 0) return null;
		const v1Higher = comparison > 0;
		const highVersion = v1Higher ? v1 : v2;
		const lowVersion = v1Higher ? v2 : v1;
		const highHasPre = !!highVersion.prerelease.length;
		if (!!lowVersion.prerelease.length && !highHasPre) {
			if (!lowVersion.patch && !lowVersion.minor) return "major";
			if (lowVersion.compareMain(highVersion) === 0) {
				if (lowVersion.minor && !lowVersion.patch) return "minor";
				return "patch";
			}
		}
		const prefix = highHasPre ? "pre" : "";
		if (v1.major !== v2.major) return prefix + "major";
		if (v1.minor !== v2.minor) return prefix + "minor";
		if (v1.patch !== v2.patch) return prefix + "patch";
		return "prerelease";
	};
	module.exports = diff;
}));
//#endregion
//#region node_modules/semver/functions/major.js
var require_major = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const major = (a, loose) => new SemVer(a, loose).major;
	module.exports = major;
}));
//#endregion
//#region node_modules/semver/functions/minor.js
var require_minor = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const minor = (a, loose) => new SemVer(a, loose).minor;
	module.exports = minor;
}));
//#endregion
//#region node_modules/semver/functions/patch.js
var require_patch = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const patch = (a, loose) => new SemVer(a, loose).patch;
	module.exports = patch;
}));
//#endregion
//#region node_modules/semver/functions/prerelease.js
var require_prerelease = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const parse = require_parse();
	const prerelease = (version, options) => {
		const parsed = parse(version, options);
		return parsed && parsed.prerelease.length ? parsed.prerelease : null;
	};
	module.exports = prerelease;
}));
//#endregion
//#region node_modules/semver/functions/compare.js
var require_compare = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
	module.exports = compare;
}));
//#endregion
//#region node_modules/semver/functions/rcompare.js
var require_rcompare = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compare = require_compare();
	const rcompare = (a, b, loose) => compare(b, a, loose);
	module.exports = rcompare;
}));
//#endregion
//#region node_modules/semver/functions/compare-loose.js
var require_compare_loose = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compare = require_compare();
	const compareLoose = (a, b) => compare(a, b, true);
	module.exports = compareLoose;
}));
//#endregion
//#region node_modules/semver/functions/compare-build.js
var require_compare_build = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const compareBuild = (a, b, loose) => {
		const versionA = new SemVer(a, loose);
		const versionB = new SemVer(b, loose);
		return versionA.compare(versionB) || versionA.compareBuild(versionB);
	};
	module.exports = compareBuild;
}));
//#endregion
//#region node_modules/semver/functions/sort.js
var require_sort = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compareBuild = require_compare_build();
	const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose));
	module.exports = sort;
}));
//#endregion
//#region node_modules/semver/functions/rsort.js
var require_rsort = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compareBuild = require_compare_build();
	const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose));
	module.exports = rsort;
}));
//#endregion
//#region node_modules/semver/functions/gt.js
var require_gt = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compare = require_compare();
	const gt = (a, b, loose) => compare(a, b, loose) > 0;
	module.exports = gt;
}));
//#endregion
//#region node_modules/semver/functions/lt.js
var require_lt = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compare = require_compare();
	const lt = (a, b, loose) => compare(a, b, loose) < 0;
	module.exports = lt;
}));
//#endregion
//#region node_modules/semver/functions/eq.js
var require_eq = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compare = require_compare();
	const eq = (a, b, loose) => compare(a, b, loose) === 0;
	module.exports = eq;
}));
//#endregion
//#region node_modules/semver/functions/neq.js
var require_neq = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compare = require_compare();
	const neq = (a, b, loose) => compare(a, b, loose) !== 0;
	module.exports = neq;
}));
//#endregion
//#region node_modules/semver/functions/gte.js
var require_gte = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compare = require_compare();
	const gte = (a, b, loose) => compare(a, b, loose) >= 0;
	module.exports = gte;
}));
//#endregion
//#region node_modules/semver/functions/lte.js
var require_lte = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const compare = require_compare();
	const lte = (a, b, loose) => compare(a, b, loose) <= 0;
	module.exports = lte;
}));
//#endregion
//#region node_modules/semver/functions/cmp.js
var require_cmp = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const eq = require_eq();
	const neq = require_neq();
	const gt = require_gt();
	const gte = require_gte();
	const lt = require_lt();
	const lte = require_lte();
	const cmp = (a, op, b, loose) => {
		switch (op) {
			case "===":
				if (typeof a === "object") a = a.version;
				if (typeof b === "object") b = b.version;
				return a === b;
			case "!==":
				if (typeof a === "object") a = a.version;
				if (typeof b === "object") b = b.version;
				return a !== b;
			case "":
			case "=":
			case "==": return eq(a, b, loose);
			case "!=": return neq(a, b, loose);
			case ">": return gt(a, b, loose);
			case ">=": return gte(a, b, loose);
			case "<": return lt(a, b, loose);
			case "<=": return lte(a, b, loose);
			default: throw new TypeError(`Invalid operator: ${op}`);
		}
	};
	module.exports = cmp;
}));
//#endregion
//#region node_modules/semver/functions/coerce.js
var require_coerce = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const parse = require_parse();
	const { safeRe: re, t } = require_re();
	const coerce = (version, options) => {
		if (version instanceof SemVer) return version;
		if (typeof version === "number") version = String(version);
		if (typeof version !== "string") return null;
		options = options || {};
		let match = null;
		if (!options.rtl) match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
		else {
			const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];
			let next;
			while ((next = coerceRtlRegex.exec(version)) && (!match || match.index + match[0].length !== version.length)) {
				if (!match || next.index + next[0].length !== match.index + match[0].length) match = next;
				coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;
			}
			coerceRtlRegex.lastIndex = -1;
		}
		if (match === null) return null;
		const major = match[2];
		return parse(`${major}.${match[3] || "0"}.${match[4] || "0"}${options.includePrerelease && match[5] ? `-${match[5]}` : ""}${options.includePrerelease && match[6] ? `+${match[6]}` : ""}`, options);
	};
	module.exports = coerce;
}));
//#endregion
//#region node_modules/semver/functions/truncate.js
var require_truncate = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const parse = require_parse();
	const constants = require_constants();
	const SemVer = require_semver$1();
	const truncate = (version, truncation, options) => {
		if (!constants.RELEASE_TYPES.includes(truncation)) return null;
		const clonedVersion = cloneInputVersion(version, options);
		return clonedVersion && doTruncation(clonedVersion, truncation);
	};
	const cloneInputVersion = (version, options) => {
		return parse(version instanceof SemVer ? version.version : version, options);
	};
	const doTruncation = (version, truncation) => {
		if (isPrerelease(truncation)) return version.version;
		version.prerelease = [];
		switch (truncation) {
			case "major":
				version.minor = 0;
				version.patch = 0;
				break;
			case "minor":
				version.patch = 0;
				break;
		}
		return version.format();
	};
	const isPrerelease = (type) => {
		return type.startsWith("pre");
	};
	module.exports = truncate;
}));
//#endregion
//#region node_modules/semver/internal/lrucache.js
var require_lrucache = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var LRUCache = class {
		constructor() {
			this.max = 1e3;
			this.map = /* @__PURE__ */ new Map();
		}
		get(key) {
			const value = this.map.get(key);
			if (value === void 0) return;
			else {
				this.map.delete(key);
				this.map.set(key, value);
				return value;
			}
		}
		delete(key) {
			return this.map.delete(key);
		}
		set(key, value) {
			if (!this.delete(key) && value !== void 0) {
				if (this.map.size >= this.max) {
					const firstKey = this.map.keys().next().value;
					this.delete(firstKey);
				}
				this.map.set(key, value);
			}
			return this;
		}
	};
	module.exports = LRUCache;
}));
//#endregion
//#region node_modules/semver/classes/range.js
var require_range = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SPACE_CHARACTERS = /\s+/g;
	module.exports = class Range {
		constructor(range, options) {
			options = parseOptions(options);
			if (range instanceof Range) if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) return range;
			else return new Range(range.raw, options);
			if (range instanceof Comparator) {
				this.raw = range.value;
				this.set = [[range]];
				this.formatted = void 0;
				return this;
			}
			this.options = options;
			this.loose = !!options.loose;
			this.includePrerelease = !!options.includePrerelease;
			this.raw = range.trim().replace(SPACE_CHARACTERS, " ");
			this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length);
			if (!this.set.length) throw new TypeError(`Invalid SemVer Range: ${this.raw}`);
			if (this.set.length > 1) {
				const first = this.set[0];
				this.set = this.set.filter((c) => !isNullSet(c[0]));
				if (this.set.length === 0) this.set = [first];
				else if (this.set.length > 1) {
					for (const c of this.set) if (c.length === 1 && isAny(c[0])) {
						this.set = [c];
						break;
					}
				}
			}
			this.formatted = void 0;
		}
		get range() {
			if (this.formatted === void 0) {
				this.formatted = "";
				for (let i = 0; i < this.set.length; i++) {
					if (i > 0) this.formatted += "||";
					const comps = this.set[i];
					for (let k = 0; k < comps.length; k++) {
						if (k > 0) this.formatted += " ";
						this.formatted += comps[k].toString().trim();
					}
				}
			}
			return this.formatted;
		}
		format() {
			return this.range;
		}
		toString() {
			return this.range;
		}
		parseRange(range) {
			range = range.replace(BUILDSTRIPRE, "");
			const memoKey = ((this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE)) + ":" + range;
			const cached = cache.get(memoKey);
			if (cached) return cached;
			const loose = this.options.loose;
			const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
			range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
			debug("hyphen replace", range);
			range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
			debug("comparator trim", range);
			range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
			debug("tilde trim", range);
			range = range.replace(re[t.CARETTRIM], caretTrimReplace);
			debug("caret trim", range);
			let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options));
			if (loose) rangeList = rangeList.filter((comp) => {
				debug("loose invalid filter", comp, this.options);
				return !!comp.match(re[t.COMPARATORLOOSE]);
			});
			debug("range list", rangeList);
			const rangeMap = /* @__PURE__ */ new Map();
			const comparators = rangeList.map((comp) => new Comparator(comp, this.options));
			for (const comp of comparators) {
				if (isNullSet(comp)) return [comp];
				rangeMap.set(comp.value, comp);
			}
			if (rangeMap.size > 1 && rangeMap.has("")) rangeMap.delete("");
			const result = [...rangeMap.values()];
			cache.set(memoKey, result);
			return result;
		}
		intersects(range, options) {
			if (!(range instanceof Range)) throw new TypeError("a Range is required");
			return this.set.some((thisComparators) => {
				return isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => {
					return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {
						return rangeComparators.every((rangeComparator) => {
							return thisComparator.intersects(rangeComparator, options);
						});
					});
				});
			});
		}
		test(version) {
			if (!version) return false;
			if (typeof version === "string") try {
				version = new SemVer(version, this.options);
			} catch (er) {
				return false;
			}
			for (let i = 0; i < this.set.length; i++) if (testSet(this.set[i], version, this.options)) return true;
			return false;
		}
	};
	const cache = new (require_lrucache())();
	const parseOptions = require_parse_options();
	const Comparator = require_comparator();
	const debug = require_debug$1();
	const SemVer = require_semver$1();
	const { safeRe: re, src, t, comparatorTrimReplace, tildeTrimReplace, caretTrimReplace } = require_re();
	const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants();
	const BUILDSTRIPRE = new RegExp(src[t.BUILD], "g");
	const isNullSet = (c) => c.value === "<0.0.0-0";
	const isAny = (c) => c.value === "";
	const isSatisfiable = (comparators, options) => {
		let result = true;
		const remainingComparators = comparators.slice();
		let testComparator = remainingComparators.pop();
		while (result && remainingComparators.length) {
			result = remainingComparators.every((otherComparator) => {
				return testComparator.intersects(otherComparator, options);
			});
			testComparator = remainingComparators.pop();
		}
		return result;
	};
	const parseComparator = (comp, options) => {
		comp = comp.replace(re[t.BUILD], "");
		debug("comp", comp, options);
		comp = replaceCarets(comp, options);
		debug("caret", comp);
		comp = replaceTildes(comp, options);
		debug("tildes", comp);
		comp = replaceXRanges(comp, options);
		debug("xrange", comp);
		comp = replaceStars(comp, options);
		debug("stars", comp);
		return comp;
	};
	const isX = (id) => !id || id.toLowerCase() === "x" || id === "*";
	const replaceTildes = (comp, options) => {
		return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" ");
	};
	const replaceTilde = (comp, options) => {
		const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
		return comp.replace(r, (_, M, m, p, pr) => {
			debug("tilde", comp, _, M, m, p, pr);
			let ret;
			if (isX(M)) ret = "";
			else if (isX(m)) ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
			else if (isX(p)) ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
			else if (pr) {
				debug("replaceTilde pr", pr);
				ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
			} else ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
			debug("tilde return", ret);
			return ret;
		});
	};
	const replaceCarets = (comp, options) => {
		return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" ");
	};
	const replaceCaret = (comp, options) => {
		debug("caret", comp, options);
		const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
		const z = options.includePrerelease ? "-0" : "";
		return comp.replace(r, (_, M, m, p, pr) => {
			debug("caret", comp, _, M, m, p, pr);
			let ret;
			if (isX(M)) ret = "";
			else if (isX(m)) ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
			else if (isX(p)) if (M === "0") ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
			else ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
			else if (pr) {
				debug("replaceCaret pr", pr);
				if (M === "0") if (m === "0") ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;
				else ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
				else ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;
			} else {
				debug("no pr");
				if (M === "0") if (m === "0") ret = `>=${M}.${m}.${p}${z} <${M}.${m}.${+p + 1}-0`;
				else ret = `>=${M}.${m}.${p}${z} <${M}.${+m + 1}.0-0`;
				else ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
			}
			debug("caret return", ret);
			return ret;
		});
	};
	const replaceXRanges = (comp, options) => {
		debug("replaceXRanges", comp, options);
		return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" ");
	};
	const replaceXRange = (comp, options) => {
		comp = comp.trim();
		const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
		return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
			debug("xRange", comp, ret, gtlt, M, m, p, pr);
			const xM = isX(M);
			const xm = xM || isX(m);
			const xp = xm || isX(p);
			const anyX = xp;
			if (gtlt === "=" && anyX) gtlt = "";
			pr = options.includePrerelease ? "-0" : "";
			if (xM) if (gtlt === ">" || gtlt === "<") ret = "<0.0.0-0";
			else ret = "*";
			else if (gtlt && anyX) {
				if (xm) m = 0;
				p = 0;
				if (gtlt === ">") {
					gtlt = ">=";
					if (xm) {
						M = +M + 1;
						m = 0;
						p = 0;
					} else {
						m = +m + 1;
						p = 0;
					}
				} else if (gtlt === "<=") {
					gtlt = "<";
					if (xm) M = +M + 1;
					else m = +m + 1;
				}
				if (gtlt === "<") pr = "-0";
				ret = `${gtlt + M}.${m}.${p}${pr}`;
			} else if (xm) ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
			else if (xp) ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;
			debug("xRange return", ret);
			return ret;
		});
	};
	const replaceStars = (comp, options) => {
		debug("replaceStars", comp, options);
		return comp.trim().replace(re[t.STAR], "");
	};
	const replaceGTE0 = (comp, options) => {
		debug("replaceGTE0", comp, options);
		return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], "");
	};
	const hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {
		if (isX(fM)) from = "";
		else if (isX(fm)) from = `>=${fM}.0.0${incPr ? "-0" : ""}`;
		else if (isX(fp)) from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`;
		else if (fpr) from = `>=${from}`;
		else from = `>=${from}${incPr ? "-0" : ""}`;
		if (isX(tM)) to = "";
		else if (isX(tm)) to = `<${+tM + 1}.0.0-0`;
		else if (isX(tp)) to = `<${tM}.${+tm + 1}.0-0`;
		else if (tpr) to = `<=${tM}.${tm}.${tp}-${tpr}`;
		else if (incPr) to = `<${tM}.${tm}.${+tp + 1}-0`;
		else to = `<=${to}`;
		return `${from} ${to}`.trim();
	};
	const testSet = (set, version, options) => {
		for (let i = 0; i < set.length; i++) if (!set[i].test(version)) return false;
		if (version.prerelease.length && !options.includePrerelease) {
			for (let i = 0; i < set.length; i++) {
				debug(set[i].semver);
				if (set[i].semver === Comparator.ANY) continue;
				if (set[i].semver.prerelease.length > 0) {
					const allowed = set[i].semver;
					if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) return true;
				}
			}
			return false;
		}
		return true;
	};
}));
//#endregion
//#region node_modules/semver/classes/comparator.js
var require_comparator = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const ANY = Symbol("SemVer ANY");
	module.exports = class Comparator {
		static get ANY() {
			return ANY;
		}
		constructor(comp, options) {
			options = parseOptions(options);
			if (comp instanceof Comparator) if (comp.loose === !!options.loose) return comp;
			else comp = comp.value;
			comp = comp.trim().split(/\s+/).join(" ");
			debug("comparator", comp, options);
			this.options = options;
			this.loose = !!options.loose;
			this.parse(comp);
			if (this.semver === ANY) this.value = "";
			else this.value = this.operator + this.semver.version;
			debug("comp", this);
		}
		parse(comp) {
			const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
			const m = comp.match(r);
			if (!m) throw new TypeError(`Invalid comparator: ${comp}`);
			this.operator = m[1] !== void 0 ? m[1] : "";
			if (this.operator === "=") this.operator = "";
			if (!m[2]) this.semver = ANY;
			else this.semver = new SemVer(m[2], this.options.loose);
		}
		toString() {
			return this.value;
		}
		test(version) {
			debug("Comparator.test", version, this.options.loose);
			if (this.semver === ANY || version === ANY) return true;
			if (typeof version === "string") try {
				version = new SemVer(version, this.options);
			} catch (er) {
				return false;
			}
			return cmp(version, this.operator, this.semver, this.options);
		}
		intersects(comp, options) {
			if (!(comp instanceof Comparator)) throw new TypeError("a Comparator is required");
			if (this.operator === "") {
				if (this.value === "") return true;
				return new Range(comp.value, options).test(this.value);
			} else if (comp.operator === "") {
				if (comp.value === "") return true;
				return new Range(this.value, options).test(comp.semver);
			}
			options = parseOptions(options);
			if (options.includePrerelease && (this.value === "<0.0.0-0" || comp.value === "<0.0.0-0")) return false;
			if (!options.includePrerelease && (this.value.startsWith("<0.0.0") || comp.value.startsWith("<0.0.0"))) return false;
			if (this.operator.startsWith(">") && comp.operator.startsWith(">")) return true;
			if (this.operator.startsWith("<") && comp.operator.startsWith("<")) return true;
			if (this.semver.version === comp.semver.version && this.operator.includes("=") && comp.operator.includes("=")) return true;
			if (cmp(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) return true;
			if (cmp(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) return true;
			return false;
		}
	};
	const parseOptions = require_parse_options();
	const { safeRe: re, t } = require_re();
	const cmp = require_cmp();
	const debug = require_debug$1();
	const SemVer = require_semver$1();
	const Range = require_range();
}));
//#endregion
//#region node_modules/semver/functions/satisfies.js
var require_satisfies = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const Range = require_range();
	const satisfies = (version, range, options) => {
		try {
			range = new Range(range, options);
		} catch (er) {
			return false;
		}
		return range.test(version);
	};
	module.exports = satisfies;
}));
//#endregion
//#region node_modules/semver/ranges/to-comparators.js
var require_to_comparators = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const Range = require_range();
	const toComparators = (range, options) => new Range(range, options).set.map((comp) => comp.map((c) => c.value).join(" ").trim().split(" "));
	module.exports = toComparators;
}));
//#endregion
//#region node_modules/semver/ranges/max-satisfying.js
var require_max_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const Range = require_range();
	const maxSatisfying = (versions, range, options) => {
		let max = null;
		let maxSV = null;
		let rangeObj = null;
		try {
			rangeObj = new Range(range, options);
		} catch (er) {
			return null;
		}
		versions.forEach((v) => {
			if (rangeObj.test(v)) {
				if (!max || maxSV.compare(v) === -1) {
					max = v;
					maxSV = new SemVer(max, options);
				}
			}
		});
		return max;
	};
	module.exports = maxSatisfying;
}));
//#endregion
//#region node_modules/semver/ranges/min-satisfying.js
var require_min_satisfying = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const Range = require_range();
	const minSatisfying = (versions, range, options) => {
		let min = null;
		let minSV = null;
		let rangeObj = null;
		try {
			rangeObj = new Range(range, options);
		} catch (er) {
			return null;
		}
		versions.forEach((v) => {
			if (rangeObj.test(v)) {
				if (!min || minSV.compare(v) === 1) {
					min = v;
					minSV = new SemVer(min, options);
				}
			}
		});
		return min;
	};
	module.exports = minSatisfying;
}));
//#endregion
//#region node_modules/semver/ranges/min-version.js
var require_min_version = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const Range = require_range();
	const gt = require_gt();
	const minVersion = (range, loose) => {
		range = new Range(range, loose);
		let minver = new SemVer("0.0.0");
		if (range.test(minver)) return minver;
		minver = new SemVer("0.0.0-0");
		if (range.test(minver)) return minver;
		minver = null;
		for (let i = 0; i < range.set.length; ++i) {
			const comparators = range.set[i];
			let setMin = null;
			comparators.forEach((comparator) => {
				const compver = new SemVer(comparator.semver.version);
				switch (comparator.operator) {
					case ">":
						if (compver.prerelease.length === 0) compver.patch++;
						else compver.prerelease.push(0);
						compver.raw = compver.format();
					case "":
					case ">=":
						if (!setMin || gt(compver, setMin)) setMin = compver;
						break;
					case "<":
					case "<=": break;
					/* istanbul ignore next */
					default: throw new Error(`Unexpected operation: ${comparator.operator}`);
				}
			});
			if (setMin && (!minver || gt(minver, setMin))) minver = setMin;
		}
		if (minver && range.test(minver)) return minver;
		return null;
	};
	module.exports = minVersion;
}));
//#endregion
//#region node_modules/semver/ranges/valid.js
var require_valid = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const Range = require_range();
	const validRange = (range, options) => {
		try {
			return new Range(range, options).range || "*";
		} catch (er) {
			return null;
		}
	};
	module.exports = validRange;
}));
//#endregion
//#region node_modules/semver/ranges/outside.js
var require_outside = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const SemVer = require_semver$1();
	const Comparator = require_comparator();
	const { ANY } = Comparator;
	const Range = require_range();
	const satisfies = require_satisfies();
	const gt = require_gt();
	const lt = require_lt();
	const lte = require_lte();
	const gte = require_gte();
	const outside = (version, range, hilo, options) => {
		version = new SemVer(version, options);
		range = new Range(range, options);
		let gtfn, ltefn, ltfn, comp, ecomp;
		switch (hilo) {
			case ">":
				gtfn = gt;
				ltefn = lte;
				ltfn = lt;
				comp = ">";
				ecomp = ">=";
				break;
			case "<":
				gtfn = lt;
				ltefn = gte;
				ltfn = gt;
				comp = "<";
				ecomp = "<=";
				break;
			default: throw new TypeError("Must provide a hilo val of \"<\" or \">\"");
		}
		if (satisfies(version, range, options)) return false;
		for (let i = 0; i < range.set.length; ++i) {
			const comparators = range.set[i];
			let high = null;
			let low = null;
			comparators.forEach((comparator) => {
				if (comparator.semver === ANY) comparator = new Comparator(">=0.0.0");
				high = high || comparator;
				low = low || comparator;
				if (gtfn(comparator.semver, high.semver, options)) high = comparator;
				else if (ltfn(comparator.semver, low.semver, options)) low = comparator;
			});
			if (high.operator === comp || high.operator === ecomp) return false;
			if ((!low.operator || low.operator === comp) && ltefn(version, low.semver)) return false;
			else if (low.operator === ecomp && ltfn(version, low.semver)) return false;
		}
		return true;
	};
	module.exports = outside;
}));
//#endregion
//#region node_modules/semver/ranges/gtr.js
var require_gtr = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const outside = require_outside();
	const gtr = (version, range, options) => outside(version, range, ">", options);
	module.exports = gtr;
}));
//#endregion
//#region node_modules/semver/ranges/ltr.js
var require_ltr = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const outside = require_outside();
	const ltr = (version, range, options) => outside(version, range, "<", options);
	module.exports = ltr;
}));
//#endregion
//#region node_modules/semver/ranges/intersects.js
var require_intersects = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const Range = require_range();
	const intersects = (r1, r2, options) => {
		r1 = new Range(r1, options);
		r2 = new Range(r2, options);
		return r1.intersects(r2, options);
	};
	module.exports = intersects;
}));
//#endregion
//#region node_modules/semver/ranges/simplify.js
var require_simplify = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const satisfies = require_satisfies();
	const compare = require_compare();
	module.exports = (versions, range, options) => {
		const set = [];
		let first = null;
		let prev = null;
		const v = versions.sort((a, b) => compare(a, b, options));
		for (const version of v) if (satisfies(version, range, options)) {
			prev = version;
			if (!first) first = version;
		} else {
			if (prev) set.push([first, prev]);
			prev = null;
			first = null;
		}
		if (first) set.push([first, null]);
		const ranges = [];
		for (const [min, max] of set) if (min === max) ranges.push(min);
		else if (!max && min === v[0]) ranges.push("*");
		else if (!max) ranges.push(`>=${min}`);
		else if (min === v[0]) ranges.push(`<=${max}`);
		else ranges.push(`${min} - ${max}`);
		const simplified = ranges.join(" || ");
		const original = typeof range.raw === "string" ? range.raw : String(range);
		return simplified.length < original.length ? simplified : range;
	};
}));
//#endregion
//#region node_modules/semver/ranges/subset.js
var require_subset = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const Range = require_range();
	const Comparator = require_comparator();
	const { ANY } = Comparator;
	const satisfies = require_satisfies();
	const compare = require_compare();
	const subset = (sub, dom, options = {}) => {
		if (sub === dom) return true;
		sub = new Range(sub, options);
		dom = new Range(dom, options);
		let sawNonNull = false;
		OUTER: for (const simpleSub of sub.set) {
			for (const simpleDom of dom.set) {
				const isSub = simpleSubset(simpleSub, simpleDom, options);
				sawNonNull = sawNonNull || isSub !== null;
				if (isSub) continue OUTER;
			}
			if (sawNonNull) return false;
		}
		return true;
	};
	const minimumVersionWithPreRelease = [new Comparator(">=0.0.0-0")];
	const minimumVersion = [new Comparator(">=0.0.0")];
	const simpleSubset = (sub, dom, options) => {
		if (sub === dom) return true;
		if (sub.length === 1 && sub[0].semver === ANY) if (dom.length === 1 && dom[0].semver === ANY) return true;
		else if (options.includePrerelease) sub = minimumVersionWithPreRelease;
		else sub = minimumVersion;
		if (dom.length === 1 && dom[0].semver === ANY) if (options.includePrerelease) return true;
		else dom = minimumVersion;
		const eqSet = /* @__PURE__ */ new Set();
		let gt, lt;
		for (const c of sub) if (c.operator === ">" || c.operator === ">=") gt = higherGT(gt, c, options);
		else if (c.operator === "<" || c.operator === "<=") lt = lowerLT(lt, c, options);
		else eqSet.add(c.semver);
		if (eqSet.size > 1) return null;
		let gtltComp;
		if (gt && lt) {
			gtltComp = compare(gt.semver, lt.semver, options);
			if (gtltComp > 0) return null;
			else if (gtltComp === 0 && (gt.operator !== ">=" || lt.operator !== "<=")) return null;
		}
		for (const eq of eqSet) {
			if (gt && !satisfies(eq, String(gt), options)) return null;
			if (lt && !satisfies(eq, String(lt), options)) return null;
			for (const c of dom) if (!satisfies(eq, String(c), options)) return false;
			return true;
		}
		let higher, lower;
		let hasDomLT, hasDomGT;
		let needDomLTPre = lt && !options.includePrerelease && lt.semver.prerelease.length ? lt.semver : false;
		let needDomGTPre = gt && !options.includePrerelease && gt.semver.prerelease.length ? gt.semver : false;
		if (needDomLTPre && needDomLTPre.prerelease.length === 1 && lt.operator === "<" && needDomLTPre.prerelease[0] === 0) needDomLTPre = false;
		for (const c of dom) {
			hasDomGT = hasDomGT || c.operator === ">" || c.operator === ">=";
			hasDomLT = hasDomLT || c.operator === "<" || c.operator === "<=";
			if (gt) {
				if (needDomGTPre) {
					if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomGTPre.major && c.semver.minor === needDomGTPre.minor && c.semver.patch === needDomGTPre.patch) needDomGTPre = false;
				}
				if (c.operator === ">" || c.operator === ">=") {
					higher = higherGT(gt, c, options);
					if (higher === c && higher !== gt) return false;
				} else if (gt.operator === ">=" && !c.test(gt.semver)) return false;
			}
			if (lt) {
				if (needDomLTPre) {
					if (c.semver.prerelease && c.semver.prerelease.length && c.semver.major === needDomLTPre.major && c.semver.minor === needDomLTPre.minor && c.semver.patch === needDomLTPre.patch) needDomLTPre = false;
				}
				if (c.operator === "<" || c.operator === "<=") {
					lower = lowerLT(lt, c, options);
					if (lower === c && lower !== lt) return false;
				} else if (lt.operator === "<=" && !c.test(lt.semver)) return false;
			}
			if (!c.operator && (lt || gt) && gtltComp !== 0) return false;
		}
		if (gt && hasDomLT && !lt && gtltComp !== 0) return false;
		if (lt && hasDomGT && !gt && gtltComp !== 0) return false;
		if (needDomGTPre || needDomLTPre) return false;
		return true;
	};
	const higherGT = (a, b, options) => {
		if (!a) return b;
		const comp = compare(a.semver, b.semver, options);
		return comp > 0 ? a : comp < 0 ? b : b.operator === ">" && a.operator === ">=" ? b : a;
	};
	const lowerLT = (a, b, options) => {
		if (!a) return b;
		const comp = compare(a.semver, b.semver, options);
		return comp < 0 ? a : comp > 0 ? b : b.operator === "<" && a.operator === "<=" ? b : a;
	};
	module.exports = subset;
}));
//#endregion
//#region node_modules/semver/index.js
var require_semver = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const internalRe = require_re();
	const constants = require_constants();
	const SemVer = require_semver$1();
	const identifiers = require_identifiers();
	module.exports = {
		parse: require_parse(),
		valid: require_valid$1(),
		clean: require_clean(),
		inc: require_inc(),
		diff: require_diff$1(),
		major: require_major(),
		minor: require_minor(),
		patch: require_patch(),
		prerelease: require_prerelease(),
		compare: require_compare(),
		rcompare: require_rcompare(),
		compareLoose: require_compare_loose(),
		compareBuild: require_compare_build(),
		sort: require_sort(),
		rsort: require_rsort(),
		gt: require_gt(),
		lt: require_lt(),
		eq: require_eq(),
		neq: require_neq(),
		gte: require_gte(),
		lte: require_lte(),
		cmp: require_cmp(),
		coerce: require_coerce(),
		truncate: require_truncate(),
		Comparator: require_comparator(),
		Range: require_range(),
		satisfies: require_satisfies(),
		toComparators: require_to_comparators(),
		maxSatisfying: require_max_satisfying(),
		minSatisfying: require_min_satisfying(),
		minVersion: require_min_version(),
		validRange: require_valid(),
		outside: require_outside(),
		gtr: require_gtr(),
		ltr: require_ltr(),
		intersects: require_intersects(),
		simplifyRange: require_simplify(),
		subset: require_subset(),
		SemVer,
		re: internalRe.re,
		src: internalRe.src,
		tokens: internalRe.t,
		SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,
		RELEASE_TYPES: constants.RELEASE_TYPES,
		compareIdentifiers: identifiers.compareIdentifiers,
		rcompareIdentifiers: identifiers.rcompareIdentifiers
	};
}));
//#endregion
//#region node_modules/fast-diff/diff.js
var require_diff = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/**
	* This library modifies the diff-patch-match library by Neil Fraser
	* by removing the patch and match functionality and certain advanced
	* options in the diff function. The original license is as follows:
	*
	* ===
	*
	* Diff Match and Patch
	*
	* Copyright 2006 Google Inc.
	* http://code.google.com/p/google-diff-match-patch/
	*
	* Licensed under the Apache License, Version 2.0 (the "License");
	* you may not use this file except in compliance with the License.
	* You may obtain a copy of the License at
	*
	*   http://www.apache.org/licenses/LICENSE-2.0
	*
	* Unless required by applicable law or agreed to in writing, software
	* distributed under the License is distributed on an "AS IS" BASIS,
	* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	* See the License for the specific language governing permissions and
	* limitations under the License.
	*/
	/**
	* The data structure representing a diff is an array of tuples:
	* [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
	* which means: delete 'Hello', add 'Goodbye' and keep ' world.'
	*/
	var DIFF_DELETE = -1;
	var DIFF_INSERT = 1;
	var DIFF_EQUAL = 0;
	/**
	* Find the differences between two texts.  Simplifies the problem by stripping
	* any common prefix or suffix off the texts before diffing.
	* @param {string} text1 Old string to be diffed.
	* @param {string} text2 New string to be diffed.
	* @param {Int|Object} [cursor_pos] Edit position in text1 or object with more info
	* @param {boolean} [cleanup] Apply semantic cleanup before returning.
	* @return {Array} Array of diff tuples.
	*/
	function diff_main(text1, text2, cursor_pos, cleanup, _fix_unicode) {
		if (text1 === text2) {
			if (text1) return [[DIFF_EQUAL, text1]];
			return [];
		}
		if (cursor_pos != null) {
			var editdiff = find_cursor_edit_diff(text1, text2, cursor_pos);
			if (editdiff) return editdiff;
		}
		var commonlength = diff_commonPrefix(text1, text2);
		var commonprefix = text1.substring(0, commonlength);
		text1 = text1.substring(commonlength);
		text2 = text2.substring(commonlength);
		commonlength = diff_commonSuffix(text1, text2);
		var commonsuffix = text1.substring(text1.length - commonlength);
		text1 = text1.substring(0, text1.length - commonlength);
		text2 = text2.substring(0, text2.length - commonlength);
		var diffs = diff_compute_(text1, text2);
		if (commonprefix) diffs.unshift([DIFF_EQUAL, commonprefix]);
		if (commonsuffix) diffs.push([DIFF_EQUAL, commonsuffix]);
		diff_cleanupMerge(diffs, _fix_unicode);
		if (cleanup) diff_cleanupSemantic(diffs);
		return diffs;
	}
	/**
	* Find the differences between two texts.  Assumes that the texts do not
	* have any common prefix or suffix.
	* @param {string} text1 Old string to be diffed.
	* @param {string} text2 New string to be diffed.
	* @return {Array} Array of diff tuples.
	*/
	function diff_compute_(text1, text2) {
		var diffs;
		if (!text1) return [[DIFF_INSERT, text2]];
		if (!text2) return [[DIFF_DELETE, text1]];
		var longtext = text1.length > text2.length ? text1 : text2;
		var shorttext = text1.length > text2.length ? text2 : text1;
		var i = longtext.indexOf(shorttext);
		if (i !== -1) {
			diffs = [
				[DIFF_INSERT, longtext.substring(0, i)],
				[DIFF_EQUAL, shorttext],
				[DIFF_INSERT, longtext.substring(i + shorttext.length)]
			];
			if (text1.length > text2.length) diffs[0][0] = diffs[2][0] = DIFF_DELETE;
			return diffs;
		}
		if (shorttext.length === 1) return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];
		var hm = diff_halfMatch_(text1, text2);
		if (hm) {
			var text1_a = hm[0];
			var text1_b = hm[1];
			var text2_a = hm[2];
			var text2_b = hm[3];
			var mid_common = hm[4];
			var diffs_a = diff_main(text1_a, text2_a);
			var diffs_b = diff_main(text1_b, text2_b);
			return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);
		}
		return diff_bisect_(text1, text2);
	}
	/**
	* Find the 'middle snake' of a diff, split the problem in two
	* and return the recursively constructed diff.
	* See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
	* @param {string} text1 Old string to be diffed.
	* @param {string} text2 New string to be diffed.
	* @return {Array} Array of diff tuples.
	* @private
	*/
	function diff_bisect_(text1, text2) {
		var text1_length = text1.length;
		var text2_length = text2.length;
		var max_d = Math.ceil((text1_length + text2_length) / 2);
		var v_offset = max_d;
		var v_length = 2 * max_d;
		var v1 = new Array(v_length);
		var v2 = new Array(v_length);
		for (var x = 0; x < v_length; x++) {
			v1[x] = -1;
			v2[x] = -1;
		}
		v1[v_offset + 1] = 0;
		v2[v_offset + 1] = 0;
		var delta = text1_length - text2_length;
		var front = delta % 2 !== 0;
		var k1start = 0;
		var k1end = 0;
		var k2start = 0;
		var k2end = 0;
		for (var d = 0; d < max_d; d++) {
			for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
				var k1_offset = v_offset + k1;
				var x1;
				if (k1 === -d || k1 !== d && v1[k1_offset - 1] < v1[k1_offset + 1]) x1 = v1[k1_offset + 1];
				else x1 = v1[k1_offset - 1] + 1;
				var y1 = x1 - k1;
				while (x1 < text1_length && y1 < text2_length && text1.charAt(x1) === text2.charAt(y1)) {
					x1++;
					y1++;
				}
				v1[k1_offset] = x1;
				if (x1 > text1_length) k1end += 2;
				else if (y1 > text2_length) k1start += 2;
				else if (front) {
					var k2_offset = v_offset + delta - k1;
					if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] !== -1) {
						var x2 = text1_length - v2[k2_offset];
						if (x1 >= x2) return diff_bisectSplit_(text1, text2, x1, y1);
					}
				}
			}
			for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
				var k2_offset = v_offset + k2;
				var x2;
				if (k2 === -d || k2 !== d && v2[k2_offset - 1] < v2[k2_offset + 1]) x2 = v2[k2_offset + 1];
				else x2 = v2[k2_offset - 1] + 1;
				var y2 = x2 - k2;
				while (x2 < text1_length && y2 < text2_length && text1.charAt(text1_length - x2 - 1) === text2.charAt(text2_length - y2 - 1)) {
					x2++;
					y2++;
				}
				v2[k2_offset] = x2;
				if (x2 > text1_length) k2end += 2;
				else if (y2 > text2_length) k2start += 2;
				else if (!front) {
					var k1_offset = v_offset + delta - k2;
					if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] !== -1) {
						var x1 = v1[k1_offset];
						var y1 = v_offset + x1 - k1_offset;
						x2 = text1_length - x2;
						if (x1 >= x2) return diff_bisectSplit_(text1, text2, x1, y1);
					}
				}
			}
		}
		return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];
	}
	/**
	* Given the location of the 'middle snake', split the diff in two parts
	* and recurse.
	* @param {string} text1 Old string to be diffed.
	* @param {string} text2 New string to be diffed.
	* @param {number} x Index of split point in text1.
	* @param {number} y Index of split point in text2.
	* @return {Array} Array of diff tuples.
	*/
	function diff_bisectSplit_(text1, text2, x, y) {
		var text1a = text1.substring(0, x);
		var text2a = text2.substring(0, y);
		var text1b = text1.substring(x);
		var text2b = text2.substring(y);
		var diffs = diff_main(text1a, text2a);
		var diffsb = diff_main(text1b, text2b);
		return diffs.concat(diffsb);
	}
	/**
	* Determine the common prefix of two strings.
	* @param {string} text1 First string.
	* @param {string} text2 Second string.
	* @return {number} The number of characters common to the start of each
	*     string.
	*/
	function diff_commonPrefix(text1, text2) {
		if (!text1 || !text2 || text1.charAt(0) !== text2.charAt(0)) return 0;
		var pointermin = 0;
		var pointermax = Math.min(text1.length, text2.length);
		var pointermid = pointermax;
		var pointerstart = 0;
		while (pointermin < pointermid) {
			if (text1.substring(pointerstart, pointermid) == text2.substring(pointerstart, pointermid)) {
				pointermin = pointermid;
				pointerstart = pointermin;
			} else pointermax = pointermid;
			pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
		}
		if (is_surrogate_pair_start(text1.charCodeAt(pointermid - 1))) pointermid--;
		return pointermid;
	}
	/**
	* Determine if the suffix of one string is the prefix of another.
	* @param {string} text1 First string.
	* @param {string} text2 Second string.
	* @return {number} The number of characters common to the end of the first
	*     string and the start of the second string.
	* @private
	*/
	function diff_commonOverlap_(text1, text2) {
		var text1_length = text1.length;
		var text2_length = text2.length;
		if (text1_length == 0 || text2_length == 0) return 0;
		if (text1_length > text2_length) text1 = text1.substring(text1_length - text2_length);
		else if (text1_length < text2_length) text2 = text2.substring(0, text1_length);
		var text_length = Math.min(text1_length, text2_length);
		if (text1 == text2) return text_length;
		var best = 0;
		var length = 1;
		while (true) {
			var pattern = text1.substring(text_length - length);
			var found = text2.indexOf(pattern);
			if (found == -1) return best;
			length += found;
			if (found == 0 || text1.substring(text_length - length) == text2.substring(0, length)) {
				best = length;
				length++;
			}
		}
	}
	/**
	* Determine the common suffix of two strings.
	* @param {string} text1 First string.
	* @param {string} text2 Second string.
	* @return {number} The number of characters common to the end of each string.
	*/
	function diff_commonSuffix(text1, text2) {
		if (!text1 || !text2 || text1.slice(-1) !== text2.slice(-1)) return 0;
		var pointermin = 0;
		var pointermax = Math.min(text1.length, text2.length);
		var pointermid = pointermax;
		var pointerend = 0;
		while (pointermin < pointermid) {
			if (text1.substring(text1.length - pointermid, text1.length - pointerend) == text2.substring(text2.length - pointermid, text2.length - pointerend)) {
				pointermin = pointermid;
				pointerend = pointermin;
			} else pointermax = pointermid;
			pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);
		}
		if (is_surrogate_pair_end(text1.charCodeAt(text1.length - pointermid))) pointermid--;
		return pointermid;
	}
	/**
	* Do the two texts share a substring which is at least half the length of the
	* longer text?
	* This speedup can produce non-minimal diffs.
	* @param {string} text1 First string.
	* @param {string} text2 Second string.
	* @return {Array.<string>} Five element Array, containing the prefix of
	*     text1, the suffix of text1, the prefix of text2, the suffix of
	*     text2 and the common middle.  Or null if there was no match.
	*/
	function diff_halfMatch_(text1, text2) {
		var longtext = text1.length > text2.length ? text1 : text2;
		var shorttext = text1.length > text2.length ? text2 : text1;
		if (longtext.length < 4 || shorttext.length * 2 < longtext.length) return null;
		/**
		* Does a substring of shorttext exist within longtext such that the substring
		* is at least half the length of longtext?
		* Closure, but does not reference any external variables.
		* @param {string} longtext Longer string.
		* @param {string} shorttext Shorter string.
		* @param {number} i Start index of quarter length substring within longtext.
		* @return {Array.<string>} Five element Array, containing the prefix of
		*     longtext, the suffix of longtext, the prefix of shorttext, the suffix
		*     of shorttext and the common middle.  Or null if there was no match.
		* @private
		*/
		function diff_halfMatchI_(longtext, shorttext, i) {
			var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));
			var j = -1;
			var best_common = "";
			var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;
			while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {
				var prefixLength = diff_commonPrefix(longtext.substring(i), shorttext.substring(j));
				var suffixLength = diff_commonSuffix(longtext.substring(0, i), shorttext.substring(0, j));
				if (best_common.length < suffixLength + prefixLength) {
					best_common = shorttext.substring(j - suffixLength, j) + shorttext.substring(j, j + prefixLength);
					best_longtext_a = longtext.substring(0, i - suffixLength);
					best_longtext_b = longtext.substring(i + prefixLength);
					best_shorttext_a = shorttext.substring(0, j - suffixLength);
					best_shorttext_b = shorttext.substring(j + prefixLength);
				}
			}
			if (best_common.length * 2 >= longtext.length) return [
				best_longtext_a,
				best_longtext_b,
				best_shorttext_a,
				best_shorttext_b,
				best_common
			];
			else return null;
		}
		var hm1 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 4));
		var hm2 = diff_halfMatchI_(longtext, shorttext, Math.ceil(longtext.length / 2));
		var hm;
		if (!hm1 && !hm2) return null;
		else if (!hm2) hm = hm1;
		else if (!hm1) hm = hm2;
		else hm = hm1[4].length > hm2[4].length ? hm1 : hm2;
		var text1_a, text1_b, text2_a, text2_b;
		if (text1.length > text2.length) {
			text1_a = hm[0];
			text1_b = hm[1];
			text2_a = hm[2];
			text2_b = hm[3];
		} else {
			text2_a = hm[0];
			text2_b = hm[1];
			text1_a = hm[2];
			text1_b = hm[3];
		}
		var mid_common = hm[4];
		return [
			text1_a,
			text1_b,
			text2_a,
			text2_b,
			mid_common
		];
	}
	/**
	* Reduce the number of edits by eliminating semantically trivial equalities.
	* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.
	*/
	function diff_cleanupSemantic(diffs) {
		var changes = false;
		var equalities = [];
		var equalitiesLength = 0;
		/** @type {?string} */
		var lastequality = null;
		var pointer = 0;
		var length_insertions1 = 0;
		var length_deletions1 = 0;
		var length_insertions2 = 0;
		var length_deletions2 = 0;
		while (pointer < diffs.length) {
			if (diffs[pointer][0] == DIFF_EQUAL) {
				equalities[equalitiesLength++] = pointer;
				length_insertions1 = length_insertions2;
				length_deletions1 = length_deletions2;
				length_insertions2 = 0;
				length_deletions2 = 0;
				lastequality = diffs[pointer][1];
			} else {
				if (diffs[pointer][0] == DIFF_INSERT) length_insertions2 += diffs[pointer][1].length;
				else length_deletions2 += diffs[pointer][1].length;
				if (lastequality && lastequality.length <= Math.max(length_insertions1, length_deletions1) && lastequality.length <= Math.max(length_insertions2, length_deletions2)) {
					diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastequality]);
					diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;
					equalitiesLength--;
					equalitiesLength--;
					pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;
					length_insertions1 = 0;
					length_deletions1 = 0;
					length_insertions2 = 0;
					length_deletions2 = 0;
					lastequality = null;
					changes = true;
				}
			}
			pointer++;
		}
		if (changes) diff_cleanupMerge(diffs);
		diff_cleanupSemanticLossless(diffs);
		pointer = 1;
		while (pointer < diffs.length) {
			if (diffs[pointer - 1][0] == DIFF_DELETE && diffs[pointer][0] == DIFF_INSERT) {
				var deletion = diffs[pointer - 1][1];
				var insertion = diffs[pointer][1];
				var overlap_length1 = diff_commonOverlap_(deletion, insertion);
				var overlap_length2 = diff_commonOverlap_(insertion, deletion);
				if (overlap_length1 >= overlap_length2) {
					if (overlap_length1 >= deletion.length / 2 || overlap_length1 >= insertion.length / 2) {
						diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlap_length1)]);
						diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlap_length1);
						diffs[pointer + 1][1] = insertion.substring(overlap_length1);
						pointer++;
					}
				} else if (overlap_length2 >= deletion.length / 2 || overlap_length2 >= insertion.length / 2) {
					diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlap_length2)]);
					diffs[pointer - 1][0] = DIFF_INSERT;
					diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlap_length2);
					diffs[pointer + 1][0] = DIFF_DELETE;
					diffs[pointer + 1][1] = deletion.substring(overlap_length2);
					pointer++;
				}
				pointer++;
			}
			pointer++;
		}
	}
	var nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;
	var whitespaceRegex_ = /\s/;
	var linebreakRegex_ = /[\r\n]/;
	var blanklineEndRegex_ = /\n\r?\n$/;
	var blanklineStartRegex_ = /^\r?\n\r?\n/;
	/**
	* Look for single edits surrounded on both sides by equalities
	* which can be shifted sideways to align the edit to a word boundary.
	* e.g: The c<ins>at c</ins>ame. -> The <ins>cat </ins>came.
	* @param {!Array.<!diff_match_patch.Diff>} diffs Array of diff tuples.
	*/
	function diff_cleanupSemanticLossless(diffs) {
		/**
		* Given two strings, compute a score representing whether the internal
		* boundary falls on logical boundaries.
		* Scores range from 6 (best) to 0 (worst).
		* Closure, but does not reference any external variables.
		* @param {string} one First string.
		* @param {string} two Second string.
		* @return {number} The score.
		* @private
		*/
		function diff_cleanupSemanticScore_(one, two) {
			if (!one || !two) return 6;
			var char1 = one.charAt(one.length - 1);
			var char2 = two.charAt(0);
			var nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex_);
			var nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex_);
			var whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex_);
			var whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex_);
			var lineBreak1 = whitespace1 && char1.match(linebreakRegex_);
			var lineBreak2 = whitespace2 && char2.match(linebreakRegex_);
			var blankLine1 = lineBreak1 && one.match(blanklineEndRegex_);
			var blankLine2 = lineBreak2 && two.match(blanklineStartRegex_);
			if (blankLine1 || blankLine2) return 5;
			else if (lineBreak1 || lineBreak2) return 4;
			else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) return 3;
			else if (whitespace1 || whitespace2) return 2;
			else if (nonAlphaNumeric1 || nonAlphaNumeric2) return 1;
			return 0;
		}
		var pointer = 1;
		while (pointer < diffs.length - 1) {
			if (diffs[pointer - 1][0] == DIFF_EQUAL && diffs[pointer + 1][0] == DIFF_EQUAL) {
				var equality1 = diffs[pointer - 1][1];
				var edit = diffs[pointer][1];
				var equality2 = diffs[pointer + 1][1];
				var commonOffset = diff_commonSuffix(equality1, edit);
				if (commonOffset) {
					var commonString = edit.substring(edit.length - commonOffset);
					equality1 = equality1.substring(0, equality1.length - commonOffset);
					edit = commonString + edit.substring(0, edit.length - commonOffset);
					equality2 = commonString + equality2;
				}
				var bestEquality1 = equality1;
				var bestEdit = edit;
				var bestEquality2 = equality2;
				var bestScore = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);
				while (edit.charAt(0) === equality2.charAt(0)) {
					equality1 += edit.charAt(0);
					edit = edit.substring(1) + equality2.charAt(0);
					equality2 = equality2.substring(1);
					var score = diff_cleanupSemanticScore_(equality1, edit) + diff_cleanupSemanticScore_(edit, equality2);
					if (score >= bestScore) {
						bestScore = score;
						bestEquality1 = equality1;
						bestEdit = edit;
						bestEquality2 = equality2;
					}
				}
				if (diffs[pointer - 1][1] != bestEquality1) {
					if (bestEquality1) diffs[pointer - 1][1] = bestEquality1;
					else {
						diffs.splice(pointer - 1, 1);
						pointer--;
					}
					diffs[pointer][1] = bestEdit;
					if (bestEquality2) diffs[pointer + 1][1] = bestEquality2;
					else {
						diffs.splice(pointer + 1, 1);
						pointer--;
					}
				}
			}
			pointer++;
		}
	}
	/**
	* Reorder and merge like edit sections.  Merge equalities.
	* Any edit section can move as long as it doesn't cross an equality.
	* @param {Array} diffs Array of diff tuples.
	* @param {boolean} fix_unicode Whether to normalize to a unicode-correct diff
	*/
	function diff_cleanupMerge(diffs, fix_unicode) {
		diffs.push([DIFF_EQUAL, ""]);
		var pointer = 0;
		var count_delete = 0;
		var count_insert = 0;
		var text_delete = "";
		var text_insert = "";
		var commonlength;
		while (pointer < diffs.length) {
			if (pointer < diffs.length - 1 && !diffs[pointer][1]) {
				diffs.splice(pointer, 1);
				continue;
			}
			switch (diffs[pointer][0]) {
				case DIFF_INSERT:
					count_insert++;
					text_insert += diffs[pointer][1];
					pointer++;
					break;
				case DIFF_DELETE:
					count_delete++;
					text_delete += diffs[pointer][1];
					pointer++;
					break;
				case DIFF_EQUAL:
					var previous_equality = pointer - count_insert - count_delete - 1;
					if (fix_unicode) {
						if (previous_equality >= 0 && ends_with_pair_start(diffs[previous_equality][1])) {
							var stray = diffs[previous_equality][1].slice(-1);
							diffs[previous_equality][1] = diffs[previous_equality][1].slice(0, -1);
							text_delete = stray + text_delete;
							text_insert = stray + text_insert;
							if (!diffs[previous_equality][1]) {
								diffs.splice(previous_equality, 1);
								pointer--;
								var k = previous_equality - 1;
								if (diffs[k] && diffs[k][0] === DIFF_INSERT) {
									count_insert++;
									text_insert = diffs[k][1] + text_insert;
									k--;
								}
								if (diffs[k] && diffs[k][0] === DIFF_DELETE) {
									count_delete++;
									text_delete = diffs[k][1] + text_delete;
									k--;
								}
								previous_equality = k;
							}
						}
						if (starts_with_pair_end(diffs[pointer][1])) {
							var stray = diffs[pointer][1].charAt(0);
							diffs[pointer][1] = diffs[pointer][1].slice(1);
							text_delete += stray;
							text_insert += stray;
						}
					}
					if (pointer < diffs.length - 1 && !diffs[pointer][1]) {
						diffs.splice(pointer, 1);
						break;
					}
					if (text_delete.length > 0 || text_insert.length > 0) {
						if (text_delete.length > 0 && text_insert.length > 0) {
							commonlength = diff_commonPrefix(text_insert, text_delete);
							if (commonlength !== 0) {
								if (previous_equality >= 0) diffs[previous_equality][1] += text_insert.substring(0, commonlength);
								else {
									diffs.splice(0, 0, [DIFF_EQUAL, text_insert.substring(0, commonlength)]);
									pointer++;
								}
								text_insert = text_insert.substring(commonlength);
								text_delete = text_delete.substring(commonlength);
							}
							commonlength = diff_commonSuffix(text_insert, text_delete);
							if (commonlength !== 0) {
								diffs[pointer][1] = text_insert.substring(text_insert.length - commonlength) + diffs[pointer][1];
								text_insert = text_insert.substring(0, text_insert.length - commonlength);
								text_delete = text_delete.substring(0, text_delete.length - commonlength);
							}
						}
						var n = count_insert + count_delete;
						if (text_delete.length === 0 && text_insert.length === 0) {
							diffs.splice(pointer - n, n);
							pointer = pointer - n;
						} else if (text_delete.length === 0) {
							diffs.splice(pointer - n, n, [DIFF_INSERT, text_insert]);
							pointer = pointer - n + 1;
						} else if (text_insert.length === 0) {
							diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete]);
							pointer = pointer - n + 1;
						} else {
							diffs.splice(pointer - n, n, [DIFF_DELETE, text_delete], [DIFF_INSERT, text_insert]);
							pointer = pointer - n + 2;
						}
					}
					if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {
						diffs[pointer - 1][1] += diffs[pointer][1];
						diffs.splice(pointer, 1);
					} else pointer++;
					count_insert = 0;
					count_delete = 0;
					text_delete = "";
					text_insert = "";
					break;
			}
		}
		if (diffs[diffs.length - 1][1] === "") diffs.pop();
		var changes = false;
		pointer = 1;
		while (pointer < diffs.length - 1) {
			if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {
				if (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) === diffs[pointer - 1][1]) {
					diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length);
					diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];
					diffs.splice(pointer - 1, 1);
					changes = true;
				} else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) == diffs[pointer + 1][1]) {
					diffs[pointer - 1][1] += diffs[pointer + 1][1];
					diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1];
					diffs.splice(pointer + 1, 1);
					changes = true;
				}
			}
			pointer++;
		}
		if (changes) diff_cleanupMerge(diffs, fix_unicode);
	}
	function is_surrogate_pair_start(charCode) {
		return charCode >= 55296 && charCode <= 56319;
	}
	function is_surrogate_pair_end(charCode) {
		return charCode >= 56320 && charCode <= 57343;
	}
	function starts_with_pair_end(str) {
		return is_surrogate_pair_end(str.charCodeAt(0));
	}
	function ends_with_pair_start(str) {
		return is_surrogate_pair_start(str.charCodeAt(str.length - 1));
	}
	function remove_empty_tuples(tuples) {
		var ret = [];
		for (var i = 0; i < tuples.length; i++) if (tuples[i][1].length > 0) ret.push(tuples[i]);
		return ret;
	}
	function make_edit_splice(before, oldMiddle, newMiddle, after) {
		if (ends_with_pair_start(before) || starts_with_pair_end(after)) return null;
		return remove_empty_tuples([
			[DIFF_EQUAL, before],
			[DIFF_DELETE, oldMiddle],
			[DIFF_INSERT, newMiddle],
			[DIFF_EQUAL, after]
		]);
	}
	function find_cursor_edit_diff(oldText, newText, cursor_pos) {
		var oldRange = typeof cursor_pos === "number" ? {
			index: cursor_pos,
			length: 0
		} : cursor_pos.oldRange;
		var newRange = typeof cursor_pos === "number" ? null : cursor_pos.newRange;
		var oldLength = oldText.length;
		var newLength = newText.length;
		if (oldRange.length === 0 && (newRange === null || newRange.length === 0)) {
			var oldCursor = oldRange.index;
			var oldBefore = oldText.slice(0, oldCursor);
			var oldAfter = oldText.slice(oldCursor);
			var maybeNewCursor = newRange ? newRange.index : null;
			editBefore: {
				var newCursor = oldCursor + newLength - oldLength;
				if (maybeNewCursor !== null && maybeNewCursor !== newCursor) break editBefore;
				if (newCursor < 0 || newCursor > newLength) break editBefore;
				var newBefore = newText.slice(0, newCursor);
				var newAfter = newText.slice(newCursor);
				if (newAfter !== oldAfter) break editBefore;
				var prefixLength = Math.min(oldCursor, newCursor);
				var oldPrefix = oldBefore.slice(0, prefixLength);
				var newPrefix = newBefore.slice(0, prefixLength);
				if (oldPrefix !== newPrefix) break editBefore;
				var oldMiddle = oldBefore.slice(prefixLength);
				var newMiddle = newBefore.slice(prefixLength);
				return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldAfter);
			}
			editAfter: {
				if (maybeNewCursor !== null && maybeNewCursor !== oldCursor) break editAfter;
				var cursor = oldCursor;
				var newBefore = newText.slice(0, cursor);
				var newAfter = newText.slice(cursor);
				if (newBefore !== oldBefore) break editAfter;
				var suffixLength = Math.min(oldLength - cursor, newLength - cursor);
				var oldSuffix = oldAfter.slice(oldAfter.length - suffixLength);
				var newSuffix = newAfter.slice(newAfter.length - suffixLength);
				if (oldSuffix !== newSuffix) break editAfter;
				var oldMiddle = oldAfter.slice(0, oldAfter.length - suffixLength);
				var newMiddle = newAfter.slice(0, newAfter.length - suffixLength);
				return make_edit_splice(oldBefore, oldMiddle, newMiddle, oldSuffix);
			}
		}
		if (oldRange.length > 0 && newRange && newRange.length === 0) replaceRange: {
			var oldPrefix = oldText.slice(0, oldRange.index);
			var oldSuffix = oldText.slice(oldRange.index + oldRange.length);
			var prefixLength = oldPrefix.length;
			var suffixLength = oldSuffix.length;
			if (newLength < prefixLength + suffixLength) break replaceRange;
			var newPrefix = newText.slice(0, prefixLength);
			var newSuffix = newText.slice(newLength - suffixLength);
			if (oldPrefix !== newPrefix || oldSuffix !== newSuffix) break replaceRange;
			var oldMiddle = oldText.slice(prefixLength, oldLength - suffixLength);
			var newMiddle = newText.slice(prefixLength, newLength - suffixLength);
			return make_edit_splice(oldPrefix, oldMiddle, newMiddle, oldSuffix);
		}
		return null;
	}
	function diff(text1, text2, cursor_pos, cleanup) {
		return diff_main(text1, text2, cursor_pos, cleanup, true);
	}
	diff.INSERT = DIFF_INSERT;
	diff.DELETE = DIFF_DELETE;
	diff.EQUAL = DIFF_EQUAL;
	module.exports = diff;
}));
//#endregion
//#region node_modules/unidecode/data/x00.js
var require_x00 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"\\x00",
		"\\x01",
		"\\x02",
		"\\x03",
		"\\x04",
		"\\x05",
		"\\x06",
		"\\x07",
		"\\x08",
		"\\x09",
		"\\x0a",
		"\\x0b",
		"\\x0c",
		"\\x0d",
		"\\x0e",
		"\\x0f",
		"\\x10",
		"\\x11",
		"\\x12",
		"\\x13",
		"\\x14",
		"\\x15",
		"\\x16",
		"\\x17",
		"\\x18",
		"\\x19",
		"\\x1a",
		"\\x1b",
		"\\x1c",
		"\\x1d",
		"\\x1e",
		"\\x1f",
		" ",
		"!",
		"\"",
		"#",
		"\\$",
		"%",
		"&",
		"'",
		"(",
		")",
		"*",
		"+",
		",",
		"-",
		".",
		"/",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		":",
		";",
		"<",
		"=",
		">",
		"?",
		"\\@",
		"A",
		"B",
		"C",
		"D",
		"E",
		"F",
		"G",
		"H",
		"I",
		"J",
		"K",
		"L",
		"M",
		"N",
		"O",
		"P",
		"Q",
		"R",
		"S",
		"T",
		"U",
		"V",
		"W",
		"X",
		"Y",
		"Z",
		"[",
		"\\\\",
		"]",
		"^",
		"_",
		"`",
		"a",
		"b",
		"c",
		"d",
		"e",
		"f",
		"g",
		"h",
		"i",
		"j",
		"k",
		"l",
		"m",
		"n",
		"o",
		"p",
		"q",
		"r",
		"s",
		"t",
		"u",
		"v",
		"w",
		"x",
		"y",
		"z",
		"\\{",
		"|",
		"\\}",
		"~",
		"\\x7f",
		"EUR",
		"",
		",",
		"f",
		",,",
		"...",
		"+",
		"++",
		"^",
		"%0",
		"S",
		"<",
		"OE",
		"",
		"Z",
		"",
		"",
		"'",
		"'",
		"\"",
		"\"",
		"*",
		"-",
		"--",
		"~",
		"tm",
		"s",
		">",
		"oe",
		"",
		"z",
		"Y",
		" ",
		"!",
		"C/",
		"PS",
		"\\$?",
		"Y=",
		"|",
		"SS",
		"\"",
		"(c)",
		"a",
		"<<",
		"!",
		"",
		"(r)",
		"-",
		"deg",
		"+-",
		"2",
		"3",
		"'",
		"u",
		"P",
		"*",
		",",
		"1",
		"o",
		">>",
		"1/4",
		"1/2",
		"3/4",
		"?",
		"A",
		"A",
		"A",
		"A",
		"A",
		"A",
		"AE",
		"C",
		"E",
		"E",
		"E",
		"E",
		"I",
		"I",
		"I",
		"I",
		"D",
		"N",
		"O",
		"O",
		"O",
		"O",
		"O",
		"x",
		"O",
		"U",
		"U",
		"U",
		"U",
		"Y",
		"Th",
		"ss",
		"a",
		"a",
		"a",
		"a",
		"a",
		"a",
		"ae",
		"c",
		"e",
		"e",
		"e",
		"e",
		"i",
		"i",
		"i",
		"i",
		"d",
		"n",
		"o",
		"o",
		"o",
		"o",
		"o",
		"/",
		"o",
		"u",
		"u",
		"u",
		"u",
		"y",
		"th",
		"y"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x01.js
var require_x01 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"C",
		"c",
		"C",
		"c",
		"C",
		"c",
		"C",
		"c",
		"D",
		"d",
		"D",
		"d",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"G",
		"g",
		"G",
		"g",
		"G",
		"g",
		"G",
		"g",
		"H",
		"h",
		"H",
		"h",
		"I",
		"i",
		"I",
		"i",
		"I",
		"i",
		"I",
		"i",
		"I",
		"i",
		"IJ",
		"ij",
		"J",
		"j",
		"K",
		"k",
		"k",
		"L",
		"l",
		"L",
		"l",
		"L",
		"l",
		"L",
		"l",
		"L",
		"l",
		"N",
		"n",
		"N",
		"n",
		"N",
		"n",
		"'n",
		"ng",
		"NG",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"OE",
		"oe",
		"R",
		"r",
		"R",
		"r",
		"R",
		"r",
		"S",
		"s",
		"S",
		"s",
		"S",
		"s",
		"S",
		"s",
		"T",
		"t",
		"T",
		"t",
		"T",
		"t",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"W",
		"w",
		"Y",
		"y",
		"Y",
		"Z",
		"z",
		"Z",
		"z",
		"Z",
		"z",
		"s",
		"b",
		"B",
		"B",
		"b",
		"6",
		"6",
		"O",
		"C",
		"c",
		"D",
		"D",
		"D",
		"d",
		"d",
		"3",
		"\\@",
		"E",
		"F",
		"f",
		"G",
		"G",
		"hv",
		"I",
		"I",
		"K",
		"k",
		"l",
		"l",
		"W",
		"N",
		"n",
		"O",
		"O",
		"o",
		"OI",
		"oi",
		"P",
		"p",
		"YR",
		"2",
		"2",
		"SH",
		"sh",
		"t",
		"T",
		"t",
		"T",
		"U",
		"u",
		"Y",
		"V",
		"Y",
		"y",
		"Z",
		"z",
		"ZH",
		"ZH",
		"zh",
		"zh",
		"2",
		"5",
		"5",
		"ts",
		"w",
		"|",
		"||",
		"|=",
		"!",
		"DZ",
		"Dz",
		"dz",
		"LJ",
		"Lj",
		"lj",
		"NJ",
		"Nj",
		"nj",
		"A",
		"a",
		"I",
		"i",
		"O",
		"o",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"\\@",
		"A",
		"a",
		"A",
		"a",
		"AE",
		"ae",
		"G",
		"g",
		"G",
		"g",
		"K",
		"k",
		"O",
		"o",
		"O",
		"o",
		"ZH",
		"zh",
		"j",
		"DZ",
		"Dz",
		"dz",
		"G",
		"g",
		"HV",
		"W",
		"N",
		"n",
		"A",
		"a",
		"AE",
		"ae",
		"O",
		"o"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x02.js
var require_x02 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"A",
		"a",
		"A",
		"a",
		"E",
		"e",
		"E",
		"e",
		"I",
		"i",
		"I",
		"i",
		"O",
		"o",
		"O",
		"o",
		"R",
		"r",
		"R",
		"r",
		"U",
		"u",
		"U",
		"u",
		"S",
		"s",
		"T",
		"t",
		"Y",
		"y",
		"H",
		"h",
		"N",
		"d",
		"OU",
		"ou",
		"Z",
		"z",
		"A",
		"a",
		"E",
		"e",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"Y",
		"y",
		"l",
		"n",
		"t",
		"j",
		"db",
		"qp",
		"A",
		"C",
		"c",
		"L",
		"T",
		"s",
		"z",
		"[?]",
		"[?]",
		"B",
		"U",
		"^",
		"E",
		"e",
		"J",
		"j",
		"q",
		"q",
		"R",
		"r",
		"Y",
		"y",
		"a",
		"a",
		"a",
		"b",
		"o",
		"c",
		"d",
		"d",
		"e",
		"\\@",
		"\\@",
		"e",
		"e",
		"e",
		"e",
		"j",
		"g",
		"g",
		"g",
		"g",
		"u",
		"Y",
		"h",
		"h",
		"i",
		"i",
		"I",
		"l",
		"l",
		"l",
		"lZ",
		"W",
		"W",
		"m",
		"n",
		"n",
		"n",
		"o",
		"OE",
		"O",
		"F",
		"r",
		"r",
		"r",
		"r",
		"r",
		"r",
		"r",
		"R",
		"R",
		"s",
		"S",
		"j",
		"S",
		"S",
		"t",
		"t",
		"u",
		"U",
		"v",
		"^",
		"w",
		"y",
		"Y",
		"z",
		"z",
		"Z",
		"Z",
		"?",
		"?",
		"?",
		"C",
		"\\@",
		"B",
		"E",
		"G",
		"H",
		"j",
		"k",
		"L",
		"q",
		"?",
		"?",
		"dz",
		"dZ",
		"dz",
		"ts",
		"tS",
		"tC",
		"fN",
		"ls",
		"lz",
		"WW",
		"]]",
		"h",
		"h",
		"h",
		"h",
		"j",
		"r",
		"r",
		"r",
		"r",
		"w",
		"y",
		"'",
		"\"",
		"`",
		"'",
		"`",
		"`",
		"'",
		"?",
		"?",
		"<",
		">",
		"^",
		"V",
		"^",
		"V",
		"'",
		"-",
		"/",
		"\\\\",
		",",
		"_",
		"\\\\",
		"/",
		":",
		".",
		"`",
		"'",
		"^",
		"V",
		"+",
		"-",
		"V",
		".",
		"\\@",
		",",
		"~",
		"\"",
		"R",
		"X",
		"G",
		"l",
		"s",
		"x",
		"?",
		"5",
		"4",
		"3",
		"2",
		"1",
		"/",
		"\\",
		"V",
		"=",
		"\"",
		"V",
		"^",
		"<",
		">",
		"o",
		"`",
		"``",
		"//",
		"~",
		":",
		"[-",
		"-]",
		"[_",
		"_]",
		"_",
		"_",
		"<"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x03.js
var require_x03 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"a",
		"e",
		"i",
		"o",
		"u",
		"c",
		"d",
		"h",
		"m",
		"r",
		"t",
		"v",
		"x",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"'",
		",",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"[?]",
		"[?]",
		"[?]",
		"?",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"A",
		";",
		"E",
		"E",
		"I",
		"[?]",
		"O",
		"[?]",
		"U",
		"O",
		"I",
		"A",
		"B",
		"G",
		"D",
		"E",
		"Z",
		"E",
		"Th",
		"I",
		"K",
		"L",
		"M",
		"N",
		"Ks",
		"O",
		"P",
		"R",
		"[?]",
		"S",
		"T",
		"U",
		"Ph",
		"Kh",
		"Ps",
		"O",
		"I",
		"U",
		"a",
		"e",
		"e",
		"i",
		"u",
		"a",
		"b",
		"g",
		"d",
		"e",
		"z",
		"e",
		"th",
		"i",
		"k",
		"l",
		"m",
		"n",
		"x",
		"o",
		"p",
		"r",
		"s",
		"s",
		"t",
		"u",
		"ph",
		"kh",
		"ps",
		"o",
		"i",
		"u",
		"o",
		"u",
		"o",
		"[?]",
		"b",
		"th",
		"U",
		"U",
		"U",
		"ph",
		"p",
		"&",
		"[?]",
		"[?]",
		"St",
		"st",
		"W",
		"w",
		"Q",
		"q",
		"Sp",
		"sp",
		"Sh",
		"sh",
		"F",
		"f",
		"Kh",
		"kh",
		"H",
		"h",
		"G",
		"g",
		"CH",
		"ch",
		"Ti",
		"ti",
		"k",
		"r",
		"c",
		"j",
		"TH",
		"e",
		"e",
		"Sh",
		"sh",
		"s",
		"[?]",
		"[?]",
		"r/",
		"S",
		"S.",
		"S."
	];
}));
//#endregion
//#region node_modules/unidecode/data/x04.js
var require_x04 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ie",
		"Io",
		"Dj",
		"Gj",
		"E",
		"Dz",
		"I",
		"Yi",
		"J",
		"Lj",
		"Nj",
		"Tsh",
		"Kj",
		"I",
		"U",
		"Dzh",
		"A",
		"B",
		"V",
		"G",
		"D",
		"E",
		"Zh",
		"Z",
		"I",
		"I",
		"K",
		"L",
		"M",
		"N",
		"O",
		"P",
		"R",
		"S",
		"T",
		"U",
		"F",
		"Kh",
		"Ts",
		"Ch",
		"Sh",
		"Shch",
		"",
		"Y",
		"'",
		"E",
		"Iu",
		"Ia",
		"a",
		"b",
		"v",
		"g",
		"d",
		"e",
		"zh",
		"z",
		"i",
		"i",
		"k",
		"l",
		"m",
		"n",
		"o",
		"p",
		"r",
		"s",
		"t",
		"u",
		"f",
		"kh",
		"ts",
		"ch",
		"sh",
		"shch",
		"",
		"y",
		"'",
		"e",
		"iu",
		"ia",
		"ie",
		"io",
		"dj",
		"gj",
		"ie",
		"dz",
		"i",
		"yi",
		"j",
		"lj",
		"nj",
		"tsh",
		"kj",
		"i",
		"u",
		"dzh",
		"O",
		"o",
		"E",
		"e",
		"Ie",
		"ie",
		"E",
		"e",
		"Ie",
		"ie",
		"O",
		"o",
		"Io",
		"io",
		"Ks",
		"ks",
		"Ps",
		"ps",
		"F",
		"f",
		"Y",
		"y",
		"Y",
		"y",
		"u",
		"u",
		"O",
		"o",
		"O",
		"o",
		"Ot",
		"ot",
		"Q",
		"q",
		"*1000*",
		"",
		"",
		"",
		"",
		"[?]",
		"*100.000*",
		"*1.000.000*",
		"[?]",
		"[?]",
		"\"",
		"\"",
		"R'",
		"r'",
		"G'",
		"g'",
		"G'",
		"g'",
		"G'",
		"g'",
		"Zh'",
		"zh'",
		"Z'",
		"z'",
		"K'",
		"k'",
		"K'",
		"k'",
		"K'",
		"k'",
		"K'",
		"k'",
		"N'",
		"n'",
		"Ng",
		"ng",
		"P'",
		"p'",
		"Kh",
		"kh",
		"S'",
		"s'",
		"T'",
		"t'",
		"U",
		"u",
		"U'",
		"u'",
		"Kh'",
		"kh'",
		"Tts",
		"tts",
		"Ch'",
		"ch'",
		"Ch'",
		"ch'",
		"H",
		"h",
		"Ch",
		"ch",
		"Ch'",
		"ch'",
		"`",
		"Zh",
		"zh",
		"K'",
		"k'",
		"[?]",
		"[?]",
		"N'",
		"n'",
		"[?]",
		"[?]",
		"Ch",
		"ch",
		"[?]",
		"[?]",
		"[?]",
		"a",
		"a",
		"A",
		"a",
		"Ae",
		"ae",
		"Ie",
		"ie",
		"\\@",
		"\\@",
		"\\@",
		"\\@",
		"Zh",
		"zh",
		"Z",
		"z",
		"Dz",
		"dz",
		"I",
		"i",
		"I",
		"i",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"E",
		"e",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"Ch",
		"ch",
		"[?]",
		"[?]",
		"Y",
		"y",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x05.js
var require_x05 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"A",
		"B",
		"G",
		"D",
		"E",
		"Z",
		"E",
		"E",
		"T`",
		"Zh",
		"I",
		"L",
		"Kh",
		"Ts",
		"K",
		"H",
		"Dz",
		"Gh",
		"Ch",
		"M",
		"Y",
		"N",
		"Sh",
		"O",
		"Ch`",
		"P",
		"J",
		"Rh",
		"S",
		"V",
		"T",
		"R",
		"Ts`",
		"W",
		"P`",
		"K`",
		"O",
		"F",
		"[?]",
		"[?]",
		"<",
		"'",
		"/",
		"!",
		",",
		"?",
		".",
		"[?]",
		"a",
		"b",
		"g",
		"d",
		"e",
		"z",
		"e",
		"e",
		"t`",
		"zh",
		"i",
		"l",
		"kh",
		"ts",
		"k",
		"h",
		"dz",
		"gh",
		"ch",
		"m",
		"y",
		"n",
		"sh",
		"o",
		"ch`",
		"p",
		"j",
		"rh",
		"s",
		"v",
		"t",
		"r",
		"ts`",
		"w",
		"p`",
		"k`",
		"o",
		"f",
		"ew",
		"[?]",
		".",
		"-",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"\\@",
		"e",
		"a",
		"o",
		"i",
		"e",
		"e",
		"a",
		"a",
		"o",
		"[?]",
		"u",
		"'",
		"",
		"",
		"",
		"|",
		"",
		"",
		":",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"b",
		"g",
		"d",
		"h",
		"v",
		"z",
		"kh",
		"t",
		"y",
		"k",
		"k",
		"l",
		"m",
		"m",
		"n",
		"n",
		"s",
		"`",
		"p",
		"p",
		"ts",
		"ts",
		"q",
		"r",
		"sh",
		"t",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"V",
		"oy",
		"i",
		"'",
		"\"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x06.js
var require_x06 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		",",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		";",
		"[?]",
		"[?]",
		"[?]",
		"?",
		"[?]",
		"",
		"a",
		"'",
		"w'",
		"",
		"y'",
		"",
		"b",
		"\\@",
		"t",
		"th",
		"j",
		"H",
		"kh",
		"d",
		"dh",
		"r",
		"z",
		"s",
		"sh",
		"S",
		"D",
		"T",
		"Z",
		"`",
		"G",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"f",
		"q",
		"k",
		"l",
		"m",
		"n",
		"h",
		"w",
		"~",
		"y",
		"an",
		"un",
		"in",
		"a",
		"u",
		"i",
		"W",
		"",
		"",
		"'",
		"'",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"%",
		".",
		",",
		"*",
		"[?]",
		"[?]",
		"",
		"'",
		"'",
		"'",
		"",
		"'",
		"'w",
		"'u",
		"'y",
		"tt",
		"tth",
		"b",
		"t",
		"T",
		"p",
		"th",
		"bh",
		"'h",
		"H",
		"ny",
		"dy",
		"H",
		"ch",
		"cch",
		"dd",
		"D",
		"D",
		"Dt",
		"dh",
		"ddh",
		"d",
		"D",
		"D",
		"rr",
		"R",
		"R",
		"R",
		"R",
		"R",
		"R",
		"j",
		"R",
		"S",
		"S",
		"S",
		"S",
		"S",
		"T",
		"GH",
		"F",
		"F",
		"F",
		"v",
		"f",
		"ph",
		"Q",
		"Q",
		"kh",
		"k",
		"K",
		"K",
		"ng",
		"K",
		"g",
		"G",
		"N",
		"G",
		"G",
		"G",
		"L",
		"L",
		"L",
		"L",
		"N",
		"N",
		"N",
		"N",
		"N",
		"h",
		"Ch",
		"hy",
		"h",
		"H",
		"\\@",
		"W",
		"oe",
		"oe",
		"u",
		"yu",
		"yu",
		"W",
		"v",
		"y",
		"Y",
		"Y",
		"W",
		"",
		"",
		"y",
		"y'",
		".",
		"ae",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"\\@",
		"#",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"^",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"Sh",
		"D",
		"Gh",
		"&",
		"+m",
		"h"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x07.js
var require_x07 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"//",
		"/",
		",",
		"!",
		"!",
		"-",
		",",
		",",
		";",
		"?",
		"~",
		"\\{",
		"\\}",
		"*",
		"[?]",
		"",
		"'",
		"",
		"b",
		"g",
		"g",
		"d",
		"d",
		"h",
		"w",
		"z",
		"H",
		"t",
		"t",
		"y",
		"yh",
		"k",
		"l",
		"m",
		"n",
		"s",
		"s",
		"`",
		"p",
		"p",
		"S",
		"q",
		"r",
		"sh",
		"t",
		"[?]",
		"[?]",
		"[?]",
		"a",
		"a",
		"a",
		"A",
		"A",
		"A",
		"e",
		"e",
		"e",
		"E",
		"i",
		"i",
		"u",
		"u",
		"u",
		"o",
		"",
		"`",
		"'",
		"",
		"",
		"X",
		"Q",
		"\\@",
		"\\@",
		"|",
		"+",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"h",
		"sh",
		"n",
		"r",
		"b",
		"L",
		"k",
		"'",
		"v",
		"m",
		"f",
		"dh",
		"th",
		"l",
		"g",
		"ny",
		"s",
		"d",
		"z",
		"t",
		"y",
		"p",
		"j",
		"ch",
		"tt",
		"hh",
		"kh",
		"th",
		"z",
		"sh",
		"s",
		"d",
		"t",
		"z",
		"`",
		"gh",
		"q",
		"w",
		"a",
		"aa",
		"i",
		"ee",
		"u",
		"oo",
		"e",
		"ey",
		"o",
		"oa",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x09.js
var require_x09 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"N",
		"N",
		"H",
		"[?]",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"L",
		"eN",
		"e",
		"e",
		"ai",
		"oN",
		"o",
		"o",
		"au",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"nnn",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"y",
		"r",
		"rr",
		"l",
		"l",
		"lll",
		"v",
		"sh",
		"ss",
		"s",
		"h",
		"[?]",
		"[?]",
		"'",
		"'",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"RR",
		"eN",
		"e",
		"e",
		"ai",
		"oN",
		"o",
		"o",
		"au",
		"",
		"[?]",
		"[?]",
		"AUM",
		"'",
		"'",
		"`",
		"'",
		"[?]",
		"[?]",
		"[?]",
		"q",
		"khh",
		"ghh",
		"z",
		"dddh",
		"rh",
		"f",
		"yy",
		"RR",
		"LL",
		"L",
		"LL",
		" / ",
		" // ",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		".",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"N",
		"N",
		"H",
		"[?]",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"RR",
		"[?]",
		"[?]",
		"e",
		"ai",
		"[?]",
		"[?]",
		"o",
		"au",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"[?]",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"y",
		"r",
		"[?]",
		"l",
		"[?]",
		"[?]",
		"[?]",
		"sh",
		"ss",
		"s",
		"h",
		"[?]",
		"[?]",
		"'",
		"[?]",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"RR",
		"[?]",
		"[?]",
		"e",
		"ai",
		"[?]",
		"[?]",
		"o",
		"au",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"+",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"rr",
		"rh",
		"[?]",
		"yy",
		"RR",
		"LL",
		"L",
		"LL",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"r'",
		"r`",
		"Rs",
		"Rs",
		"1/",
		"2/",
		"3/",
		"4/",
		" 1 - 1/",
		"/16",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x0a.js
var require_x0a = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"N",
		"[?]",
		"[?]",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"ee",
		"ai",
		"[?]",
		"[?]",
		"oo",
		"au",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"[?]",
		"p",
		"ph",
		"b",
		"bb",
		"m",
		"y",
		"r",
		"[?]",
		"l",
		"ll",
		"[?]",
		"v",
		"sh",
		"[?]",
		"s",
		"h",
		"[?]",
		"[?]",
		"'",
		"[?]",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"ee",
		"ai",
		"[?]",
		"[?]",
		"oo",
		"au",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"khh",
		"ghh",
		"z",
		"rr",
		"[?]",
		"f",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"N",
		"H",
		"",
		"",
		"G.E.O.",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"N",
		"N",
		"H",
		"[?]",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"[?]",
		"eN",
		"[?]",
		"e",
		"ai",
		"oN",
		"[?]",
		"o",
		"au",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"[?]",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"ya",
		"r",
		"[?]",
		"l",
		"ll",
		"[?]",
		"v",
		"sh",
		"ss",
		"s",
		"h",
		"[?]",
		"[?]",
		"'",
		"'",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"RR",
		"eN",
		"[?]",
		"e",
		"ai",
		"oN",
		"[?]",
		"o",
		"au",
		"",
		"[?]",
		"[?]",
		"AUM",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"RR",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		".",
		"R",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"zh",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x0b.js
var require_x0b = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"N",
		"N",
		"H",
		"[?]",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"L",
		"[?]",
		"[?]",
		"e",
		"ai",
		"[?]",
		"[?]",
		"o",
		"au",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"[?]",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"y",
		"r",
		"[?]",
		"l",
		"ll",
		"[?]",
		"",
		"sh",
		"ss",
		"s",
		"h",
		"[?]",
		"[?]",
		"'",
		"'",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"[?]",
		"[?]",
		"[?]",
		"e",
		"ai",
		"[?]",
		"[?]",
		"o",
		"au",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"+",
		"+",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"rr",
		"rh",
		"[?]",
		"yy",
		"RR",
		"LL",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"N",
		"H",
		"[?]",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"[?]",
		"[?]",
		"[?]",
		"e",
		"ee",
		"ai",
		"[?]",
		"o",
		"oo",
		"au",
		"k",
		"[?]",
		"[?]",
		"[?]",
		"ng",
		"c",
		"[?]",
		"j",
		"[?]",
		"ny",
		"tt",
		"[?]",
		"[?]",
		"[?]",
		"nn",
		"t",
		"[?]",
		"[?]",
		"[?]",
		"n",
		"nnn",
		"p",
		"[?]",
		"[?]",
		"[?]",
		"m",
		"y",
		"r",
		"rr",
		"l",
		"ll",
		"lll",
		"v",
		"[?]",
		"ss",
		"s",
		"h",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"[?]",
		"[?]",
		"[?]",
		"e",
		"ee",
		"ai",
		"[?]",
		"o",
		"oo",
		"au",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"+",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"+10+",
		"+100+",
		"+1000+",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x0c.js
var require_x0c = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"N",
		"N",
		"H",
		"[?]",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"L",
		"[?]",
		"e",
		"ee",
		"ai",
		"[?]",
		"o",
		"oo",
		"au",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"[?]",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"y",
		"r",
		"rr",
		"l",
		"ll",
		"[?]",
		"v",
		"sh",
		"ss",
		"s",
		"h",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"RR",
		"[?]",
		"e",
		"ee",
		"ai",
		"[?]",
		"o",
		"oo",
		"au",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"+",
		"+",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"RR",
		"LL",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"N",
		"H",
		"[?]",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"L",
		"[?]",
		"e",
		"ee",
		"ai",
		"[?]",
		"o",
		"oo",
		"au",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"[?]",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"y",
		"r",
		"rr",
		"l",
		"ll",
		"[?]",
		"v",
		"sh",
		"ss",
		"s",
		"h",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"RR",
		"[?]",
		"e",
		"ee",
		"ai",
		"[?]",
		"o",
		"oo",
		"au",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"+",
		"+",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"lll",
		"[?]",
		"RR",
		"LL",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x0d.js
var require_x0d = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"N",
		"H",
		"[?]",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"L",
		"[?]",
		"e",
		"ee",
		"ai",
		"[?]",
		"o",
		"oo",
		"au",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"[?]",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"y",
		"r",
		"rr",
		"l",
		"ll",
		"lll",
		"v",
		"sh",
		"ss",
		"s",
		"h",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"[?]",
		"[?]",
		"e",
		"ee",
		"ai",
		"",
		"o",
		"oo",
		"au",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"+",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"RR",
		"LL",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"N",
		"H",
		"[?]",
		"a",
		"aa",
		"ae",
		"aae",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"RR",
		"L",
		"LL",
		"e",
		"ee",
		"ai",
		"o",
		"oo",
		"au",
		"[?]",
		"[?]",
		"[?]",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"nng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"jny",
		"nyj",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"nndd",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"[?]",
		"nd",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"mb",
		"y",
		"r",
		"[?]",
		"l",
		"[?]",
		"[?]",
		"v",
		"sh",
		"ss",
		"s",
		"h",
		"ll",
		"f",
		"[?]",
		"[?]",
		"[?]",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"aa",
		"ae",
		"aae",
		"i",
		"ii",
		"u",
		"[?]",
		"uu",
		"[?]",
		"R",
		"e",
		"ee",
		"ai",
		"o",
		"oo",
		"au",
		"L",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"RR",
		"LL",
		" . ",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x0e.js
var require_x0e = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"k",
		"kh",
		"kh",
		"kh",
		"kh",
		"kh",
		"ng",
		"cch",
		"ch",
		"ch",
		"ch",
		"ch",
		"y",
		"d",
		"t",
		"th",
		"th",
		"th",
		"n",
		"d",
		"t",
		"th",
		"th",
		"th",
		"n",
		"b",
		"p",
		"ph",
		"f",
		"ph",
		"f",
		"ph",
		"m",
		"y",
		"r",
		"R",
		"l",
		"L",
		"w",
		"s",
		"s",
		"s",
		"h",
		"l",
		"`",
		"h",
		"~",
		"a",
		"a",
		"aa",
		"am",
		"i",
		"ii",
		"ue",
		"uue",
		"u",
		"uu",
		"'",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"Bh.",
		"e",
		"ae",
		"o",
		"ai",
		"ai",
		"ao",
		"+",
		"",
		"",
		"",
		"",
		"",
		"",
		"M",
		"",
		" * ",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		" // ",
		" /// ",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"k",
		"kh",
		"[?]",
		"kh",
		"[?]",
		"[?]",
		"ng",
		"ch",
		"[?]",
		"s",
		"[?]",
		"[?]",
		"ny",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"d",
		"h",
		"th",
		"th",
		"[?]",
		"n",
		"b",
		"p",
		"ph",
		"f",
		"ph",
		"f",
		"[?]",
		"m",
		"y",
		"r",
		"[?]",
		"l",
		"[?]",
		"w",
		"[?]",
		"[?]",
		"s",
		"h",
		"[?]",
		"`",
		"",
		"~",
		"a",
		"",
		"aa",
		"am",
		"i",
		"ii",
		"y",
		"yy",
		"u",
		"uu",
		"[?]",
		"o",
		"l",
		"ny",
		"[?]",
		"[?]",
		"e",
		"ei",
		"o",
		"ay",
		"ai",
		"[?]",
		"+",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"M",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"[?]",
		"[?]",
		"hn",
		"hm",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x0f.js
var require_x0f = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"AUM",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		" // ",
		" * ",
		"",
		"-",
		" / ",
		" / ",
		" // ",
		" -/ ",
		" +/ ",
		" X/ ",
		" /XX/ ",
		" /X/ ",
		", ",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		".5",
		"1.5",
		"2.5",
		"3.5",
		"4.5",
		"5.5",
		"6.5",
		"7.5",
		"8.5",
		"-.5",
		"+",
		"*",
		"^",
		"_",
		"",
		"~",
		"[?]",
		"]",
		"[[",
		"]]",
		"",
		"",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"[?]",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"ts",
		"tsh",
		"dz",
		"dzh",
		"w",
		"zh",
		"z",
		"'",
		"y",
		"r",
		"l",
		"sh",
		"ssh",
		"s",
		"h",
		"a",
		"kss",
		"r",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"R",
		"RR",
		"L",
		"LL",
		"e",
		"ee",
		"o",
		"oo",
		"M",
		"H",
		"i",
		"ii",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"[?]",
		"ny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"ts",
		"tsh",
		"dz",
		"dzh",
		"w",
		"zh",
		"z",
		"'",
		"y",
		"r",
		"l",
		"sh",
		"ss",
		"s",
		"h",
		"a",
		"kss",
		"w",
		"y",
		"r",
		"[?]",
		"X",
		" :X: ",
		" /O/ ",
		" /o/ ",
		" \\\\o\\\\ ",
		" (O) ",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x10.js
var require_x10 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"nny",
		"tt",
		"tth",
		"dd",
		"ddh",
		"nn",
		"tt",
		"th",
		"d",
		"dh",
		"n",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"y",
		"r",
		"l",
		"w",
		"s",
		"h",
		"ll",
		"a",
		"[?]",
		"i",
		"ii",
		"u",
		"uu",
		"e",
		"[?]",
		"o",
		"au",
		"[?]",
		"aa",
		"i",
		"ii",
		"u",
		"uu",
		"e",
		"ai",
		"[?]",
		"[?]",
		"[?]",
		"N",
		"'",
		":",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		" / ",
		" // ",
		"n*",
		"r*",
		"l*",
		"e*",
		"sh",
		"ss",
		"R",
		"RR",
		"L",
		"LL",
		"R",
		"RR",
		"L",
		"LL",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"A",
		"B",
		"G",
		"D",
		"E",
		"V",
		"Z",
		"T`",
		"I",
		"K",
		"L",
		"M",
		"N",
		"O",
		"P",
		"Zh",
		"R",
		"S",
		"T",
		"U",
		"P`",
		"K`",
		"G'",
		"Q",
		"Sh",
		"Ch`",
		"C`",
		"Z'",
		"C",
		"Ch",
		"X",
		"J",
		"H",
		"E",
		"Y",
		"W",
		"Xh",
		"OE",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"a",
		"b",
		"g",
		"d",
		"e",
		"v",
		"z",
		"t`",
		"i",
		"k",
		"l",
		"m",
		"n",
		"o",
		"p",
		"zh",
		"r",
		"s",
		"t",
		"u",
		"p`",
		"k`",
		"g'",
		"q",
		"sh",
		"ch`",
		"c`",
		"z'",
		"c",
		"ch",
		"x",
		"j",
		"h",
		"e",
		"y",
		"w",
		"xh",
		"oe",
		"f",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		" // ",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x11.js
var require_x11 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"g",
		"gg",
		"n",
		"d",
		"dd",
		"r",
		"m",
		"b",
		"bb",
		"s",
		"ss",
		"",
		"j",
		"jj",
		"c",
		"k",
		"t",
		"p",
		"h",
		"ng",
		"nn",
		"nd",
		"nb",
		"dg",
		"rn",
		"rr",
		"rh",
		"rN",
		"mb",
		"mN",
		"bg",
		"bn",
		"",
		"bs",
		"bsg",
		"bst",
		"bsb",
		"bss",
		"bsj",
		"bj",
		"bc",
		"bt",
		"bp",
		"bN",
		"bbN",
		"sg",
		"sn",
		"sd",
		"sr",
		"sm",
		"sb",
		"sbg",
		"sss",
		"s",
		"sj",
		"sc",
		"sk",
		"st",
		"sp",
		"sh",
		"",
		"",
		"",
		"",
		"Z",
		"g",
		"d",
		"m",
		"b",
		"s",
		"Z",
		"",
		"j",
		"c",
		"t",
		"p",
		"N",
		"j",
		"",
		"",
		"",
		"",
		"ck",
		"ch",
		"",
		"",
		"pb",
		"pN",
		"hh",
		"Q",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"a",
		"ae",
		"ya",
		"yae",
		"eo",
		"e",
		"yeo",
		"ye",
		"o",
		"wa",
		"wae",
		"oe",
		"yo",
		"u",
		"weo",
		"we",
		"wi",
		"yu",
		"eu",
		"yi",
		"i",
		"a-o",
		"a-u",
		"ya-o",
		"ya-yo",
		"eo-o",
		"eo-u",
		"eo-eu",
		"yeo-o",
		"yeo-u",
		"o-eo",
		"o-e",
		"o-ye",
		"o-o",
		"o-u",
		"yo-ya",
		"yo-yae",
		"yo-yeo",
		"yo-o",
		"yo-i",
		"u-a",
		"u-ae",
		"u-eo-eu",
		"u-ye",
		"u-u",
		"yu-a",
		"yu-eo",
		"yu-e",
		"yu-yeo",
		"yu-ye",
		"yu-u",
		"yu-i",
		"eu-u",
		"eu-eu",
		"yi-u",
		"i-a",
		"i-ya",
		"i-o",
		"i-u",
		"i-eu",
		"i-U",
		"U",
		"U-eo",
		"U-u",
		"U-i",
		"UU",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"g",
		"gg",
		"gs",
		"n",
		"nj",
		"nh",
		"d",
		"l",
		"lg",
		"lm",
		"lb",
		"ls",
		"lt",
		"lp",
		"lh",
		"m",
		"b",
		"bs",
		"s",
		"ss",
		"ng",
		"j",
		"c",
		"k",
		"t",
		"p",
		"h",
		"gl",
		"gsg",
		"ng",
		"nd",
		"ns",
		"nZ",
		"nt",
		"dg",
		"tl",
		"lgs",
		"ln",
		"ld",
		"lth",
		"ll",
		"lmg",
		"lms",
		"lbs",
		"lbh",
		"rNp",
		"lss",
		"lZ",
		"lk",
		"lQ",
		"mg",
		"ml",
		"mb",
		"ms",
		"mss",
		"mZ",
		"mc",
		"mh",
		"mN",
		"bl",
		"bp",
		"ph",
		"pN",
		"sg",
		"sd",
		"sl",
		"sb",
		"Z",
		"g",
		"ss",
		"",
		"kh",
		"N",
		"Ns",
		"NZ",
		"pb",
		"pN",
		"hn",
		"hl",
		"hm",
		"hb",
		"Q",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x12.js
var require_x12 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ha",
		"hu",
		"hi",
		"haa",
		"hee",
		"he",
		"ho",
		"[?]",
		"la",
		"lu",
		"li",
		"laa",
		"lee",
		"le",
		"lo",
		"lwa",
		"hha",
		"hhu",
		"hhi",
		"hhaa",
		"hhee",
		"hhe",
		"hho",
		"hhwa",
		"ma",
		"mu",
		"mi",
		"maa",
		"mee",
		"me",
		"mo",
		"mwa",
		"sza",
		"szu",
		"szi",
		"szaa",
		"szee",
		"sze",
		"szo",
		"szwa",
		"ra",
		"ru",
		"ri",
		"raa",
		"ree",
		"re",
		"ro",
		"rwa",
		"sa",
		"su",
		"si",
		"saa",
		"see",
		"se",
		"so",
		"swa",
		"sha",
		"shu",
		"shi",
		"shaa",
		"shee",
		"she",
		"sho",
		"shwa",
		"qa",
		"qu",
		"qi",
		"qaa",
		"qee",
		"qe",
		"qo",
		"[?]",
		"qwa",
		"[?]",
		"qwi",
		"qwaa",
		"qwee",
		"qwe",
		"[?]",
		"[?]",
		"qha",
		"qhu",
		"qhi",
		"qhaa",
		"qhee",
		"qhe",
		"qho",
		"[?]",
		"qhwa",
		"[?]",
		"qhwi",
		"qhwaa",
		"qhwee",
		"qhwe",
		"[?]",
		"[?]",
		"ba",
		"bu",
		"bi",
		"baa",
		"bee",
		"be",
		"bo",
		"bwa",
		"va",
		"vu",
		"vi",
		"vaa",
		"vee",
		"ve",
		"vo",
		"vwa",
		"ta",
		"tu",
		"ti",
		"taa",
		"tee",
		"te",
		"to",
		"twa",
		"ca",
		"cu",
		"ci",
		"caa",
		"cee",
		"ce",
		"co",
		"cwa",
		"xa",
		"xu",
		"xi",
		"xaa",
		"xee",
		"xe",
		"xo",
		"[?]",
		"xwa",
		"[?]",
		"xwi",
		"xwaa",
		"xwee",
		"xwe",
		"[?]",
		"[?]",
		"na",
		"nu",
		"ni",
		"naa",
		"nee",
		"ne",
		"no",
		"nwa",
		"nya",
		"nyu",
		"nyi",
		"nyaa",
		"nyee",
		"nye",
		"nyo",
		"nywa",
		"'a",
		"'u",
		"[?]",
		"'aa",
		"'ee",
		"'e",
		"'o",
		"'wa",
		"ka",
		"ku",
		"ki",
		"kaa",
		"kee",
		"ke",
		"ko",
		"[?]",
		"kwa",
		"[?]",
		"kwi",
		"kwaa",
		"kwee",
		"kwe",
		"[?]",
		"[?]",
		"kxa",
		"kxu",
		"kxi",
		"kxaa",
		"kxee",
		"kxe",
		"kxo",
		"[?]",
		"kxwa",
		"[?]",
		"kxwi",
		"kxwaa",
		"kxwee",
		"kxwe",
		"[?]",
		"[?]",
		"wa",
		"wu",
		"wi",
		"waa",
		"wee",
		"we",
		"wo",
		"[?]",
		"`a",
		"`u",
		"`i",
		"`aa",
		"`ee",
		"`e",
		"`o",
		"[?]",
		"za",
		"zu",
		"zi",
		"zaa",
		"zee",
		"ze",
		"zo",
		"zwa",
		"zha",
		"zhu",
		"zhi",
		"zhaa",
		"zhee",
		"zhe",
		"zho",
		"zhwa",
		"ya",
		"yu",
		"yi",
		"yaa",
		"yee",
		"ye",
		"yo",
		"[?]",
		"da",
		"du",
		"di",
		"daa",
		"dee",
		"de",
		"do",
		"dwa",
		"dda",
		"ddu",
		"ddi",
		"ddaa",
		"ddee",
		"dde",
		"ddo",
		"ddwa"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x13.js
var require_x13 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ja",
		"ju",
		"ji",
		"jaa",
		"jee",
		"je",
		"jo",
		"jwa",
		"ga",
		"gu",
		"gi",
		"gaa",
		"gee",
		"ge",
		"go",
		"[?]",
		"gwa",
		"[?]",
		"gwi",
		"gwaa",
		"gwee",
		"gwe",
		"[?]",
		"[?]",
		"gga",
		"ggu",
		"ggi",
		"ggaa",
		"ggee",
		"gge",
		"ggo",
		"[?]",
		"tha",
		"thu",
		"thi",
		"thaa",
		"thee",
		"the",
		"tho",
		"thwa",
		"cha",
		"chu",
		"chi",
		"chaa",
		"chee",
		"che",
		"cho",
		"chwa",
		"pha",
		"phu",
		"phi",
		"phaa",
		"phee",
		"phe",
		"pho",
		"phwa",
		"tsa",
		"tsu",
		"tsi",
		"tsaa",
		"tsee",
		"tse",
		"tso",
		"tswa",
		"tza",
		"tzu",
		"tzi",
		"tzaa",
		"tzee",
		"tze",
		"tzo",
		"[?]",
		"fa",
		"fu",
		"fi",
		"faa",
		"fee",
		"fe",
		"fo",
		"fwa",
		"pa",
		"pu",
		"pi",
		"paa",
		"pee",
		"pe",
		"po",
		"pwa",
		"rya",
		"mya",
		"fya",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		" ",
		".",
		",",
		";",
		":",
		":: ",
		"?",
		"//",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"10+",
		"20+",
		"30+",
		"40+",
		"50+",
		"60+",
		"70+",
		"80+",
		"90+",
		"100+",
		"10,000+",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"a",
		"e",
		"i",
		"o",
		"u",
		"v",
		"ga",
		"ka",
		"ge",
		"gi",
		"go",
		"gu",
		"gv",
		"ha",
		"he",
		"hi",
		"ho",
		"hu",
		"hv",
		"la",
		"le",
		"li",
		"lo",
		"lu",
		"lv",
		"ma",
		"me",
		"mi",
		"mo",
		"mu",
		"na",
		"hna",
		"nah",
		"ne",
		"ni",
		"no",
		"nu",
		"nv",
		"qua",
		"que",
		"qui",
		"quo",
		"quu",
		"quv",
		"sa",
		"s",
		"se",
		"si",
		"so",
		"su",
		"sv",
		"da",
		"ta",
		"de",
		"te",
		"di",
		"ti",
		"do",
		"du",
		"dv",
		"dla",
		"tla",
		"tle",
		"tli",
		"tlo",
		"tlu",
		"tlv",
		"tsa",
		"tse",
		"tsi",
		"tso",
		"tsu",
		"tsv",
		"wa",
		"we",
		"wi",
		"wo",
		"wu",
		"wv",
		"ya",
		"ye",
		"yi",
		"yo",
		"yu",
		"yv",
		"MV",
		"[?]",
		"[?]",
		"ye",
		"yi",
		"yo",
		"yu",
		"yv",
		"mv",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x14.js
var require_x14 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"e",
		"aai",
		"i",
		"ii",
		"o",
		"oo",
		"oo",
		"ee",
		"i",
		"a",
		"aa",
		"we",
		"we",
		"wi",
		"wi",
		"wii",
		"wii",
		"wo",
		"wo",
		"woo",
		"woo",
		"woo",
		"wa",
		"wa",
		"waa",
		"waa",
		"waa",
		"ai",
		"w",
		"'",
		"t",
		"k",
		"sh",
		"s",
		"n",
		"w",
		"n",
		"[?]",
		"w",
		"c",
		"?",
		"l",
		"en",
		"in",
		"on",
		"an",
		"pe",
		"paai",
		"pi",
		"pii",
		"po",
		"poo",
		"poo",
		"hee",
		"hi",
		"pa",
		"paa",
		"pwe",
		"pwe",
		"pwi",
		"pwi",
		"pwii",
		"pwii",
		"pwo",
		"pwo",
		"pwoo",
		"pwoo",
		"pwa",
		"pwa",
		"pwaa",
		"pwaa",
		"pwaa",
		"p",
		"p",
		"h",
		"te",
		"taai",
		"ti",
		"tii",
		"to",
		"too",
		"too",
		"dee",
		"di",
		"ta",
		"taa",
		"twe",
		"twe",
		"twi",
		"twi",
		"twii",
		"twii",
		"two",
		"two",
		"twoo",
		"twoo",
		"twa",
		"twa",
		"twaa",
		"twaa",
		"twaa",
		"t",
		"tte",
		"tti",
		"tto",
		"tta",
		"ke",
		"kaai",
		"ki",
		"kii",
		"ko",
		"koo",
		"koo",
		"ka",
		"kaa",
		"kwe",
		"kwe",
		"kwi",
		"kwi",
		"kwii",
		"kwii",
		"kwo",
		"kwo",
		"kwoo",
		"kwoo",
		"kwa",
		"kwa",
		"kwaa",
		"kwaa",
		"kwaa",
		"k",
		"kw",
		"keh",
		"kih",
		"koh",
		"kah",
		"ce",
		"caai",
		"ci",
		"cii",
		"co",
		"coo",
		"coo",
		"ca",
		"caa",
		"cwe",
		"cwe",
		"cwi",
		"cwi",
		"cwii",
		"cwii",
		"cwo",
		"cwo",
		"cwoo",
		"cwoo",
		"cwa",
		"cwa",
		"cwaa",
		"cwaa",
		"cwaa",
		"c",
		"th",
		"me",
		"maai",
		"mi",
		"mii",
		"mo",
		"moo",
		"moo",
		"ma",
		"maa",
		"mwe",
		"mwe",
		"mwi",
		"mwi",
		"mwii",
		"mwii",
		"mwo",
		"mwo",
		"mwoo",
		"mwoo",
		"mwa",
		"mwa",
		"mwaa",
		"mwaa",
		"mwaa",
		"m",
		"m",
		"mh",
		"m",
		"m",
		"ne",
		"naai",
		"ni",
		"nii",
		"no",
		"noo",
		"noo",
		"na",
		"naa",
		"nwe",
		"nwe",
		"nwa",
		"nwa",
		"nwaa",
		"nwaa",
		"nwaa",
		"n",
		"ng",
		"nh",
		"le",
		"laai",
		"li",
		"lii",
		"lo",
		"loo",
		"loo",
		"la",
		"laa",
		"lwe",
		"lwe",
		"lwi",
		"lwi",
		"lwii",
		"lwii",
		"lwo",
		"lwo",
		"lwoo",
		"lwoo",
		"lwa",
		"lwa",
		"lwaa",
		"lwaa",
		"l",
		"l",
		"l",
		"se",
		"saai",
		"si",
		"sii",
		"so",
		"soo",
		"soo",
		"sa",
		"saa",
		"swe",
		"swe",
		"swi",
		"swi",
		"swii",
		"swii",
		"swo",
		"swo",
		"swoo",
		"swoo"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x15.js
var require_x15 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"swa",
		"swa",
		"swaa",
		"swaa",
		"swaa",
		"s",
		"s",
		"sw",
		"s",
		"sk",
		"skw",
		"sW",
		"spwa",
		"stwa",
		"skwa",
		"scwa",
		"she",
		"shi",
		"shii",
		"sho",
		"shoo",
		"sha",
		"shaa",
		"shwe",
		"shwe",
		"shwi",
		"shwi",
		"shwii",
		"shwii",
		"shwo",
		"shwo",
		"shwoo",
		"shwoo",
		"shwa",
		"shwa",
		"shwaa",
		"shwaa",
		"sh",
		"ye",
		"yaai",
		"yi",
		"yii",
		"yo",
		"yoo",
		"yoo",
		"ya",
		"yaa",
		"ywe",
		"ywe",
		"ywi",
		"ywi",
		"ywii",
		"ywii",
		"ywo",
		"ywo",
		"ywoo",
		"ywoo",
		"ywa",
		"ywa",
		"ywaa",
		"ywaa",
		"ywaa",
		"y",
		"y",
		"y",
		"yi",
		"re",
		"re",
		"le",
		"raai",
		"ri",
		"rii",
		"ro",
		"roo",
		"lo",
		"ra",
		"raa",
		"la",
		"rwaa",
		"rwaa",
		"r",
		"r",
		"r",
		"fe",
		"faai",
		"fi",
		"fii",
		"fo",
		"foo",
		"fa",
		"faa",
		"fwaa",
		"fwaa",
		"f",
		"the",
		"the",
		"thi",
		"thi",
		"thii",
		"thii",
		"tho",
		"thoo",
		"tha",
		"thaa",
		"thwaa",
		"thwaa",
		"th",
		"tthe",
		"tthi",
		"ttho",
		"ttha",
		"tth",
		"tye",
		"tyi",
		"tyo",
		"tya",
		"he",
		"hi",
		"hii",
		"ho",
		"hoo",
		"ha",
		"haa",
		"h",
		"h",
		"hk",
		"qaai",
		"qi",
		"qii",
		"qo",
		"qoo",
		"qa",
		"qaa",
		"q",
		"tlhe",
		"tlhi",
		"tlho",
		"tlha",
		"re",
		"ri",
		"ro",
		"ra",
		"ngaai",
		"ngi",
		"ngii",
		"ngo",
		"ngoo",
		"nga",
		"ngaa",
		"ng",
		"nng",
		"she",
		"shi",
		"sho",
		"sha",
		"the",
		"thi",
		"tho",
		"tha",
		"th",
		"lhi",
		"lhii",
		"lho",
		"lhoo",
		"lha",
		"lhaa",
		"lh",
		"the",
		"thi",
		"thii",
		"tho",
		"thoo",
		"tha",
		"thaa",
		"th",
		"b",
		"e",
		"i",
		"o",
		"a",
		"we",
		"wi",
		"wo",
		"wa",
		"ne",
		"ni",
		"no",
		"na",
		"ke",
		"ki",
		"ko",
		"ka",
		"he",
		"hi",
		"ho",
		"ha",
		"ghu",
		"gho",
		"ghe",
		"ghee",
		"ghi",
		"gha",
		"ru",
		"ro",
		"re",
		"ree",
		"ri",
		"ra",
		"wu",
		"wo",
		"we",
		"wee",
		"wi",
		"wa",
		"hwu",
		"hwo",
		"hwe",
		"hwee",
		"hwi",
		"hwa",
		"thu",
		"tho",
		"the",
		"thee",
		"thi",
		"tha",
		"ttu",
		"tto",
		"tte",
		"ttee",
		"tti",
		"tta",
		"pu",
		"po",
		"pe",
		"pee",
		"pi",
		"pa",
		"p",
		"gu",
		"go",
		"ge",
		"gee",
		"gi",
		"ga",
		"khu",
		"kho",
		"khe",
		"khee",
		"khi",
		"kha",
		"kku",
		"kko",
		"kke",
		"kkee",
		"kki"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x16.js
var require_x16 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"kka",
		"kk",
		"nu",
		"no",
		"ne",
		"nee",
		"ni",
		"na",
		"mu",
		"mo",
		"me",
		"mee",
		"mi",
		"ma",
		"yu",
		"yo",
		"ye",
		"yee",
		"yi",
		"ya",
		"ju",
		"ju",
		"jo",
		"je",
		"jee",
		"ji",
		"ji",
		"ja",
		"jju",
		"jjo",
		"jje",
		"jjee",
		"jji",
		"jja",
		"lu",
		"lo",
		"le",
		"lee",
		"li",
		"la",
		"dlu",
		"dlo",
		"dle",
		"dlee",
		"dli",
		"dla",
		"lhu",
		"lho",
		"lhe",
		"lhee",
		"lhi",
		"lha",
		"tlhu",
		"tlho",
		"tlhe",
		"tlhee",
		"tlhi",
		"tlha",
		"tlu",
		"tlo",
		"tle",
		"tlee",
		"tli",
		"tla",
		"zu",
		"zo",
		"ze",
		"zee",
		"zi",
		"za",
		"z",
		"z",
		"dzu",
		"dzo",
		"dze",
		"dzee",
		"dzi",
		"dza",
		"su",
		"so",
		"se",
		"see",
		"si",
		"sa",
		"shu",
		"sho",
		"she",
		"shee",
		"shi",
		"sha",
		"sh",
		"tsu",
		"tso",
		"tse",
		"tsee",
		"tsi",
		"tsa",
		"chu",
		"cho",
		"che",
		"chee",
		"chi",
		"cha",
		"ttsu",
		"ttso",
		"ttse",
		"ttsee",
		"ttsi",
		"ttsa",
		"X",
		".",
		"qai",
		"ngai",
		"nngi",
		"nngii",
		"nngo",
		"nngoo",
		"nnga",
		"nngaa",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		" ",
		"b",
		"l",
		"f",
		"s",
		"n",
		"h",
		"d",
		"t",
		"c",
		"q",
		"m",
		"g",
		"ng",
		"z",
		"r",
		"a",
		"o",
		"u",
		"e",
		"i",
		"ch",
		"th",
		"ph",
		"p",
		"x",
		"p",
		"<",
		">",
		"[?]",
		"[?]",
		"[?]",
		"f",
		"v",
		"u",
		"yr",
		"y",
		"w",
		"th",
		"th",
		"a",
		"o",
		"ac",
		"ae",
		"o",
		"o",
		"o",
		"oe",
		"on",
		"r",
		"k",
		"c",
		"k",
		"g",
		"ng",
		"g",
		"g",
		"w",
		"h",
		"h",
		"h",
		"h",
		"n",
		"n",
		"n",
		"i",
		"e",
		"j",
		"g",
		"ae",
		"a",
		"eo",
		"p",
		"z",
		"s",
		"s",
		"s",
		"c",
		"z",
		"t",
		"t",
		"d",
		"b",
		"b",
		"p",
		"p",
		"e",
		"m",
		"m",
		"m",
		"l",
		"l",
		"ng",
		"ng",
		"d",
		"o",
		"ear",
		"ior",
		"qu",
		"qu",
		"qu",
		"s",
		"yr",
		"yr",
		"yr",
		"q",
		"x",
		".",
		":",
		"+",
		"17",
		"18",
		"19",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x17.js
var require_x17 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"k",
		"kh",
		"g",
		"gh",
		"ng",
		"c",
		"ch",
		"j",
		"jh",
		"ny",
		"t",
		"tth",
		"d",
		"ddh",
		"nn",
		"t",
		"th",
		"d",
		"dh",
		"n",
		"p",
		"ph",
		"b",
		"bh",
		"m",
		"y",
		"r",
		"l",
		"v",
		"sh",
		"ss",
		"s",
		"h",
		"l",
		"q",
		"a",
		"aa",
		"i",
		"ii",
		"u",
		"uk",
		"uu",
		"uuv",
		"ry",
		"ryy",
		"ly",
		"lyy",
		"e",
		"ai",
		"oo",
		"oo",
		"au",
		"a",
		"aa",
		"aa",
		"i",
		"ii",
		"y",
		"yy",
		"u",
		"uu",
		"ua",
		"oe",
		"ya",
		"ie",
		"e",
		"ae",
		"ai",
		"oo",
		"au",
		"M",
		"H",
		"a`",
		"",
		"",
		"",
		"r",
		"",
		"!",
		"",
		"",
		"",
		"",
		"",
		".",
		" // ",
		":",
		"+",
		"++",
		" * ",
		" /// ",
		"KR",
		"'",
		"[?]",
		"[?]",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x18.js
var require_x18 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		" \\@ ",
		" ... ",
		", ",
		". ",
		": ",
		" // ",
		"",
		"-",
		", ",
		". ",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"a",
		"e",
		"i",
		"o",
		"u",
		"O",
		"U",
		"ee",
		"n",
		"ng",
		"b",
		"p",
		"q",
		"g",
		"m",
		"l",
		"s",
		"sh",
		"t",
		"d",
		"ch",
		"j",
		"y",
		"r",
		"w",
		"f",
		"k",
		"kha",
		"ts",
		"z",
		"h",
		"zr",
		"lh",
		"zh",
		"ch",
		"-",
		"e",
		"i",
		"o",
		"u",
		"O",
		"U",
		"ng",
		"b",
		"p",
		"q",
		"g",
		"m",
		"t",
		"d",
		"ch",
		"j",
		"ts",
		"y",
		"w",
		"k",
		"g",
		"h",
		"jy",
		"ny",
		"dz",
		"e",
		"i",
		"iy",
		"U",
		"u",
		"ng",
		"k",
		"g",
		"h",
		"p",
		"sh",
		"t",
		"d",
		"j",
		"f",
		"g",
		"h",
		"ts",
		"z",
		"r",
		"ch",
		"zh",
		"i",
		"k",
		"r",
		"f",
		"zh",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"H",
		"X",
		"W",
		"M",
		" 3 ",
		" 333 ",
		"a",
		"i",
		"k",
		"ng",
		"c",
		"tt",
		"tth",
		"dd",
		"nn",
		"t",
		"d",
		"p",
		"ph",
		"ss",
		"zh",
		"z",
		"a",
		"t",
		"zh",
		"gh",
		"ng",
		"c",
		"jh",
		"tta",
		"ddh",
		"t",
		"dh",
		"ss",
		"cy",
		"zh",
		"z",
		"u",
		"y",
		"bh",
		"'",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x19.js
var require_x19 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x1a.js
var require_x1a = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x1b.js
var require_x1b = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x1c.js
var require_x1c = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x1d.js
var require_x1d = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x1e.js
var require_x1e = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"A",
		"a",
		"B",
		"b",
		"B",
		"b",
		"B",
		"b",
		"C",
		"c",
		"D",
		"d",
		"D",
		"d",
		"D",
		"d",
		"D",
		"d",
		"D",
		"d",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"F",
		"f",
		"G",
		"g",
		"H",
		"h",
		"H",
		"h",
		"H",
		"h",
		"H",
		"h",
		"H",
		"h",
		"I",
		"i",
		"I",
		"i",
		"K",
		"k",
		"K",
		"k",
		"K",
		"k",
		"L",
		"l",
		"L",
		"l",
		"L",
		"l",
		"L",
		"l",
		"M",
		"m",
		"M",
		"m",
		"M",
		"m",
		"N",
		"n",
		"N",
		"n",
		"N",
		"n",
		"N",
		"n",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"P",
		"p",
		"P",
		"p",
		"R",
		"r",
		"R",
		"r",
		"R",
		"r",
		"R",
		"r",
		"S",
		"s",
		"S",
		"s",
		"S",
		"s",
		"S",
		"s",
		"S",
		"s",
		"T",
		"t",
		"T",
		"t",
		"T",
		"t",
		"T",
		"t",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"V",
		"v",
		"V",
		"v",
		"W",
		"w",
		"W",
		"w",
		"W",
		"w",
		"W",
		"w",
		"W",
		"w",
		"X",
		"x",
		"X",
		"x",
		"Y",
		"y",
		"Z",
		"z",
		"Z",
		"z",
		"Z",
		"z",
		"h",
		"t",
		"w",
		"y",
		"a",
		"s",
		"s",
		"s",
		"Ss",
		"d",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"A",
		"a",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"E",
		"e",
		"I",
		"i",
		"I",
		"i",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"O",
		"o",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"U",
		"u",
		"Y",
		"y",
		"Y",
		"y",
		"Y",
		"y",
		"Y",
		"y",
		"LL",
		"ll",
		"V",
		"v",
		"Y",
		"y"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x1f.js
var require_x1f = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"a",
		"a",
		"a",
		"a",
		"a",
		"a",
		"a",
		"a",
		"A",
		"A",
		"A",
		"A",
		"A",
		"A",
		"A",
		"A",
		"e",
		"e",
		"e",
		"e",
		"e",
		"e",
		"[?]",
		"[?]",
		"E",
		"E",
		"E",
		"E",
		"E",
		"E",
		"[?]",
		"[?]",
		"e",
		"e",
		"e",
		"e",
		"e",
		"e",
		"e",
		"e",
		"E",
		"E",
		"E",
		"E",
		"E",
		"E",
		"E",
		"E",
		"i",
		"i",
		"i",
		"i",
		"i",
		"i",
		"i",
		"i",
		"I",
		"I",
		"I",
		"I",
		"I",
		"I",
		"I",
		"I",
		"o",
		"o",
		"o",
		"o",
		"o",
		"o",
		"[?]",
		"[?]",
		"O",
		"O",
		"O",
		"O",
		"O",
		"O",
		"[?]",
		"[?]",
		"u",
		"u",
		"u",
		"u",
		"u",
		"u",
		"u",
		"u",
		"[?]",
		"U",
		"[?]",
		"U",
		"[?]",
		"U",
		"[?]",
		"U",
		"o",
		"o",
		"o",
		"o",
		"o",
		"o",
		"o",
		"o",
		"O",
		"O",
		"O",
		"O",
		"O",
		"O",
		"O",
		"O",
		"a",
		"a",
		"e",
		"e",
		"e",
		"e",
		"i",
		"i",
		"o",
		"o",
		"u",
		"u",
		"o",
		"o",
		"[?]",
		"[?]",
		"a",
		"a",
		"a",
		"a",
		"a",
		"a",
		"a",
		"a",
		"A",
		"A",
		"A",
		"A",
		"A",
		"A",
		"A",
		"A",
		"e",
		"e",
		"e",
		"e",
		"e",
		"e",
		"e",
		"e",
		"E",
		"E",
		"E",
		"E",
		"E",
		"E",
		"E",
		"E",
		"o",
		"o",
		"o",
		"o",
		"o",
		"o",
		"o",
		"o",
		"O",
		"O",
		"O",
		"O",
		"O",
		"O",
		"O",
		"O",
		"a",
		"a",
		"a",
		"a",
		"a",
		"[?]",
		"a",
		"a",
		"A",
		"A",
		"A",
		"A",
		"A",
		"'",
		"i",
		"'",
		"~",
		"\"~",
		"e",
		"e",
		"e",
		"[?]",
		"e",
		"e",
		"E",
		"E",
		"E",
		"E",
		"E",
		"'`",
		"''",
		"'~",
		"i",
		"i",
		"i",
		"i",
		"[?]",
		"[?]",
		"i",
		"i",
		"I",
		"I",
		"I",
		"I",
		"[?]",
		"`'",
		"`'",
		"`~",
		"u",
		"u",
		"u",
		"u",
		"R",
		"R",
		"u",
		"u",
		"U",
		"U",
		"U",
		"U",
		"R",
		"\"`",
		"\"'",
		"`",
		"[?]",
		"[?]",
		"o",
		"o",
		"o",
		"[?]",
		"o",
		"o",
		"O",
		"O",
		"O",
		"O",
		"O",
		"'",
		"`",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x20.js
var require_x20 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		" ",
		" ",
		" ",
		" ",
		" ",
		" ",
		" ",
		" ",
		" ",
		" ",
		" ",
		" ",
		"",
		"",
		"",
		"",
		"-",
		"-",
		"-",
		"-",
		"--",
		"--",
		"||",
		"_",
		"'",
		"'",
		",",
		"'",
		"\"",
		"\"",
		",,",
		"\"",
		"+",
		"++",
		"*",
		"*>",
		".",
		"..",
		"...",
		".",
		"\\n",
		"\\n\\n",
		"",
		"",
		"",
		"",
		"",
		" ",
		"%0",
		"%00",
		"'",
		"''",
		"'''",
		"`",
		"``",
		"```",
		"^",
		"<",
		">",
		"*",
		"!!",
		"!?",
		"-",
		"_",
		"-",
		"^",
		"***",
		"--",
		"/",
		"-[",
		"]-",
		"[?]",
		"?!",
		"!?",
		"7",
		"PP",
		"(]",
		"[)",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"0",
		"",
		"",
		"",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"+",
		"-",
		"=",
		"(",
		")",
		"n",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"+",
		"-",
		"=",
		"(",
		")",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"ECU",
		"CL",
		"Cr",
		"FF",
		"L",
		"mil",
		"N",
		"Pts",
		"Rs",
		"W",
		"NS",
		"D",
		"EUR",
		"K",
		"T",
		"Dr",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x21.js
var require_x21 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"tm",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		" 1/3 ",
		" 2/3 ",
		" 1/5 ",
		" 2/5 ",
		" 3/5 ",
		" 4/5 ",
		" 1/6 ",
		" 5/6 ",
		" 1/8 ",
		" 3/8 ",
		" 5/8 ",
		" 7/8 ",
		" 1/",
		"I",
		"II",
		"III",
		"IV",
		"V",
		"VI",
		"VII",
		"VIII",
		"IX",
		"X",
		"XI",
		"XII",
		"L",
		"C",
		"D",
		"M",
		"i",
		"ii",
		"iii",
		"iv",
		"v",
		"vi",
		"vii",
		"viii",
		"ix",
		"x",
		"xi",
		"xii",
		"l",
		"c",
		"d",
		"m",
		"(D",
		"D)",
		"((|))",
		")",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"-",
		"|",
		"-",
		"|",
		"-",
		"|",
		"\\\\",
		"/",
		"\\\\",
		"/",
		"-",
		"-",
		"~",
		"~",
		"-",
		"|",
		"-",
		"|",
		"-",
		"-",
		"-",
		"|",
		"-",
		"|",
		"|",
		"-",
		"-",
		"-",
		"-",
		"-",
		"-",
		"|",
		"|",
		"|",
		"|",
		"|",
		"|",
		"|",
		"^",
		"V",
		"\\\\",
		"=",
		"V",
		"^",
		"-",
		"-",
		"|",
		"|",
		"-",
		"-",
		"|",
		"|",
		"=",
		"|",
		"=",
		"=",
		"|",
		"=",
		"|",
		"=",
		"=",
		"=",
		"=",
		"=",
		"=",
		"|",
		"=",
		"|",
		"=",
		"|",
		"\\\\",
		"/",
		"\\\\",
		"/",
		"=",
		"=",
		"~",
		"~",
		"|",
		"|",
		"-",
		"|",
		"-",
		"|",
		"-",
		"-",
		"-",
		"|",
		"-",
		"|",
		"|",
		"|",
		"|",
		"|",
		"|",
		"|",
		"-",
		"\\\\",
		"\\\\",
		"|",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x22.js
var require_x22 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x23.js
var require_x23 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x24.js
var require_x24 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x25.js
var require_x25 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"-",
		"-",
		"|",
		"|",
		"-",
		"-",
		"|",
		"|",
		"-",
		"-",
		"|",
		"|",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"-",
		"-",
		"|",
		"|",
		"-",
		"|",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"+",
		"/",
		"\\\\",
		"X",
		"-",
		"|",
		"-",
		"|",
		"-",
		"|",
		"-",
		"|",
		"-",
		"|",
		"-",
		"|",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"-",
		"|",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"#",
		"^",
		"^",
		"^",
		"^",
		">",
		">",
		">",
		">",
		">",
		">",
		"V",
		"V",
		"V",
		"V",
		"<",
		"<",
		"<",
		"<",
		"<",
		"<",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"*",
		"#",
		"#",
		"#",
		"#",
		"#",
		"^",
		"^",
		"^",
		"O",
		"#",
		"#",
		"#",
		"#",
		"O",
		"O",
		"O",
		"O",
		"/",
		"\\",
		"\\",
		"#",
		"#",
		"#",
		"#",
		"/"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x26.js
var require_x26 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x27.js
var require_x27 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x28.js
var require_x28 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		" ",
		"a",
		"1",
		"b",
		"'",
		"k",
		"2",
		"l",
		"\\@",
		"c",
		"i",
		"f",
		"/",
		"m",
		"s",
		"p",
		"\"",
		"e",
		"3",
		"h",
		"9",
		"o",
		"6",
		"r",
		"^",
		"d",
		"j",
		"g",
		">",
		"n",
		"t",
		"q",
		",",
		"*",
		"5",
		"<",
		"-",
		"u",
		"8",
		"v",
		".",
		"%",
		"[",
		"\\$",
		"+",
		"x",
		"!",
		"&",
		";",
		":",
		"4",
		"\\\\",
		"0",
		"z",
		"7",
		"(",
		"_",
		"?",
		"w",
		"]",
		"#",
		"y",
		")",
		"=",
		"[d7]",
		"[d17]",
		"[d27]",
		"[d127]",
		"[d37]",
		"[d137]",
		"[d237]",
		"[d1237]",
		"[d47]",
		"[d147]",
		"[d247]",
		"[d1247]",
		"[d347]",
		"[d1347]",
		"[d2347]",
		"[d12347]",
		"[d57]",
		"[d157]",
		"[d257]",
		"[d1257]",
		"[d357]",
		"[d1357]",
		"[d2357]",
		"[d12357]",
		"[d457]",
		"[d1457]",
		"[d2457]",
		"[d12457]",
		"[d3457]",
		"[d13457]",
		"[d23457]",
		"[d123457]",
		"[d67]",
		"[d167]",
		"[d267]",
		"[d1267]",
		"[d367]",
		"[d1367]",
		"[d2367]",
		"[d12367]",
		"[d467]",
		"[d1467]",
		"[d2467]",
		"[d12467]",
		"[d3467]",
		"[d13467]",
		"[d23467]",
		"[d123467]",
		"[d567]",
		"[d1567]",
		"[d2567]",
		"[d12567]",
		"[d3567]",
		"[d13567]",
		"[d23567]",
		"[d123567]",
		"[d4567]",
		"[d14567]",
		"[d24567]",
		"[d124567]",
		"[d34567]",
		"[d134567]",
		"[d234567]",
		"[d1234567]",
		"[d8]",
		"[d18]",
		"[d28]",
		"[d128]",
		"[d38]",
		"[d138]",
		"[d238]",
		"[d1238]",
		"[d48]",
		"[d148]",
		"[d248]",
		"[d1248]",
		"[d348]",
		"[d1348]",
		"[d2348]",
		"[d12348]",
		"[d58]",
		"[d158]",
		"[d258]",
		"[d1258]",
		"[d358]",
		"[d1358]",
		"[d2358]",
		"[d12358]",
		"[d458]",
		"[d1458]",
		"[d2458]",
		"[d12458]",
		"[d3458]",
		"[d13458]",
		"[d23458]",
		"[d123458]",
		"[d68]",
		"[d168]",
		"[d268]",
		"[d1268]",
		"[d368]",
		"[d1368]",
		"[d2368]",
		"[d12368]",
		"[d468]",
		"[d1468]",
		"[d2468]",
		"[d12468]",
		"[d3468]",
		"[d13468]",
		"[d23468]",
		"[d123468]",
		"[d568]",
		"[d1568]",
		"[d2568]",
		"[d12568]",
		"[d3568]",
		"[d13568]",
		"[d23568]",
		"[d123568]",
		"[d4568]",
		"[d14568]",
		"[d24568]",
		"[d124568]",
		"[d34568]",
		"[d134568]",
		"[d234568]",
		"[d1234568]",
		"[d78]",
		"[d178]",
		"[d278]",
		"[d1278]",
		"[d378]",
		"[d1378]",
		"[d2378]",
		"[d12378]",
		"[d478]",
		"[d1478]",
		"[d2478]",
		"[d12478]",
		"[d3478]",
		"[d13478]",
		"[d23478]",
		"[d123478]",
		"[d578]",
		"[d1578]",
		"[d2578]",
		"[d12578]",
		"[d3578]",
		"[d13578]",
		"[d23578]",
		"[d123578]",
		"[d4578]",
		"[d14578]",
		"[d24578]",
		"[d124578]",
		"[d34578]",
		"[d134578]",
		"[d234578]",
		"[d1234578]",
		"[d678]",
		"[d1678]",
		"[d2678]",
		"[d12678]",
		"[d3678]",
		"[d13678]",
		"[d23678]",
		"[d123678]",
		"[d4678]",
		"[d14678]",
		"[d24678]",
		"[d124678]",
		"[d34678]",
		"[d134678]",
		"[d234678]",
		"[d1234678]",
		"[d5678]",
		"[d15678]",
		"[d25678]",
		"[d125678]",
		"[d35678]",
		"[d135678]",
		"[d235678]",
		"[d1235678]",
		"[d45678]",
		"[d145678]",
		"[d245678]",
		"[d1245678]",
		"[d345678]",
		"[d1345678]",
		"[d2345678]",
		"[d12345678]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x2e.js
var require_x2e = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?]",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x2f.js
var require_x2f = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x30.js
var require_x30 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		" ",
		", ",
		". ",
		"\"",
		"[JIS]",
		"\"",
		"/",
		"0",
		"<",
		"> ",
		"<<",
		">> ",
		"[",
		"] ",
		"\\{",
		"\\} ",
		"[(",
		")] ",
		"\\@",
		"X ",
		"[",
		"] ",
		"[[",
		"]] ",
		"((",
		")) ",
		"[[",
		"]] ",
		"~ ",
		"``",
		"''",
		",,",
		"\\@",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		"",
		"",
		"",
		"",
		"",
		"",
		"~",
		"+",
		"+",
		"+",
		"+",
		"",
		"\\@",
		" // ",
		"+10+",
		"+20+",
		"+30+",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"[?]",
		"a",
		"a",
		"i",
		"i",
		"u",
		"u",
		"e",
		"e",
		"o",
		"o",
		"ka",
		"ga",
		"ki",
		"gi",
		"ku",
		"gu",
		"ke",
		"ge",
		"ko",
		"go",
		"sa",
		"za",
		"si",
		"zi",
		"su",
		"zu",
		"se",
		"ze",
		"so",
		"zo",
		"ta",
		"da",
		"ti",
		"di",
		"tu",
		"tu",
		"du",
		"te",
		"de",
		"to",
		"do",
		"na",
		"ni",
		"nu",
		"ne",
		"no",
		"ha",
		"ba",
		"pa",
		"hi",
		"bi",
		"pi",
		"hu",
		"bu",
		"pu",
		"he",
		"be",
		"pe",
		"ho",
		"bo",
		"po",
		"ma",
		"mi",
		"mu",
		"me",
		"mo",
		"ya",
		"ya",
		"yu",
		"yu",
		"yo",
		"yo",
		"ra",
		"ri",
		"ru",
		"re",
		"ro",
		"wa",
		"wa",
		"wi",
		"we",
		"wo",
		"n",
		"vu",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"\"",
		"\"",
		"[?]",
		"[?]",
		"a",
		"a",
		"i",
		"i",
		"u",
		"u",
		"e",
		"e",
		"o",
		"o",
		"ka",
		"ga",
		"ki",
		"gi",
		"ku",
		"gu",
		"ke",
		"ge",
		"ko",
		"go",
		"sa",
		"za",
		"si",
		"zi",
		"su",
		"zu",
		"se",
		"ze",
		"so",
		"zo",
		"ta",
		"da",
		"ti",
		"di",
		"tu",
		"tu",
		"du",
		"te",
		"de",
		"to",
		"do",
		"na",
		"ni",
		"nu",
		"ne",
		"no",
		"ha",
		"ba",
		"pa",
		"hi",
		"bi",
		"pi",
		"hu",
		"bu",
		"pu",
		"he",
		"be",
		"pe",
		"ho",
		"bo",
		"po",
		"ma",
		"mi",
		"mu",
		"me",
		"mo",
		"ya",
		"ya",
		"yu",
		"yu",
		"yo",
		"yo",
		"ra",
		"ri",
		"ru",
		"re",
		"ro",
		"wa",
		"wa",
		"wi",
		"we",
		"wo",
		"n",
		"vu",
		"ka",
		"ke",
		"va",
		"vi",
		"ve",
		"vo",
		"",
		"",
		"\"",
		"\"",
		"koto"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x31.js
var require_x31 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"B",
		"P",
		"M",
		"F",
		"D",
		"T",
		"N",
		"L",
		"G",
		"K",
		"H",
		"J",
		"Q",
		"X",
		"ZH",
		"CH",
		"SH",
		"R",
		"Z",
		"C",
		"S",
		"A",
		"O",
		"E",
		"EH",
		"AI",
		"EI",
		"AU",
		"OU",
		"AN",
		"EN",
		"ANG",
		"ENG",
		"ER",
		"I",
		"U",
		"IU",
		"V",
		"NG",
		"GN",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"g",
		"gg",
		"gs",
		"n",
		"nj",
		"nh",
		"d",
		"dd",
		"r",
		"lg",
		"lm",
		"lb",
		"ls",
		"lt",
		"lp",
		"rh",
		"m",
		"b",
		"bb",
		"bs",
		"s",
		"ss",
		"",
		"j",
		"jj",
		"c",
		"k",
		"t",
		"p",
		"h",
		"a",
		"ae",
		"ya",
		"yae",
		"eo",
		"e",
		"yeo",
		"ye",
		"o",
		"wa",
		"wae",
		"oe",
		"yo",
		"u",
		"weo",
		"we",
		"wi",
		"yu",
		"eu",
		"yi",
		"i",
		"",
		"nn",
		"nd",
		"ns",
		"nZ",
		"lgs",
		"ld",
		"lbs",
		"lZ",
		"lQ",
		"mb",
		"ms",
		"mZ",
		"mN",
		"bg",
		"",
		"bsg",
		"bst",
		"bj",
		"bt",
		"bN",
		"bbN",
		"sg",
		"sn",
		"sd",
		"sb",
		"sj",
		"Z",
		"",
		"N",
		"Ns",
		"NZ",
		"pN",
		"hh",
		"Q",
		"yo-ya",
		"yo-yae",
		"yo-i",
		"yu-yeo",
		"yu-ye",
		"yu-i",
		"U",
		"U-i",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"BU",
		"ZI",
		"JI",
		"GU",
		"EE",
		"ENN",
		"OO",
		"ONN",
		"IR",
		"ANN",
		"INN",
		"UNN",
		"IM",
		"NGG",
		"AINN",
		"AUNN",
		"AM",
		"OM",
		"ONG",
		"INNN",
		"P",
		"T",
		"K",
		"H",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x32.js
var require_x32 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"(g)",
		"(n)",
		"(d)",
		"(r)",
		"(m)",
		"(b)",
		"(s)",
		"()",
		"(j)",
		"(c)",
		"(k)",
		"(t)",
		"(p)",
		"(h)",
		"(ga)",
		"(na)",
		"(da)",
		"(ra)",
		"(ma)",
		"(ba)",
		"(sa)",
		"(a)",
		"(ja)",
		"(ca)",
		"(ka)",
		"(ta)",
		"(pa)",
		"(ha)",
		"(ju)",
		"[?]",
		"[?]",
		"[?]",
		"(1) ",
		"(2) ",
		"(3) ",
		"(4) ",
		"(5) ",
		"(6) ",
		"(7) ",
		"(8) ",
		"(9) ",
		"(10) ",
		"(Yue) ",
		"(Huo) ",
		"(Shui) ",
		"(Mu) ",
		"(Jin) ",
		"(Tu) ",
		"(Ri) ",
		"(Zhu) ",
		"(You) ",
		"(She) ",
		"(Ming) ",
		"(Te) ",
		"(Cai) ",
		"(Zhu) ",
		"(Lao) ",
		"(Dai) ",
		"(Hu) ",
		"(Xue) ",
		"(Jian) ",
		"(Qi) ",
		"(Zi) ",
		"(Xie) ",
		"(Ji) ",
		"(Xiu) ",
		"<<",
		">>",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"(g)",
		"(n)",
		"(d)",
		"(r)",
		"(m)",
		"(b)",
		"(s)",
		"()",
		"(j)",
		"(c)",
		"(k)",
		"(t)",
		"(p)",
		"(h)",
		"(ga)",
		"(na)",
		"(da)",
		"(ra)",
		"(ma)",
		"(ba)",
		"(sa)",
		"(a)",
		"(ja)",
		"(ca)",
		"(ka)",
		"(ta)",
		"(pa)",
		"(ha)",
		"[?]",
		"[?]",
		"[?]",
		"KIS ",
		"(1) ",
		"(2) ",
		"(3) ",
		"(4) ",
		"(5) ",
		"(6) ",
		"(7) ",
		"(8) ",
		"(9) ",
		"(10) ",
		"(Yue) ",
		"(Huo) ",
		"(Shui) ",
		"(Mu) ",
		"(Jin) ",
		"(Tu) ",
		"(Ri) ",
		"(Zhu) ",
		"(You) ",
		"(She) ",
		"(Ming) ",
		"(Te) ",
		"(Cai) ",
		"(Zhu) ",
		"(Lao) ",
		"(Mi) ",
		"(Nan) ",
		"(Nu) ",
		"(Shi) ",
		"(You) ",
		"(Yin) ",
		"(Zhu) ",
		"(Xiang) ",
		"(Xiu) ",
		"(Xie) ",
		"(Zheng) ",
		"(Shang) ",
		"(Zhong) ",
		"(Xia) ",
		"(Zuo) ",
		"(You) ",
		"(Yi) ",
		"(Zong) ",
		"(Xue) ",
		"(Jian) ",
		"(Qi) ",
		"(Zi) ",
		"(Xie) ",
		"(Ye) ",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"1M",
		"2M",
		"3M",
		"4M",
		"5M",
		"6M",
		"7M",
		"8M",
		"9M",
		"10M",
		"11M",
		"12M",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"a",
		"i",
		"u",
		"u",
		"o",
		"ka",
		"ki",
		"ku",
		"ke",
		"ko",
		"sa",
		"si",
		"su",
		"se",
		"so",
		"ta",
		"ti",
		"tu",
		"te",
		"to",
		"na",
		"ni",
		"nu",
		"ne",
		"no",
		"ha",
		"hi",
		"hu",
		"he",
		"ho",
		"ma",
		"mi",
		"mu",
		"me",
		"mo",
		"ya",
		"yu",
		"yo",
		"ra",
		"ri",
		"ru",
		"re",
		"ro",
		"wa",
		"wi",
		"we",
		"wo",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x33.js
var require_x33 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"apartment",
		"alpha",
		"ampere",
		"are",
		"inning",
		"inch",
		"won",
		"escudo",
		"acre",
		"ounce",
		"ohm",
		"kai-ri",
		"carat",
		"calorie",
		"gallon",
		"gamma",
		"giga",
		"guinea",
		"curie",
		"guilder",
		"kilo",
		"kilogram",
		"kilometer",
		"kilowatt",
		"gram",
		"gram ton",
		"cruzeiro",
		"krone",
		"case",
		"koruna",
		"co-op",
		"cycle",
		"centime",
		"shilling",
		"centi",
		"cent",
		"dozen",
		"desi",
		"dollar",
		"ton",
		"nano",
		"knot",
		"heights",
		"percent",
		"parts",
		"barrel",
		"piaster",
		"picul",
		"pico",
		"building",
		"farad",
		"feet",
		"bushel",
		"franc",
		"hectare",
		"peso",
		"pfennig",
		"hertz",
		"pence",
		"page",
		"beta",
		"point",
		"volt",
		"hon",
		"pound",
		"hall",
		"horn",
		"micro",
		"mile",
		"mach",
		"mark",
		"mansion",
		"micron",
		"milli",
		"millibar",
		"mega",
		"megaton",
		"meter",
		"yard",
		"yard",
		"yuan",
		"liter",
		"lira",
		"rupee",
		"ruble",
		"rem",
		"roentgen",
		"watt",
		"0h",
		"1h",
		"2h",
		"3h",
		"4h",
		"5h",
		"6h",
		"7h",
		"8h",
		"9h",
		"10h",
		"11h",
		"12h",
		"13h",
		"14h",
		"15h",
		"16h",
		"17h",
		"18h",
		"19h",
		"20h",
		"21h",
		"22h",
		"23h",
		"24h",
		"HPA",
		"da",
		"AU",
		"bar",
		"oV",
		"pc",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"Heisei",
		"Syouwa",
		"Taisyou",
		"Meiji",
		"Inc.",
		"pA",
		"nA",
		"microamp",
		"mA",
		"kA",
		"kB",
		"MB",
		"GB",
		"cal",
		"kcal",
		"pF",
		"nF",
		"microFarad",
		"microgram",
		"mg",
		"kg",
		"Hz",
		"kHz",
		"MHz",
		"GHz",
		"THz",
		"microliter",
		"ml",
		"dl",
		"kl",
		"fm",
		"nm",
		"micrometer",
		"mm",
		"cm",
		"km",
		"mm^2",
		"cm^2",
		"m^2",
		"km^2",
		"mm^4",
		"cm^3",
		"m^3",
		"km^3",
		"m/s",
		"m/s^2",
		"Pa",
		"kPa",
		"MPa",
		"GPa",
		"rad",
		"rad/s",
		"rad/s^2",
		"ps",
		"ns",
		"microsecond",
		"ms",
		"pV",
		"nV",
		"microvolt",
		"mV",
		"kV",
		"MV",
		"pW",
		"nW",
		"microwatt",
		"mW",
		"kW",
		"MW",
		"kOhm",
		"MOhm",
		"a.m.",
		"Bq",
		"cc",
		"cd",
		"C/kg",
		"Co.",
		"dB",
		"Gy",
		"ha",
		"HP",
		"in",
		"K.K.",
		"KM",
		"kt",
		"lm",
		"ln",
		"log",
		"lx",
		"mb",
		"mil",
		"mol",
		"pH",
		"p.m.",
		"PPM",
		"PR",
		"sr",
		"Sv",
		"Wb",
		"[?]",
		"[?]",
		"1d",
		"2d",
		"3d",
		"4d",
		"5d",
		"6d",
		"7d",
		"8d",
		"9d",
		"10d",
		"11d",
		"12d",
		"13d",
		"14d",
		"15d",
		"16d",
		"17d",
		"18d",
		"19d",
		"20d",
		"21d",
		"22d",
		"23d",
		"24d",
		"25d",
		"26d",
		"27d",
		"28d",
		"29d",
		"30d",
		"31d",
		"gal"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x4d.js
var require_x4d = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/x4e.js
var require_x4e = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Yi ",
		"Ding ",
		"Kao ",
		"Qi ",
		"Shang ",
		"Xia ",
		"[?] ",
		"Mo ",
		"Zhang ",
		"San ",
		"Shang ",
		"Xia ",
		"Ji ",
		"Bu ",
		"Yu ",
		"Mian ",
		"Gai ",
		"Chou ",
		"Chou ",
		"Zhuan ",
		"Qie ",
		"Pi ",
		"Shi ",
		"Shi ",
		"Qiu ",
		"Bing ",
		"Ye ",
		"Cong ",
		"Dong ",
		"Si ",
		"Cheng ",
		"Diu ",
		"Qiu ",
		"Liang ",
		"Diu ",
		"You ",
		"Liang ",
		"Yan ",
		"Bing ",
		"Sang ",
		"Gun ",
		"Jiu ",
		"Ge ",
		"Ya ",
		"Qiang ",
		"Zhong ",
		"Ji ",
		"Jie ",
		"Feng ",
		"Guan ",
		"Chuan ",
		"Chan ",
		"Lin ",
		"Zhuo ",
		"Zhu ",
		"Ha ",
		"Wan ",
		"Dan ",
		"Wei ",
		"Zhu ",
		"Jing ",
		"Li ",
		"Ju ",
		"Pie ",
		"Fu ",
		"Yi ",
		"Yi ",
		"Nai ",
		"Shime ",
		"Jiu ",
		"Jiu ",
		"Zhe ",
		"Yao ",
		"Yi ",
		"[?] ",
		"Zhi ",
		"Wu ",
		"Zha ",
		"Hu ",
		"Fa ",
		"Le ",
		"Zhong ",
		"Ping ",
		"Pang ",
		"Qiao ",
		"Hu ",
		"Guai ",
		"Cheng ",
		"Cheng ",
		"Yi ",
		"Yin ",
		"[?] ",
		"Mie ",
		"Jiu ",
		"Qi ",
		"Ye ",
		"Xi ",
		"Xiang ",
		"Gai ",
		"Diu ",
		"Hal ",
		"[?] ",
		"Shu ",
		"Twul ",
		"Shi ",
		"Ji ",
		"Nang ",
		"Jia ",
		"Kel ",
		"Shi ",
		"[?] ",
		"Ol ",
		"Mai ",
		"Luan ",
		"Cal ",
		"Ru ",
		"Xue ",
		"Yan ",
		"Fu ",
		"Sha ",
		"Na ",
		"Gan ",
		"Sol ",
		"El ",
		"Cwul ",
		"[?] ",
		"Gan ",
		"Chi ",
		"Gui ",
		"Gan ",
		"Luan ",
		"Lin ",
		"Yi ",
		"Jue ",
		"Liao ",
		"Ma ",
		"Yu ",
		"Zheng ",
		"Shi ",
		"Shi ",
		"Er ",
		"Chu ",
		"Yu ",
		"Yu ",
		"Yu ",
		"Yun ",
		"Hu ",
		"Qi ",
		"Wu ",
		"Jing ",
		"Si ",
		"Sui ",
		"Gen ",
		"Gen ",
		"Ya ",
		"Xie ",
		"Ya ",
		"Qi ",
		"Ya ",
		"Ji ",
		"Tou ",
		"Wang ",
		"Kang ",
		"Ta ",
		"Jiao ",
		"Hai ",
		"Yi ",
		"Chan ",
		"Heng ",
		"Mu ",
		"[?] ",
		"Xiang ",
		"Jing ",
		"Ting ",
		"Liang ",
		"Xiang ",
		"Jing ",
		"Ye ",
		"Qin ",
		"Bo ",
		"You ",
		"Xie ",
		"Dan ",
		"Lian ",
		"Duo ",
		"Wei ",
		"Ren ",
		"Ren ",
		"Ji ",
		"La ",
		"Wang ",
		"Yi ",
		"Shi ",
		"Ren ",
		"Le ",
		"Ding ",
		"Ze ",
		"Jin ",
		"Pu ",
		"Chou ",
		"Ba ",
		"Zhang ",
		"Jin ",
		"Jie ",
		"Bing ",
		"Reng ",
		"Cong ",
		"Fo ",
		"San ",
		"Lun ",
		"Sya ",
		"Cang ",
		"Zi ",
		"Shi ",
		"Ta ",
		"Zhang ",
		"Fu ",
		"Xian ",
		"Xian ",
		"Tuo ",
		"Hong ",
		"Tong ",
		"Ren ",
		"Qian ",
		"Gan ",
		"Yi ",
		"Di ",
		"Dai ",
		"Ling ",
		"Yi ",
		"Chao ",
		"Chang ",
		"Sa ",
		"[?] ",
		"Yi ",
		"Mu ",
		"Men ",
		"Ren ",
		"Jia ",
		"Chao ",
		"Yang ",
		"Qian ",
		"Zhong ",
		"Pi ",
		"Wan ",
		"Wu ",
		"Jian ",
		"Jie ",
		"Yao ",
		"Feng ",
		"Cang ",
		"Ren ",
		"Wang ",
		"Fen ",
		"Di ",
		"Fang "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x4f.js
var require_x4f = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Zhong ",
		"Qi ",
		"Pei ",
		"Yu ",
		"Diao ",
		"Dun ",
		"Wen ",
		"Yi ",
		"Xin ",
		"Kang ",
		"Yi ",
		"Ji ",
		"Ai ",
		"Wu ",
		"Ji ",
		"Fu ",
		"Fa ",
		"Xiu ",
		"Jin ",
		"Bei ",
		"Dan ",
		"Fu ",
		"Tang ",
		"Zhong ",
		"You ",
		"Huo ",
		"Hui ",
		"Yu ",
		"Cui ",
		"Chuan ",
		"San ",
		"Wei ",
		"Chuan ",
		"Che ",
		"Ya ",
		"Xian ",
		"Shang ",
		"Chang ",
		"Lun ",
		"Cang ",
		"Xun ",
		"Xin ",
		"Wei ",
		"Zhu ",
		"[?] ",
		"Xuan ",
		"Nu ",
		"Bo ",
		"Gu ",
		"Ni ",
		"Ni ",
		"Xie ",
		"Ban ",
		"Xu ",
		"Ling ",
		"Zhou ",
		"Shen ",
		"Qu ",
		"Si ",
		"Beng ",
		"Si ",
		"Jia ",
		"Pi ",
		"Yi ",
		"Si ",
		"Ai ",
		"Zheng ",
		"Dian ",
		"Han ",
		"Mai ",
		"Dan ",
		"Zhu ",
		"Bu ",
		"Qu ",
		"Bi ",
		"Shao ",
		"Ci ",
		"Wei ",
		"Di ",
		"Zhu ",
		"Zuo ",
		"You ",
		"Yang ",
		"Ti ",
		"Zhan ",
		"He ",
		"Bi ",
		"Tuo ",
		"She ",
		"Yu ",
		"Yi ",
		"Fo ",
		"Zuo ",
		"Kou ",
		"Ning ",
		"Tong ",
		"Ni ",
		"Xuan ",
		"Qu ",
		"Yong ",
		"Wa ",
		"Qian ",
		"[?] ",
		"Ka ",
		"[?] ",
		"Pei ",
		"Huai ",
		"He ",
		"Lao ",
		"Xiang ",
		"Ge ",
		"Yang ",
		"Bai ",
		"Fa ",
		"Ming ",
		"Jia ",
		"Er ",
		"Bing ",
		"Ji ",
		"Hen ",
		"Huo ",
		"Gui ",
		"Quan ",
		"Tiao ",
		"Jiao ",
		"Ci ",
		"Yi ",
		"Shi ",
		"Xing ",
		"Shen ",
		"Tuo ",
		"Kan ",
		"Zhi ",
		"Gai ",
		"Lai ",
		"Yi ",
		"Chi ",
		"Kua ",
		"Guang ",
		"Li ",
		"Yin ",
		"Shi ",
		"Mi ",
		"Zhu ",
		"Xu ",
		"You ",
		"An ",
		"Lu ",
		"Mou ",
		"Er ",
		"Lun ",
		"Tong ",
		"Cha ",
		"Chi ",
		"Xun ",
		"Gong ",
		"Zhou ",
		"Yi ",
		"Ru ",
		"Jian ",
		"Xia ",
		"Jia ",
		"Zai ",
		"Lu ",
		"Ko ",
		"Jiao ",
		"Zhen ",
		"Ce ",
		"Qiao ",
		"Kuai ",
		"Chai ",
		"Ning ",
		"Nong ",
		"Jin ",
		"Wu ",
		"Hou ",
		"Jiong ",
		"Cheng ",
		"Zhen ",
		"Zuo ",
		"Chou ",
		"Qin ",
		"Lu ",
		"Ju ",
		"Shu ",
		"Ting ",
		"Shen ",
		"Tuo ",
		"Bo ",
		"Nan ",
		"Hao ",
		"Bian ",
		"Tui ",
		"Yu ",
		"Xi ",
		"Cu ",
		"E ",
		"Qiu ",
		"Xu ",
		"Kuang ",
		"Ku ",
		"Wu ",
		"Jun ",
		"Yi ",
		"Fu ",
		"Lang ",
		"Zu ",
		"Qiao ",
		"Li ",
		"Yong ",
		"Hun ",
		"Jing ",
		"Xian ",
		"San ",
		"Pai ",
		"Su ",
		"Fu ",
		"Xi ",
		"Li ",
		"Fu ",
		"Ping ",
		"Bao ",
		"Yu ",
		"Si ",
		"Xia ",
		"Xin ",
		"Xiu ",
		"Yu ",
		"Ti ",
		"Che ",
		"Chou ",
		"[?] ",
		"Yan ",
		"Lia ",
		"Li ",
		"Lai ",
		"[?] ",
		"Jian ",
		"Xiu ",
		"Fu ",
		"He ",
		"Ju ",
		"Xiao ",
		"Pai ",
		"Jian ",
		"Biao ",
		"Chu ",
		"Fei ",
		"Feng ",
		"Ya ",
		"An ",
		"Bei ",
		"Yu ",
		"Xin ",
		"Bi ",
		"Jian "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x50.js
var require_x50 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Chang ",
		"Chi ",
		"Bing ",
		"Zan ",
		"Yao ",
		"Cui ",
		"Lia ",
		"Wan ",
		"Lai ",
		"Cang ",
		"Zong ",
		"Ge ",
		"Guan ",
		"Bei ",
		"Tian ",
		"Shu ",
		"Shu ",
		"Men ",
		"Dao ",
		"Tan ",
		"Jue ",
		"Chui ",
		"Xing ",
		"Peng ",
		"Tang ",
		"Hou ",
		"Yi ",
		"Qi ",
		"Ti ",
		"Gan ",
		"Jing ",
		"Jie ",
		"Sui ",
		"Chang ",
		"Jie ",
		"Fang ",
		"Zhi ",
		"Kong ",
		"Juan ",
		"Zong ",
		"Ju ",
		"Qian ",
		"Ni ",
		"Lun ",
		"Zhuo ",
		"Wei ",
		"Luo ",
		"Song ",
		"Leng ",
		"Hun ",
		"Dong ",
		"Zi ",
		"Ben ",
		"Wu ",
		"Ju ",
		"Nai ",
		"Cai ",
		"Jian ",
		"Zhai ",
		"Ye ",
		"Zhi ",
		"Sha ",
		"Qing ",
		"[?] ",
		"Ying ",
		"Cheng ",
		"Jian ",
		"Yan ",
		"Nuan ",
		"Zhong ",
		"Chun ",
		"Jia ",
		"Jie ",
		"Wei ",
		"Yu ",
		"Bing ",
		"Ruo ",
		"Ti ",
		"Wei ",
		"Pian ",
		"Yan ",
		"Feng ",
		"Tang ",
		"Wo ",
		"E ",
		"Xie ",
		"Che ",
		"Sheng ",
		"Kan ",
		"Di ",
		"Zuo ",
		"Cha ",
		"Ting ",
		"Bei ",
		"Ye ",
		"Huang ",
		"Yao ",
		"Zhan ",
		"Chou ",
		"Yan ",
		"You ",
		"Jian ",
		"Xu ",
		"Zha ",
		"Ci ",
		"Fu ",
		"Bi ",
		"Zhi ",
		"Zong ",
		"Mian ",
		"Ji ",
		"Yi ",
		"Xie ",
		"Xun ",
		"Si ",
		"Duan ",
		"Ce ",
		"Zhen ",
		"Ou ",
		"Tou ",
		"Tou ",
		"Bei ",
		"Za ",
		"Lu ",
		"Jie ",
		"Wei ",
		"Fen ",
		"Chang ",
		"Gui ",
		"Sou ",
		"Zhi ",
		"Su ",
		"Xia ",
		"Fu ",
		"Yuan ",
		"Rong ",
		"Li ",
		"Ru ",
		"Yun ",
		"Gou ",
		"Ma ",
		"Bang ",
		"Dian ",
		"Tang ",
		"Hao ",
		"Jie ",
		"Xi ",
		"Shan ",
		"Qian ",
		"Jue ",
		"Cang ",
		"Chu ",
		"San ",
		"Bei ",
		"Xiao ",
		"Yong ",
		"Yao ",
		"Tan ",
		"Suo ",
		"Yang ",
		"Fa ",
		"Bing ",
		"Jia ",
		"Dai ",
		"Zai ",
		"Tang ",
		"[?] ",
		"Bin ",
		"Chu ",
		"Nuo ",
		"Can ",
		"Lei ",
		"Cui ",
		"Yong ",
		"Zao ",
		"Zong ",
		"Peng ",
		"Song ",
		"Ao ",
		"Chuan ",
		"Yu ",
		"Zhai ",
		"Cou ",
		"Shang ",
		"Qiang ",
		"Jing ",
		"Chi ",
		"Sha ",
		"Han ",
		"Zhang ",
		"Qing ",
		"Yan ",
		"Di ",
		"Xi ",
		"Lu ",
		"Bei ",
		"Piao ",
		"Jin ",
		"Lian ",
		"Lu ",
		"Man ",
		"Qian ",
		"Xian ",
		"Tan ",
		"Ying ",
		"Dong ",
		"Zhuan ",
		"Xiang ",
		"Shan ",
		"Qiao ",
		"Jiong ",
		"Tui ",
		"Zun ",
		"Pu ",
		"Xi ",
		"Lao ",
		"Chang ",
		"Guang ",
		"Liao ",
		"Qi ",
		"Deng ",
		"Chan ",
		"Wei ",
		"Ji ",
		"Fan ",
		"Hui ",
		"Chuan ",
		"Jian ",
		"Dan ",
		"Jiao ",
		"Jiu ",
		"Seng ",
		"Fen ",
		"Xian ",
		"Jue ",
		"E ",
		"Jiao ",
		"Jian ",
		"Tong ",
		"Lin ",
		"Bo ",
		"Gu ",
		"[?] ",
		"Su ",
		"Xian ",
		"Jiang ",
		"Min ",
		"Ye ",
		"Jin ",
		"Jia ",
		"Qiao ",
		"Pi ",
		"Feng ",
		"Zhou ",
		"Ai ",
		"Sai "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x51.js
var require_x51 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Yi ",
		"Jun ",
		"Nong ",
		"Chan ",
		"Yi ",
		"Dang ",
		"Jing ",
		"Xuan ",
		"Kuai ",
		"Jian ",
		"Chu ",
		"Dan ",
		"Jiao ",
		"Sha ",
		"Zai ",
		"[?] ",
		"Bin ",
		"An ",
		"Ru ",
		"Tai ",
		"Chou ",
		"Chai ",
		"Lan ",
		"Ni ",
		"Jin ",
		"Qian ",
		"Meng ",
		"Wu ",
		"Ning ",
		"Qiong ",
		"Ni ",
		"Chang ",
		"Lie ",
		"Lei ",
		"Lu ",
		"Kuang ",
		"Bao ",
		"Du ",
		"Biao ",
		"Zan ",
		"Zhi ",
		"Si ",
		"You ",
		"Hao ",
		"Chen ",
		"Chen ",
		"Li ",
		"Teng ",
		"Wei ",
		"Long ",
		"Chu ",
		"Chan ",
		"Rang ",
		"Shu ",
		"Hui ",
		"Li ",
		"Luo ",
		"Zan ",
		"Nuo ",
		"Tang ",
		"Yan ",
		"Lei ",
		"Nang ",
		"Er ",
		"Wu ",
		"Yun ",
		"Zan ",
		"Yuan ",
		"Xiong ",
		"Chong ",
		"Zhao ",
		"Xiong ",
		"Xian ",
		"Guang ",
		"Dui ",
		"Ke ",
		"Dui ",
		"Mian ",
		"Tu ",
		"Chang ",
		"Er ",
		"Dui ",
		"Er ",
		"Xin ",
		"Tu ",
		"Si ",
		"Yan ",
		"Yan ",
		"Shi ",
		"Shi ",
		"Dang ",
		"Qian ",
		"Dou ",
		"Fen ",
		"Mao ",
		"Shen ",
		"Dou ",
		"Bai ",
		"Jing ",
		"Li ",
		"Huang ",
		"Ru ",
		"Wang ",
		"Nei ",
		"Quan ",
		"Liang ",
		"Yu ",
		"Ba ",
		"Gong ",
		"Liu ",
		"Xi ",
		"[?] ",
		"Lan ",
		"Gong ",
		"Tian ",
		"Guan ",
		"Xing ",
		"Bing ",
		"Qi ",
		"Ju ",
		"Dian ",
		"Zi ",
		"Ppwun ",
		"Yang ",
		"Jian ",
		"Shou ",
		"Ji ",
		"Yi ",
		"Ji ",
		"Chan ",
		"Jiong ",
		"Mao ",
		"Ran ",
		"Nei ",
		"Yuan ",
		"Mao ",
		"Gang ",
		"Ran ",
		"Ce ",
		"Jiong ",
		"Ce ",
		"Zai ",
		"Gua ",
		"Jiong ",
		"Mao ",
		"Zhou ",
		"Mou ",
		"Gou ",
		"Xu ",
		"Mian ",
		"Mi ",
		"Rong ",
		"Yin ",
		"Xie ",
		"Kan ",
		"Jun ",
		"Nong ",
		"Yi ",
		"Mi ",
		"Shi ",
		"Guan ",
		"Meng ",
		"Zhong ",
		"Ju ",
		"Yuan ",
		"Ming ",
		"Kou ",
		"Lam ",
		"Fu ",
		"Xie ",
		"Mi ",
		"Bing ",
		"Dong ",
		"Tai ",
		"Gang ",
		"Feng ",
		"Bing ",
		"Hu ",
		"Chong ",
		"Jue ",
		"Hu ",
		"Kuang ",
		"Ye ",
		"Leng ",
		"Pan ",
		"Fu ",
		"Min ",
		"Dong ",
		"Xian ",
		"Lie ",
		"Xia ",
		"Jian ",
		"Jing ",
		"Shu ",
		"Mei ",
		"Tu ",
		"Qi ",
		"Gu ",
		"Zhun ",
		"Song ",
		"Jing ",
		"Liang ",
		"Qing ",
		"Diao ",
		"Ling ",
		"Dong ",
		"Gan ",
		"Jian ",
		"Yin ",
		"Cou ",
		"Yi ",
		"Li ",
		"Cang ",
		"Ming ",
		"Zhuen ",
		"Cui ",
		"Si ",
		"Duo ",
		"Jin ",
		"Lin ",
		"Lin ",
		"Ning ",
		"Xi ",
		"Du ",
		"Ji ",
		"Fan ",
		"Fan ",
		"Fan ",
		"Feng ",
		"Ju ",
		"Chu ",
		"Tako ",
		"Feng ",
		"Mok ",
		"Ci ",
		"Fu ",
		"Feng ",
		"Ping ",
		"Feng ",
		"Kai ",
		"Huang ",
		"Kai ",
		"Gan ",
		"Deng ",
		"Ping ",
		"Qu ",
		"Xiong ",
		"Kuai ",
		"Tu ",
		"Ao ",
		"Chu ",
		"Ji ",
		"Dang ",
		"Han ",
		"Han ",
		"Zao "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x52.js
var require_x52 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Dao ",
		"Diao ",
		"Dao ",
		"Ren ",
		"Ren ",
		"Chuang ",
		"Fen ",
		"Qie ",
		"Yi ",
		"Ji ",
		"Kan ",
		"Qian ",
		"Cun ",
		"Chu ",
		"Wen ",
		"Ji ",
		"Dan ",
		"Xing ",
		"Hua ",
		"Wan ",
		"Jue ",
		"Li ",
		"Yue ",
		"Lie ",
		"Liu ",
		"Ze ",
		"Gang ",
		"Chuang ",
		"Fu ",
		"Chu ",
		"Qu ",
		"Ju ",
		"Shan ",
		"Min ",
		"Ling ",
		"Zhong ",
		"Pan ",
		"Bie ",
		"Jie ",
		"Jie ",
		"Bao ",
		"Li ",
		"Shan ",
		"Bie ",
		"Chan ",
		"Jing ",
		"Gua ",
		"Gen ",
		"Dao ",
		"Chuang ",
		"Kui ",
		"Ku ",
		"Duo ",
		"Er ",
		"Zhi ",
		"Shua ",
		"Quan ",
		"Cha ",
		"Ci ",
		"Ke ",
		"Jie ",
		"Gui ",
		"Ci ",
		"Gui ",
		"Kai ",
		"Duo ",
		"Ji ",
		"Ti ",
		"Jing ",
		"Lou ",
		"Gen ",
		"Ze ",
		"Yuan ",
		"Cuo ",
		"Xue ",
		"Ke ",
		"La ",
		"Qian ",
		"Cha ",
		"Chuang ",
		"Gua ",
		"Jian ",
		"Cuo ",
		"Li ",
		"Ti ",
		"Fei ",
		"Pou ",
		"Chan ",
		"Qi ",
		"Chuang ",
		"Zi ",
		"Gang ",
		"Wan ",
		"Bo ",
		"Ji ",
		"Duo ",
		"Qing ",
		"Yan ",
		"Zhuo ",
		"Jian ",
		"Ji ",
		"Bo ",
		"Yan ",
		"Ju ",
		"Huo ",
		"Sheng ",
		"Jian ",
		"Duo ",
		"Duan ",
		"Wu ",
		"Gua ",
		"Fu ",
		"Sheng ",
		"Jian ",
		"Ge ",
		"Zha ",
		"Kai ",
		"Chuang ",
		"Juan ",
		"Chan ",
		"Tuan ",
		"Lu ",
		"Li ",
		"Fou ",
		"Shan ",
		"Piao ",
		"Kou ",
		"Jiao ",
		"Gua ",
		"Qiao ",
		"Jue ",
		"Hua ",
		"Zha ",
		"Zhuo ",
		"Lian ",
		"Ju ",
		"Pi ",
		"Liu ",
		"Gui ",
		"Jiao ",
		"Gui ",
		"Jian ",
		"Jian ",
		"Tang ",
		"Huo ",
		"Ji ",
		"Jian ",
		"Yi ",
		"Jian ",
		"Zhi ",
		"Chan ",
		"Cuan ",
		"Mo ",
		"Li ",
		"Zhu ",
		"Li ",
		"Ya ",
		"Quan ",
		"Ban ",
		"Gong ",
		"Jia ",
		"Wu ",
		"Mai ",
		"Lie ",
		"Jin ",
		"Keng ",
		"Xie ",
		"Zhi ",
		"Dong ",
		"Zhu ",
		"Nu ",
		"Jie ",
		"Qu ",
		"Shao ",
		"Yi ",
		"Zhu ",
		"Miao ",
		"Li ",
		"Jing ",
		"Lao ",
		"Lao ",
		"Juan ",
		"Kou ",
		"Yang ",
		"Wa ",
		"Xiao ",
		"Mou ",
		"Kuang ",
		"Jie ",
		"Lie ",
		"He ",
		"Shi ",
		"Ke ",
		"Jing ",
		"Hao ",
		"Bo ",
		"Min ",
		"Chi ",
		"Lang ",
		"Yong ",
		"Yong ",
		"Mian ",
		"Ke ",
		"Xun ",
		"Juan ",
		"Qing ",
		"Lu ",
		"Pou ",
		"Meng ",
		"Lai ",
		"Le ",
		"Kai ",
		"Mian ",
		"Dong ",
		"Xu ",
		"Xu ",
		"Kan ",
		"Wu ",
		"Yi ",
		"Xun ",
		"Weng ",
		"Sheng ",
		"Lao ",
		"Mu ",
		"Lu ",
		"Piao ",
		"Shi ",
		"Ji ",
		"Qin ",
		"Qiang ",
		"Jiao ",
		"Quan ",
		"Yang ",
		"Yi ",
		"Jue ",
		"Fan ",
		"Juan ",
		"Tong ",
		"Ju ",
		"Dan ",
		"Xie ",
		"Mai ",
		"Xun ",
		"Xun ",
		"Lu ",
		"Li ",
		"Che ",
		"Rang ",
		"Quan ",
		"Bao ",
		"Shao ",
		"Yun ",
		"Jiu ",
		"Bao ",
		"Gou ",
		"Wu "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x53.js
var require_x53 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Yun ",
		"Mwun ",
		"Nay ",
		"Gai ",
		"Gai ",
		"Bao ",
		"Cong ",
		"[?] ",
		"Xiong ",
		"Peng ",
		"Ju ",
		"Tao ",
		"Ge ",
		"Pu ",
		"An ",
		"Pao ",
		"Fu ",
		"Gong ",
		"Da ",
		"Jiu ",
		"Qiong ",
		"Bi ",
		"Hua ",
		"Bei ",
		"Nao ",
		"Chi ",
		"Fang ",
		"Jiu ",
		"Yi ",
		"Za ",
		"Jiang ",
		"Kang ",
		"Jiang ",
		"Kuang ",
		"Hu ",
		"Xia ",
		"Qu ",
		"Bian ",
		"Gui ",
		"Qie ",
		"Zang ",
		"Kuang ",
		"Fei ",
		"Hu ",
		"Tou ",
		"Gui ",
		"Gui ",
		"Hui ",
		"Dan ",
		"Gui ",
		"Lian ",
		"Lian ",
		"Suan ",
		"Du ",
		"Jiu ",
		"Qu ",
		"Xi ",
		"Pi ",
		"Qu ",
		"Yi ",
		"Qia ",
		"Yan ",
		"Bian ",
		"Ni ",
		"Qu ",
		"Shi ",
		"Xin ",
		"Qian ",
		"Nian ",
		"Sa ",
		"Zu ",
		"Sheng ",
		"Wu ",
		"Hui ",
		"Ban ",
		"Shi ",
		"Xi ",
		"Wan ",
		"Hua ",
		"Xie ",
		"Wan ",
		"Bei ",
		"Zu ",
		"Zhuo ",
		"Xie ",
		"Dan ",
		"Mai ",
		"Nan ",
		"Dan ",
		"Ji ",
		"Bo ",
		"Shuai ",
		"Bu ",
		"Kuang ",
		"Bian ",
		"Bu ",
		"Zhan ",
		"Qia ",
		"Lu ",
		"You ",
		"Lu ",
		"Xi ",
		"Gua ",
		"Wo ",
		"Xie ",
		"Jie ",
		"Jie ",
		"Wei ",
		"Ang ",
		"Qiong ",
		"Zhi ",
		"Mao ",
		"Yin ",
		"Wei ",
		"Shao ",
		"Ji ",
		"Que ",
		"Luan ",
		"Shi ",
		"Juan ",
		"Xie ",
		"Xu ",
		"Jin ",
		"Que ",
		"Wu ",
		"Ji ",
		"E ",
		"Qing ",
		"Xi ",
		"[?] ",
		"Han ",
		"Zhan ",
		"E ",
		"Ting ",
		"Li ",
		"Zhe ",
		"Han ",
		"Li ",
		"Ya ",
		"Ya ",
		"Yan ",
		"She ",
		"Zhi ",
		"Zha ",
		"Pang ",
		"[?] ",
		"He ",
		"Ya ",
		"Zhi ",
		"Ce ",
		"Pang ",
		"Ti ",
		"Li ",
		"She ",
		"Hou ",
		"Ting ",
		"Zui ",
		"Cuo ",
		"Fei ",
		"Yuan ",
		"Ce ",
		"Yuan ",
		"Xiang ",
		"Yan ",
		"Li ",
		"Jue ",
		"Sha ",
		"Dian ",
		"Chu ",
		"Jiu ",
		"Qin ",
		"Ao ",
		"Gui ",
		"Yan ",
		"Si ",
		"Li ",
		"Chang ",
		"Lan ",
		"Li ",
		"Yan ",
		"Yan ",
		"Yuan ",
		"Si ",
		"Gong ",
		"Lin ",
		"Qiu ",
		"Qu ",
		"Qu ",
		"Uk ",
		"Lei ",
		"Du ",
		"Xian ",
		"Zhuan ",
		"San ",
		"Can ",
		"Can ",
		"Can ",
		"Can ",
		"Ai ",
		"Dai ",
		"You ",
		"Cha ",
		"Ji ",
		"You ",
		"Shuang ",
		"Fan ",
		"Shou ",
		"Guai ",
		"Ba ",
		"Fa ",
		"Ruo ",
		"Shi ",
		"Shu ",
		"Zhuo ",
		"Qu ",
		"Shou ",
		"Bian ",
		"Xu ",
		"Jia ",
		"Pan ",
		"Sou ",
		"Gao ",
		"Wei ",
		"Sou ",
		"Die ",
		"Rui ",
		"Cong ",
		"Kou ",
		"Gu ",
		"Ju ",
		"Ling ",
		"Gua ",
		"Tao ",
		"Kou ",
		"Zhi ",
		"Jiao ",
		"Zhao ",
		"Ba ",
		"Ding ",
		"Ke ",
		"Tai ",
		"Chi ",
		"Shi ",
		"You ",
		"Qiu ",
		"Po ",
		"Xie ",
		"Hao ",
		"Si ",
		"Tan ",
		"Chi ",
		"Le ",
		"Diao ",
		"Ji ",
		"[?] ",
		"Hong "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x54.js
var require_x54 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Mie ",
		"Xu ",
		"Mang ",
		"Chi ",
		"Ge ",
		"Xuan ",
		"Yao ",
		"Zi ",
		"He ",
		"Ji ",
		"Diao ",
		"Cun ",
		"Tong ",
		"Ming ",
		"Hou ",
		"Li ",
		"Tu ",
		"Xiang ",
		"Zha ",
		"Xia ",
		"Ye ",
		"Lu ",
		"A ",
		"Ma ",
		"Ou ",
		"Xue ",
		"Yi ",
		"Jun ",
		"Chou ",
		"Lin ",
		"Tun ",
		"Yin ",
		"Fei ",
		"Bi ",
		"Qin ",
		"Qin ",
		"Jie ",
		"Bu ",
		"Fou ",
		"Ba ",
		"Dun ",
		"Fen ",
		"E ",
		"Han ",
		"Ting ",
		"Hang ",
		"Shun ",
		"Qi ",
		"Hong ",
		"Zhi ",
		"Shen ",
		"Wu ",
		"Wu ",
		"Chao ",
		"Ne ",
		"Xue ",
		"Xi ",
		"Chui ",
		"Dou ",
		"Wen ",
		"Hou ",
		"Ou ",
		"Wu ",
		"Gao ",
		"Ya ",
		"Jun ",
		"Lu ",
		"E ",
		"Ge ",
		"Mei ",
		"Ai ",
		"Qi ",
		"Cheng ",
		"Wu ",
		"Gao ",
		"Fu ",
		"Jiao ",
		"Hong ",
		"Chi ",
		"Sheng ",
		"Ne ",
		"Tun ",
		"Fu ",
		"Yi ",
		"Dai ",
		"Ou ",
		"Li ",
		"Bai ",
		"Yuan ",
		"Kuai ",
		"[?] ",
		"Qiang ",
		"Wu ",
		"E ",
		"Shi ",
		"Quan ",
		"Pen ",
		"Wen ",
		"Ni ",
		"M ",
		"Ling ",
		"Ran ",
		"You ",
		"Di ",
		"Zhou ",
		"Shi ",
		"Zhou ",
		"Tie ",
		"Xi ",
		"Yi ",
		"Qi ",
		"Ping ",
		"Zi ",
		"Gu ",
		"Zi ",
		"Wei ",
		"Xu ",
		"He ",
		"Nao ",
		"Xia ",
		"Pei ",
		"Yi ",
		"Xiao ",
		"Shen ",
		"Hu ",
		"Ming ",
		"Da ",
		"Qu ",
		"Ju ",
		"Gem ",
		"Za ",
		"Tuo ",
		"Duo ",
		"Pou ",
		"Pao ",
		"Bi ",
		"Fu ",
		"Yang ",
		"He ",
		"Zha ",
		"He ",
		"Hai ",
		"Jiu ",
		"Yong ",
		"Fu ",
		"Que ",
		"Zhou ",
		"Wa ",
		"Ka ",
		"Gu ",
		"Ka ",
		"Zuo ",
		"Bu ",
		"Long ",
		"Dong ",
		"Ning ",
		"Tha ",
		"Si ",
		"Xian ",
		"Huo ",
		"Qi ",
		"Er ",
		"E ",
		"Guang ",
		"Zha ",
		"Xi ",
		"Yi ",
		"Lie ",
		"Zi ",
		"Mie ",
		"Mi ",
		"Zhi ",
		"Yao ",
		"Ji ",
		"Zhou ",
		"Ge ",
		"Shuai ",
		"Zan ",
		"Xiao ",
		"Ke ",
		"Hui ",
		"Kua ",
		"Huai ",
		"Tao ",
		"Xian ",
		"E ",
		"Xuan ",
		"Xiu ",
		"Wai ",
		"Yan ",
		"Lao ",
		"Yi ",
		"Ai ",
		"Pin ",
		"Shen ",
		"Tong ",
		"Hong ",
		"Xiong ",
		"Chi ",
		"Wa ",
		"Ha ",
		"Zai ",
		"Yu ",
		"Di ",
		"Pai ",
		"Xiang ",
		"Ai ",
		"Hen ",
		"Kuang ",
		"Ya ",
		"Da ",
		"Xiao ",
		"Bi ",
		"Yue ",
		"[?] ",
		"Hua ",
		"Sasou ",
		"Kuai ",
		"Duo ",
		"[?] ",
		"Ji ",
		"Nong ",
		"Mou ",
		"Yo ",
		"Hao ",
		"Yuan ",
		"Long ",
		"Pou ",
		"Mang ",
		"Ge ",
		"E ",
		"Chi ",
		"Shao ",
		"Li ",
		"Na ",
		"Zu ",
		"He ",
		"Ku ",
		"Xiao ",
		"Xian ",
		"Lao ",
		"Bo ",
		"Zhe ",
		"Zha ",
		"Liang ",
		"Ba ",
		"Mie ",
		"Le ",
		"Sui ",
		"Fou ",
		"Bu ",
		"Han ",
		"Heng ",
		"Geng ",
		"Shuo ",
		"Ge "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x55.js
var require_x55 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"You ",
		"Yan ",
		"Gu ",
		"Gu ",
		"Bai ",
		"Han ",
		"Suo ",
		"Chun ",
		"Yi ",
		"Ai ",
		"Jia ",
		"Tu ",
		"Xian ",
		"Huan ",
		"Li ",
		"Xi ",
		"Tang ",
		"Zuo ",
		"Qiu ",
		"Che ",
		"Wu ",
		"Zao ",
		"Ya ",
		"Dou ",
		"Qi ",
		"Di ",
		"Qin ",
		"Ma ",
		"Mal ",
		"Hong ",
		"Dou ",
		"Kes ",
		"Lao ",
		"Liang ",
		"Suo ",
		"Zao ",
		"Huan ",
		"Lang ",
		"Sha ",
		"Ji ",
		"Zuo ",
		"Wo ",
		"Feng ",
		"Yin ",
		"Hu ",
		"Qi ",
		"Shou ",
		"Wei ",
		"Shua ",
		"Chang ",
		"Er ",
		"Li ",
		"Qiang ",
		"An ",
		"Jie ",
		"Yo ",
		"Nian ",
		"Yu ",
		"Tian ",
		"Lai ",
		"Sha ",
		"Xi ",
		"Tuo ",
		"Hu ",
		"Ai ",
		"Zhou ",
		"Nou ",
		"Ken ",
		"Zhuo ",
		"Zhuo ",
		"Shang ",
		"Di ",
		"Heng ",
		"Lan ",
		"A ",
		"Xiao ",
		"Xiang ",
		"Tun ",
		"Wu ",
		"Wen ",
		"Cui ",
		"Sha ",
		"Hu ",
		"Qi ",
		"Qi ",
		"Tao ",
		"Dan ",
		"Dan ",
		"Ye ",
		"Zi ",
		"Bi ",
		"Cui ",
		"Chuo ",
		"He ",
		"Ya ",
		"Qi ",
		"Zhe ",
		"Pei ",
		"Liang ",
		"Xian ",
		"Pi ",
		"Sha ",
		"La ",
		"Ze ",
		"Qing ",
		"Gua ",
		"Pa ",
		"Zhe ",
		"Se ",
		"Zhuan ",
		"Nie ",
		"Guo ",
		"Luo ",
		"Yan ",
		"Di ",
		"Quan ",
		"Tan ",
		"Bo ",
		"Ding ",
		"Lang ",
		"Xiao ",
		"[?] ",
		"Tang ",
		"Chi ",
		"Ti ",
		"An ",
		"Jiu ",
		"Dan ",
		"Ke ",
		"Yong ",
		"Wei ",
		"Nan ",
		"Shan ",
		"Yu ",
		"Zhe ",
		"La ",
		"Jie ",
		"Hou ",
		"Han ",
		"Die ",
		"Zhou ",
		"Chai ",
		"Wai ",
		"Re ",
		"Yu ",
		"Yin ",
		"Zan ",
		"Yao ",
		"Wo ",
		"Mian ",
		"Hu ",
		"Yun ",
		"Chuan ",
		"Hui ",
		"Huan ",
		"Huan ",
		"Xi ",
		"He ",
		"Ji ",
		"Kui ",
		"Zhong ",
		"Wei ",
		"Sha ",
		"Xu ",
		"Huang ",
		"Du ",
		"Nie ",
		"Xuan ",
		"Liang ",
		"Yu ",
		"Sang ",
		"Chi ",
		"Qiao ",
		"Yan ",
		"Dan ",
		"Pen ",
		"Can ",
		"Li ",
		"Yo ",
		"Zha ",
		"Wei ",
		"Miao ",
		"Ying ",
		"Pen ",
		"Phos ",
		"Kui ",
		"Xi ",
		"Yu ",
		"Jie ",
		"Lou ",
		"Ku ",
		"Sao ",
		"Huo ",
		"Ti ",
		"Yao ",
		"He ",
		"A ",
		"Xiu ",
		"Qiang ",
		"Se ",
		"Yong ",
		"Su ",
		"Hong ",
		"Xie ",
		"Yi ",
		"Suo ",
		"Ma ",
		"Cha ",
		"Hai ",
		"Ke ",
		"Ta ",
		"Sang ",
		"Tian ",
		"Ru ",
		"Sou ",
		"Wa ",
		"Ji ",
		"Pang ",
		"Wu ",
		"Xian ",
		"Shi ",
		"Ge ",
		"Zi ",
		"Jie ",
		"Luo ",
		"Weng ",
		"Wa ",
		"Si ",
		"Chi ",
		"Hao ",
		"Suo ",
		"Jia ",
		"Hai ",
		"Suo ",
		"Qin ",
		"Nie ",
		"He ",
		"Cis ",
		"Sai ",
		"Ng ",
		"Ge ",
		"Na ",
		"Dia ",
		"Ai ",
		"[?] ",
		"Tong ",
		"Bi ",
		"Ao ",
		"Ao ",
		"Lian ",
		"Cui ",
		"Zhe ",
		"Mo ",
		"Sou ",
		"Sou ",
		"Tan "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x56.js
var require_x56 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Di ",
		"Qi ",
		"Jiao ",
		"Chong ",
		"Jiao ",
		"Kai ",
		"Tan ",
		"San ",
		"Cao ",
		"Jia ",
		"Ai ",
		"Xiao ",
		"Piao ",
		"Lou ",
		"Ga ",
		"Gu ",
		"Xiao ",
		"Hu ",
		"Hui ",
		"Guo ",
		"Ou ",
		"Xian ",
		"Ze ",
		"Chang ",
		"Xu ",
		"Po ",
		"De ",
		"Ma ",
		"Ma ",
		"Hu ",
		"Lei ",
		"Du ",
		"Ga ",
		"Tang ",
		"Ye ",
		"Beng ",
		"Ying ",
		"Saai ",
		"Jiao ",
		"Mi ",
		"Xiao ",
		"Hua ",
		"Mai ",
		"Ran ",
		"Zuo ",
		"Peng ",
		"Lao ",
		"Xiao ",
		"Ji ",
		"Zhu ",
		"Chao ",
		"Kui ",
		"Zui ",
		"Xiao ",
		"Si ",
		"Hao ",
		"Fu ",
		"Liao ",
		"Qiao ",
		"Xi ",
		"Xiu ",
		"Tan ",
		"Tan ",
		"Mo ",
		"Xun ",
		"E ",
		"Zun ",
		"Fan ",
		"Chi ",
		"Hui ",
		"Zan ",
		"Chuang ",
		"Cu ",
		"Dan ",
		"Yu ",
		"Tun ",
		"Cheng ",
		"Jiao ",
		"Ye ",
		"Xi ",
		"Qi ",
		"Hao ",
		"Lian ",
		"Xu ",
		"Deng ",
		"Hui ",
		"Yin ",
		"Pu ",
		"Jue ",
		"Qin ",
		"Xun ",
		"Nie ",
		"Lu ",
		"Si ",
		"Yan ",
		"Ying ",
		"Da ",
		"Dan ",
		"Yu ",
		"Zhou ",
		"Jin ",
		"Nong ",
		"Yue ",
		"Hui ",
		"Qi ",
		"E ",
		"Zao ",
		"Yi ",
		"Shi ",
		"Jiao ",
		"Yuan ",
		"Ai ",
		"Yong ",
		"Jue ",
		"Kuai ",
		"Yu ",
		"Pen ",
		"Dao ",
		"Ge ",
		"Xin ",
		"Dun ",
		"Dang ",
		"Sin ",
		"Sai ",
		"Pi ",
		"Pi ",
		"Yin ",
		"Zui ",
		"Ning ",
		"Di ",
		"Lan ",
		"Ta ",
		"Huo ",
		"Ru ",
		"Hao ",
		"Xia ",
		"Ya ",
		"Duo ",
		"Xi ",
		"Chou ",
		"Ji ",
		"Jin ",
		"Hao ",
		"Ti ",
		"Chang ",
		"[?] ",
		"[?] ",
		"Ca ",
		"Ti ",
		"Lu ",
		"Hui ",
		"Bo ",
		"You ",
		"Nie ",
		"Yin ",
		"Hu ",
		"Mo ",
		"Huang ",
		"Zhe ",
		"Li ",
		"Liu ",
		"Haai ",
		"Nang ",
		"Xiao ",
		"Mo ",
		"Yan ",
		"Li ",
		"Lu ",
		"Long ",
		"Fu ",
		"Dan ",
		"Chen ",
		"Pin ",
		"Pi ",
		"Xiang ",
		"Huo ",
		"Mo ",
		"Xi ",
		"Duo ",
		"Ku ",
		"Yan ",
		"Chan ",
		"Ying ",
		"Rang ",
		"Dian ",
		"La ",
		"Ta ",
		"Xiao ",
		"Jiao ",
		"Chuo ",
		"Huan ",
		"Huo ",
		"Zhuan ",
		"Nie ",
		"Xiao ",
		"Ca ",
		"Li ",
		"Chan ",
		"Chai ",
		"Li ",
		"Yi ",
		"Luo ",
		"Nang ",
		"Zan ",
		"Su ",
		"Xi ",
		"So ",
		"Jian ",
		"Za ",
		"Zhu ",
		"Lan ",
		"Nie ",
		"Nang ",
		"[?] ",
		"[?] ",
		"Wei ",
		"Hui ",
		"Yin ",
		"Qiu ",
		"Si ",
		"Nin ",
		"Jian ",
		"Hui ",
		"Xin ",
		"Yin ",
		"Nan ",
		"Tuan ",
		"Tuan ",
		"Dun ",
		"Kang ",
		"Yuan ",
		"Jiong ",
		"Pian ",
		"Yun ",
		"Cong ",
		"Hu ",
		"Hui ",
		"Yuan ",
		"You ",
		"Guo ",
		"Kun ",
		"Cong ",
		"Wei ",
		"Tu ",
		"Wei ",
		"Lun ",
		"Guo ",
		"Qun ",
		"Ri ",
		"Ling ",
		"Gu ",
		"Guo ",
		"Tai ",
		"Guo ",
		"Tu ",
		"You "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x57.js
var require_x57 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Guo ",
		"Yin ",
		"Hun ",
		"Pu ",
		"Yu ",
		"Han ",
		"Yuan ",
		"Lun ",
		"Quan ",
		"Yu ",
		"Qing ",
		"Guo ",
		"Chuan ",
		"Wei ",
		"Yuan ",
		"Quan ",
		"Ku ",
		"Fu ",
		"Yuan ",
		"Yuan ",
		"E ",
		"Tu ",
		"Tu ",
		"Tu ",
		"Tuan ",
		"Lue ",
		"Hui ",
		"Yi ",
		"Yuan ",
		"Luan ",
		"Luan ",
		"Tu ",
		"Ya ",
		"Tu ",
		"Ting ",
		"Sheng ",
		"Pu ",
		"Lu ",
		"Iri ",
		"Ya ",
		"Zai ",
		"Wei ",
		"Ge ",
		"Yu ",
		"Wu ",
		"Gui ",
		"Pi ",
		"Yi ",
		"Di ",
		"Qian ",
		"Qian ",
		"Zhen ",
		"Zhuo ",
		"Dang ",
		"Qia ",
		"Akutsu ",
		"Yama ",
		"Kuang ",
		"Chang ",
		"Qi ",
		"Nie ",
		"Mo ",
		"Ji ",
		"Jia ",
		"Zhi ",
		"Zhi ",
		"Ban ",
		"Xun ",
		"Tou ",
		"Qin ",
		"Fen ",
		"Jun ",
		"Keng ",
		"Tun ",
		"Fang ",
		"Fen ",
		"Ben ",
		"Tan ",
		"Kan ",
		"Pi ",
		"Zuo ",
		"Keng ",
		"Bi ",
		"Xing ",
		"Di ",
		"Jing ",
		"Ji ",
		"Kuai ",
		"Di ",
		"Jing ",
		"Jian ",
		"Tan ",
		"Li ",
		"Ba ",
		"Wu ",
		"Fen ",
		"Zhui ",
		"Po ",
		"Pan ",
		"Tang ",
		"Kun ",
		"Qu ",
		"Tan ",
		"Zhi ",
		"Tuo ",
		"Gan ",
		"Ping ",
		"Dian ",
		"Gua ",
		"Ni ",
		"Tai ",
		"Pi ",
		"Jiong ",
		"Yang ",
		"Fo ",
		"Ao ",
		"Liu ",
		"Qiu ",
		"Mu ",
		"Ke ",
		"Gou ",
		"Xue ",
		"Ba ",
		"Chi ",
		"Che ",
		"Ling ",
		"Zhu ",
		"Fu ",
		"Hu ",
		"Zhi ",
		"Chui ",
		"La ",
		"Long ",
		"Long ",
		"Lu ",
		"Ao ",
		"Tay ",
		"Pao ",
		"[?] ",
		"Xing ",
		"Dong ",
		"Ji ",
		"Ke ",
		"Lu ",
		"Ci ",
		"Chi ",
		"Lei ",
		"Gai ",
		"Yin ",
		"Hou ",
		"Dui ",
		"Zhao ",
		"Fu ",
		"Guang ",
		"Yao ",
		"Duo ",
		"Duo ",
		"Gui ",
		"Cha ",
		"Yang ",
		"Yin ",
		"Fa ",
		"Gou ",
		"Yuan ",
		"Die ",
		"Xie ",
		"Ken ",
		"Jiong ",
		"Shou ",
		"E ",
		"Ha ",
		"Dian ",
		"Hong ",
		"Wu ",
		"Kua ",
		"[?] ",
		"Tao ",
		"Dang ",
		"Kai ",
		"Gake ",
		"Nao ",
		"An ",
		"Xing ",
		"Xian ",
		"Huan ",
		"Bang ",
		"Pei ",
		"Ba ",
		"Yi ",
		"Yin ",
		"Han ",
		"Xu ",
		"Chui ",
		"Cen ",
		"Geng ",
		"Ai ",
		"Peng ",
		"Fang ",
		"Que ",
		"Yong ",
		"Xun ",
		"Jia ",
		"Di ",
		"Mai ",
		"Lang ",
		"Xuan ",
		"Cheng ",
		"Yan ",
		"Jin ",
		"Zhe ",
		"Lei ",
		"Lie ",
		"Bu ",
		"Cheng ",
		"Gomi ",
		"Bu ",
		"Shi ",
		"Xun ",
		"Guo ",
		"Jiong ",
		"Ye ",
		"Nian ",
		"Di ",
		"Yu ",
		"Bu ",
		"Ya ",
		"Juan ",
		"Sui ",
		"Pi ",
		"Cheng ",
		"Wan ",
		"Ju ",
		"Lun ",
		"Zheng ",
		"Kong ",
		"Chong ",
		"Dong ",
		"Dai ",
		"Tan ",
		"An ",
		"Cai ",
		"Shu ",
		"Beng ",
		"Kan ",
		"Zhi ",
		"Duo ",
		"Yi ",
		"Zhi ",
		"Yi ",
		"Pei ",
		"Ji ",
		"Zhun ",
		"Qi ",
		"Sao ",
		"Ju ",
		"Ni "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x58.js
var require_x58 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ku ",
		"Ke ",
		"Tang ",
		"Kun ",
		"Ni ",
		"Jian ",
		"Dui ",
		"Jin ",
		"Gang ",
		"Yu ",
		"E ",
		"Peng ",
		"Gu ",
		"Tu ",
		"Leng ",
		"[?] ",
		"Ya ",
		"Qian ",
		"[?] ",
		"An ",
		"[?] ",
		"Duo ",
		"Nao ",
		"Tu ",
		"Cheng ",
		"Yin ",
		"Hun ",
		"Bi ",
		"Lian ",
		"Guo ",
		"Die ",
		"Zhuan ",
		"Hou ",
		"Bao ",
		"Bao ",
		"Yu ",
		"Di ",
		"Mao ",
		"Jie ",
		"Ruan ",
		"E ",
		"Geng ",
		"Kan ",
		"Zong ",
		"Yu ",
		"Huang ",
		"E ",
		"Yao ",
		"Yan ",
		"Bao ",
		"Ji ",
		"Mei ",
		"Chang ",
		"Du ",
		"Tuo ",
		"Yin ",
		"Feng ",
		"Zhong ",
		"Jie ",
		"Zhen ",
		"Feng ",
		"Gang ",
		"Chuan ",
		"Jian ",
		"Pyeng ",
		"Toride ",
		"Xiang ",
		"Huang ",
		"Leng ",
		"Duan ",
		"[?] ",
		"Xuan ",
		"Ji ",
		"Ji ",
		"Kuai ",
		"Ying ",
		"Ta ",
		"Cheng ",
		"Yong ",
		"Kai ",
		"Su ",
		"Su ",
		"Shi ",
		"Mi ",
		"Ta ",
		"Weng ",
		"Cheng ",
		"Tu ",
		"Tang ",
		"Que ",
		"Zhong ",
		"Li ",
		"Peng ",
		"Bang ",
		"Sai ",
		"Zang ",
		"Dui ",
		"Tian ",
		"Wu ",
		"Cheng ",
		"Xun ",
		"Ge ",
		"Zhen ",
		"Ai ",
		"Gong ",
		"Yan ",
		"Kan ",
		"Tian ",
		"Yuan ",
		"Wen ",
		"Xie ",
		"Liu ",
		"Ama ",
		"Lang ",
		"Chang ",
		"Peng ",
		"Beng ",
		"Chen ",
		"Cu ",
		"Lu ",
		"Ou ",
		"Qian ",
		"Mei ",
		"Mo ",
		"Zhuan ",
		"Shuang ",
		"Shu ",
		"Lou ",
		"Chi ",
		"Man ",
		"Biao ",
		"Jing ",
		"Qi ",
		"Shu ",
		"Di ",
		"Zhang ",
		"Kan ",
		"Yong ",
		"Dian ",
		"Chen ",
		"Zhi ",
		"Xi ",
		"Guo ",
		"Qiang ",
		"Jin ",
		"Di ",
		"Shang ",
		"Mu ",
		"Cui ",
		"Yan ",
		"Ta ",
		"Zeng ",
		"Qi ",
		"Qiang ",
		"Liang ",
		"[?] ",
		"Zhui ",
		"Qiao ",
		"Zeng ",
		"Xu ",
		"Shan ",
		"Shan ",
		"Ba ",
		"Pu ",
		"Kuai ",
		"Dong ",
		"Fan ",
		"Que ",
		"Mo ",
		"Dun ",
		"Dun ",
		"Dun ",
		"Di ",
		"Sheng ",
		"Duo ",
		"Duo ",
		"Tan ",
		"Deng ",
		"Wu ",
		"Fen ",
		"Huang ",
		"Tan ",
		"Da ",
		"Ye ",
		"Sho ",
		"Mama ",
		"Yu ",
		"Qiang ",
		"Ji ",
		"Qiao ",
		"Ken ",
		"Yi ",
		"Pi ",
		"Bi ",
		"Dian ",
		"Jiang ",
		"Ye ",
		"Yong ",
		"Bo ",
		"Tan ",
		"Lan ",
		"Ju ",
		"Huai ",
		"Dang ",
		"Rang ",
		"Qian ",
		"Xun ",
		"Lan ",
		"Xi ",
		"He ",
		"Ai ",
		"Ya ",
		"Dao ",
		"Hao ",
		"Ruan ",
		"Mama ",
		"Lei ",
		"Kuang ",
		"Lu ",
		"Yan ",
		"Tan ",
		"Wei ",
		"Huai ",
		"Long ",
		"Long ",
		"Rui ",
		"Li ",
		"Lin ",
		"Rang ",
		"Ten ",
		"Xun ",
		"Yan ",
		"Lei ",
		"Ba ",
		"[?] ",
		"Shi ",
		"Ren ",
		"[?] ",
		"Zhuang ",
		"Zhuang ",
		"Sheng ",
		"Yi ",
		"Mai ",
		"Ke ",
		"Zhu ",
		"Zhuang ",
		"Hu ",
		"Hu ",
		"Kun ",
		"Yi ",
		"Hu ",
		"Xu ",
		"Kun ",
		"Shou ",
		"Mang ",
		"Zun "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x59.js
var require_x59 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Shou ",
		"Yi ",
		"Zhi ",
		"Gu ",
		"Chu ",
		"Jiang ",
		"Feng ",
		"Bei ",
		"Cay ",
		"Bian ",
		"Sui ",
		"Qun ",
		"Ling ",
		"Fu ",
		"Zuo ",
		"Xia ",
		"Xiong ",
		"[?] ",
		"Nao ",
		"Xia ",
		"Kui ",
		"Xi ",
		"Wai ",
		"Yuan ",
		"Mao ",
		"Su ",
		"Duo ",
		"Duo ",
		"Ye ",
		"Qing ",
		"Uys ",
		"Gou ",
		"Gou ",
		"Qi ",
		"Meng ",
		"Meng ",
		"Yin ",
		"Huo ",
		"Chen ",
		"Da ",
		"Ze ",
		"Tian ",
		"Tai ",
		"Fu ",
		"Guai ",
		"Yao ",
		"Yang ",
		"Hang ",
		"Gao ",
		"Shi ",
		"Ben ",
		"Tai ",
		"Tou ",
		"Yan ",
		"Bi ",
		"Yi ",
		"Kua ",
		"Jia ",
		"Duo ",
		"Kwu ",
		"Kuang ",
		"Yun ",
		"Jia ",
		"Pa ",
		"En ",
		"Lian ",
		"Huan ",
		"Di ",
		"Yan ",
		"Pao ",
		"Quan ",
		"Qi ",
		"Nai ",
		"Feng ",
		"Xie ",
		"Fen ",
		"Dian ",
		"[?] ",
		"Kui ",
		"Zou ",
		"Huan ",
		"Qi ",
		"Kai ",
		"Zha ",
		"Ben ",
		"Yi ",
		"Jiang ",
		"Tao ",
		"Zang ",
		"Ben ",
		"Xi ",
		"Xiang ",
		"Fei ",
		"Diao ",
		"Xun ",
		"Keng ",
		"Dian ",
		"Ao ",
		"She ",
		"Weng ",
		"Pan ",
		"Ao ",
		"Wu ",
		"Ao ",
		"Jiang ",
		"Lian ",
		"Duo ",
		"Yun ",
		"Jiang ",
		"Shi ",
		"Fen ",
		"Huo ",
		"Bi ",
		"Lian ",
		"Duo ",
		"Nu ",
		"Nu ",
		"Ding ",
		"Nai ",
		"Qian ",
		"Jian ",
		"Ta ",
		"Jiu ",
		"Nan ",
		"Cha ",
		"Hao ",
		"Xian ",
		"Fan ",
		"Ji ",
		"Shuo ",
		"Ru ",
		"Fei ",
		"Wang ",
		"Hong ",
		"Zhuang ",
		"Fu ",
		"Ma ",
		"Dan ",
		"Ren ",
		"Fu ",
		"Jing ",
		"Yan ",
		"Xie ",
		"Wen ",
		"Zhong ",
		"Pa ",
		"Du ",
		"Ji ",
		"Keng ",
		"Zhong ",
		"Yao ",
		"Jin ",
		"Yun ",
		"Miao ",
		"Pei ",
		"Shi ",
		"Yue ",
		"Zhuang ",
		"Niu ",
		"Yan ",
		"Na ",
		"Xin ",
		"Fen ",
		"Bi ",
		"Yu ",
		"Tuo ",
		"Feng ",
		"Yuan ",
		"Fang ",
		"Wu ",
		"Yu ",
		"Gui ",
		"Du ",
		"Ba ",
		"Ni ",
		"Zhou ",
		"Zhuo ",
		"Zhao ",
		"Da ",
		"Nai ",
		"Yuan ",
		"Tou ",
		"Xuan ",
		"Zhi ",
		"E ",
		"Mei ",
		"Mo ",
		"Qi ",
		"Bi ",
		"Shen ",
		"Qie ",
		"E ",
		"He ",
		"Xu ",
		"Fa ",
		"Zheng ",
		"Min ",
		"Ban ",
		"Mu ",
		"Fu ",
		"Ling ",
		"Zi ",
		"Zi ",
		"Shi ",
		"Ran ",
		"Shan ",
		"Yang ",
		"Man ",
		"Jie ",
		"Gu ",
		"Si ",
		"Xing ",
		"Wei ",
		"Zi ",
		"Ju ",
		"Shan ",
		"Pin ",
		"Ren ",
		"Yao ",
		"Tong ",
		"Jiang ",
		"Shu ",
		"Ji ",
		"Gai ",
		"Shang ",
		"Kuo ",
		"Juan ",
		"Jiao ",
		"Gou ",
		"Mu ",
		"Jian ",
		"Jian ",
		"Yi ",
		"Nian ",
		"Zhi ",
		"Ji ",
		"Ji ",
		"Xian ",
		"Heng ",
		"Guang ",
		"Jun ",
		"Kua ",
		"Yan ",
		"Ming ",
		"Lie ",
		"Pei ",
		"Yan ",
		"You ",
		"Yan ",
		"Cha ",
		"Shen ",
		"Yin ",
		"Chi ",
		"Gui ",
		"Quan ",
		"Zi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x5a.js
var require_x5a = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Song ",
		"Wei ",
		"Hong ",
		"Wa ",
		"Lou ",
		"Ya ",
		"Rao ",
		"Jiao ",
		"Luan ",
		"Ping ",
		"Xian ",
		"Shao ",
		"Li ",
		"Cheng ",
		"Xiao ",
		"Mang ",
		"Fu ",
		"Suo ",
		"Wu ",
		"Wei ",
		"Ke ",
		"Lai ",
		"Chuo ",
		"Ding ",
		"Niang ",
		"Xing ",
		"Nan ",
		"Yu ",
		"Nuo ",
		"Pei ",
		"Nei ",
		"Juan ",
		"Shen ",
		"Zhi ",
		"Han ",
		"Di ",
		"Zhuang ",
		"E ",
		"Pin ",
		"Tui ",
		"Han ",
		"Mian ",
		"Wu ",
		"Yan ",
		"Wu ",
		"Xi ",
		"Yan ",
		"Yu ",
		"Si ",
		"Yu ",
		"Wa ",
		"[?] ",
		"Xian ",
		"Ju ",
		"Qu ",
		"Shui ",
		"Qi ",
		"Xian ",
		"Zhui ",
		"Dong ",
		"Chang ",
		"Lu ",
		"Ai ",
		"E ",
		"E ",
		"Lou ",
		"Mian ",
		"Cong ",
		"Pou ",
		"Ju ",
		"Po ",
		"Cai ",
		"Ding ",
		"Wan ",
		"Biao ",
		"Xiao ",
		"Shu ",
		"Qi ",
		"Hui ",
		"Fu ",
		"E ",
		"Wo ",
		"Tan ",
		"Fei ",
		"Wei ",
		"Jie ",
		"Tian ",
		"Ni ",
		"Quan ",
		"Jing ",
		"Hun ",
		"Jing ",
		"Qian ",
		"Dian ",
		"Xing ",
		"Hu ",
		"Wa ",
		"Lai ",
		"Bi ",
		"Yin ",
		"Chou ",
		"Chuo ",
		"Fu ",
		"Jing ",
		"Lun ",
		"Yan ",
		"Lan ",
		"Kun ",
		"Yin ",
		"Ya ",
		"Ju ",
		"Li ",
		"Dian ",
		"Xian ",
		"Hwa ",
		"Hua ",
		"Ying ",
		"Chan ",
		"Shen ",
		"Ting ",
		"Dang ",
		"Yao ",
		"Wu ",
		"Nan ",
		"Ruo ",
		"Jia ",
		"Tou ",
		"Xu ",
		"Yu ",
		"Wei ",
		"Ti ",
		"Rou ",
		"Mei ",
		"Dan ",
		"Ruan ",
		"Qin ",
		"Hui ",
		"Wu ",
		"Qian ",
		"Chun ",
		"Mao ",
		"Fu ",
		"Jie ",
		"Duan ",
		"Xi ",
		"Zhong ",
		"Mei ",
		"Huang ",
		"Mian ",
		"An ",
		"Ying ",
		"Xuan ",
		"Jie ",
		"Wei ",
		"Mei ",
		"Yuan ",
		"Zhen ",
		"Qiu ",
		"Ti ",
		"Xie ",
		"Tuo ",
		"Lian ",
		"Mao ",
		"Ran ",
		"Si ",
		"Pian ",
		"Wei ",
		"Wa ",
		"Jiu ",
		"Hu ",
		"Ao ",
		"[?] ",
		"Bou ",
		"Xu ",
		"Tou ",
		"Gui ",
		"Zou ",
		"Yao ",
		"Pi ",
		"Xi ",
		"Yuan ",
		"Ying ",
		"Rong ",
		"Ru ",
		"Chi ",
		"Liu ",
		"Mei ",
		"Pan ",
		"Ao ",
		"Ma ",
		"Gou ",
		"Kui ",
		"Qin ",
		"Jia ",
		"Sao ",
		"Zhen ",
		"Yuan ",
		"Cha ",
		"Yong ",
		"Ming ",
		"Ying ",
		"Ji ",
		"Su ",
		"Niao ",
		"Xian ",
		"Tao ",
		"Pang ",
		"Lang ",
		"Nao ",
		"Bao ",
		"Ai ",
		"Pi ",
		"Pin ",
		"Yi ",
		"Piao ",
		"Yu ",
		"Lei ",
		"Xuan ",
		"Man ",
		"Yi ",
		"Zhang ",
		"Kang ",
		"Yong ",
		"Ni ",
		"Li ",
		"Di ",
		"Gui ",
		"Yan ",
		"Jin ",
		"Zhuan ",
		"Chang ",
		"Ce ",
		"Han ",
		"Nen ",
		"Lao ",
		"Mo ",
		"Zhe ",
		"Hu ",
		"Hu ",
		"Ao ",
		"Nen ",
		"Qiang ",
		"Ma ",
		"Pie ",
		"Gu ",
		"Wu ",
		"Jiao ",
		"Tuo ",
		"Zhan ",
		"Mao ",
		"Xian ",
		"Xian ",
		"Mo ",
		"Liao ",
		"Lian ",
		"Hua "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x5b.js
var require_x5b = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Gui ",
		"Deng ",
		"Zhi ",
		"Xu ",
		"Yi ",
		"Hua ",
		"Xi ",
		"Hui ",
		"Rao ",
		"Xi ",
		"Yan ",
		"Chan ",
		"Jiao ",
		"Mei ",
		"Fan ",
		"Fan ",
		"Xian ",
		"Yi ",
		"Wei ",
		"Jiao ",
		"Fu ",
		"Shi ",
		"Bi ",
		"Shan ",
		"Sui ",
		"Qiang ",
		"Lian ",
		"Huan ",
		"Xin ",
		"Niao ",
		"Dong ",
		"Yi ",
		"Can ",
		"Ai ",
		"Niang ",
		"Neng ",
		"Ma ",
		"Tiao ",
		"Chou ",
		"Jin ",
		"Ci ",
		"Yu ",
		"Pin ",
		"Yong ",
		"Xu ",
		"Nai ",
		"Yan ",
		"Tai ",
		"Ying ",
		"Can ",
		"Niao ",
		"Wo ",
		"Ying ",
		"Mian ",
		"Kaka ",
		"Ma ",
		"Shen ",
		"Xing ",
		"Ni ",
		"Du ",
		"Liu ",
		"Yuan ",
		"Lan ",
		"Yan ",
		"Shuang ",
		"Ling ",
		"Jiao ",
		"Niang ",
		"Lan ",
		"Xian ",
		"Ying ",
		"Shuang ",
		"Shuai ",
		"Quan ",
		"Mi ",
		"Li ",
		"Luan ",
		"Yan ",
		"Zhu ",
		"Lan ",
		"Zi ",
		"Jie ",
		"Jue ",
		"Jue ",
		"Kong ",
		"Yun ",
		"Zi ",
		"Zi ",
		"Cun ",
		"Sun ",
		"Fu ",
		"Bei ",
		"Zi ",
		"Xiao ",
		"Xin ",
		"Meng ",
		"Si ",
		"Tai ",
		"Bao ",
		"Ji ",
		"Gu ",
		"Nu ",
		"Xue ",
		"[?] ",
		"Zhuan ",
		"Hai ",
		"Luan ",
		"Sun ",
		"Huai ",
		"Mie ",
		"Cong ",
		"Qian ",
		"Shu ",
		"Chan ",
		"Ya ",
		"Zi ",
		"Ni ",
		"Fu ",
		"Zi ",
		"Li ",
		"Xue ",
		"Bo ",
		"Ru ",
		"Lai ",
		"Nie ",
		"Nie ",
		"Ying ",
		"Luan ",
		"Mian ",
		"Zhu ",
		"Rong ",
		"Ta ",
		"Gui ",
		"Zhai ",
		"Qiong ",
		"Yu ",
		"Shou ",
		"An ",
		"Tu ",
		"Song ",
		"Wan ",
		"Rou ",
		"Yao ",
		"Hong ",
		"Yi ",
		"Jing ",
		"Zhun ",
		"Mi ",
		"Zhu ",
		"Dang ",
		"Hong ",
		"Zong ",
		"Guan ",
		"Zhou ",
		"Ding ",
		"Wan ",
		"Yi ",
		"Bao ",
		"Shi ",
		"Shi ",
		"Chong ",
		"Shen ",
		"Ke ",
		"Xuan ",
		"Shi ",
		"You ",
		"Huan ",
		"Yi ",
		"Tiao ",
		"Shi ",
		"Xian ",
		"Gong ",
		"Cheng ",
		"Qun ",
		"Gong ",
		"Xiao ",
		"Zai ",
		"Zha ",
		"Bao ",
		"Hai ",
		"Yan ",
		"Xiao ",
		"Jia ",
		"Shen ",
		"Chen ",
		"Rong ",
		"Huang ",
		"Mi ",
		"Kou ",
		"Kuan ",
		"Bin ",
		"Su ",
		"Cai ",
		"Zan ",
		"Ji ",
		"Yuan ",
		"Ji ",
		"Yin ",
		"Mi ",
		"Kou ",
		"Qing ",
		"Que ",
		"Zhen ",
		"Jian ",
		"Fu ",
		"Ning ",
		"Bing ",
		"Huan ",
		"Mei ",
		"Qin ",
		"Han ",
		"Yu ",
		"Shi ",
		"Ning ",
		"Qin ",
		"Ning ",
		"Zhi ",
		"Yu ",
		"Bao ",
		"Kuan ",
		"Ning ",
		"Qin ",
		"Mo ",
		"Cha ",
		"Ju ",
		"Gua ",
		"Qin ",
		"Hu ",
		"Wu ",
		"Liao ",
		"Shi ",
		"Zhu ",
		"Zhai ",
		"Shen ",
		"Wei ",
		"Xie ",
		"Kuan ",
		"Hui ",
		"Liao ",
		"Jun ",
		"Huan ",
		"Yi ",
		"Yi ",
		"Bao ",
		"Qin ",
		"Chong ",
		"Bao ",
		"Feng ",
		"Cun ",
		"Dui ",
		"Si ",
		"Xun ",
		"Dao ",
		"Lu ",
		"Dui ",
		"Shou "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x5c.js
var require_x5c = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Po ",
		"Feng ",
		"Zhuan ",
		"Fu ",
		"She ",
		"Ke ",
		"Jiang ",
		"Jiang ",
		"Zhuan ",
		"Wei ",
		"Zun ",
		"Xun ",
		"Shu ",
		"Dui ",
		"Dao ",
		"Xiao ",
		"Ji ",
		"Shao ",
		"Er ",
		"Er ",
		"Er ",
		"Ga ",
		"Jian ",
		"Shu ",
		"Chen ",
		"Shang ",
		"Shang ",
		"Mo ",
		"Ga ",
		"Chang ",
		"Liao ",
		"Xian ",
		"Xian ",
		"[?] ",
		"Wang ",
		"Wang ",
		"You ",
		"Liao ",
		"Liao ",
		"Yao ",
		"Mang ",
		"Wang ",
		"Wang ",
		"Wang ",
		"Ga ",
		"Yao ",
		"Duo ",
		"Kui ",
		"Zhong ",
		"Jiu ",
		"Gan ",
		"Gu ",
		"Gan ",
		"Tui ",
		"Gan ",
		"Gan ",
		"Shi ",
		"Yin ",
		"Chi ",
		"Kao ",
		"Ni ",
		"Jin ",
		"Wei ",
		"Niao ",
		"Ju ",
		"Pi ",
		"Ceng ",
		"Xi ",
		"Bi ",
		"Ju ",
		"Jie ",
		"Tian ",
		"Qu ",
		"Ti ",
		"Jie ",
		"Wu ",
		"Diao ",
		"Shi ",
		"Shi ",
		"Ping ",
		"Ji ",
		"Xie ",
		"Chen ",
		"Xi ",
		"Ni ",
		"Zhan ",
		"Xi ",
		"[?] ",
		"Man ",
		"E ",
		"Lou ",
		"Ping ",
		"Ti ",
		"Fei ",
		"Shu ",
		"Xie ",
		"Tu ",
		"Lu ",
		"Lu ",
		"Xi ",
		"Ceng ",
		"Lu ",
		"Ju ",
		"Xie ",
		"Ju ",
		"Jue ",
		"Liao ",
		"Jue ",
		"Shu ",
		"Xi ",
		"Che ",
		"Tun ",
		"Ni ",
		"Shan ",
		"[?] ",
		"Xian ",
		"Li ",
		"Xue ",
		"Nata ",
		"[?] ",
		"Long ",
		"Yi ",
		"Qi ",
		"Ren ",
		"Wu ",
		"Han ",
		"Shen ",
		"Yu ",
		"Chu ",
		"Sui ",
		"Qi ",
		"[?] ",
		"Yue ",
		"Ban ",
		"Yao ",
		"Ang ",
		"Ya ",
		"Wu ",
		"Jie ",
		"E ",
		"Ji ",
		"Qian ",
		"Fen ",
		"Yuan ",
		"Qi ",
		"Cen ",
		"Qian ",
		"Qi ",
		"Cha ",
		"Jie ",
		"Qu ",
		"Gang ",
		"Xian ",
		"Ao ",
		"Lan ",
		"Dao ",
		"Ba ",
		"Zuo ",
		"Zuo ",
		"Yang ",
		"Ju ",
		"Gang ",
		"Ke ",
		"Gou ",
		"Xue ",
		"Bei ",
		"Li ",
		"Tiao ",
		"Ju ",
		"Yan ",
		"Fu ",
		"Xiu ",
		"Jia ",
		"Ling ",
		"Tuo ",
		"Pei ",
		"You ",
		"Dai ",
		"Kuang ",
		"Yue ",
		"Qu ",
		"Hu ",
		"Po ",
		"Min ",
		"An ",
		"Tiao ",
		"Ling ",
		"Chi ",
		"Yuri ",
		"Dong ",
		"Cem ",
		"Kui ",
		"Xiu ",
		"Mao ",
		"Tong ",
		"Xue ",
		"Yi ",
		"Kura ",
		"He ",
		"Ke ",
		"Luo ",
		"E ",
		"Fu ",
		"Xun ",
		"Die ",
		"Lu ",
		"An ",
		"Er ",
		"Gai ",
		"Quan ",
		"Tong ",
		"Yi ",
		"Mu ",
		"Shi ",
		"An ",
		"Wei ",
		"Hu ",
		"Zhi ",
		"Mi ",
		"Li ",
		"Ji ",
		"Tong ",
		"Wei ",
		"You ",
		"Sang ",
		"Xia ",
		"Li ",
		"Yao ",
		"Jiao ",
		"Zheng ",
		"Luan ",
		"Jiao ",
		"E ",
		"E ",
		"Yu ",
		"Ye ",
		"Bu ",
		"Qiao ",
		"Qun ",
		"Feng ",
		"Feng ",
		"Nao ",
		"Li ",
		"You ",
		"Xian ",
		"Hong ",
		"Dao ",
		"Shen ",
		"Cheng ",
		"Tu ",
		"Geng ",
		"Jun ",
		"Hao ",
		"Xia ",
		"Yin ",
		"Yu "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x5d.js
var require_x5d = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Lang ",
		"Kan ",
		"Lao ",
		"Lai ",
		"Xian ",
		"Que ",
		"Kong ",
		"Chong ",
		"Chong ",
		"Ta ",
		"Lin ",
		"Hua ",
		"Ju ",
		"Lai ",
		"Qi ",
		"Min ",
		"Kun ",
		"Kun ",
		"Zu ",
		"Gu ",
		"Cui ",
		"Ya ",
		"Ya ",
		"Gang ",
		"Lun ",
		"Lun ",
		"Leng ",
		"Jue ",
		"Duo ",
		"Zheng ",
		"Guo ",
		"Yin ",
		"Dong ",
		"Han ",
		"Zheng ",
		"Wei ",
		"Yao ",
		"Pi ",
		"Yan ",
		"Song ",
		"Jie ",
		"Beng ",
		"Zu ",
		"Jue ",
		"Dong ",
		"Zhan ",
		"Gu ",
		"Yin ",
		"[?] ",
		"Ze ",
		"Huang ",
		"Yu ",
		"Wei ",
		"Yang ",
		"Feng ",
		"Qiu ",
		"Dun ",
		"Ti ",
		"Yi ",
		"Zhi ",
		"Shi ",
		"Zai ",
		"Yao ",
		"E ",
		"Zhu ",
		"Kan ",
		"Lu ",
		"Yan ",
		"Mei ",
		"Gan ",
		"Ji ",
		"Ji ",
		"Huan ",
		"Ting ",
		"Sheng ",
		"Mei ",
		"Qian ",
		"Wu ",
		"Yu ",
		"Zong ",
		"Lan ",
		"Jue ",
		"Yan ",
		"Yan ",
		"Wei ",
		"Zong ",
		"Cha ",
		"Sui ",
		"Rong ",
		"Yamashina ",
		"Qin ",
		"Yu ",
		"Kewashii ",
		"Lou ",
		"Tu ",
		"Dui ",
		"Xi ",
		"Weng ",
		"Cang ",
		"Dang ",
		"Hong ",
		"Jie ",
		"Ai ",
		"Liu ",
		"Wu ",
		"Song ",
		"Qiao ",
		"Zi ",
		"Wei ",
		"Beng ",
		"Dian ",
		"Cuo ",
		"Qian ",
		"Yong ",
		"Nie ",
		"Cuo ",
		"Ji ",
		"[?] ",
		"Tao ",
		"Song ",
		"Zong ",
		"Jiang ",
		"Liao ",
		"Kang ",
		"Chan ",
		"Die ",
		"Cen ",
		"Ding ",
		"Tu ",
		"Lou ",
		"Zhang ",
		"Zhan ",
		"Zhan ",
		"Ao ",
		"Cao ",
		"Qu ",
		"Qiang ",
		"Zui ",
		"Zui ",
		"Dao ",
		"Dao ",
		"Xi ",
		"Yu ",
		"Bo ",
		"Long ",
		"Xiang ",
		"Ceng ",
		"Bo ",
		"Qin ",
		"Jiao ",
		"Yan ",
		"Lao ",
		"Zhan ",
		"Lin ",
		"Liao ",
		"Liao ",
		"Jin ",
		"Deng ",
		"Duo ",
		"Zun ",
		"Jiao ",
		"Gui ",
		"Yao ",
		"Qiao ",
		"Yao ",
		"Jue ",
		"Zhan ",
		"Yi ",
		"Xue ",
		"Nao ",
		"Ye ",
		"Ye ",
		"Yi ",
		"E ",
		"Xian ",
		"Ji ",
		"Xie ",
		"Ke ",
		"Xi ",
		"Di ",
		"Ao ",
		"Zui ",
		"[?] ",
		"Ni ",
		"Rong ",
		"Dao ",
		"Ling ",
		"Za ",
		"Yu ",
		"Yue ",
		"Yin ",
		"[?] ",
		"Jie ",
		"Li ",
		"Sui ",
		"Long ",
		"Long ",
		"Dian ",
		"Ying ",
		"Xi ",
		"Ju ",
		"Chan ",
		"Ying ",
		"Kui ",
		"Yan ",
		"Wei ",
		"Nao ",
		"Quan ",
		"Chao ",
		"Cuan ",
		"Luan ",
		"Dian ",
		"Dian ",
		"[?] ",
		"Yan ",
		"Yan ",
		"Yan ",
		"Nao ",
		"Yan ",
		"Chuan ",
		"Gui ",
		"Chuan ",
		"Zhou ",
		"Huang ",
		"Jing ",
		"Xun ",
		"Chao ",
		"Chao ",
		"Lie ",
		"Gong ",
		"Zuo ",
		"Qiao ",
		"Ju ",
		"Gong ",
		"Kek ",
		"Wu ",
		"Pwu ",
		"Pwu ",
		"Chai ",
		"Qiu ",
		"Qiu ",
		"Ji ",
		"Yi ",
		"Si ",
		"Ba ",
		"Zhi ",
		"Zhao ",
		"Xiang ",
		"Yi ",
		"Jin ",
		"Xun ",
		"Juan ",
		"Phas ",
		"Xun ",
		"Jin ",
		"Fu "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x5e.js
var require_x5e = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Za ",
		"Bi ",
		"Shi ",
		"Bu ",
		"Ding ",
		"Shuai ",
		"Fan ",
		"Nie ",
		"Shi ",
		"Fen ",
		"Pa ",
		"Zhi ",
		"Xi ",
		"Hu ",
		"Dan ",
		"Wei ",
		"Zhang ",
		"Tang ",
		"Dai ",
		"Ma ",
		"Pei ",
		"Pa ",
		"Tie ",
		"Fu ",
		"Lian ",
		"Zhi ",
		"Zhou ",
		"Bo ",
		"Zhi ",
		"Di ",
		"Mo ",
		"Yi ",
		"Yi ",
		"Ping ",
		"Qia ",
		"Juan ",
		"Ru ",
		"Shuai ",
		"Dai ",
		"Zheng ",
		"Shui ",
		"Qiao ",
		"Zhen ",
		"Shi ",
		"Qun ",
		"Xi ",
		"Bang ",
		"Dai ",
		"Gui ",
		"Chou ",
		"Ping ",
		"Zhang ",
		"Sha ",
		"Wan ",
		"Dai ",
		"Wei ",
		"Chang ",
		"Sha ",
		"Qi ",
		"Ze ",
		"Guo ",
		"Mao ",
		"Du ",
		"Hou ",
		"Zheng ",
		"Xu ",
		"Mi ",
		"Wei ",
		"Wo ",
		"Fu ",
		"Yi ",
		"Bang ",
		"Ping ",
		"Tazuna ",
		"Gong ",
		"Pan ",
		"Huang ",
		"Dao ",
		"Mi ",
		"Jia ",
		"Teng ",
		"Hui ",
		"Zhong ",
		"Shan ",
		"Man ",
		"Mu ",
		"Biao ",
		"Guo ",
		"Ze ",
		"Mu ",
		"Bang ",
		"Zhang ",
		"Jiong ",
		"Chan ",
		"Fu ",
		"Zhi ",
		"Hu ",
		"Fan ",
		"Chuang ",
		"Bi ",
		"Hei ",
		"[?] ",
		"Mi ",
		"Qiao ",
		"Chan ",
		"Fen ",
		"Meng ",
		"Bang ",
		"Chou ",
		"Mie ",
		"Chu ",
		"Jie ",
		"Xian ",
		"Lan ",
		"Gan ",
		"Ping ",
		"Nian ",
		"Qian ",
		"Bing ",
		"Bing ",
		"Xing ",
		"Gan ",
		"Yao ",
		"Huan ",
		"You ",
		"You ",
		"Ji ",
		"Yan ",
		"Pi ",
		"Ting ",
		"Ze ",
		"Guang ",
		"Zhuang ",
		"Mo ",
		"Qing ",
		"Bi ",
		"Qin ",
		"Dun ",
		"Chuang ",
		"Gui ",
		"Ya ",
		"Bai ",
		"Jie ",
		"Xu ",
		"Lu ",
		"Wu ",
		"[?] ",
		"Ku ",
		"Ying ",
		"Di ",
		"Pao ",
		"Dian ",
		"Ya ",
		"Miao ",
		"Geng ",
		"Ci ",
		"Fu ",
		"Tong ",
		"Pang ",
		"Fei ",
		"Xiang ",
		"Yi ",
		"Zhi ",
		"Tiao ",
		"Zhi ",
		"Xiu ",
		"Du ",
		"Zuo ",
		"Xiao ",
		"Tu ",
		"Gui ",
		"Ku ",
		"Pang ",
		"Ting ",
		"You ",
		"Bu ",
		"Ding ",
		"Cheng ",
		"Lai ",
		"Bei ",
		"Ji ",
		"An ",
		"Shu ",
		"Kang ",
		"Yong ",
		"Tuo ",
		"Song ",
		"Shu ",
		"Qing ",
		"Yu ",
		"Yu ",
		"Miao ",
		"Sou ",
		"Ce ",
		"Xiang ",
		"Fei ",
		"Jiu ",
		"He ",
		"Hui ",
		"Liu ",
		"Sha ",
		"Lian ",
		"Lang ",
		"Sou ",
		"Jian ",
		"Pou ",
		"Qing ",
		"Jiu ",
		"Jiu ",
		"Qin ",
		"Ao ",
		"Kuo ",
		"Lou ",
		"Yin ",
		"Liao ",
		"Dai ",
		"Lu ",
		"Yi ",
		"Chu ",
		"Chan ",
		"Tu ",
		"Si ",
		"Xin ",
		"Miao ",
		"Chang ",
		"Wu ",
		"Fei ",
		"Guang ",
		"Koc ",
		"Kuai ",
		"Bi ",
		"Qiang ",
		"Xie ",
		"Lin ",
		"Lin ",
		"Liao ",
		"Lu ",
		"[?] ",
		"Ying ",
		"Xian ",
		"Ting ",
		"Yong ",
		"Li ",
		"Ting ",
		"Yin ",
		"Xun ",
		"Yan ",
		"Ting ",
		"Di ",
		"Po ",
		"Jian ",
		"Hui ",
		"Nai ",
		"Hui ",
		"Gong ",
		"Nian "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x5f.js
var require_x5f = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Kai ",
		"Bian ",
		"Yi ",
		"Qi ",
		"Nong ",
		"Fen ",
		"Ju ",
		"Yan ",
		"Yi ",
		"Zang ",
		"Bi ",
		"Yi ",
		"Yi ",
		"Er ",
		"San ",
		"Shi ",
		"Er ",
		"Shi ",
		"Shi ",
		"Gong ",
		"Diao ",
		"Yin ",
		"Hu ",
		"Fu ",
		"Hong ",
		"Wu ",
		"Tui ",
		"Chi ",
		"Jiang ",
		"Ba ",
		"Shen ",
		"Di ",
		"Zhang ",
		"Jue ",
		"Tao ",
		"Fu ",
		"Di ",
		"Mi ",
		"Xian ",
		"Hu ",
		"Chao ",
		"Nu ",
		"Jing ",
		"Zhen ",
		"Yi ",
		"Mi ",
		"Quan ",
		"Wan ",
		"Shao ",
		"Ruo ",
		"Xuan ",
		"Jing ",
		"Dun ",
		"Zhang ",
		"Jiang ",
		"Qiang ",
		"Peng ",
		"Dan ",
		"Qiang ",
		"Bi ",
		"Bi ",
		"She ",
		"Dan ",
		"Jian ",
		"Gou ",
		"Sei ",
		"Fa ",
		"Bi ",
		"Kou ",
		"Nagi ",
		"Bie ",
		"Xiao ",
		"Dan ",
		"Kuo ",
		"Qiang ",
		"Hong ",
		"Mi ",
		"Kuo ",
		"Wan ",
		"Jue ",
		"Ji ",
		"Ji ",
		"Gui ",
		"Dang ",
		"Lu ",
		"Lu ",
		"Tuan ",
		"Hui ",
		"Zhi ",
		"Hui ",
		"Hui ",
		"Yi ",
		"Yi ",
		"Yi ",
		"Yi ",
		"Huo ",
		"Huo ",
		"Shan ",
		"Xing ",
		"Wen ",
		"Tong ",
		"Yan ",
		"Yan ",
		"Yu ",
		"Chi ",
		"Cai ",
		"Biao ",
		"Diao ",
		"Bin ",
		"Peng ",
		"Yong ",
		"Piao ",
		"Zhang ",
		"Ying ",
		"Chi ",
		"Chi ",
		"Zhuo ",
		"Tuo ",
		"Ji ",
		"Pang ",
		"Zhong ",
		"Yi ",
		"Wang ",
		"Che ",
		"Bi ",
		"Chi ",
		"Ling ",
		"Fu ",
		"Wang ",
		"Zheng ",
		"Cu ",
		"Wang ",
		"Jing ",
		"Dai ",
		"Xi ",
		"Xun ",
		"Hen ",
		"Yang ",
		"Huai ",
		"Lu ",
		"Hou ",
		"Wa ",
		"Cheng ",
		"Zhi ",
		"Xu ",
		"Jing ",
		"Tu ",
		"Cong ",
		"[?] ",
		"Lai ",
		"Cong ",
		"De ",
		"Pai ",
		"Xi ",
		"[?] ",
		"Qi ",
		"Chang ",
		"Zhi ",
		"Cong ",
		"Zhou ",
		"Lai ",
		"Yu ",
		"Xie ",
		"Jie ",
		"Jian ",
		"Chi ",
		"Jia ",
		"Bian ",
		"Huang ",
		"Fu ",
		"Xun ",
		"Wei ",
		"Pang ",
		"Yao ",
		"Wei ",
		"Xi ",
		"Zheng ",
		"Piao ",
		"Chi ",
		"De ",
		"Zheng ",
		"Zheng ",
		"Bie ",
		"De ",
		"Chong ",
		"Che ",
		"Jiao ",
		"Wei ",
		"Jiao ",
		"Hui ",
		"Mei ",
		"Long ",
		"Xiang ",
		"Bao ",
		"Qu ",
		"Xin ",
		"Shu ",
		"Bi ",
		"Yi ",
		"Le ",
		"Ren ",
		"Dao ",
		"Ding ",
		"Gai ",
		"Ji ",
		"Ren ",
		"Ren ",
		"Chan ",
		"Tan ",
		"Te ",
		"Te ",
		"Gan ",
		"Qi ",
		"Shi ",
		"Cun ",
		"Zhi ",
		"Wang ",
		"Mang ",
		"Xi ",
		"Fan ",
		"Ying ",
		"Tian ",
		"Min ",
		"Min ",
		"Zhong ",
		"Chong ",
		"Wu ",
		"Ji ",
		"Wu ",
		"Xi ",
		"Ye ",
		"You ",
		"Wan ",
		"Cong ",
		"Zhong ",
		"Kuai ",
		"Yu ",
		"Bian ",
		"Zhi ",
		"Qi ",
		"Cui ",
		"Chen ",
		"Tai ",
		"Tun ",
		"Qian ",
		"Nian ",
		"Hun ",
		"Xiong ",
		"Niu ",
		"Wang ",
		"Xian ",
		"Xin ",
		"Kang ",
		"Hu ",
		"Kai ",
		"Fen "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x60.js
var require_x60 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Huai ",
		"Tai ",
		"Song ",
		"Wu ",
		"Ou ",
		"Chang ",
		"Chuang ",
		"Ju ",
		"Yi ",
		"Bao ",
		"Chao ",
		"Min ",
		"Pei ",
		"Zuo ",
		"Zen ",
		"Yang ",
		"Kou ",
		"Ban ",
		"Nu ",
		"Nao ",
		"Zheng ",
		"Pa ",
		"Bu ",
		"Tie ",
		"Gu ",
		"Hu ",
		"Ju ",
		"Da ",
		"Lian ",
		"Si ",
		"Chou ",
		"Di ",
		"Dai ",
		"Yi ",
		"Tu ",
		"You ",
		"Fu ",
		"Ji ",
		"Peng ",
		"Xing ",
		"Yuan ",
		"Ni ",
		"Guai ",
		"Fu ",
		"Xi ",
		"Bi ",
		"You ",
		"Qie ",
		"Xuan ",
		"Cong ",
		"Bing ",
		"Huang ",
		"Xu ",
		"Chu ",
		"Pi ",
		"Xi ",
		"Xi ",
		"Tan ",
		"Koraeru ",
		"Zong ",
		"Dui ",
		"[?] ",
		"Ki ",
		"Yi ",
		"Chi ",
		"Ren ",
		"Xun ",
		"Shi ",
		"Xi ",
		"Lao ",
		"Heng ",
		"Kuang ",
		"Mu ",
		"Zhi ",
		"Xie ",
		"Lian ",
		"Tiao ",
		"Huang ",
		"Die ",
		"Hao ",
		"Kong ",
		"Gui ",
		"Heng ",
		"Xi ",
		"Xiao ",
		"Shu ",
		"S ",
		"Kua ",
		"Qiu ",
		"Yang ",
		"Hui ",
		"Hui ",
		"Chi ",
		"Jia ",
		"Yi ",
		"Xiong ",
		"Guai ",
		"Lin ",
		"Hui ",
		"Zi ",
		"Xu ",
		"Chi ",
		"Xiang ",
		"Nu ",
		"Hen ",
		"En ",
		"Ke ",
		"Tong ",
		"Tian ",
		"Gong ",
		"Quan ",
		"Xi ",
		"Qia ",
		"Yue ",
		"Peng ",
		"Ken ",
		"De ",
		"Hui ",
		"E ",
		"Kyuu ",
		"Tong ",
		"Yan ",
		"Kai ",
		"Ce ",
		"Nao ",
		"Yun ",
		"Mang ",
		"Yong ",
		"Yong ",
		"Yuan ",
		"Pi ",
		"Kun ",
		"Qiao ",
		"Yue ",
		"Yu ",
		"Yu ",
		"Jie ",
		"Xi ",
		"Zhe ",
		"Lin ",
		"Ti ",
		"Han ",
		"Hao ",
		"Qie ",
		"Ti ",
		"Bu ",
		"Yi ",
		"Qian ",
		"Hui ",
		"Xi ",
		"Bei ",
		"Man ",
		"Yi ",
		"Heng ",
		"Song ",
		"Quan ",
		"Cheng ",
		"Hui ",
		"Wu ",
		"Wu ",
		"You ",
		"Li ",
		"Liang ",
		"Huan ",
		"Cong ",
		"Yi ",
		"Yue ",
		"Li ",
		"Nin ",
		"Nao ",
		"E ",
		"Que ",
		"Xuan ",
		"Qian ",
		"Wu ",
		"Min ",
		"Cong ",
		"Fei ",
		"Bei ",
		"Duo ",
		"Cui ",
		"Chang ",
		"Men ",
		"Li ",
		"Ji ",
		"Guan ",
		"Guan ",
		"Xing ",
		"Dao ",
		"Qi ",
		"Kong ",
		"Tian ",
		"Lun ",
		"Xi ",
		"Kan ",
		"Kun ",
		"Ni ",
		"Qing ",
		"Chou ",
		"Dun ",
		"Guo ",
		"Chan ",
		"Liang ",
		"Wan ",
		"Yuan ",
		"Jin ",
		"Ji ",
		"Lin ",
		"Yu ",
		"Huo ",
		"He ",
		"Quan ",
		"Tan ",
		"Ti ",
		"Ti ",
		"Nie ",
		"Wang ",
		"Chuo ",
		"Bu ",
		"Hun ",
		"Xi ",
		"Tang ",
		"Xin ",
		"Wei ",
		"Hui ",
		"E ",
		"Rui ",
		"Zong ",
		"Jian ",
		"Yong ",
		"Dian ",
		"Ju ",
		"Can ",
		"Cheng ",
		"De ",
		"Bei ",
		"Qie ",
		"Can ",
		"Dan ",
		"Guan ",
		"Duo ",
		"Nao ",
		"Yun ",
		"Xiang ",
		"Zhui ",
		"Die ",
		"Huang ",
		"Chun ",
		"Qiong ",
		"Re ",
		"Xing ",
		"Ce ",
		"Bian ",
		"Hun ",
		"Zong ",
		"Ti "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x61.js
var require_x61 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Qiao ",
		"Chou ",
		"Bei ",
		"Xuan ",
		"Wei ",
		"Ge ",
		"Qian ",
		"Wei ",
		"Yu ",
		"Yu ",
		"Bi ",
		"Xuan ",
		"Huan ",
		"Min ",
		"Bi ",
		"Yi ",
		"Mian ",
		"Yong ",
		"Kai ",
		"Dang ",
		"Yin ",
		"E ",
		"Chen ",
		"Mou ",
		"Ke ",
		"Ke ",
		"Yu ",
		"Ai ",
		"Qie ",
		"Yan ",
		"Nuo ",
		"Gan ",
		"Yun ",
		"Zong ",
		"Sai ",
		"Leng ",
		"Fen ",
		"[?] ",
		"Kui ",
		"Kui ",
		"Que ",
		"Gong ",
		"Yun ",
		"Su ",
		"Su ",
		"Qi ",
		"Yao ",
		"Song ",
		"Huang ",
		"Ji ",
		"Gu ",
		"Ju ",
		"Chuang ",
		"Ni ",
		"Xie ",
		"Kai ",
		"Zheng ",
		"Yong ",
		"Cao ",
		"Sun ",
		"Shen ",
		"Bo ",
		"Kai ",
		"Yuan ",
		"Xie ",
		"Hun ",
		"Yong ",
		"Yang ",
		"Li ",
		"Sao ",
		"Tao ",
		"Yin ",
		"Ci ",
		"Xu ",
		"Qian ",
		"Tai ",
		"Huang ",
		"Yun ",
		"Shen ",
		"Ming ",
		"[?] ",
		"She ",
		"Cong ",
		"Piao ",
		"Mo ",
		"Mu ",
		"Guo ",
		"Chi ",
		"Can ",
		"Can ",
		"Can ",
		"Cui ",
		"Min ",
		"Te ",
		"Zhang ",
		"Tong ",
		"Ao ",
		"Shuang ",
		"Man ",
		"Guan ",
		"Que ",
		"Zao ",
		"Jiu ",
		"Hui ",
		"Kai ",
		"Lian ",
		"Ou ",
		"Song ",
		"Jin ",
		"Yin ",
		"Lu ",
		"Shang ",
		"Wei ",
		"Tuan ",
		"Man ",
		"Qian ",
		"She ",
		"Yong ",
		"Qing ",
		"Kang ",
		"Di ",
		"Zhi ",
		"Lou ",
		"Juan ",
		"Qi ",
		"Qi ",
		"Yu ",
		"Ping ",
		"Liao ",
		"Cong ",
		"You ",
		"Chong ",
		"Zhi ",
		"Tong ",
		"Cheng ",
		"Qi ",
		"Qu ",
		"Peng ",
		"Bei ",
		"Bie ",
		"Chun ",
		"Jiao ",
		"Zeng ",
		"Chi ",
		"Lian ",
		"Ping ",
		"Kui ",
		"Hui ",
		"Qiao ",
		"Cheng ",
		"Yin ",
		"Yin ",
		"Xi ",
		"Xi ",
		"Dan ",
		"Tan ",
		"Duo ",
		"Dui ",
		"Dui ",
		"Su ",
		"Jue ",
		"Ce ",
		"Xiao ",
		"Fan ",
		"Fen ",
		"Lao ",
		"Lao ",
		"Chong ",
		"Han ",
		"Qi ",
		"Xian ",
		"Min ",
		"Jing ",
		"Liao ",
		"Wu ",
		"Can ",
		"Jue ",
		"Cu ",
		"Xian ",
		"Tan ",
		"Sheng ",
		"Pi ",
		"Yi ",
		"Chu ",
		"Xian ",
		"Nao ",
		"Dan ",
		"Tan ",
		"Jing ",
		"Song ",
		"Han ",
		"Jiao ",
		"Wai ",
		"Huan ",
		"Dong ",
		"Qin ",
		"Qin ",
		"Qu ",
		"Cao ",
		"Ken ",
		"Xie ",
		"Ying ",
		"Ao ",
		"Mao ",
		"Yi ",
		"Lin ",
		"Se ",
		"Jun ",
		"Huai ",
		"Men ",
		"Lan ",
		"Ai ",
		"Lin ",
		"Yan ",
		"Gua ",
		"Xia ",
		"Chi ",
		"Yu ",
		"Yin ",
		"Dai ",
		"Meng ",
		"Ai ",
		"Meng ",
		"Dui ",
		"Qi ",
		"Mo ",
		"Lan ",
		"Men ",
		"Chou ",
		"Zhi ",
		"Nuo ",
		"Nuo ",
		"Yan ",
		"Yang ",
		"Bo ",
		"Zhi ",
		"Kuang ",
		"Kuang ",
		"You ",
		"Fu ",
		"Liu ",
		"Mie ",
		"Cheng ",
		"[?] ",
		"Chan ",
		"Meng ",
		"Lan ",
		"Huai ",
		"Xuan ",
		"Rang ",
		"Chan ",
		"Ji ",
		"Ju ",
		"Huan ",
		"She ",
		"Yi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x62.js
var require_x62 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Lian ",
		"Nan ",
		"Mi ",
		"Tang ",
		"Jue ",
		"Gang ",
		"Gang ",
		"Gang ",
		"Ge ",
		"Yue ",
		"Wu ",
		"Jian ",
		"Xu ",
		"Shu ",
		"Rong ",
		"Xi ",
		"Cheng ",
		"Wo ",
		"Jie ",
		"Ge ",
		"Jian ",
		"Qiang ",
		"Huo ",
		"Qiang ",
		"Zhan ",
		"Dong ",
		"Qi ",
		"Jia ",
		"Die ",
		"Zei ",
		"Jia ",
		"Ji ",
		"Shi ",
		"Kan ",
		"Ji ",
		"Kui ",
		"Gai ",
		"Deng ",
		"Zhan ",
		"Chuang ",
		"Ge ",
		"Jian ",
		"Jie ",
		"Yu ",
		"Jian ",
		"Yan ",
		"Lu ",
		"Xi ",
		"Zhan ",
		"Xi ",
		"Xi ",
		"Chuo ",
		"Dai ",
		"Qu ",
		"Hu ",
		"Hu ",
		"Hu ",
		"E ",
		"Shi ",
		"Li ",
		"Mao ",
		"Hu ",
		"Li ",
		"Fang ",
		"Suo ",
		"Bian ",
		"Dian ",
		"Jiong ",
		"Shang ",
		"Yi ",
		"Yi ",
		"Shan ",
		"Hu ",
		"Fei ",
		"Yan ",
		"Shou ",
		"T ",
		"Cai ",
		"Zha ",
		"Qiu ",
		"Le ",
		"Bu ",
		"Ba ",
		"Da ",
		"Reng ",
		"Fu ",
		"Hameru ",
		"Zai ",
		"Tuo ",
		"Zhang ",
		"Diao ",
		"Kang ",
		"Yu ",
		"Ku ",
		"Han ",
		"Shen ",
		"Cha ",
		"Yi ",
		"Gu ",
		"Kou ",
		"Wu ",
		"Tuo ",
		"Qian ",
		"Zhi ",
		"Ren ",
		"Kuo ",
		"Men ",
		"Sao ",
		"Yang ",
		"Niu ",
		"Ban ",
		"Che ",
		"Rao ",
		"Xi ",
		"Qian ",
		"Ban ",
		"Jia ",
		"Yu ",
		"Fu ",
		"Ao ",
		"Xi ",
		"Pi ",
		"Zhi ",
		"Zi ",
		"E ",
		"Dun ",
		"Zhao ",
		"Cheng ",
		"Ji ",
		"Yan ",
		"Kuang ",
		"Bian ",
		"Chao ",
		"Ju ",
		"Wen ",
		"Hu ",
		"Yue ",
		"Jue ",
		"Ba ",
		"Qin ",
		"Zhen ",
		"Zheng ",
		"Yun ",
		"Wan ",
		"Nu ",
		"Yi ",
		"Shu ",
		"Zhua ",
		"Pou ",
		"Tou ",
		"Dou ",
		"Kang ",
		"Zhe ",
		"Pou ",
		"Fu ",
		"Pao ",
		"Ba ",
		"Ao ",
		"Ze ",
		"Tuan ",
		"Kou ",
		"Lun ",
		"Qiang ",
		"[?] ",
		"Hu ",
		"Bao ",
		"Bing ",
		"Zhi ",
		"Peng ",
		"Tan ",
		"Pu ",
		"Pi ",
		"Tai ",
		"Yao ",
		"Zhen ",
		"Zha ",
		"Yang ",
		"Bao ",
		"He ",
		"Ni ",
		"Yi ",
		"Di ",
		"Chi ",
		"Pi ",
		"Za ",
		"Mo ",
		"Mo ",
		"Shen ",
		"Ya ",
		"Chou ",
		"Qu ",
		"Min ",
		"Chu ",
		"Jia ",
		"Fu ",
		"Zhan ",
		"Zhu ",
		"Dan ",
		"Chai ",
		"Mu ",
		"Nian ",
		"La ",
		"Fu ",
		"Pao ",
		"Ban ",
		"Pai ",
		"Ling ",
		"Na ",
		"Guai ",
		"Qian ",
		"Ju ",
		"Tuo ",
		"Ba ",
		"Tuo ",
		"Tuo ",
		"Ao ",
		"Ju ",
		"Zhuo ",
		"Pan ",
		"Zhao ",
		"Bai ",
		"Bai ",
		"Di ",
		"Ni ",
		"Ju ",
		"Kuo ",
		"Long ",
		"Jian ",
		"[?] ",
		"Yong ",
		"Lan ",
		"Ning ",
		"Bo ",
		"Ze ",
		"Qian ",
		"Hen ",
		"Gua ",
		"Shi ",
		"Jie ",
		"Zheng ",
		"Nin ",
		"Gong ",
		"Gong ",
		"Quan ",
		"Shuan ",
		"Cun ",
		"Zan ",
		"Kao ",
		"Chi ",
		"Xie ",
		"Ce ",
		"Hui ",
		"Pin ",
		"Zhuai ",
		"Shi ",
		"Na "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x63.js
var require_x63 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Bo ",
		"Chi ",
		"Gua ",
		"Zhi ",
		"Kuo ",
		"Duo ",
		"Duo ",
		"Zhi ",
		"Qie ",
		"An ",
		"Nong ",
		"Zhen ",
		"Ge ",
		"Jiao ",
		"Ku ",
		"Dong ",
		"Ru ",
		"Tiao ",
		"Lie ",
		"Zha ",
		"Lu ",
		"Die ",
		"Wa ",
		"Jue ",
		"Mushiru ",
		"Ju ",
		"Zhi ",
		"Luan ",
		"Ya ",
		"Zhua ",
		"Ta ",
		"Xie ",
		"Nao ",
		"Dang ",
		"Jiao ",
		"Zheng ",
		"Ji ",
		"Hui ",
		"Xun ",
		"Ku ",
		"Ai ",
		"Tuo ",
		"Nuo ",
		"Cuo ",
		"Bo ",
		"Geng ",
		"Ti ",
		"Zhen ",
		"Cheng ",
		"Suo ",
		"Suo ",
		"Keng ",
		"Mei ",
		"Long ",
		"Ju ",
		"Peng ",
		"Jian ",
		"Yi ",
		"Ting ",
		"Shan ",
		"Nuo ",
		"Wan ",
		"Xie ",
		"Cha ",
		"Feng ",
		"Jiao ",
		"Wu ",
		"Jun ",
		"Jiu ",
		"Tong ",
		"Kun ",
		"Huo ",
		"Tu ",
		"Zhuo ",
		"Pou ",
		"Le ",
		"Ba ",
		"Han ",
		"Shao ",
		"Nie ",
		"Juan ",
		"Ze ",
		"Song ",
		"Ye ",
		"Jue ",
		"Bu ",
		"Huan ",
		"Bu ",
		"Zun ",
		"Yi ",
		"Zhai ",
		"Lu ",
		"Sou ",
		"Tuo ",
		"Lao ",
		"Sun ",
		"Bang ",
		"Jian ",
		"Huan ",
		"Dao ",
		"[?] ",
		"Wan ",
		"Qin ",
		"Peng ",
		"She ",
		"Lie ",
		"Min ",
		"Men ",
		"Fu ",
		"Bai ",
		"Ju ",
		"Dao ",
		"Wo ",
		"Ai ",
		"Juan ",
		"Yue ",
		"Zong ",
		"Chen ",
		"Chui ",
		"Jie ",
		"Tu ",
		"Ben ",
		"Na ",
		"Nian ",
		"Nuo ",
		"Zu ",
		"Wo ",
		"Xi ",
		"Xian ",
		"Cheng ",
		"Dian ",
		"Sao ",
		"Lun ",
		"Qing ",
		"Gang ",
		"Duo ",
		"Shou ",
		"Diao ",
		"Pou ",
		"Di ",
		"Zhang ",
		"Gun ",
		"Ji ",
		"Tao ",
		"Qia ",
		"Qi ",
		"Pai ",
		"Shu ",
		"Qian ",
		"Ling ",
		"Yi ",
		"Ya ",
		"Jue ",
		"Zheng ",
		"Liang ",
		"Gua ",
		"Yi ",
		"Huo ",
		"Shan ",
		"Zheng ",
		"Lue ",
		"Cai ",
		"Tan ",
		"Che ",
		"Bing ",
		"Jie ",
		"Ti ",
		"Kong ",
		"Tui ",
		"Yan ",
		"Cuo ",
		"Zou ",
		"Ju ",
		"Tian ",
		"Qian ",
		"Ken ",
		"Bai ",
		"Shou ",
		"Jie ",
		"Lu ",
		"Guo ",
		"Haba ",
		"[?] ",
		"Zhi ",
		"Dan ",
		"Mang ",
		"Xian ",
		"Sao ",
		"Guan ",
		"Peng ",
		"Yuan ",
		"Nuo ",
		"Jian ",
		"Zhen ",
		"Jiu ",
		"Jian ",
		"Yu ",
		"Yan ",
		"Kui ",
		"Nan ",
		"Hong ",
		"Rou ",
		"Pi ",
		"Wei ",
		"Sai ",
		"Zou ",
		"Xuan ",
		"Miao ",
		"Ti ",
		"Nie ",
		"Cha ",
		"Shi ",
		"Zong ",
		"Zhen ",
		"Yi ",
		"Shun ",
		"Heng ",
		"Bian ",
		"Yang ",
		"Huan ",
		"Yan ",
		"Zuan ",
		"An ",
		"Xu ",
		"Ya ",
		"Wo ",
		"Ke ",
		"Chuai ",
		"Ji ",
		"Ti ",
		"La ",
		"La ",
		"Cheng ",
		"Kai ",
		"Jiu ",
		"Jiu ",
		"Tu ",
		"Jie ",
		"Hui ",
		"Geng ",
		"Chong ",
		"Shuo ",
		"She ",
		"Xie ",
		"Yuan ",
		"Qian ",
		"Ye ",
		"Cha ",
		"Zha ",
		"Bei ",
		"Yao ",
		"[?] ",
		"[?] ",
		"Lan ",
		"Wen ",
		"Qin "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x64.js
var require_x64 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Chan ",
		"Ge ",
		"Lou ",
		"Zong ",
		"Geng ",
		"Jiao ",
		"Gou ",
		"Qin ",
		"Yong ",
		"Que ",
		"Chou ",
		"Chi ",
		"Zhan ",
		"Sun ",
		"Sun ",
		"Bo ",
		"Chu ",
		"Rong ",
		"Beng ",
		"Cuo ",
		"Sao ",
		"Ke ",
		"Yao ",
		"Dao ",
		"Zhi ",
		"Nu ",
		"Xie ",
		"Jian ",
		"Sou ",
		"Qiu ",
		"Gao ",
		"Xian ",
		"Shuo ",
		"Sang ",
		"Jin ",
		"Mie ",
		"E ",
		"Chui ",
		"Nuo ",
		"Shan ",
		"Ta ",
		"Jie ",
		"Tang ",
		"Pan ",
		"Ban ",
		"Da ",
		"Li ",
		"Tao ",
		"Hu ",
		"Zhi ",
		"Wa ",
		"Xia ",
		"Qian ",
		"Wen ",
		"Qiang ",
		"Tian ",
		"Zhen ",
		"E ",
		"Xi ",
		"Nuo ",
		"Quan ",
		"Cha ",
		"Zha ",
		"Ge ",
		"Wu ",
		"En ",
		"She ",
		"Kang ",
		"She ",
		"Shu ",
		"Bai ",
		"Yao ",
		"Bin ",
		"Sou ",
		"Tan ",
		"Sa ",
		"Chan ",
		"Suo ",
		"Liao ",
		"Chong ",
		"Chuang ",
		"Guo ",
		"Bing ",
		"Feng ",
		"Shuai ",
		"Di ",
		"Qi ",
		"Sou ",
		"Zhai ",
		"Lian ",
		"Tang ",
		"Chi ",
		"Guan ",
		"Lu ",
		"Luo ",
		"Lou ",
		"Zong ",
		"Gai ",
		"Hu ",
		"Zha ",
		"Chuang ",
		"Tang ",
		"Hua ",
		"Cui ",
		"Nai ",
		"Mo ",
		"Jiang ",
		"Gui ",
		"Ying ",
		"Zhi ",
		"Ao ",
		"Zhi ",
		"Nie ",
		"Man ",
		"Shan ",
		"Kou ",
		"Shu ",
		"Suo ",
		"Tuan ",
		"Jiao ",
		"Mo ",
		"Mo ",
		"Zhe ",
		"Xian ",
		"Keng ",
		"Piao ",
		"Jiang ",
		"Yin ",
		"Gou ",
		"Qian ",
		"Lue ",
		"Ji ",
		"Ying ",
		"Jue ",
		"Pie ",
		"Pie ",
		"Lao ",
		"Dun ",
		"Xian ",
		"Ruan ",
		"Kui ",
		"Zan ",
		"Yi ",
		"Xun ",
		"Cheng ",
		"Cheng ",
		"Sa ",
		"Nao ",
		"Heng ",
		"Si ",
		"Qian ",
		"Huang ",
		"Da ",
		"Zun ",
		"Nian ",
		"Lin ",
		"Zheng ",
		"Hui ",
		"Zhuang ",
		"Jiao ",
		"Ji ",
		"Cao ",
		"Dan ",
		"Dan ",
		"Che ",
		"Bo ",
		"Che ",
		"Jue ",
		"Xiao ",
		"Liao ",
		"Ben ",
		"Fu ",
		"Qiao ",
		"Bo ",
		"Cuo ",
		"Zhuo ",
		"Zhuan ",
		"Tuo ",
		"Pu ",
		"Qin ",
		"Dun ",
		"Nian ",
		"[?] ",
		"Xie ",
		"Lu ",
		"Jiao ",
		"Cuan ",
		"Ta ",
		"Han ",
		"Qiao ",
		"Zhua ",
		"Jian ",
		"Gan ",
		"Yong ",
		"Lei ",
		"Kuo ",
		"Lu ",
		"Shan ",
		"Zhuo ",
		"Ze ",
		"Pu ",
		"Chuo ",
		"Ji ",
		"Dang ",
		"Suo ",
		"Cao ",
		"Qing ",
		"Jing ",
		"Huan ",
		"Jie ",
		"Qin ",
		"Kuai ",
		"Dan ",
		"Xi ",
		"Ge ",
		"Pi ",
		"Bo ",
		"Ao ",
		"Ju ",
		"Ye ",
		"[?] ",
		"Mang ",
		"Sou ",
		"Mi ",
		"Ji ",
		"Tai ",
		"Zhuo ",
		"Dao ",
		"Xing ",
		"Lan ",
		"Ca ",
		"Ju ",
		"Ye ",
		"Ru ",
		"Ye ",
		"Ye ",
		"Ni ",
		"Hu ",
		"Ji ",
		"Bin ",
		"Ning ",
		"Ge ",
		"Zhi ",
		"Jie ",
		"Kuo ",
		"Mo ",
		"Jian ",
		"Xie ",
		"Lie ",
		"Tan ",
		"Bai ",
		"Sou ",
		"Lu ",
		"Lue ",
		"Rao ",
		"Zhi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x65.js
var require_x65 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Pan ",
		"Yang ",
		"Lei ",
		"Sa ",
		"Shu ",
		"Zan ",
		"Nian ",
		"Xian ",
		"Jun ",
		"Huo ",
		"Li ",
		"La ",
		"Han ",
		"Ying ",
		"Lu ",
		"Long ",
		"Qian ",
		"Qian ",
		"Zan ",
		"Qian ",
		"Lan ",
		"San ",
		"Ying ",
		"Mei ",
		"Rang ",
		"Chan ",
		"[?] ",
		"Cuan ",
		"Xi ",
		"She ",
		"Luo ",
		"Jun ",
		"Mi ",
		"Li ",
		"Zan ",
		"Luan ",
		"Tan ",
		"Zuan ",
		"Li ",
		"Dian ",
		"Wa ",
		"Dang ",
		"Jiao ",
		"Jue ",
		"Lan ",
		"Li ",
		"Nang ",
		"Zhi ",
		"Gui ",
		"Gui ",
		"Qi ",
		"Xin ",
		"Pu ",
		"Sui ",
		"Shou ",
		"Kao ",
		"You ",
		"Gai ",
		"Yi ",
		"Gong ",
		"Gan ",
		"Ban ",
		"Fang ",
		"Zheng ",
		"Bo ",
		"Dian ",
		"Kou ",
		"Min ",
		"Wu ",
		"Gu ",
		"He ",
		"Ce ",
		"Xiao ",
		"Mi ",
		"Chu ",
		"Ge ",
		"Di ",
		"Xu ",
		"Jiao ",
		"Min ",
		"Chen ",
		"Jiu ",
		"Zhen ",
		"Duo ",
		"Yu ",
		"Chi ",
		"Ao ",
		"Bai ",
		"Xu ",
		"Jiao ",
		"Duo ",
		"Lian ",
		"Nie ",
		"Bi ",
		"Chang ",
		"Dian ",
		"Duo ",
		"Yi ",
		"Gan ",
		"San ",
		"Ke ",
		"Yan ",
		"Dun ",
		"Qi ",
		"Dou ",
		"Xiao ",
		"Duo ",
		"Jiao ",
		"Jing ",
		"Yang ",
		"Xia ",
		"Min ",
		"Shu ",
		"Ai ",
		"Qiao ",
		"Ai ",
		"Zheng ",
		"Di ",
		"Zhen ",
		"Fu ",
		"Shu ",
		"Liao ",
		"Qu ",
		"Xiong ",
		"Xi ",
		"Jiao ",
		"Sen ",
		"Jiao ",
		"Zhuo ",
		"Yi ",
		"Lian ",
		"Bi ",
		"Li ",
		"Xiao ",
		"Xiao ",
		"Wen ",
		"Xue ",
		"Qi ",
		"Qi ",
		"Zhai ",
		"Bin ",
		"Jue ",
		"Zhai ",
		"[?] ",
		"Fei ",
		"Ban ",
		"Ban ",
		"Lan ",
		"Yu ",
		"Lan ",
		"Wei ",
		"Dou ",
		"Sheng ",
		"Liao ",
		"Jia ",
		"Hu ",
		"Xie ",
		"Jia ",
		"Yu ",
		"Zhen ",
		"Jiao ",
		"Wo ",
		"Tou ",
		"Chu ",
		"Jin ",
		"Chi ",
		"Yin ",
		"Fu ",
		"Qiang ",
		"Zhan ",
		"Qu ",
		"Zhuo ",
		"Zhan ",
		"Duan ",
		"Zhuo ",
		"Si ",
		"Xin ",
		"Zhuo ",
		"Zhuo ",
		"Qin ",
		"Lin ",
		"Zhuo ",
		"Chu ",
		"Duan ",
		"Zhu ",
		"Fang ",
		"Xie ",
		"Hang ",
		"Yu ",
		"Shi ",
		"Pei ",
		"You ",
		"Mye ",
		"Pang ",
		"Qi ",
		"Zhan ",
		"Mao ",
		"Lu ",
		"Pei ",
		"Pi ",
		"Liu ",
		"Fu ",
		"Fang ",
		"Xuan ",
		"Jing ",
		"Jing ",
		"Ni ",
		"Zu ",
		"Zhao ",
		"Yi ",
		"Liu ",
		"Shao ",
		"Jian ",
		"Es ",
		"Yi ",
		"Qi ",
		"Zhi ",
		"Fan ",
		"Piao ",
		"Fan ",
		"Zhan ",
		"Guai ",
		"Sui ",
		"Yu ",
		"Wu ",
		"Ji ",
		"Ji ",
		"Ji ",
		"Huo ",
		"Ri ",
		"Dan ",
		"Jiu ",
		"Zhi ",
		"Zao ",
		"Xie ",
		"Tiao ",
		"Xun ",
		"Xu ",
		"Xu ",
		"Xu ",
		"Gan ",
		"Han ",
		"Tai ",
		"Di ",
		"Xu ",
		"Chan ",
		"Shi ",
		"Kuang ",
		"Yang ",
		"Shi ",
		"Wang ",
		"Min ",
		"Min ",
		"Tun ",
		"Chun ",
		"Wu "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x66.js
var require_x66 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Yun ",
		"Bei ",
		"Ang ",
		"Ze ",
		"Ban ",
		"Jie ",
		"Kun ",
		"Sheng ",
		"Hu ",
		"Fang ",
		"Hao ",
		"Gui ",
		"Chang ",
		"Xuan ",
		"Ming ",
		"Hun ",
		"Fen ",
		"Qin ",
		"Hu ",
		"Yi ",
		"Xi ",
		"Xin ",
		"Yan ",
		"Ze ",
		"Fang ",
		"Tan ",
		"Shen ",
		"Ju ",
		"Yang ",
		"Zan ",
		"Bing ",
		"Xing ",
		"Ying ",
		"Xuan ",
		"Pei ",
		"Zhen ",
		"Ling ",
		"Chun ",
		"Hao ",
		"Mei ",
		"Zuo ",
		"Mo ",
		"Bian ",
		"Xu ",
		"Hun ",
		"Zhao ",
		"Zong ",
		"Shi ",
		"Shi ",
		"Yu ",
		"Fei ",
		"Die ",
		"Mao ",
		"Ni ",
		"Chang ",
		"Wen ",
		"Dong ",
		"Ai ",
		"Bing ",
		"Ang ",
		"Zhou ",
		"Long ",
		"Xian ",
		"Kuang ",
		"Tiao ",
		"Chao ",
		"Shi ",
		"Huang ",
		"Huang ",
		"Xuan ",
		"Kui ",
		"Xu ",
		"Jiao ",
		"Jin ",
		"Zhi ",
		"Jin ",
		"Shang ",
		"Tong ",
		"Hong ",
		"Yan ",
		"Gai ",
		"Xiang ",
		"Shai ",
		"Xiao ",
		"Ye ",
		"Yun ",
		"Hui ",
		"Han ",
		"Han ",
		"Jun ",
		"Wan ",
		"Xian ",
		"Kun ",
		"Zhou ",
		"Xi ",
		"Cheng ",
		"Sheng ",
		"Bu ",
		"Zhe ",
		"Zhe ",
		"Wu ",
		"Han ",
		"Hui ",
		"Hao ",
		"Chen ",
		"Wan ",
		"Tian ",
		"Zhuo ",
		"Zui ",
		"Zhou ",
		"Pu ",
		"Jing ",
		"Xi ",
		"Shan ",
		"Yi ",
		"Xi ",
		"Qing ",
		"Qi ",
		"Jing ",
		"Gui ",
		"Zhen ",
		"Yi ",
		"Zhi ",
		"An ",
		"Wan ",
		"Lin ",
		"Liang ",
		"Chang ",
		"Wang ",
		"Xiao ",
		"Zan ",
		"Hi ",
		"Xuan ",
		"Xuan ",
		"Yi ",
		"Xia ",
		"Yun ",
		"Hui ",
		"Fu ",
		"Min ",
		"Kui ",
		"He ",
		"Ying ",
		"Du ",
		"Wei ",
		"Shu ",
		"Qing ",
		"Mao ",
		"Nan ",
		"Jian ",
		"Nuan ",
		"An ",
		"Yang ",
		"Chun ",
		"Yao ",
		"Suo ",
		"Jin ",
		"Ming ",
		"Jiao ",
		"Kai ",
		"Gao ",
		"Weng ",
		"Chang ",
		"Qi ",
		"Hao ",
		"Yan ",
		"Li ",
		"Ai ",
		"Ji ",
		"Gui ",
		"Men ",
		"Zan ",
		"Xie ",
		"Hao ",
		"Mu ",
		"Mo ",
		"Cong ",
		"Ni ",
		"Zhang ",
		"Hui ",
		"Bao ",
		"Han ",
		"Xuan ",
		"Chuan ",
		"Liao ",
		"Xian ",
		"Dan ",
		"Jing ",
		"Pie ",
		"Lin ",
		"Tun ",
		"Xi ",
		"Yi ",
		"Ji ",
		"Huang ",
		"Tai ",
		"Ye ",
		"Ye ",
		"Li ",
		"Tan ",
		"Tong ",
		"Xiao ",
		"Fei ",
		"Qin ",
		"Zhao ",
		"Hao ",
		"Yi ",
		"Xiang ",
		"Xing ",
		"Sen ",
		"Jiao ",
		"Bao ",
		"Jing ",
		"Yian ",
		"Ai ",
		"Ye ",
		"Ru ",
		"Shu ",
		"Meng ",
		"Xun ",
		"Yao ",
		"Pu ",
		"Li ",
		"Chen ",
		"Kuang ",
		"Die ",
		"[?] ",
		"Yan ",
		"Huo ",
		"Lu ",
		"Xi ",
		"Rong ",
		"Long ",
		"Nang ",
		"Luo ",
		"Luan ",
		"Shai ",
		"Tang ",
		"Yan ",
		"Chu ",
		"Yue ",
		"Yue ",
		"Qu ",
		"Yi ",
		"Geng ",
		"Ye ",
		"Hu ",
		"He ",
		"Shu ",
		"Cao ",
		"Cao ",
		"Noboru ",
		"Man ",
		"Ceng ",
		"Ceng ",
		"Ti "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x67.js
var require_x67 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Zui ",
		"Can ",
		"Xu ",
		"Hui ",
		"Yin ",
		"Qie ",
		"Fen ",
		"Pi ",
		"Yue ",
		"You ",
		"Ruan ",
		"Peng ",
		"Ban ",
		"Fu ",
		"Ling ",
		"Fei ",
		"Qu ",
		"[?] ",
		"Nu ",
		"Tiao ",
		"Shuo ",
		"Zhen ",
		"Lang ",
		"Lang ",
		"Juan ",
		"Ming ",
		"Huang ",
		"Wang ",
		"Tun ",
		"Zhao ",
		"Ji ",
		"Qi ",
		"Ying ",
		"Zong ",
		"Wang ",
		"Tong ",
		"Lang ",
		"[?] ",
		"Meng ",
		"Long ",
		"Mu ",
		"Deng ",
		"Wei ",
		"Mo ",
		"Ben ",
		"Zha ",
		"Zhu ",
		"Zhu ",
		"[?] ",
		"Zhu ",
		"Ren ",
		"Ba ",
		"Po ",
		"Duo ",
		"Duo ",
		"Dao ",
		"Li ",
		"Qiu ",
		"Ji ",
		"Jiu ",
		"Bi ",
		"Xiu ",
		"Ting ",
		"Ci ",
		"Sha ",
		"Eburi ",
		"Za ",
		"Quan ",
		"Qian ",
		"Yu ",
		"Gan ",
		"Wu ",
		"Cha ",
		"Shan ",
		"Xun ",
		"Fan ",
		"Wu ",
		"Zi ",
		"Li ",
		"Xing ",
		"Cai ",
		"Cun ",
		"Ren ",
		"Shao ",
		"Tuo ",
		"Di ",
		"Zhang ",
		"Mang ",
		"Chi ",
		"Yi ",
		"Gu ",
		"Gong ",
		"Du ",
		"Yi ",
		"Qi ",
		"Shu ",
		"Gang ",
		"Tiao ",
		"Moku ",
		"Soma ",
		"Tochi ",
		"Lai ",
		"Sugi ",
		"Mang ",
		"Yang ",
		"Ma ",
		"Miao ",
		"Si ",
		"Yuan ",
		"Hang ",
		"Fei ",
		"Bei ",
		"Jie ",
		"Dong ",
		"Gao ",
		"Yao ",
		"Xian ",
		"Chu ",
		"Qun ",
		"Pa ",
		"Shu ",
		"Hua ",
		"Xin ",
		"Chou ",
		"Zhu ",
		"Chou ",
		"Song ",
		"Ban ",
		"Song ",
		"Ji ",
		"Yue ",
		"Jin ",
		"Gou ",
		"Ji ",
		"Mao ",
		"Pi ",
		"Bi ",
		"Wang ",
		"Ang ",
		"Fang ",
		"Fen ",
		"Yi ",
		"Fu ",
		"Nan ",
		"Xi ",
		"Hu ",
		"Ya ",
		"Dou ",
		"Xun ",
		"Zhen ",
		"Yao ",
		"Lin ",
		"Rui ",
		"E ",
		"Mei ",
		"Zhao ",
		"Guo ",
		"Zhi ",
		"Cong ",
		"Yun ",
		"Waku ",
		"Dou ",
		"Shu ",
		"Zao ",
		"[?] ",
		"Li ",
		"Haze ",
		"Jian ",
		"Cheng ",
		"Matsu ",
		"Qiang ",
		"Feng ",
		"Nan ",
		"Xiao ",
		"Xian ",
		"Ku ",
		"Ping ",
		"Yi ",
		"Xi ",
		"Zhi ",
		"Guai ",
		"Xiao ",
		"Jia ",
		"Jia ",
		"Gou ",
		"Fu ",
		"Mo ",
		"Yi ",
		"Ye ",
		"Ye ",
		"Shi ",
		"Nie ",
		"Bi ",
		"Duo ",
		"Yi ",
		"Ling ",
		"Bing ",
		"Ni ",
		"La ",
		"He ",
		"Pan ",
		"Fan ",
		"Zhong ",
		"Dai ",
		"Ci ",
		"Yang ",
		"Fu ",
		"Bo ",
		"Mou ",
		"Gan ",
		"Qi ",
		"Ran ",
		"Rou ",
		"Mao ",
		"Zhao ",
		"Song ",
		"Zhe ",
		"Xia ",
		"You ",
		"Shen ",
		"Ju ",
		"Tuo ",
		"Zuo ",
		"Nan ",
		"Ning ",
		"Yong ",
		"Di ",
		"Zhi ",
		"Zha ",
		"Cha ",
		"Dan ",
		"Gu ",
		"Pu ",
		"Jiu ",
		"Ao ",
		"Fu ",
		"Jian ",
		"Bo ",
		"Duo ",
		"Ke ",
		"Nai ",
		"Zhu ",
		"Bi ",
		"Liu ",
		"Chai ",
		"Zha ",
		"Si ",
		"Zhu ",
		"Pei ",
		"Shi ",
		"Guai ",
		"Cha ",
		"Yao ",
		"Jue ",
		"Jiu ",
		"Shi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x68.js
var require_x68 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Zhi ",
		"Liu ",
		"Mei ",
		"Hoy ",
		"Rong ",
		"Zha ",
		"[?] ",
		"Biao ",
		"Zhan ",
		"Jie ",
		"Long ",
		"Dong ",
		"Lu ",
		"Sayng ",
		"Li ",
		"Lan ",
		"Yong ",
		"Shu ",
		"Xun ",
		"Shuan ",
		"Qi ",
		"Zhen ",
		"Qi ",
		"Li ",
		"Yi ",
		"Xiang ",
		"Zhen ",
		"Li ",
		"Su ",
		"Gua ",
		"Kan ",
		"Bing ",
		"Ren ",
		"Xiao ",
		"Bo ",
		"Ren ",
		"Bing ",
		"Zi ",
		"Chou ",
		"Yi ",
		"Jie ",
		"Xu ",
		"Zhu ",
		"Jian ",
		"Zui ",
		"Er ",
		"Er ",
		"You ",
		"Fa ",
		"Gong ",
		"Kao ",
		"Lao ",
		"Zhan ",
		"Li ",
		"Yin ",
		"Yang ",
		"He ",
		"Gen ",
		"Zhi ",
		"Chi ",
		"Ge ",
		"Zai ",
		"Luan ",
		"Fu ",
		"Jie ",
		"Hang ",
		"Gui ",
		"Tao ",
		"Guang ",
		"Wei ",
		"Kuang ",
		"Ru ",
		"An ",
		"An ",
		"Juan ",
		"Yi ",
		"Zhuo ",
		"Ku ",
		"Zhi ",
		"Qiong ",
		"Tong ",
		"Sang ",
		"Sang ",
		"Huan ",
		"Jie ",
		"Jiu ",
		"Xue ",
		"Duo ",
		"Zhui ",
		"Yu ",
		"Zan ",
		"Kasei ",
		"Ying ",
		"Masu ",
		"[?] ",
		"Zhan ",
		"Ya ",
		"Nao ",
		"Zhen ",
		"Dang ",
		"Qi ",
		"Qiao ",
		"Hua ",
		"Kuai ",
		"Jiang ",
		"Zhuang ",
		"Xun ",
		"Suo ",
		"Sha ",
		"Zhen ",
		"Bei ",
		"Ting ",
		"Gua ",
		"Jing ",
		"Bo ",
		"Ben ",
		"Fu ",
		"Rui ",
		"Tong ",
		"Jue ",
		"Xi ",
		"Lang ",
		"Liu ",
		"Feng ",
		"Qi ",
		"Wen ",
		"Jun ",
		"Gan ",
		"Cu ",
		"Liang ",
		"Qiu ",
		"Ting ",
		"You ",
		"Mei ",
		"Bang ",
		"Long ",
		"Peng ",
		"Zhuang ",
		"Di ",
		"Xuan ",
		"Tu ",
		"Zao ",
		"Ao ",
		"Gu ",
		"Bi ",
		"Di ",
		"Han ",
		"Zi ",
		"Zhi ",
		"Ren ",
		"Bei ",
		"Geng ",
		"Jian ",
		"Huan ",
		"Wan ",
		"Nuo ",
		"Jia ",
		"Tiao ",
		"Ji ",
		"Xiao ",
		"Lu ",
		"Huan ",
		"Shao ",
		"Cen ",
		"Fen ",
		"Song ",
		"Meng ",
		"Wu ",
		"Li ",
		"Li ",
		"Dou ",
		"Cen ",
		"Ying ",
		"Suo ",
		"Ju ",
		"Ti ",
		"Jie ",
		"Kun ",
		"Zhuo ",
		"Shu ",
		"Chan ",
		"Fan ",
		"Wei ",
		"Jing ",
		"Li ",
		"Bing ",
		"Fumoto ",
		"Shikimi ",
		"Tao ",
		"Zhi ",
		"Lai ",
		"Lian ",
		"Jian ",
		"Zhuo ",
		"Ling ",
		"Li ",
		"Qi ",
		"Bing ",
		"Zhun ",
		"Cong ",
		"Qian ",
		"Mian ",
		"Qi ",
		"Qi ",
		"Cai ",
		"Gun ",
		"Chan ",
		"Te ",
		"Fei ",
		"Pai ",
		"Bang ",
		"Pou ",
		"Hun ",
		"Zong ",
		"Cheng ",
		"Zao ",
		"Ji ",
		"Li ",
		"Peng ",
		"Yu ",
		"Yu ",
		"Gu ",
		"Hun ",
		"Dong ",
		"Tang ",
		"Gang ",
		"Wang ",
		"Di ",
		"Xi ",
		"Fan ",
		"Cheng ",
		"Zhan ",
		"Qi ",
		"Yuan ",
		"Yan ",
		"Yu ",
		"Quan ",
		"Yi ",
		"Sen ",
		"Ren ",
		"Chui ",
		"Leng ",
		"Qi ",
		"Zhuo ",
		"Fu ",
		"Ke ",
		"Lai ",
		"Zou ",
		"Zou ",
		"Zhuo ",
		"Guan ",
		"Fen ",
		"Fen ",
		"Chen ",
		"Qiong ",
		"Nie "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x69.js
var require_x69 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Wan ",
		"Guo ",
		"Lu ",
		"Hao ",
		"Jie ",
		"Yi ",
		"Chou ",
		"Ju ",
		"Ju ",
		"Cheng ",
		"Zuo ",
		"Liang ",
		"Qiang ",
		"Zhi ",
		"Zhui ",
		"Ya ",
		"Ju ",
		"Bei ",
		"Jiao ",
		"Zhuo ",
		"Zi ",
		"Bin ",
		"Peng ",
		"Ding ",
		"Chu ",
		"Chang ",
		"Kunugi ",
		"Momiji ",
		"Jian ",
		"Gui ",
		"Xi ",
		"Du ",
		"Qian ",
		"Kunugi ",
		"Soko ",
		"Shide ",
		"Luo ",
		"Zhi ",
		"Ken ",
		"Myeng ",
		"Tafu ",
		"[?] ",
		"Peng ",
		"Zhan ",
		"[?] ",
		"Tuo ",
		"Sen ",
		"Duo ",
		"Ye ",
		"Fou ",
		"Wei ",
		"Wei ",
		"Duan ",
		"Jia ",
		"Zong ",
		"Jian ",
		"Yi ",
		"Shen ",
		"Xi ",
		"Yan ",
		"Yan ",
		"Chuan ",
		"Zhan ",
		"Chun ",
		"Yu ",
		"He ",
		"Zha ",
		"Wo ",
		"Pian ",
		"Bi ",
		"Yao ",
		"Huo ",
		"Xu ",
		"Ruo ",
		"Yang ",
		"La ",
		"Yan ",
		"Ben ",
		"Hun ",
		"Kui ",
		"Jie ",
		"Kui ",
		"Si ",
		"Feng ",
		"Xie ",
		"Tuo ",
		"Zhi ",
		"Jian ",
		"Mu ",
		"Mao ",
		"Chu ",
		"Hu ",
		"Hu ",
		"Lian ",
		"Leng ",
		"Ting ",
		"Nan ",
		"Yu ",
		"You ",
		"Mei ",
		"Song ",
		"Xuan ",
		"Xuan ",
		"Ying ",
		"Zhen ",
		"Pian ",
		"Ye ",
		"Ji ",
		"Jie ",
		"Ye ",
		"Chu ",
		"Shun ",
		"Yu ",
		"Cou ",
		"Wei ",
		"Mei ",
		"Di ",
		"Ji ",
		"Jie ",
		"Kai ",
		"Qiu ",
		"Ying ",
		"Rou ",
		"Heng ",
		"Lou ",
		"Le ",
		"Hazou ",
		"Katsura ",
		"Pin ",
		"Muro ",
		"Gai ",
		"Tan ",
		"Lan ",
		"Yun ",
		"Yu ",
		"Chen ",
		"Lu ",
		"Ju ",
		"Sakaki ",
		"[?] ",
		"Pi ",
		"Xie ",
		"Jia ",
		"Yi ",
		"Zhan ",
		"Fu ",
		"Nai ",
		"Mi ",
		"Lang ",
		"Rong ",
		"Gu ",
		"Jian ",
		"Ju ",
		"Ta ",
		"Yao ",
		"Zhen ",
		"Bang ",
		"Sha ",
		"Yuan ",
		"Zi ",
		"Ming ",
		"Su ",
		"Jia ",
		"Yao ",
		"Jie ",
		"Huang ",
		"Gan ",
		"Fei ",
		"Zha ",
		"Qian ",
		"Ma ",
		"Sun ",
		"Yuan ",
		"Xie ",
		"Rong ",
		"Shi ",
		"Zhi ",
		"Cui ",
		"Yun ",
		"Ting ",
		"Liu ",
		"Rong ",
		"Tang ",
		"Que ",
		"Zhai ",
		"Si ",
		"Sheng ",
		"Ta ",
		"Ke ",
		"Xi ",
		"Gu ",
		"Qi ",
		"Kao ",
		"Gao ",
		"Sun ",
		"Pan ",
		"Tao ",
		"Ge ",
		"Xun ",
		"Dian ",
		"Nou ",
		"Ji ",
		"Shuo ",
		"Gou ",
		"Chui ",
		"Qiang ",
		"Cha ",
		"Qian ",
		"Huai ",
		"Mei ",
		"Xu ",
		"Gang ",
		"Gao ",
		"Zhuo ",
		"Tuo ",
		"Hashi ",
		"Yang ",
		"Dian ",
		"Jia ",
		"Jian ",
		"Zui ",
		"Kashi ",
		"Ori ",
		"Bin ",
		"Zhu ",
		"[?] ",
		"Xi ",
		"Qi ",
		"Lian ",
		"Hui ",
		"Yong ",
		"Qian ",
		"Guo ",
		"Gai ",
		"Gai ",
		"Tuan ",
		"Hua ",
		"Cu ",
		"Sen ",
		"Cui ",
		"Beng ",
		"You ",
		"Hu ",
		"Jiang ",
		"Hu ",
		"Huan ",
		"Kui ",
		"Yi ",
		"Nie ",
		"Gao ",
		"Kang ",
		"Gui ",
		"Gui ",
		"Cao ",
		"Man ",
		"Jin "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x6a.js
var require_x6a = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Di ",
		"Zhuang ",
		"Le ",
		"Lang ",
		"Chen ",
		"Cong ",
		"Li ",
		"Xiu ",
		"Qing ",
		"Shuang ",
		"Fan ",
		"Tong ",
		"Guan ",
		"Ji ",
		"Suo ",
		"Lei ",
		"Lu ",
		"Liang ",
		"Mi ",
		"Lou ",
		"Chao ",
		"Su ",
		"Ke ",
		"Shu ",
		"Tang ",
		"Biao ",
		"Lu ",
		"Jiu ",
		"Shu ",
		"Zha ",
		"Shu ",
		"Zhang ",
		"Men ",
		"Mo ",
		"Niao ",
		"Yang ",
		"Tiao ",
		"Peng ",
		"Zhu ",
		"Sha ",
		"Xi ",
		"Quan ",
		"Heng ",
		"Jian ",
		"Cong ",
		"[?] ",
		"Hokuso ",
		"Qiang ",
		"Tara ",
		"Ying ",
		"Er ",
		"Xin ",
		"Zhi ",
		"Qiao ",
		"Zui ",
		"Cong ",
		"Pu ",
		"Shu ",
		"Hua ",
		"Kui ",
		"Zhen ",
		"Zun ",
		"Yue ",
		"Zhan ",
		"Xi ",
		"Xun ",
		"Dian ",
		"Fa ",
		"Gan ",
		"Mo ",
		"Wu ",
		"Qiao ",
		"Nao ",
		"Lin ",
		"Liu ",
		"Qiao ",
		"Xian ",
		"Run ",
		"Fan ",
		"Zhan ",
		"Tuo ",
		"Lao ",
		"Yun ",
		"Shun ",
		"Tui ",
		"Cheng ",
		"Tang ",
		"Meng ",
		"Ju ",
		"Cheng ",
		"Su ",
		"Jue ",
		"Jue ",
		"Tan ",
		"Hui ",
		"Ji ",
		"Nuo ",
		"Xiang ",
		"Tuo ",
		"Ning ",
		"Rui ",
		"Zhu ",
		"Chuang ",
		"Zeng ",
		"Fen ",
		"Qiong ",
		"Ran ",
		"Heng ",
		"Cen ",
		"Gu ",
		"Liu ",
		"Lao ",
		"Gao ",
		"Chu ",
		"Zusa ",
		"Nude ",
		"Ca ",
		"San ",
		"Ji ",
		"Dou ",
		"Shou ",
		"Lu ",
		"[?] ",
		"[?] ",
		"Yuan ",
		"Ta ",
		"Shu ",
		"Jiang ",
		"Tan ",
		"Lin ",
		"Nong ",
		"Yin ",
		"Xi ",
		"Sui ",
		"Shan ",
		"Zui ",
		"Xuan ",
		"Cheng ",
		"Gan ",
		"Ju ",
		"Zui ",
		"Yi ",
		"Qin ",
		"Pu ",
		"Yan ",
		"Lei ",
		"Feng ",
		"Hui ",
		"Dang ",
		"Ji ",
		"Sui ",
		"Bo ",
		"Bi ",
		"Ding ",
		"Chu ",
		"Zhua ",
		"Kuai ",
		"Ji ",
		"Jie ",
		"Jia ",
		"Qing ",
		"Zhe ",
		"Jian ",
		"Qiang ",
		"Dao ",
		"Yi ",
		"Biao ",
		"Song ",
		"She ",
		"Lin ",
		"Kunugi ",
		"Cha ",
		"Meng ",
		"Yin ",
		"Tao ",
		"Tai ",
		"Mian ",
		"Qi ",
		"Toan ",
		"Bin ",
		"Huo ",
		"Ji ",
		"Qian ",
		"Mi ",
		"Ning ",
		"Yi ",
		"Gao ",
		"Jian ",
		"Yin ",
		"Er ",
		"Qing ",
		"Yan ",
		"Qi ",
		"Mi ",
		"Zhao ",
		"Gui ",
		"Chun ",
		"Ji ",
		"Kui ",
		"Po ",
		"Deng ",
		"Chu ",
		"[?] ",
		"Mian ",
		"You ",
		"Zhi ",
		"Guang ",
		"Qian ",
		"Lei ",
		"Lei ",
		"Sa ",
		"Lu ",
		"Li ",
		"Cuan ",
		"Lu ",
		"Mie ",
		"Hui ",
		"Ou ",
		"Lu ",
		"Jie ",
		"Gao ",
		"Du ",
		"Yuan ",
		"Li ",
		"Fei ",
		"Zhuo ",
		"Sou ",
		"Lian ",
		"Tamo ",
		"Chu ",
		"[?] ",
		"Zhu ",
		"Lu ",
		"Yan ",
		"Li ",
		"Zhu ",
		"Chen ",
		"Jie ",
		"E ",
		"Su ",
		"Huai ",
		"Nie ",
		"Yu ",
		"Long ",
		"Lai ",
		"[?] ",
		"Xian ",
		"Kwi ",
		"Ju ",
		"Xiao ",
		"Ling ",
		"Ying ",
		"Jian ",
		"Yin ",
		"You ",
		"Ying "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x6b.js
var require_x6b = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Xiang ",
		"Nong ",
		"Bo ",
		"Chan ",
		"Lan ",
		"Ju ",
		"Shuang ",
		"She ",
		"Wei ",
		"Cong ",
		"Quan ",
		"Qu ",
		"Cang ",
		"[?] ",
		"Yu ",
		"Luo ",
		"Li ",
		"Zan ",
		"Luan ",
		"Dang ",
		"Jue ",
		"Em ",
		"Lan ",
		"Lan ",
		"Zhu ",
		"Lei ",
		"Li ",
		"Ba ",
		"Nang ",
		"Yu ",
		"Ling ",
		"Tsuki ",
		"Qian ",
		"Ci ",
		"Huan ",
		"Xin ",
		"Yu ",
		"Yu ",
		"Qian ",
		"Ou ",
		"Xu ",
		"Chao ",
		"Chu ",
		"Chi ",
		"Kai ",
		"Yi ",
		"Jue ",
		"Xi ",
		"Xu ",
		"Xia ",
		"Yu ",
		"Kuai ",
		"Lang ",
		"Kuan ",
		"Shuo ",
		"Xi ",
		"Ai ",
		"Yi ",
		"Qi ",
		"Hu ",
		"Chi ",
		"Qin ",
		"Kuan ",
		"Kan ",
		"Kuan ",
		"Kan ",
		"Chuan ",
		"Sha ",
		"Gua ",
		"Yin ",
		"Xin ",
		"Xie ",
		"Yu ",
		"Qian ",
		"Xiao ",
		"Yi ",
		"Ge ",
		"Wu ",
		"Tan ",
		"Jin ",
		"Ou ",
		"Hu ",
		"Ti ",
		"Huan ",
		"Xu ",
		"Pen ",
		"Xi ",
		"Xiao ",
		"Xu ",
		"Xi ",
		"Sen ",
		"Lian ",
		"Chu ",
		"Yi ",
		"Kan ",
		"Yu ",
		"Chuo ",
		"Huan ",
		"Zhi ",
		"Zheng ",
		"Ci ",
		"Bu ",
		"Wu ",
		"Qi ",
		"Bu ",
		"Bu ",
		"Wai ",
		"Ju ",
		"Qian ",
		"Chi ",
		"Se ",
		"Chi ",
		"Se ",
		"Zhong ",
		"Sui ",
		"Sui ",
		"Li ",
		"Cuo ",
		"Yu ",
		"Li ",
		"Gui ",
		"Dai ",
		"Dai ",
		"Si ",
		"Jian ",
		"Zhe ",
		"Mo ",
		"Mo ",
		"Yao ",
		"Mo ",
		"Cu ",
		"Yang ",
		"Tian ",
		"Sheng ",
		"Dai ",
		"Shang ",
		"Xu ",
		"Xun ",
		"Shu ",
		"Can ",
		"Jue ",
		"Piao ",
		"Qia ",
		"Qiu ",
		"Su ",
		"Qing ",
		"Yun ",
		"Lian ",
		"Yi ",
		"Fou ",
		"Zhi ",
		"Ye ",
		"Can ",
		"Hun ",
		"Dan ",
		"Ji ",
		"Ye ",
		"Zhen ",
		"Yun ",
		"Wen ",
		"Chou ",
		"Bin ",
		"Ti ",
		"Jin ",
		"Shang ",
		"Yin ",
		"Diao ",
		"Cu ",
		"Hui ",
		"Cuan ",
		"Yi ",
		"Dan ",
		"Du ",
		"Jiang ",
		"Lian ",
		"Bin ",
		"Du ",
		"Tsukusu ",
		"Jian ",
		"Shu ",
		"Ou ",
		"Duan ",
		"Zhu ",
		"Yin ",
		"Qing ",
		"Yi ",
		"Sha ",
		"Que ",
		"Ke ",
		"Yao ",
		"Jun ",
		"Dian ",
		"Hui ",
		"Hui ",
		"Gu ",
		"Que ",
		"Ji ",
		"Yi ",
		"Ou ",
		"Hui ",
		"Duan ",
		"Yi ",
		"Xiao ",
		"Wu ",
		"Guan ",
		"Mu ",
		"Mei ",
		"Mei ",
		"Ai ",
		"Zuo ",
		"Du ",
		"Yu ",
		"Bi ",
		"Bi ",
		"Bi ",
		"Pi ",
		"Pi ",
		"Bi ",
		"Chan ",
		"Mao ",
		"[?] ",
		"[?] ",
		"Pu ",
		"Mushiru ",
		"Jia ",
		"Zhan ",
		"Sai ",
		"Mu ",
		"Tuo ",
		"Xun ",
		"Er ",
		"Rong ",
		"Xian ",
		"Ju ",
		"Mu ",
		"Hao ",
		"Qiu ",
		"Dou ",
		"Mushiru ",
		"Tan ",
		"Pei ",
		"Ju ",
		"Duo ",
		"Cui ",
		"Bi ",
		"San ",
		"[?] ",
		"Mao ",
		"Sui ",
		"Yu ",
		"Yu ",
		"Tuo ",
		"He ",
		"Jian ",
		"Ta ",
		"San "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x6c.js
var require_x6c = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Lu ",
		"Mu ",
		"Li ",
		"Tong ",
		"Rong ",
		"Chang ",
		"Pu ",
		"Luo ",
		"Zhan ",
		"Sao ",
		"Zhan ",
		"Meng ",
		"Luo ",
		"Qu ",
		"Die ",
		"Shi ",
		"Di ",
		"Min ",
		"Jue ",
		"Mang ",
		"Qi ",
		"Pie ",
		"Nai ",
		"Qi ",
		"Dao ",
		"Xian ",
		"Chuan ",
		"Fen ",
		"Ri ",
		"Nei ",
		"[?] ",
		"Fu ",
		"Shen ",
		"Dong ",
		"Qing ",
		"Qi ",
		"Yin ",
		"Xi ",
		"Hai ",
		"Yang ",
		"An ",
		"Ya ",
		"Ke ",
		"Qing ",
		"Ya ",
		"Dong ",
		"Dan ",
		"Lu ",
		"Qing ",
		"Yang ",
		"Yun ",
		"Yun ",
		"Shui ",
		"San ",
		"Zheng ",
		"Bing ",
		"Yong ",
		"Dang ",
		"Shitamizu ",
		"Le ",
		"Ni ",
		"Tun ",
		"Fan ",
		"Gui ",
		"Ting ",
		"Zhi ",
		"Qiu ",
		"Bin ",
		"Ze ",
		"Mian ",
		"Cuan ",
		"Hui ",
		"Diao ",
		"Yi ",
		"Cha ",
		"Zhuo ",
		"Chuan ",
		"Wan ",
		"Fan ",
		"Dai ",
		"Xi ",
		"Tuo ",
		"Mang ",
		"Qiu ",
		"Qi ",
		"Shan ",
		"Pai ",
		"Han ",
		"Qian ",
		"Wu ",
		"Wu ",
		"Xun ",
		"Si ",
		"Ru ",
		"Gong ",
		"Jiang ",
		"Chi ",
		"Wu ",
		"Tsuchi ",
		"[?] ",
		"Tang ",
		"Zhi ",
		"Chi ",
		"Qian ",
		"Mi ",
		"Yu ",
		"Wang ",
		"Qing ",
		"Jing ",
		"Rui ",
		"Jun ",
		"Hong ",
		"Tai ",
		"Quan ",
		"Ji ",
		"Bian ",
		"Bian ",
		"Gan ",
		"Wen ",
		"Zhong ",
		"Fang ",
		"Xiong ",
		"Jue ",
		"Hang ",
		"Niou ",
		"Qi ",
		"Fen ",
		"Xu ",
		"Xu ",
		"Qin ",
		"Yi ",
		"Wo ",
		"Yun ",
		"Yuan ",
		"Hang ",
		"Yan ",
		"Chen ",
		"Chen ",
		"Dan ",
		"You ",
		"Dun ",
		"Hu ",
		"Huo ",
		"Qie ",
		"Mu ",
		"Rou ",
		"Mei ",
		"Ta ",
		"Mian ",
		"Wu ",
		"Chong ",
		"Tian ",
		"Bi ",
		"Sha ",
		"Zhi ",
		"Pei ",
		"Pan ",
		"Zhui ",
		"Za ",
		"Gou ",
		"Liu ",
		"Mei ",
		"Ze ",
		"Feng ",
		"Ou ",
		"Li ",
		"Lun ",
		"Cang ",
		"Feng ",
		"Wei ",
		"Hu ",
		"Mo ",
		"Mei ",
		"Shu ",
		"Ju ",
		"Zan ",
		"Tuo ",
		"Tuo ",
		"Tuo ",
		"He ",
		"Li ",
		"Mi ",
		"Yi ",
		"Fa ",
		"Fei ",
		"You ",
		"Tian ",
		"Zhi ",
		"Zhao ",
		"Gu ",
		"Zhan ",
		"Yan ",
		"Si ",
		"Kuang ",
		"Jiong ",
		"Ju ",
		"Xie ",
		"Qiu ",
		"Yi ",
		"Jia ",
		"Zhong ",
		"Quan ",
		"Bo ",
		"Hui ",
		"Mi ",
		"Ben ",
		"Zhuo ",
		"Chu ",
		"Le ",
		"You ",
		"Gu ",
		"Hong ",
		"Gan ",
		"Fa ",
		"Mao ",
		"Si ",
		"Hu ",
		"Ping ",
		"Ci ",
		"Fan ",
		"Chi ",
		"Su ",
		"Ning ",
		"Cheng ",
		"Ling ",
		"Pao ",
		"Bo ",
		"Qi ",
		"Si ",
		"Ni ",
		"Ju ",
		"Yue ",
		"Zhu ",
		"Sheng ",
		"Lei ",
		"Xuan ",
		"Xue ",
		"Fu ",
		"Pan ",
		"Min ",
		"Tai ",
		"Yang ",
		"Ji ",
		"Yong ",
		"Guan ",
		"Beng ",
		"Xue ",
		"Long ",
		"Lu ",
		"[?] ",
		"Bo ",
		"Xie ",
		"Po ",
		"Ze ",
		"Jing ",
		"Yin "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x6d.js
var require_x6d = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Zhou ",
		"Ji ",
		"Yi ",
		"Hui ",
		"Hui ",
		"Zui ",
		"Cheng ",
		"Yin ",
		"Wei ",
		"Hou ",
		"Jian ",
		"Yang ",
		"Lie ",
		"Si ",
		"Ji ",
		"Er ",
		"Xing ",
		"Fu ",
		"Sa ",
		"Suo ",
		"Zhi ",
		"Yin ",
		"Wu ",
		"Xi ",
		"Kao ",
		"Zhu ",
		"Jiang ",
		"Luo ",
		"[?] ",
		"An ",
		"Dong ",
		"Yi ",
		"Mou ",
		"Lei ",
		"Yi ",
		"Mi ",
		"Quan ",
		"Jin ",
		"Mo ",
		"Wei ",
		"Xiao ",
		"Xie ",
		"Hong ",
		"Xu ",
		"Shuo ",
		"Kuang ",
		"Tao ",
		"Qie ",
		"Ju ",
		"Er ",
		"Zhou ",
		"Ru ",
		"Ping ",
		"Xun ",
		"Xiong ",
		"Zhi ",
		"Guang ",
		"Huan ",
		"Ming ",
		"Huo ",
		"Wa ",
		"Qia ",
		"Pai ",
		"Wu ",
		"Qu ",
		"Liu ",
		"Yi ",
		"Jia ",
		"Jing ",
		"Qian ",
		"Jiang ",
		"Jiao ",
		"Cheng ",
		"Shi ",
		"Zhuo ",
		"Ce ",
		"Pal ",
		"Kuai ",
		"Ji ",
		"Liu ",
		"Chan ",
		"Hun ",
		"Hu ",
		"Nong ",
		"Xun ",
		"Jin ",
		"Lie ",
		"Qiu ",
		"Wei ",
		"Zhe ",
		"Jun ",
		"Han ",
		"Bang ",
		"Mang ",
		"Zhuo ",
		"You ",
		"Xi ",
		"Bo ",
		"Dou ",
		"Wan ",
		"Hong ",
		"Yi ",
		"Pu ",
		"Ying ",
		"Lan ",
		"Hao ",
		"Lang ",
		"Han ",
		"Li ",
		"Geng ",
		"Fu ",
		"Wu ",
		"Lian ",
		"Chun ",
		"Feng ",
		"Yi ",
		"Yu ",
		"Tong ",
		"Lao ",
		"Hai ",
		"Jin ",
		"Jia ",
		"Chong ",
		"Weng ",
		"Mei ",
		"Sui ",
		"Cheng ",
		"Pei ",
		"Xian ",
		"Shen ",
		"Tu ",
		"Kun ",
		"Pin ",
		"Nie ",
		"Han ",
		"Jing ",
		"Xiao ",
		"She ",
		"Nian ",
		"Tu ",
		"Yong ",
		"Xiao ",
		"Xian ",
		"Ting ",
		"E ",
		"Su ",
		"Tun ",
		"Juan ",
		"Cen ",
		"Ti ",
		"Li ",
		"Shui ",
		"Si ",
		"Lei ",
		"Shui ",
		"Tao ",
		"Du ",
		"Lao ",
		"Lai ",
		"Lian ",
		"Wei ",
		"Wo ",
		"Yun ",
		"Huan ",
		"Di ",
		"[?] ",
		"Run ",
		"Jian ",
		"Zhang ",
		"Se ",
		"Fu ",
		"Guan ",
		"Xing ",
		"Shou ",
		"Shuan ",
		"Ya ",
		"Chuo ",
		"Zhang ",
		"Ye ",
		"Kong ",
		"Wo ",
		"Han ",
		"Tuo ",
		"Dong ",
		"He ",
		"Wo ",
		"Ju ",
		"Gan ",
		"Liang ",
		"Hun ",
		"Ta ",
		"Zhuo ",
		"Dian ",
		"Qie ",
		"De ",
		"Juan ",
		"Zi ",
		"Xi ",
		"Yao ",
		"Qi ",
		"Gu ",
		"Guo ",
		"Han ",
		"Lin ",
		"Tang ",
		"Zhou ",
		"Peng ",
		"Hao ",
		"Chang ",
		"Shu ",
		"Qi ",
		"Fang ",
		"Chi ",
		"Lu ",
		"Nao ",
		"Ju ",
		"Tao ",
		"Cong ",
		"Lei ",
		"Zhi ",
		"Peng ",
		"Fei ",
		"Song ",
		"Tian ",
		"Pi ",
		"Dan ",
		"Yu ",
		"Ni ",
		"Yu ",
		"Lu ",
		"Gan ",
		"Mi ",
		"Jing ",
		"Ling ",
		"Lun ",
		"Yin ",
		"Cui ",
		"Qu ",
		"Huai ",
		"Yu ",
		"Nian ",
		"Shen ",
		"Piao ",
		"Chun ",
		"Wa ",
		"Yuan ",
		"Lai ",
		"Hun ",
		"Qing ",
		"Yan ",
		"Qian ",
		"Tian ",
		"Miao ",
		"Zhi ",
		"Yin ",
		"Mi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x6e.js
var require_x6e = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ben ",
		"Yuan ",
		"Wen ",
		"Re ",
		"Fei ",
		"Qing ",
		"Yuan ",
		"Ke ",
		"Ji ",
		"She ",
		"Yuan ",
		"Shibui ",
		"Lu ",
		"Zi ",
		"Du ",
		"[?] ",
		"Jian ",
		"Min ",
		"Pi ",
		"Tani ",
		"Yu ",
		"Yuan ",
		"Shen ",
		"Shen ",
		"Rou ",
		"Huan ",
		"Zhu ",
		"Jian ",
		"Nuan ",
		"Yu ",
		"Qiu ",
		"Ting ",
		"Qu ",
		"Du ",
		"Feng ",
		"Zha ",
		"Bo ",
		"Wo ",
		"Wo ",
		"Di ",
		"Wei ",
		"Wen ",
		"Ru ",
		"Xie ",
		"Ce ",
		"Wei ",
		"Ge ",
		"Gang ",
		"Yan ",
		"Hong ",
		"Xuan ",
		"Mi ",
		"Ke ",
		"Mao ",
		"Ying ",
		"Yan ",
		"You ",
		"Hong ",
		"Miao ",
		"Xing ",
		"Mei ",
		"Zai ",
		"Hun ",
		"Nai ",
		"Kui ",
		"Shi ",
		"E ",
		"Pai ",
		"Mei ",
		"Lian ",
		"Qi ",
		"Qi ",
		"Mei ",
		"Tian ",
		"Cou ",
		"Wei ",
		"Can ",
		"Tuan ",
		"Mian ",
		"Hui ",
		"Mo ",
		"Xu ",
		"Ji ",
		"Pen ",
		"Jian ",
		"Jian ",
		"Hu ",
		"Feng ",
		"Xiang ",
		"Yi ",
		"Yin ",
		"Zhan ",
		"Shi ",
		"Jie ",
		"Cheng ",
		"Huang ",
		"Tan ",
		"Yu ",
		"Bi ",
		"Min ",
		"Shi ",
		"Tu ",
		"Sheng ",
		"Yong ",
		"Qu ",
		"Zhong ",
		"Suei ",
		"Jiu ",
		"Jiao ",
		"Qiou ",
		"Yin ",
		"Tang ",
		"Long ",
		"Huo ",
		"Yuan ",
		"Nan ",
		"Ban ",
		"You ",
		"Quan ",
		"Chui ",
		"Liang ",
		"Chan ",
		"Yan ",
		"Chun ",
		"Nie ",
		"Zi ",
		"Wan ",
		"Shi ",
		"Man ",
		"Ying ",
		"Ratsu ",
		"Kui ",
		"[?] ",
		"Jian ",
		"Xu ",
		"Lu ",
		"Gui ",
		"Gai ",
		"[?] ",
		"[?] ",
		"Po ",
		"Jin ",
		"Gui ",
		"Tang ",
		"Yuan ",
		"Suo ",
		"Yuan ",
		"Lian ",
		"Yao ",
		"Meng ",
		"Zhun ",
		"Sheng ",
		"Ke ",
		"Tai ",
		"Da ",
		"Wa ",
		"Liu ",
		"Gou ",
		"Sao ",
		"Ming ",
		"Zha ",
		"Shi ",
		"Yi ",
		"Lun ",
		"Ma ",
		"Pu ",
		"Wei ",
		"Li ",
		"Cai ",
		"Wu ",
		"Xi ",
		"Wen ",
		"Qiang ",
		"Ze ",
		"Shi ",
		"Su ",
		"Yi ",
		"Zhen ",
		"Sou ",
		"Yun ",
		"Xiu ",
		"Yin ",
		"Rong ",
		"Hun ",
		"Su ",
		"Su ",
		"Ni ",
		"Ta ",
		"Shi ",
		"Ru ",
		"Wei ",
		"Pan ",
		"Chu ",
		"Chu ",
		"Pang ",
		"Weng ",
		"Cang ",
		"Mie ",
		"He ",
		"Dian ",
		"Hao ",
		"Huang ",
		"Xi ",
		"Zi ",
		"Di ",
		"Zhi ",
		"Ying ",
		"Fu ",
		"Jie ",
		"Hua ",
		"Ge ",
		"Zi ",
		"Tao ",
		"Teng ",
		"Sui ",
		"Bi ",
		"Jiao ",
		"Hui ",
		"Gun ",
		"Yin ",
		"Gao ",
		"Long ",
		"Zhi ",
		"Yan ",
		"She ",
		"Man ",
		"Ying ",
		"Chun ",
		"Lu ",
		"Lan ",
		"Luan ",
		"[?] ",
		"Bin ",
		"Tan ",
		"Yu ",
		"Sou ",
		"Hu ",
		"Bi ",
		"Biao ",
		"Zhi ",
		"Jiang ",
		"Kou ",
		"Shen ",
		"Shang ",
		"Di ",
		"Mi ",
		"Ao ",
		"Lu ",
		"Hu ",
		"Hu ",
		"You ",
		"Chan ",
		"Fan ",
		"Yong ",
		"Gun ",
		"Man "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x6f.js
var require_x6f = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Qing ",
		"Yu ",
		"Piao ",
		"Ji ",
		"Ya ",
		"Jiao ",
		"Qi ",
		"Xi ",
		"Ji ",
		"Lu ",
		"Lu ",
		"Long ",
		"Jin ",
		"Guo ",
		"Cong ",
		"Lou ",
		"Zhi ",
		"Gai ",
		"Qiang ",
		"Li ",
		"Yan ",
		"Cao ",
		"Jiao ",
		"Cong ",
		"Qun ",
		"Tuan ",
		"Ou ",
		"Teng ",
		"Ye ",
		"Xi ",
		"Mi ",
		"Tang ",
		"Mo ",
		"Shang ",
		"Han ",
		"Lian ",
		"Lan ",
		"Wa ",
		"Li ",
		"Qian ",
		"Feng ",
		"Xuan ",
		"Yi ",
		"Man ",
		"Zi ",
		"Mang ",
		"Kang ",
		"Lei ",
		"Peng ",
		"Shu ",
		"Zhang ",
		"Zhang ",
		"Chong ",
		"Xu ",
		"Huan ",
		"Kuo ",
		"Jian ",
		"Yan ",
		"Chuang ",
		"Liao ",
		"Cui ",
		"Ti ",
		"Yang ",
		"Jiang ",
		"Cong ",
		"Ying ",
		"Hong ",
		"Xun ",
		"Shu ",
		"Guan ",
		"Ying ",
		"Xiao ",
		"[?] ",
		"[?] ",
		"Xu ",
		"Lian ",
		"Zhi ",
		"Wei ",
		"Pi ",
		"Jue ",
		"Jiao ",
		"Po ",
		"Dang ",
		"Hui ",
		"Jie ",
		"Wu ",
		"Pa ",
		"Ji ",
		"Pan ",
		"Gui ",
		"Xiao ",
		"Qian ",
		"Qian ",
		"Xi ",
		"Lu ",
		"Xi ",
		"Xuan ",
		"Dun ",
		"Huang ",
		"Min ",
		"Run ",
		"Su ",
		"Liao ",
		"Zhen ",
		"Zhong ",
		"Yi ",
		"Di ",
		"Wan ",
		"Dan ",
		"Tan ",
		"Chao ",
		"Xun ",
		"Kui ",
		"Yie ",
		"Shao ",
		"Tu ",
		"Zhu ",
		"San ",
		"Hei ",
		"Bi ",
		"Shan ",
		"Chan ",
		"Chan ",
		"Shu ",
		"Tong ",
		"Pu ",
		"Lin ",
		"Wei ",
		"Se ",
		"Se ",
		"Cheng ",
		"Jiong ",
		"Cheng ",
		"Hua ",
		"Jiao ",
		"Lao ",
		"Che ",
		"Gan ",
		"Cun ",
		"Heng ",
		"Si ",
		"Shu ",
		"Peng ",
		"Han ",
		"Yun ",
		"Liu ",
		"Hong ",
		"Fu ",
		"Hao ",
		"He ",
		"Xian ",
		"Jian ",
		"Shan ",
		"Xi ",
		"Oki ",
		"[?] ",
		"Lan ",
		"[?] ",
		"Yu ",
		"Lin ",
		"Min ",
		"Zao ",
		"Dang ",
		"Wan ",
		"Ze ",
		"Xie ",
		"Yu ",
		"Li ",
		"Shi ",
		"Xue ",
		"Ling ",
		"Man ",
		"Zi ",
		"Yong ",
		"Kuai ",
		"Can ",
		"Lian ",
		"Dian ",
		"Ye ",
		"Ao ",
		"Huan ",
		"Zhen ",
		"Chan ",
		"Man ",
		"Dan ",
		"Dan ",
		"Yi ",
		"Sui ",
		"Pi ",
		"Ju ",
		"Ta ",
		"Qin ",
		"Ji ",
		"Zhuo ",
		"Lian ",
		"Nong ",
		"Guo ",
		"Jin ",
		"Fen ",
		"Se ",
		"Ji ",
		"Sui ",
		"Hui ",
		"Chu ",
		"Ta ",
		"Song ",
		"Ding ",
		"[?] ",
		"Zhu ",
		"Lai ",
		"Bin ",
		"Lian ",
		"Mi ",
		"Shi ",
		"Shu ",
		"Mi ",
		"Ning ",
		"Ying ",
		"Ying ",
		"Meng ",
		"Jin ",
		"Qi ",
		"Pi ",
		"Ji ",
		"Hao ",
		"Ru ",
		"Zui ",
		"Wo ",
		"Tao ",
		"Yin ",
		"Yin ",
		"Dui ",
		"Ci ",
		"Huo ",
		"Jing ",
		"Lan ",
		"Jun ",
		"Ai ",
		"Pu ",
		"Zhuo ",
		"Wei ",
		"Bin ",
		"Gu ",
		"Qian ",
		"Xing ",
		"Hama ",
		"Kuo ",
		"Fei ",
		"[?] ",
		"Boku ",
		"Jian ",
		"Wei ",
		"Luo ",
		"Zan ",
		"Lu ",
		"Li "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x70.js
var require_x70 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"You ",
		"Yang ",
		"Lu ",
		"Si ",
		"Jie ",
		"Ying ",
		"Du ",
		"Wang ",
		"Hui ",
		"Xie ",
		"Pan ",
		"Shen ",
		"Biao ",
		"Chan ",
		"Mo ",
		"Liu ",
		"Jian ",
		"Pu ",
		"Se ",
		"Cheng ",
		"Gu ",
		"Bin ",
		"Huo ",
		"Xian ",
		"Lu ",
		"Qin ",
		"Han ",
		"Ying ",
		"Yong ",
		"Li ",
		"Jing ",
		"Xiao ",
		"Ying ",
		"Sui ",
		"Wei ",
		"Xie ",
		"Huai ",
		"Hao ",
		"Zhu ",
		"Long ",
		"Lai ",
		"Dui ",
		"Fan ",
		"Hu ",
		"Lai ",
		"[?] ",
		"[?] ",
		"Ying ",
		"Mi ",
		"Ji ",
		"Lian ",
		"Jian ",
		"Ying ",
		"Fen ",
		"Lin ",
		"Yi ",
		"Jian ",
		"Yue ",
		"Chan ",
		"Dai ",
		"Rang ",
		"Jian ",
		"Lan ",
		"Fan ",
		"Shuang ",
		"Yuan ",
		"Zhuo ",
		"Feng ",
		"She ",
		"Lei ",
		"Lan ",
		"Cong ",
		"Qu ",
		"Yong ",
		"Qian ",
		"Fa ",
		"Guan ",
		"Que ",
		"Yan ",
		"Hao ",
		"Hyeng ",
		"Sa ",
		"Zan ",
		"Luan ",
		"Yan ",
		"Li ",
		"Mi ",
		"Shan ",
		"Tan ",
		"Dang ",
		"Jiao ",
		"Chan ",
		"[?] ",
		"Hao ",
		"Ba ",
		"Zhu ",
		"Lan ",
		"Lan ",
		"Nang ",
		"Wan ",
		"Luan ",
		"Xun ",
		"Xian ",
		"Yan ",
		"Gan ",
		"Yan ",
		"Yu ",
		"Huo ",
		"Si ",
		"Mie ",
		"Guang ",
		"Deng ",
		"Hui ",
		"Xiao ",
		"Xiao ",
		"Hu ",
		"Hong ",
		"Ling ",
		"Zao ",
		"Zhuan ",
		"Jiu ",
		"Zha ",
		"Xie ",
		"Chi ",
		"Zhuo ",
		"Zai ",
		"Zai ",
		"Can ",
		"Yang ",
		"Qi ",
		"Zhong ",
		"Fen ",
		"Niu ",
		"Jiong ",
		"Wen ",
		"Po ",
		"Yi ",
		"Lu ",
		"Chui ",
		"Pi ",
		"Kai ",
		"Pan ",
		"Yan ",
		"Kai ",
		"Pang ",
		"Mu ",
		"Chao ",
		"Liao ",
		"Gui ",
		"Kang ",
		"Tun ",
		"Guang ",
		"Xin ",
		"Zhi ",
		"Guang ",
		"Guang ",
		"Wei ",
		"Qiang ",
		"[?] ",
		"Da ",
		"Xia ",
		"Zheng ",
		"Zhu ",
		"Ke ",
		"Zhao ",
		"Fu ",
		"Ba ",
		"Duo ",
		"Duo ",
		"Ling ",
		"Zhuo ",
		"Xuan ",
		"Ju ",
		"Tan ",
		"Pao ",
		"Jiong ",
		"Pao ",
		"Tai ",
		"Tai ",
		"Bing ",
		"Yang ",
		"Tong ",
		"Han ",
		"Zhu ",
		"Zha ",
		"Dian ",
		"Wei ",
		"Shi ",
		"Lian ",
		"Chi ",
		"Huang ",
		"[?] ",
		"Hu ",
		"Shuo ",
		"Lan ",
		"Jing ",
		"Jiao ",
		"Xu ",
		"Xing ",
		"Quan ",
		"Lie ",
		"Huan ",
		"Yang ",
		"Xiao ",
		"Xiu ",
		"Xian ",
		"Yin ",
		"Wu ",
		"Zhou ",
		"Yao ",
		"Shi ",
		"Wei ",
		"Tong ",
		"Xue ",
		"Zai ",
		"Kai ",
		"Hong ",
		"Luo ",
		"Xia ",
		"Zhu ",
		"Xuan ",
		"Zheng ",
		"Po ",
		"Yan ",
		"Hui ",
		"Guang ",
		"Zhe ",
		"Hui ",
		"Kao ",
		"[?] ",
		"Fan ",
		"Shao ",
		"Ye ",
		"Hui ",
		"[?] ",
		"Tang ",
		"Jin ",
		"Re ",
		"[?] ",
		"Xi ",
		"Fu ",
		"Jiong ",
		"Che ",
		"Pu ",
		"Jing ",
		"Zhuo ",
		"Ting ",
		"Wan ",
		"Hai ",
		"Peng ",
		"Lang ",
		"Shan ",
		"Hu ",
		"Feng ",
		"Chi ",
		"Rong "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x71.js
var require_x71 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Hu ",
		"Xi ",
		"Shu ",
		"He ",
		"Xun ",
		"Ku ",
		"Jue ",
		"Xiao ",
		"Xi ",
		"Yan ",
		"Han ",
		"Zhuang ",
		"Jun ",
		"Di ",
		"Xie ",
		"Ji ",
		"Wu ",
		"[?] ",
		"[?] ",
		"Han ",
		"Yan ",
		"Huan ",
		"Men ",
		"Ju ",
		"Chou ",
		"Bei ",
		"Fen ",
		"Lin ",
		"Kun ",
		"Hun ",
		"Tun ",
		"Xi ",
		"Cui ",
		"Wu ",
		"Hong ",
		"Ju ",
		"Fu ",
		"Wo ",
		"Jiao ",
		"Cong ",
		"Feng ",
		"Ping ",
		"Qiong ",
		"Ruo ",
		"Xi ",
		"Qiong ",
		"Xin ",
		"Zhuo ",
		"Yan ",
		"Yan ",
		"Yi ",
		"Jue ",
		"Yu ",
		"Gang ",
		"Ran ",
		"Pi ",
		"Gu ",
		"[?] ",
		"Sheng ",
		"Chang ",
		"Shao ",
		"[?] ",
		"[?] ",
		"[?] ",
		"[?] ",
		"Chen ",
		"He ",
		"Kui ",
		"Zhong ",
		"Duan ",
		"Xia ",
		"Hui ",
		"Feng ",
		"Lian ",
		"Xuan ",
		"Xing ",
		"Huang ",
		"Jiao ",
		"Jian ",
		"Bi ",
		"Ying ",
		"Zhu ",
		"Wei ",
		"Tuan ",
		"Tian ",
		"Xi ",
		"Nuan ",
		"Nuan ",
		"Chan ",
		"Yan ",
		"Jiong ",
		"Jiong ",
		"Yu ",
		"Mei ",
		"Sha ",
		"Wei ",
		"Ye ",
		"Xin ",
		"Qiong ",
		"Rou ",
		"Mei ",
		"Huan ",
		"Xu ",
		"Zhao ",
		"Wei ",
		"Fan ",
		"Qiu ",
		"Sui ",
		"Yang ",
		"Lie ",
		"Zhu ",
		"Jie ",
		"Gao ",
		"Gua ",
		"Bao ",
		"Hu ",
		"Yun ",
		"Xia ",
		"[?] ",
		"[?] ",
		"Bian ",
		"Gou ",
		"Tui ",
		"Tang ",
		"Chao ",
		"Shan ",
		"N ",
		"Bo ",
		"Huang ",
		"Xie ",
		"Xi ",
		"Wu ",
		"Xi ",
		"Yun ",
		"He ",
		"He ",
		"Xi ",
		"Yun ",
		"Xiong ",
		"Nai ",
		"Shan ",
		"Qiong ",
		"Yao ",
		"Xun ",
		"Mi ",
		"Lian ",
		"Ying ",
		"Wen ",
		"Rong ",
		"Oozutsu ",
		"[?] ",
		"Qiang ",
		"Liu ",
		"Xi ",
		"Bi ",
		"Biao ",
		"Zong ",
		"Lu ",
		"Jian ",
		"Shou ",
		"Yi ",
		"Lou ",
		"Feng ",
		"Sui ",
		"Yi ",
		"Tong ",
		"Jue ",
		"Zong ",
		"Yun ",
		"Hu ",
		"Yi ",
		"Zhi ",
		"Ao ",
		"Wei ",
		"Liao ",
		"Han ",
		"Ou ",
		"Re ",
		"Jiong ",
		"Man ",
		"[?] ",
		"Shang ",
		"Cuan ",
		"Zeng ",
		"Jian ",
		"Xi ",
		"Xi ",
		"Xi ",
		"Yi ",
		"Xiao ",
		"Chi ",
		"Huang ",
		"Chan ",
		"Ye ",
		"Qian ",
		"Ran ",
		"Yan ",
		"Xian ",
		"Qiao ",
		"Zun ",
		"Deng ",
		"Dun ",
		"Shen ",
		"Jiao ",
		"Fen ",
		"Si ",
		"Liao ",
		"Yu ",
		"Lin ",
		"Tong ",
		"Shao ",
		"Fen ",
		"Fan ",
		"Yan ",
		"Xun ",
		"Lan ",
		"Mei ",
		"Tang ",
		"Yi ",
		"Jing ",
		"Men ",
		"[?] ",
		"[?] ",
		"Ying ",
		"Yu ",
		"Yi ",
		"Xue ",
		"Lan ",
		"Tai ",
		"Zao ",
		"Can ",
		"Sui ",
		"Xi ",
		"Que ",
		"Cong ",
		"Lian ",
		"Hui ",
		"Zhu ",
		"Xie ",
		"Ling ",
		"Wei ",
		"Yi ",
		"Xie ",
		"Zhao ",
		"Hui ",
		"Tatsu ",
		"Nung ",
		"Lan ",
		"Ru ",
		"Xian ",
		"Kao ",
		"Xun ",
		"Jin ",
		"Chou ",
		"Chou ",
		"Yao "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x72.js
var require_x72 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"He ",
		"Lan ",
		"Biao ",
		"Rong ",
		"Li ",
		"Mo ",
		"Bao ",
		"Ruo ",
		"Lu ",
		"La ",
		"Ao ",
		"Xun ",
		"Kuang ",
		"Shuo ",
		"[?] ",
		"Li ",
		"Lu ",
		"Jue ",
		"Liao ",
		"Yan ",
		"Xi ",
		"Xie ",
		"Long ",
		"Ye ",
		"[?] ",
		"Rang ",
		"Yue ",
		"Lan ",
		"Cong ",
		"Jue ",
		"Tong ",
		"Guan ",
		"[?] ",
		"Che ",
		"Mi ",
		"Tang ",
		"Lan ",
		"Zhu ",
		"[?] ",
		"Ling ",
		"Cuan ",
		"Yu ",
		"Zhua ",
		"Tsumekanmuri ",
		"Pa ",
		"Zheng ",
		"Pao ",
		"Cheng ",
		"Yuan ",
		"Ai ",
		"Wei ",
		"[?] ",
		"Jue ",
		"Jue ",
		"Fu ",
		"Ye ",
		"Ba ",
		"Die ",
		"Ye ",
		"Yao ",
		"Zu ",
		"Shuang ",
		"Er ",
		"Qiang ",
		"Chuang ",
		"Ge ",
		"Zang ",
		"Die ",
		"Qiang ",
		"Yong ",
		"Qiang ",
		"Pian ",
		"Ban ",
		"Pan ",
		"Shao ",
		"Jian ",
		"Pai ",
		"Du ",
		"Chuang ",
		"Tou ",
		"Zha ",
		"Bian ",
		"Die ",
		"Bang ",
		"Bo ",
		"Chuang ",
		"You ",
		"[?] ",
		"Du ",
		"Ya ",
		"Cheng ",
		"Niu ",
		"Ushihen ",
		"Pin ",
		"Jiu ",
		"Mou ",
		"Tuo ",
		"Mu ",
		"Lao ",
		"Ren ",
		"Mang ",
		"Fang ",
		"Mao ",
		"Mu ",
		"Gang ",
		"Wu ",
		"Yan ",
		"Ge ",
		"Bei ",
		"Si ",
		"Jian ",
		"Gu ",
		"You ",
		"Ge ",
		"Sheng ",
		"Mu ",
		"Di ",
		"Qian ",
		"Quan ",
		"Quan ",
		"Zi ",
		"Te ",
		"Xi ",
		"Mang ",
		"Keng ",
		"Qian ",
		"Wu ",
		"Gu ",
		"Xi ",
		"Li ",
		"Li ",
		"Pou ",
		"Ji ",
		"Gang ",
		"Zhi ",
		"Ben ",
		"Quan ",
		"Run ",
		"Du ",
		"Ju ",
		"Jia ",
		"Jian ",
		"Feng ",
		"Pian ",
		"Ke ",
		"Ju ",
		"Kao ",
		"Chu ",
		"Xi ",
		"Bei ",
		"Luo ",
		"Jie ",
		"Ma ",
		"San ",
		"Wei ",
		"Li ",
		"Dun ",
		"Tong ",
		"[?] ",
		"Jiang ",
		"Ikenie ",
		"Li ",
		"Du ",
		"Lie ",
		"Pi ",
		"Piao ",
		"Bao ",
		"Xi ",
		"Chou ",
		"Wei ",
		"Kui ",
		"Chou ",
		"Quan ",
		"Fan ",
		"Ba ",
		"Fan ",
		"Qiu ",
		"Ji ",
		"Cai ",
		"Chuo ",
		"An ",
		"Jie ",
		"Zhuang ",
		"Guang ",
		"Ma ",
		"You ",
		"Kang ",
		"Bo ",
		"Hou ",
		"Ya ",
		"Yin ",
		"Huan ",
		"Zhuang ",
		"Yun ",
		"Kuang ",
		"Niu ",
		"Di ",
		"Qing ",
		"Zhong ",
		"Mu ",
		"Bei ",
		"Pi ",
		"Ju ",
		"Ni ",
		"Sheng ",
		"Pao ",
		"Xia ",
		"Tuo ",
		"Hu ",
		"Ling ",
		"Fei ",
		"Pi ",
		"Ni ",
		"Ao ",
		"You ",
		"Gou ",
		"Yue ",
		"Ju ",
		"Dan ",
		"Po ",
		"Gu ",
		"Xian ",
		"Ning ",
		"Huan ",
		"Hen ",
		"Jiao ",
		"He ",
		"Zhao ",
		"Ji ",
		"Xun ",
		"Shan ",
		"Ta ",
		"Rong ",
		"Shou ",
		"Tong ",
		"Lao ",
		"Du ",
		"Xia ",
		"Shi ",
		"Hua ",
		"Zheng ",
		"Yu ",
		"Sun ",
		"Yu ",
		"Bi ",
		"Mang ",
		"Xi ",
		"Juan ",
		"Li ",
		"Xia ",
		"Yin ",
		"Suan ",
		"Lang ",
		"Bei ",
		"Zhi ",
		"Yan "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x73.js
var require_x73 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Sha ",
		"Li ",
		"Han ",
		"Xian ",
		"Jing ",
		"Pai ",
		"Fei ",
		"Yao ",
		"Ba ",
		"Qi ",
		"Ni ",
		"Biao ",
		"Yin ",
		"Lai ",
		"Xi ",
		"Jian ",
		"Qiang ",
		"Kun ",
		"Yan ",
		"Guo ",
		"Zong ",
		"Mi ",
		"Chang ",
		"Yi ",
		"Zhi ",
		"Zheng ",
		"Ya ",
		"Meng ",
		"Cai ",
		"Cu ",
		"She ",
		"Kari ",
		"Cen ",
		"Luo ",
		"Hu ",
		"Zong ",
		"Ji ",
		"Wei ",
		"Feng ",
		"Wo ",
		"Yuan ",
		"Xing ",
		"Zhu ",
		"Mao ",
		"Wei ",
		"Yuan ",
		"Xian ",
		"Tuan ",
		"Ya ",
		"Nao ",
		"Xie ",
		"Jia ",
		"Hou ",
		"Bian ",
		"You ",
		"You ",
		"Mei ",
		"Zha ",
		"Yao ",
		"Sun ",
		"Bo ",
		"Ming ",
		"Hua ",
		"Yuan ",
		"Sou ",
		"Ma ",
		"Yuan ",
		"Dai ",
		"Yu ",
		"Shi ",
		"Hao ",
		"[?] ",
		"Yi ",
		"Zhen ",
		"Chuang ",
		"Hao ",
		"Man ",
		"Jing ",
		"Jiang ",
		"Mu ",
		"Zhang ",
		"Chan ",
		"Ao ",
		"Ao ",
		"Hao ",
		"Cui ",
		"Fen ",
		"Jue ",
		"Bi ",
		"Bi ",
		"Huang ",
		"Pu ",
		"Lin ",
		"Yu ",
		"Tong ",
		"Yao ",
		"Liao ",
		"Shuo ",
		"Xiao ",
		"Swu ",
		"Ton ",
		"Xi ",
		"Ge ",
		"Juan ",
		"Du ",
		"Hui ",
		"Kuai ",
		"Xian ",
		"Xie ",
		"Ta ",
		"Xian ",
		"Xun ",
		"Ning ",
		"Pin ",
		"Huo ",
		"Nou ",
		"Meng ",
		"Lie ",
		"Nao ",
		"Guang ",
		"Shou ",
		"Lu ",
		"Ta ",
		"Xian ",
		"Mi ",
		"Rang ",
		"Huan ",
		"Nao ",
		"Luo ",
		"Xian ",
		"Qi ",
		"Jue ",
		"Xuan ",
		"Miao ",
		"Zi ",
		"Lu ",
		"Lu ",
		"Yu ",
		"Su ",
		"Wang ",
		"Qiu ",
		"Ga ",
		"Ding ",
		"Le ",
		"Ba ",
		"Ji ",
		"Hong ",
		"Di ",
		"Quan ",
		"Gan ",
		"Jiu ",
		"Yu ",
		"Ji ",
		"Yu ",
		"Yang ",
		"Ma ",
		"Gong ",
		"Wu ",
		"Fu ",
		"Wen ",
		"Jie ",
		"Ya ",
		"Fen ",
		"Bian ",
		"Beng ",
		"Yue ",
		"Jue ",
		"Yun ",
		"Jue ",
		"Wan ",
		"Jian ",
		"Mei ",
		"Dan ",
		"Pi ",
		"Wei ",
		"Huan ",
		"Xian ",
		"Qiang ",
		"Ling ",
		"Dai ",
		"Yi ",
		"An ",
		"Ping ",
		"Dian ",
		"Fu ",
		"Xuan ",
		"Xi ",
		"Bo ",
		"Ci ",
		"Gou ",
		"Jia ",
		"Shao ",
		"Po ",
		"Ci ",
		"Ke ",
		"Ran ",
		"Sheng ",
		"Shen ",
		"Yi ",
		"Zu ",
		"Jia ",
		"Min ",
		"Shan ",
		"Liu ",
		"Bi ",
		"Zhen ",
		"Zhen ",
		"Jue ",
		"Fa ",
		"Long ",
		"Jin ",
		"Jiao ",
		"Jian ",
		"Li ",
		"Guang ",
		"Xian ",
		"Zhou ",
		"Gong ",
		"Yan ",
		"Xiu ",
		"Yang ",
		"Xu ",
		"Luo ",
		"Su ",
		"Zhu ",
		"Qin ",
		"Ken ",
		"Xun ",
		"Bao ",
		"Er ",
		"Xiang ",
		"Yao ",
		"Xia ",
		"Heng ",
		"Gui ",
		"Chong ",
		"Xu ",
		"Ban ",
		"Pei ",
		"[?] ",
		"Dang ",
		"Ei ",
		"Hun ",
		"Wen ",
		"E ",
		"Cheng ",
		"Ti ",
		"Wu ",
		"Wu ",
		"Cheng ",
		"Jun ",
		"Mei ",
		"Bei ",
		"Ting ",
		"Xian ",
		"Chuo "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x74.js
var require_x74 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Han ",
		"Xuan ",
		"Yan ",
		"Qiu ",
		"Quan ",
		"Lang ",
		"Li ",
		"Xiu ",
		"Fu ",
		"Liu ",
		"Ye ",
		"Xi ",
		"Ling ",
		"Li ",
		"Jin ",
		"Lian ",
		"Suo ",
		"Chiisai ",
		"[?] ",
		"Wan ",
		"Dian ",
		"Pin ",
		"Zhan ",
		"Cui ",
		"Min ",
		"Yu ",
		"Ju ",
		"Chen ",
		"Lai ",
		"Wen ",
		"Sheng ",
		"Wei ",
		"Dian ",
		"Chu ",
		"Zhuo ",
		"Pei ",
		"Cheng ",
		"Hu ",
		"Qi ",
		"E ",
		"Kun ",
		"Chang ",
		"Qi ",
		"Beng ",
		"Wan ",
		"Lu ",
		"Cong ",
		"Guan ",
		"Yan ",
		"Diao ",
		"Bei ",
		"Lin ",
		"Qin ",
		"Pi ",
		"Pa ",
		"Que ",
		"Zhuo ",
		"Qin ",
		"Fa ",
		"[?] ",
		"Qiong ",
		"Du ",
		"Jie ",
		"Hun ",
		"Yu ",
		"Mao ",
		"Mei ",
		"Chun ",
		"Xuan ",
		"Ti ",
		"Xing ",
		"Dai ",
		"Rou ",
		"Min ",
		"Zhen ",
		"Wei ",
		"Ruan ",
		"Huan ",
		"Jie ",
		"Chuan ",
		"Jian ",
		"Zhuan ",
		"Yang ",
		"Lian ",
		"Quan ",
		"Xia ",
		"Duan ",
		"Yuan ",
		"Ye ",
		"Nao ",
		"Hu ",
		"Ying ",
		"Yu ",
		"Huang ",
		"Rui ",
		"Se ",
		"Liu ",
		"Shi ",
		"Rong ",
		"Suo ",
		"Yao ",
		"Wen ",
		"Wu ",
		"Jin ",
		"Jin ",
		"Ying ",
		"Ma ",
		"Tao ",
		"Liu ",
		"Tang ",
		"Li ",
		"Lang ",
		"Gui ",
		"Zhen ",
		"Qiang ",
		"Cuo ",
		"Jue ",
		"Zhao ",
		"Yao ",
		"Ai ",
		"Bin ",
		"Tu ",
		"Chang ",
		"Kun ",
		"Zhuan ",
		"Cong ",
		"Jin ",
		"Yi ",
		"Cui ",
		"Cong ",
		"Qi ",
		"Li ",
		"Ying ",
		"Suo ",
		"Qiu ",
		"Xuan ",
		"Ao ",
		"Lian ",
		"Man ",
		"Zhang ",
		"Yin ",
		"[?] ",
		"Ying ",
		"Zhi ",
		"Lu ",
		"Wu ",
		"Deng ",
		"Xiou ",
		"Zeng ",
		"Xun ",
		"Qu ",
		"Dang ",
		"Lin ",
		"Liao ",
		"Qiong ",
		"Su ",
		"Huang ",
		"Gui ",
		"Pu ",
		"Jing ",
		"Fan ",
		"Jin ",
		"Liu ",
		"Ji ",
		"[?] ",
		"Jing ",
		"Ai ",
		"Bi ",
		"Can ",
		"Qu ",
		"Zao ",
		"Dang ",
		"Jiao ",
		"Gun ",
		"Tan ",
		"Hui ",
		"Huan ",
		"Se ",
		"Sui ",
		"Tian ",
		"[?] ",
		"Yu ",
		"Jin ",
		"Lu ",
		"Bin ",
		"Shou ",
		"Wen ",
		"Zui ",
		"Lan ",
		"Xi ",
		"Ji ",
		"Xuan ",
		"Ruan ",
		"Huo ",
		"Gai ",
		"Lei ",
		"Du ",
		"Li ",
		"Zhi ",
		"Rou ",
		"Li ",
		"Zan ",
		"Qiong ",
		"Zhe ",
		"Gui ",
		"Sui ",
		"La ",
		"Long ",
		"Lu ",
		"Li ",
		"Zan ",
		"Lan ",
		"Ying ",
		"Mi ",
		"Xiang ",
		"Xi ",
		"Guan ",
		"Dao ",
		"Zan ",
		"Huan ",
		"Gua ",
		"Bo ",
		"Die ",
		"Bao ",
		"Hu ",
		"Zhi ",
		"Piao ",
		"Ban ",
		"Rang ",
		"Li ",
		"Wa ",
		"Dekaguramu ",
		"Jiang ",
		"Qian ",
		"Fan ",
		"Pen ",
		"Fang ",
		"Dan ",
		"Weng ",
		"Ou ",
		"Deshiguramu ",
		"Miriguramu ",
		"Thon ",
		"Hu ",
		"Ling ",
		"Yi ",
		"Ping ",
		"Ci ",
		"Hekutogura ",
		"Juan ",
		"Chang ",
		"Chi ",
		"Sarake ",
		"Dang ",
		"Meng ",
		"Pou "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x75.js
var require_x75 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Zhui ",
		"Ping ",
		"Bian ",
		"Zhou ",
		"Zhen ",
		"Senchigura ",
		"Ci ",
		"Ying ",
		"Qi ",
		"Xian ",
		"Lou ",
		"Di ",
		"Ou ",
		"Meng ",
		"Zhuan ",
		"Peng ",
		"Lin ",
		"Zeng ",
		"Wu ",
		"Pi ",
		"Dan ",
		"Weng ",
		"Ying ",
		"Yan ",
		"Gan ",
		"Dai ",
		"Shen ",
		"Tian ",
		"Tian ",
		"Han ",
		"Chang ",
		"Sheng ",
		"Qing ",
		"Sheng ",
		"Chan ",
		"Chan ",
		"Rui ",
		"Sheng ",
		"Su ",
		"Sen ",
		"Yong ",
		"Shuai ",
		"Lu ",
		"Fu ",
		"Yong ",
		"Beng ",
		"Feng ",
		"Ning ",
		"Tian ",
		"You ",
		"Jia ",
		"Shen ",
		"Zha ",
		"Dian ",
		"Fu ",
		"Nan ",
		"Dian ",
		"Ping ",
		"Ting ",
		"Hua ",
		"Ting ",
		"Quan ",
		"Zi ",
		"Meng ",
		"Bi ",
		"Qi ",
		"Liu ",
		"Xun ",
		"Liu ",
		"Chang ",
		"Mu ",
		"Yun ",
		"Fan ",
		"Fu ",
		"Geng ",
		"Tian ",
		"Jie ",
		"Jie ",
		"Quan ",
		"Wei ",
		"Fu ",
		"Tian ",
		"Mu ",
		"Tap ",
		"Pan ",
		"Jiang ",
		"Wa ",
		"Da ",
		"Nan ",
		"Liu ",
		"Ben ",
		"Zhen ",
		"Chu ",
		"Mu ",
		"Mu ",
		"Ce ",
		"Cen ",
		"Gai ",
		"Bi ",
		"Da ",
		"Zhi ",
		"Lue ",
		"Qi ",
		"Lue ",
		"Pan ",
		"Kesa ",
		"Fan ",
		"Hua ",
		"Yu ",
		"Yu ",
		"Mu ",
		"Jun ",
		"Yi ",
		"Liu ",
		"Yu ",
		"Die ",
		"Chou ",
		"Hua ",
		"Dang ",
		"Chuo ",
		"Ji ",
		"Wan ",
		"Jiang ",
		"Sheng ",
		"Chang ",
		"Tuan ",
		"Lei ",
		"Ji ",
		"Cha ",
		"Liu ",
		"Tatamu ",
		"Tuan ",
		"Lin ",
		"Jiang ",
		"Jiang ",
		"Chou ",
		"Bo ",
		"Die ",
		"Die ",
		"Pi ",
		"Nie ",
		"Dan ",
		"Shu ",
		"Shu ",
		"Zhi ",
		"Yi ",
		"Chuang ",
		"Nai ",
		"Ding ",
		"Bi ",
		"Jie ",
		"Liao ",
		"Gong ",
		"Ge ",
		"Jiu ",
		"Zhou ",
		"Xia ",
		"Shan ",
		"Xu ",
		"Nue ",
		"Li ",
		"Yang ",
		"Chen ",
		"You ",
		"Ba ",
		"Jie ",
		"Jue ",
		"Zhi ",
		"Xia ",
		"Cui ",
		"Bi ",
		"Yi ",
		"Li ",
		"Zong ",
		"Chuang ",
		"Feng ",
		"Zhu ",
		"Pao ",
		"Pi ",
		"Gan ",
		"Ke ",
		"Ci ",
		"Xie ",
		"Qi ",
		"Dan ",
		"Zhen ",
		"Fa ",
		"Zhi ",
		"Teng ",
		"Ju ",
		"Ji ",
		"Fei ",
		"Qu ",
		"Dian ",
		"Jia ",
		"Xian ",
		"Cha ",
		"Bing ",
		"Ni ",
		"Zheng ",
		"Yong ",
		"Jing ",
		"Quan ",
		"Chong ",
		"Tong ",
		"Yi ",
		"Kai ",
		"Wei ",
		"Hui ",
		"Duo ",
		"Yang ",
		"Chi ",
		"Zhi ",
		"Hen ",
		"Ya ",
		"Mei ",
		"Dou ",
		"Jing ",
		"Xiao ",
		"Tong ",
		"Tu ",
		"Mang ",
		"Pi ",
		"Xiao ",
		"Suan ",
		"Pu ",
		"Li ",
		"Zhi ",
		"Cuo ",
		"Duo ",
		"Wu ",
		"Sha ",
		"Lao ",
		"Shou ",
		"Huan ",
		"Xian ",
		"Yi ",
		"Peng ",
		"Zhang ",
		"Guan ",
		"Tan ",
		"Fei ",
		"Ma ",
		"Lin ",
		"Chi ",
		"Ji ",
		"Dian ",
		"An ",
		"Chi ",
		"Bi ",
		"Bei ",
		"Min ",
		"Gu ",
		"Dui ",
		"E ",
		"Wei "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x76.js
var require_x76 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Yu ",
		"Cui ",
		"Ya ",
		"Zhu ",
		"Cu ",
		"Dan ",
		"Shen ",
		"Zhung ",
		"Ji ",
		"Yu ",
		"Hou ",
		"Feng ",
		"La ",
		"Yang ",
		"Shen ",
		"Tu ",
		"Yu ",
		"Gua ",
		"Wen ",
		"Huan ",
		"Ku ",
		"Jia ",
		"Yin ",
		"Yi ",
		"Lu ",
		"Sao ",
		"Jue ",
		"Chi ",
		"Xi ",
		"Guan ",
		"Yi ",
		"Wen ",
		"Ji ",
		"Chuang ",
		"Ban ",
		"Lei ",
		"Liu ",
		"Chai ",
		"Shou ",
		"Nue ",
		"Dian ",
		"Da ",
		"Pie ",
		"Tan ",
		"Zhang ",
		"Biao ",
		"Shen ",
		"Cu ",
		"Luo ",
		"Yi ",
		"Zong ",
		"Chou ",
		"Zhang ",
		"Zhai ",
		"Sou ",
		"Suo ",
		"Que ",
		"Diao ",
		"Lou ",
		"Lu ",
		"Mo ",
		"Jin ",
		"Yin ",
		"Ying ",
		"Huang ",
		"Fu ",
		"Liao ",
		"Long ",
		"Qiao ",
		"Liu ",
		"Lao ",
		"Xian ",
		"Fei ",
		"Dan ",
		"Yin ",
		"He ",
		"Yan ",
		"Ban ",
		"Xian ",
		"Guan ",
		"Guai ",
		"Nong ",
		"Yu ",
		"Wei ",
		"Yi ",
		"Yong ",
		"Pi ",
		"Lei ",
		"Li ",
		"Shu ",
		"Dan ",
		"Lin ",
		"Dian ",
		"Lin ",
		"Lai ",
		"Pie ",
		"Ji ",
		"Chi ",
		"Yang ",
		"Xian ",
		"Jie ",
		"Zheng ",
		"[?] ",
		"Li ",
		"Huo ",
		"Lai ",
		"Shaku ",
		"Dian ",
		"Xian ",
		"Ying ",
		"Yin ",
		"Qu ",
		"Yong ",
		"Tan ",
		"Dian ",
		"Luo ",
		"Luan ",
		"Luan ",
		"Bo ",
		"[?] ",
		"Gui ",
		"Po ",
		"Fa ",
		"Deng ",
		"Fa ",
		"Bai ",
		"Bai ",
		"Qie ",
		"Bi ",
		"Zao ",
		"Zao ",
		"Mao ",
		"De ",
		"Pa ",
		"Jie ",
		"Huang ",
		"Gui ",
		"Ci ",
		"Ling ",
		"Gao ",
		"Mo ",
		"Ji ",
		"Jiao ",
		"Peng ",
		"Gao ",
		"Ai ",
		"E ",
		"Hao ",
		"Han ",
		"Bi ",
		"Wan ",
		"Chou ",
		"Qian ",
		"Xi ",
		"Ai ",
		"Jiong ",
		"Hao ",
		"Huang ",
		"Hao ",
		"Ze ",
		"Cui ",
		"Hao ",
		"Xiao ",
		"Ye ",
		"Po ",
		"Hao ",
		"Jiao ",
		"Ai ",
		"Xing ",
		"Huang ",
		"Li ",
		"Piao ",
		"He ",
		"Jiao ",
		"Pi ",
		"Gan ",
		"Pao ",
		"Zhou ",
		"Jun ",
		"Qiu ",
		"Cun ",
		"Que ",
		"Zha ",
		"Gu ",
		"Jun ",
		"Jun ",
		"Zhou ",
		"Zha ",
		"Gu ",
		"Zhan ",
		"Du ",
		"Min ",
		"Qi ",
		"Ying ",
		"Yu ",
		"Bei ",
		"Zhao ",
		"Zhong ",
		"Pen ",
		"He ",
		"Ying ",
		"He ",
		"Yi ",
		"Bo ",
		"Wan ",
		"He ",
		"Ang ",
		"Zhan ",
		"Yan ",
		"Jian ",
		"He ",
		"Yu ",
		"Kui ",
		"Fan ",
		"Gai ",
		"Dao ",
		"Pan ",
		"Fu ",
		"Qiu ",
		"Sheng ",
		"Dao ",
		"Lu ",
		"Zhan ",
		"Meng ",
		"Li ",
		"Jin ",
		"Xu ",
		"Jian ",
		"Pan ",
		"Guan ",
		"An ",
		"Lu ",
		"Shu ",
		"Zhou ",
		"Dang ",
		"An ",
		"Gu ",
		"Li ",
		"Mu ",
		"Cheng ",
		"Gan ",
		"Xu ",
		"Mang ",
		"Mang ",
		"Zhi ",
		"Qi ",
		"Ruan ",
		"Tian ",
		"Xiang ",
		"Dun ",
		"Xin ",
		"Xi ",
		"Pan ",
		"Feng ",
		"Dun ",
		"Min "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x77.js
var require_x77 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ming ",
		"Sheng ",
		"Shi ",
		"Yun ",
		"Mian ",
		"Pan ",
		"Fang ",
		"Miao ",
		"Dan ",
		"Mei ",
		"Mao ",
		"Kan ",
		"Xian ",
		"Ou ",
		"Shi ",
		"Yang ",
		"Zheng ",
		"Yao ",
		"Shen ",
		"Huo ",
		"Da ",
		"Zhen ",
		"Kuang ",
		"Ju ",
		"Shen ",
		"Chi ",
		"Sheng ",
		"Mei ",
		"Mo ",
		"Zhu ",
		"Zhen ",
		"Zhen ",
		"Mian ",
		"Di ",
		"Yuan ",
		"Die ",
		"Yi ",
		"Zi ",
		"Zi ",
		"Chao ",
		"Zha ",
		"Xuan ",
		"Bing ",
		"Mi ",
		"Long ",
		"Sui ",
		"Dong ",
		"Mi ",
		"Die ",
		"Yi ",
		"Er ",
		"Ming ",
		"Xuan ",
		"Chi ",
		"Kuang ",
		"Juan ",
		"Mou ",
		"Zhen ",
		"Tiao ",
		"Yang ",
		"Yan ",
		"Mo ",
		"Zhong ",
		"Mai ",
		"Zhao ",
		"Zheng ",
		"Mei ",
		"Jun ",
		"Shao ",
		"Han ",
		"Huan ",
		"Di ",
		"Cheng ",
		"Cuo ",
		"Juan ",
		"E ",
		"Wan ",
		"Xian ",
		"Xi ",
		"Kun ",
		"Lai ",
		"Jian ",
		"Shan ",
		"Tian ",
		"Hun ",
		"Wan ",
		"Ling ",
		"Shi ",
		"Qiong ",
		"Lie ",
		"Yai ",
		"Jing ",
		"Zheng ",
		"Li ",
		"Lai ",
		"Sui ",
		"Juan ",
		"Shui ",
		"Sui ",
		"Du ",
		"Bi ",
		"Bi ",
		"Mu ",
		"Hun ",
		"Ni ",
		"Lu ",
		"Yi ",
		"Jie ",
		"Cai ",
		"Zhou ",
		"Yu ",
		"Hun ",
		"Ma ",
		"Xia ",
		"Xing ",
		"Xi ",
		"Gun ",
		"Cai ",
		"Chun ",
		"Jian ",
		"Mei ",
		"Du ",
		"Hou ",
		"Xuan ",
		"Ti ",
		"Kui ",
		"Gao ",
		"Rui ",
		"Mou ",
		"Xu ",
		"Fa ",
		"Wen ",
		"Miao ",
		"Chou ",
		"Kui ",
		"Mi ",
		"Weng ",
		"Kou ",
		"Dang ",
		"Chen ",
		"Ke ",
		"Sou ",
		"Xia ",
		"Qiong ",
		"Mao ",
		"Ming ",
		"Man ",
		"Shui ",
		"Ze ",
		"Zhang ",
		"Yi ",
		"Diao ",
		"Ou ",
		"Mo ",
		"Shun ",
		"Cong ",
		"Lou ",
		"Chi ",
		"Man ",
		"Piao ",
		"Cheng ",
		"Ji ",
		"Meng ",
		"[?] ",
		"Run ",
		"Pie ",
		"Xi ",
		"Qiao ",
		"Pu ",
		"Zhu ",
		"Deng ",
		"Shen ",
		"Shun ",
		"Liao ",
		"Che ",
		"Xian ",
		"Kan ",
		"Ye ",
		"Xu ",
		"Tong ",
		"Mou ",
		"Lin ",
		"Kui ",
		"Xian ",
		"Ye ",
		"Ai ",
		"Hui ",
		"Zhan ",
		"Jian ",
		"Gu ",
		"Zhao ",
		"Qu ",
		"Wei ",
		"Chou ",
		"Sao ",
		"Ning ",
		"Xun ",
		"Yao ",
		"Huo ",
		"Meng ",
		"Mian ",
		"Bin ",
		"Mian ",
		"Li ",
		"Kuang ",
		"Jue ",
		"Xuan ",
		"Mian ",
		"Huo ",
		"Lu ",
		"Meng ",
		"Long ",
		"Guan ",
		"Man ",
		"Xi ",
		"Chu ",
		"Tang ",
		"Kan ",
		"Zhu ",
		"Mao ",
		"Jin ",
		"Lin ",
		"Yu ",
		"Shuo ",
		"Ce ",
		"Jue ",
		"Shi ",
		"Yi ",
		"Shen ",
		"Zhi ",
		"Hou ",
		"Shen ",
		"Ying ",
		"Ju ",
		"Zhou ",
		"Jiao ",
		"Cuo ",
		"Duan ",
		"Ai ",
		"Jiao ",
		"Zeng ",
		"Huo ",
		"Bai ",
		"Shi ",
		"Ding ",
		"Qi ",
		"Ji ",
		"Zi ",
		"Gan ",
		"Wu ",
		"Tuo ",
		"Ku ",
		"Qiang ",
		"Xi ",
		"Fan ",
		"Kuang "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x78.js
var require_x78 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Dang ",
		"Ma ",
		"Sha ",
		"Dan ",
		"Jue ",
		"Li ",
		"Fu ",
		"Min ",
		"Nuo ",
		"Huo ",
		"Kang ",
		"Zhi ",
		"Qi ",
		"Kan ",
		"Jie ",
		"Fen ",
		"E ",
		"Ya ",
		"Pi ",
		"Zhe ",
		"Yan ",
		"Sui ",
		"Zhuan ",
		"Che ",
		"Dun ",
		"Pan ",
		"Yan ",
		"[?] ",
		"Feng ",
		"Fa ",
		"Mo ",
		"Zha ",
		"Qu ",
		"Yu ",
		"Luo ",
		"Tuo ",
		"Tuo ",
		"Di ",
		"Zhai ",
		"Zhen ",
		"Ai ",
		"Fei ",
		"Mu ",
		"Zhu ",
		"Li ",
		"Bian ",
		"Nu ",
		"Ping ",
		"Peng ",
		"Ling ",
		"Pao ",
		"Le ",
		"Po ",
		"Bo ",
		"Po ",
		"Shen ",
		"Za ",
		"Nuo ",
		"Li ",
		"Long ",
		"Tong ",
		"[?] ",
		"Li ",
		"Aragane ",
		"Chu ",
		"Keng ",
		"Quan ",
		"Zhu ",
		"Kuang ",
		"Huo ",
		"E ",
		"Nao ",
		"Jia ",
		"Lu ",
		"Wei ",
		"Ai ",
		"Luo ",
		"Ken ",
		"Xing ",
		"Yan ",
		"Tong ",
		"Peng ",
		"Xi ",
		"[?] ",
		"Hong ",
		"Shuo ",
		"Xia ",
		"Qiao ",
		"[?] ",
		"Wei ",
		"Qiao ",
		"[?] ",
		"Keng ",
		"Xiao ",
		"Que ",
		"Chan ",
		"Lang ",
		"Hong ",
		"Yu ",
		"Xiao ",
		"Xia ",
		"Mang ",
		"Long ",
		"Iong ",
		"Che ",
		"Che ",
		"E ",
		"Liu ",
		"Ying ",
		"Mang ",
		"Que ",
		"Yan ",
		"Sha ",
		"Kun ",
		"Yu ",
		"[?] ",
		"Kaki ",
		"Lu ",
		"Chen ",
		"Jian ",
		"Nue ",
		"Song ",
		"Zhuo ",
		"Keng ",
		"Peng ",
		"Yan ",
		"Zhui ",
		"Kong ",
		"Ceng ",
		"Qi ",
		"Zong ",
		"Qing ",
		"Lin ",
		"Jun ",
		"Bo ",
		"Ding ",
		"Min ",
		"Diao ",
		"Jian ",
		"He ",
		"Lu ",
		"Ai ",
		"Sui ",
		"Que ",
		"Ling ",
		"Bei ",
		"Yin ",
		"Dui ",
		"Wu ",
		"Qi ",
		"Lun ",
		"Wan ",
		"Dian ",
		"Gang ",
		"Pei ",
		"Qi ",
		"Chen ",
		"Ruan ",
		"Yan ",
		"Die ",
		"Ding ",
		"Du ",
		"Tuo ",
		"Jie ",
		"Ying ",
		"Bian ",
		"Ke ",
		"Bi ",
		"Wei ",
		"Shuo ",
		"Zhen ",
		"Duan ",
		"Xia ",
		"Dang ",
		"Ti ",
		"Nao ",
		"Peng ",
		"Jian ",
		"Di ",
		"Tan ",
		"Cha ",
		"Seki ",
		"Qi ",
		"[?] ",
		"Feng ",
		"Xuan ",
		"Que ",
		"Que ",
		"Ma ",
		"Gong ",
		"Nian ",
		"Su ",
		"E ",
		"Ci ",
		"Liu ",
		"Si ",
		"Tang ",
		"Bang ",
		"Hua ",
		"Pi ",
		"Wei ",
		"Sang ",
		"Lei ",
		"Cuo ",
		"Zhen ",
		"Xia ",
		"Qi ",
		"Lian ",
		"Pan ",
		"Wei ",
		"Yun ",
		"Dui ",
		"Zhe ",
		"Ke ",
		"La ",
		"[?] ",
		"Qing ",
		"Gun ",
		"Zhuan ",
		"Chan ",
		"Qi ",
		"Ao ",
		"Peng ",
		"Lu ",
		"Lu ",
		"Kan ",
		"Qiang ",
		"Chen ",
		"Yin ",
		"Lei ",
		"Biao ",
		"Qi ",
		"Mo ",
		"Qi ",
		"Cui ",
		"Zong ",
		"Qing ",
		"Chuo ",
		"[?] ",
		"Ji ",
		"Shan ",
		"Lao ",
		"Qu ",
		"Zeng ",
		"Deng ",
		"Jian ",
		"Xi ",
		"Lin ",
		"Ding ",
		"Dian ",
		"Huang ",
		"Pan ",
		"Za ",
		"Qiao ",
		"Di ",
		"Li "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x79.js
var require_x79 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Tani ",
		"Jiao ",
		"[?] ",
		"Zhang ",
		"Qiao ",
		"Dun ",
		"Xian ",
		"Yu ",
		"Zhui ",
		"He ",
		"Huo ",
		"Zhai ",
		"Lei ",
		"Ke ",
		"Chu ",
		"Ji ",
		"Que ",
		"Dang ",
		"Yi ",
		"Jiang ",
		"Pi ",
		"Pi ",
		"Yu ",
		"Pin ",
		"Qi ",
		"Ai ",
		"Kai ",
		"Jian ",
		"Yu ",
		"Ruan ",
		"Meng ",
		"Pao ",
		"Ci ",
		"[?] ",
		"[?] ",
		"Mie ",
		"Ca ",
		"Xian ",
		"Kuang ",
		"Lei ",
		"Lei ",
		"Zhi ",
		"Li ",
		"Li ",
		"Fan ",
		"Que ",
		"Pao ",
		"Ying ",
		"Li ",
		"Long ",
		"Long ",
		"Mo ",
		"Bo ",
		"Shuang ",
		"Guan ",
		"Lan ",
		"Zan ",
		"Yan ",
		"Shi ",
		"Shi ",
		"Li ",
		"Reng ",
		"She ",
		"Yue ",
		"Si ",
		"Qi ",
		"Ta ",
		"Ma ",
		"Xie ",
		"Xian ",
		"Xian ",
		"Zhi ",
		"Qi ",
		"Zhi ",
		"Beng ",
		"Dui ",
		"Zhong ",
		"[?] ",
		"Yi ",
		"Shi ",
		"You ",
		"Zhi ",
		"Tiao ",
		"Fu ",
		"Fu ",
		"Mi ",
		"Zu ",
		"Zhi ",
		"Suan ",
		"Mei ",
		"Zuo ",
		"Qu ",
		"Hu ",
		"Zhu ",
		"Shen ",
		"Sui ",
		"Ci ",
		"Chai ",
		"Mi ",
		"Lu ",
		"Yu ",
		"Xiang ",
		"Wu ",
		"Tiao ",
		"Piao ",
		"Zhu ",
		"Gui ",
		"Xia ",
		"Zhi ",
		"Ji ",
		"Gao ",
		"Zhen ",
		"Gao ",
		"Shui ",
		"Jin ",
		"Chen ",
		"Gai ",
		"Kun ",
		"Di ",
		"Dao ",
		"Huo ",
		"Tao ",
		"Qi ",
		"Gu ",
		"Guan ",
		"Zui ",
		"Ling ",
		"Lu ",
		"Bing ",
		"Jin ",
		"Dao ",
		"Zhi ",
		"Lu ",
		"Shan ",
		"Bei ",
		"Zhe ",
		"Hui ",
		"You ",
		"Xi ",
		"Yin ",
		"Zi ",
		"Huo ",
		"Zhen ",
		"Fu ",
		"Yuan ",
		"Wu ",
		"Xian ",
		"Yang ",
		"Ti ",
		"Yi ",
		"Mei ",
		"Si ",
		"Di ",
		"[?] ",
		"Zhuo ",
		"Zhen ",
		"Yong ",
		"Ji ",
		"Gao ",
		"Tang ",
		"Si ",
		"Ma ",
		"Ta ",
		"[?] ",
		"Xuan ",
		"Qi ",
		"Yu ",
		"Xi ",
		"Ji ",
		"Si ",
		"Chan ",
		"Tan ",
		"Kuai ",
		"Sui ",
		"Li ",
		"Nong ",
		"Ni ",
		"Dao ",
		"Li ",
		"Rang ",
		"Yue ",
		"Ti ",
		"Zan ",
		"Lei ",
		"Rou ",
		"Yu ",
		"Yu ",
		"Chi ",
		"Xie ",
		"Qin ",
		"He ",
		"Tu ",
		"Xiu ",
		"Si ",
		"Ren ",
		"Tu ",
		"Zi ",
		"Cha ",
		"Gan ",
		"Yi ",
		"Xian ",
		"Bing ",
		"Nian ",
		"Qiu ",
		"Qiu ",
		"Chong ",
		"Fen ",
		"Hao ",
		"Yun ",
		"Ke ",
		"Miao ",
		"Zhi ",
		"Geng ",
		"Bi ",
		"Zhi ",
		"Yu ",
		"Mi ",
		"Ku ",
		"Ban ",
		"Pi ",
		"Ni ",
		"Li ",
		"You ",
		"Zu ",
		"Pi ",
		"Ba ",
		"Ling ",
		"Mo ",
		"Cheng ",
		"Nian ",
		"Qin ",
		"Yang ",
		"Zuo ",
		"Zhi ",
		"Zhi ",
		"Shu ",
		"Ju ",
		"Zi ",
		"Huo ",
		"Ji ",
		"Cheng ",
		"Tong ",
		"Zhi ",
		"Huo ",
		"He ",
		"Yin ",
		"Zi ",
		"Zhi ",
		"Jie ",
		"Ren ",
		"Du ",
		"Yi ",
		"Zhu ",
		"Hui ",
		"Nong ",
		"Fu "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x7a.js
var require_x7a = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Xi ",
		"Kao ",
		"Lang ",
		"Fu ",
		"Ze ",
		"Shui ",
		"Lu ",
		"Kun ",
		"Gan ",
		"Geng ",
		"Ti ",
		"Cheng ",
		"Tu ",
		"Shao ",
		"Shui ",
		"Ya ",
		"Lun ",
		"Lu ",
		"Gu ",
		"Zuo ",
		"Ren ",
		"Zhun ",
		"Bang ",
		"Bai ",
		"Ji ",
		"Zhi ",
		"Zhi ",
		"Kun ",
		"Leng ",
		"Peng ",
		"Ke ",
		"Bing ",
		"Chou ",
		"Zu ",
		"Yu ",
		"Su ",
		"Lue ",
		"[?] ",
		"Yi ",
		"Xi ",
		"Bian ",
		"Ji ",
		"Fu ",
		"Bi ",
		"Nuo ",
		"Jie ",
		"Zhong ",
		"Zong ",
		"Xu ",
		"Cheng ",
		"Dao ",
		"Wen ",
		"Lian ",
		"Zi ",
		"Yu ",
		"Ji ",
		"Xu ",
		"Zhen ",
		"Zhi ",
		"Dao ",
		"Jia ",
		"Ji ",
		"Gao ",
		"Gao ",
		"Gu ",
		"Rong ",
		"Sui ",
		"You ",
		"Ji ",
		"Kang ",
		"Mu ",
		"Shan ",
		"Men ",
		"Zhi ",
		"Ji ",
		"Lu ",
		"Su ",
		"Ji ",
		"Ying ",
		"Wen ",
		"Qiu ",
		"Se ",
		"[?] ",
		"Yi ",
		"Huang ",
		"Qie ",
		"Ji ",
		"Sui ",
		"Xiao ",
		"Pu ",
		"Jiao ",
		"Zhuo ",
		"Tong ",
		"Sai ",
		"Lu ",
		"Sui ",
		"Nong ",
		"Se ",
		"Hui ",
		"Rang ",
		"Nuo ",
		"Yu ",
		"Bin ",
		"Ji ",
		"Tui ",
		"Wen ",
		"Cheng ",
		"Huo ",
		"Gong ",
		"Lu ",
		"Biao ",
		"[?] ",
		"Rang ",
		"Zhuo ",
		"Li ",
		"Zan ",
		"Xue ",
		"Wa ",
		"Jiu ",
		"Qiong ",
		"Xi ",
		"Qiong ",
		"Kong ",
		"Yu ",
		"Sen ",
		"Jing ",
		"Yao ",
		"Chuan ",
		"Zhun ",
		"Tu ",
		"Lao ",
		"Qie ",
		"Zhai ",
		"Yao ",
		"Bian ",
		"Bao ",
		"Yao ",
		"Bing ",
		"Wa ",
		"Zhu ",
		"Jiao ",
		"Qiao ",
		"Diao ",
		"Wu ",
		"Gui ",
		"Yao ",
		"Zhi ",
		"Chuang ",
		"Yao ",
		"Tiao ",
		"Jiao ",
		"Chuang ",
		"Jiong ",
		"Xiao ",
		"Cheng ",
		"Kou ",
		"Cuan ",
		"Wo ",
		"Dan ",
		"Ku ",
		"Ke ",
		"Zhui ",
		"Xu ",
		"Su ",
		"Guan ",
		"Kui ",
		"Dou ",
		"[?] ",
		"Yin ",
		"Wo ",
		"Wa ",
		"Ya ",
		"Yu ",
		"Ju ",
		"Qiong ",
		"Yao ",
		"Yao ",
		"Tiao ",
		"Chao ",
		"Yu ",
		"Tian ",
		"Diao ",
		"Ju ",
		"Liao ",
		"Xi ",
		"Wu ",
		"Kui ",
		"Chuang ",
		"Zhao ",
		"[?] ",
		"Kuan ",
		"Long ",
		"Cheng ",
		"Cui ",
		"Piao ",
		"Zao ",
		"Cuan ",
		"Qiao ",
		"Qiong ",
		"Dou ",
		"Zao ",
		"Long ",
		"Qie ",
		"Li ",
		"Chu ",
		"Shi ",
		"Fou ",
		"Qian ",
		"Chu ",
		"Hong ",
		"Qi ",
		"Qian ",
		"Gong ",
		"Shi ",
		"Shu ",
		"Miao ",
		"Ju ",
		"Zhan ",
		"Zhu ",
		"Ling ",
		"Long ",
		"Bing ",
		"Jing ",
		"Jing ",
		"Zhang ",
		"Yi ",
		"Si ",
		"Jun ",
		"Hong ",
		"Tong ",
		"Song ",
		"Jing ",
		"Diao ",
		"Yi ",
		"Shu ",
		"Jing ",
		"Qu ",
		"Jie ",
		"Ping ",
		"Duan ",
		"Shao ",
		"Zhuan ",
		"Ceng ",
		"Deng ",
		"Cui ",
		"Huai ",
		"Jing ",
		"Kan ",
		"Jing ",
		"Zhu ",
		"Zhu ",
		"Le ",
		"Peng ",
		"Yu ",
		"Chi ",
		"Gan "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x7b.js
var require_x7b = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Mang ",
		"Zhu ",
		"Utsubo ",
		"Du ",
		"Ji ",
		"Xiao ",
		"Ba ",
		"Suan ",
		"Ji ",
		"Zhen ",
		"Zhao ",
		"Sun ",
		"Ya ",
		"Zhui ",
		"Yuan ",
		"Hu ",
		"Gang ",
		"Xiao ",
		"Cen ",
		"Pi ",
		"Bi ",
		"Jian ",
		"Yi ",
		"Dong ",
		"Shan ",
		"Sheng ",
		"Xia ",
		"Di ",
		"Zhu ",
		"Na ",
		"Chi ",
		"Gu ",
		"Li ",
		"Qie ",
		"Min ",
		"Bao ",
		"Tiao ",
		"Si ",
		"Fu ",
		"Ce ",
		"Ben ",
		"Pei ",
		"Da ",
		"Zi ",
		"Di ",
		"Ling ",
		"Ze ",
		"Nu ",
		"Fu ",
		"Gou ",
		"Fan ",
		"Jia ",
		"Ge ",
		"Fan ",
		"Shi ",
		"Mao ",
		"Po ",
		"Sey ",
		"Jian ",
		"Qiong ",
		"Long ",
		"Souke ",
		"Bian ",
		"Luo ",
		"Gui ",
		"Qu ",
		"Chi ",
		"Yin ",
		"Yao ",
		"Xian ",
		"Bi ",
		"Qiong ",
		"Gua ",
		"Deng ",
		"Jiao ",
		"Jin ",
		"Quan ",
		"Sun ",
		"Ru ",
		"Fa ",
		"Kuang ",
		"Zhu ",
		"Tong ",
		"Ji ",
		"Da ",
		"Xing ",
		"Ce ",
		"Zhong ",
		"Kou ",
		"Lai ",
		"Bi ",
		"Shai ",
		"Dang ",
		"Zheng ",
		"Ce ",
		"Fu ",
		"Yun ",
		"Tu ",
		"Pa ",
		"Li ",
		"Lang ",
		"Ju ",
		"Guan ",
		"Jian ",
		"Han ",
		"Tong ",
		"Xia ",
		"Zhi ",
		"Cheng ",
		"Suan ",
		"Shi ",
		"Zhu ",
		"Zuo ",
		"Xiao ",
		"Shao ",
		"Ting ",
		"Ce ",
		"Yan ",
		"Gao ",
		"Kuai ",
		"Gan ",
		"Chou ",
		"Kago ",
		"Gang ",
		"Yun ",
		"O ",
		"Qian ",
		"Xiao ",
		"Jian ",
		"Pu ",
		"Lai ",
		"Zou ",
		"Bi ",
		"Bi ",
		"Bi ",
		"Ge ",
		"Chi ",
		"Guai ",
		"Yu ",
		"Jian ",
		"Zhao ",
		"Gu ",
		"Chi ",
		"Zheng ",
		"Jing ",
		"Sha ",
		"Zhou ",
		"Lu ",
		"Bo ",
		"Ji ",
		"Lin ",
		"Suan ",
		"Jun ",
		"Fu ",
		"Zha ",
		"Gu ",
		"Kong ",
		"Qian ",
		"Quan ",
		"Jun ",
		"Chui ",
		"Guan ",
		"Yuan ",
		"Ce ",
		"Ju ",
		"Bo ",
		"Ze ",
		"Qie ",
		"Tuo ",
		"Luo ",
		"Dan ",
		"Xiao ",
		"Ruo ",
		"Jian ",
		"Xuan ",
		"Bian ",
		"Sun ",
		"Xiang ",
		"Xian ",
		"Ping ",
		"Zhen ",
		"Sheng ",
		"Hu ",
		"Shi ",
		"Zhu ",
		"Yue ",
		"Chun ",
		"Lu ",
		"Wu ",
		"Dong ",
		"Xiao ",
		"Ji ",
		"Jie ",
		"Huang ",
		"Xing ",
		"Mei ",
		"Fan ",
		"Chui ",
		"Zhuan ",
		"Pian ",
		"Feng ",
		"Zhu ",
		"Hong ",
		"Qie ",
		"Hou ",
		"Qiu ",
		"Miao ",
		"Qian ",
		"[?] ",
		"Kui ",
		"Sik ",
		"Lou ",
		"Yun ",
		"He ",
		"Tang ",
		"Yue ",
		"Chou ",
		"Gao ",
		"Fei ",
		"Ruo ",
		"Zheng ",
		"Gou ",
		"Nie ",
		"Qian ",
		"Xiao ",
		"Cuan ",
		"Gong ",
		"Pang ",
		"Du ",
		"Li ",
		"Bi ",
		"Zhuo ",
		"Chu ",
		"Shai ",
		"Chi ",
		"Zhu ",
		"Qiang ",
		"Long ",
		"Lan ",
		"Jian ",
		"Bu ",
		"Li ",
		"Hui ",
		"Bi ",
		"Di ",
		"Cong ",
		"Yan ",
		"Peng ",
		"Sen ",
		"Zhuan ",
		"Pai ",
		"Piao ",
		"Dou ",
		"Yu ",
		"Mie ",
		"Zhuan "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x7c.js
var require_x7c = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ze ",
		"Xi ",
		"Guo ",
		"Yi ",
		"Hu ",
		"Chan ",
		"Kou ",
		"Cu ",
		"Ping ",
		"Chou ",
		"Ji ",
		"Gui ",
		"Su ",
		"Lou ",
		"Zha ",
		"Lu ",
		"Nian ",
		"Suo ",
		"Cuan ",
		"Sasara ",
		"Suo ",
		"Le ",
		"Duan ",
		"Yana ",
		"Xiao ",
		"Bo ",
		"Mi ",
		"Si ",
		"Dang ",
		"Liao ",
		"Dan ",
		"Dian ",
		"Fu ",
		"Jian ",
		"Min ",
		"Kui ",
		"Dai ",
		"Qiao ",
		"Deng ",
		"Huang ",
		"Sun ",
		"Lao ",
		"Zan ",
		"Xiao ",
		"Du ",
		"Shi ",
		"Zan ",
		"[?] ",
		"Pai ",
		"Hata ",
		"Pai ",
		"Gan ",
		"Ju ",
		"Du ",
		"Lu ",
		"Yan ",
		"Bo ",
		"Dang ",
		"Sai ",
		"Ke ",
		"Long ",
		"Qian ",
		"Lian ",
		"Bo ",
		"Zhou ",
		"Lai ",
		"[?] ",
		"Lan ",
		"Kui ",
		"Yu ",
		"Yue ",
		"Hao ",
		"Zhen ",
		"Tai ",
		"Ti ",
		"Mi ",
		"Chou ",
		"Ji ",
		"[?] ",
		"Hata ",
		"Teng ",
		"Zhuan ",
		"Zhou ",
		"Fan ",
		"Sou ",
		"Zhou ",
		"Kuji ",
		"Zhuo ",
		"Teng ",
		"Lu ",
		"Lu ",
		"Jian ",
		"Tuo ",
		"Ying ",
		"Yu ",
		"Lai ",
		"Long ",
		"Shinshi ",
		"Lian ",
		"Lan ",
		"Qian ",
		"Yue ",
		"Zhong ",
		"Qu ",
		"Lian ",
		"Bian ",
		"Duan ",
		"Zuan ",
		"Li ",
		"Si ",
		"Luo ",
		"Ying ",
		"Yue ",
		"Zhuo ",
		"Xu ",
		"Mi ",
		"Di ",
		"Fan ",
		"Shen ",
		"Zhe ",
		"Shen ",
		"Nu ",
		"Xie ",
		"Lei ",
		"Xian ",
		"Zi ",
		"Ni ",
		"Cun ",
		"[?] ",
		"Qian ",
		"Kume ",
		"Bi ",
		"Ban ",
		"Wu ",
		"Sha ",
		"Kang ",
		"Rou ",
		"Fen ",
		"Bi ",
		"Cui ",
		"[?] ",
		"Li ",
		"Chi ",
		"Nukamiso ",
		"Ro ",
		"Ba ",
		"Li ",
		"Gan ",
		"Ju ",
		"Po ",
		"Mo ",
		"Cu ",
		"Nian ",
		"Zhou ",
		"Li ",
		"Su ",
		"Tiao ",
		"Li ",
		"Qi ",
		"Su ",
		"Hong ",
		"Tong ",
		"Zi ",
		"Ce ",
		"Yue ",
		"Zhou ",
		"Lin ",
		"Zhuang ",
		"Bai ",
		"[?] ",
		"Fen ",
		"Ji ",
		"[?] ",
		"Sukumo ",
		"Liang ",
		"Xian ",
		"Fu ",
		"Liang ",
		"Can ",
		"Geng ",
		"Li ",
		"Yue ",
		"Lu ",
		"Ju ",
		"Qi ",
		"Cui ",
		"Bai ",
		"Zhang ",
		"Lin ",
		"Zong ",
		"Jing ",
		"Guo ",
		"Kouji ",
		"San ",
		"San ",
		"Tang ",
		"Bian ",
		"Rou ",
		"Mian ",
		"Hou ",
		"Xu ",
		"Zong ",
		"Hu ",
		"Jian ",
		"Zan ",
		"Ci ",
		"Li ",
		"Xie ",
		"Fu ",
		"Ni ",
		"Bei ",
		"Gu ",
		"Xiu ",
		"Gao ",
		"Tang ",
		"Qiu ",
		"Sukumo ",
		"Cao ",
		"Zhuang ",
		"Tang ",
		"Mi ",
		"San ",
		"Fen ",
		"Zao ",
		"Kang ",
		"Jiang ",
		"Mo ",
		"San ",
		"San ",
		"Nuo ",
		"Xi ",
		"Liang ",
		"Jiang ",
		"Kuai ",
		"Bo ",
		"Huan ",
		"[?] ",
		"Zong ",
		"Xian ",
		"Nuo ",
		"Tuan ",
		"Nie ",
		"Li ",
		"Zuo ",
		"Di ",
		"Nie ",
		"Tiao ",
		"Lan ",
		"Mi ",
		"Jiao ",
		"Jiu ",
		"Xi ",
		"Gong ",
		"Zheng ",
		"Jiu ",
		"You "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x7d.js
var require_x7d = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ji ",
		"Cha ",
		"Zhou ",
		"Xun ",
		"Yue ",
		"Hong ",
		"Yu ",
		"He ",
		"Wan ",
		"Ren ",
		"Wen ",
		"Wen ",
		"Qiu ",
		"Na ",
		"Zi ",
		"Tou ",
		"Niu ",
		"Fou ",
		"Jie ",
		"Shu ",
		"Chun ",
		"Pi ",
		"Yin ",
		"Sha ",
		"Hong ",
		"Zhi ",
		"Ji ",
		"Fen ",
		"Yun ",
		"Ren ",
		"Dan ",
		"Jin ",
		"Su ",
		"Fang ",
		"Suo ",
		"Cui ",
		"Jiu ",
		"Zha ",
		"Kinu ",
		"Jin ",
		"Fu ",
		"Zhi ",
		"Ci ",
		"Zi ",
		"Chou ",
		"Hong ",
		"Zha ",
		"Lei ",
		"Xi ",
		"Fu ",
		"Xie ",
		"Shen ",
		"Bei ",
		"Zhu ",
		"Qu ",
		"Ling ",
		"Zhu ",
		"Shao ",
		"Gan ",
		"Yang ",
		"Fu ",
		"Tuo ",
		"Zhen ",
		"Dai ",
		"Zhuo ",
		"Shi ",
		"Zhong ",
		"Xian ",
		"Zu ",
		"Jiong ",
		"Ban ",
		"Ju ",
		"Mo ",
		"Shu ",
		"Zui ",
		"Wata ",
		"Jing ",
		"Ren ",
		"Heng ",
		"Xie ",
		"Jie ",
		"Zhu ",
		"Chou ",
		"Gua ",
		"Bai ",
		"Jue ",
		"Kuang ",
		"Hu ",
		"Ci ",
		"Geng ",
		"Geng ",
		"Tao ",
		"Xie ",
		"Ku ",
		"Jiao ",
		"Quan ",
		"Gai ",
		"Luo ",
		"Xuan ",
		"Bing ",
		"Xian ",
		"Fu ",
		"Gei ",
		"Tong ",
		"Rong ",
		"Tiao ",
		"Yin ",
		"Lei ",
		"Xie ",
		"Quan ",
		"Xu ",
		"Lun ",
		"Die ",
		"Tong ",
		"Si ",
		"Jiang ",
		"Xiang ",
		"Hui ",
		"Jue ",
		"Zhi ",
		"Jian ",
		"Juan ",
		"Chi ",
		"Mian ",
		"Zhen ",
		"Lu ",
		"Cheng ",
		"Qiu ",
		"Shu ",
		"Bang ",
		"Tong ",
		"Xiao ",
		"Wan ",
		"Qin ",
		"Geng ",
		"Xiu ",
		"Ti ",
		"Xiu ",
		"Xie ",
		"Hong ",
		"Xi ",
		"Fu ",
		"Ting ",
		"Sui ",
		"Dui ",
		"Kun ",
		"Fu ",
		"Jing ",
		"Hu ",
		"Zhi ",
		"Yan ",
		"Jiong ",
		"Feng ",
		"Ji ",
		"Sok ",
		"Kase ",
		"Zong ",
		"Lin ",
		"Duo ",
		"Li ",
		"Lu ",
		"Liang ",
		"Chou ",
		"Quan ",
		"Shao ",
		"Qi ",
		"Qi ",
		"Zhun ",
		"Qi ",
		"Wan ",
		"Qian ",
		"Xian ",
		"Shou ",
		"Wei ",
		"Qi ",
		"Tao ",
		"Wan ",
		"Gang ",
		"Wang ",
		"Beng ",
		"Zhui ",
		"Cai ",
		"Guo ",
		"Cui ",
		"Lun ",
		"Liu ",
		"Qi ",
		"Zhan ",
		"Bei ",
		"Chuo ",
		"Ling ",
		"Mian ",
		"Qi ",
		"Qie ",
		"Tan ",
		"Zong ",
		"Gun ",
		"Zou ",
		"Yi ",
		"Zi ",
		"Xing ",
		"Liang ",
		"Jin ",
		"Fei ",
		"Rui ",
		"Min ",
		"Yu ",
		"Zong ",
		"Fan ",
		"Lu ",
		"Xu ",
		"Yingl ",
		"Zhang ",
		"Kasuri ",
		"Xu ",
		"Xiang ",
		"Jian ",
		"Ke ",
		"Xian ",
		"Ruan ",
		"Mian ",
		"Qi ",
		"Duan ",
		"Zhong ",
		"Di ",
		"Min ",
		"Miao ",
		"Yuan ",
		"Xie ",
		"Bao ",
		"Si ",
		"Qiu ",
		"Bian ",
		"Huan ",
		"Geng ",
		"Cong ",
		"Mian ",
		"Wei ",
		"Fu ",
		"Wei ",
		"Yu ",
		"Gou ",
		"Miao ",
		"Xie ",
		"Lian ",
		"Zong ",
		"Bian ",
		"Yun ",
		"Yin ",
		"Ti ",
		"Gua ",
		"Zhi ",
		"Yun ",
		"Cheng ",
		"Chan ",
		"Dai "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x7e.js
var require_x7e = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Xia ",
		"Yuan ",
		"Zong ",
		"Xu ",
		"Nawa ",
		"Odoshi ",
		"Geng ",
		"Sen ",
		"Ying ",
		"Jin ",
		"Yi ",
		"Zhui ",
		"Ni ",
		"Bang ",
		"Gu ",
		"Pan ",
		"Zhou ",
		"Jian ",
		"Cuo ",
		"Quan ",
		"Shuang ",
		"Yun ",
		"Xia ",
		"Shuai ",
		"Xi ",
		"Rong ",
		"Tao ",
		"Fu ",
		"Yun ",
		"Zhen ",
		"Gao ",
		"Ru ",
		"Hu ",
		"Zai ",
		"Teng ",
		"Xian ",
		"Su ",
		"Zhen ",
		"Zong ",
		"Tao ",
		"Horo ",
		"Cai ",
		"Bi ",
		"Feng ",
		"Cu ",
		"Li ",
		"Suo ",
		"Yin ",
		"Xi ",
		"Zong ",
		"Lei ",
		"Zhuan ",
		"Qian ",
		"Man ",
		"Zhi ",
		"Lu ",
		"Mo ",
		"Piao ",
		"Lian ",
		"Mi ",
		"Xuan ",
		"Zong ",
		"Ji ",
		"Shan ",
		"Sui ",
		"Fan ",
		"Shuai ",
		"Beng ",
		"Yi ",
		"Sao ",
		"Mou ",
		"Zhou ",
		"Qiang ",
		"Hun ",
		"Sem ",
		"Xi ",
		"Jung ",
		"Xiu ",
		"Ran ",
		"Xuan ",
		"Hui ",
		"Qiao ",
		"Zeng ",
		"Zuo ",
		"Zhi ",
		"Shan ",
		"San ",
		"Lin ",
		"Yu ",
		"Fan ",
		"Liao ",
		"Chuo ",
		"Zun ",
		"Jian ",
		"Rao ",
		"Chan ",
		"Rui ",
		"Xiu ",
		"Hui ",
		"Hua ",
		"Zuan ",
		"Xi ",
		"Qiang ",
		"Un ",
		"Da ",
		"Sheng ",
		"Hui ",
		"Xi ",
		"Se ",
		"Jian ",
		"Jiang ",
		"Huan ",
		"Zao ",
		"Cong ",
		"Jie ",
		"Jiao ",
		"Bo ",
		"Chan ",
		"Yi ",
		"Nao ",
		"Sui ",
		"Yi ",
		"Shai ",
		"Xu ",
		"Ji ",
		"Bin ",
		"Qian ",
		"Lan ",
		"Pu ",
		"Xun ",
		"Zuan ",
		"Qi ",
		"Peng ",
		"Li ",
		"Mo ",
		"Lei ",
		"Xie ",
		"Zuan ",
		"Kuang ",
		"You ",
		"Xu ",
		"Lei ",
		"Xian ",
		"Chan ",
		"Kou ",
		"Lu ",
		"Chan ",
		"Ying ",
		"Cai ",
		"Xiang ",
		"Xian ",
		"Zui ",
		"Zuan ",
		"Luo ",
		"Xi ",
		"Dao ",
		"Lan ",
		"Lei ",
		"Lian ",
		"Si ",
		"Jiu ",
		"Yu ",
		"Hong ",
		"Zhou ",
		"Xian ",
		"He ",
		"Yue ",
		"Ji ",
		"Wan ",
		"Kuang ",
		"Ji ",
		"Ren ",
		"Wei ",
		"Yun ",
		"Hong ",
		"Chun ",
		"Pi ",
		"Sha ",
		"Gang ",
		"Na ",
		"Ren ",
		"Zong ",
		"Lun ",
		"Fen ",
		"Zhi ",
		"Wen ",
		"Fang ",
		"Zhu ",
		"Yin ",
		"Niu ",
		"Shu ",
		"Xian ",
		"Gan ",
		"Xie ",
		"Fu ",
		"Lian ",
		"Zu ",
		"Shen ",
		"Xi ",
		"Zhi ",
		"Zhong ",
		"Zhou ",
		"Ban ",
		"Fu ",
		"Zhuo ",
		"Shao ",
		"Yi ",
		"Jing ",
		"Dai ",
		"Bang ",
		"Rong ",
		"Jie ",
		"Ku ",
		"Rao ",
		"Die ",
		"Heng ",
		"Hui ",
		"Gei ",
		"Xuan ",
		"Jiang ",
		"Luo ",
		"Jue ",
		"Jiao ",
		"Tong ",
		"Geng ",
		"Xiao ",
		"Juan ",
		"Xiu ",
		"Xi ",
		"Sui ",
		"Tao ",
		"Ji ",
		"Ti ",
		"Ji ",
		"Xu ",
		"Ling ",
		"[?] ",
		"Xu ",
		"Qi ",
		"Fei ",
		"Chuo ",
		"Zhang ",
		"Gun ",
		"Sheng ",
		"Wei ",
		"Mian ",
		"Shou ",
		"Beng ",
		"Chou ",
		"Tao ",
		"Liu ",
		"Quan ",
		"Zong ",
		"Zhan ",
		"Wan ",
		"Lu "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x7f.js
var require_x7f = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Zhui ",
		"Zi ",
		"Ke ",
		"Xiang ",
		"Jian ",
		"Mian ",
		"Lan ",
		"Ti ",
		"Miao ",
		"Qi ",
		"Yun ",
		"Hui ",
		"Si ",
		"Duo ",
		"Duan ",
		"Bian ",
		"Xian ",
		"Gou ",
		"Zhui ",
		"Huan ",
		"Di ",
		"Lu ",
		"Bian ",
		"Min ",
		"Yuan ",
		"Jin ",
		"Fu ",
		"Ru ",
		"Zhen ",
		"Feng ",
		"Shuai ",
		"Gao ",
		"Chan ",
		"Li ",
		"Yi ",
		"Jian ",
		"Bin ",
		"Piao ",
		"Man ",
		"Lei ",
		"Ying ",
		"Suo ",
		"Mou ",
		"Sao ",
		"Xie ",
		"Liao ",
		"Shan ",
		"Zeng ",
		"Jiang ",
		"Qian ",
		"Zao ",
		"Huan ",
		"Jiao ",
		"Zuan ",
		"Fou ",
		"Xie ",
		"Gang ",
		"Fou ",
		"Que ",
		"Fou ",
		"Kaakeru ",
		"Bo ",
		"Ping ",
		"Hou ",
		"[?] ",
		"Gang ",
		"Ying ",
		"Ying ",
		"Qing ",
		"Xia ",
		"Guan ",
		"Zun ",
		"Tan ",
		"Chang ",
		"Qi ",
		"Weng ",
		"Ying ",
		"Lei ",
		"Tan ",
		"Lu ",
		"Guan ",
		"Wang ",
		"Wang ",
		"Gang ",
		"Wang ",
		"Han ",
		"[?] ",
		"Luo ",
		"Fu ",
		"Mi ",
		"Fa ",
		"Gu ",
		"Zhu ",
		"Ju ",
		"Mao ",
		"Gu ",
		"Min ",
		"Gang ",
		"Ba ",
		"Gua ",
		"Ti ",
		"Juan ",
		"Fu ",
		"Lin ",
		"Yan ",
		"Zhao ",
		"Zui ",
		"Gua ",
		"Zhuo ",
		"Yu ",
		"Zhi ",
		"An ",
		"Fa ",
		"Nan ",
		"Shu ",
		"Si ",
		"Pi ",
		"Ma ",
		"Liu ",
		"Ba ",
		"Fa ",
		"Li ",
		"Chao ",
		"Wei ",
		"Bi ",
		"Ji ",
		"Zeng ",
		"Tong ",
		"Liu ",
		"Ji ",
		"Juan ",
		"Mi ",
		"Zhao ",
		"Luo ",
		"Pi ",
		"Ji ",
		"Ji ",
		"Luan ",
		"Yang ",
		"Mie ",
		"Qiang ",
		"Ta ",
		"Mei ",
		"Yang ",
		"You ",
		"You ",
		"Fen ",
		"Ba ",
		"Gao ",
		"Yang ",
		"Gu ",
		"Qiang ",
		"Zang ",
		"Gao ",
		"Ling ",
		"Yi ",
		"Zhu ",
		"Di ",
		"Xiu ",
		"Qian ",
		"Yi ",
		"Xian ",
		"Rong ",
		"Qun ",
		"Qun ",
		"Qian ",
		"Huan ",
		"Zui ",
		"Xian ",
		"Yi ",
		"Yashinau ",
		"Qiang ",
		"Xian ",
		"Yu ",
		"Geng ",
		"Jie ",
		"Tang ",
		"Yuan ",
		"Xi ",
		"Fan ",
		"Shan ",
		"Fen ",
		"Shan ",
		"Lian ",
		"Lei ",
		"Geng ",
		"Nou ",
		"Qiang ",
		"Chan ",
		"Yu ",
		"Gong ",
		"Yi ",
		"Chong ",
		"Weng ",
		"Fen ",
		"Hong ",
		"Chi ",
		"Chi ",
		"Cui ",
		"Fu ",
		"Xia ",
		"Pen ",
		"Yi ",
		"La ",
		"Yi ",
		"Pi ",
		"Ling ",
		"Liu ",
		"Zhi ",
		"Qu ",
		"Xi ",
		"Xie ",
		"Xiang ",
		"Xi ",
		"Xi ",
		"Qi ",
		"Qiao ",
		"Hui ",
		"Hui ",
		"Xiao ",
		"Se ",
		"Hong ",
		"Jiang ",
		"Di ",
		"Cui ",
		"Fei ",
		"Tao ",
		"Sha ",
		"Chi ",
		"Zhu ",
		"Jian ",
		"Xuan ",
		"Shi ",
		"Pian ",
		"Zong ",
		"Wan ",
		"Hui ",
		"Hou ",
		"He ",
		"He ",
		"Han ",
		"Ao ",
		"Piao ",
		"Yi ",
		"Lian ",
		"Qu ",
		"[?] ",
		"Lin ",
		"Pen ",
		"Qiao ",
		"Ao ",
		"Fan ",
		"Yi ",
		"Hui ",
		"Xuan ",
		"Dao "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x80.js
var require_x80 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Yao ",
		"Lao ",
		"[?] ",
		"Kao ",
		"Mao ",
		"Zhe ",
		"Qi ",
		"Gou ",
		"Gou ",
		"Gou ",
		"Die ",
		"Die ",
		"Er ",
		"Shua ",
		"Ruan ",
		"Er ",
		"Nai ",
		"Zhuan ",
		"Lei ",
		"Ting ",
		"Zi ",
		"Geng ",
		"Chao ",
		"Hao ",
		"Yun ",
		"Pa ",
		"Pi ",
		"Chi ",
		"Si ",
		"Chu ",
		"Jia ",
		"Ju ",
		"He ",
		"Chu ",
		"Lao ",
		"Lun ",
		"Ji ",
		"Tang ",
		"Ou ",
		"Lou ",
		"Nou ",
		"Gou ",
		"Pang ",
		"Ze ",
		"Lou ",
		"Ji ",
		"Lao ",
		"Huo ",
		"You ",
		"Mo ",
		"Huai ",
		"Er ",
		"Zhe ",
		"Ting ",
		"Ye ",
		"Da ",
		"Song ",
		"Qin ",
		"Yun ",
		"Chi ",
		"Dan ",
		"Dan ",
		"Hong ",
		"Geng ",
		"Zhi ",
		"[?] ",
		"Nie ",
		"Dan ",
		"Zhen ",
		"Che ",
		"Ling ",
		"Zheng ",
		"You ",
		"Wa ",
		"Liao ",
		"Long ",
		"Zhi ",
		"Ning ",
		"Tiao ",
		"Er ",
		"Ya ",
		"Die ",
		"Gua ",
		"[?] ",
		"Lian ",
		"Hao ",
		"Sheng ",
		"Lie ",
		"Pin ",
		"Jing ",
		"Ju ",
		"Bi ",
		"Di ",
		"Guo ",
		"Wen ",
		"Xu ",
		"Ping ",
		"Cong ",
		"Shikato ",
		"[?] ",
		"Ting ",
		"Yu ",
		"Cong ",
		"Kui ",
		"Tsuraneru ",
		"Kui ",
		"Cong ",
		"Lian ",
		"Weng ",
		"Kui ",
		"Lian ",
		"Lian ",
		"Cong ",
		"Ao ",
		"Sheng ",
		"Song ",
		"Ting ",
		"Kui ",
		"Nie ",
		"Zhi ",
		"Dan ",
		"Ning ",
		"Qie ",
		"Ji ",
		"Ting ",
		"Ting ",
		"Long ",
		"Yu ",
		"Yu ",
		"Zhao ",
		"Si ",
		"Su ",
		"Yi ",
		"Su ",
		"Si ",
		"Zhao ",
		"Zhao ",
		"Rou ",
		"Yi ",
		"Le ",
		"Ji ",
		"Qiu ",
		"Ken ",
		"Cao ",
		"Ge ",
		"Di ",
		"Huan ",
		"Huang ",
		"Yi ",
		"Ren ",
		"Xiao ",
		"Ru ",
		"Zhou ",
		"Yuan ",
		"Du ",
		"Gang ",
		"Rong ",
		"Gan ",
		"Cha ",
		"Wo ",
		"Chang ",
		"Gu ",
		"Zhi ",
		"Han ",
		"Fu ",
		"Fei ",
		"Fen ",
		"Pei ",
		"Pang ",
		"Jian ",
		"Fang ",
		"Zhun ",
		"You ",
		"Na ",
		"Hang ",
		"Ken ",
		"Ran ",
		"Gong ",
		"Yu ",
		"Wen ",
		"Yao ",
		"Jin ",
		"Pi ",
		"Qian ",
		"Xi ",
		"Xi ",
		"Fei ",
		"Ken ",
		"Jing ",
		"Tai ",
		"Shen ",
		"Zhong ",
		"Zhang ",
		"Xie ",
		"Shen ",
		"Wei ",
		"Zhou ",
		"Die ",
		"Dan ",
		"Fei ",
		"Ba ",
		"Bo ",
		"Qu ",
		"Tian ",
		"Bei ",
		"Gua ",
		"Tai ",
		"Zi ",
		"Ku ",
		"Zhi ",
		"Ni ",
		"Ping ",
		"Zi ",
		"Fu ",
		"Pang ",
		"Zhen ",
		"Xian ",
		"Zuo ",
		"Pei ",
		"Jia ",
		"Sheng ",
		"Zhi ",
		"Bao ",
		"Mu ",
		"Qu ",
		"Hu ",
		"Ke ",
		"Yi ",
		"Yin ",
		"Xu ",
		"Yang ",
		"Long ",
		"Dong ",
		"Ka ",
		"Lu ",
		"Jing ",
		"Nu ",
		"Yan ",
		"Pang ",
		"Kua ",
		"Yi ",
		"Guang ",
		"Gai ",
		"Ge ",
		"Dong ",
		"Zhi ",
		"Xiao ",
		"Xiong ",
		"Xiong ",
		"Er ",
		"E ",
		"Xing ",
		"Pian ",
		"Neng ",
		"Zi ",
		"Gui "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x81.js
var require_x81 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Cheng ",
		"Tiao ",
		"Zhi ",
		"Cui ",
		"Mei ",
		"Xie ",
		"Cui ",
		"Xie ",
		"Mo ",
		"Mai ",
		"Ji ",
		"Obiyaakasu ",
		"[?] ",
		"Kuai ",
		"Sa ",
		"Zang ",
		"Qi ",
		"Nao ",
		"Mi ",
		"Nong ",
		"Luan ",
		"Wan ",
		"Bo ",
		"Wen ",
		"Guan ",
		"Qiu ",
		"Jiao ",
		"Jing ",
		"Rou ",
		"Heng ",
		"Cuo ",
		"Lie ",
		"Shan ",
		"Ting ",
		"Mei ",
		"Chun ",
		"Shen ",
		"Xie ",
		"De ",
		"Zui ",
		"Cu ",
		"Xiu ",
		"Xin ",
		"Tuo ",
		"Pao ",
		"Cheng ",
		"Nei ",
		"Fu ",
		"Dou ",
		"Tuo ",
		"Niao ",
		"Noy ",
		"Pi ",
		"Gu ",
		"Gua ",
		"Li ",
		"Lian ",
		"Zhang ",
		"Cui ",
		"Jie ",
		"Liang ",
		"Zhou ",
		"Pi ",
		"Biao ",
		"Lun ",
		"Pian ",
		"Guo ",
		"Kui ",
		"Chui ",
		"Dan ",
		"Tian ",
		"Nei ",
		"Jing ",
		"Jie ",
		"La ",
		"Yi ",
		"An ",
		"Ren ",
		"Shen ",
		"Chuo ",
		"Fu ",
		"Fu ",
		"Ju ",
		"Fei ",
		"Qiang ",
		"Wan ",
		"Dong ",
		"Pi ",
		"Guo ",
		"Zong ",
		"Ding ",
		"Wu ",
		"Mei ",
		"Ruan ",
		"Zhuan ",
		"Zhi ",
		"Cou ",
		"Gua ",
		"Ou ",
		"Di ",
		"An ",
		"Xing ",
		"Nao ",
		"Yu ",
		"Chuan ",
		"Nan ",
		"Yun ",
		"Zhong ",
		"Rou ",
		"E ",
		"Sai ",
		"Tu ",
		"Yao ",
		"Jian ",
		"Wei ",
		"Jiao ",
		"Yu ",
		"Jia ",
		"Duan ",
		"Bi ",
		"Chang ",
		"Fu ",
		"Xian ",
		"Ni ",
		"Mian ",
		"Wa ",
		"Teng ",
		"Tui ",
		"Bang ",
		"Qian ",
		"Lu ",
		"Wa ",
		"Sou ",
		"Tang ",
		"Su ",
		"Zhui ",
		"Ge ",
		"Yi ",
		"Bo ",
		"Liao ",
		"Ji ",
		"Pi ",
		"Xie ",
		"Gao ",
		"Lu ",
		"Bin ",
		"Ou ",
		"Chang ",
		"Lu ",
		"Guo ",
		"Pang ",
		"Chuai ",
		"Piao ",
		"Jiang ",
		"Fu ",
		"Tang ",
		"Mo ",
		"Xi ",
		"Zhuan ",
		"Lu ",
		"Jiao ",
		"Ying ",
		"Lu ",
		"Zhi ",
		"Tara ",
		"Chun ",
		"Lian ",
		"Tong ",
		"Peng ",
		"Ni ",
		"Zha ",
		"Liao ",
		"Cui ",
		"Gui ",
		"Xiao ",
		"Teng ",
		"Fan ",
		"Zhi ",
		"Jiao ",
		"Shan ",
		"Wu ",
		"Cui ",
		"Run ",
		"Xiang ",
		"Sui ",
		"Fen ",
		"Ying ",
		"Tan ",
		"Zhua ",
		"Dan ",
		"Kuai ",
		"Nong ",
		"Tun ",
		"Lian ",
		"Bi ",
		"Yong ",
		"Jue ",
		"Chu ",
		"Yi ",
		"Juan ",
		"La ",
		"Lian ",
		"Sao ",
		"Tun ",
		"Gu ",
		"Qi ",
		"Cui ",
		"Bin ",
		"Xun ",
		"Ru ",
		"Huo ",
		"Zang ",
		"Xian ",
		"Biao ",
		"Xing ",
		"Kuan ",
		"La ",
		"Yan ",
		"Lu ",
		"Huo ",
		"Zang ",
		"Luo ",
		"Qu ",
		"Zang ",
		"Luan ",
		"Ni ",
		"Zang ",
		"Chen ",
		"Qian ",
		"Wo ",
		"Guang ",
		"Zang ",
		"Lin ",
		"Guang ",
		"Zi ",
		"Jiao ",
		"Nie ",
		"Chou ",
		"Ji ",
		"Gao ",
		"Chou ",
		"Mian ",
		"Nie ",
		"Zhi ",
		"Zhi ",
		"Ge ",
		"Jian ",
		"Die ",
		"Zhi ",
		"Xiu ",
		"Tai ",
		"Zhen ",
		"Jiu ",
		"Xian ",
		"Yu ",
		"Cha "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x82.js
var require_x82 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Yao ",
		"Yu ",
		"Chong ",
		"Xi ",
		"Xi ",
		"Jiu ",
		"Yu ",
		"Yu ",
		"Xing ",
		"Ju ",
		"Jiu ",
		"Xin ",
		"She ",
		"She ",
		"Yadoru ",
		"Jiu ",
		"Shi ",
		"Tan ",
		"Shu ",
		"Shi ",
		"Tian ",
		"Dan ",
		"Pu ",
		"Pu ",
		"Guan ",
		"Hua ",
		"Tan ",
		"Chuan ",
		"Shun ",
		"Xia ",
		"Wu ",
		"Zhou ",
		"Dao ",
		"Gang ",
		"Shan ",
		"Yi ",
		"[?] ",
		"Pa ",
		"Tai ",
		"Fan ",
		"Ban ",
		"Chuan ",
		"Hang ",
		"Fang ",
		"Ban ",
		"Que ",
		"Hesaki ",
		"Zhong ",
		"Jian ",
		"Cang ",
		"Ling ",
		"Zhu ",
		"Ze ",
		"Duo ",
		"Bo ",
		"Xian ",
		"Ge ",
		"Chuan ",
		"Jia ",
		"Lu ",
		"Hong ",
		"Pang ",
		"Xi ",
		"[?] ",
		"Fu ",
		"Zao ",
		"Feng ",
		"Li ",
		"Shao ",
		"Yu ",
		"Lang ",
		"Ting ",
		"[?] ",
		"Wei ",
		"Bo ",
		"Meng ",
		"Nian ",
		"Ju ",
		"Huang ",
		"Shou ",
		"Zong ",
		"Bian ",
		"Mao ",
		"Die ",
		"[?] ",
		"Bang ",
		"Cha ",
		"Yi ",
		"Sao ",
		"Cang ",
		"Cao ",
		"Lou ",
		"Dai ",
		"Sori ",
		"Yao ",
		"Tong ",
		"Yofune ",
		"Dang ",
		"Tan ",
		"Lu ",
		"Yi ",
		"Jie ",
		"Jian ",
		"Huo ",
		"Meng ",
		"Qi ",
		"Lu ",
		"Lu ",
		"Chan ",
		"Shuang ",
		"Gen ",
		"Liang ",
		"Jian ",
		"Jian ",
		"Se ",
		"Yan ",
		"Fu ",
		"Ping ",
		"Yan ",
		"Yan ",
		"Cao ",
		"Cao ",
		"Yi ",
		"Le ",
		"Ting ",
		"Qiu ",
		"Ai ",
		"Nai ",
		"Tiao ",
		"Jiao ",
		"Jie ",
		"Peng ",
		"Wan ",
		"Yi ",
		"Chai ",
		"Mian ",
		"Mie ",
		"Gan ",
		"Qian ",
		"Yu ",
		"Yu ",
		"Shuo ",
		"Qiong ",
		"Tu ",
		"Xia ",
		"Qi ",
		"Mang ",
		"Zi ",
		"Hui ",
		"Sui ",
		"Zhi ",
		"Xiang ",
		"Bi ",
		"Fu ",
		"Tun ",
		"Wei ",
		"Wu ",
		"Zhi ",
		"Qi ",
		"Shan ",
		"Wen ",
		"Qian ",
		"Ren ",
		"Fou ",
		"Kou ",
		"Jie ",
		"Lu ",
		"Xu ",
		"Ji ",
		"Qin ",
		"Qi ",
		"Yuan ",
		"Fen ",
		"Ba ",
		"Rui ",
		"Xin ",
		"Ji ",
		"Hua ",
		"Hua ",
		"Fang ",
		"Wu ",
		"Jue ",
		"Gou ",
		"Zhi ",
		"Yun ",
		"Qin ",
		"Ao ",
		"Chu ",
		"Mao ",
		"Ya ",
		"Fei ",
		"Reng ",
		"Hang ",
		"Cong ",
		"Yin ",
		"You ",
		"Bian ",
		"Yi ",
		"Susa ",
		"Wei ",
		"Li ",
		"Pi ",
		"E ",
		"Xian ",
		"Chang ",
		"Cang ",
		"Meng ",
		"Su ",
		"Yi ",
		"Yuan ",
		"Ran ",
		"Ling ",
		"Tai ",
		"Tiao ",
		"Di ",
		"Miao ",
		"Qiong ",
		"Li ",
		"Yong ",
		"Ke ",
		"Mu ",
		"Pei ",
		"Bao ",
		"Gou ",
		"Min ",
		"Yi ",
		"Yi ",
		"Ju ",
		"Pi ",
		"Ruo ",
		"Ku ",
		"Zhu ",
		"Ni ",
		"Bo ",
		"Bing ",
		"Shan ",
		"Qiu ",
		"Yao ",
		"Xian ",
		"Ben ",
		"Hong ",
		"Ying ",
		"Zha ",
		"Dong ",
		"Ju ",
		"Die ",
		"Nie ",
		"Gan ",
		"Hu ",
		"Ping ",
		"Mei ",
		"Fu ",
		"Sheng ",
		"Gu ",
		"Bi ",
		"Wei "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x83.js
var require_x83 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Fu ",
		"Zhuo ",
		"Mao ",
		"Fan ",
		"Qie ",
		"Mao ",
		"Mao ",
		"Ba ",
		"Zi ",
		"Mo ",
		"Zi ",
		"Di ",
		"Chi ",
		"Ji ",
		"Jing ",
		"Long ",
		"[?] ",
		"Niao ",
		"[?] ",
		"Xue ",
		"Ying ",
		"Qiong ",
		"Ge ",
		"Ming ",
		"Li ",
		"Rong ",
		"Yin ",
		"Gen ",
		"Qian ",
		"Chai ",
		"Chen ",
		"Yu ",
		"Xiu ",
		"Zi ",
		"Lie ",
		"Wu ",
		"Ji ",
		"Kui ",
		"Ce ",
		"Chong ",
		"Ci ",
		"Gou ",
		"Guang ",
		"Mang ",
		"Chi ",
		"Jiao ",
		"Jiao ",
		"Fu ",
		"Yu ",
		"Zhu ",
		"Zi ",
		"Jiang ",
		"Hui ",
		"Yin ",
		"Cha ",
		"Fa ",
		"Rong ",
		"Ru ",
		"Chong ",
		"Mang ",
		"Tong ",
		"Zhong ",
		"[?] ",
		"Zhu ",
		"Xun ",
		"Huan ",
		"Kua ",
		"Quan ",
		"Gai ",
		"Da ",
		"Jing ",
		"Xing ",
		"Quan ",
		"Cao ",
		"Jing ",
		"Er ",
		"An ",
		"Shou ",
		"Chi ",
		"Ren ",
		"Jian ",
		"Ti ",
		"Huang ",
		"Ping ",
		"Li ",
		"Jin ",
		"Lao ",
		"Shu ",
		"Zhuang ",
		"Da ",
		"Jia ",
		"Rao ",
		"Bi ",
		"Ze ",
		"Qiao ",
		"Hui ",
		"Qi ",
		"Dang ",
		"[?] ",
		"Rong ",
		"Hun ",
		"Ying ",
		"Luo ",
		"Ying ",
		"Xun ",
		"Jin ",
		"Sun ",
		"Yin ",
		"Mai ",
		"Hong ",
		"Zhou ",
		"Yao ",
		"Du ",
		"Wei ",
		"Chu ",
		"Dou ",
		"Fu ",
		"Ren ",
		"Yin ",
		"He ",
		"Bi ",
		"Bu ",
		"Yun ",
		"Di ",
		"Tu ",
		"Sui ",
		"Sui ",
		"Cheng ",
		"Chen ",
		"Wu ",
		"Bie ",
		"Xi ",
		"Geng ",
		"Li ",
		"Fu ",
		"Zhu ",
		"Mo ",
		"Li ",
		"Zhuang ",
		"Ji ",
		"Duo ",
		"Qiu ",
		"Sha ",
		"Suo ",
		"Chen ",
		"Feng ",
		"Ju ",
		"Mei ",
		"Meng ",
		"Xing ",
		"Jing ",
		"Che ",
		"Xin ",
		"Jun ",
		"Yan ",
		"Ting ",
		"Diao ",
		"Cuo ",
		"Wan ",
		"Han ",
		"You ",
		"Cuo ",
		"Jia ",
		"Wang ",
		"You ",
		"Niu ",
		"Shao ",
		"Xian ",
		"Lang ",
		"Fu ",
		"E ",
		"Mo ",
		"Wen ",
		"Jie ",
		"Nan ",
		"Mu ",
		"Kan ",
		"Lai ",
		"Lian ",
		"Shi ",
		"Wo ",
		"Usagi ",
		"Lian ",
		"Huo ",
		"You ",
		"Ying ",
		"Ying ",
		"Nuc ",
		"Chun ",
		"Mang ",
		"Mang ",
		"Ci ",
		"Wan ",
		"Jing ",
		"Di ",
		"Qu ",
		"Dong ",
		"Jian ",
		"Zou ",
		"Gu ",
		"La ",
		"Lu ",
		"Ju ",
		"Wei ",
		"Jun ",
		"Nie ",
		"Kun ",
		"He ",
		"Pu ",
		"Zi ",
		"Gao ",
		"Guo ",
		"Fu ",
		"Lun ",
		"Chang ",
		"Chou ",
		"Song ",
		"Chui ",
		"Zhan ",
		"Men ",
		"Cai ",
		"Ba ",
		"Li ",
		"Tu ",
		"Bo ",
		"Han ",
		"Bao ",
		"Qin ",
		"Juan ",
		"Xi ",
		"Qin ",
		"Di ",
		"Jie ",
		"Pu ",
		"Dang ",
		"Jin ",
		"Zhao ",
		"Tai ",
		"Geng ",
		"Hua ",
		"Gu ",
		"Ling ",
		"Fei ",
		"Jin ",
		"An ",
		"Wang ",
		"Beng ",
		"Zhou ",
		"Yan ",
		"Ju ",
		"Jian ",
		"Lin ",
		"Tan ",
		"Shu ",
		"Tian ",
		"Dao "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x84.js
var require_x84 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Hu ",
		"Qi ",
		"He ",
		"Cui ",
		"Tao ",
		"Chun ",
		"Bei ",
		"Chang ",
		"Huan ",
		"Fei ",
		"Lai ",
		"Qi ",
		"Meng ",
		"Ping ",
		"Wei ",
		"Dan ",
		"Sha ",
		"Huan ",
		"Yan ",
		"Yi ",
		"Tiao ",
		"Qi ",
		"Wan ",
		"Ce ",
		"Nai ",
		"Kutabireru ",
		"Tuo ",
		"Jiu ",
		"Tie ",
		"Luo ",
		"[?] ",
		"[?] ",
		"Meng ",
		"[?] ",
		"Yaji ",
		"[?] ",
		"Ying ",
		"Ying ",
		"Ying ",
		"Xiao ",
		"Sa ",
		"Qiu ",
		"Ke ",
		"Xiang ",
		"Wan ",
		"Yu ",
		"Yu ",
		"Fu ",
		"Lian ",
		"Xuan ",
		"Yuan ",
		"Nan ",
		"Ze ",
		"Wo ",
		"Chun ",
		"Xiao ",
		"Yu ",
		"Pian ",
		"Mao ",
		"An ",
		"E ",
		"Luo ",
		"Ying ",
		"Huo ",
		"Gua ",
		"Jiang ",
		"Mian ",
		"Zuo ",
		"Zuo ",
		"Ju ",
		"Bao ",
		"Rou ",
		"Xi ",
		"Xie ",
		"An ",
		"Qu ",
		"Jian ",
		"Fu ",
		"Lu ",
		"Jing ",
		"Pen ",
		"Feng ",
		"Hong ",
		"Hong ",
		"Hou ",
		"Yan ",
		"Tu ",
		"Zhu ",
		"Zi ",
		"Xiang ",
		"Shen ",
		"Ge ",
		"Jie ",
		"Jing ",
		"Mi ",
		"Huang ",
		"Shen ",
		"Pu ",
		"Gai ",
		"Dong ",
		"Zhou ",
		"Qian ",
		"Wei ",
		"Bo ",
		"Wei ",
		"Pa ",
		"Ji ",
		"Hu ",
		"Zang ",
		"Jia ",
		"Duan ",
		"Yao ",
		"Jun ",
		"Cong ",
		"Quan ",
		"Wei ",
		"Xian ",
		"Kui ",
		"Ting ",
		"Hun ",
		"Xi ",
		"Shi ",
		"Qi ",
		"Lan ",
		"Zong ",
		"Yao ",
		"Yuan ",
		"Mei ",
		"Yun ",
		"Shu ",
		"Di ",
		"Zhuan ",
		"Guan ",
		"Sukumo ",
		"Xue ",
		"Chan ",
		"Kai ",
		"Kui ",
		"[?] ",
		"Jiang ",
		"Lou ",
		"Wei ",
		"Pai ",
		"[?] ",
		"Sou ",
		"Yin ",
		"Shi ",
		"Chun ",
		"Shi ",
		"Yun ",
		"Zhen ",
		"Lang ",
		"Nu ",
		"Meng ",
		"He ",
		"Que ",
		"Suan ",
		"Yuan ",
		"Li ",
		"Ju ",
		"Xi ",
		"Pang ",
		"Chu ",
		"Xu ",
		"Tu ",
		"Liu ",
		"Wo ",
		"Zhen ",
		"Qian ",
		"Zu ",
		"Po ",
		"Cuo ",
		"Yuan ",
		"Chu ",
		"Yu ",
		"Kuai ",
		"Pan ",
		"Pu ",
		"Pu ",
		"Na ",
		"Shuo ",
		"Xi ",
		"Fen ",
		"Yun ",
		"Zheng ",
		"Jian ",
		"Ji ",
		"Ruo ",
		"Cang ",
		"En ",
		"Mi ",
		"Hao ",
		"Sun ",
		"Zhen ",
		"Ming ",
		"Sou ",
		"Xu ",
		"Liu ",
		"Xi ",
		"Gu ",
		"Lang ",
		"Rong ",
		"Weng ",
		"Gai ",
		"Cuo ",
		"Shi ",
		"Tang ",
		"Luo ",
		"Ru ",
		"Suo ",
		"Xian ",
		"Bei ",
		"Yao ",
		"Gui ",
		"Bi ",
		"Zong ",
		"Gun ",
		"Za ",
		"Xiu ",
		"Ce ",
		"Hai ",
		"Lan ",
		"[?] ",
		"Ji ",
		"Li ",
		"Can ",
		"Lang ",
		"Yu ",
		"[?] ",
		"Ying ",
		"Mo ",
		"Diao ",
		"Tiao ",
		"Mao ",
		"Tong ",
		"Zhu ",
		"Peng ",
		"An ",
		"Lian ",
		"Cong ",
		"Xi ",
		"Ping ",
		"Qiu ",
		"Jin ",
		"Chun ",
		"Jie ",
		"Wei ",
		"Tui ",
		"Cao ",
		"Yu ",
		"Yi ",
		"Ji ",
		"Liao ",
		"Bi ",
		"Lu ",
		"Su "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x85.js
var require_x85 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Bu ",
		"Zhang ",
		"Luo ",
		"Jiang ",
		"Man ",
		"Yan ",
		"Ling ",
		"Ji ",
		"Piao ",
		"Gun ",
		"Han ",
		"Di ",
		"Su ",
		"Lu ",
		"She ",
		"Shang ",
		"Di ",
		"Mie ",
		"Xun ",
		"Man ",
		"Bo ",
		"Di ",
		"Cuo ",
		"Zhe ",
		"Sen ",
		"Xuan ",
		"Wei ",
		"Hu ",
		"Ao ",
		"Mi ",
		"Lou ",
		"Cu ",
		"Zhong ",
		"Cai ",
		"Po ",
		"Jiang ",
		"Mi ",
		"Cong ",
		"Niao ",
		"Hui ",
		"Jun ",
		"Yin ",
		"Jian ",
		"Yan ",
		"Shu ",
		"Yin ",
		"Kui ",
		"Chen ",
		"Hu ",
		"Sha ",
		"Kou ",
		"Qian ",
		"Ma ",
		"Zang ",
		"Sonoko ",
		"Qiang ",
		"Dou ",
		"Lian ",
		"Lin ",
		"Kou ",
		"Ai ",
		"Bi ",
		"Li ",
		"Wei ",
		"Ji ",
		"Xun ",
		"Sheng ",
		"Fan ",
		"Meng ",
		"Ou ",
		"Chan ",
		"Dian ",
		"Xun ",
		"Jiao ",
		"Rui ",
		"Rui ",
		"Lei ",
		"Yu ",
		"Qiao ",
		"Chu ",
		"Hua ",
		"Jian ",
		"Mai ",
		"Yun ",
		"Bao ",
		"You ",
		"Qu ",
		"Lu ",
		"Rao ",
		"Hui ",
		"E ",
		"Teng ",
		"Fei ",
		"Jue ",
		"Zui ",
		"Fa ",
		"Ru ",
		"Fen ",
		"Kui ",
		"Shun ",
		"Rui ",
		"Ya ",
		"Xu ",
		"Fu ",
		"Jue ",
		"Dang ",
		"Wu ",
		"Tong ",
		"Si ",
		"Xiao ",
		"Xi ",
		"Long ",
		"Yun ",
		"[?] ",
		"Qi ",
		"Jian ",
		"Yun ",
		"Sun ",
		"Ling ",
		"Yu ",
		"Xia ",
		"Yong ",
		"Ji ",
		"Hong ",
		"Si ",
		"Nong ",
		"Lei ",
		"Xuan ",
		"Yun ",
		"Yu ",
		"Xi ",
		"Hao ",
		"Bo ",
		"Hao ",
		"Ai ",
		"Wei ",
		"Hui ",
		"Wei ",
		"Ji ",
		"Ci ",
		"Xiang ",
		"Luan ",
		"Mie ",
		"Yi ",
		"Leng ",
		"Jiang ",
		"Can ",
		"Shen ",
		"Qiang ",
		"Lian ",
		"Ke ",
		"Yuan ",
		"Da ",
		"Ti ",
		"Tang ",
		"Xie ",
		"Bi ",
		"Zhan ",
		"Sun ",
		"Lian ",
		"Fan ",
		"Ding ",
		"Jie ",
		"Gu ",
		"Xie ",
		"Shu ",
		"Jian ",
		"Kao ",
		"Hong ",
		"Sa ",
		"Xin ",
		"Xun ",
		"Yao ",
		"Hie ",
		"Sou ",
		"Shu ",
		"Xun ",
		"Dui ",
		"Pin ",
		"Wei ",
		"Neng ",
		"Chou ",
		"Mai ",
		"Ru ",
		"Piao ",
		"Tai ",
		"Qi ",
		"Zao ",
		"Chen ",
		"Zhen ",
		"Er ",
		"Ni ",
		"Ying ",
		"Gao ",
		"Cong ",
		"Xiao ",
		"Qi ",
		"Fa ",
		"Jian ",
		"Xu ",
		"Kui ",
		"Jie ",
		"Bian ",
		"Diao ",
		"Mi ",
		"Lan ",
		"Jin ",
		"Cang ",
		"Miao ",
		"Qiong ",
		"Qie ",
		"Xian ",
		"[?] ",
		"Ou ",
		"Xian ",
		"Su ",
		"Lu ",
		"Yi ",
		"Xu ",
		"Xie ",
		"Li ",
		"Yi ",
		"La ",
		"Lei ",
		"Xiao ",
		"Di ",
		"Zhi ",
		"Bei ",
		"Teng ",
		"Yao ",
		"Mo ",
		"Huan ",
		"Piao ",
		"Fan ",
		"Sou ",
		"Tan ",
		"Tui ",
		"Qiong ",
		"Qiao ",
		"Wei ",
		"Liu ",
		"Hui ",
		"[?] ",
		"Gao ",
		"Yun ",
		"[?] ",
		"Li ",
		"Shu ",
		"Chu ",
		"Ai ",
		"Lin ",
		"Zao ",
		"Xuan ",
		"Chen ",
		"Lai ",
		"Huo "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x86.js
var require_x86 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Tuo ",
		"Wu ",
		"Rui ",
		"Rui ",
		"Qi ",
		"Heng ",
		"Lu ",
		"Su ",
		"Tui ",
		"Mang ",
		"Yun ",
		"Pin ",
		"Yu ",
		"Xun ",
		"Ji ",
		"Jiong ",
		"Xian ",
		"Mo ",
		"Hagi ",
		"Su ",
		"Jiong ",
		"[?] ",
		"Nie ",
		"Bo ",
		"Rang ",
		"Yi ",
		"Xian ",
		"Yu ",
		"Ju ",
		"Lian ",
		"Lian ",
		"Yin ",
		"Qiang ",
		"Ying ",
		"Long ",
		"Tong ",
		"Wei ",
		"Yue ",
		"Ling ",
		"Qu ",
		"Yao ",
		"Fan ",
		"Mi ",
		"Lan ",
		"Kui ",
		"Lan ",
		"Ji ",
		"Dang ",
		"Katsura ",
		"Lei ",
		"Lei ",
		"Hua ",
		"Feng ",
		"Zhi ",
		"Wei ",
		"Kui ",
		"Zhan ",
		"Huai ",
		"Li ",
		"Ji ",
		"Mi ",
		"Lei ",
		"Huai ",
		"Luo ",
		"Ji ",
		"Kui ",
		"Lu ",
		"Jian ",
		"San ",
		"[?] ",
		"Lei ",
		"Quan ",
		"Xiao ",
		"Yi ",
		"Luan ",
		"Men ",
		"Bie ",
		"Hu ",
		"Hu ",
		"Lu ",
		"Nue ",
		"Lu ",
		"Si ",
		"Xiao ",
		"Qian ",
		"Chu ",
		"Hu ",
		"Xu ",
		"Cuo ",
		"Fu ",
		"Xu ",
		"Xu ",
		"Lu ",
		"Hu ",
		"Yu ",
		"Hao ",
		"Jiao ",
		"Ju ",
		"Guo ",
		"Bao ",
		"Yan ",
		"Zhan ",
		"Zhan ",
		"Kui ",
		"Ban ",
		"Xi ",
		"Shu ",
		"Chong ",
		"Qiu ",
		"Diao ",
		"Ji ",
		"Qiu ",
		"Cheng ",
		"Shi ",
		"[?] ",
		"Di ",
		"Zhe ",
		"She ",
		"Yu ",
		"Gan ",
		"Zi ",
		"Hong ",
		"Hui ",
		"Meng ",
		"Ge ",
		"Sui ",
		"Xia ",
		"Chai ",
		"Shi ",
		"Yi ",
		"Ma ",
		"Xiang ",
		"Fang ",
		"E ",
		"Pa ",
		"Chi ",
		"Qian ",
		"Wen ",
		"Wen ",
		"Rui ",
		"Bang ",
		"Bi ",
		"Yue ",
		"Yue ",
		"Jun ",
		"Qi ",
		"Ran ",
		"Yin ",
		"Qi ",
		"Tian ",
		"Yuan ",
		"Jue ",
		"Hui ",
		"Qin ",
		"Qi ",
		"Zhong ",
		"Ya ",
		"Ci ",
		"Mu ",
		"Wang ",
		"Fen ",
		"Fen ",
		"Hang ",
		"Gong ",
		"Zao ",
		"Fu ",
		"Ran ",
		"Jie ",
		"Fu ",
		"Chi ",
		"Dou ",
		"Piao ",
		"Xian ",
		"Ni ",
		"Te ",
		"Qiu ",
		"You ",
		"Zha ",
		"Ping ",
		"Chi ",
		"You ",
		"He ",
		"Han ",
		"Ju ",
		"Li ",
		"Fu ",
		"Ran ",
		"Zha ",
		"Gou ",
		"Pi ",
		"Bo ",
		"Xian ",
		"Zhu ",
		"Diao ",
		"Bie ",
		"Bing ",
		"Gu ",
		"Ran ",
		"Qu ",
		"She ",
		"Tie ",
		"Ling ",
		"Gu ",
		"Dan ",
		"Gu ",
		"Ying ",
		"Li ",
		"Cheng ",
		"Qu ",
		"Mou ",
		"Ge ",
		"Ci ",
		"Hui ",
		"Hui ",
		"Mang ",
		"Fu ",
		"Yang ",
		"Wa ",
		"Lie ",
		"Zhu ",
		"Yi ",
		"Xian ",
		"Kuo ",
		"Jiao ",
		"Li ",
		"Yi ",
		"Ping ",
		"Ji ",
		"Ha ",
		"She ",
		"Yi ",
		"Wang ",
		"Mo ",
		"Qiong ",
		"Qie ",
		"Gui ",
		"Gong ",
		"Zhi ",
		"Man ",
		"Ebi ",
		"Zhi ",
		"Jia ",
		"Rao ",
		"Si ",
		"Qi ",
		"Xing ",
		"Lie ",
		"Qiu ",
		"Shao ",
		"Yong ",
		"Jia ",
		"Shui ",
		"Che ",
		"Bai ",
		"E ",
		"Han "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x87.js
var require_x87 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Shu ",
		"Xuan ",
		"Feng ",
		"Shen ",
		"Zhen ",
		"Fu ",
		"Xian ",
		"Zhe ",
		"Wu ",
		"Fu ",
		"Li ",
		"Lang ",
		"Bi ",
		"Chu ",
		"Yuan ",
		"You ",
		"Jie ",
		"Dan ",
		"Yan ",
		"Ting ",
		"Dian ",
		"Shui ",
		"Hui ",
		"Gua ",
		"Zhi ",
		"Song ",
		"Fei ",
		"Ju ",
		"Mi ",
		"Qi ",
		"Qi ",
		"Yu ",
		"Jun ",
		"Zha ",
		"Meng ",
		"Qiang ",
		"Si ",
		"Xi ",
		"Lun ",
		"Li ",
		"Die ",
		"Tiao ",
		"Tao ",
		"Kun ",
		"Gan ",
		"Han ",
		"Yu ",
		"Bang ",
		"Fei ",
		"Pi ",
		"Wei ",
		"Dun ",
		"Yi ",
		"Yuan ",
		"Su ",
		"Quan ",
		"Qian ",
		"Rui ",
		"Ni ",
		"Qing ",
		"Wei ",
		"Liang ",
		"Guo ",
		"Wan ",
		"Dong ",
		"E ",
		"Ban ",
		"Di ",
		"Wang ",
		"Can ",
		"Yang ",
		"Ying ",
		"Guo ",
		"Chan ",
		"[?] ",
		"La ",
		"Ke ",
		"Ji ",
		"He ",
		"Ting ",
		"Mai ",
		"Xu ",
		"Mian ",
		"Yu ",
		"Jie ",
		"Shi ",
		"Xuan ",
		"Huang ",
		"Yan ",
		"Bian ",
		"Rou ",
		"Wei ",
		"Fu ",
		"Yuan ",
		"Mei ",
		"Wei ",
		"Fu ",
		"Ruan ",
		"Xie ",
		"You ",
		"Qiu ",
		"Mao ",
		"Xia ",
		"Ying ",
		"Shi ",
		"Chong ",
		"Tang ",
		"Zhu ",
		"Zong ",
		"Ti ",
		"Fu ",
		"Yuan ",
		"Hui ",
		"Meng ",
		"La ",
		"Du ",
		"Hu ",
		"Qiu ",
		"Die ",
		"Li ",
		"Gua ",
		"Yun ",
		"Ju ",
		"Nan ",
		"Lou ",
		"Qun ",
		"Rong ",
		"Ying ",
		"Jiang ",
		"[?] ",
		"Lang ",
		"Pang ",
		"Si ",
		"Xi ",
		"Ci ",
		"Xi ",
		"Yuan ",
		"Weng ",
		"Lian ",
		"Sou ",
		"Ban ",
		"Rong ",
		"Rong ",
		"Ji ",
		"Wu ",
		"Qiu ",
		"Han ",
		"Qin ",
		"Yi ",
		"Bi ",
		"Hua ",
		"Tang ",
		"Yi ",
		"Du ",
		"Nai ",
		"He ",
		"Hu ",
		"Hui ",
		"Ma ",
		"Ming ",
		"Yi ",
		"Wen ",
		"Ying ",
		"Teng ",
		"Yu ",
		"Cang ",
		"So ",
		"Ebi ",
		"Man ",
		"[?] ",
		"Shang ",
		"Zhe ",
		"Cao ",
		"Chi ",
		"Di ",
		"Ao ",
		"Lu ",
		"Wei ",
		"Zhi ",
		"Tang ",
		"Chen ",
		"Piao ",
		"Qu ",
		"Pi ",
		"Yu ",
		"Jian ",
		"Luo ",
		"Lou ",
		"Qin ",
		"Zhong ",
		"Yin ",
		"Jiang ",
		"Shuai ",
		"Wen ",
		"Jiao ",
		"Wan ",
		"Zhi ",
		"Zhe ",
		"Ma ",
		"Ma ",
		"Guo ",
		"Liu ",
		"Mao ",
		"Xi ",
		"Cong ",
		"Li ",
		"Man ",
		"Xiao ",
		"Kamakiri ",
		"Zhang ",
		"Mang ",
		"Xiang ",
		"Mo ",
		"Zui ",
		"Si ",
		"Qiu ",
		"Te ",
		"Zhi ",
		"Peng ",
		"Peng ",
		"Jiao ",
		"Qu ",
		"Bie ",
		"Liao ",
		"Pan ",
		"Gui ",
		"Xi ",
		"Ji ",
		"Zhuan ",
		"Huang ",
		"Fei ",
		"Lao ",
		"Jue ",
		"Jue ",
		"Hui ",
		"Yin ",
		"Chan ",
		"Jiao ",
		"Shan ",
		"Rao ",
		"Xiao ",
		"Mou ",
		"Chong ",
		"Xun ",
		"Si ",
		"[?] ",
		"Cheng ",
		"Dang ",
		"Li ",
		"Xie ",
		"Shan ",
		"Yi ",
		"Jing ",
		"Da ",
		"Chan ",
		"Qi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x88.js
var require_x88 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ci ",
		"Xiang ",
		"She ",
		"Luo ",
		"Qin ",
		"Ying ",
		"Chai ",
		"Li ",
		"Ze ",
		"Xuan ",
		"Lian ",
		"Zhu ",
		"Ze ",
		"Xie ",
		"Mang ",
		"Xie ",
		"Qi ",
		"Rong ",
		"Jian ",
		"Meng ",
		"Hao ",
		"Ruan ",
		"Huo ",
		"Zhuo ",
		"Jie ",
		"Bin ",
		"He ",
		"Mie ",
		"Fan ",
		"Lei ",
		"Jie ",
		"La ",
		"Mi ",
		"Li ",
		"Chun ",
		"Li ",
		"Qiu ",
		"Nie ",
		"Lu ",
		"Du ",
		"Xiao ",
		"Zhu ",
		"Long ",
		"Li ",
		"Long ",
		"Feng ",
		"Ye ",
		"Beng ",
		"Shang ",
		"Gu ",
		"Juan ",
		"Ying ",
		"[?] ",
		"Xi ",
		"Can ",
		"Qu ",
		"Quan ",
		"Du ",
		"Can ",
		"Man ",
		"Jue ",
		"Jie ",
		"Zhu ",
		"Zha ",
		"Xie ",
		"Huang ",
		"Niu ",
		"Pei ",
		"Nu ",
		"Xin ",
		"Zhong ",
		"Mo ",
		"Er ",
		"Ke ",
		"Mie ",
		"Xi ",
		"Xing ",
		"Yan ",
		"Kan ",
		"Yuan ",
		"[?] ",
		"Ling ",
		"Xuan ",
		"Shu ",
		"Xian ",
		"Tong ",
		"Long ",
		"Jie ",
		"Xian ",
		"Ya ",
		"Hu ",
		"Wei ",
		"Dao ",
		"Chong ",
		"Wei ",
		"Dao ",
		"Zhun ",
		"Heng ",
		"Qu ",
		"Yi ",
		"Yi ",
		"Bu ",
		"Gan ",
		"Yu ",
		"Biao ",
		"Cha ",
		"Yi ",
		"Shan ",
		"Chen ",
		"Fu ",
		"Gun ",
		"Fen ",
		"Shuai ",
		"Jie ",
		"Na ",
		"Zhong ",
		"Dan ",
		"Ri ",
		"Zhong ",
		"Zhong ",
		"Xie ",
		"Qi ",
		"Xie ",
		"Ran ",
		"Zhi ",
		"Ren ",
		"Qin ",
		"Jin ",
		"Jun ",
		"Yuan ",
		"Mei ",
		"Chai ",
		"Ao ",
		"Niao ",
		"Hui ",
		"Ran ",
		"Jia ",
		"Tuo ",
		"Ling ",
		"Dai ",
		"Bao ",
		"Pao ",
		"Yao ",
		"Zuo ",
		"Bi ",
		"Shao ",
		"Tan ",
		"Ju ",
		"He ",
		"Shu ",
		"Xiu ",
		"Zhen ",
		"Yi ",
		"Pa ",
		"Bo ",
		"Di ",
		"Wa ",
		"Fu ",
		"Gun ",
		"Zhi ",
		"Zhi ",
		"Ran ",
		"Pan ",
		"Yi ",
		"Mao ",
		"Tuo ",
		"Na ",
		"Kou ",
		"Xian ",
		"Chan ",
		"Qu ",
		"Bei ",
		"Gun ",
		"Xi ",
		"Ne ",
		"Bo ",
		"Horo ",
		"Fu ",
		"Yi ",
		"Chi ",
		"Ku ",
		"Ren ",
		"Jiang ",
		"Jia ",
		"Cun ",
		"Mo ",
		"Jie ",
		"Er ",
		"Luo ",
		"Ru ",
		"Zhu ",
		"Gui ",
		"Yin ",
		"Cai ",
		"Lie ",
		"Kamishimo ",
		"Yuki ",
		"Zhuang ",
		"Dang ",
		"[?] ",
		"Kun ",
		"Ken ",
		"Niao ",
		"Shu ",
		"Jia ",
		"Kun ",
		"Cheng ",
		"Li ",
		"Juan ",
		"Shen ",
		"Pou ",
		"Ge ",
		"Yi ",
		"Yu ",
		"Zhen ",
		"Liu ",
		"Qiu ",
		"Qun ",
		"Ji ",
		"Yi ",
		"Bu ",
		"Zhuang ",
		"Shui ",
		"Sha ",
		"Qun ",
		"Li ",
		"Lian ",
		"Lian ",
		"Ku ",
		"Jian ",
		"Fou ",
		"Chan ",
		"Bi ",
		"Gun ",
		"Tao ",
		"Yuan ",
		"Ling ",
		"Chi ",
		"Chang ",
		"Chou ",
		"Duo ",
		"Biao ",
		"Liang ",
		"Chang ",
		"Pei ",
		"Pei ",
		"Fei ",
		"Yuan ",
		"Luo ",
		"Guo ",
		"Yan ",
		"Du ",
		"Xi ",
		"Zhi ",
		"Ju ",
		"Qi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x89.js
var require_x89 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ji ",
		"Zhi ",
		"Gua ",
		"Ken ",
		"Che ",
		"Ti ",
		"Ti ",
		"Fu ",
		"Chong ",
		"Xie ",
		"Bian ",
		"Die ",
		"Kun ",
		"Duan ",
		"Xiu ",
		"Xiu ",
		"He ",
		"Yuan ",
		"Bao ",
		"Bao ",
		"Fu ",
		"Yu ",
		"Tuan ",
		"Yan ",
		"Hui ",
		"Bei ",
		"Chu ",
		"Lu ",
		"Ena ",
		"Hitoe ",
		"Yun ",
		"Da ",
		"Gou ",
		"Da ",
		"Huai ",
		"Rong ",
		"Yuan ",
		"Ru ",
		"Nai ",
		"Jiong ",
		"Suo ",
		"Ban ",
		"Tun ",
		"Chi ",
		"Sang ",
		"Niao ",
		"Ying ",
		"Jie ",
		"Qian ",
		"Huai ",
		"Ku ",
		"Lian ",
		"Bao ",
		"Li ",
		"Zhe ",
		"Shi ",
		"Lu ",
		"Yi ",
		"Die ",
		"Xie ",
		"Xian ",
		"Wei ",
		"Biao ",
		"Cao ",
		"Ji ",
		"Jiang ",
		"Sen ",
		"Bao ",
		"Xiang ",
		"Chihaya ",
		"Pu ",
		"Jian ",
		"Zhuan ",
		"Jian ",
		"Zui ",
		"Ji ",
		"Dan ",
		"Za ",
		"Fan ",
		"Bo ",
		"Xiang ",
		"Xin ",
		"Bie ",
		"Rao ",
		"Man ",
		"Lan ",
		"Ao ",
		"Duo ",
		"Gui ",
		"Cao ",
		"Sui ",
		"Nong ",
		"Chan ",
		"Lian ",
		"Bi ",
		"Jin ",
		"Dang ",
		"Shu ",
		"Tan ",
		"Bi ",
		"Lan ",
		"Pu ",
		"Ru ",
		"Zhi ",
		"[?] ",
		"Shu ",
		"Wa ",
		"Shi ",
		"Bai ",
		"Xie ",
		"Bo ",
		"Chen ",
		"Lai ",
		"Long ",
		"Xi ",
		"Xian ",
		"Lan ",
		"Zhe ",
		"Dai ",
		"Tasuki ",
		"Zan ",
		"Shi ",
		"Jian ",
		"Pan ",
		"Yi ",
		"Ran ",
		"Ya ",
		"Xi ",
		"Xi ",
		"Yao ",
		"Feng ",
		"Tan ",
		"[?] ",
		"Biao ",
		"Fu ",
		"Ba ",
		"He ",
		"Ji ",
		"Ji ",
		"Jian ",
		"Guan ",
		"Bian ",
		"Yan ",
		"Gui ",
		"Jue ",
		"Pian ",
		"Mao ",
		"Mi ",
		"Mi ",
		"Mie ",
		"Shi ",
		"Si ",
		"Zhan ",
		"Luo ",
		"Jue ",
		"Mi ",
		"Tiao ",
		"Lian ",
		"Yao ",
		"Zhi ",
		"Jun ",
		"Xi ",
		"Shan ",
		"Wei ",
		"Xi ",
		"Tian ",
		"Yu ",
		"Lan ",
		"E ",
		"Du ",
		"Qin ",
		"Pang ",
		"Ji ",
		"Ming ",
		"Ying ",
		"Gou ",
		"Qu ",
		"Zhan ",
		"Jin ",
		"Guan ",
		"Deng ",
		"Jian ",
		"Luo ",
		"Qu ",
		"Jian ",
		"Wei ",
		"Jue ",
		"Qu ",
		"Luo ",
		"Lan ",
		"Shen ",
		"Di ",
		"Guan ",
		"Jian ",
		"Guan ",
		"Yan ",
		"Gui ",
		"Mi ",
		"Shi ",
		"Zhan ",
		"Lan ",
		"Jue ",
		"Ji ",
		"Xi ",
		"Di ",
		"Tian ",
		"Yu ",
		"Gou ",
		"Jin ",
		"Qu ",
		"Jiao ",
		"Jiu ",
		"Jin ",
		"Cu ",
		"Jue ",
		"Zhi ",
		"Chao ",
		"Ji ",
		"Gu ",
		"Dan ",
		"Zui ",
		"Di ",
		"Shang ",
		"Hua ",
		"Quan ",
		"Ge ",
		"Chi ",
		"Jie ",
		"Gui ",
		"Gong ",
		"Hong ",
		"Jie ",
		"Hun ",
		"Qiu ",
		"Xing ",
		"Su ",
		"Ni ",
		"Ji ",
		"Lu ",
		"Zhi ",
		"Zha ",
		"Bi ",
		"Xing ",
		"Hu ",
		"Shang ",
		"Gong ",
		"Zhi ",
		"Xue ",
		"Chu ",
		"Xi ",
		"Yi ",
		"Lu ",
		"Jue ",
		"Xi ",
		"Yan ",
		"Xi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x8a.js
var require_x8a = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Yan ",
		"Yan ",
		"Ding ",
		"Fu ",
		"Qiu ",
		"Qiu ",
		"Jiao ",
		"Hong ",
		"Ji ",
		"Fan ",
		"Xun ",
		"Diao ",
		"Hong ",
		"Cha ",
		"Tao ",
		"Xu ",
		"Jie ",
		"Yi ",
		"Ren ",
		"Xun ",
		"Yin ",
		"Shan ",
		"Qi ",
		"Tuo ",
		"Ji ",
		"Xun ",
		"Yin ",
		"E ",
		"Fen ",
		"Ya ",
		"Yao ",
		"Song ",
		"Shen ",
		"Yin ",
		"Xin ",
		"Jue ",
		"Xiao ",
		"Ne ",
		"Chen ",
		"You ",
		"Zhi ",
		"Xiong ",
		"Fang ",
		"Xin ",
		"Chao ",
		"She ",
		"Xian ",
		"Sha ",
		"Tun ",
		"Xu ",
		"Yi ",
		"Yi ",
		"Su ",
		"Chi ",
		"He ",
		"Shen ",
		"He ",
		"Xu ",
		"Zhen ",
		"Zhu ",
		"Zheng ",
		"Gou ",
		"Zi ",
		"Zi ",
		"Zhan ",
		"Gu ",
		"Fu ",
		"Quan ",
		"Die ",
		"Ling ",
		"Di ",
		"Yang ",
		"Li ",
		"Nao ",
		"Pan ",
		"Zhou ",
		"Gan ",
		"Yi ",
		"Ju ",
		"Ao ",
		"Zha ",
		"Tuo ",
		"Yi ",
		"Qu ",
		"Zhao ",
		"Ping ",
		"Bi ",
		"Xiong ",
		"Qu ",
		"Ba ",
		"Da ",
		"Zu ",
		"Tao ",
		"Zhu ",
		"Ci ",
		"Zhe ",
		"Yong ",
		"Xu ",
		"Xun ",
		"Yi ",
		"Huang ",
		"He ",
		"Shi ",
		"Cha ",
		"Jiao ",
		"Shi ",
		"Hen ",
		"Cha ",
		"Gou ",
		"Gui ",
		"Quan ",
		"Hui ",
		"Jie ",
		"Hua ",
		"Gai ",
		"Xiang ",
		"Wei ",
		"Shen ",
		"Chou ",
		"Tong ",
		"Mi ",
		"Zhan ",
		"Ming ",
		"E ",
		"Hui ",
		"Yan ",
		"Xiong ",
		"Gua ",
		"Er ",
		"Beng ",
		"Tiao ",
		"Chi ",
		"Lei ",
		"Zhu ",
		"Kuang ",
		"Kua ",
		"Wu ",
		"Yu ",
		"Teng ",
		"Ji ",
		"Zhi ",
		"Ren ",
		"Su ",
		"Lang ",
		"E ",
		"Kuang ",
		"E ",
		"Shi ",
		"Ting ",
		"Dan ",
		"Bo ",
		"Chan ",
		"You ",
		"Heng ",
		"Qiao ",
		"Qin ",
		"Shua ",
		"An ",
		"Yu ",
		"Xiao ",
		"Cheng ",
		"Jie ",
		"Xian ",
		"Wu ",
		"Wu ",
		"Gao ",
		"Song ",
		"Pu ",
		"Hui ",
		"Jing ",
		"Shuo ",
		"Zhen ",
		"Shuo ",
		"Du ",
		"Yasashi ",
		"Chang ",
		"Shui ",
		"Jie ",
		"Ke ",
		"Qu ",
		"Cong ",
		"Xiao ",
		"Sui ",
		"Wang ",
		"Xuan ",
		"Fei ",
		"Chi ",
		"Ta ",
		"Yi ",
		"Na ",
		"Yin ",
		"Diao ",
		"Pi ",
		"Chuo ",
		"Chan ",
		"Chen ",
		"Zhun ",
		"Ji ",
		"Qi ",
		"Tan ",
		"Zhui ",
		"Wei ",
		"Ju ",
		"Qing ",
		"Jian ",
		"Zheng ",
		"Ze ",
		"Zou ",
		"Qian ",
		"Zhuo ",
		"Liang ",
		"Jian ",
		"Zhu ",
		"Hao ",
		"Lun ",
		"Shen ",
		"Biao ",
		"Huai ",
		"Pian ",
		"Yu ",
		"Die ",
		"Xu ",
		"Pian ",
		"Shi ",
		"Xuan ",
		"Shi ",
		"Hun ",
		"Hua ",
		"E ",
		"Zhong ",
		"Di ",
		"Xie ",
		"Fu ",
		"Pu ",
		"Ting ",
		"Jian ",
		"Qi ",
		"Yu ",
		"Zi ",
		"Chuan ",
		"Xi ",
		"Hui ",
		"Yin ",
		"An ",
		"Xian ",
		"Nan ",
		"Chen ",
		"Feng ",
		"Zhu ",
		"Yang ",
		"Yan ",
		"Heng ",
		"Xuan ",
		"Ge ",
		"Nuo ",
		"Qi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x8b.js
var require_x8b = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Mou ",
		"Ye ",
		"Wei ",
		"[?] ",
		"Teng ",
		"Zou ",
		"Shan ",
		"Jian ",
		"Bo ",
		"Ku ",
		"Huang ",
		"Huo ",
		"Ge ",
		"Ying ",
		"Mi ",
		"Xiao ",
		"Mi ",
		"Xi ",
		"Qiang ",
		"Chen ",
		"Nue ",
		"Ti ",
		"Su ",
		"Bang ",
		"Chi ",
		"Qian ",
		"Shi ",
		"Jiang ",
		"Yuan ",
		"Xie ",
		"Xue ",
		"Tao ",
		"Yao ",
		"Yao ",
		"[?] ",
		"Yu ",
		"Biao ",
		"Cong ",
		"Qing ",
		"Li ",
		"Mo ",
		"Mo ",
		"Shang ",
		"Zhe ",
		"Miu ",
		"Jian ",
		"Ze ",
		"Jie ",
		"Lian ",
		"Lou ",
		"Can ",
		"Ou ",
		"Guan ",
		"Xi ",
		"Zhuo ",
		"Ao ",
		"Ao ",
		"Jin ",
		"Zhe ",
		"Yi ",
		"Hu ",
		"Jiang ",
		"Man ",
		"Chao ",
		"Han ",
		"Hua ",
		"Chan ",
		"Xu ",
		"Zeng ",
		"Se ",
		"Xi ",
		"She ",
		"Dui ",
		"Zheng ",
		"Nao ",
		"Lan ",
		"E ",
		"Ying ",
		"Jue ",
		"Ji ",
		"Zun ",
		"Jiao ",
		"Bo ",
		"Hui ",
		"Zhuan ",
		"Mu ",
		"Zen ",
		"Zha ",
		"Shi ",
		"Qiao ",
		"Tan ",
		"Zen ",
		"Pu ",
		"Sheng ",
		"Xuan ",
		"Zao ",
		"Tan ",
		"Dang ",
		"Sui ",
		"Qian ",
		"Ji ",
		"Jiao ",
		"Jing ",
		"Lian ",
		"Nou ",
		"Yi ",
		"Ai ",
		"Zhan ",
		"Pi ",
		"Hui ",
		"Hua ",
		"Yi ",
		"Yi ",
		"Shan ",
		"Rang ",
		"Nou ",
		"Qian ",
		"Zhui ",
		"Ta ",
		"Hu ",
		"Zhou ",
		"Hao ",
		"Ye ",
		"Ying ",
		"Jian ",
		"Yu ",
		"Jian ",
		"Hui ",
		"Du ",
		"Zhe ",
		"Xuan ",
		"Zan ",
		"Lei ",
		"Shen ",
		"Wei ",
		"Chan ",
		"Li ",
		"Yi ",
		"Bian ",
		"Zhe ",
		"Yan ",
		"E ",
		"Chou ",
		"Wei ",
		"Chou ",
		"Yao ",
		"Chan ",
		"Rang ",
		"Yin ",
		"Lan ",
		"Chen ",
		"Huo ",
		"Zhe ",
		"Huan ",
		"Zan ",
		"Yi ",
		"Dang ",
		"Zhan ",
		"Yan ",
		"Du ",
		"Yan ",
		"Ji ",
		"Ding ",
		"Fu ",
		"Ren ",
		"Ji ",
		"Jie ",
		"Hong ",
		"Tao ",
		"Rang ",
		"Shan ",
		"Qi ",
		"Tuo ",
		"Xun ",
		"Yi ",
		"Xun ",
		"Ji ",
		"Ren ",
		"Jiang ",
		"Hui ",
		"Ou ",
		"Ju ",
		"Ya ",
		"Ne ",
		"Xu ",
		"E ",
		"Lun ",
		"Xiong ",
		"Song ",
		"Feng ",
		"She ",
		"Fang ",
		"Jue ",
		"Zheng ",
		"Gu ",
		"He ",
		"Ping ",
		"Zu ",
		"Shi ",
		"Xiong ",
		"Zha ",
		"Su ",
		"Zhen ",
		"Di ",
		"Zou ",
		"Ci ",
		"Qu ",
		"Zhao ",
		"Bi ",
		"Yi ",
		"Yi ",
		"Kuang ",
		"Lei ",
		"Shi ",
		"Gua ",
		"Shi ",
		"Jie ",
		"Hui ",
		"Cheng ",
		"Zhu ",
		"Shen ",
		"Hua ",
		"Dan ",
		"Gou ",
		"Quan ",
		"Gui ",
		"Xun ",
		"Yi ",
		"Zheng ",
		"Gai ",
		"Xiang ",
		"Cha ",
		"Hun ",
		"Xu ",
		"Zhou ",
		"Jie ",
		"Wu ",
		"Yu ",
		"Qiao ",
		"Wu ",
		"Gao ",
		"You ",
		"Hui ",
		"Kuang ",
		"Shuo ",
		"Song ",
		"Ai ",
		"Qing ",
		"Zhu ",
		"Zou ",
		"Nuo ",
		"Du ",
		"Zhuo ",
		"Fei ",
		"Ke ",
		"Wei "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x8c.js
var require_x8c = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Yu ",
		"Shui ",
		"Shen ",
		"Diao ",
		"Chan ",
		"Liang ",
		"Zhun ",
		"Sui ",
		"Tan ",
		"Shen ",
		"Yi ",
		"Mou ",
		"Chen ",
		"Die ",
		"Huang ",
		"Jian ",
		"Xie ",
		"Nue ",
		"Ye ",
		"Wei ",
		"E ",
		"Yu ",
		"Xuan ",
		"Chan ",
		"Zi ",
		"An ",
		"Yan ",
		"Di ",
		"Mi ",
		"Pian ",
		"Xu ",
		"Mo ",
		"Dang ",
		"Su ",
		"Xie ",
		"Yao ",
		"Bang ",
		"Shi ",
		"Qian ",
		"Mi ",
		"Jin ",
		"Man ",
		"Zhe ",
		"Jian ",
		"Miu ",
		"Tan ",
		"Zen ",
		"Qiao ",
		"Lan ",
		"Pu ",
		"Jue ",
		"Yan ",
		"Qian ",
		"Zhan ",
		"Chen ",
		"Gu ",
		"Qian ",
		"Hong ",
		"Xia ",
		"Jue ",
		"Hong ",
		"Han ",
		"Hong ",
		"Xi ",
		"Xi ",
		"Huo ",
		"Liao ",
		"Han ",
		"Du ",
		"Long ",
		"Dou ",
		"Jiang ",
		"Qi ",
		"Shi ",
		"Li ",
		"Deng ",
		"Wan ",
		"Bi ",
		"Shu ",
		"Xian ",
		"Feng ",
		"Zhi ",
		"Zhi ",
		"Yan ",
		"Yan ",
		"Shi ",
		"Chu ",
		"Hui ",
		"Tun ",
		"Yi ",
		"Tun ",
		"Yi ",
		"Jian ",
		"Ba ",
		"Hou ",
		"E ",
		"Cu ",
		"Xiang ",
		"Huan ",
		"Jian ",
		"Ken ",
		"Gai ",
		"Qu ",
		"Fu ",
		"Xi ",
		"Bin ",
		"Hao ",
		"Yu ",
		"Zhu ",
		"Jia ",
		"[?] ",
		"Xi ",
		"Bo ",
		"Wen ",
		"Huan ",
		"Bin ",
		"Di ",
		"Zong ",
		"Fen ",
		"Yi ",
		"Zhi ",
		"Bao ",
		"Chai ",
		"Han ",
		"Pi ",
		"Na ",
		"Pi ",
		"Gou ",
		"Na ",
		"You ",
		"Diao ",
		"Mo ",
		"Si ",
		"Xiu ",
		"Huan ",
		"Kun ",
		"He ",
		"He ",
		"Mo ",
		"Han ",
		"Mao ",
		"Li ",
		"Ni ",
		"Bi ",
		"Yu ",
		"Jia ",
		"Tuan ",
		"Mao ",
		"Pi ",
		"Xi ",
		"E ",
		"Ju ",
		"Mo ",
		"Chu ",
		"Tan ",
		"Huan ",
		"Jue ",
		"Bei ",
		"Zhen ",
		"Yuan ",
		"Fu ",
		"Cai ",
		"Gong ",
		"Te ",
		"Yi ",
		"Hang ",
		"Wan ",
		"Pin ",
		"Huo ",
		"Fan ",
		"Tan ",
		"Guan ",
		"Ze ",
		"Zhi ",
		"Er ",
		"Zhu ",
		"Shi ",
		"Bi ",
		"Zi ",
		"Er ",
		"Gui ",
		"Pian ",
		"Bian ",
		"Mai ",
		"Dai ",
		"Sheng ",
		"Kuang ",
		"Fei ",
		"Tie ",
		"Yi ",
		"Chi ",
		"Mao ",
		"He ",
		"Bi ",
		"Lu ",
		"Ren ",
		"Hui ",
		"Gai ",
		"Pian ",
		"Zi ",
		"Jia ",
		"Xu ",
		"Zei ",
		"Jiao ",
		"Gai ",
		"Zang ",
		"Jian ",
		"Ying ",
		"Xun ",
		"Zhen ",
		"She ",
		"Bin ",
		"Bin ",
		"Qiu ",
		"She ",
		"Chuan ",
		"Zang ",
		"Zhou ",
		"Lai ",
		"Zan ",
		"Si ",
		"Chen ",
		"Shang ",
		"Tian ",
		"Pei ",
		"Geng ",
		"Xian ",
		"Mai ",
		"Jian ",
		"Sui ",
		"Fu ",
		"Tan ",
		"Cong ",
		"Cong ",
		"Zhi ",
		"Ji ",
		"Zhang ",
		"Du ",
		"Jin ",
		"Xiong ",
		"Shun ",
		"Yun ",
		"Bao ",
		"Zai ",
		"Lai ",
		"Feng ",
		"Cang ",
		"Ji ",
		"Sheng ",
		"Ai ",
		"Zhuan ",
		"Fu ",
		"Gou ",
		"Sai ",
		"Ze ",
		"Liao "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x8d.js
var require_x8d = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Wei ",
		"Bai ",
		"Chen ",
		"Zhuan ",
		"Zhi ",
		"Zhui ",
		"Biao ",
		"Yun ",
		"Zeng ",
		"Tan ",
		"Zan ",
		"Yan ",
		"[?] ",
		"Shan ",
		"Wan ",
		"Ying ",
		"Jin ",
		"Gan ",
		"Xian ",
		"Zang ",
		"Bi ",
		"Du ",
		"Shu ",
		"Yan ",
		"[?] ",
		"Xuan ",
		"Long ",
		"Gan ",
		"Zang ",
		"Bei ",
		"Zhen ",
		"Fu ",
		"Yuan ",
		"Gong ",
		"Cai ",
		"Ze ",
		"Xian ",
		"Bai ",
		"Zhang ",
		"Huo ",
		"Zhi ",
		"Fan ",
		"Tan ",
		"Pin ",
		"Bian ",
		"Gou ",
		"Zhu ",
		"Guan ",
		"Er ",
		"Jian ",
		"Bi ",
		"Shi ",
		"Tie ",
		"Gui ",
		"Kuang ",
		"Dai ",
		"Mao ",
		"Fei ",
		"He ",
		"Yi ",
		"Zei ",
		"Zhi ",
		"Jia ",
		"Hui ",
		"Zi ",
		"Ren ",
		"Lu ",
		"Zang ",
		"Zi ",
		"Gai ",
		"Jin ",
		"Qiu ",
		"Zhen ",
		"Lai ",
		"She ",
		"Fu ",
		"Du ",
		"Ji ",
		"Shu ",
		"Shang ",
		"Si ",
		"Bi ",
		"Zhou ",
		"Geng ",
		"Pei ",
		"Tan ",
		"Lai ",
		"Feng ",
		"Zhui ",
		"Fu ",
		"Zhuan ",
		"Sai ",
		"Ze ",
		"Yan ",
		"Zan ",
		"Yun ",
		"Zeng ",
		"Shan ",
		"Ying ",
		"Gan ",
		"Chi ",
		"Xi ",
		"She ",
		"Nan ",
		"Xiong ",
		"Xi ",
		"Cheng ",
		"He ",
		"Cheng ",
		"Zhe ",
		"Xia ",
		"Tang ",
		"Zou ",
		"Zou ",
		"Li ",
		"Jiu ",
		"Fu ",
		"Zhao ",
		"Gan ",
		"Qi ",
		"Shan ",
		"Qiong ",
		"Qin ",
		"Xian ",
		"Ci ",
		"Jue ",
		"Qin ",
		"Chi ",
		"Ci ",
		"Chen ",
		"Chen ",
		"Die ",
		"Ju ",
		"Chao ",
		"Di ",
		"Se ",
		"Zhan ",
		"Zhu ",
		"Yue ",
		"Qu ",
		"Jie ",
		"Chi ",
		"Chu ",
		"Gua ",
		"Xue ",
		"Ci ",
		"Tiao ",
		"Duo ",
		"Lie ",
		"Gan ",
		"Suo ",
		"Cu ",
		"Xi ",
		"Zhao ",
		"Su ",
		"Yin ",
		"Ju ",
		"Jian ",
		"Que ",
		"Tang ",
		"Chuo ",
		"Cui ",
		"Lu ",
		"Qu ",
		"Dang ",
		"Qiu ",
		"Zi ",
		"Ti ",
		"Qu ",
		"Chi ",
		"Huang ",
		"Qiao ",
		"Qiao ",
		"Yao ",
		"Zao ",
		"Ti ",
		"[?] ",
		"Zan ",
		"Zan ",
		"Zu ",
		"Pa ",
		"Bao ",
		"Ku ",
		"Ke ",
		"Dun ",
		"Jue ",
		"Fu ",
		"Chen ",
		"Jian ",
		"Fang ",
		"Zhi ",
		"Sa ",
		"Yue ",
		"Pa ",
		"Qi ",
		"Yue ",
		"Qiang ",
		"Tuo ",
		"Tai ",
		"Yi ",
		"Nian ",
		"Ling ",
		"Mei ",
		"Ba ",
		"Die ",
		"Ku ",
		"Tuo ",
		"Jia ",
		"Ci ",
		"Pao ",
		"Qia ",
		"Zhu ",
		"Ju ",
		"Die ",
		"Zhi ",
		"Fu ",
		"Pan ",
		"Ju ",
		"Shan ",
		"Bo ",
		"Ni ",
		"Ju ",
		"Li ",
		"Gen ",
		"Yi ",
		"Ji ",
		"Dai ",
		"Xian ",
		"Jiao ",
		"Duo ",
		"Zhu ",
		"Zhuan ",
		"Kua ",
		"Zhuai ",
		"Gui ",
		"Qiong ",
		"Kui ",
		"Xiang ",
		"Chi ",
		"Lu ",
		"Beng ",
		"Zhi ",
		"Jia ",
		"Tiao ",
		"Cai ",
		"Jian ",
		"Ta ",
		"Qiao ",
		"Bi ",
		"Xian ",
		"Duo ",
		"Ji ",
		"Ju ",
		"Ji ",
		"Shu ",
		"Tu "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x8e.js
var require_x8e = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Chu ",
		"Jing ",
		"Nie ",
		"Xiao ",
		"Bo ",
		"Chi ",
		"Qun ",
		"Mou ",
		"Shu ",
		"Lang ",
		"Yong ",
		"Jiao ",
		"Chou ",
		"Qiao ",
		"[?] ",
		"Ta ",
		"Jian ",
		"Qi ",
		"Wo ",
		"Wei ",
		"Zhuo ",
		"Jie ",
		"Ji ",
		"Nie ",
		"Ju ",
		"Ju ",
		"Lun ",
		"Lu ",
		"Leng ",
		"Huai ",
		"Ju ",
		"Chi ",
		"Wan ",
		"Quan ",
		"Ti ",
		"Bo ",
		"Zu ",
		"Qie ",
		"Ji ",
		"Cu ",
		"Zong ",
		"Cai ",
		"Zong ",
		"Peng ",
		"Zhi ",
		"Zheng ",
		"Dian ",
		"Zhi ",
		"Yu ",
		"Duo ",
		"Dun ",
		"Chun ",
		"Yong ",
		"Zhong ",
		"Di ",
		"Zhe ",
		"Chen ",
		"Chuai ",
		"Jian ",
		"Gua ",
		"Tang ",
		"Ju ",
		"Fu ",
		"Zu ",
		"Die ",
		"Pian ",
		"Rou ",
		"Nuo ",
		"Ti ",
		"Cha ",
		"Tui ",
		"Jian ",
		"Dao ",
		"Cuo ",
		"Xi ",
		"Ta ",
		"Qiang ",
		"Zhan ",
		"Dian ",
		"Ti ",
		"Ji ",
		"Nie ",
		"Man ",
		"Liu ",
		"Zhan ",
		"Bi ",
		"Chong ",
		"Lu ",
		"Liao ",
		"Cu ",
		"Tang ",
		"Dai ",
		"Suo ",
		"Xi ",
		"Kui ",
		"Ji ",
		"Zhi ",
		"Qiang ",
		"Di ",
		"Man ",
		"Zong ",
		"Lian ",
		"Beng ",
		"Zao ",
		"Nian ",
		"Bie ",
		"Tui ",
		"Ju ",
		"Deng ",
		"Ceng ",
		"Xian ",
		"Fan ",
		"Chu ",
		"Zhong ",
		"Dun ",
		"Bo ",
		"Cu ",
		"Zu ",
		"Jue ",
		"Jue ",
		"Lin ",
		"Ta ",
		"Qiao ",
		"Qiao ",
		"Pu ",
		"Liao ",
		"Dun ",
		"Cuan ",
		"Kuang ",
		"Zao ",
		"Ta ",
		"Bi ",
		"Bi ",
		"Zhu ",
		"Ju ",
		"Chu ",
		"Qiao ",
		"Dun ",
		"Chou ",
		"Ji ",
		"Wu ",
		"Yue ",
		"Nian ",
		"Lin ",
		"Lie ",
		"Zhi ",
		"Li ",
		"Zhi ",
		"Chan ",
		"Chu ",
		"Duan ",
		"Wei ",
		"Long ",
		"Lin ",
		"Xian ",
		"Wei ",
		"Zuan ",
		"Lan ",
		"Xie ",
		"Rang ",
		"Xie ",
		"Nie ",
		"Ta ",
		"Qu ",
		"Jie ",
		"Cuan ",
		"Zuan ",
		"Xi ",
		"Kui ",
		"Jue ",
		"Lin ",
		"Shen ",
		"Gong ",
		"Dan ",
		"Segare ",
		"Qu ",
		"Ti ",
		"Duo ",
		"Duo ",
		"Gong ",
		"Lang ",
		"Nerau ",
		"Luo ",
		"Ai ",
		"Ji ",
		"Ju ",
		"Tang ",
		"Utsuke ",
		"[?] ",
		"Yan ",
		"Shitsuke ",
		"Kang ",
		"Qu ",
		"Lou ",
		"Lao ",
		"Tuo ",
		"Zhi ",
		"Yagate ",
		"Ti ",
		"Dao ",
		"Yagate ",
		"Yu ",
		"Che ",
		"Ya ",
		"Gui ",
		"Jun ",
		"Wei ",
		"Yue ",
		"Xin ",
		"Di ",
		"Xuan ",
		"Fan ",
		"Ren ",
		"Shan ",
		"Qiang ",
		"Shu ",
		"Tun ",
		"Chen ",
		"Dai ",
		"E ",
		"Na ",
		"Qi ",
		"Mao ",
		"Ruan ",
		"Ren ",
		"Fan ",
		"Zhuan ",
		"Hong ",
		"Hu ",
		"Qu ",
		"Huang ",
		"Di ",
		"Ling ",
		"Dai ",
		"Ao ",
		"Zhen ",
		"Fan ",
		"Kuang ",
		"Ang ",
		"Peng ",
		"Bei ",
		"Gu ",
		"Ku ",
		"Pao ",
		"Zhu ",
		"Rong ",
		"E ",
		"Ba ",
		"Zhou ",
		"Zhi ",
		"Yao ",
		"Ke ",
		"Yi ",
		"Qing ",
		"Shi ",
		"Ping "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x8f.js
var require_x8f = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Er ",
		"Qiong ",
		"Ju ",
		"Jiao ",
		"Guang ",
		"Lu ",
		"Kai ",
		"Quan ",
		"Zhou ",
		"Zai ",
		"Zhi ",
		"She ",
		"Liang ",
		"Yu ",
		"Shao ",
		"You ",
		"Huan ",
		"Yun ",
		"Zhe ",
		"Wan ",
		"Fu ",
		"Qing ",
		"Zhou ",
		"Ni ",
		"Ling ",
		"Zhe ",
		"Zhan ",
		"Liang ",
		"Zi ",
		"Hui ",
		"Wang ",
		"Chuo ",
		"Guo ",
		"Kan ",
		"Yi ",
		"Peng ",
		"Qian ",
		"Gun ",
		"Nian ",
		"Pian ",
		"Guan ",
		"Bei ",
		"Lun ",
		"Pai ",
		"Liang ",
		"Ruan ",
		"Rou ",
		"Ji ",
		"Yang ",
		"Xian ",
		"Chuan ",
		"Cou ",
		"Qun ",
		"Ge ",
		"You ",
		"Hong ",
		"Shu ",
		"Fu ",
		"Zi ",
		"Fu ",
		"Wen ",
		"Ben ",
		"Zhan ",
		"Yu ",
		"Wen ",
		"Tao ",
		"Gu ",
		"Zhen ",
		"Xia ",
		"Yuan ",
		"Lu ",
		"Jiu ",
		"Chao ",
		"Zhuan ",
		"Wei ",
		"Hun ",
		"Sori ",
		"Che ",
		"Jiao ",
		"Zhan ",
		"Pu ",
		"Lao ",
		"Fen ",
		"Fan ",
		"Lin ",
		"Ge ",
		"Se ",
		"Kan ",
		"Huan ",
		"Yi ",
		"Ji ",
		"Dui ",
		"Er ",
		"Yu ",
		"Xian ",
		"Hong ",
		"Lei ",
		"Pei ",
		"Li ",
		"Li ",
		"Lu ",
		"Lin ",
		"Che ",
		"Ya ",
		"Gui ",
		"Xuan ",
		"Di ",
		"Ren ",
		"Zhuan ",
		"E ",
		"Lun ",
		"Ruan ",
		"Hong ",
		"Ku ",
		"Ke ",
		"Lu ",
		"Zhou ",
		"Zhi ",
		"Yi ",
		"Hu ",
		"Zhen ",
		"Li ",
		"Yao ",
		"Qing ",
		"Shi ",
		"Zai ",
		"Zhi ",
		"Jiao ",
		"Zhou ",
		"Quan ",
		"Lu ",
		"Jiao ",
		"Zhe ",
		"Fu ",
		"Liang ",
		"Nian ",
		"Bei ",
		"Hui ",
		"Gun ",
		"Wang ",
		"Liang ",
		"Chuo ",
		"Zi ",
		"Cou ",
		"Fu ",
		"Ji ",
		"Wen ",
		"Shu ",
		"Pei ",
		"Yuan ",
		"Xia ",
		"Zhan ",
		"Lu ",
		"Che ",
		"Lin ",
		"Xin ",
		"Gu ",
		"Ci ",
		"Ci ",
		"Pi ",
		"Zui ",
		"Bian ",
		"La ",
		"La ",
		"Ci ",
		"Xue ",
		"Ban ",
		"Bian ",
		"Bian ",
		"Bian ",
		"[?] ",
		"Bian ",
		"Ban ",
		"Ci ",
		"Bian ",
		"Bian ",
		"Chen ",
		"Ru ",
		"Nong ",
		"Nong ",
		"Zhen ",
		"Chuo ",
		"Chuo ",
		"Suberu ",
		"Reng ",
		"Bian ",
		"Bian ",
		"Sip ",
		"Ip ",
		"Liao ",
		"Da ",
		"Chan ",
		"Gan ",
		"Qian ",
		"Yu ",
		"Yu ",
		"Qi ",
		"Xun ",
		"Yi ",
		"Guo ",
		"Mai ",
		"Qi ",
		"Za ",
		"Wang ",
		"Jia ",
		"Zhun ",
		"Ying ",
		"Ti ",
		"Yun ",
		"Jin ",
		"Hang ",
		"Ya ",
		"Fan ",
		"Wu ",
		"Da ",
		"E ",
		"Huan ",
		"Zhe ",
		"Totemo ",
		"Jin ",
		"Yuan ",
		"Wei ",
		"Lian ",
		"Chi ",
		"Che ",
		"Ni ",
		"Tiao ",
		"Zhi ",
		"Yi ",
		"Jiong ",
		"Jia ",
		"Chen ",
		"Dai ",
		"Er ",
		"Di ",
		"Po ",
		"Wang ",
		"Die ",
		"Ze ",
		"Tao ",
		"Shu ",
		"Tuo ",
		"Kep ",
		"Jing ",
		"Hui ",
		"Tong ",
		"You ",
		"Mi ",
		"Beng ",
		"Ji ",
		"Nai ",
		"Yi ",
		"Jie ",
		"Zhui ",
		"Lie ",
		"Xun "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x90.js
var require_x90 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Tui ",
		"Song ",
		"Gua ",
		"Tao ",
		"Pang ",
		"Hou ",
		"Ni ",
		"Dun ",
		"Jiong ",
		"Xuan ",
		"Xun ",
		"Bu ",
		"You ",
		"Xiao ",
		"Qiu ",
		"Tou ",
		"Zhu ",
		"Qiu ",
		"Di ",
		"Di ",
		"Tu ",
		"Jing ",
		"Ti ",
		"Dou ",
		"Yi ",
		"Zhe ",
		"Tong ",
		"Guang ",
		"Wu ",
		"Shi ",
		"Cheng ",
		"Su ",
		"Zao ",
		"Qun ",
		"Feng ",
		"Lian ",
		"Suo ",
		"Hui ",
		"Li ",
		"Sako ",
		"Lai ",
		"Ben ",
		"Cuo ",
		"Jue ",
		"Beng ",
		"Huan ",
		"Dai ",
		"Lu ",
		"You ",
		"Zhou ",
		"Jin ",
		"Yu ",
		"Chuo ",
		"Kui ",
		"Wei ",
		"Ti ",
		"Yi ",
		"Da ",
		"Yuan ",
		"Luo ",
		"Bi ",
		"Nuo ",
		"Yu ",
		"Dang ",
		"Sui ",
		"Dun ",
		"Sui ",
		"Yan ",
		"Chuan ",
		"Chi ",
		"Ti ",
		"Yu ",
		"Shi ",
		"Zhen ",
		"You ",
		"Yun ",
		"E ",
		"Bian ",
		"Guo ",
		"E ",
		"Xia ",
		"Huang ",
		"Qiu ",
		"Dao ",
		"Da ",
		"Wei ",
		"Appare ",
		"Yi ",
		"Gou ",
		"Yao ",
		"Chu ",
		"Liu ",
		"Xun ",
		"Ta ",
		"Di ",
		"Chi ",
		"Yuan ",
		"Su ",
		"Ta ",
		"Qian ",
		"[?] ",
		"Yao ",
		"Guan ",
		"Zhang ",
		"Ao ",
		"Shi ",
		"Ce ",
		"Chi ",
		"Su ",
		"Zao ",
		"Zhe ",
		"Dun ",
		"Di ",
		"Lou ",
		"Chi ",
		"Cuo ",
		"Lin ",
		"Zun ",
		"Rao ",
		"Qian ",
		"Xuan ",
		"Yu ",
		"Yi ",
		"Wu ",
		"Liao ",
		"Ju ",
		"Shi ",
		"Bi ",
		"Yao ",
		"Mai ",
		"Xie ",
		"Sui ",
		"Huan ",
		"Zhan ",
		"Teng ",
		"Er ",
		"Miao ",
		"Bian ",
		"Bian ",
		"La ",
		"Li ",
		"Yuan ",
		"Yao ",
		"Luo ",
		"Li ",
		"Yi ",
		"Ting ",
		"Deng ",
		"Qi ",
		"Yong ",
		"Shan ",
		"Han ",
		"Yu ",
		"Mang ",
		"Ru ",
		"Qiong ",
		"[?] ",
		"Kuang ",
		"Fu ",
		"Kang ",
		"Bin ",
		"Fang ",
		"Xing ",
		"Na ",
		"Xin ",
		"Shen ",
		"Bang ",
		"Yuan ",
		"Cun ",
		"Huo ",
		"Xie ",
		"Bang ",
		"Wu ",
		"Ju ",
		"You ",
		"Han ",
		"Tai ",
		"Qiu ",
		"Bi ",
		"Pei ",
		"Bing ",
		"Shao ",
		"Bei ",
		"Wa ",
		"Di ",
		"Zou ",
		"Ye ",
		"Lin ",
		"Kuang ",
		"Gui ",
		"Zhu ",
		"Shi ",
		"Ku ",
		"Yu ",
		"Gai ",
		"Ge ",
		"Xi ",
		"Zhi ",
		"Ji ",
		"Xun ",
		"Hou ",
		"Xing ",
		"Jiao ",
		"Xi ",
		"Gui ",
		"Nuo ",
		"Lang ",
		"Jia ",
		"Kuai ",
		"Zheng ",
		"Otoko ",
		"Yun ",
		"Yan ",
		"Cheng ",
		"Dou ",
		"Chi ",
		"Lu ",
		"Fu ",
		"Wu ",
		"Fu ",
		"Gao ",
		"Hao ",
		"Lang ",
		"Jia ",
		"Geng ",
		"Jun ",
		"Ying ",
		"Bo ",
		"Xi ",
		"Bei ",
		"Li ",
		"Yun ",
		"Bu ",
		"Xiao ",
		"Qi ",
		"Pi ",
		"Qing ",
		"Guo ",
		"Zhou ",
		"Tan ",
		"Zou ",
		"Ping ",
		"Lai ",
		"Ni ",
		"Chen ",
		"You ",
		"Bu ",
		"Xiang ",
		"Dan ",
		"Ju ",
		"Yong ",
		"Qiao ",
		"Yi ",
		"Du ",
		"Yan ",
		"Mei "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x91.js
var require_x91 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ruo ",
		"Bei ",
		"E ",
		"Yu ",
		"Juan ",
		"Yu ",
		"Yun ",
		"Hou ",
		"Kui ",
		"Xiang ",
		"Xiang ",
		"Sou ",
		"Tang ",
		"Ming ",
		"Xi ",
		"Ru ",
		"Chu ",
		"Zi ",
		"Zou ",
		"Ju ",
		"Wu ",
		"Xiang ",
		"Yun ",
		"Hao ",
		"Yong ",
		"Bi ",
		"Mo ",
		"Chao ",
		"Fu ",
		"Liao ",
		"Yin ",
		"Zhuan ",
		"Hu ",
		"Qiao ",
		"Yan ",
		"Zhang ",
		"Fan ",
		"Qiao ",
		"Xu ",
		"Deng ",
		"Bi ",
		"Xin ",
		"Bi ",
		"Ceng ",
		"Wei ",
		"Zheng ",
		"Mao ",
		"Shan ",
		"Lin ",
		"Po ",
		"Dan ",
		"Meng ",
		"Ye ",
		"Cao ",
		"Kuai ",
		"Feng ",
		"Meng ",
		"Zou ",
		"Kuang ",
		"Lian ",
		"Zan ",
		"Chan ",
		"You ",
		"Qi ",
		"Yan ",
		"Chan ",
		"Zan ",
		"Ling ",
		"Huan ",
		"Xi ",
		"Feng ",
		"Zan ",
		"Li ",
		"You ",
		"Ding ",
		"Qiu ",
		"Zhuo ",
		"Pei ",
		"Zhou ",
		"Yi ",
		"Hang ",
		"Yu ",
		"Jiu ",
		"Yan ",
		"Zui ",
		"Mao ",
		"Dan ",
		"Xu ",
		"Tou ",
		"Zhen ",
		"Fen ",
		"Sakenomoto ",
		"[?] ",
		"Yun ",
		"Tai ",
		"Tian ",
		"Qia ",
		"Tuo ",
		"Zuo ",
		"Han ",
		"Gu ",
		"Su ",
		"Po ",
		"Chou ",
		"Zai ",
		"Ming ",
		"Luo ",
		"Chuo ",
		"Chou ",
		"You ",
		"Tong ",
		"Zhi ",
		"Xian ",
		"Jiang ",
		"Cheng ",
		"Yin ",
		"Tu ",
		"Xiao ",
		"Mei ",
		"Ku ",
		"Suan ",
		"Lei ",
		"Pu ",
		"Zui ",
		"Hai ",
		"Yan ",
		"Xi ",
		"Niang ",
		"Wei ",
		"Lu ",
		"Lan ",
		"Yan ",
		"Tao ",
		"Pei ",
		"Zhan ",
		"Chun ",
		"Tan ",
		"Zui ",
		"Chuo ",
		"Cu ",
		"Kun ",
		"Ti ",
		"Mian ",
		"Du ",
		"Hu ",
		"Xu ",
		"Xing ",
		"Tan ",
		"Jiu ",
		"Chun ",
		"Yun ",
		"Po ",
		"Ke ",
		"Sou ",
		"Mi ",
		"Quan ",
		"Chou ",
		"Cuo ",
		"Yun ",
		"Yong ",
		"Ang ",
		"Zha ",
		"Hai ",
		"Tang ",
		"Jiang ",
		"Piao ",
		"Shan ",
		"Yu ",
		"Li ",
		"Zao ",
		"Lao ",
		"Yi ",
		"Jiang ",
		"Pu ",
		"Jiao ",
		"Xi ",
		"Tan ",
		"Po ",
		"Nong ",
		"Yi ",
		"Li ",
		"Ju ",
		"Jiao ",
		"Yi ",
		"Niang ",
		"Ru ",
		"Xun ",
		"Chou ",
		"Yan ",
		"Ling ",
		"Mi ",
		"Mi ",
		"Niang ",
		"Xin ",
		"Jiao ",
		"Xi ",
		"Mi ",
		"Yan ",
		"Bian ",
		"Cai ",
		"Shi ",
		"You ",
		"Shi ",
		"Shi ",
		"Li ",
		"Zhong ",
		"Ye ",
		"Liang ",
		"Li ",
		"Jin ",
		"Jin ",
		"Qiu ",
		"Yi ",
		"Diao ",
		"Dao ",
		"Zhao ",
		"Ding ",
		"Po ",
		"Qiu ",
		"He ",
		"Fu ",
		"Zhen ",
		"Zhi ",
		"Ba ",
		"Luan ",
		"Fu ",
		"Nai ",
		"Diao ",
		"Shan ",
		"Qiao ",
		"Kou ",
		"Chuan ",
		"Zi ",
		"Fan ",
		"Yu ",
		"Hua ",
		"Han ",
		"Gong ",
		"Qi ",
		"Mang ",
		"Ri ",
		"Di ",
		"Si ",
		"Xi ",
		"Yi ",
		"Chai ",
		"Shi ",
		"Tu ",
		"Xi ",
		"Nu ",
		"Qian ",
		"Ishiyumi ",
		"Jian ",
		"Pi ",
		"Ye ",
		"Yin "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x92.js
var require_x92 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ba ",
		"Fang ",
		"Chen ",
		"Xing ",
		"Tou ",
		"Yue ",
		"Yan ",
		"Fu ",
		"Pi ",
		"Na ",
		"Xin ",
		"E ",
		"Jue ",
		"Dun ",
		"Gou ",
		"Yin ",
		"Qian ",
		"Ban ",
		"Ji ",
		"Ren ",
		"Chao ",
		"Niu ",
		"Fen ",
		"Yun ",
		"Ji ",
		"Qin ",
		"Pi ",
		"Guo ",
		"Hong ",
		"Yin ",
		"Jun ",
		"Shi ",
		"Yi ",
		"Zhong ",
		"Nie ",
		"Gai ",
		"Ri ",
		"Huo ",
		"Tai ",
		"Kang ",
		"Habaki ",
		"Irori ",
		"Ngaak ",
		"[?] ",
		"Duo ",
		"Zi ",
		"Ni ",
		"Tu ",
		"Shi ",
		"Min ",
		"Gu ",
		"E ",
		"Ling ",
		"Bing ",
		"Yi ",
		"Gu ",
		"Ba ",
		"Pi ",
		"Yu ",
		"Si ",
		"Zuo ",
		"Bu ",
		"You ",
		"Dian ",
		"Jia ",
		"Zhen ",
		"Shi ",
		"Shi ",
		"Tie ",
		"Ju ",
		"Zhan ",
		"Shi ",
		"She ",
		"Xuan ",
		"Zhao ",
		"Bao ",
		"He ",
		"Bi ",
		"Sheng ",
		"Chu ",
		"Shi ",
		"Bo ",
		"Zhu ",
		"Chi ",
		"Za ",
		"Po ",
		"Tong ",
		"Qian ",
		"Fu ",
		"Zhai ",
		"Liu ",
		"Qian ",
		"Fu ",
		"Li ",
		"Yue ",
		"Pi ",
		"Yang ",
		"Ban ",
		"Bo ",
		"Jie ",
		"Gou ",
		"Shu ",
		"Zheng ",
		"Mu ",
		"Ni ",
		"Nie ",
		"Di ",
		"Jia ",
		"Mu ",
		"Dan ",
		"Shen ",
		"Yi ",
		"Si ",
		"Kuang ",
		"Ka ",
		"Bei ",
		"Jian ",
		"Tong ",
		"Xing ",
		"Hong ",
		"Jiao ",
		"Chi ",
		"Er ",
		"Ge ",
		"Bing ",
		"Shi ",
		"Mou ",
		"Jia ",
		"Yin ",
		"Jun ",
		"Zhou ",
		"Chong ",
		"Shang ",
		"Tong ",
		"Mo ",
		"Lei ",
		"Ji ",
		"Yu ",
		"Xu ",
		"Ren ",
		"Zun ",
		"Zhi ",
		"Qiong ",
		"Shan ",
		"Chi ",
		"Xian ",
		"Xing ",
		"Quan ",
		"Pi ",
		"Tie ",
		"Zhu ",
		"Hou ",
		"Ming ",
		"Kua ",
		"Yao ",
		"Xian ",
		"Xian ",
		"Xiu ",
		"Jun ",
		"Cha ",
		"Lao ",
		"Ji ",
		"Pi ",
		"Ru ",
		"Mi ",
		"Yi ",
		"Yin ",
		"Guang ",
		"An ",
		"Diou ",
		"You ",
		"Se ",
		"Kao ",
		"Qian ",
		"Luan ",
		"Kasugai ",
		"Ai ",
		"Diao ",
		"Han ",
		"Rui ",
		"Shi ",
		"Keng ",
		"Qiu ",
		"Xiao ",
		"Zhe ",
		"Xiu ",
		"Zang ",
		"Ti ",
		"Cuo ",
		"Gua ",
		"Gong ",
		"Zhong ",
		"Dou ",
		"Lu ",
		"Mei ",
		"Lang ",
		"Wan ",
		"Xin ",
		"Yun ",
		"Bei ",
		"Wu ",
		"Su ",
		"Yu ",
		"Chan ",
		"Ting ",
		"Bo ",
		"Han ",
		"Jia ",
		"Hong ",
		"Cuan ",
		"Feng ",
		"Chan ",
		"Wan ",
		"Zhi ",
		"Si ",
		"Xuan ",
		"Wu ",
		"Wu ",
		"Tiao ",
		"Gong ",
		"Zhuo ",
		"Lue ",
		"Xing ",
		"Qian ",
		"Shen ",
		"Han ",
		"Lue ",
		"Xie ",
		"Chu ",
		"Zheng ",
		"Ju ",
		"Xian ",
		"Tie ",
		"Mang ",
		"Pu ",
		"Li ",
		"Pan ",
		"Rui ",
		"Cheng ",
		"Gao ",
		"Li ",
		"Te ",
		"Pyeng ",
		"Zhu ",
		"[?] ",
		"Tu ",
		"Liu ",
		"Zui ",
		"Ju ",
		"Chang ",
		"Yuan ",
		"Jian ",
		"Gang ",
		"Diao ",
		"Tao ",
		"Chang "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x93.js
var require_x93 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Lun ",
		"Kua ",
		"Ling ",
		"Bei ",
		"Lu ",
		"Li ",
		"Qiang ",
		"Pou ",
		"Juan ",
		"Min ",
		"Zui ",
		"Peng ",
		"An ",
		"Pi ",
		"Xian ",
		"Ya ",
		"Zhui ",
		"Lei ",
		"A ",
		"Kong ",
		"Ta ",
		"Kun ",
		"Du ",
		"Wei ",
		"Chui ",
		"Zi ",
		"Zheng ",
		"Ben ",
		"Nie ",
		"Cong ",
		"Qun ",
		"Tan ",
		"Ding ",
		"Qi ",
		"Qian ",
		"Zhuo ",
		"Qi ",
		"Yu ",
		"Jin ",
		"Guan ",
		"Mao ",
		"Chang ",
		"Tian ",
		"Xi ",
		"Lian ",
		"Tao ",
		"Gu ",
		"Cuo ",
		"Shu ",
		"Zhen ",
		"Lu ",
		"Meng ",
		"Lu ",
		"Hua ",
		"Biao ",
		"Ga ",
		"Lai ",
		"Ken ",
		"Kazari ",
		"Bu ",
		"Nai ",
		"Wan ",
		"Zan ",
		"[?] ",
		"De ",
		"Xian ",
		"[?] ",
		"Huo ",
		"Liang ",
		"[?] ",
		"Men ",
		"Kai ",
		"Ying ",
		"Di ",
		"Lian ",
		"Guo ",
		"Xian ",
		"Du ",
		"Tu ",
		"Wei ",
		"Cong ",
		"Fu ",
		"Rou ",
		"Ji ",
		"E ",
		"Rou ",
		"Chen ",
		"Ti ",
		"Zha ",
		"Hong ",
		"Yang ",
		"Duan ",
		"Xia ",
		"Yu ",
		"Keng ",
		"Xing ",
		"Huang ",
		"Wei ",
		"Fu ",
		"Zhao ",
		"Cha ",
		"Qie ",
		"She ",
		"Hong ",
		"Kui ",
		"Tian ",
		"Mou ",
		"Qiao ",
		"Qiao ",
		"Hou ",
		"Tou ",
		"Cong ",
		"Huan ",
		"Ye ",
		"Min ",
		"Jian ",
		"Duan ",
		"Jian ",
		"Song ",
		"Kui ",
		"Hu ",
		"Xuan ",
		"Duo ",
		"Jie ",
		"Zhen ",
		"Bian ",
		"Zhong ",
		"Zi ",
		"Xiu ",
		"Ye ",
		"Mei ",
		"Pai ",
		"Ai ",
		"Jie ",
		"[?] ",
		"Mei ",
		"Chuo ",
		"Ta ",
		"Bang ",
		"Xia ",
		"Lian ",
		"Suo ",
		"Xi ",
		"Liu ",
		"Zu ",
		"Ye ",
		"Nou ",
		"Weng ",
		"Rong ",
		"Tang ",
		"Suo ",
		"Qiang ",
		"Ge ",
		"Shuo ",
		"Chui ",
		"Bo ",
		"Pan ",
		"Sa ",
		"Bi ",
		"Sang ",
		"Gang ",
		"Zi ",
		"Wu ",
		"Ying ",
		"Huang ",
		"Tiao ",
		"Liu ",
		"Kai ",
		"Sun ",
		"Sha ",
		"Sou ",
		"Wan ",
		"Hao ",
		"Zhen ",
		"Zhen ",
		"Luo ",
		"Yi ",
		"Yuan ",
		"Tang ",
		"Nie ",
		"Xi ",
		"Jia ",
		"Ge ",
		"Ma ",
		"Juan ",
		"Kasugai ",
		"Habaki ",
		"Suo ",
		"[?] ",
		"[?] ",
		"[?] ",
		"Na ",
		"Lu ",
		"Suo ",
		"Ou ",
		"Zu ",
		"Tuan ",
		"Xiu ",
		"Guan ",
		"Xuan ",
		"Lian ",
		"Shou ",
		"Ao ",
		"Man ",
		"Mo ",
		"Luo ",
		"Bi ",
		"Wei ",
		"Liu ",
		"Di ",
		"Qiao ",
		"Cong ",
		"Yi ",
		"Lu ",
		"Ao ",
		"Keng ",
		"Qiang ",
		"Cui ",
		"Qi ",
		"Chang ",
		"Tang ",
		"Man ",
		"Yong ",
		"Chan ",
		"Feng ",
		"Jing ",
		"Biao ",
		"Shu ",
		"Lou ",
		"Xiu ",
		"Cong ",
		"Long ",
		"Zan ",
		"Jian ",
		"Cao ",
		"Li ",
		"Xia ",
		"Xi ",
		"Kang ",
		"[?] ",
		"Beng ",
		"[?] ",
		"[?] ",
		"Zheng ",
		"Lu ",
		"Hua ",
		"Ji ",
		"Pu ",
		"Hui ",
		"Qiang ",
		"Po ",
		"Lin ",
		"Suo ",
		"Xiu ",
		"San ",
		"Cheng "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x94.js
var require_x94 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Kui ",
		"Si ",
		"Liu ",
		"Nao ",
		"Heng ",
		"Pie ",
		"Sui ",
		"Fan ",
		"Qiao ",
		"Quan ",
		"Yang ",
		"Tang ",
		"Xiang ",
		"Jue ",
		"Jiao ",
		"Zun ",
		"Liao ",
		"Jie ",
		"Lao ",
		"Dui ",
		"Tan ",
		"Zan ",
		"Ji ",
		"Jian ",
		"Zhong ",
		"Deng ",
		"Ya ",
		"Ying ",
		"Dui ",
		"Jue ",
		"Nou ",
		"Ti ",
		"Pu ",
		"Tie ",
		"[?] ",
		"[?] ",
		"Ding ",
		"Shan ",
		"Kai ",
		"Jian ",
		"Fei ",
		"Sui ",
		"Lu ",
		"Juan ",
		"Hui ",
		"Yu ",
		"Lian ",
		"Zhuo ",
		"Qiao ",
		"Qian ",
		"Zhuo ",
		"Lei ",
		"Bi ",
		"Tie ",
		"Huan ",
		"Ye ",
		"Duo ",
		"Guo ",
		"Dang ",
		"Ju ",
		"Fen ",
		"Da ",
		"Bei ",
		"Yi ",
		"Ai ",
		"Zong ",
		"Xun ",
		"Diao ",
		"Zhu ",
		"Heng ",
		"Zhui ",
		"Ji ",
		"Nie ",
		"Ta ",
		"Huo ",
		"Qing ",
		"Bin ",
		"Ying ",
		"Kui ",
		"Ning ",
		"Xu ",
		"Jian ",
		"Jian ",
		"Yari ",
		"Cha ",
		"Zhi ",
		"Mie ",
		"Li ",
		"Lei ",
		"Ji ",
		"Zuan ",
		"Kuang ",
		"Shang ",
		"Peng ",
		"La ",
		"Du ",
		"Shuo ",
		"Chuo ",
		"Lu ",
		"Biao ",
		"Bao ",
		"Lu ",
		"[?] ",
		"[?] ",
		"Long ",
		"E ",
		"Lu ",
		"Xin ",
		"Jian ",
		"Lan ",
		"Bo ",
		"Jian ",
		"Yao ",
		"Chan ",
		"Xiang ",
		"Jian ",
		"Xi ",
		"Guan ",
		"Cang ",
		"Nie ",
		"Lei ",
		"Cuan ",
		"Qu ",
		"Pan ",
		"Luo ",
		"Zuan ",
		"Luan ",
		"Zao ",
		"Nie ",
		"Jue ",
		"Tang ",
		"Shu ",
		"Lan ",
		"Jin ",
		"Qiu ",
		"Yi ",
		"Zhen ",
		"Ding ",
		"Zhao ",
		"Po ",
		"Diao ",
		"Tu ",
		"Qian ",
		"Chuan ",
		"Shan ",
		"Ji ",
		"Fan ",
		"Diao ",
		"Men ",
		"Nu ",
		"Xi ",
		"Chai ",
		"Xing ",
		"Gai ",
		"Bu ",
		"Tai ",
		"Ju ",
		"Dun ",
		"Chao ",
		"Zhong ",
		"Na ",
		"Bei ",
		"Gang ",
		"Ban ",
		"Qian ",
		"Yao ",
		"Qin ",
		"Jun ",
		"Wu ",
		"Gou ",
		"Kang ",
		"Fang ",
		"Huo ",
		"Tou ",
		"Niu ",
		"Ba ",
		"Yu ",
		"Qian ",
		"Zheng ",
		"Qian ",
		"Gu ",
		"Bo ",
		"E ",
		"Po ",
		"Bu ",
		"Ba ",
		"Yue ",
		"Zuan ",
		"Mu ",
		"Dan ",
		"Jia ",
		"Dian ",
		"You ",
		"Tie ",
		"Bo ",
		"Ling ",
		"Shuo ",
		"Qian ",
		"Liu ",
		"Bao ",
		"Shi ",
		"Xuan ",
		"She ",
		"Bi ",
		"Ni ",
		"Pi ",
		"Duo ",
		"Xing ",
		"Kao ",
		"Lao ",
		"Er ",
		"Mang ",
		"Ya ",
		"You ",
		"Cheng ",
		"Jia ",
		"Ye ",
		"Nao ",
		"Zhi ",
		"Dang ",
		"Tong ",
		"Lu ",
		"Diao ",
		"Yin ",
		"Kai ",
		"Zha ",
		"Zhu ",
		"Xian ",
		"Ting ",
		"Diu ",
		"Xian ",
		"Hua ",
		"Quan ",
		"Sha ",
		"Jia ",
		"Yao ",
		"Ge ",
		"Ming ",
		"Zheng ",
		"Se ",
		"Jiao ",
		"Yi ",
		"Chan ",
		"Chong ",
		"Tang ",
		"An ",
		"Yin ",
		"Ru ",
		"Zhu ",
		"Lao ",
		"Pu ",
		"Wu ",
		"Lai ",
		"Te ",
		"Lian ",
		"Keng "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x95.js
var require_x95 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Xiao ",
		"Suo ",
		"Li ",
		"Zheng ",
		"Chu ",
		"Guo ",
		"Gao ",
		"Tie ",
		"Xiu ",
		"Cuo ",
		"Lue ",
		"Feng ",
		"Xin ",
		"Liu ",
		"Kai ",
		"Jian ",
		"Rui ",
		"Ti ",
		"Lang ",
		"Qian ",
		"Ju ",
		"A ",
		"Qiang ",
		"Duo ",
		"Tian ",
		"Cuo ",
		"Mao ",
		"Ben ",
		"Qi ",
		"De ",
		"Kua ",
		"Kun ",
		"Chang ",
		"Xi ",
		"Gu ",
		"Luo ",
		"Chui ",
		"Zhui ",
		"Jin ",
		"Zhi ",
		"Xian ",
		"Juan ",
		"Huo ",
		"Pou ",
		"Tan ",
		"Ding ",
		"Jian ",
		"Ju ",
		"Meng ",
		"Zi ",
		"Qie ",
		"Ying ",
		"Kai ",
		"Qiang ",
		"Song ",
		"E ",
		"Cha ",
		"Qiao ",
		"Zhong ",
		"Duan ",
		"Sou ",
		"Huang ",
		"Huan ",
		"Ai ",
		"Du ",
		"Mei ",
		"Lou ",
		"Zi ",
		"Fei ",
		"Mei ",
		"Mo ",
		"Zhen ",
		"Bo ",
		"Ge ",
		"Nie ",
		"Tang ",
		"Juan ",
		"Nie ",
		"Na ",
		"Liu ",
		"Hao ",
		"Bang ",
		"Yi ",
		"Jia ",
		"Bin ",
		"Rong ",
		"Biao ",
		"Tang ",
		"Man ",
		"Luo ",
		"Beng ",
		"Yong ",
		"Jing ",
		"Di ",
		"Zu ",
		"Xuan ",
		"Liu ",
		"Tan ",
		"Jue ",
		"Liao ",
		"Pu ",
		"Lu ",
		"Dui ",
		"Lan ",
		"Pu ",
		"Cuan ",
		"Qiang ",
		"Deng ",
		"Huo ",
		"Lei ",
		"Huan ",
		"Zhuo ",
		"Lian ",
		"Yi ",
		"Cha ",
		"Biao ",
		"La ",
		"Chan ",
		"Xiang ",
		"Chang ",
		"Chang ",
		"Jiu ",
		"Ao ",
		"Die ",
		"Qu ",
		"Liao ",
		"Mi ",
		"Chang ",
		"Men ",
		"Ma ",
		"Shuan ",
		"Shan ",
		"Huo ",
		"Men ",
		"Yan ",
		"Bi ",
		"Han ",
		"Bi ",
		"San ",
		"Kai ",
		"Kang ",
		"Beng ",
		"Hong ",
		"Run ",
		"San ",
		"Xian ",
		"Xian ",
		"Jian ",
		"Min ",
		"Xia ",
		"Yuru ",
		"Dou ",
		"Zha ",
		"Nao ",
		"Jian ",
		"Peng ",
		"Xia ",
		"Ling ",
		"Bian ",
		"Bi ",
		"Run ",
		"He ",
		"Guan ",
		"Ge ",
		"Ge ",
		"Fa ",
		"Chu ",
		"Hong ",
		"Gui ",
		"Min ",
		"Se ",
		"Kun ",
		"Lang ",
		"Lu ",
		"Ting ",
		"Sha ",
		"Ju ",
		"Yue ",
		"Yue ",
		"Chan ",
		"Qu ",
		"Lin ",
		"Chang ",
		"Shai ",
		"Kun ",
		"Yan ",
		"Min ",
		"Yan ",
		"E ",
		"Hun ",
		"Yu ",
		"Wen ",
		"Xiang ",
		"Bao ",
		"Xiang ",
		"Qu ",
		"Yao ",
		"Wen ",
		"Ban ",
		"An ",
		"Wei ",
		"Yin ",
		"Kuo ",
		"Que ",
		"Lan ",
		"Du ",
		"[?] ",
		"Phwung ",
		"Tian ",
		"Nie ",
		"Ta ",
		"Kai ",
		"He ",
		"Que ",
		"Chuang ",
		"Guan ",
		"Dou ",
		"Qi ",
		"Kui ",
		"Tang ",
		"Guan ",
		"Piao ",
		"Kan ",
		"Xi ",
		"Hui ",
		"Chan ",
		"Pi ",
		"Dang ",
		"Huan ",
		"Ta ",
		"Wen ",
		"[?] ",
		"Men ",
		"Shuan ",
		"Shan ",
		"Yan ",
		"Han ",
		"Bi ",
		"Wen ",
		"Chuang ",
		"Run ",
		"Wei ",
		"Xian ",
		"Hong ",
		"Jian ",
		"Min ",
		"Kang ",
		"Men ",
		"Zha ",
		"Nao ",
		"Gui ",
		"Wen ",
		"Ta ",
		"Min ",
		"Lu ",
		"Kai "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x96.js
var require_x96 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Fa ",
		"Ge ",
		"He ",
		"Kun ",
		"Jiu ",
		"Yue ",
		"Lang ",
		"Du ",
		"Yu ",
		"Yan ",
		"Chang ",
		"Xi ",
		"Wen ",
		"Hun ",
		"Yan ",
		"E ",
		"Chan ",
		"Lan ",
		"Qu ",
		"Hui ",
		"Kuo ",
		"Que ",
		"Ge ",
		"Tian ",
		"Ta ",
		"Que ",
		"Kan ",
		"Huan ",
		"Fu ",
		"Fu ",
		"Le ",
		"Dui ",
		"Xin ",
		"Qian ",
		"Wu ",
		"Yi ",
		"Tuo ",
		"Yin ",
		"Yang ",
		"Dou ",
		"E ",
		"Sheng ",
		"Ban ",
		"Pei ",
		"Keng ",
		"Yun ",
		"Ruan ",
		"Zhi ",
		"Pi ",
		"Jing ",
		"Fang ",
		"Yang ",
		"Yin ",
		"Zhen ",
		"Jie ",
		"Cheng ",
		"E ",
		"Qu ",
		"Di ",
		"Zu ",
		"Zuo ",
		"Dian ",
		"Ling ",
		"A ",
		"Tuo ",
		"Tuo ",
		"Po ",
		"Bing ",
		"Fu ",
		"Ji ",
		"Lu ",
		"Long ",
		"Chen ",
		"Xing ",
		"Duo ",
		"Lou ",
		"Mo ",
		"Jiang ",
		"Shu ",
		"Duo ",
		"Xian ",
		"Er ",
		"Gui ",
		"Yu ",
		"Gai ",
		"Shan ",
		"Xun ",
		"Qiao ",
		"Xing ",
		"Chun ",
		"Fu ",
		"Bi ",
		"Xia ",
		"Shan ",
		"Sheng ",
		"Zhi ",
		"Pu ",
		"Dou ",
		"Yuan ",
		"Zhen ",
		"Chu ",
		"Xian ",
		"Tou ",
		"Nie ",
		"Yun ",
		"Xian ",
		"Pei ",
		"Pei ",
		"Zou ",
		"Yi ",
		"Dui ",
		"Lun ",
		"Yin ",
		"Ju ",
		"Chui ",
		"Chen ",
		"Pi ",
		"Ling ",
		"Tao ",
		"Xian ",
		"Lu ",
		"Sheng ",
		"Xian ",
		"Yin ",
		"Zhu ",
		"Yang ",
		"Reng ",
		"Shan ",
		"Chong ",
		"Yan ",
		"Yin ",
		"Yu ",
		"Ti ",
		"Yu ",
		"Long ",
		"Wei ",
		"Wei ",
		"Nie ",
		"Dui ",
		"Sui ",
		"An ",
		"Huang ",
		"Jie ",
		"Sui ",
		"Yin ",
		"Gai ",
		"Yan ",
		"Hui ",
		"Ge ",
		"Yun ",
		"Wu ",
		"Wei ",
		"Ai ",
		"Xi ",
		"Tang ",
		"Ji ",
		"Zhang ",
		"Dao ",
		"Ao ",
		"Xi ",
		"Yin ",
		"[?] ",
		"Rao ",
		"Lin ",
		"Tui ",
		"Deng ",
		"Pi ",
		"Sui ",
		"Sui ",
		"Yu ",
		"Xian ",
		"Fen ",
		"Ni ",
		"Er ",
		"Ji ",
		"Dao ",
		"Xi ",
		"Yin ",
		"E ",
		"Hui ",
		"Long ",
		"Xi ",
		"Li ",
		"Li ",
		"Li ",
		"Zhui ",
		"He ",
		"Zhi ",
		"Zhun ",
		"Jun ",
		"Nan ",
		"Yi ",
		"Que ",
		"Yan ",
		"Qian ",
		"Ya ",
		"Xiong ",
		"Ya ",
		"Ji ",
		"Gu ",
		"Huan ",
		"Zhi ",
		"Gou ",
		"Jun ",
		"Ci ",
		"Yong ",
		"Ju ",
		"Chu ",
		"Hu ",
		"Za ",
		"Luo ",
		"Yu ",
		"Chou ",
		"Diao ",
		"Sui ",
		"Han ",
		"Huo ",
		"Shuang ",
		"Guan ",
		"Chu ",
		"Za ",
		"Yong ",
		"Ji ",
		"Xi ",
		"Chou ",
		"Liu ",
		"Li ",
		"Nan ",
		"Xue ",
		"Za ",
		"Ji ",
		"Ji ",
		"Yu ",
		"Yu ",
		"Xue ",
		"Na ",
		"Fou ",
		"Se ",
		"Mu ",
		"Wen ",
		"Fen ",
		"Pang ",
		"Yun ",
		"Li ",
		"Li ",
		"Ang ",
		"Ling ",
		"Lei ",
		"An ",
		"Bao ",
		"Meng ",
		"Dian ",
		"Dang ",
		"Xing ",
		"Wu ",
		"Zhao "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x97.js
var require_x97 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Xu ",
		"Ji ",
		"Mu ",
		"Chen ",
		"Xiao ",
		"Zha ",
		"Ting ",
		"Zhen ",
		"Pei ",
		"Mei ",
		"Ling ",
		"Qi ",
		"Chou ",
		"Huo ",
		"Sha ",
		"Fei ",
		"Weng ",
		"Zhan ",
		"Yin ",
		"Ni ",
		"Chou ",
		"Tun ",
		"Lin ",
		"[?] ",
		"Dong ",
		"Ying ",
		"Wu ",
		"Ling ",
		"Shuang ",
		"Ling ",
		"Xia ",
		"Hong ",
		"Yin ",
		"Mo ",
		"Mai ",
		"Yun ",
		"Liu ",
		"Meng ",
		"Bin ",
		"Wu ",
		"Wei ",
		"Huo ",
		"Yin ",
		"Xi ",
		"Yi ",
		"Ai ",
		"Dan ",
		"Deng ",
		"Xian ",
		"Yu ",
		"Lu ",
		"Long ",
		"Dai ",
		"Ji ",
		"Pang ",
		"Yang ",
		"Ba ",
		"Pi ",
		"Wei ",
		"[?] ",
		"Xi ",
		"Ji ",
		"Mai ",
		"Meng ",
		"Meng ",
		"Lei ",
		"Li ",
		"Huo ",
		"Ai ",
		"Fei ",
		"Dai ",
		"Long ",
		"Ling ",
		"Ai ",
		"Feng ",
		"Li ",
		"Bao ",
		"[?] ",
		"He ",
		"He ",
		"Bing ",
		"Qing ",
		"Qing ",
		"Jing ",
		"Tian ",
		"Zhen ",
		"Jing ",
		"Cheng ",
		"Qing ",
		"Jing ",
		"Jing ",
		"Dian ",
		"Jing ",
		"Tian ",
		"Fei ",
		"Fei ",
		"Kao ",
		"Mi ",
		"Mian ",
		"Mian ",
		"Pao ",
		"Ye ",
		"Tian ",
		"Hui ",
		"Ye ",
		"Ge ",
		"Ding ",
		"Cha ",
		"Jian ",
		"Ren ",
		"Di ",
		"Du ",
		"Wu ",
		"Ren ",
		"Qin ",
		"Jin ",
		"Xue ",
		"Niu ",
		"Ba ",
		"Yin ",
		"Sa ",
		"Na ",
		"Mo ",
		"Zu ",
		"Da ",
		"Ban ",
		"Yi ",
		"Yao ",
		"Tao ",
		"Tuo ",
		"Jia ",
		"Hong ",
		"Pao ",
		"Yang ",
		"Tomo ",
		"Yin ",
		"Jia ",
		"Tao ",
		"Ji ",
		"Xie ",
		"An ",
		"An ",
		"Hen ",
		"Gong ",
		"Kohaze ",
		"Da ",
		"Qiao ",
		"Ting ",
		"Wan ",
		"Ying ",
		"Sui ",
		"Tiao ",
		"Qiao ",
		"Xuan ",
		"Kong ",
		"Beng ",
		"Ta ",
		"Zhang ",
		"Bing ",
		"Kuo ",
		"Ju ",
		"La ",
		"Xie ",
		"Rou ",
		"Bang ",
		"Yi ",
		"Qiu ",
		"Qiu ",
		"He ",
		"Xiao ",
		"Mu ",
		"Ju ",
		"Jian ",
		"Bian ",
		"Di ",
		"Jian ",
		"On ",
		"Tao ",
		"Gou ",
		"Ta ",
		"Bei ",
		"Xie ",
		"Pan ",
		"Ge ",
		"Bi ",
		"Kuo ",
		"Tang ",
		"Lou ",
		"Gui ",
		"Qiao ",
		"Xue ",
		"Ji ",
		"Jian ",
		"Jiang ",
		"Chan ",
		"Da ",
		"Huo ",
		"Xian ",
		"Qian ",
		"Du ",
		"Wa ",
		"Jian ",
		"Lan ",
		"Wei ",
		"Ren ",
		"Fu ",
		"Mei ",
		"Juan ",
		"Ge ",
		"Wei ",
		"Qiao ",
		"Han ",
		"Chang ",
		"[?] ",
		"Rou ",
		"Xun ",
		"She ",
		"Wei ",
		"Ge ",
		"Bei ",
		"Tao ",
		"Gou ",
		"Yun ",
		"[?] ",
		"Bi ",
		"Wei ",
		"Hui ",
		"Du ",
		"Wa ",
		"Du ",
		"Wei ",
		"Ren ",
		"Fu ",
		"Han ",
		"Wei ",
		"Yun ",
		"Tao ",
		"Jiu ",
		"Jiu ",
		"Xian ",
		"Xie ",
		"Xian ",
		"Ji ",
		"Yin ",
		"Za ",
		"Yun ",
		"Shao ",
		"Le ",
		"Peng ",
		"Heng ",
		"Ying ",
		"Yun ",
		"Peng ",
		"Yin ",
		"Yin ",
		"Xiang "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x98.js
var require_x98 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Hu ",
		"Ye ",
		"Ding ",
		"Qing ",
		"Pan ",
		"Xiang ",
		"Shun ",
		"Han ",
		"Xu ",
		"Yi ",
		"Xu ",
		"Gu ",
		"Song ",
		"Kui ",
		"Qi ",
		"Hang ",
		"Yu ",
		"Wan ",
		"Ban ",
		"Dun ",
		"Di ",
		"Dan ",
		"Pan ",
		"Po ",
		"Ling ",
		"Ce ",
		"Jing ",
		"Lei ",
		"He ",
		"Qiao ",
		"E ",
		"E ",
		"Wei ",
		"Jie ",
		"Gua ",
		"Shen ",
		"Yi ",
		"Shen ",
		"Hai ",
		"Dui ",
		"Pian ",
		"Ping ",
		"Lei ",
		"Fu ",
		"Jia ",
		"Tou ",
		"Hui ",
		"Kui ",
		"Jia ",
		"Le ",
		"Tian ",
		"Cheng ",
		"Ying ",
		"Jun ",
		"Hu ",
		"Han ",
		"Jing ",
		"Tui ",
		"Tui ",
		"Pin ",
		"Lai ",
		"Tui ",
		"Zi ",
		"Zi ",
		"Chui ",
		"Ding ",
		"Lai ",
		"Yan ",
		"Han ",
		"Jian ",
		"Ke ",
		"Cui ",
		"Jiong ",
		"Qin ",
		"Yi ",
		"Sai ",
		"Ti ",
		"E ",
		"E ",
		"Yan ",
		"Hun ",
		"Kan ",
		"Yong ",
		"Zhuan ",
		"Yan ",
		"Xian ",
		"Xin ",
		"Yi ",
		"Yuan ",
		"Sang ",
		"Dian ",
		"Dian ",
		"Jiang ",
		"Ku ",
		"Lei ",
		"Liao ",
		"Piao ",
		"Yi ",
		"Man ",
		"Qi ",
		"Rao ",
		"Hao ",
		"Qiao ",
		"Gu ",
		"Xun ",
		"Qian ",
		"Hui ",
		"Zhan ",
		"Ru ",
		"Hong ",
		"Bin ",
		"Xian ",
		"Pin ",
		"Lu ",
		"Lan ",
		"Nie ",
		"Quan ",
		"Ye ",
		"Ding ",
		"Qing ",
		"Han ",
		"Xiang ",
		"Shun ",
		"Xu ",
		"Xu ",
		"Wan ",
		"Gu ",
		"Dun ",
		"Qi ",
		"Ban ",
		"Song ",
		"Hang ",
		"Yu ",
		"Lu ",
		"Ling ",
		"Po ",
		"Jing ",
		"Jie ",
		"Jia ",
		"Tian ",
		"Han ",
		"Ying ",
		"Jiong ",
		"Hai ",
		"Yi ",
		"Pin ",
		"Hui ",
		"Tui ",
		"Han ",
		"Ying ",
		"Ying ",
		"Ke ",
		"Ti ",
		"Yong ",
		"E ",
		"Zhuan ",
		"Yan ",
		"E ",
		"Nie ",
		"Man ",
		"Dian ",
		"Sang ",
		"Hao ",
		"Lei ",
		"Zhan ",
		"Ru ",
		"Pin ",
		"Quan ",
		"Feng ",
		"Biao ",
		"Oroshi ",
		"Fu ",
		"Xia ",
		"Zhan ",
		"Biao ",
		"Sa ",
		"Ba ",
		"Tai ",
		"Lie ",
		"Gua ",
		"Xuan ",
		"Shao ",
		"Ju ",
		"Bi ",
		"Si ",
		"Wei ",
		"Yang ",
		"Yao ",
		"Sou ",
		"Kai ",
		"Sao ",
		"Fan ",
		"Liu ",
		"Xi ",
		"Liao ",
		"Piao ",
		"Piao ",
		"Liu ",
		"Biao ",
		"Biao ",
		"Biao ",
		"Liao ",
		"[?] ",
		"Se ",
		"Feng ",
		"Biao ",
		"Feng ",
		"Yang ",
		"Zhan ",
		"Biao ",
		"Sa ",
		"Ju ",
		"Si ",
		"Sou ",
		"Yao ",
		"Liu ",
		"Piao ",
		"Biao ",
		"Biao ",
		"Fei ",
		"Fan ",
		"Fei ",
		"Fei ",
		"Shi ",
		"Shi ",
		"Can ",
		"Ji ",
		"Ding ",
		"Si ",
		"Tuo ",
		"Zhan ",
		"Sun ",
		"Xiang ",
		"Tun ",
		"Ren ",
		"Yu ",
		"Juan ",
		"Chi ",
		"Yin ",
		"Fan ",
		"Fan ",
		"Sun ",
		"Yin ",
		"Zhu ",
		"Yi ",
		"Zhai ",
		"Bi ",
		"Jie ",
		"Tao ",
		"Liu ",
		"Ci ",
		"Tie ",
		"Si ",
		"Bao ",
		"Shi ",
		"Duo "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x99.js
var require_x99 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Hai ",
		"Ren ",
		"Tian ",
		"Jiao ",
		"Jia ",
		"Bing ",
		"Yao ",
		"Tong ",
		"Ci ",
		"Xiang ",
		"Yang ",
		"Yang ",
		"Er ",
		"Yan ",
		"Le ",
		"Yi ",
		"Can ",
		"Bo ",
		"Nei ",
		"E ",
		"Bu ",
		"Jun ",
		"Dou ",
		"Su ",
		"Yu ",
		"Shi ",
		"Yao ",
		"Hun ",
		"Guo ",
		"Shi ",
		"Jian ",
		"Zhui ",
		"Bing ",
		"Xian ",
		"Bu ",
		"Ye ",
		"Tan ",
		"Fei ",
		"Zhang ",
		"Wei ",
		"Guan ",
		"E ",
		"Nuan ",
		"Hun ",
		"Hu ",
		"Huang ",
		"Tie ",
		"Hui ",
		"Jian ",
		"Hou ",
		"He ",
		"Xing ",
		"Fen ",
		"Wei ",
		"Gu ",
		"Cha ",
		"Song ",
		"Tang ",
		"Bo ",
		"Gao ",
		"Xi ",
		"Kui ",
		"Liu ",
		"Sou ",
		"Tao ",
		"Ye ",
		"Yun ",
		"Mo ",
		"Tang ",
		"Man ",
		"Bi ",
		"Yu ",
		"Xiu ",
		"Jin ",
		"San ",
		"Kui ",
		"Zhuan ",
		"Shan ",
		"Chi ",
		"Dan ",
		"Yi ",
		"Ji ",
		"Rao ",
		"Cheng ",
		"Yong ",
		"Tao ",
		"Hui ",
		"Xiang ",
		"Zhan ",
		"Fen ",
		"Hai ",
		"Meng ",
		"Yan ",
		"Mo ",
		"Chan ",
		"Xiang ",
		"Luo ",
		"Zuan ",
		"Nang ",
		"Shi ",
		"Ding ",
		"Ji ",
		"Tuo ",
		"Xing ",
		"Tun ",
		"Xi ",
		"Ren ",
		"Yu ",
		"Chi ",
		"Fan ",
		"Yin ",
		"Jian ",
		"Shi ",
		"Bao ",
		"Si ",
		"Duo ",
		"Yi ",
		"Er ",
		"Rao ",
		"Xiang ",
		"Jia ",
		"Le ",
		"Jiao ",
		"Yi ",
		"Bing ",
		"Bo ",
		"Dou ",
		"E ",
		"Yu ",
		"Nei ",
		"Jun ",
		"Guo ",
		"Hun ",
		"Xian ",
		"Guan ",
		"Cha ",
		"Kui ",
		"Gu ",
		"Sou ",
		"Chan ",
		"Ye ",
		"Mo ",
		"Bo ",
		"Liu ",
		"Xiu ",
		"Jin ",
		"Man ",
		"San ",
		"Zhuan ",
		"Nang ",
		"Shou ",
		"Kui ",
		"Guo ",
		"Xiang ",
		"Fen ",
		"Ba ",
		"Ni ",
		"Bi ",
		"Bo ",
		"Tu ",
		"Han ",
		"Fei ",
		"Jian ",
		"An ",
		"Ai ",
		"Fu ",
		"Xian ",
		"Wen ",
		"Xin ",
		"Fen ",
		"Bin ",
		"Xing ",
		"Ma ",
		"Yu ",
		"Feng ",
		"Han ",
		"Di ",
		"Tuo ",
		"Tuo ",
		"Chi ",
		"Xun ",
		"Zhu ",
		"Zhi ",
		"Pei ",
		"Xin ",
		"Ri ",
		"Sa ",
		"Yin ",
		"Wen ",
		"Zhi ",
		"Dan ",
		"Lu ",
		"You ",
		"Bo ",
		"Bao ",
		"Kuai ",
		"Tuo ",
		"Yi ",
		"Qu ",
		"[?] ",
		"Qu ",
		"Jiong ",
		"Bo ",
		"Zhao ",
		"Yuan ",
		"Peng ",
		"Zhou ",
		"Ju ",
		"Zhu ",
		"Nu ",
		"Ju ",
		"Pi ",
		"Zang ",
		"Jia ",
		"Ling ",
		"Zhen ",
		"Tai ",
		"Fu ",
		"Yang ",
		"Shi ",
		"Bi ",
		"Tuo ",
		"Tuo ",
		"Si ",
		"Liu ",
		"Ma ",
		"Pian ",
		"Tao ",
		"Zhi ",
		"Rong ",
		"Teng ",
		"Dong ",
		"Xun ",
		"Quan ",
		"Shen ",
		"Jiong ",
		"Er ",
		"Hai ",
		"Bo ",
		"Zhu ",
		"Yin ",
		"Luo ",
		"Shuu ",
		"Dan ",
		"Xie ",
		"Liu ",
		"Ju ",
		"Song ",
		"Qin ",
		"Mang ",
		"Liang ",
		"Han ",
		"Tu ",
		"Xuan ",
		"Tui ",
		"Jun "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x9a.js
var require_x9a = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"E ",
		"Cheng ",
		"Xin ",
		"Ai ",
		"Lu ",
		"Zhui ",
		"Zhou ",
		"She ",
		"Pian ",
		"Kun ",
		"Tao ",
		"Lai ",
		"Zong ",
		"Ke ",
		"Qi ",
		"Qi ",
		"Yan ",
		"Fei ",
		"Sao ",
		"Yan ",
		"Jie ",
		"Yao ",
		"Wu ",
		"Pian ",
		"Cong ",
		"Pian ",
		"Qian ",
		"Fei ",
		"Huang ",
		"Jian ",
		"Huo ",
		"Yu ",
		"Ti ",
		"Quan ",
		"Xia ",
		"Zong ",
		"Kui ",
		"Rou ",
		"Si ",
		"Gua ",
		"Tuo ",
		"Kui ",
		"Sou ",
		"Qian ",
		"Cheng ",
		"Zhi ",
		"Liu ",
		"Pang ",
		"Teng ",
		"Xi ",
		"Cao ",
		"Du ",
		"Yan ",
		"Yuan ",
		"Zou ",
		"Sao ",
		"Shan ",
		"Li ",
		"Zhi ",
		"Shuang ",
		"Lu ",
		"Xi ",
		"Luo ",
		"Zhang ",
		"Mo ",
		"Ao ",
		"Can ",
		"Piao ",
		"Cong ",
		"Qu ",
		"Bi ",
		"Zhi ",
		"Yu ",
		"Xu ",
		"Hua ",
		"Bo ",
		"Su ",
		"Xiao ",
		"Lin ",
		"Chan ",
		"Dun ",
		"Liu ",
		"Tuo ",
		"Zeng ",
		"Tan ",
		"Jiao ",
		"Tie ",
		"Yan ",
		"Luo ",
		"Zhan ",
		"Jing ",
		"Yi ",
		"Ye ",
		"Tuo ",
		"Bin ",
		"Zou ",
		"Yan ",
		"Peng ",
		"Lu ",
		"Teng ",
		"Xiang ",
		"Ji ",
		"Shuang ",
		"Ju ",
		"Xi ",
		"Huan ",
		"Li ",
		"Biao ",
		"Ma ",
		"Yu ",
		"Tuo ",
		"Xun ",
		"Chi ",
		"Qu ",
		"Ri ",
		"Bo ",
		"Lu ",
		"Zang ",
		"Shi ",
		"Si ",
		"Fu ",
		"Ju ",
		"Zou ",
		"Zhu ",
		"Tuo ",
		"Nu ",
		"Jia ",
		"Yi ",
		"Tai ",
		"Xiao ",
		"Ma ",
		"Yin ",
		"Jiao ",
		"Hua ",
		"Luo ",
		"Hai ",
		"Pian ",
		"Biao ",
		"Li ",
		"Cheng ",
		"Yan ",
		"Xin ",
		"Qin ",
		"Jun ",
		"Qi ",
		"Qi ",
		"Ke ",
		"Zhui ",
		"Zong ",
		"Su ",
		"Can ",
		"Pian ",
		"Zhi ",
		"Kui ",
		"Sao ",
		"Wu ",
		"Ao ",
		"Liu ",
		"Qian ",
		"Shan ",
		"Piao ",
		"Luo ",
		"Cong ",
		"Chan ",
		"Zou ",
		"Ji ",
		"Shuang ",
		"Xiang ",
		"Gu ",
		"Wei ",
		"Wei ",
		"Wei ",
		"Yu ",
		"Gan ",
		"Yi ",
		"Ang ",
		"Tou ",
		"Xie ",
		"Bao ",
		"Bi ",
		"Chi ",
		"Ti ",
		"Di ",
		"Ku ",
		"Hai ",
		"Qiao ",
		"Gou ",
		"Kua ",
		"Ge ",
		"Tui ",
		"Geng ",
		"Pian ",
		"Bi ",
		"Ke ",
		"Ka ",
		"Yu ",
		"Sui ",
		"Lou ",
		"Bo ",
		"Xiao ",
		"Pang ",
		"Bo ",
		"Ci ",
		"Kuan ",
		"Bin ",
		"Mo ",
		"Liao ",
		"Lou ",
		"Nao ",
		"Du ",
		"Zang ",
		"Sui ",
		"Ti ",
		"Bin ",
		"Kuan ",
		"Lu ",
		"Gao ",
		"Gao ",
		"Qiao ",
		"Kao ",
		"Qiao ",
		"Lao ",
		"Zao ",
		"Biao ",
		"Kun ",
		"Kun ",
		"Ti ",
		"Fang ",
		"Xiu ",
		"Ran ",
		"Mao ",
		"Dan ",
		"Kun ",
		"Bin ",
		"Fa ",
		"Tiao ",
		"Peng ",
		"Zi ",
		"Fa ",
		"Ran ",
		"Ti ",
		"Pao ",
		"Pi ",
		"Mao ",
		"Fu ",
		"Er ",
		"Rong ",
		"Qu ",
		"Gong ",
		"Xiu ",
		"Gua ",
		"Ji ",
		"Peng ",
		"Zhua ",
		"Shao ",
		"Sha "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x9b.js
var require_x9b = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Ti ",
		"Li ",
		"Bin ",
		"Zong ",
		"Ti ",
		"Peng ",
		"Song ",
		"Zheng ",
		"Quan ",
		"Zong ",
		"Shun ",
		"Jian ",
		"Duo ",
		"Hu ",
		"La ",
		"Jiu ",
		"Qi ",
		"Lian ",
		"Zhen ",
		"Bin ",
		"Peng ",
		"Mo ",
		"San ",
		"Man ",
		"Man ",
		"Seng ",
		"Xu ",
		"Lie ",
		"Qian ",
		"Qian ",
		"Nong ",
		"Huan ",
		"Kuai ",
		"Ning ",
		"Bin ",
		"Lie ",
		"Rang ",
		"Dou ",
		"Dou ",
		"Nao ",
		"Hong ",
		"Xi ",
		"Dou ",
		"Han ",
		"Dou ",
		"Dou ",
		"Jiu ",
		"Chang ",
		"Yu ",
		"Yu ",
		"Li ",
		"Juan ",
		"Fu ",
		"Qian ",
		"Gui ",
		"Zong ",
		"Liu ",
		"Gui ",
		"Shang ",
		"Yu ",
		"Gui ",
		"Mei ",
		"Ji ",
		"Qi ",
		"Jie ",
		"Kui ",
		"Hun ",
		"Ba ",
		"Po ",
		"Mei ",
		"Xu ",
		"Yan ",
		"Xiao ",
		"Liang ",
		"Yu ",
		"Tui ",
		"Qi ",
		"Wang ",
		"Liang ",
		"Wei ",
		"Jian ",
		"Chi ",
		"Piao ",
		"Bi ",
		"Mo ",
		"Ji ",
		"Xu ",
		"Chou ",
		"Yan ",
		"Zhan ",
		"Yu ",
		"Dao ",
		"Ren ",
		"Ji ",
		"Eri ",
		"Gong ",
		"Tuo ",
		"Diao ",
		"Ji ",
		"Xu ",
		"E ",
		"E ",
		"Sha ",
		"Hang ",
		"Tun ",
		"Mo ",
		"Jie ",
		"Shen ",
		"Fan ",
		"Yuan ",
		"Bi ",
		"Lu ",
		"Wen ",
		"Hu ",
		"Lu ",
		"Za ",
		"Fang ",
		"Fen ",
		"Na ",
		"You ",
		"Namazu ",
		"Todo ",
		"He ",
		"Xia ",
		"Qu ",
		"Han ",
		"Pi ",
		"Ling ",
		"Tuo ",
		"Bo ",
		"Qiu ",
		"Ping ",
		"Fu ",
		"Bi ",
		"Ji ",
		"Wei ",
		"Ju ",
		"Diao ",
		"Bo ",
		"You ",
		"Gun ",
		"Pi ",
		"Nian ",
		"Xing ",
		"Tai ",
		"Bao ",
		"Fu ",
		"Zha ",
		"Ju ",
		"Gu ",
		"Kajika ",
		"Tong ",
		"[?] ",
		"Ta ",
		"Jie ",
		"Shu ",
		"Hou ",
		"Xiang ",
		"Er ",
		"An ",
		"Wei ",
		"Tiao ",
		"Zhu ",
		"Yin ",
		"Lie ",
		"Luo ",
		"Tong ",
		"Yi ",
		"Qi ",
		"Bing ",
		"Wei ",
		"Jiao ",
		"Bu ",
		"Gui ",
		"Xian ",
		"Ge ",
		"Hui ",
		"Bora ",
		"Mate ",
		"Kao ",
		"Gori ",
		"Duo ",
		"Jun ",
		"Ti ",
		"Man ",
		"Xiao ",
		"Za ",
		"Sha ",
		"Qin ",
		"Yu ",
		"Nei ",
		"Zhe ",
		"Gun ",
		"Geng ",
		"Su ",
		"Wu ",
		"Qiu ",
		"Ting ",
		"Fu ",
		"Wan ",
		"You ",
		"Li ",
		"Sha ",
		"Sha ",
		"Gao ",
		"Meng ",
		"Ugui ",
		"Asari ",
		"Subashiri ",
		"Kazunoko ",
		"Yong ",
		"Ni ",
		"Zi ",
		"Qi ",
		"Qing ",
		"Xiang ",
		"Nei ",
		"Chun ",
		"Ji ",
		"Diao ",
		"Qie ",
		"Gu ",
		"Zhou ",
		"Dong ",
		"Lai ",
		"Fei ",
		"Ni ",
		"Yi ",
		"Kun ",
		"Lu ",
		"Jiu ",
		"Chang ",
		"Jing ",
		"Lun ",
		"Ling ",
		"Zou ",
		"Li ",
		"Meng ",
		"Zong ",
		"Zhi ",
		"Nian ",
		"Shachi ",
		"Dojou ",
		"Sukesou ",
		"Shi ",
		"Shen ",
		"Hun ",
		"Shi ",
		"Hou ",
		"Xing ",
		"Zhu ",
		"La ",
		"Zong ",
		"Ji ",
		"Bian ",
		"Bian "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x9c.js
var require_x9c = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Huan ",
		"Quan ",
		"Ze ",
		"Wei ",
		"Wei ",
		"Yu ",
		"Qun ",
		"Rou ",
		"Die ",
		"Huang ",
		"Lian ",
		"Yan ",
		"Qiu ",
		"Qiu ",
		"Jian ",
		"Bi ",
		"E ",
		"Yang ",
		"Fu ",
		"Sai ",
		"Jian ",
		"Xia ",
		"Tuo ",
		"Hu ",
		"Muroaji ",
		"Ruo ",
		"Haraka ",
		"Wen ",
		"Jian ",
		"Hao ",
		"Wu ",
		"Fang ",
		"Sao ",
		"Liu ",
		"Ma ",
		"Shi ",
		"Shi ",
		"Yin ",
		"Z ",
		"Teng ",
		"Ta ",
		"Yao ",
		"Ge ",
		"Rong ",
		"Qian ",
		"Qi ",
		"Wen ",
		"Ruo ",
		"Hatahata ",
		"Lian ",
		"Ao ",
		"Le ",
		"Hui ",
		"Min ",
		"Ji ",
		"Tiao ",
		"Qu ",
		"Jian ",
		"Sao ",
		"Man ",
		"Xi ",
		"Qiu ",
		"Biao ",
		"Ji ",
		"Ji ",
		"Zhu ",
		"Jiang ",
		"Qiu ",
		"Zhuan ",
		"Yong ",
		"Zhang ",
		"Kang ",
		"Xue ",
		"Bie ",
		"Jue ",
		"Qu ",
		"Xiang ",
		"Bo ",
		"Jiao ",
		"Xun ",
		"Su ",
		"Huang ",
		"Zun ",
		"Shan ",
		"Shan ",
		"Fan ",
		"Jue ",
		"Lin ",
		"Xun ",
		"Miao ",
		"Xi ",
		"Eso ",
		"Kyou ",
		"Fen ",
		"Guan ",
		"Hou ",
		"Kuai ",
		"Zei ",
		"Sao ",
		"Zhan ",
		"Gan ",
		"Gui ",
		"Sheng ",
		"Li ",
		"Chang ",
		"Hatahata ",
		"Shiira ",
		"Mutsu ",
		"Ru ",
		"Ji ",
		"Xu ",
		"Huo ",
		"Shiira ",
		"Li ",
		"Lie ",
		"Li ",
		"Mie ",
		"Zhen ",
		"Xiang ",
		"E ",
		"Lu ",
		"Guan ",
		"Li ",
		"Xian ",
		"Yu ",
		"Dao ",
		"Ji ",
		"You ",
		"Tun ",
		"Lu ",
		"Fang ",
		"Ba ",
		"He ",
		"Bo ",
		"Ping ",
		"Nian ",
		"Lu ",
		"You ",
		"Zha ",
		"Fu ",
		"Bo ",
		"Bao ",
		"Hou ",
		"Pi ",
		"Tai ",
		"Gui ",
		"Jie ",
		"Kao ",
		"Wei ",
		"Er ",
		"Tong ",
		"Ze ",
		"Hou ",
		"Kuai ",
		"Ji ",
		"Jiao ",
		"Xian ",
		"Za ",
		"Xiang ",
		"Xun ",
		"Geng ",
		"Li ",
		"Lian ",
		"Jian ",
		"Li ",
		"Shi ",
		"Tiao ",
		"Gun ",
		"Sha ",
		"Wan ",
		"Jun ",
		"Ji ",
		"Yong ",
		"Qing ",
		"Ling ",
		"Qi ",
		"Zou ",
		"Fei ",
		"Kun ",
		"Chang ",
		"Gu ",
		"Ni ",
		"Nian ",
		"Diao ",
		"Jing ",
		"Shen ",
		"Shi ",
		"Zi ",
		"Fen ",
		"Die ",
		"Bi ",
		"Chang ",
		"Shi ",
		"Wen ",
		"Wei ",
		"Sai ",
		"E ",
		"Qiu ",
		"Fu ",
		"Huang ",
		"Quan ",
		"Jiang ",
		"Bian ",
		"Sao ",
		"Ao ",
		"Qi ",
		"Ta ",
		"Yin ",
		"Yao ",
		"Fang ",
		"Jian ",
		"Le ",
		"Biao ",
		"Xue ",
		"Bie ",
		"Man ",
		"Min ",
		"Yong ",
		"Wei ",
		"Xi ",
		"Jue ",
		"Shan ",
		"Lin ",
		"Zun ",
		"Huo ",
		"Gan ",
		"Li ",
		"Zhan ",
		"Guan ",
		"Niao ",
		"Yi ",
		"Fu ",
		"Li ",
		"Jiu ",
		"Bu ",
		"Yan ",
		"Fu ",
		"Diao ",
		"Ji ",
		"Feng ",
		"Nio ",
		"Gan ",
		"Shi ",
		"Feng ",
		"Ming ",
		"Bao ",
		"Yuan ",
		"Zhi ",
		"Hu ",
		"Qin ",
		"Fu ",
		"Fen ",
		"Wen ",
		"Jian ",
		"Shi ",
		"Yu "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x9d.js
var require_x9d = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Fou ",
		"Yiao ",
		"Jue ",
		"Jue ",
		"Pi ",
		"Huan ",
		"Zhen ",
		"Bao ",
		"Yan ",
		"Ya ",
		"Zheng ",
		"Fang ",
		"Feng ",
		"Wen ",
		"Ou ",
		"Te ",
		"Jia ",
		"Nu ",
		"Ling ",
		"Mie ",
		"Fu ",
		"Tuo ",
		"Wen ",
		"Li ",
		"Bian ",
		"Zhi ",
		"Ge ",
		"Yuan ",
		"Zi ",
		"Qu ",
		"Xiao ",
		"Zhi ",
		"Dan ",
		"Ju ",
		"You ",
		"Gu ",
		"Zhong ",
		"Yu ",
		"Yang ",
		"Rong ",
		"Ya ",
		"Tie ",
		"Yu ",
		"Shigi ",
		"Ying ",
		"Zhui ",
		"Wu ",
		"Er ",
		"Gua ",
		"Ai ",
		"Zhi ",
		"Yan ",
		"Heng ",
		"Jiao ",
		"Ji ",
		"Lie ",
		"Zhu ",
		"Ren ",
		"Yi ",
		"Hong ",
		"Luo ",
		"Ru ",
		"Mou ",
		"Ge ",
		"Ren ",
		"Jiao ",
		"Xiu ",
		"Zhou ",
		"Zhi ",
		"Luo ",
		"Chidori ",
		"Toki ",
		"Ten ",
		"Luan ",
		"Jia ",
		"Ji ",
		"Yu ",
		"Huan ",
		"Tuo ",
		"Bu ",
		"Wu ",
		"Juan ",
		"Yu ",
		"Bo ",
		"Xun ",
		"Xun ",
		"Bi ",
		"Xi ",
		"Jun ",
		"Ju ",
		"Tu ",
		"Jing ",
		"Ti ",
		"E ",
		"E ",
		"Kuang ",
		"Hu ",
		"Wu ",
		"Shen ",
		"Lai ",
		"Ikaruga ",
		"Kakesu ",
		"Lu ",
		"Ping ",
		"Shu ",
		"Fu ",
		"An ",
		"Zhao ",
		"Peng ",
		"Qin ",
		"Qian ",
		"Bei ",
		"Diao ",
		"Lu ",
		"Que ",
		"Jian ",
		"Ju ",
		"Tu ",
		"Ya ",
		"Yuan ",
		"Qi ",
		"Li ",
		"Ye ",
		"Zhui ",
		"Kong ",
		"Zhui ",
		"Kun ",
		"Sheng ",
		"Qi ",
		"Jing ",
		"Yi ",
		"Yi ",
		"Jing ",
		"Zi ",
		"Lai ",
		"Dong ",
		"Qi ",
		"Chun ",
		"Geng ",
		"Ju ",
		"Qu ",
		"Isuka ",
		"Kikuitadaki ",
		"Ji ",
		"Shu ",
		"[?] ",
		"Chi ",
		"Miao ",
		"Rou ",
		"An ",
		"Qiu ",
		"Ti ",
		"Hu ",
		"Ti ",
		"E ",
		"Jie ",
		"Mao ",
		"Fu ",
		"Chun ",
		"Tu ",
		"Yan ",
		"He ",
		"Yuan ",
		"Pian ",
		"Yun ",
		"Mei ",
		"Hu ",
		"Ying ",
		"Dun ",
		"Mu ",
		"Ju ",
		"Tsugumi ",
		"Cang ",
		"Fang ",
		"Gu ",
		"Ying ",
		"Yuan ",
		"Xuan ",
		"Weng ",
		"Shi ",
		"He ",
		"Chu ",
		"Tang ",
		"Xia ",
		"Ruo ",
		"Liu ",
		"Ji ",
		"Gu ",
		"Jian ",
		"Zhun ",
		"Han ",
		"Zi ",
		"Zi ",
		"Ni ",
		"Yao ",
		"Yan ",
		"Ji ",
		"Li ",
		"Tian ",
		"Kou ",
		"Ti ",
		"Ti ",
		"Ni ",
		"Tu ",
		"Ma ",
		"Jiao ",
		"Gao ",
		"Tian ",
		"Chen ",
		"Li ",
		"Zhuan ",
		"Zhe ",
		"Ao ",
		"Yao ",
		"Yi ",
		"Ou ",
		"Chi ",
		"Zhi ",
		"Liao ",
		"Rong ",
		"Lou ",
		"Bi ",
		"Shuang ",
		"Zhuo ",
		"Yu ",
		"Wu ",
		"Jue ",
		"Yin ",
		"Quan ",
		"Si ",
		"Jiao ",
		"Yi ",
		"Hua ",
		"Bi ",
		"Ying ",
		"Su ",
		"Huang ",
		"Fan ",
		"Jiao ",
		"Liao ",
		"Yan ",
		"Kao ",
		"Jiu ",
		"Xian ",
		"Xian ",
		"Tu ",
		"Mai ",
		"Zun ",
		"Yu ",
		"Ying ",
		"Lu ",
		"Tuan ",
		"Xian ",
		"Xue ",
		"Yi ",
		"Pi "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x9e.js
var require_x9e = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Shu ",
		"Luo ",
		"Qi ",
		"Yi ",
		"Ji ",
		"Zhe ",
		"Yu ",
		"Zhan ",
		"Ye ",
		"Yang ",
		"Pi ",
		"Ning ",
		"Huo ",
		"Mi ",
		"Ying ",
		"Meng ",
		"Di ",
		"Yue ",
		"Yu ",
		"Lei ",
		"Bao ",
		"Lu ",
		"He ",
		"Long ",
		"Shuang ",
		"Yue ",
		"Ying ",
		"Guan ",
		"Qu ",
		"Li ",
		"Luan ",
		"Niao ",
		"Jiu ",
		"Ji ",
		"Yuan ",
		"Ming ",
		"Shi ",
		"Ou ",
		"Ya ",
		"Cang ",
		"Bao ",
		"Zhen ",
		"Gu ",
		"Dong ",
		"Lu ",
		"Ya ",
		"Xiao ",
		"Yang ",
		"Ling ",
		"Zhi ",
		"Qu ",
		"Yuan ",
		"Xue ",
		"Tuo ",
		"Si ",
		"Zhi ",
		"Er ",
		"Gua ",
		"Xiu ",
		"Heng ",
		"Zhou ",
		"Ge ",
		"Luan ",
		"Hong ",
		"Wu ",
		"Bo ",
		"Li ",
		"Juan ",
		"Hu ",
		"E ",
		"Yu ",
		"Xian ",
		"Ti ",
		"Wu ",
		"Que ",
		"Miao ",
		"An ",
		"Kun ",
		"Bei ",
		"Peng ",
		"Qian ",
		"Chun ",
		"Geng ",
		"Yuan ",
		"Su ",
		"Hu ",
		"He ",
		"E ",
		"Gu ",
		"Qiu ",
		"Zi ",
		"Mei ",
		"Mu ",
		"Ni ",
		"Yao ",
		"Weng ",
		"Liu ",
		"Ji ",
		"Ni ",
		"Jian ",
		"He ",
		"Yi ",
		"Ying ",
		"Zhe ",
		"Liao ",
		"Liao ",
		"Jiao ",
		"Jiu ",
		"Yu ",
		"Lu ",
		"Xuan ",
		"Zhan ",
		"Ying ",
		"Huo ",
		"Meng ",
		"Guan ",
		"Shuang ",
		"Lu ",
		"Jin ",
		"Ling ",
		"Jian ",
		"Xian ",
		"Cuo ",
		"Jian ",
		"Jian ",
		"Yan ",
		"Cuo ",
		"Lu ",
		"You ",
		"Cu ",
		"Ji ",
		"Biao ",
		"Cu ",
		"Biao ",
		"Zhu ",
		"Jun ",
		"Zhu ",
		"Jian ",
		"Mi ",
		"Mi ",
		"Wu ",
		"Liu ",
		"Chen ",
		"Jun ",
		"Lin ",
		"Ni ",
		"Qi ",
		"Lu ",
		"Jiu ",
		"Jun ",
		"Jing ",
		"Li ",
		"Xiang ",
		"Yan ",
		"Jia ",
		"Mi ",
		"Li ",
		"She ",
		"Zhang ",
		"Lin ",
		"Jing ",
		"Ji ",
		"Ling ",
		"Yan ",
		"Cu ",
		"Mai ",
		"Mai ",
		"Ge ",
		"Chao ",
		"Fu ",
		"Mian ",
		"Mian ",
		"Fu ",
		"Pao ",
		"Qu ",
		"Qu ",
		"Mou ",
		"Fu ",
		"Xian ",
		"Lai ",
		"Qu ",
		"Mian ",
		"[?] ",
		"Feng ",
		"Fu ",
		"Qu ",
		"Mian ",
		"Ma ",
		"Mo ",
		"Mo ",
		"Hui ",
		"Ma ",
		"Zou ",
		"Nen ",
		"Fen ",
		"Huang ",
		"Huang ",
		"Jin ",
		"Guang ",
		"Tian ",
		"Tou ",
		"Heng ",
		"Xi ",
		"Kuang ",
		"Heng ",
		"Shu ",
		"Li ",
		"Nian ",
		"Chi ",
		"Hei ",
		"Hei ",
		"Yi ",
		"Qian ",
		"Dan ",
		"Xi ",
		"Tuan ",
		"Mo ",
		"Mo ",
		"Qian ",
		"Dai ",
		"Chu ",
		"You ",
		"Dian ",
		"Yi ",
		"Xia ",
		"Yan ",
		"Qu ",
		"Mei ",
		"Yan ",
		"Jing ",
		"Yu ",
		"Li ",
		"Dang ",
		"Du ",
		"Can ",
		"Yin ",
		"An ",
		"Yan ",
		"Tan ",
		"An ",
		"Zhen ",
		"Dai ",
		"Can ",
		"Yi ",
		"Mei ",
		"Dan ",
		"Yan ",
		"Du ",
		"Lu ",
		"Zhi ",
		"Fen ",
		"Fu ",
		"Fu ",
		"Min ",
		"Min ",
		"Yuan "
	];
}));
//#endregion
//#region node_modules/unidecode/data/x9f.js
var require_x9f = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Cu ",
		"Qu ",
		"Chao ",
		"Wa ",
		"Zhu ",
		"Zhi ",
		"Mang ",
		"Ao ",
		"Bie ",
		"Tuo ",
		"Bi ",
		"Yuan ",
		"Chao ",
		"Tuo ",
		"Ding ",
		"Mi ",
		"Nai ",
		"Ding ",
		"Zi ",
		"Gu ",
		"Gu ",
		"Dong ",
		"Fen ",
		"Tao ",
		"Yuan ",
		"Pi ",
		"Chang ",
		"Gao ",
		"Qi ",
		"Yuan ",
		"Tang ",
		"Teng ",
		"Shu ",
		"Shu ",
		"Fen ",
		"Fei ",
		"Wen ",
		"Ba ",
		"Diao ",
		"Tuo ",
		"Tong ",
		"Qu ",
		"Sheng ",
		"Shi ",
		"You ",
		"Shi ",
		"Ting ",
		"Wu ",
		"Nian ",
		"Jing ",
		"Hun ",
		"Ju ",
		"Yan ",
		"Tu ",
		"Ti ",
		"Xi ",
		"Xian ",
		"Yan ",
		"Lei ",
		"Bi ",
		"Yao ",
		"Qiu ",
		"Han ",
		"Wu ",
		"Wu ",
		"Hou ",
		"Xi ",
		"Ge ",
		"Zha ",
		"Xiu ",
		"Weng ",
		"Zha ",
		"Nong ",
		"Nang ",
		"Qi ",
		"Zhai ",
		"Ji ",
		"Zi ",
		"Ji ",
		"Ji ",
		"Qi ",
		"Ji ",
		"Chi ",
		"Chen ",
		"Chen ",
		"He ",
		"Ya ",
		"Ken ",
		"Xie ",
		"Pao ",
		"Cuo ",
		"Shi ",
		"Zi ",
		"Chi ",
		"Nian ",
		"Ju ",
		"Tiao ",
		"Ling ",
		"Ling ",
		"Chu ",
		"Quan ",
		"Xie ",
		"Ken ",
		"Nie ",
		"Jiu ",
		"Yao ",
		"Chuo ",
		"Kun ",
		"Yu ",
		"Chu ",
		"Yi ",
		"Ni ",
		"Cuo ",
		"Zou ",
		"Qu ",
		"Nen ",
		"Xian ",
		"Ou ",
		"E ",
		"Wo ",
		"Yi ",
		"Chuo ",
		"Zou ",
		"Dian ",
		"Chu ",
		"Jin ",
		"Ya ",
		"Chi ",
		"Chen ",
		"He ",
		"Ken ",
		"Ju ",
		"Ling ",
		"Pao ",
		"Tiao ",
		"Zi ",
		"Ken ",
		"Yu ",
		"Chuo ",
		"Qu ",
		"Wo ",
		"Long ",
		"Pang ",
		"Gong ",
		"Pang ",
		"Yan ",
		"Long ",
		"Long ",
		"Gong ",
		"Kan ",
		"Ta ",
		"Ling ",
		"Ta ",
		"Long ",
		"Gong ",
		"Kan ",
		"Gui ",
		"Qiu ",
		"Bie ",
		"Gui ",
		"Yue ",
		"Chui ",
		"He ",
		"Jue ",
		"Xie ",
		"Yu ",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xa0.js
var require_xa0 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"it",
		"ix",
		"i",
		"ip",
		"iet",
		"iex",
		"ie",
		"iep",
		"at",
		"ax",
		"a",
		"ap",
		"uox",
		"uo",
		"uop",
		"ot",
		"ox",
		"o",
		"op",
		"ex",
		"e",
		"wu",
		"bit",
		"bix",
		"bi",
		"bip",
		"biet",
		"biex",
		"bie",
		"biep",
		"bat",
		"bax",
		"ba",
		"bap",
		"buox",
		"buo",
		"buop",
		"bot",
		"box",
		"bo",
		"bop",
		"bex",
		"be",
		"bep",
		"but",
		"bux",
		"bu",
		"bup",
		"burx",
		"bur",
		"byt",
		"byx",
		"by",
		"byp",
		"byrx",
		"byr",
		"pit",
		"pix",
		"pi",
		"pip",
		"piex",
		"pie",
		"piep",
		"pat",
		"pax",
		"pa",
		"pap",
		"puox",
		"puo",
		"puop",
		"pot",
		"pox",
		"po",
		"pop",
		"put",
		"pux",
		"pu",
		"pup",
		"purx",
		"pur",
		"pyt",
		"pyx",
		"py",
		"pyp",
		"pyrx",
		"pyr",
		"bbit",
		"bbix",
		"bbi",
		"bbip",
		"bbiet",
		"bbiex",
		"bbie",
		"bbiep",
		"bbat",
		"bbax",
		"bba",
		"bbap",
		"bbuox",
		"bbuo",
		"bbuop",
		"bbot",
		"bbox",
		"bbo",
		"bbop",
		"bbex",
		"bbe",
		"bbep",
		"bbut",
		"bbux",
		"bbu",
		"bbup",
		"bburx",
		"bbur",
		"bbyt",
		"bbyx",
		"bby",
		"bbyp",
		"nbit",
		"nbix",
		"nbi",
		"nbip",
		"nbiex",
		"nbie",
		"nbiep",
		"nbat",
		"nbax",
		"nba",
		"nbap",
		"nbot",
		"nbox",
		"nbo",
		"nbop",
		"nbut",
		"nbux",
		"nbu",
		"nbup",
		"nburx",
		"nbur",
		"nbyt",
		"nbyx",
		"nby",
		"nbyp",
		"nbyrx",
		"nbyr",
		"hmit",
		"hmix",
		"hmi",
		"hmip",
		"hmiex",
		"hmie",
		"hmiep",
		"hmat",
		"hmax",
		"hma",
		"hmap",
		"hmuox",
		"hmuo",
		"hmuop",
		"hmot",
		"hmox",
		"hmo",
		"hmop",
		"hmut",
		"hmux",
		"hmu",
		"hmup",
		"hmurx",
		"hmur",
		"hmyx",
		"hmy",
		"hmyp",
		"hmyrx",
		"hmyr",
		"mit",
		"mix",
		"mi",
		"mip",
		"miex",
		"mie",
		"miep",
		"mat",
		"max",
		"ma",
		"map",
		"muot",
		"muox",
		"muo",
		"muop",
		"mot",
		"mox",
		"mo",
		"mop",
		"mex",
		"me",
		"mut",
		"mux",
		"mu",
		"mup",
		"murx",
		"mur",
		"myt",
		"myx",
		"my",
		"myp",
		"fit",
		"fix",
		"fi",
		"fip",
		"fat",
		"fax",
		"fa",
		"fap",
		"fox",
		"fo",
		"fop",
		"fut",
		"fux",
		"fu",
		"fup",
		"furx",
		"fur",
		"fyt",
		"fyx",
		"fy",
		"fyp",
		"vit",
		"vix",
		"vi",
		"vip",
		"viet",
		"viex",
		"vie",
		"viep",
		"vat",
		"vax",
		"va",
		"vap",
		"vot",
		"vox",
		"vo",
		"vop",
		"vex",
		"vep",
		"vut",
		"vux",
		"vu",
		"vup",
		"vurx",
		"vur",
		"vyt",
		"vyx",
		"vy",
		"vyp",
		"vyrx",
		"vyr"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xa1.js
var require_xa1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"dit",
		"dix",
		"di",
		"dip",
		"diex",
		"die",
		"diep",
		"dat",
		"dax",
		"da",
		"dap",
		"duox",
		"duo",
		"dot",
		"dox",
		"do",
		"dop",
		"dex",
		"de",
		"dep",
		"dut",
		"dux",
		"du",
		"dup",
		"durx",
		"dur",
		"tit",
		"tix",
		"ti",
		"tip",
		"tiex",
		"tie",
		"tiep",
		"tat",
		"tax",
		"ta",
		"tap",
		"tuot",
		"tuox",
		"tuo",
		"tuop",
		"tot",
		"tox",
		"to",
		"top",
		"tex",
		"te",
		"tep",
		"tut",
		"tux",
		"tu",
		"tup",
		"turx",
		"tur",
		"ddit",
		"ddix",
		"ddi",
		"ddip",
		"ddiex",
		"ddie",
		"ddiep",
		"ddat",
		"ddax",
		"dda",
		"ddap",
		"dduox",
		"dduo",
		"dduop",
		"ddot",
		"ddox",
		"ddo",
		"ddop",
		"ddex",
		"dde",
		"ddep",
		"ddut",
		"ddux",
		"ddu",
		"ddup",
		"ddurx",
		"ddur",
		"ndit",
		"ndix",
		"ndi",
		"ndip",
		"ndiex",
		"ndie",
		"ndat",
		"ndax",
		"nda",
		"ndap",
		"ndot",
		"ndox",
		"ndo",
		"ndop",
		"ndex",
		"nde",
		"ndep",
		"ndut",
		"ndux",
		"ndu",
		"ndup",
		"ndurx",
		"ndur",
		"hnit",
		"hnix",
		"hni",
		"hnip",
		"hniet",
		"hniex",
		"hnie",
		"hniep",
		"hnat",
		"hnax",
		"hna",
		"hnap",
		"hnuox",
		"hnuo",
		"hnot",
		"hnox",
		"hnop",
		"hnex",
		"hne",
		"hnep",
		"hnut",
		"nit",
		"nix",
		"ni",
		"nip",
		"niex",
		"nie",
		"niep",
		"nax",
		"na",
		"nap",
		"nuox",
		"nuo",
		"nuop",
		"not",
		"nox",
		"no",
		"nop",
		"nex",
		"ne",
		"nep",
		"nut",
		"nux",
		"nu",
		"nup",
		"nurx",
		"nur",
		"hlit",
		"hlix",
		"hli",
		"hlip",
		"hliex",
		"hlie",
		"hliep",
		"hlat",
		"hlax",
		"hla",
		"hlap",
		"hluox",
		"hluo",
		"hluop",
		"hlox",
		"hlo",
		"hlop",
		"hlex",
		"hle",
		"hlep",
		"hlut",
		"hlux",
		"hlu",
		"hlup",
		"hlurx",
		"hlur",
		"hlyt",
		"hlyx",
		"hly",
		"hlyp",
		"hlyrx",
		"hlyr",
		"lit",
		"lix",
		"li",
		"lip",
		"liet",
		"liex",
		"lie",
		"liep",
		"lat",
		"lax",
		"la",
		"lap",
		"luot",
		"luox",
		"luo",
		"luop",
		"lot",
		"lox",
		"lo",
		"lop",
		"lex",
		"le",
		"lep",
		"lut",
		"lux",
		"lu",
		"lup",
		"lurx",
		"lur",
		"lyt",
		"lyx",
		"ly",
		"lyp",
		"lyrx",
		"lyr",
		"git",
		"gix",
		"gi",
		"gip",
		"giet",
		"giex",
		"gie",
		"giep",
		"gat",
		"gax",
		"ga",
		"gap",
		"guot",
		"guox",
		"guo",
		"guop",
		"got",
		"gox",
		"go",
		"gop",
		"get",
		"gex",
		"ge",
		"gep",
		"gut",
		"gux",
		"gu",
		"gup",
		"gurx",
		"gur",
		"kit",
		"kix",
		"ki",
		"kip",
		"kiex",
		"kie",
		"kiep",
		"kat"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xa2.js
var require_xa2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"kax",
		"ka",
		"kap",
		"kuox",
		"kuo",
		"kuop",
		"kot",
		"kox",
		"ko",
		"kop",
		"ket",
		"kex",
		"ke",
		"kep",
		"kut",
		"kux",
		"ku",
		"kup",
		"kurx",
		"kur",
		"ggit",
		"ggix",
		"ggi",
		"ggiex",
		"ggie",
		"ggiep",
		"ggat",
		"ggax",
		"gga",
		"ggap",
		"gguot",
		"gguox",
		"gguo",
		"gguop",
		"ggot",
		"ggox",
		"ggo",
		"ggop",
		"gget",
		"ggex",
		"gge",
		"ggep",
		"ggut",
		"ggux",
		"ggu",
		"ggup",
		"ggurx",
		"ggur",
		"mgiex",
		"mgie",
		"mgat",
		"mgax",
		"mga",
		"mgap",
		"mguox",
		"mguo",
		"mguop",
		"mgot",
		"mgox",
		"mgo",
		"mgop",
		"mgex",
		"mge",
		"mgep",
		"mgut",
		"mgux",
		"mgu",
		"mgup",
		"mgurx",
		"mgur",
		"hxit",
		"hxix",
		"hxi",
		"hxip",
		"hxiet",
		"hxiex",
		"hxie",
		"hxiep",
		"hxat",
		"hxax",
		"hxa",
		"hxap",
		"hxuot",
		"hxuox",
		"hxuo",
		"hxuop",
		"hxot",
		"hxox",
		"hxo",
		"hxop",
		"hxex",
		"hxe",
		"hxep",
		"ngiex",
		"ngie",
		"ngiep",
		"ngat",
		"ngax",
		"nga",
		"ngap",
		"nguot",
		"nguox",
		"nguo",
		"ngot",
		"ngox",
		"ngo",
		"ngop",
		"ngex",
		"nge",
		"ngep",
		"hit",
		"hiex",
		"hie",
		"hat",
		"hax",
		"ha",
		"hap",
		"huot",
		"huox",
		"huo",
		"huop",
		"hot",
		"hox",
		"ho",
		"hop",
		"hex",
		"he",
		"hep",
		"wat",
		"wax",
		"wa",
		"wap",
		"wuox",
		"wuo",
		"wuop",
		"wox",
		"wo",
		"wop",
		"wex",
		"we",
		"wep",
		"zit",
		"zix",
		"zi",
		"zip",
		"ziex",
		"zie",
		"ziep",
		"zat",
		"zax",
		"za",
		"zap",
		"zuox",
		"zuo",
		"zuop",
		"zot",
		"zox",
		"zo",
		"zop",
		"zex",
		"ze",
		"zep",
		"zut",
		"zux",
		"zu",
		"zup",
		"zurx",
		"zur",
		"zyt",
		"zyx",
		"zy",
		"zyp",
		"zyrx",
		"zyr",
		"cit",
		"cix",
		"ci",
		"cip",
		"ciet",
		"ciex",
		"cie",
		"ciep",
		"cat",
		"cax",
		"ca",
		"cap",
		"cuox",
		"cuo",
		"cuop",
		"cot",
		"cox",
		"co",
		"cop",
		"cex",
		"ce",
		"cep",
		"cut",
		"cux",
		"cu",
		"cup",
		"curx",
		"cur",
		"cyt",
		"cyx",
		"cy",
		"cyp",
		"cyrx",
		"cyr",
		"zzit",
		"zzix",
		"zzi",
		"zzip",
		"zziet",
		"zziex",
		"zzie",
		"zziep",
		"zzat",
		"zzax",
		"zza",
		"zzap",
		"zzox",
		"zzo",
		"zzop",
		"zzex",
		"zze",
		"zzep",
		"zzux",
		"zzu",
		"zzup",
		"zzurx",
		"zzur",
		"zzyt",
		"zzyx",
		"zzy",
		"zzyp",
		"zzyrx",
		"zzyr",
		"nzit",
		"nzix",
		"nzi",
		"nzip",
		"nziex",
		"nzie",
		"nziep",
		"nzat",
		"nzax",
		"nza",
		"nzap",
		"nzuox",
		"nzuo",
		"nzox",
		"nzop",
		"nzex",
		"nze",
		"nzux",
		"nzu"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xa3.js
var require_xa3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"nzup",
		"nzurx",
		"nzur",
		"nzyt",
		"nzyx",
		"nzy",
		"nzyp",
		"nzyrx",
		"nzyr",
		"sit",
		"six",
		"si",
		"sip",
		"siex",
		"sie",
		"siep",
		"sat",
		"sax",
		"sa",
		"sap",
		"suox",
		"suo",
		"suop",
		"sot",
		"sox",
		"so",
		"sop",
		"sex",
		"se",
		"sep",
		"sut",
		"sux",
		"su",
		"sup",
		"surx",
		"sur",
		"syt",
		"syx",
		"sy",
		"syp",
		"syrx",
		"syr",
		"ssit",
		"ssix",
		"ssi",
		"ssip",
		"ssiex",
		"ssie",
		"ssiep",
		"ssat",
		"ssax",
		"ssa",
		"ssap",
		"ssot",
		"ssox",
		"sso",
		"ssop",
		"ssex",
		"sse",
		"ssep",
		"ssut",
		"ssux",
		"ssu",
		"ssup",
		"ssyt",
		"ssyx",
		"ssy",
		"ssyp",
		"ssyrx",
		"ssyr",
		"zhat",
		"zhax",
		"zha",
		"zhap",
		"zhuox",
		"zhuo",
		"zhuop",
		"zhot",
		"zhox",
		"zho",
		"zhop",
		"zhet",
		"zhex",
		"zhe",
		"zhep",
		"zhut",
		"zhux",
		"zhu",
		"zhup",
		"zhurx",
		"zhur",
		"zhyt",
		"zhyx",
		"zhy",
		"zhyp",
		"zhyrx",
		"zhyr",
		"chat",
		"chax",
		"cha",
		"chap",
		"chuot",
		"chuox",
		"chuo",
		"chuop",
		"chot",
		"chox",
		"cho",
		"chop",
		"chet",
		"chex",
		"che",
		"chep",
		"chux",
		"chu",
		"chup",
		"churx",
		"chur",
		"chyt",
		"chyx",
		"chy",
		"chyp",
		"chyrx",
		"chyr",
		"rrax",
		"rra",
		"rruox",
		"rruo",
		"rrot",
		"rrox",
		"rro",
		"rrop",
		"rret",
		"rrex",
		"rre",
		"rrep",
		"rrut",
		"rrux",
		"rru",
		"rrup",
		"rrurx",
		"rrur",
		"rryt",
		"rryx",
		"rry",
		"rryp",
		"rryrx",
		"rryr",
		"nrat",
		"nrax",
		"nra",
		"nrap",
		"nrox",
		"nro",
		"nrop",
		"nret",
		"nrex",
		"nre",
		"nrep",
		"nrut",
		"nrux",
		"nru",
		"nrup",
		"nrurx",
		"nrur",
		"nryt",
		"nryx",
		"nry",
		"nryp",
		"nryrx",
		"nryr",
		"shat",
		"shax",
		"sha",
		"shap",
		"shuox",
		"shuo",
		"shuop",
		"shot",
		"shox",
		"sho",
		"shop",
		"shet",
		"shex",
		"she",
		"shep",
		"shut",
		"shux",
		"shu",
		"shup",
		"shurx",
		"shur",
		"shyt",
		"shyx",
		"shy",
		"shyp",
		"shyrx",
		"shyr",
		"rat",
		"rax",
		"ra",
		"rap",
		"ruox",
		"ruo",
		"ruop",
		"rot",
		"rox",
		"ro",
		"rop",
		"rex",
		"re",
		"rep",
		"rut",
		"rux",
		"ru",
		"rup",
		"rurx",
		"rur",
		"ryt",
		"ryx",
		"ry",
		"ryp",
		"ryrx",
		"ryr",
		"jit",
		"jix",
		"ji",
		"jip",
		"jiet",
		"jiex",
		"jie",
		"jiep",
		"juot",
		"juox",
		"juo",
		"juop",
		"jot",
		"jox",
		"jo",
		"jop",
		"jut",
		"jux",
		"ju",
		"jup",
		"jurx",
		"jur",
		"jyt",
		"jyx",
		"jy",
		"jyp",
		"jyrx",
		"jyr",
		"qit",
		"qix",
		"qi",
		"qip"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xa4.js
var require_xa4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"qiet",
		"qiex",
		"qie",
		"qiep",
		"quot",
		"quox",
		"quo",
		"quop",
		"qot",
		"qox",
		"qo",
		"qop",
		"qut",
		"qux",
		"qu",
		"qup",
		"qurx",
		"qur",
		"qyt",
		"qyx",
		"qy",
		"qyp",
		"qyrx",
		"qyr",
		"jjit",
		"jjix",
		"jji",
		"jjip",
		"jjiet",
		"jjiex",
		"jjie",
		"jjiep",
		"jjuox",
		"jjuo",
		"jjuop",
		"jjot",
		"jjox",
		"jjo",
		"jjop",
		"jjut",
		"jjux",
		"jju",
		"jjup",
		"jjurx",
		"jjur",
		"jjyt",
		"jjyx",
		"jjy",
		"jjyp",
		"njit",
		"njix",
		"nji",
		"njip",
		"njiet",
		"njiex",
		"njie",
		"njiep",
		"njuox",
		"njuo",
		"njot",
		"njox",
		"njo",
		"njop",
		"njux",
		"nju",
		"njup",
		"njurx",
		"njur",
		"njyt",
		"njyx",
		"njy",
		"njyp",
		"njyrx",
		"njyr",
		"nyit",
		"nyix",
		"nyi",
		"nyip",
		"nyiet",
		"nyiex",
		"nyie",
		"nyiep",
		"nyuox",
		"nyuo",
		"nyuop",
		"nyot",
		"nyox",
		"nyo",
		"nyop",
		"nyut",
		"nyux",
		"nyu",
		"nyup",
		"xit",
		"xix",
		"xi",
		"xip",
		"xiet",
		"xiex",
		"xie",
		"xiep",
		"xuox",
		"xuo",
		"xot",
		"xox",
		"xo",
		"xop",
		"xyt",
		"xyx",
		"xy",
		"xyp",
		"xyrx",
		"xyr",
		"yit",
		"yix",
		"yi",
		"yip",
		"yiet",
		"yiex",
		"yie",
		"yiep",
		"yuot",
		"yuox",
		"yuo",
		"yuop",
		"yot",
		"yox",
		"yo",
		"yop",
		"yut",
		"yux",
		"yu",
		"yup",
		"yurx",
		"yur",
		"yyt",
		"yyx",
		"yy",
		"yyp",
		"yyrx",
		"yyr",
		"[?]",
		"[?]",
		"[?]",
		"Qot",
		"Li",
		"Kit",
		"Nyip",
		"Cyp",
		"Ssi",
		"Ggop",
		"Gep",
		"Mi",
		"Hxit",
		"Lyr",
		"Bbut",
		"Mop",
		"Yo",
		"Put",
		"Hxuo",
		"Tat",
		"Ga",
		"[?]",
		"[?]",
		"Ddur",
		"Bur",
		"Gguo",
		"Nyop",
		"Tu",
		"Op",
		"Jjut",
		"Zot",
		"Pyt",
		"Hmo",
		"Yit",
		"Vur",
		"Shy",
		"Vep",
		"Za",
		"Jo",
		"[?]",
		"Jjy",
		"Got",
		"Jjie",
		"Wo",
		"Du",
		"Shur",
		"Lie",
		"Cy",
		"Cuop",
		"Cip",
		"Hxop",
		"Shat",
		"[?]",
		"Shop",
		"Che",
		"Zziet",
		"[?]",
		"Ke",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xac.js
var require_xac = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ga",
		"gag",
		"gagg",
		"gags",
		"gan",
		"ganj",
		"ganh",
		"gad",
		"gal",
		"galg",
		"galm",
		"galb",
		"gals",
		"galt",
		"galp",
		"galh",
		"gam",
		"gab",
		"gabs",
		"gas",
		"gass",
		"gang",
		"gaj",
		"gac",
		"gak",
		"gat",
		"gap",
		"gah",
		"gae",
		"gaeg",
		"gaegg",
		"gaegs",
		"gaen",
		"gaenj",
		"gaenh",
		"gaed",
		"gael",
		"gaelg",
		"gaelm",
		"gaelb",
		"gaels",
		"gaelt",
		"gaelp",
		"gaelh",
		"gaem",
		"gaeb",
		"gaebs",
		"gaes",
		"gaess",
		"gaeng",
		"gaej",
		"gaec",
		"gaek",
		"gaet",
		"gaep",
		"gaeh",
		"gya",
		"gyag",
		"gyagg",
		"gyags",
		"gyan",
		"gyanj",
		"gyanh",
		"gyad",
		"gyal",
		"gyalg",
		"gyalm",
		"gyalb",
		"gyals",
		"gyalt",
		"gyalp",
		"gyalh",
		"gyam",
		"gyab",
		"gyabs",
		"gyas",
		"gyass",
		"gyang",
		"gyaj",
		"gyac",
		"gyak",
		"gyat",
		"gyap",
		"gyah",
		"gyae",
		"gyaeg",
		"gyaegg",
		"gyaegs",
		"gyaen",
		"gyaenj",
		"gyaenh",
		"gyaed",
		"gyael",
		"gyaelg",
		"gyaelm",
		"gyaelb",
		"gyaels",
		"gyaelt",
		"gyaelp",
		"gyaelh",
		"gyaem",
		"gyaeb",
		"gyaebs",
		"gyaes",
		"gyaess",
		"gyaeng",
		"gyaej",
		"gyaec",
		"gyaek",
		"gyaet",
		"gyaep",
		"gyaeh",
		"geo",
		"geog",
		"geogg",
		"geogs",
		"geon",
		"geonj",
		"geonh",
		"geod",
		"geol",
		"geolg",
		"geolm",
		"geolb",
		"geols",
		"geolt",
		"geolp",
		"geolh",
		"geom",
		"geob",
		"geobs",
		"geos",
		"geoss",
		"geong",
		"geoj",
		"geoc",
		"geok",
		"geot",
		"geop",
		"geoh",
		"ge",
		"geg",
		"gegg",
		"gegs",
		"gen",
		"genj",
		"genh",
		"ged",
		"gel",
		"gelg",
		"gelm",
		"gelb",
		"gels",
		"gelt",
		"gelp",
		"gelh",
		"gem",
		"geb",
		"gebs",
		"ges",
		"gess",
		"geng",
		"gej",
		"gec",
		"gek",
		"get",
		"gep",
		"geh",
		"gyeo",
		"gyeog",
		"gyeogg",
		"gyeogs",
		"gyeon",
		"gyeonj",
		"gyeonh",
		"gyeod",
		"gyeol",
		"gyeolg",
		"gyeolm",
		"gyeolb",
		"gyeols",
		"gyeolt",
		"gyeolp",
		"gyeolh",
		"gyeom",
		"gyeob",
		"gyeobs",
		"gyeos",
		"gyeoss",
		"gyeong",
		"gyeoj",
		"gyeoc",
		"gyeok",
		"gyeot",
		"gyeop",
		"gyeoh",
		"gye",
		"gyeg",
		"gyegg",
		"gyegs",
		"gyen",
		"gyenj",
		"gyenh",
		"gyed",
		"gyel",
		"gyelg",
		"gyelm",
		"gyelb",
		"gyels",
		"gyelt",
		"gyelp",
		"gyelh",
		"gyem",
		"gyeb",
		"gyebs",
		"gyes",
		"gyess",
		"gyeng",
		"gyej",
		"gyec",
		"gyek",
		"gyet",
		"gyep",
		"gyeh",
		"go",
		"gog",
		"gogg",
		"gogs",
		"gon",
		"gonj",
		"gonh",
		"god",
		"gol",
		"golg",
		"golm",
		"golb",
		"gols",
		"golt",
		"golp",
		"golh",
		"gom",
		"gob",
		"gobs",
		"gos",
		"goss",
		"gong",
		"goj",
		"goc",
		"gok",
		"got",
		"gop",
		"goh",
		"gwa",
		"gwag",
		"gwagg",
		"gwags"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xad.js
var require_xad = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"gwan",
		"gwanj",
		"gwanh",
		"gwad",
		"gwal",
		"gwalg",
		"gwalm",
		"gwalb",
		"gwals",
		"gwalt",
		"gwalp",
		"gwalh",
		"gwam",
		"gwab",
		"gwabs",
		"gwas",
		"gwass",
		"gwang",
		"gwaj",
		"gwac",
		"gwak",
		"gwat",
		"gwap",
		"gwah",
		"gwae",
		"gwaeg",
		"gwaegg",
		"gwaegs",
		"gwaen",
		"gwaenj",
		"gwaenh",
		"gwaed",
		"gwael",
		"gwaelg",
		"gwaelm",
		"gwaelb",
		"gwaels",
		"gwaelt",
		"gwaelp",
		"gwaelh",
		"gwaem",
		"gwaeb",
		"gwaebs",
		"gwaes",
		"gwaess",
		"gwaeng",
		"gwaej",
		"gwaec",
		"gwaek",
		"gwaet",
		"gwaep",
		"gwaeh",
		"goe",
		"goeg",
		"goegg",
		"goegs",
		"goen",
		"goenj",
		"goenh",
		"goed",
		"goel",
		"goelg",
		"goelm",
		"goelb",
		"goels",
		"goelt",
		"goelp",
		"goelh",
		"goem",
		"goeb",
		"goebs",
		"goes",
		"goess",
		"goeng",
		"goej",
		"goec",
		"goek",
		"goet",
		"goep",
		"goeh",
		"gyo",
		"gyog",
		"gyogg",
		"gyogs",
		"gyon",
		"gyonj",
		"gyonh",
		"gyod",
		"gyol",
		"gyolg",
		"gyolm",
		"gyolb",
		"gyols",
		"gyolt",
		"gyolp",
		"gyolh",
		"gyom",
		"gyob",
		"gyobs",
		"gyos",
		"gyoss",
		"gyong",
		"gyoj",
		"gyoc",
		"gyok",
		"gyot",
		"gyop",
		"gyoh",
		"gu",
		"gug",
		"gugg",
		"gugs",
		"gun",
		"gunj",
		"gunh",
		"gud",
		"gul",
		"gulg",
		"gulm",
		"gulb",
		"guls",
		"gult",
		"gulp",
		"gulh",
		"gum",
		"gub",
		"gubs",
		"gus",
		"guss",
		"gung",
		"guj",
		"guc",
		"guk",
		"gut",
		"gup",
		"guh",
		"gweo",
		"gweog",
		"gweogg",
		"gweogs",
		"gweon",
		"gweonj",
		"gweonh",
		"gweod",
		"gweol",
		"gweolg",
		"gweolm",
		"gweolb",
		"gweols",
		"gweolt",
		"gweolp",
		"gweolh",
		"gweom",
		"gweob",
		"gweobs",
		"gweos",
		"gweoss",
		"gweong",
		"gweoj",
		"gweoc",
		"gweok",
		"gweot",
		"gweop",
		"gweoh",
		"gwe",
		"gweg",
		"gwegg",
		"gwegs",
		"gwen",
		"gwenj",
		"gwenh",
		"gwed",
		"gwel",
		"gwelg",
		"gwelm",
		"gwelb",
		"gwels",
		"gwelt",
		"gwelp",
		"gwelh",
		"gwem",
		"gweb",
		"gwebs",
		"gwes",
		"gwess",
		"gweng",
		"gwej",
		"gwec",
		"gwek",
		"gwet",
		"gwep",
		"gweh",
		"gwi",
		"gwig",
		"gwigg",
		"gwigs",
		"gwin",
		"gwinj",
		"gwinh",
		"gwid",
		"gwil",
		"gwilg",
		"gwilm",
		"gwilb",
		"gwils",
		"gwilt",
		"gwilp",
		"gwilh",
		"gwim",
		"gwib",
		"gwibs",
		"gwis",
		"gwiss",
		"gwing",
		"gwij",
		"gwic",
		"gwik",
		"gwit",
		"gwip",
		"gwih",
		"gyu",
		"gyug",
		"gyugg",
		"gyugs",
		"gyun",
		"gyunj",
		"gyunh",
		"gyud",
		"gyul",
		"gyulg",
		"gyulm",
		"gyulb",
		"gyuls",
		"gyult",
		"gyulp",
		"gyulh",
		"gyum",
		"gyub",
		"gyubs",
		"gyus",
		"gyuss",
		"gyung",
		"gyuj",
		"gyuc",
		"gyuk",
		"gyut",
		"gyup",
		"gyuh",
		"geu",
		"geug",
		"geugg",
		"geugs",
		"geun",
		"geunj",
		"geunh",
		"geud"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xae.js
var require_xae = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"geul",
		"geulg",
		"geulm",
		"geulb",
		"geuls",
		"geult",
		"geulp",
		"geulh",
		"geum",
		"geub",
		"geubs",
		"geus",
		"geuss",
		"geung",
		"geuj",
		"geuc",
		"geuk",
		"geut",
		"geup",
		"geuh",
		"gyi",
		"gyig",
		"gyigg",
		"gyigs",
		"gyin",
		"gyinj",
		"gyinh",
		"gyid",
		"gyil",
		"gyilg",
		"gyilm",
		"gyilb",
		"gyils",
		"gyilt",
		"gyilp",
		"gyilh",
		"gyim",
		"gyib",
		"gyibs",
		"gyis",
		"gyiss",
		"gying",
		"gyij",
		"gyic",
		"gyik",
		"gyit",
		"gyip",
		"gyih",
		"gi",
		"gig",
		"gigg",
		"gigs",
		"gin",
		"ginj",
		"ginh",
		"gid",
		"gil",
		"gilg",
		"gilm",
		"gilb",
		"gils",
		"gilt",
		"gilp",
		"gilh",
		"gim",
		"gib",
		"gibs",
		"gis",
		"giss",
		"ging",
		"gij",
		"gic",
		"gik",
		"git",
		"gip",
		"gih",
		"gga",
		"ggag",
		"ggagg",
		"ggags",
		"ggan",
		"gganj",
		"gganh",
		"ggad",
		"ggal",
		"ggalg",
		"ggalm",
		"ggalb",
		"ggals",
		"ggalt",
		"ggalp",
		"ggalh",
		"ggam",
		"ggab",
		"ggabs",
		"ggas",
		"ggass",
		"ggang",
		"ggaj",
		"ggac",
		"ggak",
		"ggat",
		"ggap",
		"ggah",
		"ggae",
		"ggaeg",
		"ggaegg",
		"ggaegs",
		"ggaen",
		"ggaenj",
		"ggaenh",
		"ggaed",
		"ggael",
		"ggaelg",
		"ggaelm",
		"ggaelb",
		"ggaels",
		"ggaelt",
		"ggaelp",
		"ggaelh",
		"ggaem",
		"ggaeb",
		"ggaebs",
		"ggaes",
		"ggaess",
		"ggaeng",
		"ggaej",
		"ggaec",
		"ggaek",
		"ggaet",
		"ggaep",
		"ggaeh",
		"ggya",
		"ggyag",
		"ggyagg",
		"ggyags",
		"ggyan",
		"ggyanj",
		"ggyanh",
		"ggyad",
		"ggyal",
		"ggyalg",
		"ggyalm",
		"ggyalb",
		"ggyals",
		"ggyalt",
		"ggyalp",
		"ggyalh",
		"ggyam",
		"ggyab",
		"ggyabs",
		"ggyas",
		"ggyass",
		"ggyang",
		"ggyaj",
		"ggyac",
		"ggyak",
		"ggyat",
		"ggyap",
		"ggyah",
		"ggyae",
		"ggyaeg",
		"ggyaegg",
		"ggyaegs",
		"ggyaen",
		"ggyaenj",
		"ggyaenh",
		"ggyaed",
		"ggyael",
		"ggyaelg",
		"ggyaelm",
		"ggyaelb",
		"ggyaels",
		"ggyaelt",
		"ggyaelp",
		"ggyaelh",
		"ggyaem",
		"ggyaeb",
		"ggyaebs",
		"ggyaes",
		"ggyaess",
		"ggyaeng",
		"ggyaej",
		"ggyaec",
		"ggyaek",
		"ggyaet",
		"ggyaep",
		"ggyaeh",
		"ggeo",
		"ggeog",
		"ggeogg",
		"ggeogs",
		"ggeon",
		"ggeonj",
		"ggeonh",
		"ggeod",
		"ggeol",
		"ggeolg",
		"ggeolm",
		"ggeolb",
		"ggeols",
		"ggeolt",
		"ggeolp",
		"ggeolh",
		"ggeom",
		"ggeob",
		"ggeobs",
		"ggeos",
		"ggeoss",
		"ggeong",
		"ggeoj",
		"ggeoc",
		"ggeok",
		"ggeot",
		"ggeop",
		"ggeoh",
		"gge",
		"ggeg",
		"ggegg",
		"ggegs",
		"ggen",
		"ggenj",
		"ggenh",
		"gged",
		"ggel",
		"ggelg",
		"ggelm",
		"ggelb",
		"ggels",
		"ggelt",
		"ggelp",
		"ggelh",
		"ggem",
		"ggeb",
		"ggebs",
		"gges",
		"ggess",
		"ggeng",
		"ggej",
		"ggec",
		"ggek",
		"gget",
		"ggep",
		"ggeh",
		"ggyeo",
		"ggyeog",
		"ggyeogg",
		"ggyeogs",
		"ggyeon",
		"ggyeonj",
		"ggyeonh",
		"ggyeod",
		"ggyeol",
		"ggyeolg",
		"ggyeolm",
		"ggyeolb"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xaf.js
var require_xaf = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ggyeols",
		"ggyeolt",
		"ggyeolp",
		"ggyeolh",
		"ggyeom",
		"ggyeob",
		"ggyeobs",
		"ggyeos",
		"ggyeoss",
		"ggyeong",
		"ggyeoj",
		"ggyeoc",
		"ggyeok",
		"ggyeot",
		"ggyeop",
		"ggyeoh",
		"ggye",
		"ggyeg",
		"ggyegg",
		"ggyegs",
		"ggyen",
		"ggyenj",
		"ggyenh",
		"ggyed",
		"ggyel",
		"ggyelg",
		"ggyelm",
		"ggyelb",
		"ggyels",
		"ggyelt",
		"ggyelp",
		"ggyelh",
		"ggyem",
		"ggyeb",
		"ggyebs",
		"ggyes",
		"ggyess",
		"ggyeng",
		"ggyej",
		"ggyec",
		"ggyek",
		"ggyet",
		"ggyep",
		"ggyeh",
		"ggo",
		"ggog",
		"ggogg",
		"ggogs",
		"ggon",
		"ggonj",
		"ggonh",
		"ggod",
		"ggol",
		"ggolg",
		"ggolm",
		"ggolb",
		"ggols",
		"ggolt",
		"ggolp",
		"ggolh",
		"ggom",
		"ggob",
		"ggobs",
		"ggos",
		"ggoss",
		"ggong",
		"ggoj",
		"ggoc",
		"ggok",
		"ggot",
		"ggop",
		"ggoh",
		"ggwa",
		"ggwag",
		"ggwagg",
		"ggwags",
		"ggwan",
		"ggwanj",
		"ggwanh",
		"ggwad",
		"ggwal",
		"ggwalg",
		"ggwalm",
		"ggwalb",
		"ggwals",
		"ggwalt",
		"ggwalp",
		"ggwalh",
		"ggwam",
		"ggwab",
		"ggwabs",
		"ggwas",
		"ggwass",
		"ggwang",
		"ggwaj",
		"ggwac",
		"ggwak",
		"ggwat",
		"ggwap",
		"ggwah",
		"ggwae",
		"ggwaeg",
		"ggwaegg",
		"ggwaegs",
		"ggwaen",
		"ggwaenj",
		"ggwaenh",
		"ggwaed",
		"ggwael",
		"ggwaelg",
		"ggwaelm",
		"ggwaelb",
		"ggwaels",
		"ggwaelt",
		"ggwaelp",
		"ggwaelh",
		"ggwaem",
		"ggwaeb",
		"ggwaebs",
		"ggwaes",
		"ggwaess",
		"ggwaeng",
		"ggwaej",
		"ggwaec",
		"ggwaek",
		"ggwaet",
		"ggwaep",
		"ggwaeh",
		"ggoe",
		"ggoeg",
		"ggoegg",
		"ggoegs",
		"ggoen",
		"ggoenj",
		"ggoenh",
		"ggoed",
		"ggoel",
		"ggoelg",
		"ggoelm",
		"ggoelb",
		"ggoels",
		"ggoelt",
		"ggoelp",
		"ggoelh",
		"ggoem",
		"ggoeb",
		"ggoebs",
		"ggoes",
		"ggoess",
		"ggoeng",
		"ggoej",
		"ggoec",
		"ggoek",
		"ggoet",
		"ggoep",
		"ggoeh",
		"ggyo",
		"ggyog",
		"ggyogg",
		"ggyogs",
		"ggyon",
		"ggyonj",
		"ggyonh",
		"ggyod",
		"ggyol",
		"ggyolg",
		"ggyolm",
		"ggyolb",
		"ggyols",
		"ggyolt",
		"ggyolp",
		"ggyolh",
		"ggyom",
		"ggyob",
		"ggyobs",
		"ggyos",
		"ggyoss",
		"ggyong",
		"ggyoj",
		"ggyoc",
		"ggyok",
		"ggyot",
		"ggyop",
		"ggyoh",
		"ggu",
		"ggug",
		"ggugg",
		"ggugs",
		"ggun",
		"ggunj",
		"ggunh",
		"ggud",
		"ggul",
		"ggulg",
		"ggulm",
		"ggulb",
		"gguls",
		"ggult",
		"ggulp",
		"ggulh",
		"ggum",
		"ggub",
		"ggubs",
		"ggus",
		"gguss",
		"ggung",
		"gguj",
		"gguc",
		"gguk",
		"ggut",
		"ggup",
		"gguh",
		"ggweo",
		"ggweog",
		"ggweogg",
		"ggweogs",
		"ggweon",
		"ggweonj",
		"ggweonh",
		"ggweod",
		"ggweol",
		"ggweolg",
		"ggweolm",
		"ggweolb",
		"ggweols",
		"ggweolt",
		"ggweolp",
		"ggweolh",
		"ggweom",
		"ggweob",
		"ggweobs",
		"ggweos",
		"ggweoss",
		"ggweong",
		"ggweoj",
		"ggweoc",
		"ggweok",
		"ggweot",
		"ggweop",
		"ggweoh",
		"ggwe",
		"ggweg",
		"ggwegg",
		"ggwegs",
		"ggwen",
		"ggwenj",
		"ggwenh",
		"ggwed",
		"ggwel",
		"ggwelg",
		"ggwelm",
		"ggwelb",
		"ggwels",
		"ggwelt",
		"ggwelp",
		"ggwelh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb0.js
var require_xb0 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ggwem",
		"ggweb",
		"ggwebs",
		"ggwes",
		"ggwess",
		"ggweng",
		"ggwej",
		"ggwec",
		"ggwek",
		"ggwet",
		"ggwep",
		"ggweh",
		"ggwi",
		"ggwig",
		"ggwigg",
		"ggwigs",
		"ggwin",
		"ggwinj",
		"ggwinh",
		"ggwid",
		"ggwil",
		"ggwilg",
		"ggwilm",
		"ggwilb",
		"ggwils",
		"ggwilt",
		"ggwilp",
		"ggwilh",
		"ggwim",
		"ggwib",
		"ggwibs",
		"ggwis",
		"ggwiss",
		"ggwing",
		"ggwij",
		"ggwic",
		"ggwik",
		"ggwit",
		"ggwip",
		"ggwih",
		"ggyu",
		"ggyug",
		"ggyugg",
		"ggyugs",
		"ggyun",
		"ggyunj",
		"ggyunh",
		"ggyud",
		"ggyul",
		"ggyulg",
		"ggyulm",
		"ggyulb",
		"ggyuls",
		"ggyult",
		"ggyulp",
		"ggyulh",
		"ggyum",
		"ggyub",
		"ggyubs",
		"ggyus",
		"ggyuss",
		"ggyung",
		"ggyuj",
		"ggyuc",
		"ggyuk",
		"ggyut",
		"ggyup",
		"ggyuh",
		"ggeu",
		"ggeug",
		"ggeugg",
		"ggeugs",
		"ggeun",
		"ggeunj",
		"ggeunh",
		"ggeud",
		"ggeul",
		"ggeulg",
		"ggeulm",
		"ggeulb",
		"ggeuls",
		"ggeult",
		"ggeulp",
		"ggeulh",
		"ggeum",
		"ggeub",
		"ggeubs",
		"ggeus",
		"ggeuss",
		"ggeung",
		"ggeuj",
		"ggeuc",
		"ggeuk",
		"ggeut",
		"ggeup",
		"ggeuh",
		"ggyi",
		"ggyig",
		"ggyigg",
		"ggyigs",
		"ggyin",
		"ggyinj",
		"ggyinh",
		"ggyid",
		"ggyil",
		"ggyilg",
		"ggyilm",
		"ggyilb",
		"ggyils",
		"ggyilt",
		"ggyilp",
		"ggyilh",
		"ggyim",
		"ggyib",
		"ggyibs",
		"ggyis",
		"ggyiss",
		"ggying",
		"ggyij",
		"ggyic",
		"ggyik",
		"ggyit",
		"ggyip",
		"ggyih",
		"ggi",
		"ggig",
		"ggigg",
		"ggigs",
		"ggin",
		"gginj",
		"gginh",
		"ggid",
		"ggil",
		"ggilg",
		"ggilm",
		"ggilb",
		"ggils",
		"ggilt",
		"ggilp",
		"ggilh",
		"ggim",
		"ggib",
		"ggibs",
		"ggis",
		"ggiss",
		"gging",
		"ggij",
		"ggic",
		"ggik",
		"ggit",
		"ggip",
		"ggih",
		"na",
		"nag",
		"nagg",
		"nags",
		"nan",
		"nanj",
		"nanh",
		"nad",
		"nal",
		"nalg",
		"nalm",
		"nalb",
		"nals",
		"nalt",
		"nalp",
		"nalh",
		"nam",
		"nab",
		"nabs",
		"nas",
		"nass",
		"nang",
		"naj",
		"nac",
		"nak",
		"nat",
		"nap",
		"nah",
		"nae",
		"naeg",
		"naegg",
		"naegs",
		"naen",
		"naenj",
		"naenh",
		"naed",
		"nael",
		"naelg",
		"naelm",
		"naelb",
		"naels",
		"naelt",
		"naelp",
		"naelh",
		"naem",
		"naeb",
		"naebs",
		"naes",
		"naess",
		"naeng",
		"naej",
		"naec",
		"naek",
		"naet",
		"naep",
		"naeh",
		"nya",
		"nyag",
		"nyagg",
		"nyags",
		"nyan",
		"nyanj",
		"nyanh",
		"nyad",
		"nyal",
		"nyalg",
		"nyalm",
		"nyalb",
		"nyals",
		"nyalt",
		"nyalp",
		"nyalh",
		"nyam",
		"nyab",
		"nyabs",
		"nyas",
		"nyass",
		"nyang",
		"nyaj",
		"nyac",
		"nyak",
		"nyat",
		"nyap",
		"nyah",
		"nyae",
		"nyaeg",
		"nyaegg",
		"nyaegs",
		"nyaen",
		"nyaenj",
		"nyaenh",
		"nyaed",
		"nyael",
		"nyaelg",
		"nyaelm",
		"nyaelb",
		"nyaels",
		"nyaelt",
		"nyaelp",
		"nyaelh",
		"nyaem",
		"nyaeb",
		"nyaebs",
		"nyaes"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb1.js
var require_xb1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"nyaess",
		"nyaeng",
		"nyaej",
		"nyaec",
		"nyaek",
		"nyaet",
		"nyaep",
		"nyaeh",
		"neo",
		"neog",
		"neogg",
		"neogs",
		"neon",
		"neonj",
		"neonh",
		"neod",
		"neol",
		"neolg",
		"neolm",
		"neolb",
		"neols",
		"neolt",
		"neolp",
		"neolh",
		"neom",
		"neob",
		"neobs",
		"neos",
		"neoss",
		"neong",
		"neoj",
		"neoc",
		"neok",
		"neot",
		"neop",
		"neoh",
		"ne",
		"neg",
		"negg",
		"negs",
		"nen",
		"nenj",
		"nenh",
		"ned",
		"nel",
		"nelg",
		"nelm",
		"nelb",
		"nels",
		"nelt",
		"nelp",
		"nelh",
		"nem",
		"neb",
		"nebs",
		"nes",
		"ness",
		"neng",
		"nej",
		"nec",
		"nek",
		"net",
		"nep",
		"neh",
		"nyeo",
		"nyeog",
		"nyeogg",
		"nyeogs",
		"nyeon",
		"nyeonj",
		"nyeonh",
		"nyeod",
		"nyeol",
		"nyeolg",
		"nyeolm",
		"nyeolb",
		"nyeols",
		"nyeolt",
		"nyeolp",
		"nyeolh",
		"nyeom",
		"nyeob",
		"nyeobs",
		"nyeos",
		"nyeoss",
		"nyeong",
		"nyeoj",
		"nyeoc",
		"nyeok",
		"nyeot",
		"nyeop",
		"nyeoh",
		"nye",
		"nyeg",
		"nyegg",
		"nyegs",
		"nyen",
		"nyenj",
		"nyenh",
		"nyed",
		"nyel",
		"nyelg",
		"nyelm",
		"nyelb",
		"nyels",
		"nyelt",
		"nyelp",
		"nyelh",
		"nyem",
		"nyeb",
		"nyebs",
		"nyes",
		"nyess",
		"nyeng",
		"nyej",
		"nyec",
		"nyek",
		"nyet",
		"nyep",
		"nyeh",
		"no",
		"nog",
		"nogg",
		"nogs",
		"non",
		"nonj",
		"nonh",
		"nod",
		"nol",
		"nolg",
		"nolm",
		"nolb",
		"nols",
		"nolt",
		"nolp",
		"nolh",
		"nom",
		"nob",
		"nobs",
		"nos",
		"noss",
		"nong",
		"noj",
		"noc",
		"nok",
		"not",
		"nop",
		"noh",
		"nwa",
		"nwag",
		"nwagg",
		"nwags",
		"nwan",
		"nwanj",
		"nwanh",
		"nwad",
		"nwal",
		"nwalg",
		"nwalm",
		"nwalb",
		"nwals",
		"nwalt",
		"nwalp",
		"nwalh",
		"nwam",
		"nwab",
		"nwabs",
		"nwas",
		"nwass",
		"nwang",
		"nwaj",
		"nwac",
		"nwak",
		"nwat",
		"nwap",
		"nwah",
		"nwae",
		"nwaeg",
		"nwaegg",
		"nwaegs",
		"nwaen",
		"nwaenj",
		"nwaenh",
		"nwaed",
		"nwael",
		"nwaelg",
		"nwaelm",
		"nwaelb",
		"nwaels",
		"nwaelt",
		"nwaelp",
		"nwaelh",
		"nwaem",
		"nwaeb",
		"nwaebs",
		"nwaes",
		"nwaess",
		"nwaeng",
		"nwaej",
		"nwaec",
		"nwaek",
		"nwaet",
		"nwaep",
		"nwaeh",
		"noe",
		"noeg",
		"noegg",
		"noegs",
		"noen",
		"noenj",
		"noenh",
		"noed",
		"noel",
		"noelg",
		"noelm",
		"noelb",
		"noels",
		"noelt",
		"noelp",
		"noelh",
		"noem",
		"noeb",
		"noebs",
		"noes",
		"noess",
		"noeng",
		"noej",
		"noec",
		"noek",
		"noet",
		"noep",
		"noeh",
		"nyo",
		"nyog",
		"nyogg",
		"nyogs",
		"nyon",
		"nyonj",
		"nyonh",
		"nyod",
		"nyol",
		"nyolg",
		"nyolm",
		"nyolb",
		"nyols",
		"nyolt",
		"nyolp",
		"nyolh",
		"nyom",
		"nyob",
		"nyobs",
		"nyos",
		"nyoss",
		"nyong",
		"nyoj",
		"nyoc"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb2.js
var require_xb2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"nyok",
		"nyot",
		"nyop",
		"nyoh",
		"nu",
		"nug",
		"nugg",
		"nugs",
		"nun",
		"nunj",
		"nunh",
		"nud",
		"nul",
		"nulg",
		"nulm",
		"nulb",
		"nuls",
		"nult",
		"nulp",
		"nulh",
		"num",
		"nub",
		"nubs",
		"nus",
		"nuss",
		"nung",
		"nuj",
		"nuc",
		"nuk",
		"nut",
		"nup",
		"nuh",
		"nweo",
		"nweog",
		"nweogg",
		"nweogs",
		"nweon",
		"nweonj",
		"nweonh",
		"nweod",
		"nweol",
		"nweolg",
		"nweolm",
		"nweolb",
		"nweols",
		"nweolt",
		"nweolp",
		"nweolh",
		"nweom",
		"nweob",
		"nweobs",
		"nweos",
		"nweoss",
		"nweong",
		"nweoj",
		"nweoc",
		"nweok",
		"nweot",
		"nweop",
		"nweoh",
		"nwe",
		"nweg",
		"nwegg",
		"nwegs",
		"nwen",
		"nwenj",
		"nwenh",
		"nwed",
		"nwel",
		"nwelg",
		"nwelm",
		"nwelb",
		"nwels",
		"nwelt",
		"nwelp",
		"nwelh",
		"nwem",
		"nweb",
		"nwebs",
		"nwes",
		"nwess",
		"nweng",
		"nwej",
		"nwec",
		"nwek",
		"nwet",
		"nwep",
		"nweh",
		"nwi",
		"nwig",
		"nwigg",
		"nwigs",
		"nwin",
		"nwinj",
		"nwinh",
		"nwid",
		"nwil",
		"nwilg",
		"nwilm",
		"nwilb",
		"nwils",
		"nwilt",
		"nwilp",
		"nwilh",
		"nwim",
		"nwib",
		"nwibs",
		"nwis",
		"nwiss",
		"nwing",
		"nwij",
		"nwic",
		"nwik",
		"nwit",
		"nwip",
		"nwih",
		"nyu",
		"nyug",
		"nyugg",
		"nyugs",
		"nyun",
		"nyunj",
		"nyunh",
		"nyud",
		"nyul",
		"nyulg",
		"nyulm",
		"nyulb",
		"nyuls",
		"nyult",
		"nyulp",
		"nyulh",
		"nyum",
		"nyub",
		"nyubs",
		"nyus",
		"nyuss",
		"nyung",
		"nyuj",
		"nyuc",
		"nyuk",
		"nyut",
		"nyup",
		"nyuh",
		"neu",
		"neug",
		"neugg",
		"neugs",
		"neun",
		"neunj",
		"neunh",
		"neud",
		"neul",
		"neulg",
		"neulm",
		"neulb",
		"neuls",
		"neult",
		"neulp",
		"neulh",
		"neum",
		"neub",
		"neubs",
		"neus",
		"neuss",
		"neung",
		"neuj",
		"neuc",
		"neuk",
		"neut",
		"neup",
		"neuh",
		"nyi",
		"nyig",
		"nyigg",
		"nyigs",
		"nyin",
		"nyinj",
		"nyinh",
		"nyid",
		"nyil",
		"nyilg",
		"nyilm",
		"nyilb",
		"nyils",
		"nyilt",
		"nyilp",
		"nyilh",
		"nyim",
		"nyib",
		"nyibs",
		"nyis",
		"nyiss",
		"nying",
		"nyij",
		"nyic",
		"nyik",
		"nyit",
		"nyip",
		"nyih",
		"ni",
		"nig",
		"nigg",
		"nigs",
		"nin",
		"ninj",
		"ninh",
		"nid",
		"nil",
		"nilg",
		"nilm",
		"nilb",
		"nils",
		"nilt",
		"nilp",
		"nilh",
		"nim",
		"nib",
		"nibs",
		"nis",
		"niss",
		"ning",
		"nij",
		"nic",
		"nik",
		"nit",
		"nip",
		"nih",
		"da",
		"dag",
		"dagg",
		"dags",
		"dan",
		"danj",
		"danh",
		"dad",
		"dal",
		"dalg",
		"dalm",
		"dalb",
		"dals",
		"dalt",
		"dalp",
		"dalh",
		"dam",
		"dab",
		"dabs",
		"das",
		"dass",
		"dang",
		"daj",
		"dac",
		"dak",
		"dat",
		"dap",
		"dah"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb3.js
var require_xb3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"dae",
		"daeg",
		"daegg",
		"daegs",
		"daen",
		"daenj",
		"daenh",
		"daed",
		"dael",
		"daelg",
		"daelm",
		"daelb",
		"daels",
		"daelt",
		"daelp",
		"daelh",
		"daem",
		"daeb",
		"daebs",
		"daes",
		"daess",
		"daeng",
		"daej",
		"daec",
		"daek",
		"daet",
		"daep",
		"daeh",
		"dya",
		"dyag",
		"dyagg",
		"dyags",
		"dyan",
		"dyanj",
		"dyanh",
		"dyad",
		"dyal",
		"dyalg",
		"dyalm",
		"dyalb",
		"dyals",
		"dyalt",
		"dyalp",
		"dyalh",
		"dyam",
		"dyab",
		"dyabs",
		"dyas",
		"dyass",
		"dyang",
		"dyaj",
		"dyac",
		"dyak",
		"dyat",
		"dyap",
		"dyah",
		"dyae",
		"dyaeg",
		"dyaegg",
		"dyaegs",
		"dyaen",
		"dyaenj",
		"dyaenh",
		"dyaed",
		"dyael",
		"dyaelg",
		"dyaelm",
		"dyaelb",
		"dyaels",
		"dyaelt",
		"dyaelp",
		"dyaelh",
		"dyaem",
		"dyaeb",
		"dyaebs",
		"dyaes",
		"dyaess",
		"dyaeng",
		"dyaej",
		"dyaec",
		"dyaek",
		"dyaet",
		"dyaep",
		"dyaeh",
		"deo",
		"deog",
		"deogg",
		"deogs",
		"deon",
		"deonj",
		"deonh",
		"deod",
		"deol",
		"deolg",
		"deolm",
		"deolb",
		"deols",
		"deolt",
		"deolp",
		"deolh",
		"deom",
		"deob",
		"deobs",
		"deos",
		"deoss",
		"deong",
		"deoj",
		"deoc",
		"deok",
		"deot",
		"deop",
		"deoh",
		"de",
		"deg",
		"degg",
		"degs",
		"den",
		"denj",
		"denh",
		"ded",
		"del",
		"delg",
		"delm",
		"delb",
		"dels",
		"delt",
		"delp",
		"delh",
		"dem",
		"deb",
		"debs",
		"des",
		"dess",
		"deng",
		"dej",
		"dec",
		"dek",
		"det",
		"dep",
		"deh",
		"dyeo",
		"dyeog",
		"dyeogg",
		"dyeogs",
		"dyeon",
		"dyeonj",
		"dyeonh",
		"dyeod",
		"dyeol",
		"dyeolg",
		"dyeolm",
		"dyeolb",
		"dyeols",
		"dyeolt",
		"dyeolp",
		"dyeolh",
		"dyeom",
		"dyeob",
		"dyeobs",
		"dyeos",
		"dyeoss",
		"dyeong",
		"dyeoj",
		"dyeoc",
		"dyeok",
		"dyeot",
		"dyeop",
		"dyeoh",
		"dye",
		"dyeg",
		"dyegg",
		"dyegs",
		"dyen",
		"dyenj",
		"dyenh",
		"dyed",
		"dyel",
		"dyelg",
		"dyelm",
		"dyelb",
		"dyels",
		"dyelt",
		"dyelp",
		"dyelh",
		"dyem",
		"dyeb",
		"dyebs",
		"dyes",
		"dyess",
		"dyeng",
		"dyej",
		"dyec",
		"dyek",
		"dyet",
		"dyep",
		"dyeh",
		"do",
		"dog",
		"dogg",
		"dogs",
		"don",
		"donj",
		"donh",
		"dod",
		"dol",
		"dolg",
		"dolm",
		"dolb",
		"dols",
		"dolt",
		"dolp",
		"dolh",
		"dom",
		"dob",
		"dobs",
		"dos",
		"doss",
		"dong",
		"doj",
		"doc",
		"dok",
		"dot",
		"dop",
		"doh",
		"dwa",
		"dwag",
		"dwagg",
		"dwags",
		"dwan",
		"dwanj",
		"dwanh",
		"dwad",
		"dwal",
		"dwalg",
		"dwalm",
		"dwalb",
		"dwals",
		"dwalt",
		"dwalp",
		"dwalh",
		"dwam",
		"dwab",
		"dwabs",
		"dwas",
		"dwass",
		"dwang",
		"dwaj",
		"dwac",
		"dwak",
		"dwat",
		"dwap",
		"dwah",
		"dwae",
		"dwaeg",
		"dwaegg",
		"dwaegs"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb4.js
var require_xb4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"dwaen",
		"dwaenj",
		"dwaenh",
		"dwaed",
		"dwael",
		"dwaelg",
		"dwaelm",
		"dwaelb",
		"dwaels",
		"dwaelt",
		"dwaelp",
		"dwaelh",
		"dwaem",
		"dwaeb",
		"dwaebs",
		"dwaes",
		"dwaess",
		"dwaeng",
		"dwaej",
		"dwaec",
		"dwaek",
		"dwaet",
		"dwaep",
		"dwaeh",
		"doe",
		"doeg",
		"doegg",
		"doegs",
		"doen",
		"doenj",
		"doenh",
		"doed",
		"doel",
		"doelg",
		"doelm",
		"doelb",
		"doels",
		"doelt",
		"doelp",
		"doelh",
		"doem",
		"doeb",
		"doebs",
		"does",
		"doess",
		"doeng",
		"doej",
		"doec",
		"doek",
		"doet",
		"doep",
		"doeh",
		"dyo",
		"dyog",
		"dyogg",
		"dyogs",
		"dyon",
		"dyonj",
		"dyonh",
		"dyod",
		"dyol",
		"dyolg",
		"dyolm",
		"dyolb",
		"dyols",
		"dyolt",
		"dyolp",
		"dyolh",
		"dyom",
		"dyob",
		"dyobs",
		"dyos",
		"dyoss",
		"dyong",
		"dyoj",
		"dyoc",
		"dyok",
		"dyot",
		"dyop",
		"dyoh",
		"du",
		"dug",
		"dugg",
		"dugs",
		"dun",
		"dunj",
		"dunh",
		"dud",
		"dul",
		"dulg",
		"dulm",
		"dulb",
		"duls",
		"dult",
		"dulp",
		"dulh",
		"dum",
		"dub",
		"dubs",
		"dus",
		"duss",
		"dung",
		"duj",
		"duc",
		"duk",
		"dut",
		"dup",
		"duh",
		"dweo",
		"dweog",
		"dweogg",
		"dweogs",
		"dweon",
		"dweonj",
		"dweonh",
		"dweod",
		"dweol",
		"dweolg",
		"dweolm",
		"dweolb",
		"dweols",
		"dweolt",
		"dweolp",
		"dweolh",
		"dweom",
		"dweob",
		"dweobs",
		"dweos",
		"dweoss",
		"dweong",
		"dweoj",
		"dweoc",
		"dweok",
		"dweot",
		"dweop",
		"dweoh",
		"dwe",
		"dweg",
		"dwegg",
		"dwegs",
		"dwen",
		"dwenj",
		"dwenh",
		"dwed",
		"dwel",
		"dwelg",
		"dwelm",
		"dwelb",
		"dwels",
		"dwelt",
		"dwelp",
		"dwelh",
		"dwem",
		"dweb",
		"dwebs",
		"dwes",
		"dwess",
		"dweng",
		"dwej",
		"dwec",
		"dwek",
		"dwet",
		"dwep",
		"dweh",
		"dwi",
		"dwig",
		"dwigg",
		"dwigs",
		"dwin",
		"dwinj",
		"dwinh",
		"dwid",
		"dwil",
		"dwilg",
		"dwilm",
		"dwilb",
		"dwils",
		"dwilt",
		"dwilp",
		"dwilh",
		"dwim",
		"dwib",
		"dwibs",
		"dwis",
		"dwiss",
		"dwing",
		"dwij",
		"dwic",
		"dwik",
		"dwit",
		"dwip",
		"dwih",
		"dyu",
		"dyug",
		"dyugg",
		"dyugs",
		"dyun",
		"dyunj",
		"dyunh",
		"dyud",
		"dyul",
		"dyulg",
		"dyulm",
		"dyulb",
		"dyuls",
		"dyult",
		"dyulp",
		"dyulh",
		"dyum",
		"dyub",
		"dyubs",
		"dyus",
		"dyuss",
		"dyung",
		"dyuj",
		"dyuc",
		"dyuk",
		"dyut",
		"dyup",
		"dyuh",
		"deu",
		"deug",
		"deugg",
		"deugs",
		"deun",
		"deunj",
		"deunh",
		"deud",
		"deul",
		"deulg",
		"deulm",
		"deulb",
		"deuls",
		"deult",
		"deulp",
		"deulh",
		"deum",
		"deub",
		"deubs",
		"deus",
		"deuss",
		"deung",
		"deuj",
		"deuc",
		"deuk",
		"deut",
		"deup",
		"deuh",
		"dyi",
		"dyig",
		"dyigg",
		"dyigs",
		"dyin",
		"dyinj",
		"dyinh",
		"dyid"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb5.js
var require_xb5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"dyil",
		"dyilg",
		"dyilm",
		"dyilb",
		"dyils",
		"dyilt",
		"dyilp",
		"dyilh",
		"dyim",
		"dyib",
		"dyibs",
		"dyis",
		"dyiss",
		"dying",
		"dyij",
		"dyic",
		"dyik",
		"dyit",
		"dyip",
		"dyih",
		"di",
		"dig",
		"digg",
		"digs",
		"din",
		"dinj",
		"dinh",
		"did",
		"dil",
		"dilg",
		"dilm",
		"dilb",
		"dils",
		"dilt",
		"dilp",
		"dilh",
		"dim",
		"dib",
		"dibs",
		"dis",
		"diss",
		"ding",
		"dij",
		"dic",
		"dik",
		"dit",
		"dip",
		"dih",
		"dda",
		"ddag",
		"ddagg",
		"ddags",
		"ddan",
		"ddanj",
		"ddanh",
		"ddad",
		"ddal",
		"ddalg",
		"ddalm",
		"ddalb",
		"ddals",
		"ddalt",
		"ddalp",
		"ddalh",
		"ddam",
		"ddab",
		"ddabs",
		"ddas",
		"ddass",
		"ddang",
		"ddaj",
		"ddac",
		"ddak",
		"ddat",
		"ddap",
		"ddah",
		"ddae",
		"ddaeg",
		"ddaegg",
		"ddaegs",
		"ddaen",
		"ddaenj",
		"ddaenh",
		"ddaed",
		"ddael",
		"ddaelg",
		"ddaelm",
		"ddaelb",
		"ddaels",
		"ddaelt",
		"ddaelp",
		"ddaelh",
		"ddaem",
		"ddaeb",
		"ddaebs",
		"ddaes",
		"ddaess",
		"ddaeng",
		"ddaej",
		"ddaec",
		"ddaek",
		"ddaet",
		"ddaep",
		"ddaeh",
		"ddya",
		"ddyag",
		"ddyagg",
		"ddyags",
		"ddyan",
		"ddyanj",
		"ddyanh",
		"ddyad",
		"ddyal",
		"ddyalg",
		"ddyalm",
		"ddyalb",
		"ddyals",
		"ddyalt",
		"ddyalp",
		"ddyalh",
		"ddyam",
		"ddyab",
		"ddyabs",
		"ddyas",
		"ddyass",
		"ddyang",
		"ddyaj",
		"ddyac",
		"ddyak",
		"ddyat",
		"ddyap",
		"ddyah",
		"ddyae",
		"ddyaeg",
		"ddyaegg",
		"ddyaegs",
		"ddyaen",
		"ddyaenj",
		"ddyaenh",
		"ddyaed",
		"ddyael",
		"ddyaelg",
		"ddyaelm",
		"ddyaelb",
		"ddyaels",
		"ddyaelt",
		"ddyaelp",
		"ddyaelh",
		"ddyaem",
		"ddyaeb",
		"ddyaebs",
		"ddyaes",
		"ddyaess",
		"ddyaeng",
		"ddyaej",
		"ddyaec",
		"ddyaek",
		"ddyaet",
		"ddyaep",
		"ddyaeh",
		"ddeo",
		"ddeog",
		"ddeogg",
		"ddeogs",
		"ddeon",
		"ddeonj",
		"ddeonh",
		"ddeod",
		"ddeol",
		"ddeolg",
		"ddeolm",
		"ddeolb",
		"ddeols",
		"ddeolt",
		"ddeolp",
		"ddeolh",
		"ddeom",
		"ddeob",
		"ddeobs",
		"ddeos",
		"ddeoss",
		"ddeong",
		"ddeoj",
		"ddeoc",
		"ddeok",
		"ddeot",
		"ddeop",
		"ddeoh",
		"dde",
		"ddeg",
		"ddegg",
		"ddegs",
		"dden",
		"ddenj",
		"ddenh",
		"dded",
		"ddel",
		"ddelg",
		"ddelm",
		"ddelb",
		"ddels",
		"ddelt",
		"ddelp",
		"ddelh",
		"ddem",
		"ddeb",
		"ddebs",
		"ddes",
		"ddess",
		"ddeng",
		"ddej",
		"ddec",
		"ddek",
		"ddet",
		"ddep",
		"ddeh",
		"ddyeo",
		"ddyeog",
		"ddyeogg",
		"ddyeogs",
		"ddyeon",
		"ddyeonj",
		"ddyeonh",
		"ddyeod",
		"ddyeol",
		"ddyeolg",
		"ddyeolm",
		"ddyeolb",
		"ddyeols",
		"ddyeolt",
		"ddyeolp",
		"ddyeolh",
		"ddyeom",
		"ddyeob",
		"ddyeobs",
		"ddyeos",
		"ddyeoss",
		"ddyeong",
		"ddyeoj",
		"ddyeoc",
		"ddyeok",
		"ddyeot",
		"ddyeop",
		"ddyeoh",
		"ddye",
		"ddyeg",
		"ddyegg",
		"ddyegs",
		"ddyen",
		"ddyenj",
		"ddyenh",
		"ddyed",
		"ddyel",
		"ddyelg",
		"ddyelm",
		"ddyelb"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb6.js
var require_xb6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ddyels",
		"ddyelt",
		"ddyelp",
		"ddyelh",
		"ddyem",
		"ddyeb",
		"ddyebs",
		"ddyes",
		"ddyess",
		"ddyeng",
		"ddyej",
		"ddyec",
		"ddyek",
		"ddyet",
		"ddyep",
		"ddyeh",
		"ddo",
		"ddog",
		"ddogg",
		"ddogs",
		"ddon",
		"ddonj",
		"ddonh",
		"ddod",
		"ddol",
		"ddolg",
		"ddolm",
		"ddolb",
		"ddols",
		"ddolt",
		"ddolp",
		"ddolh",
		"ddom",
		"ddob",
		"ddobs",
		"ddos",
		"ddoss",
		"ddong",
		"ddoj",
		"ddoc",
		"ddok",
		"ddot",
		"ddop",
		"ddoh",
		"ddwa",
		"ddwag",
		"ddwagg",
		"ddwags",
		"ddwan",
		"ddwanj",
		"ddwanh",
		"ddwad",
		"ddwal",
		"ddwalg",
		"ddwalm",
		"ddwalb",
		"ddwals",
		"ddwalt",
		"ddwalp",
		"ddwalh",
		"ddwam",
		"ddwab",
		"ddwabs",
		"ddwas",
		"ddwass",
		"ddwang",
		"ddwaj",
		"ddwac",
		"ddwak",
		"ddwat",
		"ddwap",
		"ddwah",
		"ddwae",
		"ddwaeg",
		"ddwaegg",
		"ddwaegs",
		"ddwaen",
		"ddwaenj",
		"ddwaenh",
		"ddwaed",
		"ddwael",
		"ddwaelg",
		"ddwaelm",
		"ddwaelb",
		"ddwaels",
		"ddwaelt",
		"ddwaelp",
		"ddwaelh",
		"ddwaem",
		"ddwaeb",
		"ddwaebs",
		"ddwaes",
		"ddwaess",
		"ddwaeng",
		"ddwaej",
		"ddwaec",
		"ddwaek",
		"ddwaet",
		"ddwaep",
		"ddwaeh",
		"ddoe",
		"ddoeg",
		"ddoegg",
		"ddoegs",
		"ddoen",
		"ddoenj",
		"ddoenh",
		"ddoed",
		"ddoel",
		"ddoelg",
		"ddoelm",
		"ddoelb",
		"ddoels",
		"ddoelt",
		"ddoelp",
		"ddoelh",
		"ddoem",
		"ddoeb",
		"ddoebs",
		"ddoes",
		"ddoess",
		"ddoeng",
		"ddoej",
		"ddoec",
		"ddoek",
		"ddoet",
		"ddoep",
		"ddoeh",
		"ddyo",
		"ddyog",
		"ddyogg",
		"ddyogs",
		"ddyon",
		"ddyonj",
		"ddyonh",
		"ddyod",
		"ddyol",
		"ddyolg",
		"ddyolm",
		"ddyolb",
		"ddyols",
		"ddyolt",
		"ddyolp",
		"ddyolh",
		"ddyom",
		"ddyob",
		"ddyobs",
		"ddyos",
		"ddyoss",
		"ddyong",
		"ddyoj",
		"ddyoc",
		"ddyok",
		"ddyot",
		"ddyop",
		"ddyoh",
		"ddu",
		"ddug",
		"ddugg",
		"ddugs",
		"ddun",
		"ddunj",
		"ddunh",
		"ddud",
		"ddul",
		"ddulg",
		"ddulm",
		"ddulb",
		"dduls",
		"ddult",
		"ddulp",
		"ddulh",
		"ddum",
		"ddub",
		"ddubs",
		"ddus",
		"dduss",
		"ddung",
		"dduj",
		"dduc",
		"dduk",
		"ddut",
		"ddup",
		"dduh",
		"ddweo",
		"ddweog",
		"ddweogg",
		"ddweogs",
		"ddweon",
		"ddweonj",
		"ddweonh",
		"ddweod",
		"ddweol",
		"ddweolg",
		"ddweolm",
		"ddweolb",
		"ddweols",
		"ddweolt",
		"ddweolp",
		"ddweolh",
		"ddweom",
		"ddweob",
		"ddweobs",
		"ddweos",
		"ddweoss",
		"ddweong",
		"ddweoj",
		"ddweoc",
		"ddweok",
		"ddweot",
		"ddweop",
		"ddweoh",
		"ddwe",
		"ddweg",
		"ddwegg",
		"ddwegs",
		"ddwen",
		"ddwenj",
		"ddwenh",
		"ddwed",
		"ddwel",
		"ddwelg",
		"ddwelm",
		"ddwelb",
		"ddwels",
		"ddwelt",
		"ddwelp",
		"ddwelh",
		"ddwem",
		"ddweb",
		"ddwebs",
		"ddwes",
		"ddwess",
		"ddweng",
		"ddwej",
		"ddwec",
		"ddwek",
		"ddwet",
		"ddwep",
		"ddweh",
		"ddwi",
		"ddwig",
		"ddwigg",
		"ddwigs",
		"ddwin",
		"ddwinj",
		"ddwinh",
		"ddwid",
		"ddwil",
		"ddwilg",
		"ddwilm",
		"ddwilb",
		"ddwils",
		"ddwilt",
		"ddwilp",
		"ddwilh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb7.js
var require_xb7 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ddwim",
		"ddwib",
		"ddwibs",
		"ddwis",
		"ddwiss",
		"ddwing",
		"ddwij",
		"ddwic",
		"ddwik",
		"ddwit",
		"ddwip",
		"ddwih",
		"ddyu",
		"ddyug",
		"ddyugg",
		"ddyugs",
		"ddyun",
		"ddyunj",
		"ddyunh",
		"ddyud",
		"ddyul",
		"ddyulg",
		"ddyulm",
		"ddyulb",
		"ddyuls",
		"ddyult",
		"ddyulp",
		"ddyulh",
		"ddyum",
		"ddyub",
		"ddyubs",
		"ddyus",
		"ddyuss",
		"ddyung",
		"ddyuj",
		"ddyuc",
		"ddyuk",
		"ddyut",
		"ddyup",
		"ddyuh",
		"ddeu",
		"ddeug",
		"ddeugg",
		"ddeugs",
		"ddeun",
		"ddeunj",
		"ddeunh",
		"ddeud",
		"ddeul",
		"ddeulg",
		"ddeulm",
		"ddeulb",
		"ddeuls",
		"ddeult",
		"ddeulp",
		"ddeulh",
		"ddeum",
		"ddeub",
		"ddeubs",
		"ddeus",
		"ddeuss",
		"ddeung",
		"ddeuj",
		"ddeuc",
		"ddeuk",
		"ddeut",
		"ddeup",
		"ddeuh",
		"ddyi",
		"ddyig",
		"ddyigg",
		"ddyigs",
		"ddyin",
		"ddyinj",
		"ddyinh",
		"ddyid",
		"ddyil",
		"ddyilg",
		"ddyilm",
		"ddyilb",
		"ddyils",
		"ddyilt",
		"ddyilp",
		"ddyilh",
		"ddyim",
		"ddyib",
		"ddyibs",
		"ddyis",
		"ddyiss",
		"ddying",
		"ddyij",
		"ddyic",
		"ddyik",
		"ddyit",
		"ddyip",
		"ddyih",
		"ddi",
		"ddig",
		"ddigg",
		"ddigs",
		"ddin",
		"ddinj",
		"ddinh",
		"ddid",
		"ddil",
		"ddilg",
		"ddilm",
		"ddilb",
		"ddils",
		"ddilt",
		"ddilp",
		"ddilh",
		"ddim",
		"ddib",
		"ddibs",
		"ddis",
		"ddiss",
		"dding",
		"ddij",
		"ddic",
		"ddik",
		"ddit",
		"ddip",
		"ddih",
		"ra",
		"rag",
		"ragg",
		"rags",
		"ran",
		"ranj",
		"ranh",
		"rad",
		"ral",
		"ralg",
		"ralm",
		"ralb",
		"rals",
		"ralt",
		"ralp",
		"ralh",
		"ram",
		"rab",
		"rabs",
		"ras",
		"rass",
		"rang",
		"raj",
		"rac",
		"rak",
		"rat",
		"rap",
		"rah",
		"rae",
		"raeg",
		"raegg",
		"raegs",
		"raen",
		"raenj",
		"raenh",
		"raed",
		"rael",
		"raelg",
		"raelm",
		"raelb",
		"raels",
		"raelt",
		"raelp",
		"raelh",
		"raem",
		"raeb",
		"raebs",
		"raes",
		"raess",
		"raeng",
		"raej",
		"raec",
		"raek",
		"raet",
		"raep",
		"raeh",
		"rya",
		"ryag",
		"ryagg",
		"ryags",
		"ryan",
		"ryanj",
		"ryanh",
		"ryad",
		"ryal",
		"ryalg",
		"ryalm",
		"ryalb",
		"ryals",
		"ryalt",
		"ryalp",
		"ryalh",
		"ryam",
		"ryab",
		"ryabs",
		"ryas",
		"ryass",
		"ryang",
		"ryaj",
		"ryac",
		"ryak",
		"ryat",
		"ryap",
		"ryah",
		"ryae",
		"ryaeg",
		"ryaegg",
		"ryaegs",
		"ryaen",
		"ryaenj",
		"ryaenh",
		"ryaed",
		"ryael",
		"ryaelg",
		"ryaelm",
		"ryaelb",
		"ryaels",
		"ryaelt",
		"ryaelp",
		"ryaelh",
		"ryaem",
		"ryaeb",
		"ryaebs",
		"ryaes",
		"ryaess",
		"ryaeng",
		"ryaej",
		"ryaec",
		"ryaek",
		"ryaet",
		"ryaep",
		"ryaeh",
		"reo",
		"reog",
		"reogg",
		"reogs",
		"reon",
		"reonj",
		"reonh",
		"reod",
		"reol",
		"reolg",
		"reolm",
		"reolb",
		"reols",
		"reolt",
		"reolp",
		"reolh",
		"reom",
		"reob",
		"reobs",
		"reos"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb8.js
var require_xb8 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"reoss",
		"reong",
		"reoj",
		"reoc",
		"reok",
		"reot",
		"reop",
		"reoh",
		"re",
		"reg",
		"regg",
		"regs",
		"ren",
		"renj",
		"renh",
		"red",
		"rel",
		"relg",
		"relm",
		"relb",
		"rels",
		"relt",
		"relp",
		"relh",
		"rem",
		"reb",
		"rebs",
		"res",
		"ress",
		"reng",
		"rej",
		"rec",
		"rek",
		"ret",
		"rep",
		"reh",
		"ryeo",
		"ryeog",
		"ryeogg",
		"ryeogs",
		"ryeon",
		"ryeonj",
		"ryeonh",
		"ryeod",
		"ryeol",
		"ryeolg",
		"ryeolm",
		"ryeolb",
		"ryeols",
		"ryeolt",
		"ryeolp",
		"ryeolh",
		"ryeom",
		"ryeob",
		"ryeobs",
		"ryeos",
		"ryeoss",
		"ryeong",
		"ryeoj",
		"ryeoc",
		"ryeok",
		"ryeot",
		"ryeop",
		"ryeoh",
		"rye",
		"ryeg",
		"ryegg",
		"ryegs",
		"ryen",
		"ryenj",
		"ryenh",
		"ryed",
		"ryel",
		"ryelg",
		"ryelm",
		"ryelb",
		"ryels",
		"ryelt",
		"ryelp",
		"ryelh",
		"ryem",
		"ryeb",
		"ryebs",
		"ryes",
		"ryess",
		"ryeng",
		"ryej",
		"ryec",
		"ryek",
		"ryet",
		"ryep",
		"ryeh",
		"ro",
		"rog",
		"rogg",
		"rogs",
		"ron",
		"ronj",
		"ronh",
		"rod",
		"rol",
		"rolg",
		"rolm",
		"rolb",
		"rols",
		"rolt",
		"rolp",
		"rolh",
		"rom",
		"rob",
		"robs",
		"ros",
		"ross",
		"rong",
		"roj",
		"roc",
		"rok",
		"rot",
		"rop",
		"roh",
		"rwa",
		"rwag",
		"rwagg",
		"rwags",
		"rwan",
		"rwanj",
		"rwanh",
		"rwad",
		"rwal",
		"rwalg",
		"rwalm",
		"rwalb",
		"rwals",
		"rwalt",
		"rwalp",
		"rwalh",
		"rwam",
		"rwab",
		"rwabs",
		"rwas",
		"rwass",
		"rwang",
		"rwaj",
		"rwac",
		"rwak",
		"rwat",
		"rwap",
		"rwah",
		"rwae",
		"rwaeg",
		"rwaegg",
		"rwaegs",
		"rwaen",
		"rwaenj",
		"rwaenh",
		"rwaed",
		"rwael",
		"rwaelg",
		"rwaelm",
		"rwaelb",
		"rwaels",
		"rwaelt",
		"rwaelp",
		"rwaelh",
		"rwaem",
		"rwaeb",
		"rwaebs",
		"rwaes",
		"rwaess",
		"rwaeng",
		"rwaej",
		"rwaec",
		"rwaek",
		"rwaet",
		"rwaep",
		"rwaeh",
		"roe",
		"roeg",
		"roegg",
		"roegs",
		"roen",
		"roenj",
		"roenh",
		"roed",
		"roel",
		"roelg",
		"roelm",
		"roelb",
		"roels",
		"roelt",
		"roelp",
		"roelh",
		"roem",
		"roeb",
		"roebs",
		"roes",
		"roess",
		"roeng",
		"roej",
		"roec",
		"roek",
		"roet",
		"roep",
		"roeh",
		"ryo",
		"ryog",
		"ryogg",
		"ryogs",
		"ryon",
		"ryonj",
		"ryonh",
		"ryod",
		"ryol",
		"ryolg",
		"ryolm",
		"ryolb",
		"ryols",
		"ryolt",
		"ryolp",
		"ryolh",
		"ryom",
		"ryob",
		"ryobs",
		"ryos",
		"ryoss",
		"ryong",
		"ryoj",
		"ryoc",
		"ryok",
		"ryot",
		"ryop",
		"ryoh",
		"ru",
		"rug",
		"rugg",
		"rugs",
		"run",
		"runj",
		"runh",
		"rud",
		"rul",
		"rulg",
		"rulm",
		"rulb",
		"ruls",
		"rult",
		"rulp",
		"rulh",
		"rum",
		"rub",
		"rubs",
		"rus",
		"russ",
		"rung",
		"ruj",
		"ruc"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xb9.js
var require_xb9 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ruk",
		"rut",
		"rup",
		"ruh",
		"rweo",
		"rweog",
		"rweogg",
		"rweogs",
		"rweon",
		"rweonj",
		"rweonh",
		"rweod",
		"rweol",
		"rweolg",
		"rweolm",
		"rweolb",
		"rweols",
		"rweolt",
		"rweolp",
		"rweolh",
		"rweom",
		"rweob",
		"rweobs",
		"rweos",
		"rweoss",
		"rweong",
		"rweoj",
		"rweoc",
		"rweok",
		"rweot",
		"rweop",
		"rweoh",
		"rwe",
		"rweg",
		"rwegg",
		"rwegs",
		"rwen",
		"rwenj",
		"rwenh",
		"rwed",
		"rwel",
		"rwelg",
		"rwelm",
		"rwelb",
		"rwels",
		"rwelt",
		"rwelp",
		"rwelh",
		"rwem",
		"rweb",
		"rwebs",
		"rwes",
		"rwess",
		"rweng",
		"rwej",
		"rwec",
		"rwek",
		"rwet",
		"rwep",
		"rweh",
		"rwi",
		"rwig",
		"rwigg",
		"rwigs",
		"rwin",
		"rwinj",
		"rwinh",
		"rwid",
		"rwil",
		"rwilg",
		"rwilm",
		"rwilb",
		"rwils",
		"rwilt",
		"rwilp",
		"rwilh",
		"rwim",
		"rwib",
		"rwibs",
		"rwis",
		"rwiss",
		"rwing",
		"rwij",
		"rwic",
		"rwik",
		"rwit",
		"rwip",
		"rwih",
		"ryu",
		"ryug",
		"ryugg",
		"ryugs",
		"ryun",
		"ryunj",
		"ryunh",
		"ryud",
		"ryul",
		"ryulg",
		"ryulm",
		"ryulb",
		"ryuls",
		"ryult",
		"ryulp",
		"ryulh",
		"ryum",
		"ryub",
		"ryubs",
		"ryus",
		"ryuss",
		"ryung",
		"ryuj",
		"ryuc",
		"ryuk",
		"ryut",
		"ryup",
		"ryuh",
		"reu",
		"reug",
		"reugg",
		"reugs",
		"reun",
		"reunj",
		"reunh",
		"reud",
		"reul",
		"reulg",
		"reulm",
		"reulb",
		"reuls",
		"reult",
		"reulp",
		"reulh",
		"reum",
		"reub",
		"reubs",
		"reus",
		"reuss",
		"reung",
		"reuj",
		"reuc",
		"reuk",
		"reut",
		"reup",
		"reuh",
		"ryi",
		"ryig",
		"ryigg",
		"ryigs",
		"ryin",
		"ryinj",
		"ryinh",
		"ryid",
		"ryil",
		"ryilg",
		"ryilm",
		"ryilb",
		"ryils",
		"ryilt",
		"ryilp",
		"ryilh",
		"ryim",
		"ryib",
		"ryibs",
		"ryis",
		"ryiss",
		"rying",
		"ryij",
		"ryic",
		"ryik",
		"ryit",
		"ryip",
		"ryih",
		"ri",
		"rig",
		"rigg",
		"rigs",
		"rin",
		"rinj",
		"rinh",
		"rid",
		"ril",
		"rilg",
		"rilm",
		"rilb",
		"rils",
		"rilt",
		"rilp",
		"rilh",
		"rim",
		"rib",
		"ribs",
		"ris",
		"riss",
		"ring",
		"rij",
		"ric",
		"rik",
		"rit",
		"rip",
		"rih",
		"ma",
		"mag",
		"magg",
		"mags",
		"man",
		"manj",
		"manh",
		"mad",
		"mal",
		"malg",
		"malm",
		"malb",
		"mals",
		"malt",
		"malp",
		"malh",
		"mam",
		"mab",
		"mabs",
		"mas",
		"mass",
		"mang",
		"maj",
		"mac",
		"mak",
		"mat",
		"map",
		"mah",
		"mae",
		"maeg",
		"maegg",
		"maegs",
		"maen",
		"maenj",
		"maenh",
		"maed",
		"mael",
		"maelg",
		"maelm",
		"maelb",
		"maels",
		"maelt",
		"maelp",
		"maelh",
		"maem",
		"maeb",
		"maebs",
		"maes",
		"maess",
		"maeng",
		"maej",
		"maec",
		"maek",
		"maet",
		"maep",
		"maeh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xba.js
var require_xba = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"mya",
		"myag",
		"myagg",
		"myags",
		"myan",
		"myanj",
		"myanh",
		"myad",
		"myal",
		"myalg",
		"myalm",
		"myalb",
		"myals",
		"myalt",
		"myalp",
		"myalh",
		"myam",
		"myab",
		"myabs",
		"myas",
		"myass",
		"myang",
		"myaj",
		"myac",
		"myak",
		"myat",
		"myap",
		"myah",
		"myae",
		"myaeg",
		"myaegg",
		"myaegs",
		"myaen",
		"myaenj",
		"myaenh",
		"myaed",
		"myael",
		"myaelg",
		"myaelm",
		"myaelb",
		"myaels",
		"myaelt",
		"myaelp",
		"myaelh",
		"myaem",
		"myaeb",
		"myaebs",
		"myaes",
		"myaess",
		"myaeng",
		"myaej",
		"myaec",
		"myaek",
		"myaet",
		"myaep",
		"myaeh",
		"meo",
		"meog",
		"meogg",
		"meogs",
		"meon",
		"meonj",
		"meonh",
		"meod",
		"meol",
		"meolg",
		"meolm",
		"meolb",
		"meols",
		"meolt",
		"meolp",
		"meolh",
		"meom",
		"meob",
		"meobs",
		"meos",
		"meoss",
		"meong",
		"meoj",
		"meoc",
		"meok",
		"meot",
		"meop",
		"meoh",
		"me",
		"meg",
		"megg",
		"megs",
		"men",
		"menj",
		"menh",
		"med",
		"mel",
		"melg",
		"melm",
		"melb",
		"mels",
		"melt",
		"melp",
		"melh",
		"mem",
		"meb",
		"mebs",
		"mes",
		"mess",
		"meng",
		"mej",
		"mec",
		"mek",
		"met",
		"mep",
		"meh",
		"myeo",
		"myeog",
		"myeogg",
		"myeogs",
		"myeon",
		"myeonj",
		"myeonh",
		"myeod",
		"myeol",
		"myeolg",
		"myeolm",
		"myeolb",
		"myeols",
		"myeolt",
		"myeolp",
		"myeolh",
		"myeom",
		"myeob",
		"myeobs",
		"myeos",
		"myeoss",
		"myeong",
		"myeoj",
		"myeoc",
		"myeok",
		"myeot",
		"myeop",
		"myeoh",
		"mye",
		"myeg",
		"myegg",
		"myegs",
		"myen",
		"myenj",
		"myenh",
		"myed",
		"myel",
		"myelg",
		"myelm",
		"myelb",
		"myels",
		"myelt",
		"myelp",
		"myelh",
		"myem",
		"myeb",
		"myebs",
		"myes",
		"myess",
		"myeng",
		"myej",
		"myec",
		"myek",
		"myet",
		"myep",
		"myeh",
		"mo",
		"mog",
		"mogg",
		"mogs",
		"mon",
		"monj",
		"monh",
		"mod",
		"mol",
		"molg",
		"molm",
		"molb",
		"mols",
		"molt",
		"molp",
		"molh",
		"mom",
		"mob",
		"mobs",
		"mos",
		"moss",
		"mong",
		"moj",
		"moc",
		"mok",
		"mot",
		"mop",
		"moh",
		"mwa",
		"mwag",
		"mwagg",
		"mwags",
		"mwan",
		"mwanj",
		"mwanh",
		"mwad",
		"mwal",
		"mwalg",
		"mwalm",
		"mwalb",
		"mwals",
		"mwalt",
		"mwalp",
		"mwalh",
		"mwam",
		"mwab",
		"mwabs",
		"mwas",
		"mwass",
		"mwang",
		"mwaj",
		"mwac",
		"mwak",
		"mwat",
		"mwap",
		"mwah",
		"mwae",
		"mwaeg",
		"mwaegg",
		"mwaegs",
		"mwaen",
		"mwaenj",
		"mwaenh",
		"mwaed",
		"mwael",
		"mwaelg",
		"mwaelm",
		"mwaelb",
		"mwaels",
		"mwaelt",
		"mwaelp",
		"mwaelh",
		"mwaem",
		"mwaeb",
		"mwaebs",
		"mwaes",
		"mwaess",
		"mwaeng",
		"mwaej",
		"mwaec",
		"mwaek",
		"mwaet",
		"mwaep",
		"mwaeh",
		"moe",
		"moeg",
		"moegg",
		"moegs"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xbb.js
var require_xbb = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"moen",
		"moenj",
		"moenh",
		"moed",
		"moel",
		"moelg",
		"moelm",
		"moelb",
		"moels",
		"moelt",
		"moelp",
		"moelh",
		"moem",
		"moeb",
		"moebs",
		"moes",
		"moess",
		"moeng",
		"moej",
		"moec",
		"moek",
		"moet",
		"moep",
		"moeh",
		"myo",
		"myog",
		"myogg",
		"myogs",
		"myon",
		"myonj",
		"myonh",
		"myod",
		"myol",
		"myolg",
		"myolm",
		"myolb",
		"myols",
		"myolt",
		"myolp",
		"myolh",
		"myom",
		"myob",
		"myobs",
		"myos",
		"myoss",
		"myong",
		"myoj",
		"myoc",
		"myok",
		"myot",
		"myop",
		"myoh",
		"mu",
		"mug",
		"mugg",
		"mugs",
		"mun",
		"munj",
		"munh",
		"mud",
		"mul",
		"mulg",
		"mulm",
		"mulb",
		"muls",
		"mult",
		"mulp",
		"mulh",
		"mum",
		"mub",
		"mubs",
		"mus",
		"muss",
		"mung",
		"muj",
		"muc",
		"muk",
		"mut",
		"mup",
		"muh",
		"mweo",
		"mweog",
		"mweogg",
		"mweogs",
		"mweon",
		"mweonj",
		"mweonh",
		"mweod",
		"mweol",
		"mweolg",
		"mweolm",
		"mweolb",
		"mweols",
		"mweolt",
		"mweolp",
		"mweolh",
		"mweom",
		"mweob",
		"mweobs",
		"mweos",
		"mweoss",
		"mweong",
		"mweoj",
		"mweoc",
		"mweok",
		"mweot",
		"mweop",
		"mweoh",
		"mwe",
		"mweg",
		"mwegg",
		"mwegs",
		"mwen",
		"mwenj",
		"mwenh",
		"mwed",
		"mwel",
		"mwelg",
		"mwelm",
		"mwelb",
		"mwels",
		"mwelt",
		"mwelp",
		"mwelh",
		"mwem",
		"mweb",
		"mwebs",
		"mwes",
		"mwess",
		"mweng",
		"mwej",
		"mwec",
		"mwek",
		"mwet",
		"mwep",
		"mweh",
		"mwi",
		"mwig",
		"mwigg",
		"mwigs",
		"mwin",
		"mwinj",
		"mwinh",
		"mwid",
		"mwil",
		"mwilg",
		"mwilm",
		"mwilb",
		"mwils",
		"mwilt",
		"mwilp",
		"mwilh",
		"mwim",
		"mwib",
		"mwibs",
		"mwis",
		"mwiss",
		"mwing",
		"mwij",
		"mwic",
		"mwik",
		"mwit",
		"mwip",
		"mwih",
		"myu",
		"myug",
		"myugg",
		"myugs",
		"myun",
		"myunj",
		"myunh",
		"myud",
		"myul",
		"myulg",
		"myulm",
		"myulb",
		"myuls",
		"myult",
		"myulp",
		"myulh",
		"myum",
		"myub",
		"myubs",
		"myus",
		"myuss",
		"myung",
		"myuj",
		"myuc",
		"myuk",
		"myut",
		"myup",
		"myuh",
		"meu",
		"meug",
		"meugg",
		"meugs",
		"meun",
		"meunj",
		"meunh",
		"meud",
		"meul",
		"meulg",
		"meulm",
		"meulb",
		"meuls",
		"meult",
		"meulp",
		"meulh",
		"meum",
		"meub",
		"meubs",
		"meus",
		"meuss",
		"meung",
		"meuj",
		"meuc",
		"meuk",
		"meut",
		"meup",
		"meuh",
		"myi",
		"myig",
		"myigg",
		"myigs",
		"myin",
		"myinj",
		"myinh",
		"myid",
		"myil",
		"myilg",
		"myilm",
		"myilb",
		"myils",
		"myilt",
		"myilp",
		"myilh",
		"myim",
		"myib",
		"myibs",
		"myis",
		"myiss",
		"mying",
		"myij",
		"myic",
		"myik",
		"myit",
		"myip",
		"myih",
		"mi",
		"mig",
		"migg",
		"migs",
		"min",
		"minj",
		"minh",
		"mid"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xbc.js
var require_xbc = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"mil",
		"milg",
		"milm",
		"milb",
		"mils",
		"milt",
		"milp",
		"milh",
		"mim",
		"mib",
		"mibs",
		"mis",
		"miss",
		"ming",
		"mij",
		"mic",
		"mik",
		"mit",
		"mip",
		"mih",
		"ba",
		"bag",
		"bagg",
		"bags",
		"ban",
		"banj",
		"banh",
		"bad",
		"bal",
		"balg",
		"balm",
		"balb",
		"bals",
		"balt",
		"balp",
		"balh",
		"bam",
		"bab",
		"babs",
		"bas",
		"bass",
		"bang",
		"baj",
		"bac",
		"bak",
		"bat",
		"bap",
		"bah",
		"bae",
		"baeg",
		"baegg",
		"baegs",
		"baen",
		"baenj",
		"baenh",
		"baed",
		"bael",
		"baelg",
		"baelm",
		"baelb",
		"baels",
		"baelt",
		"baelp",
		"baelh",
		"baem",
		"baeb",
		"baebs",
		"baes",
		"baess",
		"baeng",
		"baej",
		"baec",
		"baek",
		"baet",
		"baep",
		"baeh",
		"bya",
		"byag",
		"byagg",
		"byags",
		"byan",
		"byanj",
		"byanh",
		"byad",
		"byal",
		"byalg",
		"byalm",
		"byalb",
		"byals",
		"byalt",
		"byalp",
		"byalh",
		"byam",
		"byab",
		"byabs",
		"byas",
		"byass",
		"byang",
		"byaj",
		"byac",
		"byak",
		"byat",
		"byap",
		"byah",
		"byae",
		"byaeg",
		"byaegg",
		"byaegs",
		"byaen",
		"byaenj",
		"byaenh",
		"byaed",
		"byael",
		"byaelg",
		"byaelm",
		"byaelb",
		"byaels",
		"byaelt",
		"byaelp",
		"byaelh",
		"byaem",
		"byaeb",
		"byaebs",
		"byaes",
		"byaess",
		"byaeng",
		"byaej",
		"byaec",
		"byaek",
		"byaet",
		"byaep",
		"byaeh",
		"beo",
		"beog",
		"beogg",
		"beogs",
		"beon",
		"beonj",
		"beonh",
		"beod",
		"beol",
		"beolg",
		"beolm",
		"beolb",
		"beols",
		"beolt",
		"beolp",
		"beolh",
		"beom",
		"beob",
		"beobs",
		"beos",
		"beoss",
		"beong",
		"beoj",
		"beoc",
		"beok",
		"beot",
		"beop",
		"beoh",
		"be",
		"beg",
		"begg",
		"begs",
		"ben",
		"benj",
		"benh",
		"bed",
		"bel",
		"belg",
		"belm",
		"belb",
		"bels",
		"belt",
		"belp",
		"belh",
		"bem",
		"beb",
		"bebs",
		"bes",
		"bess",
		"beng",
		"bej",
		"bec",
		"bek",
		"bet",
		"bep",
		"beh",
		"byeo",
		"byeog",
		"byeogg",
		"byeogs",
		"byeon",
		"byeonj",
		"byeonh",
		"byeod",
		"byeol",
		"byeolg",
		"byeolm",
		"byeolb",
		"byeols",
		"byeolt",
		"byeolp",
		"byeolh",
		"byeom",
		"byeob",
		"byeobs",
		"byeos",
		"byeoss",
		"byeong",
		"byeoj",
		"byeoc",
		"byeok",
		"byeot",
		"byeop",
		"byeoh",
		"bye",
		"byeg",
		"byegg",
		"byegs",
		"byen",
		"byenj",
		"byenh",
		"byed",
		"byel",
		"byelg",
		"byelm",
		"byelb",
		"byels",
		"byelt",
		"byelp",
		"byelh",
		"byem",
		"byeb",
		"byebs",
		"byes",
		"byess",
		"byeng",
		"byej",
		"byec",
		"byek",
		"byet",
		"byep",
		"byeh",
		"bo",
		"bog",
		"bogg",
		"bogs",
		"bon",
		"bonj",
		"bonh",
		"bod",
		"bol",
		"bolg",
		"bolm",
		"bolb"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xbd.js
var require_xbd = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"bols",
		"bolt",
		"bolp",
		"bolh",
		"bom",
		"bob",
		"bobs",
		"bos",
		"boss",
		"bong",
		"boj",
		"boc",
		"bok",
		"bot",
		"bop",
		"boh",
		"bwa",
		"bwag",
		"bwagg",
		"bwags",
		"bwan",
		"bwanj",
		"bwanh",
		"bwad",
		"bwal",
		"bwalg",
		"bwalm",
		"bwalb",
		"bwals",
		"bwalt",
		"bwalp",
		"bwalh",
		"bwam",
		"bwab",
		"bwabs",
		"bwas",
		"bwass",
		"bwang",
		"bwaj",
		"bwac",
		"bwak",
		"bwat",
		"bwap",
		"bwah",
		"bwae",
		"bwaeg",
		"bwaegg",
		"bwaegs",
		"bwaen",
		"bwaenj",
		"bwaenh",
		"bwaed",
		"bwael",
		"bwaelg",
		"bwaelm",
		"bwaelb",
		"bwaels",
		"bwaelt",
		"bwaelp",
		"bwaelh",
		"bwaem",
		"bwaeb",
		"bwaebs",
		"bwaes",
		"bwaess",
		"bwaeng",
		"bwaej",
		"bwaec",
		"bwaek",
		"bwaet",
		"bwaep",
		"bwaeh",
		"boe",
		"boeg",
		"boegg",
		"boegs",
		"boen",
		"boenj",
		"boenh",
		"boed",
		"boel",
		"boelg",
		"boelm",
		"boelb",
		"boels",
		"boelt",
		"boelp",
		"boelh",
		"boem",
		"boeb",
		"boebs",
		"boes",
		"boess",
		"boeng",
		"boej",
		"boec",
		"boek",
		"boet",
		"boep",
		"boeh",
		"byo",
		"byog",
		"byogg",
		"byogs",
		"byon",
		"byonj",
		"byonh",
		"byod",
		"byol",
		"byolg",
		"byolm",
		"byolb",
		"byols",
		"byolt",
		"byolp",
		"byolh",
		"byom",
		"byob",
		"byobs",
		"byos",
		"byoss",
		"byong",
		"byoj",
		"byoc",
		"byok",
		"byot",
		"byop",
		"byoh",
		"bu",
		"bug",
		"bugg",
		"bugs",
		"bun",
		"bunj",
		"bunh",
		"bud",
		"bul",
		"bulg",
		"bulm",
		"bulb",
		"buls",
		"bult",
		"bulp",
		"bulh",
		"bum",
		"bub",
		"bubs",
		"bus",
		"buss",
		"bung",
		"buj",
		"buc",
		"buk",
		"but",
		"bup",
		"buh",
		"bweo",
		"bweog",
		"bweogg",
		"bweogs",
		"bweon",
		"bweonj",
		"bweonh",
		"bweod",
		"bweol",
		"bweolg",
		"bweolm",
		"bweolb",
		"bweols",
		"bweolt",
		"bweolp",
		"bweolh",
		"bweom",
		"bweob",
		"bweobs",
		"bweos",
		"bweoss",
		"bweong",
		"bweoj",
		"bweoc",
		"bweok",
		"bweot",
		"bweop",
		"bweoh",
		"bwe",
		"bweg",
		"bwegg",
		"bwegs",
		"bwen",
		"bwenj",
		"bwenh",
		"bwed",
		"bwel",
		"bwelg",
		"bwelm",
		"bwelb",
		"bwels",
		"bwelt",
		"bwelp",
		"bwelh",
		"bwem",
		"bweb",
		"bwebs",
		"bwes",
		"bwess",
		"bweng",
		"bwej",
		"bwec",
		"bwek",
		"bwet",
		"bwep",
		"bweh",
		"bwi",
		"bwig",
		"bwigg",
		"bwigs",
		"bwin",
		"bwinj",
		"bwinh",
		"bwid",
		"bwil",
		"bwilg",
		"bwilm",
		"bwilb",
		"bwils",
		"bwilt",
		"bwilp",
		"bwilh",
		"bwim",
		"bwib",
		"bwibs",
		"bwis",
		"bwiss",
		"bwing",
		"bwij",
		"bwic",
		"bwik",
		"bwit",
		"bwip",
		"bwih",
		"byu",
		"byug",
		"byugg",
		"byugs",
		"byun",
		"byunj",
		"byunh",
		"byud",
		"byul",
		"byulg",
		"byulm",
		"byulb",
		"byuls",
		"byult",
		"byulp",
		"byulh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xbe.js
var require_xbe = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"byum",
		"byub",
		"byubs",
		"byus",
		"byuss",
		"byung",
		"byuj",
		"byuc",
		"byuk",
		"byut",
		"byup",
		"byuh",
		"beu",
		"beug",
		"beugg",
		"beugs",
		"beun",
		"beunj",
		"beunh",
		"beud",
		"beul",
		"beulg",
		"beulm",
		"beulb",
		"beuls",
		"beult",
		"beulp",
		"beulh",
		"beum",
		"beub",
		"beubs",
		"beus",
		"beuss",
		"beung",
		"beuj",
		"beuc",
		"beuk",
		"beut",
		"beup",
		"beuh",
		"byi",
		"byig",
		"byigg",
		"byigs",
		"byin",
		"byinj",
		"byinh",
		"byid",
		"byil",
		"byilg",
		"byilm",
		"byilb",
		"byils",
		"byilt",
		"byilp",
		"byilh",
		"byim",
		"byib",
		"byibs",
		"byis",
		"byiss",
		"bying",
		"byij",
		"byic",
		"byik",
		"byit",
		"byip",
		"byih",
		"bi",
		"big",
		"bigg",
		"bigs",
		"bin",
		"binj",
		"binh",
		"bid",
		"bil",
		"bilg",
		"bilm",
		"bilb",
		"bils",
		"bilt",
		"bilp",
		"bilh",
		"bim",
		"bib",
		"bibs",
		"bis",
		"biss",
		"bing",
		"bij",
		"bic",
		"bik",
		"bit",
		"bip",
		"bih",
		"bba",
		"bbag",
		"bbagg",
		"bbags",
		"bban",
		"bbanj",
		"bbanh",
		"bbad",
		"bbal",
		"bbalg",
		"bbalm",
		"bbalb",
		"bbals",
		"bbalt",
		"bbalp",
		"bbalh",
		"bbam",
		"bbab",
		"bbabs",
		"bbas",
		"bbass",
		"bbang",
		"bbaj",
		"bbac",
		"bbak",
		"bbat",
		"bbap",
		"bbah",
		"bbae",
		"bbaeg",
		"bbaegg",
		"bbaegs",
		"bbaen",
		"bbaenj",
		"bbaenh",
		"bbaed",
		"bbael",
		"bbaelg",
		"bbaelm",
		"bbaelb",
		"bbaels",
		"bbaelt",
		"bbaelp",
		"bbaelh",
		"bbaem",
		"bbaeb",
		"bbaebs",
		"bbaes",
		"bbaess",
		"bbaeng",
		"bbaej",
		"bbaec",
		"bbaek",
		"bbaet",
		"bbaep",
		"bbaeh",
		"bbya",
		"bbyag",
		"bbyagg",
		"bbyags",
		"bbyan",
		"bbyanj",
		"bbyanh",
		"bbyad",
		"bbyal",
		"bbyalg",
		"bbyalm",
		"bbyalb",
		"bbyals",
		"bbyalt",
		"bbyalp",
		"bbyalh",
		"bbyam",
		"bbyab",
		"bbyabs",
		"bbyas",
		"bbyass",
		"bbyang",
		"bbyaj",
		"bbyac",
		"bbyak",
		"bbyat",
		"bbyap",
		"bbyah",
		"bbyae",
		"bbyaeg",
		"bbyaegg",
		"bbyaegs",
		"bbyaen",
		"bbyaenj",
		"bbyaenh",
		"bbyaed",
		"bbyael",
		"bbyaelg",
		"bbyaelm",
		"bbyaelb",
		"bbyaels",
		"bbyaelt",
		"bbyaelp",
		"bbyaelh",
		"bbyaem",
		"bbyaeb",
		"bbyaebs",
		"bbyaes",
		"bbyaess",
		"bbyaeng",
		"bbyaej",
		"bbyaec",
		"bbyaek",
		"bbyaet",
		"bbyaep",
		"bbyaeh",
		"bbeo",
		"bbeog",
		"bbeogg",
		"bbeogs",
		"bbeon",
		"bbeonj",
		"bbeonh",
		"bbeod",
		"bbeol",
		"bbeolg",
		"bbeolm",
		"bbeolb",
		"bbeols",
		"bbeolt",
		"bbeolp",
		"bbeolh",
		"bbeom",
		"bbeob",
		"bbeobs",
		"bbeos",
		"bbeoss",
		"bbeong",
		"bbeoj",
		"bbeoc",
		"bbeok",
		"bbeot",
		"bbeop",
		"bbeoh",
		"bbe",
		"bbeg",
		"bbegg",
		"bbegs",
		"bben",
		"bbenj",
		"bbenh",
		"bbed",
		"bbel",
		"bbelg",
		"bbelm",
		"bbelb",
		"bbels",
		"bbelt",
		"bbelp",
		"bbelh",
		"bbem",
		"bbeb",
		"bbebs",
		"bbes"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xbf.js
var require_xbf = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"bbess",
		"bbeng",
		"bbej",
		"bbec",
		"bbek",
		"bbet",
		"bbep",
		"bbeh",
		"bbyeo",
		"bbyeog",
		"bbyeogg",
		"bbyeogs",
		"bbyeon",
		"bbyeonj",
		"bbyeonh",
		"bbyeod",
		"bbyeol",
		"bbyeolg",
		"bbyeolm",
		"bbyeolb",
		"bbyeols",
		"bbyeolt",
		"bbyeolp",
		"bbyeolh",
		"bbyeom",
		"bbyeob",
		"bbyeobs",
		"bbyeos",
		"bbyeoss",
		"bbyeong",
		"bbyeoj",
		"bbyeoc",
		"bbyeok",
		"bbyeot",
		"bbyeop",
		"bbyeoh",
		"bbye",
		"bbyeg",
		"bbyegg",
		"bbyegs",
		"bbyen",
		"bbyenj",
		"bbyenh",
		"bbyed",
		"bbyel",
		"bbyelg",
		"bbyelm",
		"bbyelb",
		"bbyels",
		"bbyelt",
		"bbyelp",
		"bbyelh",
		"bbyem",
		"bbyeb",
		"bbyebs",
		"bbyes",
		"bbyess",
		"bbyeng",
		"bbyej",
		"bbyec",
		"bbyek",
		"bbyet",
		"bbyep",
		"bbyeh",
		"bbo",
		"bbog",
		"bbogg",
		"bbogs",
		"bbon",
		"bbonj",
		"bbonh",
		"bbod",
		"bbol",
		"bbolg",
		"bbolm",
		"bbolb",
		"bbols",
		"bbolt",
		"bbolp",
		"bbolh",
		"bbom",
		"bbob",
		"bbobs",
		"bbos",
		"bboss",
		"bbong",
		"bboj",
		"bboc",
		"bbok",
		"bbot",
		"bbop",
		"bboh",
		"bbwa",
		"bbwag",
		"bbwagg",
		"bbwags",
		"bbwan",
		"bbwanj",
		"bbwanh",
		"bbwad",
		"bbwal",
		"bbwalg",
		"bbwalm",
		"bbwalb",
		"bbwals",
		"bbwalt",
		"bbwalp",
		"bbwalh",
		"bbwam",
		"bbwab",
		"bbwabs",
		"bbwas",
		"bbwass",
		"bbwang",
		"bbwaj",
		"bbwac",
		"bbwak",
		"bbwat",
		"bbwap",
		"bbwah",
		"bbwae",
		"bbwaeg",
		"bbwaegg",
		"bbwaegs",
		"bbwaen",
		"bbwaenj",
		"bbwaenh",
		"bbwaed",
		"bbwael",
		"bbwaelg",
		"bbwaelm",
		"bbwaelb",
		"bbwaels",
		"bbwaelt",
		"bbwaelp",
		"bbwaelh",
		"bbwaem",
		"bbwaeb",
		"bbwaebs",
		"bbwaes",
		"bbwaess",
		"bbwaeng",
		"bbwaej",
		"bbwaec",
		"bbwaek",
		"bbwaet",
		"bbwaep",
		"bbwaeh",
		"bboe",
		"bboeg",
		"bboegg",
		"bboegs",
		"bboen",
		"bboenj",
		"bboenh",
		"bboed",
		"bboel",
		"bboelg",
		"bboelm",
		"bboelb",
		"bboels",
		"bboelt",
		"bboelp",
		"bboelh",
		"bboem",
		"bboeb",
		"bboebs",
		"bboes",
		"bboess",
		"bboeng",
		"bboej",
		"bboec",
		"bboek",
		"bboet",
		"bboep",
		"bboeh",
		"bbyo",
		"bbyog",
		"bbyogg",
		"bbyogs",
		"bbyon",
		"bbyonj",
		"bbyonh",
		"bbyod",
		"bbyol",
		"bbyolg",
		"bbyolm",
		"bbyolb",
		"bbyols",
		"bbyolt",
		"bbyolp",
		"bbyolh",
		"bbyom",
		"bbyob",
		"bbyobs",
		"bbyos",
		"bbyoss",
		"bbyong",
		"bbyoj",
		"bbyoc",
		"bbyok",
		"bbyot",
		"bbyop",
		"bbyoh",
		"bbu",
		"bbug",
		"bbugg",
		"bbugs",
		"bbun",
		"bbunj",
		"bbunh",
		"bbud",
		"bbul",
		"bbulg",
		"bbulm",
		"bbulb",
		"bbuls",
		"bbult",
		"bbulp",
		"bbulh",
		"bbum",
		"bbub",
		"bbubs",
		"bbus",
		"bbuss",
		"bbung",
		"bbuj",
		"bbuc",
		"bbuk",
		"bbut",
		"bbup",
		"bbuh",
		"bbweo",
		"bbweog",
		"bbweogg",
		"bbweogs",
		"bbweon",
		"bbweonj",
		"bbweonh",
		"bbweod",
		"bbweol",
		"bbweolg",
		"bbweolm",
		"bbweolb",
		"bbweols",
		"bbweolt",
		"bbweolp",
		"bbweolh",
		"bbweom",
		"bbweob",
		"bbweobs",
		"bbweos",
		"bbweoss",
		"bbweong",
		"bbweoj",
		"bbweoc"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc0.js
var require_xc0 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"bbweok",
		"bbweot",
		"bbweop",
		"bbweoh",
		"bbwe",
		"bbweg",
		"bbwegg",
		"bbwegs",
		"bbwen",
		"bbwenj",
		"bbwenh",
		"bbwed",
		"bbwel",
		"bbwelg",
		"bbwelm",
		"bbwelb",
		"bbwels",
		"bbwelt",
		"bbwelp",
		"bbwelh",
		"bbwem",
		"bbweb",
		"bbwebs",
		"bbwes",
		"bbwess",
		"bbweng",
		"bbwej",
		"bbwec",
		"bbwek",
		"bbwet",
		"bbwep",
		"bbweh",
		"bbwi",
		"bbwig",
		"bbwigg",
		"bbwigs",
		"bbwin",
		"bbwinj",
		"bbwinh",
		"bbwid",
		"bbwil",
		"bbwilg",
		"bbwilm",
		"bbwilb",
		"bbwils",
		"bbwilt",
		"bbwilp",
		"bbwilh",
		"bbwim",
		"bbwib",
		"bbwibs",
		"bbwis",
		"bbwiss",
		"bbwing",
		"bbwij",
		"bbwic",
		"bbwik",
		"bbwit",
		"bbwip",
		"bbwih",
		"bbyu",
		"bbyug",
		"bbyugg",
		"bbyugs",
		"bbyun",
		"bbyunj",
		"bbyunh",
		"bbyud",
		"bbyul",
		"bbyulg",
		"bbyulm",
		"bbyulb",
		"bbyuls",
		"bbyult",
		"bbyulp",
		"bbyulh",
		"bbyum",
		"bbyub",
		"bbyubs",
		"bbyus",
		"bbyuss",
		"bbyung",
		"bbyuj",
		"bbyuc",
		"bbyuk",
		"bbyut",
		"bbyup",
		"bbyuh",
		"bbeu",
		"bbeug",
		"bbeugg",
		"bbeugs",
		"bbeun",
		"bbeunj",
		"bbeunh",
		"bbeud",
		"bbeul",
		"bbeulg",
		"bbeulm",
		"bbeulb",
		"bbeuls",
		"bbeult",
		"bbeulp",
		"bbeulh",
		"bbeum",
		"bbeub",
		"bbeubs",
		"bbeus",
		"bbeuss",
		"bbeung",
		"bbeuj",
		"bbeuc",
		"bbeuk",
		"bbeut",
		"bbeup",
		"bbeuh",
		"bbyi",
		"bbyig",
		"bbyigg",
		"bbyigs",
		"bbyin",
		"bbyinj",
		"bbyinh",
		"bbyid",
		"bbyil",
		"bbyilg",
		"bbyilm",
		"bbyilb",
		"bbyils",
		"bbyilt",
		"bbyilp",
		"bbyilh",
		"bbyim",
		"bbyib",
		"bbyibs",
		"bbyis",
		"bbyiss",
		"bbying",
		"bbyij",
		"bbyic",
		"bbyik",
		"bbyit",
		"bbyip",
		"bbyih",
		"bbi",
		"bbig",
		"bbigg",
		"bbigs",
		"bbin",
		"bbinj",
		"bbinh",
		"bbid",
		"bbil",
		"bbilg",
		"bbilm",
		"bbilb",
		"bbils",
		"bbilt",
		"bbilp",
		"bbilh",
		"bbim",
		"bbib",
		"bbibs",
		"bbis",
		"bbiss",
		"bbing",
		"bbij",
		"bbic",
		"bbik",
		"bbit",
		"bbip",
		"bbih",
		"sa",
		"sag",
		"sagg",
		"sags",
		"san",
		"sanj",
		"sanh",
		"sad",
		"sal",
		"salg",
		"salm",
		"salb",
		"sals",
		"salt",
		"salp",
		"salh",
		"sam",
		"sab",
		"sabs",
		"sas",
		"sass",
		"sang",
		"saj",
		"sac",
		"sak",
		"sat",
		"sap",
		"sah",
		"sae",
		"saeg",
		"saegg",
		"saegs",
		"saen",
		"saenj",
		"saenh",
		"saed",
		"sael",
		"saelg",
		"saelm",
		"saelb",
		"saels",
		"saelt",
		"saelp",
		"saelh",
		"saem",
		"saeb",
		"saebs",
		"saes",
		"saess",
		"saeng",
		"saej",
		"saec",
		"saek",
		"saet",
		"saep",
		"saeh",
		"sya",
		"syag",
		"syagg",
		"syags",
		"syan",
		"syanj",
		"syanh",
		"syad",
		"syal",
		"syalg",
		"syalm",
		"syalb",
		"syals",
		"syalt",
		"syalp",
		"syalh",
		"syam",
		"syab",
		"syabs",
		"syas",
		"syass",
		"syang",
		"syaj",
		"syac",
		"syak",
		"syat",
		"syap",
		"syah"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc1.js
var require_xc1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"syae",
		"syaeg",
		"syaegg",
		"syaegs",
		"syaen",
		"syaenj",
		"syaenh",
		"syaed",
		"syael",
		"syaelg",
		"syaelm",
		"syaelb",
		"syaels",
		"syaelt",
		"syaelp",
		"syaelh",
		"syaem",
		"syaeb",
		"syaebs",
		"syaes",
		"syaess",
		"syaeng",
		"syaej",
		"syaec",
		"syaek",
		"syaet",
		"syaep",
		"syaeh",
		"seo",
		"seog",
		"seogg",
		"seogs",
		"seon",
		"seonj",
		"seonh",
		"seod",
		"seol",
		"seolg",
		"seolm",
		"seolb",
		"seols",
		"seolt",
		"seolp",
		"seolh",
		"seom",
		"seob",
		"seobs",
		"seos",
		"seoss",
		"seong",
		"seoj",
		"seoc",
		"seok",
		"seot",
		"seop",
		"seoh",
		"se",
		"seg",
		"segg",
		"segs",
		"sen",
		"senj",
		"senh",
		"sed",
		"sel",
		"selg",
		"selm",
		"selb",
		"sels",
		"selt",
		"selp",
		"selh",
		"sem",
		"seb",
		"sebs",
		"ses",
		"sess",
		"seng",
		"sej",
		"sec",
		"sek",
		"set",
		"sep",
		"seh",
		"syeo",
		"syeog",
		"syeogg",
		"syeogs",
		"syeon",
		"syeonj",
		"syeonh",
		"syeod",
		"syeol",
		"syeolg",
		"syeolm",
		"syeolb",
		"syeols",
		"syeolt",
		"syeolp",
		"syeolh",
		"syeom",
		"syeob",
		"syeobs",
		"syeos",
		"syeoss",
		"syeong",
		"syeoj",
		"syeoc",
		"syeok",
		"syeot",
		"syeop",
		"syeoh",
		"sye",
		"syeg",
		"syegg",
		"syegs",
		"syen",
		"syenj",
		"syenh",
		"syed",
		"syel",
		"syelg",
		"syelm",
		"syelb",
		"syels",
		"syelt",
		"syelp",
		"syelh",
		"syem",
		"syeb",
		"syebs",
		"syes",
		"syess",
		"syeng",
		"syej",
		"syec",
		"syek",
		"syet",
		"syep",
		"syeh",
		"so",
		"sog",
		"sogg",
		"sogs",
		"son",
		"sonj",
		"sonh",
		"sod",
		"sol",
		"solg",
		"solm",
		"solb",
		"sols",
		"solt",
		"solp",
		"solh",
		"som",
		"sob",
		"sobs",
		"sos",
		"soss",
		"song",
		"soj",
		"soc",
		"sok",
		"sot",
		"sop",
		"soh",
		"swa",
		"swag",
		"swagg",
		"swags",
		"swan",
		"swanj",
		"swanh",
		"swad",
		"swal",
		"swalg",
		"swalm",
		"swalb",
		"swals",
		"swalt",
		"swalp",
		"swalh",
		"swam",
		"swab",
		"swabs",
		"swas",
		"swass",
		"swang",
		"swaj",
		"swac",
		"swak",
		"swat",
		"swap",
		"swah",
		"swae",
		"swaeg",
		"swaegg",
		"swaegs",
		"swaen",
		"swaenj",
		"swaenh",
		"swaed",
		"swael",
		"swaelg",
		"swaelm",
		"swaelb",
		"swaels",
		"swaelt",
		"swaelp",
		"swaelh",
		"swaem",
		"swaeb",
		"swaebs",
		"swaes",
		"swaess",
		"swaeng",
		"swaej",
		"swaec",
		"swaek",
		"swaet",
		"swaep",
		"swaeh",
		"soe",
		"soeg",
		"soegg",
		"soegs",
		"soen",
		"soenj",
		"soenh",
		"soed",
		"soel",
		"soelg",
		"soelm",
		"soelb",
		"soels",
		"soelt",
		"soelp",
		"soelh",
		"soem",
		"soeb",
		"soebs",
		"soes",
		"soess",
		"soeng",
		"soej",
		"soec",
		"soek",
		"soet",
		"soep",
		"soeh",
		"syo",
		"syog",
		"syogg",
		"syogs"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc2.js
var require_xc2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"syon",
		"syonj",
		"syonh",
		"syod",
		"syol",
		"syolg",
		"syolm",
		"syolb",
		"syols",
		"syolt",
		"syolp",
		"syolh",
		"syom",
		"syob",
		"syobs",
		"syos",
		"syoss",
		"syong",
		"syoj",
		"syoc",
		"syok",
		"syot",
		"syop",
		"syoh",
		"su",
		"sug",
		"sugg",
		"sugs",
		"sun",
		"sunj",
		"sunh",
		"sud",
		"sul",
		"sulg",
		"sulm",
		"sulb",
		"suls",
		"sult",
		"sulp",
		"sulh",
		"sum",
		"sub",
		"subs",
		"sus",
		"suss",
		"sung",
		"suj",
		"suc",
		"suk",
		"sut",
		"sup",
		"suh",
		"sweo",
		"sweog",
		"sweogg",
		"sweogs",
		"sweon",
		"sweonj",
		"sweonh",
		"sweod",
		"sweol",
		"sweolg",
		"sweolm",
		"sweolb",
		"sweols",
		"sweolt",
		"sweolp",
		"sweolh",
		"sweom",
		"sweob",
		"sweobs",
		"sweos",
		"sweoss",
		"sweong",
		"sweoj",
		"sweoc",
		"sweok",
		"sweot",
		"sweop",
		"sweoh",
		"swe",
		"sweg",
		"swegg",
		"swegs",
		"swen",
		"swenj",
		"swenh",
		"swed",
		"swel",
		"swelg",
		"swelm",
		"swelb",
		"swels",
		"swelt",
		"swelp",
		"swelh",
		"swem",
		"sweb",
		"swebs",
		"swes",
		"swess",
		"sweng",
		"swej",
		"swec",
		"swek",
		"swet",
		"swep",
		"sweh",
		"swi",
		"swig",
		"swigg",
		"swigs",
		"swin",
		"swinj",
		"swinh",
		"swid",
		"swil",
		"swilg",
		"swilm",
		"swilb",
		"swils",
		"swilt",
		"swilp",
		"swilh",
		"swim",
		"swib",
		"swibs",
		"swis",
		"swiss",
		"swing",
		"swij",
		"swic",
		"swik",
		"swit",
		"swip",
		"swih",
		"syu",
		"syug",
		"syugg",
		"syugs",
		"syun",
		"syunj",
		"syunh",
		"syud",
		"syul",
		"syulg",
		"syulm",
		"syulb",
		"syuls",
		"syult",
		"syulp",
		"syulh",
		"syum",
		"syub",
		"syubs",
		"syus",
		"syuss",
		"syung",
		"syuj",
		"syuc",
		"syuk",
		"syut",
		"syup",
		"syuh",
		"seu",
		"seug",
		"seugg",
		"seugs",
		"seun",
		"seunj",
		"seunh",
		"seud",
		"seul",
		"seulg",
		"seulm",
		"seulb",
		"seuls",
		"seult",
		"seulp",
		"seulh",
		"seum",
		"seub",
		"seubs",
		"seus",
		"seuss",
		"seung",
		"seuj",
		"seuc",
		"seuk",
		"seut",
		"seup",
		"seuh",
		"syi",
		"syig",
		"syigg",
		"syigs",
		"syin",
		"syinj",
		"syinh",
		"syid",
		"syil",
		"syilg",
		"syilm",
		"syilb",
		"syils",
		"syilt",
		"syilp",
		"syilh",
		"syim",
		"syib",
		"syibs",
		"syis",
		"syiss",
		"sying",
		"syij",
		"syic",
		"syik",
		"syit",
		"syip",
		"syih",
		"si",
		"sig",
		"sigg",
		"sigs",
		"sin",
		"sinj",
		"sinh",
		"sid",
		"sil",
		"silg",
		"silm",
		"silb",
		"sils",
		"silt",
		"silp",
		"silh",
		"sim",
		"sib",
		"sibs",
		"sis",
		"siss",
		"sing",
		"sij",
		"sic",
		"sik",
		"sit",
		"sip",
		"sih",
		"ssa",
		"ssag",
		"ssagg",
		"ssags",
		"ssan",
		"ssanj",
		"ssanh",
		"ssad"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc3.js
var require_xc3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ssal",
		"ssalg",
		"ssalm",
		"ssalb",
		"ssals",
		"ssalt",
		"ssalp",
		"ssalh",
		"ssam",
		"ssab",
		"ssabs",
		"ssas",
		"ssass",
		"ssang",
		"ssaj",
		"ssac",
		"ssak",
		"ssat",
		"ssap",
		"ssah",
		"ssae",
		"ssaeg",
		"ssaegg",
		"ssaegs",
		"ssaen",
		"ssaenj",
		"ssaenh",
		"ssaed",
		"ssael",
		"ssaelg",
		"ssaelm",
		"ssaelb",
		"ssaels",
		"ssaelt",
		"ssaelp",
		"ssaelh",
		"ssaem",
		"ssaeb",
		"ssaebs",
		"ssaes",
		"ssaess",
		"ssaeng",
		"ssaej",
		"ssaec",
		"ssaek",
		"ssaet",
		"ssaep",
		"ssaeh",
		"ssya",
		"ssyag",
		"ssyagg",
		"ssyags",
		"ssyan",
		"ssyanj",
		"ssyanh",
		"ssyad",
		"ssyal",
		"ssyalg",
		"ssyalm",
		"ssyalb",
		"ssyals",
		"ssyalt",
		"ssyalp",
		"ssyalh",
		"ssyam",
		"ssyab",
		"ssyabs",
		"ssyas",
		"ssyass",
		"ssyang",
		"ssyaj",
		"ssyac",
		"ssyak",
		"ssyat",
		"ssyap",
		"ssyah",
		"ssyae",
		"ssyaeg",
		"ssyaegg",
		"ssyaegs",
		"ssyaen",
		"ssyaenj",
		"ssyaenh",
		"ssyaed",
		"ssyael",
		"ssyaelg",
		"ssyaelm",
		"ssyaelb",
		"ssyaels",
		"ssyaelt",
		"ssyaelp",
		"ssyaelh",
		"ssyaem",
		"ssyaeb",
		"ssyaebs",
		"ssyaes",
		"ssyaess",
		"ssyaeng",
		"ssyaej",
		"ssyaec",
		"ssyaek",
		"ssyaet",
		"ssyaep",
		"ssyaeh",
		"sseo",
		"sseog",
		"sseogg",
		"sseogs",
		"sseon",
		"sseonj",
		"sseonh",
		"sseod",
		"sseol",
		"sseolg",
		"sseolm",
		"sseolb",
		"sseols",
		"sseolt",
		"sseolp",
		"sseolh",
		"sseom",
		"sseob",
		"sseobs",
		"sseos",
		"sseoss",
		"sseong",
		"sseoj",
		"sseoc",
		"sseok",
		"sseot",
		"sseop",
		"sseoh",
		"sse",
		"sseg",
		"ssegg",
		"ssegs",
		"ssen",
		"ssenj",
		"ssenh",
		"ssed",
		"ssel",
		"sselg",
		"sselm",
		"sselb",
		"ssels",
		"sselt",
		"sselp",
		"sselh",
		"ssem",
		"sseb",
		"ssebs",
		"sses",
		"ssess",
		"sseng",
		"ssej",
		"ssec",
		"ssek",
		"sset",
		"ssep",
		"sseh",
		"ssyeo",
		"ssyeog",
		"ssyeogg",
		"ssyeogs",
		"ssyeon",
		"ssyeonj",
		"ssyeonh",
		"ssyeod",
		"ssyeol",
		"ssyeolg",
		"ssyeolm",
		"ssyeolb",
		"ssyeols",
		"ssyeolt",
		"ssyeolp",
		"ssyeolh",
		"ssyeom",
		"ssyeob",
		"ssyeobs",
		"ssyeos",
		"ssyeoss",
		"ssyeong",
		"ssyeoj",
		"ssyeoc",
		"ssyeok",
		"ssyeot",
		"ssyeop",
		"ssyeoh",
		"ssye",
		"ssyeg",
		"ssyegg",
		"ssyegs",
		"ssyen",
		"ssyenj",
		"ssyenh",
		"ssyed",
		"ssyel",
		"ssyelg",
		"ssyelm",
		"ssyelb",
		"ssyels",
		"ssyelt",
		"ssyelp",
		"ssyelh",
		"ssyem",
		"ssyeb",
		"ssyebs",
		"ssyes",
		"ssyess",
		"ssyeng",
		"ssyej",
		"ssyec",
		"ssyek",
		"ssyet",
		"ssyep",
		"ssyeh",
		"sso",
		"ssog",
		"ssogg",
		"ssogs",
		"sson",
		"ssonj",
		"ssonh",
		"ssod",
		"ssol",
		"ssolg",
		"ssolm",
		"ssolb",
		"ssols",
		"ssolt",
		"ssolp",
		"ssolh",
		"ssom",
		"ssob",
		"ssobs",
		"ssos",
		"ssoss",
		"ssong",
		"ssoj",
		"ssoc",
		"ssok",
		"ssot",
		"ssop",
		"ssoh",
		"sswa",
		"sswag",
		"sswagg",
		"sswags",
		"sswan",
		"sswanj",
		"sswanh",
		"sswad",
		"sswal",
		"sswalg",
		"sswalm",
		"sswalb"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc4.js
var require_xc4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"sswals",
		"sswalt",
		"sswalp",
		"sswalh",
		"sswam",
		"sswab",
		"sswabs",
		"sswas",
		"sswass",
		"sswang",
		"sswaj",
		"sswac",
		"sswak",
		"sswat",
		"sswap",
		"sswah",
		"sswae",
		"sswaeg",
		"sswaegg",
		"sswaegs",
		"sswaen",
		"sswaenj",
		"sswaenh",
		"sswaed",
		"sswael",
		"sswaelg",
		"sswaelm",
		"sswaelb",
		"sswaels",
		"sswaelt",
		"sswaelp",
		"sswaelh",
		"sswaem",
		"sswaeb",
		"sswaebs",
		"sswaes",
		"sswaess",
		"sswaeng",
		"sswaej",
		"sswaec",
		"sswaek",
		"sswaet",
		"sswaep",
		"sswaeh",
		"ssoe",
		"ssoeg",
		"ssoegg",
		"ssoegs",
		"ssoen",
		"ssoenj",
		"ssoenh",
		"ssoed",
		"ssoel",
		"ssoelg",
		"ssoelm",
		"ssoelb",
		"ssoels",
		"ssoelt",
		"ssoelp",
		"ssoelh",
		"ssoem",
		"ssoeb",
		"ssoebs",
		"ssoes",
		"ssoess",
		"ssoeng",
		"ssoej",
		"ssoec",
		"ssoek",
		"ssoet",
		"ssoep",
		"ssoeh",
		"ssyo",
		"ssyog",
		"ssyogg",
		"ssyogs",
		"ssyon",
		"ssyonj",
		"ssyonh",
		"ssyod",
		"ssyol",
		"ssyolg",
		"ssyolm",
		"ssyolb",
		"ssyols",
		"ssyolt",
		"ssyolp",
		"ssyolh",
		"ssyom",
		"ssyob",
		"ssyobs",
		"ssyos",
		"ssyoss",
		"ssyong",
		"ssyoj",
		"ssyoc",
		"ssyok",
		"ssyot",
		"ssyop",
		"ssyoh",
		"ssu",
		"ssug",
		"ssugg",
		"ssugs",
		"ssun",
		"ssunj",
		"ssunh",
		"ssud",
		"ssul",
		"ssulg",
		"ssulm",
		"ssulb",
		"ssuls",
		"ssult",
		"ssulp",
		"ssulh",
		"ssum",
		"ssub",
		"ssubs",
		"ssus",
		"ssuss",
		"ssung",
		"ssuj",
		"ssuc",
		"ssuk",
		"ssut",
		"ssup",
		"ssuh",
		"ssweo",
		"ssweog",
		"ssweogg",
		"ssweogs",
		"ssweon",
		"ssweonj",
		"ssweonh",
		"ssweod",
		"ssweol",
		"ssweolg",
		"ssweolm",
		"ssweolb",
		"ssweols",
		"ssweolt",
		"ssweolp",
		"ssweolh",
		"ssweom",
		"ssweob",
		"ssweobs",
		"ssweos",
		"ssweoss",
		"ssweong",
		"ssweoj",
		"ssweoc",
		"ssweok",
		"ssweot",
		"ssweop",
		"ssweoh",
		"sswe",
		"ssweg",
		"sswegg",
		"sswegs",
		"sswen",
		"sswenj",
		"sswenh",
		"sswed",
		"sswel",
		"sswelg",
		"sswelm",
		"sswelb",
		"sswels",
		"sswelt",
		"sswelp",
		"sswelh",
		"sswem",
		"ssweb",
		"sswebs",
		"sswes",
		"sswess",
		"ssweng",
		"sswej",
		"sswec",
		"sswek",
		"sswet",
		"sswep",
		"ssweh",
		"sswi",
		"sswig",
		"sswigg",
		"sswigs",
		"sswin",
		"sswinj",
		"sswinh",
		"sswid",
		"sswil",
		"sswilg",
		"sswilm",
		"sswilb",
		"sswils",
		"sswilt",
		"sswilp",
		"sswilh",
		"sswim",
		"sswib",
		"sswibs",
		"sswis",
		"sswiss",
		"sswing",
		"sswij",
		"sswic",
		"sswik",
		"sswit",
		"sswip",
		"sswih",
		"ssyu",
		"ssyug",
		"ssyugg",
		"ssyugs",
		"ssyun",
		"ssyunj",
		"ssyunh",
		"ssyud",
		"ssyul",
		"ssyulg",
		"ssyulm",
		"ssyulb",
		"ssyuls",
		"ssyult",
		"ssyulp",
		"ssyulh",
		"ssyum",
		"ssyub",
		"ssyubs",
		"ssyus",
		"ssyuss",
		"ssyung",
		"ssyuj",
		"ssyuc",
		"ssyuk",
		"ssyut",
		"ssyup",
		"ssyuh",
		"sseu",
		"sseug",
		"sseugg",
		"sseugs",
		"sseun",
		"sseunj",
		"sseunh",
		"sseud",
		"sseul",
		"sseulg",
		"sseulm",
		"sseulb",
		"sseuls",
		"sseult",
		"sseulp",
		"sseulh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc5.js
var require_xc5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"sseum",
		"sseub",
		"sseubs",
		"sseus",
		"sseuss",
		"sseung",
		"sseuj",
		"sseuc",
		"sseuk",
		"sseut",
		"sseup",
		"sseuh",
		"ssyi",
		"ssyig",
		"ssyigg",
		"ssyigs",
		"ssyin",
		"ssyinj",
		"ssyinh",
		"ssyid",
		"ssyil",
		"ssyilg",
		"ssyilm",
		"ssyilb",
		"ssyils",
		"ssyilt",
		"ssyilp",
		"ssyilh",
		"ssyim",
		"ssyib",
		"ssyibs",
		"ssyis",
		"ssyiss",
		"ssying",
		"ssyij",
		"ssyic",
		"ssyik",
		"ssyit",
		"ssyip",
		"ssyih",
		"ssi",
		"ssig",
		"ssigg",
		"ssigs",
		"ssin",
		"ssinj",
		"ssinh",
		"ssid",
		"ssil",
		"ssilg",
		"ssilm",
		"ssilb",
		"ssils",
		"ssilt",
		"ssilp",
		"ssilh",
		"ssim",
		"ssib",
		"ssibs",
		"ssis",
		"ssiss",
		"ssing",
		"ssij",
		"ssic",
		"ssik",
		"ssit",
		"ssip",
		"ssih",
		"a",
		"ag",
		"agg",
		"ags",
		"an",
		"anj",
		"anh",
		"ad",
		"al",
		"alg",
		"alm",
		"alb",
		"als",
		"alt",
		"alp",
		"alh",
		"am",
		"ab",
		"abs",
		"as",
		"ass",
		"ang",
		"aj",
		"ac",
		"ak",
		"at",
		"ap",
		"ah",
		"ae",
		"aeg",
		"aegg",
		"aegs",
		"aen",
		"aenj",
		"aenh",
		"aed",
		"ael",
		"aelg",
		"aelm",
		"aelb",
		"aels",
		"aelt",
		"aelp",
		"aelh",
		"aem",
		"aeb",
		"aebs",
		"aes",
		"aess",
		"aeng",
		"aej",
		"aec",
		"aek",
		"aet",
		"aep",
		"aeh",
		"ya",
		"yag",
		"yagg",
		"yags",
		"yan",
		"yanj",
		"yanh",
		"yad",
		"yal",
		"yalg",
		"yalm",
		"yalb",
		"yals",
		"yalt",
		"yalp",
		"yalh",
		"yam",
		"yab",
		"yabs",
		"yas",
		"yass",
		"yang",
		"yaj",
		"yac",
		"yak",
		"yat",
		"yap",
		"yah",
		"yae",
		"yaeg",
		"yaegg",
		"yaegs",
		"yaen",
		"yaenj",
		"yaenh",
		"yaed",
		"yael",
		"yaelg",
		"yaelm",
		"yaelb",
		"yaels",
		"yaelt",
		"yaelp",
		"yaelh",
		"yaem",
		"yaeb",
		"yaebs",
		"yaes",
		"yaess",
		"yaeng",
		"yaej",
		"yaec",
		"yaek",
		"yaet",
		"yaep",
		"yaeh",
		"eo",
		"eog",
		"eogg",
		"eogs",
		"eon",
		"eonj",
		"eonh",
		"eod",
		"eol",
		"eolg",
		"eolm",
		"eolb",
		"eols",
		"eolt",
		"eolp",
		"eolh",
		"eom",
		"eob",
		"eobs",
		"eos",
		"eoss",
		"eong",
		"eoj",
		"eoc",
		"eok",
		"eot",
		"eop",
		"eoh",
		"e",
		"eg",
		"egg",
		"egs",
		"en",
		"enj",
		"enh",
		"ed",
		"el",
		"elg",
		"elm",
		"elb",
		"els",
		"elt",
		"elp",
		"elh",
		"em",
		"eb",
		"ebs",
		"es",
		"ess",
		"eng",
		"ej",
		"ec",
		"ek",
		"et",
		"ep",
		"eh",
		"yeo",
		"yeog",
		"yeogg",
		"yeogs",
		"yeon",
		"yeonj",
		"yeonh",
		"yeod",
		"yeol",
		"yeolg",
		"yeolm",
		"yeolb",
		"yeols",
		"yeolt",
		"yeolp",
		"yeolh",
		"yeom",
		"yeob",
		"yeobs",
		"yeos"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc6.js
var require_xc6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"yeoss",
		"yeong",
		"yeoj",
		"yeoc",
		"yeok",
		"yeot",
		"yeop",
		"yeoh",
		"ye",
		"yeg",
		"yegg",
		"yegs",
		"yen",
		"yenj",
		"yenh",
		"yed",
		"yel",
		"yelg",
		"yelm",
		"yelb",
		"yels",
		"yelt",
		"yelp",
		"yelh",
		"yem",
		"yeb",
		"yebs",
		"yes",
		"yess",
		"yeng",
		"yej",
		"yec",
		"yek",
		"yet",
		"yep",
		"yeh",
		"o",
		"og",
		"ogg",
		"ogs",
		"on",
		"onj",
		"onh",
		"od",
		"ol",
		"olg",
		"olm",
		"olb",
		"ols",
		"olt",
		"olp",
		"olh",
		"om",
		"ob",
		"obs",
		"os",
		"oss",
		"ong",
		"oj",
		"oc",
		"ok",
		"ot",
		"op",
		"oh",
		"wa",
		"wag",
		"wagg",
		"wags",
		"wan",
		"wanj",
		"wanh",
		"wad",
		"wal",
		"walg",
		"walm",
		"walb",
		"wals",
		"walt",
		"walp",
		"walh",
		"wam",
		"wab",
		"wabs",
		"was",
		"wass",
		"wang",
		"waj",
		"wac",
		"wak",
		"wat",
		"wap",
		"wah",
		"wae",
		"waeg",
		"waegg",
		"waegs",
		"waen",
		"waenj",
		"waenh",
		"waed",
		"wael",
		"waelg",
		"waelm",
		"waelb",
		"waels",
		"waelt",
		"waelp",
		"waelh",
		"waem",
		"waeb",
		"waebs",
		"waes",
		"waess",
		"waeng",
		"waej",
		"waec",
		"waek",
		"waet",
		"waep",
		"waeh",
		"oe",
		"oeg",
		"oegg",
		"oegs",
		"oen",
		"oenj",
		"oenh",
		"oed",
		"oel",
		"oelg",
		"oelm",
		"oelb",
		"oels",
		"oelt",
		"oelp",
		"oelh",
		"oem",
		"oeb",
		"oebs",
		"oes",
		"oess",
		"oeng",
		"oej",
		"oec",
		"oek",
		"oet",
		"oep",
		"oeh",
		"yo",
		"yog",
		"yogg",
		"yogs",
		"yon",
		"yonj",
		"yonh",
		"yod",
		"yol",
		"yolg",
		"yolm",
		"yolb",
		"yols",
		"yolt",
		"yolp",
		"yolh",
		"yom",
		"yob",
		"yobs",
		"yos",
		"yoss",
		"yong",
		"yoj",
		"yoc",
		"yok",
		"yot",
		"yop",
		"yoh",
		"u",
		"ug",
		"ugg",
		"ugs",
		"un",
		"unj",
		"unh",
		"ud",
		"ul",
		"ulg",
		"ulm",
		"ulb",
		"uls",
		"ult",
		"ulp",
		"ulh",
		"um",
		"ub",
		"ubs",
		"us",
		"uss",
		"ung",
		"uj",
		"uc",
		"uk",
		"ut",
		"up",
		"uh",
		"weo",
		"weog",
		"weogg",
		"weogs",
		"weon",
		"weonj",
		"weonh",
		"weod",
		"weol",
		"weolg",
		"weolm",
		"weolb",
		"weols",
		"weolt",
		"weolp",
		"weolh",
		"weom",
		"weob",
		"weobs",
		"weos",
		"weoss",
		"weong",
		"weoj",
		"weoc",
		"weok",
		"weot",
		"weop",
		"weoh",
		"we",
		"weg",
		"wegg",
		"wegs",
		"wen",
		"wenj",
		"wenh",
		"wed",
		"wel",
		"welg",
		"welm",
		"welb",
		"wels",
		"welt",
		"welp",
		"welh",
		"wem",
		"web",
		"webs",
		"wes",
		"wess",
		"weng",
		"wej",
		"wec"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc7.js
var require_xc7 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"wek",
		"wet",
		"wep",
		"weh",
		"wi",
		"wig",
		"wigg",
		"wigs",
		"win",
		"winj",
		"winh",
		"wid",
		"wil",
		"wilg",
		"wilm",
		"wilb",
		"wils",
		"wilt",
		"wilp",
		"wilh",
		"wim",
		"wib",
		"wibs",
		"wis",
		"wiss",
		"wing",
		"wij",
		"wic",
		"wik",
		"wit",
		"wip",
		"wih",
		"yu",
		"yug",
		"yugg",
		"yugs",
		"yun",
		"yunj",
		"yunh",
		"yud",
		"yul",
		"yulg",
		"yulm",
		"yulb",
		"yuls",
		"yult",
		"yulp",
		"yulh",
		"yum",
		"yub",
		"yubs",
		"yus",
		"yuss",
		"yung",
		"yuj",
		"yuc",
		"yuk",
		"yut",
		"yup",
		"yuh",
		"eu",
		"eug",
		"eugg",
		"eugs",
		"eun",
		"eunj",
		"eunh",
		"eud",
		"eul",
		"eulg",
		"eulm",
		"eulb",
		"euls",
		"eult",
		"eulp",
		"eulh",
		"eum",
		"eub",
		"eubs",
		"eus",
		"euss",
		"eung",
		"euj",
		"euc",
		"euk",
		"eut",
		"eup",
		"euh",
		"yi",
		"yig",
		"yigg",
		"yigs",
		"yin",
		"yinj",
		"yinh",
		"yid",
		"yil",
		"yilg",
		"yilm",
		"yilb",
		"yils",
		"yilt",
		"yilp",
		"yilh",
		"yim",
		"yib",
		"yibs",
		"yis",
		"yiss",
		"ying",
		"yij",
		"yic",
		"yik",
		"yit",
		"yip",
		"yih",
		"i",
		"ig",
		"igg",
		"igs",
		"in",
		"inj",
		"inh",
		"id",
		"il",
		"ilg",
		"ilm",
		"ilb",
		"ils",
		"ilt",
		"ilp",
		"ilh",
		"im",
		"ib",
		"ibs",
		"is",
		"iss",
		"ing",
		"ij",
		"ic",
		"ik",
		"it",
		"ip",
		"ih",
		"ja",
		"jag",
		"jagg",
		"jags",
		"jan",
		"janj",
		"janh",
		"jad",
		"jal",
		"jalg",
		"jalm",
		"jalb",
		"jals",
		"jalt",
		"jalp",
		"jalh",
		"jam",
		"jab",
		"jabs",
		"jas",
		"jass",
		"jang",
		"jaj",
		"jac",
		"jak",
		"jat",
		"jap",
		"jah",
		"jae",
		"jaeg",
		"jaegg",
		"jaegs",
		"jaen",
		"jaenj",
		"jaenh",
		"jaed",
		"jael",
		"jaelg",
		"jaelm",
		"jaelb",
		"jaels",
		"jaelt",
		"jaelp",
		"jaelh",
		"jaem",
		"jaeb",
		"jaebs",
		"jaes",
		"jaess",
		"jaeng",
		"jaej",
		"jaec",
		"jaek",
		"jaet",
		"jaep",
		"jaeh",
		"jya",
		"jyag",
		"jyagg",
		"jyags",
		"jyan",
		"jyanj",
		"jyanh",
		"jyad",
		"jyal",
		"jyalg",
		"jyalm",
		"jyalb",
		"jyals",
		"jyalt",
		"jyalp",
		"jyalh",
		"jyam",
		"jyab",
		"jyabs",
		"jyas",
		"jyass",
		"jyang",
		"jyaj",
		"jyac",
		"jyak",
		"jyat",
		"jyap",
		"jyah",
		"jyae",
		"jyaeg",
		"jyaegg",
		"jyaegs",
		"jyaen",
		"jyaenj",
		"jyaenh",
		"jyaed",
		"jyael",
		"jyaelg",
		"jyaelm",
		"jyaelb",
		"jyaels",
		"jyaelt",
		"jyaelp",
		"jyaelh",
		"jyaem",
		"jyaeb",
		"jyaebs",
		"jyaes",
		"jyaess",
		"jyaeng",
		"jyaej",
		"jyaec",
		"jyaek",
		"jyaet",
		"jyaep",
		"jyaeh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc8.js
var require_xc8 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"jeo",
		"jeog",
		"jeogg",
		"jeogs",
		"jeon",
		"jeonj",
		"jeonh",
		"jeod",
		"jeol",
		"jeolg",
		"jeolm",
		"jeolb",
		"jeols",
		"jeolt",
		"jeolp",
		"jeolh",
		"jeom",
		"jeob",
		"jeobs",
		"jeos",
		"jeoss",
		"jeong",
		"jeoj",
		"jeoc",
		"jeok",
		"jeot",
		"jeop",
		"jeoh",
		"je",
		"jeg",
		"jegg",
		"jegs",
		"jen",
		"jenj",
		"jenh",
		"jed",
		"jel",
		"jelg",
		"jelm",
		"jelb",
		"jels",
		"jelt",
		"jelp",
		"jelh",
		"jem",
		"jeb",
		"jebs",
		"jes",
		"jess",
		"jeng",
		"jej",
		"jec",
		"jek",
		"jet",
		"jep",
		"jeh",
		"jyeo",
		"jyeog",
		"jyeogg",
		"jyeogs",
		"jyeon",
		"jyeonj",
		"jyeonh",
		"jyeod",
		"jyeol",
		"jyeolg",
		"jyeolm",
		"jyeolb",
		"jyeols",
		"jyeolt",
		"jyeolp",
		"jyeolh",
		"jyeom",
		"jyeob",
		"jyeobs",
		"jyeos",
		"jyeoss",
		"jyeong",
		"jyeoj",
		"jyeoc",
		"jyeok",
		"jyeot",
		"jyeop",
		"jyeoh",
		"jye",
		"jyeg",
		"jyegg",
		"jyegs",
		"jyen",
		"jyenj",
		"jyenh",
		"jyed",
		"jyel",
		"jyelg",
		"jyelm",
		"jyelb",
		"jyels",
		"jyelt",
		"jyelp",
		"jyelh",
		"jyem",
		"jyeb",
		"jyebs",
		"jyes",
		"jyess",
		"jyeng",
		"jyej",
		"jyec",
		"jyek",
		"jyet",
		"jyep",
		"jyeh",
		"jo",
		"jog",
		"jogg",
		"jogs",
		"jon",
		"jonj",
		"jonh",
		"jod",
		"jol",
		"jolg",
		"jolm",
		"jolb",
		"jols",
		"jolt",
		"jolp",
		"jolh",
		"jom",
		"job",
		"jobs",
		"jos",
		"joss",
		"jong",
		"joj",
		"joc",
		"jok",
		"jot",
		"jop",
		"joh",
		"jwa",
		"jwag",
		"jwagg",
		"jwags",
		"jwan",
		"jwanj",
		"jwanh",
		"jwad",
		"jwal",
		"jwalg",
		"jwalm",
		"jwalb",
		"jwals",
		"jwalt",
		"jwalp",
		"jwalh",
		"jwam",
		"jwab",
		"jwabs",
		"jwas",
		"jwass",
		"jwang",
		"jwaj",
		"jwac",
		"jwak",
		"jwat",
		"jwap",
		"jwah",
		"jwae",
		"jwaeg",
		"jwaegg",
		"jwaegs",
		"jwaen",
		"jwaenj",
		"jwaenh",
		"jwaed",
		"jwael",
		"jwaelg",
		"jwaelm",
		"jwaelb",
		"jwaels",
		"jwaelt",
		"jwaelp",
		"jwaelh",
		"jwaem",
		"jwaeb",
		"jwaebs",
		"jwaes",
		"jwaess",
		"jwaeng",
		"jwaej",
		"jwaec",
		"jwaek",
		"jwaet",
		"jwaep",
		"jwaeh",
		"joe",
		"joeg",
		"joegg",
		"joegs",
		"joen",
		"joenj",
		"joenh",
		"joed",
		"joel",
		"joelg",
		"joelm",
		"joelb",
		"joels",
		"joelt",
		"joelp",
		"joelh",
		"joem",
		"joeb",
		"joebs",
		"joes",
		"joess",
		"joeng",
		"joej",
		"joec",
		"joek",
		"joet",
		"joep",
		"joeh",
		"jyo",
		"jyog",
		"jyogg",
		"jyogs",
		"jyon",
		"jyonj",
		"jyonh",
		"jyod",
		"jyol",
		"jyolg",
		"jyolm",
		"jyolb",
		"jyols",
		"jyolt",
		"jyolp",
		"jyolh",
		"jyom",
		"jyob",
		"jyobs",
		"jyos",
		"jyoss",
		"jyong",
		"jyoj",
		"jyoc",
		"jyok",
		"jyot",
		"jyop",
		"jyoh",
		"ju",
		"jug",
		"jugg",
		"jugs"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xc9.js
var require_xc9 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"jun",
		"junj",
		"junh",
		"jud",
		"jul",
		"julg",
		"julm",
		"julb",
		"juls",
		"jult",
		"julp",
		"julh",
		"jum",
		"jub",
		"jubs",
		"jus",
		"juss",
		"jung",
		"juj",
		"juc",
		"juk",
		"jut",
		"jup",
		"juh",
		"jweo",
		"jweog",
		"jweogg",
		"jweogs",
		"jweon",
		"jweonj",
		"jweonh",
		"jweod",
		"jweol",
		"jweolg",
		"jweolm",
		"jweolb",
		"jweols",
		"jweolt",
		"jweolp",
		"jweolh",
		"jweom",
		"jweob",
		"jweobs",
		"jweos",
		"jweoss",
		"jweong",
		"jweoj",
		"jweoc",
		"jweok",
		"jweot",
		"jweop",
		"jweoh",
		"jwe",
		"jweg",
		"jwegg",
		"jwegs",
		"jwen",
		"jwenj",
		"jwenh",
		"jwed",
		"jwel",
		"jwelg",
		"jwelm",
		"jwelb",
		"jwels",
		"jwelt",
		"jwelp",
		"jwelh",
		"jwem",
		"jweb",
		"jwebs",
		"jwes",
		"jwess",
		"jweng",
		"jwej",
		"jwec",
		"jwek",
		"jwet",
		"jwep",
		"jweh",
		"jwi",
		"jwig",
		"jwigg",
		"jwigs",
		"jwin",
		"jwinj",
		"jwinh",
		"jwid",
		"jwil",
		"jwilg",
		"jwilm",
		"jwilb",
		"jwils",
		"jwilt",
		"jwilp",
		"jwilh",
		"jwim",
		"jwib",
		"jwibs",
		"jwis",
		"jwiss",
		"jwing",
		"jwij",
		"jwic",
		"jwik",
		"jwit",
		"jwip",
		"jwih",
		"jyu",
		"jyug",
		"jyugg",
		"jyugs",
		"jyun",
		"jyunj",
		"jyunh",
		"jyud",
		"jyul",
		"jyulg",
		"jyulm",
		"jyulb",
		"jyuls",
		"jyult",
		"jyulp",
		"jyulh",
		"jyum",
		"jyub",
		"jyubs",
		"jyus",
		"jyuss",
		"jyung",
		"jyuj",
		"jyuc",
		"jyuk",
		"jyut",
		"jyup",
		"jyuh",
		"jeu",
		"jeug",
		"jeugg",
		"jeugs",
		"jeun",
		"jeunj",
		"jeunh",
		"jeud",
		"jeul",
		"jeulg",
		"jeulm",
		"jeulb",
		"jeuls",
		"jeult",
		"jeulp",
		"jeulh",
		"jeum",
		"jeub",
		"jeubs",
		"jeus",
		"jeuss",
		"jeung",
		"jeuj",
		"jeuc",
		"jeuk",
		"jeut",
		"jeup",
		"jeuh",
		"jyi",
		"jyig",
		"jyigg",
		"jyigs",
		"jyin",
		"jyinj",
		"jyinh",
		"jyid",
		"jyil",
		"jyilg",
		"jyilm",
		"jyilb",
		"jyils",
		"jyilt",
		"jyilp",
		"jyilh",
		"jyim",
		"jyib",
		"jyibs",
		"jyis",
		"jyiss",
		"jying",
		"jyij",
		"jyic",
		"jyik",
		"jyit",
		"jyip",
		"jyih",
		"ji",
		"jig",
		"jigg",
		"jigs",
		"jin",
		"jinj",
		"jinh",
		"jid",
		"jil",
		"jilg",
		"jilm",
		"jilb",
		"jils",
		"jilt",
		"jilp",
		"jilh",
		"jim",
		"jib",
		"jibs",
		"jis",
		"jiss",
		"jing",
		"jij",
		"jic",
		"jik",
		"jit",
		"jip",
		"jih",
		"jja",
		"jjag",
		"jjagg",
		"jjags",
		"jjan",
		"jjanj",
		"jjanh",
		"jjad",
		"jjal",
		"jjalg",
		"jjalm",
		"jjalb",
		"jjals",
		"jjalt",
		"jjalp",
		"jjalh",
		"jjam",
		"jjab",
		"jjabs",
		"jjas",
		"jjass",
		"jjang",
		"jjaj",
		"jjac",
		"jjak",
		"jjat",
		"jjap",
		"jjah",
		"jjae",
		"jjaeg",
		"jjaegg",
		"jjaegs",
		"jjaen",
		"jjaenj",
		"jjaenh",
		"jjaed"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xca.js
var require_xca = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"jjael",
		"jjaelg",
		"jjaelm",
		"jjaelb",
		"jjaels",
		"jjaelt",
		"jjaelp",
		"jjaelh",
		"jjaem",
		"jjaeb",
		"jjaebs",
		"jjaes",
		"jjaess",
		"jjaeng",
		"jjaej",
		"jjaec",
		"jjaek",
		"jjaet",
		"jjaep",
		"jjaeh",
		"jjya",
		"jjyag",
		"jjyagg",
		"jjyags",
		"jjyan",
		"jjyanj",
		"jjyanh",
		"jjyad",
		"jjyal",
		"jjyalg",
		"jjyalm",
		"jjyalb",
		"jjyals",
		"jjyalt",
		"jjyalp",
		"jjyalh",
		"jjyam",
		"jjyab",
		"jjyabs",
		"jjyas",
		"jjyass",
		"jjyang",
		"jjyaj",
		"jjyac",
		"jjyak",
		"jjyat",
		"jjyap",
		"jjyah",
		"jjyae",
		"jjyaeg",
		"jjyaegg",
		"jjyaegs",
		"jjyaen",
		"jjyaenj",
		"jjyaenh",
		"jjyaed",
		"jjyael",
		"jjyaelg",
		"jjyaelm",
		"jjyaelb",
		"jjyaels",
		"jjyaelt",
		"jjyaelp",
		"jjyaelh",
		"jjyaem",
		"jjyaeb",
		"jjyaebs",
		"jjyaes",
		"jjyaess",
		"jjyaeng",
		"jjyaej",
		"jjyaec",
		"jjyaek",
		"jjyaet",
		"jjyaep",
		"jjyaeh",
		"jjeo",
		"jjeog",
		"jjeogg",
		"jjeogs",
		"jjeon",
		"jjeonj",
		"jjeonh",
		"jjeod",
		"jjeol",
		"jjeolg",
		"jjeolm",
		"jjeolb",
		"jjeols",
		"jjeolt",
		"jjeolp",
		"jjeolh",
		"jjeom",
		"jjeob",
		"jjeobs",
		"jjeos",
		"jjeoss",
		"jjeong",
		"jjeoj",
		"jjeoc",
		"jjeok",
		"jjeot",
		"jjeop",
		"jjeoh",
		"jje",
		"jjeg",
		"jjegg",
		"jjegs",
		"jjen",
		"jjenj",
		"jjenh",
		"jjed",
		"jjel",
		"jjelg",
		"jjelm",
		"jjelb",
		"jjels",
		"jjelt",
		"jjelp",
		"jjelh",
		"jjem",
		"jjeb",
		"jjebs",
		"jjes",
		"jjess",
		"jjeng",
		"jjej",
		"jjec",
		"jjek",
		"jjet",
		"jjep",
		"jjeh",
		"jjyeo",
		"jjyeog",
		"jjyeogg",
		"jjyeogs",
		"jjyeon",
		"jjyeonj",
		"jjyeonh",
		"jjyeod",
		"jjyeol",
		"jjyeolg",
		"jjyeolm",
		"jjyeolb",
		"jjyeols",
		"jjyeolt",
		"jjyeolp",
		"jjyeolh",
		"jjyeom",
		"jjyeob",
		"jjyeobs",
		"jjyeos",
		"jjyeoss",
		"jjyeong",
		"jjyeoj",
		"jjyeoc",
		"jjyeok",
		"jjyeot",
		"jjyeop",
		"jjyeoh",
		"jjye",
		"jjyeg",
		"jjyegg",
		"jjyegs",
		"jjyen",
		"jjyenj",
		"jjyenh",
		"jjyed",
		"jjyel",
		"jjyelg",
		"jjyelm",
		"jjyelb",
		"jjyels",
		"jjyelt",
		"jjyelp",
		"jjyelh",
		"jjyem",
		"jjyeb",
		"jjyebs",
		"jjyes",
		"jjyess",
		"jjyeng",
		"jjyej",
		"jjyec",
		"jjyek",
		"jjyet",
		"jjyep",
		"jjyeh",
		"jjo",
		"jjog",
		"jjogg",
		"jjogs",
		"jjon",
		"jjonj",
		"jjonh",
		"jjod",
		"jjol",
		"jjolg",
		"jjolm",
		"jjolb",
		"jjols",
		"jjolt",
		"jjolp",
		"jjolh",
		"jjom",
		"jjob",
		"jjobs",
		"jjos",
		"jjoss",
		"jjong",
		"jjoj",
		"jjoc",
		"jjok",
		"jjot",
		"jjop",
		"jjoh",
		"jjwa",
		"jjwag",
		"jjwagg",
		"jjwags",
		"jjwan",
		"jjwanj",
		"jjwanh",
		"jjwad",
		"jjwal",
		"jjwalg",
		"jjwalm",
		"jjwalb",
		"jjwals",
		"jjwalt",
		"jjwalp",
		"jjwalh",
		"jjwam",
		"jjwab",
		"jjwabs",
		"jjwas",
		"jjwass",
		"jjwang",
		"jjwaj",
		"jjwac",
		"jjwak",
		"jjwat",
		"jjwap",
		"jjwah",
		"jjwae",
		"jjwaeg",
		"jjwaegg",
		"jjwaegs",
		"jjwaen",
		"jjwaenj",
		"jjwaenh",
		"jjwaed",
		"jjwael",
		"jjwaelg",
		"jjwaelm",
		"jjwaelb"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xcb.js
var require_xcb = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"jjwaels",
		"jjwaelt",
		"jjwaelp",
		"jjwaelh",
		"jjwaem",
		"jjwaeb",
		"jjwaebs",
		"jjwaes",
		"jjwaess",
		"jjwaeng",
		"jjwaej",
		"jjwaec",
		"jjwaek",
		"jjwaet",
		"jjwaep",
		"jjwaeh",
		"jjoe",
		"jjoeg",
		"jjoegg",
		"jjoegs",
		"jjoen",
		"jjoenj",
		"jjoenh",
		"jjoed",
		"jjoel",
		"jjoelg",
		"jjoelm",
		"jjoelb",
		"jjoels",
		"jjoelt",
		"jjoelp",
		"jjoelh",
		"jjoem",
		"jjoeb",
		"jjoebs",
		"jjoes",
		"jjoess",
		"jjoeng",
		"jjoej",
		"jjoec",
		"jjoek",
		"jjoet",
		"jjoep",
		"jjoeh",
		"jjyo",
		"jjyog",
		"jjyogg",
		"jjyogs",
		"jjyon",
		"jjyonj",
		"jjyonh",
		"jjyod",
		"jjyol",
		"jjyolg",
		"jjyolm",
		"jjyolb",
		"jjyols",
		"jjyolt",
		"jjyolp",
		"jjyolh",
		"jjyom",
		"jjyob",
		"jjyobs",
		"jjyos",
		"jjyoss",
		"jjyong",
		"jjyoj",
		"jjyoc",
		"jjyok",
		"jjyot",
		"jjyop",
		"jjyoh",
		"jju",
		"jjug",
		"jjugg",
		"jjugs",
		"jjun",
		"jjunj",
		"jjunh",
		"jjud",
		"jjul",
		"jjulg",
		"jjulm",
		"jjulb",
		"jjuls",
		"jjult",
		"jjulp",
		"jjulh",
		"jjum",
		"jjub",
		"jjubs",
		"jjus",
		"jjuss",
		"jjung",
		"jjuj",
		"jjuc",
		"jjuk",
		"jjut",
		"jjup",
		"jjuh",
		"jjweo",
		"jjweog",
		"jjweogg",
		"jjweogs",
		"jjweon",
		"jjweonj",
		"jjweonh",
		"jjweod",
		"jjweol",
		"jjweolg",
		"jjweolm",
		"jjweolb",
		"jjweols",
		"jjweolt",
		"jjweolp",
		"jjweolh",
		"jjweom",
		"jjweob",
		"jjweobs",
		"jjweos",
		"jjweoss",
		"jjweong",
		"jjweoj",
		"jjweoc",
		"jjweok",
		"jjweot",
		"jjweop",
		"jjweoh",
		"jjwe",
		"jjweg",
		"jjwegg",
		"jjwegs",
		"jjwen",
		"jjwenj",
		"jjwenh",
		"jjwed",
		"jjwel",
		"jjwelg",
		"jjwelm",
		"jjwelb",
		"jjwels",
		"jjwelt",
		"jjwelp",
		"jjwelh",
		"jjwem",
		"jjweb",
		"jjwebs",
		"jjwes",
		"jjwess",
		"jjweng",
		"jjwej",
		"jjwec",
		"jjwek",
		"jjwet",
		"jjwep",
		"jjweh",
		"jjwi",
		"jjwig",
		"jjwigg",
		"jjwigs",
		"jjwin",
		"jjwinj",
		"jjwinh",
		"jjwid",
		"jjwil",
		"jjwilg",
		"jjwilm",
		"jjwilb",
		"jjwils",
		"jjwilt",
		"jjwilp",
		"jjwilh",
		"jjwim",
		"jjwib",
		"jjwibs",
		"jjwis",
		"jjwiss",
		"jjwing",
		"jjwij",
		"jjwic",
		"jjwik",
		"jjwit",
		"jjwip",
		"jjwih",
		"jjyu",
		"jjyug",
		"jjyugg",
		"jjyugs",
		"jjyun",
		"jjyunj",
		"jjyunh",
		"jjyud",
		"jjyul",
		"jjyulg",
		"jjyulm",
		"jjyulb",
		"jjyuls",
		"jjyult",
		"jjyulp",
		"jjyulh",
		"jjyum",
		"jjyub",
		"jjyubs",
		"jjyus",
		"jjyuss",
		"jjyung",
		"jjyuj",
		"jjyuc",
		"jjyuk",
		"jjyut",
		"jjyup",
		"jjyuh",
		"jjeu",
		"jjeug",
		"jjeugg",
		"jjeugs",
		"jjeun",
		"jjeunj",
		"jjeunh",
		"jjeud",
		"jjeul",
		"jjeulg",
		"jjeulm",
		"jjeulb",
		"jjeuls",
		"jjeult",
		"jjeulp",
		"jjeulh",
		"jjeum",
		"jjeub",
		"jjeubs",
		"jjeus",
		"jjeuss",
		"jjeung",
		"jjeuj",
		"jjeuc",
		"jjeuk",
		"jjeut",
		"jjeup",
		"jjeuh",
		"jjyi",
		"jjyig",
		"jjyigg",
		"jjyigs",
		"jjyin",
		"jjyinj",
		"jjyinh",
		"jjyid",
		"jjyil",
		"jjyilg",
		"jjyilm",
		"jjyilb",
		"jjyils",
		"jjyilt",
		"jjyilp",
		"jjyilh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xcc.js
var require_xcc = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"jjyim",
		"jjyib",
		"jjyibs",
		"jjyis",
		"jjyiss",
		"jjying",
		"jjyij",
		"jjyic",
		"jjyik",
		"jjyit",
		"jjyip",
		"jjyih",
		"jji",
		"jjig",
		"jjigg",
		"jjigs",
		"jjin",
		"jjinj",
		"jjinh",
		"jjid",
		"jjil",
		"jjilg",
		"jjilm",
		"jjilb",
		"jjils",
		"jjilt",
		"jjilp",
		"jjilh",
		"jjim",
		"jjib",
		"jjibs",
		"jjis",
		"jjiss",
		"jjing",
		"jjij",
		"jjic",
		"jjik",
		"jjit",
		"jjip",
		"jjih",
		"ca",
		"cag",
		"cagg",
		"cags",
		"can",
		"canj",
		"canh",
		"cad",
		"cal",
		"calg",
		"calm",
		"calb",
		"cals",
		"calt",
		"calp",
		"calh",
		"cam",
		"cab",
		"cabs",
		"cas",
		"cass",
		"cang",
		"caj",
		"cac",
		"cak",
		"cat",
		"cap",
		"cah",
		"cae",
		"caeg",
		"caegg",
		"caegs",
		"caen",
		"caenj",
		"caenh",
		"caed",
		"cael",
		"caelg",
		"caelm",
		"caelb",
		"caels",
		"caelt",
		"caelp",
		"caelh",
		"caem",
		"caeb",
		"caebs",
		"caes",
		"caess",
		"caeng",
		"caej",
		"caec",
		"caek",
		"caet",
		"caep",
		"caeh",
		"cya",
		"cyag",
		"cyagg",
		"cyags",
		"cyan",
		"cyanj",
		"cyanh",
		"cyad",
		"cyal",
		"cyalg",
		"cyalm",
		"cyalb",
		"cyals",
		"cyalt",
		"cyalp",
		"cyalh",
		"cyam",
		"cyab",
		"cyabs",
		"cyas",
		"cyass",
		"cyang",
		"cyaj",
		"cyac",
		"cyak",
		"cyat",
		"cyap",
		"cyah",
		"cyae",
		"cyaeg",
		"cyaegg",
		"cyaegs",
		"cyaen",
		"cyaenj",
		"cyaenh",
		"cyaed",
		"cyael",
		"cyaelg",
		"cyaelm",
		"cyaelb",
		"cyaels",
		"cyaelt",
		"cyaelp",
		"cyaelh",
		"cyaem",
		"cyaeb",
		"cyaebs",
		"cyaes",
		"cyaess",
		"cyaeng",
		"cyaej",
		"cyaec",
		"cyaek",
		"cyaet",
		"cyaep",
		"cyaeh",
		"ceo",
		"ceog",
		"ceogg",
		"ceogs",
		"ceon",
		"ceonj",
		"ceonh",
		"ceod",
		"ceol",
		"ceolg",
		"ceolm",
		"ceolb",
		"ceols",
		"ceolt",
		"ceolp",
		"ceolh",
		"ceom",
		"ceob",
		"ceobs",
		"ceos",
		"ceoss",
		"ceong",
		"ceoj",
		"ceoc",
		"ceok",
		"ceot",
		"ceop",
		"ceoh",
		"ce",
		"ceg",
		"cegg",
		"cegs",
		"cen",
		"cenj",
		"cenh",
		"ced",
		"cel",
		"celg",
		"celm",
		"celb",
		"cels",
		"celt",
		"celp",
		"celh",
		"cem",
		"ceb",
		"cebs",
		"ces",
		"cess",
		"ceng",
		"cej",
		"cec",
		"cek",
		"cet",
		"cep",
		"ceh",
		"cyeo",
		"cyeog",
		"cyeogg",
		"cyeogs",
		"cyeon",
		"cyeonj",
		"cyeonh",
		"cyeod",
		"cyeol",
		"cyeolg",
		"cyeolm",
		"cyeolb",
		"cyeols",
		"cyeolt",
		"cyeolp",
		"cyeolh",
		"cyeom",
		"cyeob",
		"cyeobs",
		"cyeos",
		"cyeoss",
		"cyeong",
		"cyeoj",
		"cyeoc",
		"cyeok",
		"cyeot",
		"cyeop",
		"cyeoh",
		"cye",
		"cyeg",
		"cyegg",
		"cyegs",
		"cyen",
		"cyenj",
		"cyenh",
		"cyed",
		"cyel",
		"cyelg",
		"cyelm",
		"cyelb",
		"cyels",
		"cyelt",
		"cyelp",
		"cyelh",
		"cyem",
		"cyeb",
		"cyebs",
		"cyes"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xcd.js
var require_xcd = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"cyess",
		"cyeng",
		"cyej",
		"cyec",
		"cyek",
		"cyet",
		"cyep",
		"cyeh",
		"co",
		"cog",
		"cogg",
		"cogs",
		"con",
		"conj",
		"conh",
		"cod",
		"col",
		"colg",
		"colm",
		"colb",
		"cols",
		"colt",
		"colp",
		"colh",
		"com",
		"cob",
		"cobs",
		"cos",
		"coss",
		"cong",
		"coj",
		"coc",
		"cok",
		"cot",
		"cop",
		"coh",
		"cwa",
		"cwag",
		"cwagg",
		"cwags",
		"cwan",
		"cwanj",
		"cwanh",
		"cwad",
		"cwal",
		"cwalg",
		"cwalm",
		"cwalb",
		"cwals",
		"cwalt",
		"cwalp",
		"cwalh",
		"cwam",
		"cwab",
		"cwabs",
		"cwas",
		"cwass",
		"cwang",
		"cwaj",
		"cwac",
		"cwak",
		"cwat",
		"cwap",
		"cwah",
		"cwae",
		"cwaeg",
		"cwaegg",
		"cwaegs",
		"cwaen",
		"cwaenj",
		"cwaenh",
		"cwaed",
		"cwael",
		"cwaelg",
		"cwaelm",
		"cwaelb",
		"cwaels",
		"cwaelt",
		"cwaelp",
		"cwaelh",
		"cwaem",
		"cwaeb",
		"cwaebs",
		"cwaes",
		"cwaess",
		"cwaeng",
		"cwaej",
		"cwaec",
		"cwaek",
		"cwaet",
		"cwaep",
		"cwaeh",
		"coe",
		"coeg",
		"coegg",
		"coegs",
		"coen",
		"coenj",
		"coenh",
		"coed",
		"coel",
		"coelg",
		"coelm",
		"coelb",
		"coels",
		"coelt",
		"coelp",
		"coelh",
		"coem",
		"coeb",
		"coebs",
		"coes",
		"coess",
		"coeng",
		"coej",
		"coec",
		"coek",
		"coet",
		"coep",
		"coeh",
		"cyo",
		"cyog",
		"cyogg",
		"cyogs",
		"cyon",
		"cyonj",
		"cyonh",
		"cyod",
		"cyol",
		"cyolg",
		"cyolm",
		"cyolb",
		"cyols",
		"cyolt",
		"cyolp",
		"cyolh",
		"cyom",
		"cyob",
		"cyobs",
		"cyos",
		"cyoss",
		"cyong",
		"cyoj",
		"cyoc",
		"cyok",
		"cyot",
		"cyop",
		"cyoh",
		"cu",
		"cug",
		"cugg",
		"cugs",
		"cun",
		"cunj",
		"cunh",
		"cud",
		"cul",
		"culg",
		"culm",
		"culb",
		"culs",
		"cult",
		"culp",
		"culh",
		"cum",
		"cub",
		"cubs",
		"cus",
		"cuss",
		"cung",
		"cuj",
		"cuc",
		"cuk",
		"cut",
		"cup",
		"cuh",
		"cweo",
		"cweog",
		"cweogg",
		"cweogs",
		"cweon",
		"cweonj",
		"cweonh",
		"cweod",
		"cweol",
		"cweolg",
		"cweolm",
		"cweolb",
		"cweols",
		"cweolt",
		"cweolp",
		"cweolh",
		"cweom",
		"cweob",
		"cweobs",
		"cweos",
		"cweoss",
		"cweong",
		"cweoj",
		"cweoc",
		"cweok",
		"cweot",
		"cweop",
		"cweoh",
		"cwe",
		"cweg",
		"cwegg",
		"cwegs",
		"cwen",
		"cwenj",
		"cwenh",
		"cwed",
		"cwel",
		"cwelg",
		"cwelm",
		"cwelb",
		"cwels",
		"cwelt",
		"cwelp",
		"cwelh",
		"cwem",
		"cweb",
		"cwebs",
		"cwes",
		"cwess",
		"cweng",
		"cwej",
		"cwec",
		"cwek",
		"cwet",
		"cwep",
		"cweh",
		"cwi",
		"cwig",
		"cwigg",
		"cwigs",
		"cwin",
		"cwinj",
		"cwinh",
		"cwid",
		"cwil",
		"cwilg",
		"cwilm",
		"cwilb",
		"cwils",
		"cwilt",
		"cwilp",
		"cwilh",
		"cwim",
		"cwib",
		"cwibs",
		"cwis",
		"cwiss",
		"cwing",
		"cwij",
		"cwic"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xce.js
var require_xce = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"cwik",
		"cwit",
		"cwip",
		"cwih",
		"cyu",
		"cyug",
		"cyugg",
		"cyugs",
		"cyun",
		"cyunj",
		"cyunh",
		"cyud",
		"cyul",
		"cyulg",
		"cyulm",
		"cyulb",
		"cyuls",
		"cyult",
		"cyulp",
		"cyulh",
		"cyum",
		"cyub",
		"cyubs",
		"cyus",
		"cyuss",
		"cyung",
		"cyuj",
		"cyuc",
		"cyuk",
		"cyut",
		"cyup",
		"cyuh",
		"ceu",
		"ceug",
		"ceugg",
		"ceugs",
		"ceun",
		"ceunj",
		"ceunh",
		"ceud",
		"ceul",
		"ceulg",
		"ceulm",
		"ceulb",
		"ceuls",
		"ceult",
		"ceulp",
		"ceulh",
		"ceum",
		"ceub",
		"ceubs",
		"ceus",
		"ceuss",
		"ceung",
		"ceuj",
		"ceuc",
		"ceuk",
		"ceut",
		"ceup",
		"ceuh",
		"cyi",
		"cyig",
		"cyigg",
		"cyigs",
		"cyin",
		"cyinj",
		"cyinh",
		"cyid",
		"cyil",
		"cyilg",
		"cyilm",
		"cyilb",
		"cyils",
		"cyilt",
		"cyilp",
		"cyilh",
		"cyim",
		"cyib",
		"cyibs",
		"cyis",
		"cyiss",
		"cying",
		"cyij",
		"cyic",
		"cyik",
		"cyit",
		"cyip",
		"cyih",
		"ci",
		"cig",
		"cigg",
		"cigs",
		"cin",
		"cinj",
		"cinh",
		"cid",
		"cil",
		"cilg",
		"cilm",
		"cilb",
		"cils",
		"cilt",
		"cilp",
		"cilh",
		"cim",
		"cib",
		"cibs",
		"cis",
		"ciss",
		"cing",
		"cij",
		"cic",
		"cik",
		"cit",
		"cip",
		"cih",
		"ka",
		"kag",
		"kagg",
		"kags",
		"kan",
		"kanj",
		"kanh",
		"kad",
		"kal",
		"kalg",
		"kalm",
		"kalb",
		"kals",
		"kalt",
		"kalp",
		"kalh",
		"kam",
		"kab",
		"kabs",
		"kas",
		"kass",
		"kang",
		"kaj",
		"kac",
		"kak",
		"kat",
		"kap",
		"kah",
		"kae",
		"kaeg",
		"kaegg",
		"kaegs",
		"kaen",
		"kaenj",
		"kaenh",
		"kaed",
		"kael",
		"kaelg",
		"kaelm",
		"kaelb",
		"kaels",
		"kaelt",
		"kaelp",
		"kaelh",
		"kaem",
		"kaeb",
		"kaebs",
		"kaes",
		"kaess",
		"kaeng",
		"kaej",
		"kaec",
		"kaek",
		"kaet",
		"kaep",
		"kaeh",
		"kya",
		"kyag",
		"kyagg",
		"kyags",
		"kyan",
		"kyanj",
		"kyanh",
		"kyad",
		"kyal",
		"kyalg",
		"kyalm",
		"kyalb",
		"kyals",
		"kyalt",
		"kyalp",
		"kyalh",
		"kyam",
		"kyab",
		"kyabs",
		"kyas",
		"kyass",
		"kyang",
		"kyaj",
		"kyac",
		"kyak",
		"kyat",
		"kyap",
		"kyah",
		"kyae",
		"kyaeg",
		"kyaegg",
		"kyaegs",
		"kyaen",
		"kyaenj",
		"kyaenh",
		"kyaed",
		"kyael",
		"kyaelg",
		"kyaelm",
		"kyaelb",
		"kyaels",
		"kyaelt",
		"kyaelp",
		"kyaelh",
		"kyaem",
		"kyaeb",
		"kyaebs",
		"kyaes",
		"kyaess",
		"kyaeng",
		"kyaej",
		"kyaec",
		"kyaek",
		"kyaet",
		"kyaep",
		"kyaeh",
		"keo",
		"keog",
		"keogg",
		"keogs",
		"keon",
		"keonj",
		"keonh",
		"keod",
		"keol",
		"keolg",
		"keolm",
		"keolb",
		"keols",
		"keolt",
		"keolp",
		"keolh",
		"keom",
		"keob",
		"keobs",
		"keos",
		"keoss",
		"keong",
		"keoj",
		"keoc",
		"keok",
		"keot",
		"keop",
		"keoh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xcf.js
var require_xcf = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ke",
		"keg",
		"kegg",
		"kegs",
		"ken",
		"kenj",
		"kenh",
		"ked",
		"kel",
		"kelg",
		"kelm",
		"kelb",
		"kels",
		"kelt",
		"kelp",
		"kelh",
		"kem",
		"keb",
		"kebs",
		"kes",
		"kess",
		"keng",
		"kej",
		"kec",
		"kek",
		"ket",
		"kep",
		"keh",
		"kyeo",
		"kyeog",
		"kyeogg",
		"kyeogs",
		"kyeon",
		"kyeonj",
		"kyeonh",
		"kyeod",
		"kyeol",
		"kyeolg",
		"kyeolm",
		"kyeolb",
		"kyeols",
		"kyeolt",
		"kyeolp",
		"kyeolh",
		"kyeom",
		"kyeob",
		"kyeobs",
		"kyeos",
		"kyeoss",
		"kyeong",
		"kyeoj",
		"kyeoc",
		"kyeok",
		"kyeot",
		"kyeop",
		"kyeoh",
		"kye",
		"kyeg",
		"kyegg",
		"kyegs",
		"kyen",
		"kyenj",
		"kyenh",
		"kyed",
		"kyel",
		"kyelg",
		"kyelm",
		"kyelb",
		"kyels",
		"kyelt",
		"kyelp",
		"kyelh",
		"kyem",
		"kyeb",
		"kyebs",
		"kyes",
		"kyess",
		"kyeng",
		"kyej",
		"kyec",
		"kyek",
		"kyet",
		"kyep",
		"kyeh",
		"ko",
		"kog",
		"kogg",
		"kogs",
		"kon",
		"konj",
		"konh",
		"kod",
		"kol",
		"kolg",
		"kolm",
		"kolb",
		"kols",
		"kolt",
		"kolp",
		"kolh",
		"kom",
		"kob",
		"kobs",
		"kos",
		"koss",
		"kong",
		"koj",
		"koc",
		"kok",
		"kot",
		"kop",
		"koh",
		"kwa",
		"kwag",
		"kwagg",
		"kwags",
		"kwan",
		"kwanj",
		"kwanh",
		"kwad",
		"kwal",
		"kwalg",
		"kwalm",
		"kwalb",
		"kwals",
		"kwalt",
		"kwalp",
		"kwalh",
		"kwam",
		"kwab",
		"kwabs",
		"kwas",
		"kwass",
		"kwang",
		"kwaj",
		"kwac",
		"kwak",
		"kwat",
		"kwap",
		"kwah",
		"kwae",
		"kwaeg",
		"kwaegg",
		"kwaegs",
		"kwaen",
		"kwaenj",
		"kwaenh",
		"kwaed",
		"kwael",
		"kwaelg",
		"kwaelm",
		"kwaelb",
		"kwaels",
		"kwaelt",
		"kwaelp",
		"kwaelh",
		"kwaem",
		"kwaeb",
		"kwaebs",
		"kwaes",
		"kwaess",
		"kwaeng",
		"kwaej",
		"kwaec",
		"kwaek",
		"kwaet",
		"kwaep",
		"kwaeh",
		"koe",
		"koeg",
		"koegg",
		"koegs",
		"koen",
		"koenj",
		"koenh",
		"koed",
		"koel",
		"koelg",
		"koelm",
		"koelb",
		"koels",
		"koelt",
		"koelp",
		"koelh",
		"koem",
		"koeb",
		"koebs",
		"koes",
		"koess",
		"koeng",
		"koej",
		"koec",
		"koek",
		"koet",
		"koep",
		"koeh",
		"kyo",
		"kyog",
		"kyogg",
		"kyogs",
		"kyon",
		"kyonj",
		"kyonh",
		"kyod",
		"kyol",
		"kyolg",
		"kyolm",
		"kyolb",
		"kyols",
		"kyolt",
		"kyolp",
		"kyolh",
		"kyom",
		"kyob",
		"kyobs",
		"kyos",
		"kyoss",
		"kyong",
		"kyoj",
		"kyoc",
		"kyok",
		"kyot",
		"kyop",
		"kyoh",
		"ku",
		"kug",
		"kugg",
		"kugs",
		"kun",
		"kunj",
		"kunh",
		"kud",
		"kul",
		"kulg",
		"kulm",
		"kulb",
		"kuls",
		"kult",
		"kulp",
		"kulh",
		"kum",
		"kub",
		"kubs",
		"kus",
		"kuss",
		"kung",
		"kuj",
		"kuc",
		"kuk",
		"kut",
		"kup",
		"kuh",
		"kweo",
		"kweog",
		"kweogg",
		"kweogs"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xd0.js
var require_xd0 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"kweon",
		"kweonj",
		"kweonh",
		"kweod",
		"kweol",
		"kweolg",
		"kweolm",
		"kweolb",
		"kweols",
		"kweolt",
		"kweolp",
		"kweolh",
		"kweom",
		"kweob",
		"kweobs",
		"kweos",
		"kweoss",
		"kweong",
		"kweoj",
		"kweoc",
		"kweok",
		"kweot",
		"kweop",
		"kweoh",
		"kwe",
		"kweg",
		"kwegg",
		"kwegs",
		"kwen",
		"kwenj",
		"kwenh",
		"kwed",
		"kwel",
		"kwelg",
		"kwelm",
		"kwelb",
		"kwels",
		"kwelt",
		"kwelp",
		"kwelh",
		"kwem",
		"kweb",
		"kwebs",
		"kwes",
		"kwess",
		"kweng",
		"kwej",
		"kwec",
		"kwek",
		"kwet",
		"kwep",
		"kweh",
		"kwi",
		"kwig",
		"kwigg",
		"kwigs",
		"kwin",
		"kwinj",
		"kwinh",
		"kwid",
		"kwil",
		"kwilg",
		"kwilm",
		"kwilb",
		"kwils",
		"kwilt",
		"kwilp",
		"kwilh",
		"kwim",
		"kwib",
		"kwibs",
		"kwis",
		"kwiss",
		"kwing",
		"kwij",
		"kwic",
		"kwik",
		"kwit",
		"kwip",
		"kwih",
		"kyu",
		"kyug",
		"kyugg",
		"kyugs",
		"kyun",
		"kyunj",
		"kyunh",
		"kyud",
		"kyul",
		"kyulg",
		"kyulm",
		"kyulb",
		"kyuls",
		"kyult",
		"kyulp",
		"kyulh",
		"kyum",
		"kyub",
		"kyubs",
		"kyus",
		"kyuss",
		"kyung",
		"kyuj",
		"kyuc",
		"kyuk",
		"kyut",
		"kyup",
		"kyuh",
		"keu",
		"keug",
		"keugg",
		"keugs",
		"keun",
		"keunj",
		"keunh",
		"keud",
		"keul",
		"keulg",
		"keulm",
		"keulb",
		"keuls",
		"keult",
		"keulp",
		"keulh",
		"keum",
		"keub",
		"keubs",
		"keus",
		"keuss",
		"keung",
		"keuj",
		"keuc",
		"keuk",
		"keut",
		"keup",
		"keuh",
		"kyi",
		"kyig",
		"kyigg",
		"kyigs",
		"kyin",
		"kyinj",
		"kyinh",
		"kyid",
		"kyil",
		"kyilg",
		"kyilm",
		"kyilb",
		"kyils",
		"kyilt",
		"kyilp",
		"kyilh",
		"kyim",
		"kyib",
		"kyibs",
		"kyis",
		"kyiss",
		"kying",
		"kyij",
		"kyic",
		"kyik",
		"kyit",
		"kyip",
		"kyih",
		"ki",
		"kig",
		"kigg",
		"kigs",
		"kin",
		"kinj",
		"kinh",
		"kid",
		"kil",
		"kilg",
		"kilm",
		"kilb",
		"kils",
		"kilt",
		"kilp",
		"kilh",
		"kim",
		"kib",
		"kibs",
		"kis",
		"kiss",
		"king",
		"kij",
		"kic",
		"kik",
		"kit",
		"kip",
		"kih",
		"ta",
		"tag",
		"tagg",
		"tags",
		"tan",
		"tanj",
		"tanh",
		"tad",
		"tal",
		"talg",
		"talm",
		"talb",
		"tals",
		"talt",
		"talp",
		"talh",
		"tam",
		"tab",
		"tabs",
		"tas",
		"tass",
		"tang",
		"taj",
		"tac",
		"tak",
		"tat",
		"tap",
		"tah",
		"tae",
		"taeg",
		"taegg",
		"taegs",
		"taen",
		"taenj",
		"taenh",
		"taed",
		"tael",
		"taelg",
		"taelm",
		"taelb",
		"taels",
		"taelt",
		"taelp",
		"taelh",
		"taem",
		"taeb",
		"taebs",
		"taes",
		"taess",
		"taeng",
		"taej",
		"taec",
		"taek",
		"taet",
		"taep",
		"taeh",
		"tya",
		"tyag",
		"tyagg",
		"tyags",
		"tyan",
		"tyanj",
		"tyanh",
		"tyad"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xd1.js
var require_xd1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"tyal",
		"tyalg",
		"tyalm",
		"tyalb",
		"tyals",
		"tyalt",
		"tyalp",
		"tyalh",
		"tyam",
		"tyab",
		"tyabs",
		"tyas",
		"tyass",
		"tyang",
		"tyaj",
		"tyac",
		"tyak",
		"tyat",
		"tyap",
		"tyah",
		"tyae",
		"tyaeg",
		"tyaegg",
		"tyaegs",
		"tyaen",
		"tyaenj",
		"tyaenh",
		"tyaed",
		"tyael",
		"tyaelg",
		"tyaelm",
		"tyaelb",
		"tyaels",
		"tyaelt",
		"tyaelp",
		"tyaelh",
		"tyaem",
		"tyaeb",
		"tyaebs",
		"tyaes",
		"tyaess",
		"tyaeng",
		"tyaej",
		"tyaec",
		"tyaek",
		"tyaet",
		"tyaep",
		"tyaeh",
		"teo",
		"teog",
		"teogg",
		"teogs",
		"teon",
		"teonj",
		"teonh",
		"teod",
		"teol",
		"teolg",
		"teolm",
		"teolb",
		"teols",
		"teolt",
		"teolp",
		"teolh",
		"teom",
		"teob",
		"teobs",
		"teos",
		"teoss",
		"teong",
		"teoj",
		"teoc",
		"teok",
		"teot",
		"teop",
		"teoh",
		"te",
		"teg",
		"tegg",
		"tegs",
		"ten",
		"tenj",
		"tenh",
		"ted",
		"tel",
		"telg",
		"telm",
		"telb",
		"tels",
		"telt",
		"telp",
		"telh",
		"tem",
		"teb",
		"tebs",
		"tes",
		"tess",
		"teng",
		"tej",
		"tec",
		"tek",
		"tet",
		"tep",
		"teh",
		"tyeo",
		"tyeog",
		"tyeogg",
		"tyeogs",
		"tyeon",
		"tyeonj",
		"tyeonh",
		"tyeod",
		"tyeol",
		"tyeolg",
		"tyeolm",
		"tyeolb",
		"tyeols",
		"tyeolt",
		"tyeolp",
		"tyeolh",
		"tyeom",
		"tyeob",
		"tyeobs",
		"tyeos",
		"tyeoss",
		"tyeong",
		"tyeoj",
		"tyeoc",
		"tyeok",
		"tyeot",
		"tyeop",
		"tyeoh",
		"tye",
		"tyeg",
		"tyegg",
		"tyegs",
		"tyen",
		"tyenj",
		"tyenh",
		"tyed",
		"tyel",
		"tyelg",
		"tyelm",
		"tyelb",
		"tyels",
		"tyelt",
		"tyelp",
		"tyelh",
		"tyem",
		"tyeb",
		"tyebs",
		"tyes",
		"tyess",
		"tyeng",
		"tyej",
		"tyec",
		"tyek",
		"tyet",
		"tyep",
		"tyeh",
		"to",
		"tog",
		"togg",
		"togs",
		"ton",
		"tonj",
		"tonh",
		"tod",
		"tol",
		"tolg",
		"tolm",
		"tolb",
		"tols",
		"tolt",
		"tolp",
		"tolh",
		"tom",
		"tob",
		"tobs",
		"tos",
		"toss",
		"tong",
		"toj",
		"toc",
		"tok",
		"tot",
		"top",
		"toh",
		"twa",
		"twag",
		"twagg",
		"twags",
		"twan",
		"twanj",
		"twanh",
		"twad",
		"twal",
		"twalg",
		"twalm",
		"twalb",
		"twals",
		"twalt",
		"twalp",
		"twalh",
		"twam",
		"twab",
		"twabs",
		"twas",
		"twass",
		"twang",
		"twaj",
		"twac",
		"twak",
		"twat",
		"twap",
		"twah",
		"twae",
		"twaeg",
		"twaegg",
		"twaegs",
		"twaen",
		"twaenj",
		"twaenh",
		"twaed",
		"twael",
		"twaelg",
		"twaelm",
		"twaelb",
		"twaels",
		"twaelt",
		"twaelp",
		"twaelh",
		"twaem",
		"twaeb",
		"twaebs",
		"twaes",
		"twaess",
		"twaeng",
		"twaej",
		"twaec",
		"twaek",
		"twaet",
		"twaep",
		"twaeh",
		"toe",
		"toeg",
		"toegg",
		"toegs",
		"toen",
		"toenj",
		"toenh",
		"toed",
		"toel",
		"toelg",
		"toelm",
		"toelb"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xd2.js
var require_xd2 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"toels",
		"toelt",
		"toelp",
		"toelh",
		"toem",
		"toeb",
		"toebs",
		"toes",
		"toess",
		"toeng",
		"toej",
		"toec",
		"toek",
		"toet",
		"toep",
		"toeh",
		"tyo",
		"tyog",
		"tyogg",
		"tyogs",
		"tyon",
		"tyonj",
		"tyonh",
		"tyod",
		"tyol",
		"tyolg",
		"tyolm",
		"tyolb",
		"tyols",
		"tyolt",
		"tyolp",
		"tyolh",
		"tyom",
		"tyob",
		"tyobs",
		"tyos",
		"tyoss",
		"tyong",
		"tyoj",
		"tyoc",
		"tyok",
		"tyot",
		"tyop",
		"tyoh",
		"tu",
		"tug",
		"tugg",
		"tugs",
		"tun",
		"tunj",
		"tunh",
		"tud",
		"tul",
		"tulg",
		"tulm",
		"tulb",
		"tuls",
		"tult",
		"tulp",
		"tulh",
		"tum",
		"tub",
		"tubs",
		"tus",
		"tuss",
		"tung",
		"tuj",
		"tuc",
		"tuk",
		"tut",
		"tup",
		"tuh",
		"tweo",
		"tweog",
		"tweogg",
		"tweogs",
		"tweon",
		"tweonj",
		"tweonh",
		"tweod",
		"tweol",
		"tweolg",
		"tweolm",
		"tweolb",
		"tweols",
		"tweolt",
		"tweolp",
		"tweolh",
		"tweom",
		"tweob",
		"tweobs",
		"tweos",
		"tweoss",
		"tweong",
		"tweoj",
		"tweoc",
		"tweok",
		"tweot",
		"tweop",
		"tweoh",
		"twe",
		"tweg",
		"twegg",
		"twegs",
		"twen",
		"twenj",
		"twenh",
		"twed",
		"twel",
		"twelg",
		"twelm",
		"twelb",
		"twels",
		"twelt",
		"twelp",
		"twelh",
		"twem",
		"tweb",
		"twebs",
		"twes",
		"twess",
		"tweng",
		"twej",
		"twec",
		"twek",
		"twet",
		"twep",
		"tweh",
		"twi",
		"twig",
		"twigg",
		"twigs",
		"twin",
		"twinj",
		"twinh",
		"twid",
		"twil",
		"twilg",
		"twilm",
		"twilb",
		"twils",
		"twilt",
		"twilp",
		"twilh",
		"twim",
		"twib",
		"twibs",
		"twis",
		"twiss",
		"twing",
		"twij",
		"twic",
		"twik",
		"twit",
		"twip",
		"twih",
		"tyu",
		"tyug",
		"tyugg",
		"tyugs",
		"tyun",
		"tyunj",
		"tyunh",
		"tyud",
		"tyul",
		"tyulg",
		"tyulm",
		"tyulb",
		"tyuls",
		"tyult",
		"tyulp",
		"tyulh",
		"tyum",
		"tyub",
		"tyubs",
		"tyus",
		"tyuss",
		"tyung",
		"tyuj",
		"tyuc",
		"tyuk",
		"tyut",
		"tyup",
		"tyuh",
		"teu",
		"teug",
		"teugg",
		"teugs",
		"teun",
		"teunj",
		"teunh",
		"teud",
		"teul",
		"teulg",
		"teulm",
		"teulb",
		"teuls",
		"teult",
		"teulp",
		"teulh",
		"teum",
		"teub",
		"teubs",
		"teus",
		"teuss",
		"teung",
		"teuj",
		"teuc",
		"teuk",
		"teut",
		"teup",
		"teuh",
		"tyi",
		"tyig",
		"tyigg",
		"tyigs",
		"tyin",
		"tyinj",
		"tyinh",
		"tyid",
		"tyil",
		"tyilg",
		"tyilm",
		"tyilb",
		"tyils",
		"tyilt",
		"tyilp",
		"tyilh",
		"tyim",
		"tyib",
		"tyibs",
		"tyis",
		"tyiss",
		"tying",
		"tyij",
		"tyic",
		"tyik",
		"tyit",
		"tyip",
		"tyih",
		"ti",
		"tig",
		"tigg",
		"tigs",
		"tin",
		"tinj",
		"tinh",
		"tid",
		"til",
		"tilg",
		"tilm",
		"tilb",
		"tils",
		"tilt",
		"tilp",
		"tilh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xd3.js
var require_xd3 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"tim",
		"tib",
		"tibs",
		"tis",
		"tiss",
		"ting",
		"tij",
		"tic",
		"tik",
		"tit",
		"tip",
		"tih",
		"pa",
		"pag",
		"pagg",
		"pags",
		"pan",
		"panj",
		"panh",
		"pad",
		"pal",
		"palg",
		"palm",
		"palb",
		"pals",
		"palt",
		"palp",
		"palh",
		"pam",
		"pab",
		"pabs",
		"pas",
		"pass",
		"pang",
		"paj",
		"pac",
		"pak",
		"pat",
		"pap",
		"pah",
		"pae",
		"paeg",
		"paegg",
		"paegs",
		"paen",
		"paenj",
		"paenh",
		"paed",
		"pael",
		"paelg",
		"paelm",
		"paelb",
		"paels",
		"paelt",
		"paelp",
		"paelh",
		"paem",
		"paeb",
		"paebs",
		"paes",
		"paess",
		"paeng",
		"paej",
		"paec",
		"paek",
		"paet",
		"paep",
		"paeh",
		"pya",
		"pyag",
		"pyagg",
		"pyags",
		"pyan",
		"pyanj",
		"pyanh",
		"pyad",
		"pyal",
		"pyalg",
		"pyalm",
		"pyalb",
		"pyals",
		"pyalt",
		"pyalp",
		"pyalh",
		"pyam",
		"pyab",
		"pyabs",
		"pyas",
		"pyass",
		"pyang",
		"pyaj",
		"pyac",
		"pyak",
		"pyat",
		"pyap",
		"pyah",
		"pyae",
		"pyaeg",
		"pyaegg",
		"pyaegs",
		"pyaen",
		"pyaenj",
		"pyaenh",
		"pyaed",
		"pyael",
		"pyaelg",
		"pyaelm",
		"pyaelb",
		"pyaels",
		"pyaelt",
		"pyaelp",
		"pyaelh",
		"pyaem",
		"pyaeb",
		"pyaebs",
		"pyaes",
		"pyaess",
		"pyaeng",
		"pyaej",
		"pyaec",
		"pyaek",
		"pyaet",
		"pyaep",
		"pyaeh",
		"peo",
		"peog",
		"peogg",
		"peogs",
		"peon",
		"peonj",
		"peonh",
		"peod",
		"peol",
		"peolg",
		"peolm",
		"peolb",
		"peols",
		"peolt",
		"peolp",
		"peolh",
		"peom",
		"peob",
		"peobs",
		"peos",
		"peoss",
		"peong",
		"peoj",
		"peoc",
		"peok",
		"peot",
		"peop",
		"peoh",
		"pe",
		"peg",
		"pegg",
		"pegs",
		"pen",
		"penj",
		"penh",
		"ped",
		"pel",
		"pelg",
		"pelm",
		"pelb",
		"pels",
		"pelt",
		"pelp",
		"pelh",
		"pem",
		"peb",
		"pebs",
		"pes",
		"pess",
		"peng",
		"pej",
		"pec",
		"pek",
		"pet",
		"pep",
		"peh",
		"pyeo",
		"pyeog",
		"pyeogg",
		"pyeogs",
		"pyeon",
		"pyeonj",
		"pyeonh",
		"pyeod",
		"pyeol",
		"pyeolg",
		"pyeolm",
		"pyeolb",
		"pyeols",
		"pyeolt",
		"pyeolp",
		"pyeolh",
		"pyeom",
		"pyeob",
		"pyeobs",
		"pyeos",
		"pyeoss",
		"pyeong",
		"pyeoj",
		"pyeoc",
		"pyeok",
		"pyeot",
		"pyeop",
		"pyeoh",
		"pye",
		"pyeg",
		"pyegg",
		"pyegs",
		"pyen",
		"pyenj",
		"pyenh",
		"pyed",
		"pyel",
		"pyelg",
		"pyelm",
		"pyelb",
		"pyels",
		"pyelt",
		"pyelp",
		"pyelh",
		"pyem",
		"pyeb",
		"pyebs",
		"pyes",
		"pyess",
		"pyeng",
		"pyej",
		"pyec",
		"pyek",
		"pyet",
		"pyep",
		"pyeh",
		"po",
		"pog",
		"pogg",
		"pogs",
		"pon",
		"ponj",
		"ponh",
		"pod",
		"pol",
		"polg",
		"polm",
		"polb",
		"pols",
		"polt",
		"polp",
		"polh",
		"pom",
		"pob",
		"pobs",
		"pos"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xd4.js
var require_xd4 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"poss",
		"pong",
		"poj",
		"poc",
		"pok",
		"pot",
		"pop",
		"poh",
		"pwa",
		"pwag",
		"pwagg",
		"pwags",
		"pwan",
		"pwanj",
		"pwanh",
		"pwad",
		"pwal",
		"pwalg",
		"pwalm",
		"pwalb",
		"pwals",
		"pwalt",
		"pwalp",
		"pwalh",
		"pwam",
		"pwab",
		"pwabs",
		"pwas",
		"pwass",
		"pwang",
		"pwaj",
		"pwac",
		"pwak",
		"pwat",
		"pwap",
		"pwah",
		"pwae",
		"pwaeg",
		"pwaegg",
		"pwaegs",
		"pwaen",
		"pwaenj",
		"pwaenh",
		"pwaed",
		"pwael",
		"pwaelg",
		"pwaelm",
		"pwaelb",
		"pwaels",
		"pwaelt",
		"pwaelp",
		"pwaelh",
		"pwaem",
		"pwaeb",
		"pwaebs",
		"pwaes",
		"pwaess",
		"pwaeng",
		"pwaej",
		"pwaec",
		"pwaek",
		"pwaet",
		"pwaep",
		"pwaeh",
		"poe",
		"poeg",
		"poegg",
		"poegs",
		"poen",
		"poenj",
		"poenh",
		"poed",
		"poel",
		"poelg",
		"poelm",
		"poelb",
		"poels",
		"poelt",
		"poelp",
		"poelh",
		"poem",
		"poeb",
		"poebs",
		"poes",
		"poess",
		"poeng",
		"poej",
		"poec",
		"poek",
		"poet",
		"poep",
		"poeh",
		"pyo",
		"pyog",
		"pyogg",
		"pyogs",
		"pyon",
		"pyonj",
		"pyonh",
		"pyod",
		"pyol",
		"pyolg",
		"pyolm",
		"pyolb",
		"pyols",
		"pyolt",
		"pyolp",
		"pyolh",
		"pyom",
		"pyob",
		"pyobs",
		"pyos",
		"pyoss",
		"pyong",
		"pyoj",
		"pyoc",
		"pyok",
		"pyot",
		"pyop",
		"pyoh",
		"pu",
		"pug",
		"pugg",
		"pugs",
		"pun",
		"punj",
		"punh",
		"pud",
		"pul",
		"pulg",
		"pulm",
		"pulb",
		"puls",
		"pult",
		"pulp",
		"pulh",
		"pum",
		"pub",
		"pubs",
		"pus",
		"puss",
		"pung",
		"puj",
		"puc",
		"puk",
		"put",
		"pup",
		"puh",
		"pweo",
		"pweog",
		"pweogg",
		"pweogs",
		"pweon",
		"pweonj",
		"pweonh",
		"pweod",
		"pweol",
		"pweolg",
		"pweolm",
		"pweolb",
		"pweols",
		"pweolt",
		"pweolp",
		"pweolh",
		"pweom",
		"pweob",
		"pweobs",
		"pweos",
		"pweoss",
		"pweong",
		"pweoj",
		"pweoc",
		"pweok",
		"pweot",
		"pweop",
		"pweoh",
		"pwe",
		"pweg",
		"pwegg",
		"pwegs",
		"pwen",
		"pwenj",
		"pwenh",
		"pwed",
		"pwel",
		"pwelg",
		"pwelm",
		"pwelb",
		"pwels",
		"pwelt",
		"pwelp",
		"pwelh",
		"pwem",
		"pweb",
		"pwebs",
		"pwes",
		"pwess",
		"pweng",
		"pwej",
		"pwec",
		"pwek",
		"pwet",
		"pwep",
		"pweh",
		"pwi",
		"pwig",
		"pwigg",
		"pwigs",
		"pwin",
		"pwinj",
		"pwinh",
		"pwid",
		"pwil",
		"pwilg",
		"pwilm",
		"pwilb",
		"pwils",
		"pwilt",
		"pwilp",
		"pwilh",
		"pwim",
		"pwib",
		"pwibs",
		"pwis",
		"pwiss",
		"pwing",
		"pwij",
		"pwic",
		"pwik",
		"pwit",
		"pwip",
		"pwih",
		"pyu",
		"pyug",
		"pyugg",
		"pyugs",
		"pyun",
		"pyunj",
		"pyunh",
		"pyud",
		"pyul",
		"pyulg",
		"pyulm",
		"pyulb",
		"pyuls",
		"pyult",
		"pyulp",
		"pyulh",
		"pyum",
		"pyub",
		"pyubs",
		"pyus",
		"pyuss",
		"pyung",
		"pyuj",
		"pyuc"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xd5.js
var require_xd5 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"pyuk",
		"pyut",
		"pyup",
		"pyuh",
		"peu",
		"peug",
		"peugg",
		"peugs",
		"peun",
		"peunj",
		"peunh",
		"peud",
		"peul",
		"peulg",
		"peulm",
		"peulb",
		"peuls",
		"peult",
		"peulp",
		"peulh",
		"peum",
		"peub",
		"peubs",
		"peus",
		"peuss",
		"peung",
		"peuj",
		"peuc",
		"peuk",
		"peut",
		"peup",
		"peuh",
		"pyi",
		"pyig",
		"pyigg",
		"pyigs",
		"pyin",
		"pyinj",
		"pyinh",
		"pyid",
		"pyil",
		"pyilg",
		"pyilm",
		"pyilb",
		"pyils",
		"pyilt",
		"pyilp",
		"pyilh",
		"pyim",
		"pyib",
		"pyibs",
		"pyis",
		"pyiss",
		"pying",
		"pyij",
		"pyic",
		"pyik",
		"pyit",
		"pyip",
		"pyih",
		"pi",
		"pig",
		"pigg",
		"pigs",
		"pin",
		"pinj",
		"pinh",
		"pid",
		"pil",
		"pilg",
		"pilm",
		"pilb",
		"pils",
		"pilt",
		"pilp",
		"pilh",
		"pim",
		"pib",
		"pibs",
		"pis",
		"piss",
		"ping",
		"pij",
		"pic",
		"pik",
		"pit",
		"pip",
		"pih",
		"ha",
		"hag",
		"hagg",
		"hags",
		"han",
		"hanj",
		"hanh",
		"had",
		"hal",
		"halg",
		"halm",
		"halb",
		"hals",
		"halt",
		"halp",
		"halh",
		"ham",
		"hab",
		"habs",
		"has",
		"hass",
		"hang",
		"haj",
		"hac",
		"hak",
		"hat",
		"hap",
		"hah",
		"hae",
		"haeg",
		"haegg",
		"haegs",
		"haen",
		"haenj",
		"haenh",
		"haed",
		"hael",
		"haelg",
		"haelm",
		"haelb",
		"haels",
		"haelt",
		"haelp",
		"haelh",
		"haem",
		"haeb",
		"haebs",
		"haes",
		"haess",
		"haeng",
		"haej",
		"haec",
		"haek",
		"haet",
		"haep",
		"haeh",
		"hya",
		"hyag",
		"hyagg",
		"hyags",
		"hyan",
		"hyanj",
		"hyanh",
		"hyad",
		"hyal",
		"hyalg",
		"hyalm",
		"hyalb",
		"hyals",
		"hyalt",
		"hyalp",
		"hyalh",
		"hyam",
		"hyab",
		"hyabs",
		"hyas",
		"hyass",
		"hyang",
		"hyaj",
		"hyac",
		"hyak",
		"hyat",
		"hyap",
		"hyah",
		"hyae",
		"hyaeg",
		"hyaegg",
		"hyaegs",
		"hyaen",
		"hyaenj",
		"hyaenh",
		"hyaed",
		"hyael",
		"hyaelg",
		"hyaelm",
		"hyaelb",
		"hyaels",
		"hyaelt",
		"hyaelp",
		"hyaelh",
		"hyaem",
		"hyaeb",
		"hyaebs",
		"hyaes",
		"hyaess",
		"hyaeng",
		"hyaej",
		"hyaec",
		"hyaek",
		"hyaet",
		"hyaep",
		"hyaeh",
		"heo",
		"heog",
		"heogg",
		"heogs",
		"heon",
		"heonj",
		"heonh",
		"heod",
		"heol",
		"heolg",
		"heolm",
		"heolb",
		"heols",
		"heolt",
		"heolp",
		"heolh",
		"heom",
		"heob",
		"heobs",
		"heos",
		"heoss",
		"heong",
		"heoj",
		"heoc",
		"heok",
		"heot",
		"heop",
		"heoh",
		"he",
		"heg",
		"hegg",
		"hegs",
		"hen",
		"henj",
		"henh",
		"hed",
		"hel",
		"helg",
		"helm",
		"helb",
		"hels",
		"helt",
		"help",
		"helh",
		"hem",
		"heb",
		"hebs",
		"hes",
		"hess",
		"heng",
		"hej",
		"hec",
		"hek",
		"het",
		"hep",
		"heh"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xd6.js
var require_xd6 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"hyeo",
		"hyeog",
		"hyeogg",
		"hyeogs",
		"hyeon",
		"hyeonj",
		"hyeonh",
		"hyeod",
		"hyeol",
		"hyeolg",
		"hyeolm",
		"hyeolb",
		"hyeols",
		"hyeolt",
		"hyeolp",
		"hyeolh",
		"hyeom",
		"hyeob",
		"hyeobs",
		"hyeos",
		"hyeoss",
		"hyeong",
		"hyeoj",
		"hyeoc",
		"hyeok",
		"hyeot",
		"hyeop",
		"hyeoh",
		"hye",
		"hyeg",
		"hyegg",
		"hyegs",
		"hyen",
		"hyenj",
		"hyenh",
		"hyed",
		"hyel",
		"hyelg",
		"hyelm",
		"hyelb",
		"hyels",
		"hyelt",
		"hyelp",
		"hyelh",
		"hyem",
		"hyeb",
		"hyebs",
		"hyes",
		"hyess",
		"hyeng",
		"hyej",
		"hyec",
		"hyek",
		"hyet",
		"hyep",
		"hyeh",
		"ho",
		"hog",
		"hogg",
		"hogs",
		"hon",
		"honj",
		"honh",
		"hod",
		"hol",
		"holg",
		"holm",
		"holb",
		"hols",
		"holt",
		"holp",
		"holh",
		"hom",
		"hob",
		"hobs",
		"hos",
		"hoss",
		"hong",
		"hoj",
		"hoc",
		"hok",
		"hot",
		"hop",
		"hoh",
		"hwa",
		"hwag",
		"hwagg",
		"hwags",
		"hwan",
		"hwanj",
		"hwanh",
		"hwad",
		"hwal",
		"hwalg",
		"hwalm",
		"hwalb",
		"hwals",
		"hwalt",
		"hwalp",
		"hwalh",
		"hwam",
		"hwab",
		"hwabs",
		"hwas",
		"hwass",
		"hwang",
		"hwaj",
		"hwac",
		"hwak",
		"hwat",
		"hwap",
		"hwah",
		"hwae",
		"hwaeg",
		"hwaegg",
		"hwaegs",
		"hwaen",
		"hwaenj",
		"hwaenh",
		"hwaed",
		"hwael",
		"hwaelg",
		"hwaelm",
		"hwaelb",
		"hwaels",
		"hwaelt",
		"hwaelp",
		"hwaelh",
		"hwaem",
		"hwaeb",
		"hwaebs",
		"hwaes",
		"hwaess",
		"hwaeng",
		"hwaej",
		"hwaec",
		"hwaek",
		"hwaet",
		"hwaep",
		"hwaeh",
		"hoe",
		"hoeg",
		"hoegg",
		"hoegs",
		"hoen",
		"hoenj",
		"hoenh",
		"hoed",
		"hoel",
		"hoelg",
		"hoelm",
		"hoelb",
		"hoels",
		"hoelt",
		"hoelp",
		"hoelh",
		"hoem",
		"hoeb",
		"hoebs",
		"hoes",
		"hoess",
		"hoeng",
		"hoej",
		"hoec",
		"hoek",
		"hoet",
		"hoep",
		"hoeh",
		"hyo",
		"hyog",
		"hyogg",
		"hyogs",
		"hyon",
		"hyonj",
		"hyonh",
		"hyod",
		"hyol",
		"hyolg",
		"hyolm",
		"hyolb",
		"hyols",
		"hyolt",
		"hyolp",
		"hyolh",
		"hyom",
		"hyob",
		"hyobs",
		"hyos",
		"hyoss",
		"hyong",
		"hyoj",
		"hyoc",
		"hyok",
		"hyot",
		"hyop",
		"hyoh",
		"hu",
		"hug",
		"hugg",
		"hugs",
		"hun",
		"hunj",
		"hunh",
		"hud",
		"hul",
		"hulg",
		"hulm",
		"hulb",
		"huls",
		"hult",
		"hulp",
		"hulh",
		"hum",
		"hub",
		"hubs",
		"hus",
		"huss",
		"hung",
		"huj",
		"huc",
		"huk",
		"hut",
		"hup",
		"huh",
		"hweo",
		"hweog",
		"hweogg",
		"hweogs",
		"hweon",
		"hweonj",
		"hweonh",
		"hweod",
		"hweol",
		"hweolg",
		"hweolm",
		"hweolb",
		"hweols",
		"hweolt",
		"hweolp",
		"hweolh",
		"hweom",
		"hweob",
		"hweobs",
		"hweos",
		"hweoss",
		"hweong",
		"hweoj",
		"hweoc",
		"hweok",
		"hweot",
		"hweop",
		"hweoh",
		"hwe",
		"hweg",
		"hwegg",
		"hwegs"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xd7.js
var require_xd7 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"hwen",
		"hwenj",
		"hwenh",
		"hwed",
		"hwel",
		"hwelg",
		"hwelm",
		"hwelb",
		"hwels",
		"hwelt",
		"hwelp",
		"hwelh",
		"hwem",
		"hweb",
		"hwebs",
		"hwes",
		"hwess",
		"hweng",
		"hwej",
		"hwec",
		"hwek",
		"hwet",
		"hwep",
		"hweh",
		"hwi",
		"hwig",
		"hwigg",
		"hwigs",
		"hwin",
		"hwinj",
		"hwinh",
		"hwid",
		"hwil",
		"hwilg",
		"hwilm",
		"hwilb",
		"hwils",
		"hwilt",
		"hwilp",
		"hwilh",
		"hwim",
		"hwib",
		"hwibs",
		"hwis",
		"hwiss",
		"hwing",
		"hwij",
		"hwic",
		"hwik",
		"hwit",
		"hwip",
		"hwih",
		"hyu",
		"hyug",
		"hyugg",
		"hyugs",
		"hyun",
		"hyunj",
		"hyunh",
		"hyud",
		"hyul",
		"hyulg",
		"hyulm",
		"hyulb",
		"hyuls",
		"hyult",
		"hyulp",
		"hyulh",
		"hyum",
		"hyub",
		"hyubs",
		"hyus",
		"hyuss",
		"hyung",
		"hyuj",
		"hyuc",
		"hyuk",
		"hyut",
		"hyup",
		"hyuh",
		"heu",
		"heug",
		"heugg",
		"heugs",
		"heun",
		"heunj",
		"heunh",
		"heud",
		"heul",
		"heulg",
		"heulm",
		"heulb",
		"heuls",
		"heult",
		"heulp",
		"heulh",
		"heum",
		"heub",
		"heubs",
		"heus",
		"heuss",
		"heung",
		"heuj",
		"heuc",
		"heuk",
		"heut",
		"heup",
		"heuh",
		"hyi",
		"hyig",
		"hyigg",
		"hyigs",
		"hyin",
		"hyinj",
		"hyinh",
		"hyid",
		"hyil",
		"hyilg",
		"hyilm",
		"hyilb",
		"hyils",
		"hyilt",
		"hyilp",
		"hyilh",
		"hyim",
		"hyib",
		"hyibs",
		"hyis",
		"hyiss",
		"hying",
		"hyij",
		"hyic",
		"hyik",
		"hyit",
		"hyip",
		"hyih",
		"hi",
		"hig",
		"higg",
		"higs",
		"hin",
		"hinj",
		"hinh",
		"hid",
		"hil",
		"hilg",
		"hilm",
		"hilb",
		"hils",
		"hilt",
		"hilp",
		"hilh",
		"him",
		"hib",
		"hibs",
		"his",
		"hiss",
		"hing",
		"hij",
		"hic",
		"hik",
		"hit",
		"hip",
		"hih",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xf9.js
var require_xf9 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Kay ",
		"Kayng ",
		"Ke ",
		"Ko ",
		"Kol ",
		"Koc ",
		"Kwi ",
		"Kwi ",
		"Kyun ",
		"Kul ",
		"Kum ",
		"Na ",
		"Na ",
		"Na ",
		"La ",
		"Na ",
		"Na ",
		"Na ",
		"Na ",
		"Na ",
		"Nak ",
		"Nak ",
		"Nak ",
		"Nak ",
		"Nak ",
		"Nak ",
		"Nak ",
		"Nan ",
		"Nan ",
		"Nan ",
		"Nan ",
		"Nan ",
		"Nan ",
		"Nam ",
		"Nam ",
		"Nam ",
		"Nam ",
		"Nap ",
		"Nap ",
		"Nap ",
		"Nang ",
		"Nang ",
		"Nang ",
		"Nang ",
		"Nang ",
		"Nay ",
		"Nayng ",
		"No ",
		"No ",
		"No ",
		"No ",
		"No ",
		"No ",
		"No ",
		"No ",
		"No ",
		"No ",
		"No ",
		"No ",
		"Nok ",
		"Nok ",
		"Nok ",
		"Nok ",
		"Nok ",
		"Nok ",
		"Non ",
		"Nong ",
		"Nong ",
		"Nong ",
		"Nong ",
		"Noy ",
		"Noy ",
		"Noy ",
		"Noy ",
		"Nwu ",
		"Nwu ",
		"Nwu ",
		"Nwu ",
		"Nwu ",
		"Nwu ",
		"Nwu ",
		"Nwu ",
		"Nuk ",
		"Nuk ",
		"Num ",
		"Nung ",
		"Nung ",
		"Nung ",
		"Nung ",
		"Nung ",
		"Twu ",
		"La ",
		"Lak ",
		"Lak ",
		"Lan ",
		"Lyeng ",
		"Lo ",
		"Lyul ",
		"Li ",
		"Pey ",
		"Pen ",
		"Pyen ",
		"Pwu ",
		"Pwul ",
		"Pi ",
		"Sak ",
		"Sak ",
		"Sam ",
		"Sayk ",
		"Sayng ",
		"Sep ",
		"Sey ",
		"Sway ",
		"Sin ",
		"Sim ",
		"Sip ",
		"Ya ",
		"Yak ",
		"Yak ",
		"Yang ",
		"Yang ",
		"Yang ",
		"Yang ",
		"Yang ",
		"Yang ",
		"Yang ",
		"Yang ",
		"Ye ",
		"Ye ",
		"Ye ",
		"Ye ",
		"Ye ",
		"Ye ",
		"Ye ",
		"Ye ",
		"Ye ",
		"Ye ",
		"Ye ",
		"Yek ",
		"Yek ",
		"Yek ",
		"Yek ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yen ",
		"Yel ",
		"Yel ",
		"Yel ",
		"Yel ",
		"Yel ",
		"Yel ",
		"Yem ",
		"Yem ",
		"Yem ",
		"Yem ",
		"Yem ",
		"Yep ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yeng ",
		"Yey ",
		"Yey ",
		"Yey ",
		"Yey ",
		"O ",
		"Yo ",
		"Yo ",
		"Yo ",
		"Yo ",
		"Yo ",
		"Yo ",
		"Yo ",
		"Yo ",
		"Yo ",
		"Yo ",
		"Yong ",
		"Wun ",
		"Wen ",
		"Yu ",
		"Yu ",
		"Yu ",
		"Yu ",
		"Yu ",
		"Yu ",
		"Yu ",
		"Yu ",
		"Yu ",
		"Yu ",
		"Yuk ",
		"Yuk ",
		"Yuk ",
		"Yun ",
		"Yun ",
		"Yun ",
		"Yun ",
		"Yul ",
		"Yul ",
		"Yul ",
		"Yul ",
		"Yung ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"I ",
		"Ik ",
		"Ik ",
		"In ",
		"In ",
		"In ",
		"In ",
		"In ",
		"In ",
		"In ",
		"Im ",
		"Im ",
		"Im ",
		"Ip ",
		"Ip ",
		"Ip ",
		"Cang ",
		"Cek ",
		"Ci ",
		"Cip ",
		"Cha ",
		"Chek "
	];
}));
//#endregion
//#region node_modules/unidecode/data/xfa.js
var require_xfa = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"Chey ",
		"Thak ",
		"Thak ",
		"Thang ",
		"Thayk ",
		"Thong ",
		"Pho ",
		"Phok ",
		"Hang ",
		"Hang ",
		"Hyen ",
		"Hwak ",
		"Wu ",
		"Huo ",
		"[?] ",
		"[?] ",
		"Zhong ",
		"[?] ",
		"Qing ",
		"[?] ",
		"[?] ",
		"Xi ",
		"Zhu ",
		"Yi ",
		"Li ",
		"Shen ",
		"Xiang ",
		"Fu ",
		"Jing ",
		"Jing ",
		"Yu ",
		"[?] ",
		"Hagi ",
		"[?] ",
		"Zhu ",
		"[?] ",
		"[?] ",
		"Yi ",
		"Du ",
		"[?] ",
		"[?] ",
		"[?] ",
		"Fan ",
		"Si ",
		"Guan ",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xfb.js
var require_xfb = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"ff",
		"fi",
		"fl",
		"ffi",
		"ffl",
		"st",
		"st",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"mn",
		"me",
		"mi",
		"vn",
		"mkh",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"yi",
		"",
		"ay",
		"`",
		"",
		"d",
		"h",
		"k",
		"l",
		"m",
		"m",
		"t",
		"+",
		"sh",
		"s",
		"sh",
		"s",
		"a",
		"a",
		"",
		"b",
		"g",
		"d",
		"h",
		"v",
		"z",
		"[?]",
		"t",
		"y",
		"k",
		"k",
		"l",
		"[?]",
		"l",
		"[?]",
		"n",
		"n",
		"[?]",
		"p",
		"p",
		"[?]",
		"ts",
		"ts",
		"r",
		"sh",
		"t",
		"vo",
		"b",
		"k",
		"p",
		"l",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		""
	];
}));
//#endregion
//#region node_modules/unidecode/data/xfc.js
var require_xfc = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		""
	];
}));
//#endregion
//#region node_modules/unidecode/data/xfd.js
var require_xfd = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"{Salla}",
		"{Qala}",
		"Allah",
		"Akbar",
		"Mohammed",
		"SL`M",
		"Rasul",
		"{Alayhi}",
		"{WaSallam}",
		"{Salla}",
		"{Salla Llahu Alayhi WaSallam}",
		"{Jalla Jalalahu}",
		"Rial ",
		"{Bismillah Ar-Rahman Ar-Rahimi}",
		"[?]",
		"[?]"
	];
}));
//#endregion
//#region node_modules/unidecode/data/xfe.js
var require_xfe = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"~",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"..",
		"--",
		"-",
		"_",
		"_",
		"(",
		") ",
		"\\{",
		"\\} ",
		"[",
		"] ",
		"[(",
		")] ",
		"<<",
		">> ",
		"<",
		"> ",
		"[",
		"] ",
		"\\{",
		"\\}",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		",",
		",",
		".",
		"",
		";",
		":",
		"?",
		"!",
		"-",
		"(",
		")",
		"\\{",
		"\\}",
		"\\{",
		"\\}",
		"#",
		"&",
		"*",
		"+",
		"-",
		"<",
		">",
		"=",
		"",
		"\\\\",
		"\\$",
		"%",
		"\\@",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"",
		"",
		"",
		"[?]",
		"",
		"[?]",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"",
		"[?]",
		"[?]",
		""
	];
}));
//#endregion
//#region node_modules/unidecode/data/xff.js
var require_xff = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		"[?]",
		"!",
		"\"",
		"#",
		"\\$",
		"%",
		"&",
		"'",
		"(",
		")",
		"*",
		"+",
		",",
		"-",
		".",
		"/",
		"0",
		"1",
		"2",
		"3",
		"4",
		"5",
		"6",
		"7",
		"8",
		"9",
		":",
		";",
		"<",
		"=",
		">",
		"?",
		"\\@",
		"A",
		"B",
		"C",
		"D",
		"E",
		"F",
		"G",
		"H",
		"I",
		"J",
		"K",
		"L",
		"M",
		"N",
		"O",
		"P",
		"Q",
		"R",
		"S",
		"T",
		"U",
		"V",
		"W",
		"X",
		"Y",
		"Z",
		"[",
		"\\\\",
		"]",
		"^",
		"_",
		"`",
		"a",
		"b",
		"c",
		"d",
		"e",
		"f",
		"g",
		"h",
		"i",
		"j",
		"k",
		"l",
		"m",
		"n",
		"o",
		"p",
		"q",
		"r",
		"s",
		"t",
		"u",
		"v",
		"w",
		"x",
		"y",
		"z",
		"\\{",
		"|",
		"\\}",
		"~",
		"[?]",
		"[?]",
		".",
		"[",
		"]",
		",",
		"*",
		"wo",
		"a",
		"i",
		"u",
		"e",
		"o",
		"ya",
		"yu",
		"yo",
		"tu",
		"+",
		"a",
		"i",
		"u",
		"e",
		"o",
		"ka",
		"ki",
		"ku",
		"ke",
		"ko",
		"sa",
		"si",
		"su",
		"se",
		"so",
		"ta",
		"ti",
		"tu",
		"te",
		"to",
		"na",
		"ni",
		"nu",
		"ne",
		"no",
		"ha",
		"hi",
		"hu",
		"he",
		"ho",
		"ma",
		"mi",
		"mu",
		"me",
		"mo",
		"ya",
		"yu",
		"yo",
		"ra",
		"ri",
		"ru",
		"re",
		"ro",
		"wa",
		"n",
		":",
		";",
		"",
		"g",
		"gg",
		"gs",
		"n",
		"nj",
		"nh",
		"d",
		"dd",
		"r",
		"lg",
		"lm",
		"lb",
		"ls",
		"lt",
		"lp",
		"rh",
		"m",
		"b",
		"bb",
		"bs",
		"s",
		"ss",
		"",
		"j",
		"jj",
		"c",
		"k",
		"t",
		"p",
		"h",
		"[?]",
		"[?]",
		"[?]",
		"a",
		"ae",
		"ya",
		"yae",
		"eo",
		"e",
		"[?]",
		"[?]",
		"yeo",
		"ye",
		"o",
		"wa",
		"wae",
		"oe",
		"[?]",
		"[?]",
		"yo",
		"u",
		"weo",
		"we",
		"wi",
		"yu",
		"[?]",
		"[?]",
		"eu",
		"yi",
		"i",
		"[?]",
		"[?]",
		"[?]",
		"/C",
		"PS",
		"!",
		"-",
		"|",
		"Y=",
		"W=",
		"[?]",
		"|",
		"-",
		"|",
		"-",
		"|",
		"#",
		"O",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"[?]",
		"\\{",
		"|",
		"\\}",
		"",
		"",
		"",
		""
	];
}));
//#endregion
//#region node_modules/unidecode/unidecode.js
/**
* Unidecode takes UTF-8 data and tries to represent it in US-ASCII characters (i.e., the universally displayable characters between 0x00 and 0x7F).
* The representation is almost always an attempt at transliteration -- i.e., conveying, in Roman letters, the pronunciation expressed by the text in
* some other writing system.
*
* The tables used (in data) are converted from the tables provided in the perl library Text::Unidecode (http://search.cpan.org/dist/Text-Unidecode/lib/Text/Unidecode.pm)
* and are distributed under the perl license
*
* @author Francois-Guillaume Ribreau
*
* Based on the port of unidecode for php
*/
var require_unidecode = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var tr = {};
	var utf8_rx = /(?![\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})./g;
	module.exports = function(str, sub) {
		return str.replace(utf8_rx, function(match) {
			return unidecode_internal_replace(match, sub);
		});
	};
	function unidecode_internal_replace(match, sub) {
		if (sub === null || sub === void 0) sub = "";
		var utf16 = utf8_to_utf16(match);
		if (utf16 > 65535) return sub;
		else {
			var h = utf16 >> 8;
			var l = utf16 & 255;
			if (h > 24 && h < 30) return sub;
			if (h > 215 && h < 249) return sub;
			if (!tr[h]) switch (dec2hex(h)) {
				case "00":
					tr[h] = require_x00();
					break;
				case "01":
					tr[h] = require_x01();
					break;
				case "02":
					tr[h] = require_x02();
					break;
				case "03":
					tr[h] = require_x03();
					break;
				case "04":
					tr[h] = require_x04();
					break;
				case "05":
					tr[h] = require_x05();
					break;
				case "06":
					tr[h] = require_x06();
					break;
				case "07":
					tr[h] = require_x07();
					break;
				case "09":
					tr[h] = require_x09();
					break;
				case "0a":
					tr[h] = require_x0a();
					break;
				case "0b":
					tr[h] = require_x0b();
					break;
				case "0c":
					tr[h] = require_x0c();
					break;
				case "0d":
					tr[h] = require_x0d();
					break;
				case "0e":
					tr[h] = require_x0e();
					break;
				case "0f":
					tr[h] = require_x0f();
					break;
				case "10":
					tr[h] = require_x10();
					break;
				case "11":
					tr[h] = require_x11();
					break;
				case "12":
					tr[h] = require_x12();
					break;
				case "13":
					tr[h] = require_x13();
					break;
				case "14":
					tr[h] = require_x14();
					break;
				case "15":
					tr[h] = require_x15();
					break;
				case "16":
					tr[h] = require_x16();
					break;
				case "17":
					tr[h] = require_x17();
					break;
				case "18":
					tr[h] = require_x18();
					break;
				case "19":
					tr[h] = require_x19();
					break;
				case "1a":
					tr[h] = require_x1a();
					break;
				case "1b":
					tr[h] = require_x1b();
					break;
				case "1c":
					tr[h] = require_x1c();
					break;
				case "1d":
					tr[h] = require_x1d();
					break;
				case "1e":
					tr[h] = require_x1e();
					break;
				case "1f":
					tr[h] = require_x1f();
					break;
				case "20":
					tr[h] = require_x20();
					break;
				case "21":
					tr[h] = require_x21();
					break;
				case "22":
					tr[h] = require_x22();
					break;
				case "23":
					tr[h] = require_x23();
					break;
				case "24":
					tr[h] = require_x24();
					break;
				case "25":
					tr[h] = require_x25();
					break;
				case "26":
					tr[h] = require_x26();
					break;
				case "27":
					tr[h] = require_x27();
					break;
				case "28":
					tr[h] = require_x28();
					break;
				case "2e":
					tr[h] = require_x2e();
					break;
				case "2f":
					tr[h] = require_x2f();
					break;
				case "30":
					tr[h] = require_x30();
					break;
				case "31":
					tr[h] = require_x31();
					break;
				case "32":
					tr[h] = require_x32();
					break;
				case "33":
					tr[h] = require_x33();
					break;
				case "4d":
					tr[h] = require_x4d();
					break;
				case "4e":
					tr[h] = require_x4e();
					break;
				case "4f":
					tr[h] = require_x4f();
					break;
				case "50":
					tr[h] = require_x50();
					break;
				case "51":
					tr[h] = require_x51();
					break;
				case "52":
					tr[h] = require_x52();
					break;
				case "53":
					tr[h] = require_x53();
					break;
				case "54":
					tr[h] = require_x54();
					break;
				case "55":
					tr[h] = require_x55();
					break;
				case "56":
					tr[h] = require_x56();
					break;
				case "57":
					tr[h] = require_x57();
					break;
				case "58":
					tr[h] = require_x58();
					break;
				case "59":
					tr[h] = require_x59();
					break;
				case "5a":
					tr[h] = require_x5a();
					break;
				case "5b":
					tr[h] = require_x5b();
					break;
				case "5c":
					tr[h] = require_x5c();
					break;
				case "5d":
					tr[h] = require_x5d();
					break;
				case "5e":
					tr[h] = require_x5e();
					break;
				case "5f":
					tr[h] = require_x5f();
					break;
				case "60":
					tr[h] = require_x60();
					break;
				case "61":
					tr[h] = require_x61();
					break;
				case "62":
					tr[h] = require_x62();
					break;
				case "63":
					tr[h] = require_x63();
					break;
				case "64":
					tr[h] = require_x64();
					break;
				case "65":
					tr[h] = require_x65();
					break;
				case "66":
					tr[h] = require_x66();
					break;
				case "67":
					tr[h] = require_x67();
					break;
				case "68":
					tr[h] = require_x68();
					break;
				case "69":
					tr[h] = require_x69();
					break;
				case "6a":
					tr[h] = require_x6a();
					break;
				case "6b":
					tr[h] = require_x6b();
					break;
				case "6c":
					tr[h] = require_x6c();
					break;
				case "6d":
					tr[h] = require_x6d();
					break;
				case "6e":
					tr[h] = require_x6e();
					break;
				case "6f":
					tr[h] = require_x6f();
					break;
				case "70":
					tr[h] = require_x70();
					break;
				case "71":
					tr[h] = require_x71();
					break;
				case "72":
					tr[h] = require_x72();
					break;
				case "73":
					tr[h] = require_x73();
					break;
				case "74":
					tr[h] = require_x74();
					break;
				case "75":
					tr[h] = require_x75();
					break;
				case "76":
					tr[h] = require_x76();
					break;
				case "77":
					tr[h] = require_x77();
					break;
				case "78":
					tr[h] = require_x78();
					break;
				case "79":
					tr[h] = require_x79();
					break;
				case "7a":
					tr[h] = require_x7a();
					break;
				case "7b":
					tr[h] = require_x7b();
					break;
				case "7c":
					tr[h] = require_x7c();
					break;
				case "7d":
					tr[h] = require_x7d();
					break;
				case "7e":
					tr[h] = require_x7e();
					break;
				case "7f":
					tr[h] = require_x7f();
					break;
				case "80":
					tr[h] = require_x80();
					break;
				case "81":
					tr[h] = require_x81();
					break;
				case "82":
					tr[h] = require_x82();
					break;
				case "83":
					tr[h] = require_x83();
					break;
				case "84":
					tr[h] = require_x84();
					break;
				case "85":
					tr[h] = require_x85();
					break;
				case "86":
					tr[h] = require_x86();
					break;
				case "87":
					tr[h] = require_x87();
					break;
				case "88":
					tr[h] = require_x88();
					break;
				case "89":
					tr[h] = require_x89();
					break;
				case "8a":
					tr[h] = require_x8a();
					break;
				case "8b":
					tr[h] = require_x8b();
					break;
				case "8c":
					tr[h] = require_x8c();
					break;
				case "8d":
					tr[h] = require_x8d();
					break;
				case "8e":
					tr[h] = require_x8e();
					break;
				case "8f":
					tr[h] = require_x8f();
					break;
				case "90":
					tr[h] = require_x90();
					break;
				case "91":
					tr[h] = require_x91();
					break;
				case "92":
					tr[h] = require_x92();
					break;
				case "93":
					tr[h] = require_x93();
					break;
				case "94":
					tr[h] = require_x94();
					break;
				case "95":
					tr[h] = require_x95();
					break;
				case "96":
					tr[h] = require_x96();
					break;
				case "97":
					tr[h] = require_x97();
					break;
				case "98":
					tr[h] = require_x98();
					break;
				case "99":
					tr[h] = require_x99();
					break;
				case "9a":
					tr[h] = require_x9a();
					break;
				case "9b":
					tr[h] = require_x9b();
					break;
				case "9c":
					tr[h] = require_x9c();
					break;
				case "9d":
					tr[h] = require_x9d();
					break;
				case "9e":
					tr[h] = require_x9e();
					break;
				case "9f":
					tr[h] = require_x9f();
					break;
				case "a0":
					tr[h] = require_xa0();
					break;
				case "a1":
					tr[h] = require_xa1();
					break;
				case "a2":
					tr[h] = require_xa2();
					break;
				case "a3":
					tr[h] = require_xa3();
					break;
				case "a4":
					tr[h] = require_xa4();
					break;
				case "ac":
					tr[h] = require_xac();
					break;
				case "ad":
					tr[h] = require_xad();
					break;
				case "ae":
					tr[h] = require_xae();
					break;
				case "af":
					tr[h] = require_xaf();
					break;
				case "b0":
					tr[h] = require_xb0();
					break;
				case "b1":
					tr[h] = require_xb1();
					break;
				case "b2":
					tr[h] = require_xb2();
					break;
				case "b3":
					tr[h] = require_xb3();
					break;
				case "b4":
					tr[h] = require_xb4();
					break;
				case "b5":
					tr[h] = require_xb5();
					break;
				case "b6":
					tr[h] = require_xb6();
					break;
				case "b7":
					tr[h] = require_xb7();
					break;
				case "b8":
					tr[h] = require_xb8();
					break;
				case "b9":
					tr[h] = require_xb9();
					break;
				case "ba":
					tr[h] = require_xba();
					break;
				case "bb":
					tr[h] = require_xbb();
					break;
				case "bc":
					tr[h] = require_xbc();
					break;
				case "bd":
					tr[h] = require_xbd();
					break;
				case "be":
					tr[h] = require_xbe();
					break;
				case "bf":
					tr[h] = require_xbf();
					break;
				case "c0":
					tr[h] = require_xc0();
					break;
				case "c1":
					tr[h] = require_xc1();
					break;
				case "c2":
					tr[h] = require_xc2();
					break;
				case "c3":
					tr[h] = require_xc3();
					break;
				case "c4":
					tr[h] = require_xc4();
					break;
				case "c5":
					tr[h] = require_xc5();
					break;
				case "c6":
					tr[h] = require_xc6();
					break;
				case "c7":
					tr[h] = require_xc7();
					break;
				case "c8":
					tr[h] = require_xc8();
					break;
				case "c9":
					tr[h] = require_xc9();
					break;
				case "ca":
					tr[h] = require_xca();
					break;
				case "cb":
					tr[h] = require_xcb();
					break;
				case "cc":
					tr[h] = require_xcc();
					break;
				case "cd":
					tr[h] = require_xcd();
					break;
				case "ce":
					tr[h] = require_xce();
					break;
				case "cf":
					tr[h] = require_xcf();
					break;
				case "d0":
					tr[h] = require_xd0();
					break;
				case "d1":
					tr[h] = require_xd1();
					break;
				case "d2":
					tr[h] = require_xd2();
					break;
				case "d3":
					tr[h] = require_xd3();
					break;
				case "d4":
					tr[h] = require_xd4();
					break;
				case "d5":
					tr[h] = require_xd5();
					break;
				case "d6":
					tr[h] = require_xd6();
					break;
				case "d7":
					tr[h] = require_xd7();
					break;
				case "f9":
					tr[h] = require_xf9();
					break;
				case "fa":
					tr[h] = require_xfa();
					break;
				case "fb":
					tr[h] = require_xfb();
					break;
				case "fc":
					tr[h] = require_xfc();
					break;
				case "fd":
					tr[h] = require_xfd();
					break;
				case "fe":
					tr[h] = require_xfe();
					break;
				case "ff":
					tr[h] = require_xff();
					break;
				default: return sub;
			}
			if (tr[h][l]) return tr[h][l];
			else return sub;
		}
	}
	function dec2hex(i) {
		return (i + 256).toString(16).substr(-2);
	}
	function utf8_to_utf16(raw) {
		var b1, b2, b3, b4, x, y, z;
		while (Array.isArray(raw)) raw = raw[0];
		switch (raw.length) {
			case 1: return ord(raw);
			case 2:
				b1 = ord(raw.substr(0, 1));
				b2 = ord(raw.substr(1, 1));
				x = (b1 & 3) << 6 | b2 & 63;
				y = (b1 & 28) >> 2;
				return y << 8 | x;
			case 3:
				b1 = ord(raw.substr(0, 1));
				b2 = ord(raw.substr(1, 1));
				b3 = ord(raw.substr(2, 1));
				x = (b2 & 3) << 6 | b3 & 63;
				y = (b1 & 15) << 4 | (b2 & 60) >> 2;
				return y << 8 | x;
			default:
				b1 = ord(raw.substr(0, 1));
				b2 = ord(raw.substr(1, 1));
				b3 = ord(raw.substr(2, 1));
				b4 = ord(raw.substr(3, 1));
				x = (b3 & 3) << 6 | b4 & 63;
				y = (b2 & 15) << 4 | (b3 & 60) >> 2;
				z = (b1 & 7) << 5 | (b2 & 48) >> 4;
				return z << 16 | y << 8 | x;
		}
	}
	function ord(string) {
		var str = string + "", code = str.charCodeAt(0);
		if (55296 <= code && code <= 56319) {
			var hi = code;
			if (str.length === 1) return code;
			var low = str.charCodeAt(1);
			return (hi - 55296) * 1024 + (low - 56320) + 65536;
		}
		if (56320 <= code && code <= 57343) return code;
		return code;
	}
}));
//#endregion
//#region src/util/node.ts
var fs$6, path$5, os$5, crypto$1, styles$1, stripAnsi, debounce, readline, child_process$1, glob, minimatch, which, semver, vm, net$2, fastDiff, unidecode;
var init_node = __esmMin((() => {
	fs$6 = require("fs");
	path$5 = require("path");
	os$5 = require("os");
	crypto$1 = require("crypto");
	styles$1 = (init_ansi_styles(), __toCommonJS(ansi_styles_exports)).default;
	stripAnsi = (init_strip_ansi(), __toCommonJS(strip_ansi_exports)).default;
	debounce = (init_debounce(), __toCommonJS(debounce_exports)).default;
	readline = require("readline");
	child_process$1 = require("child_process");
	glob = require_index_min$2();
	({minimatch} = require_commonjs());
	which = require_lib$2();
	semver = require_semver();
	vm = require("vm");
	net$2 = require("net");
	fastDiff = require_diff();
	unidecode = require_unidecode();
}));
//#endregion
//#region src/logger/log.ts
function textToLogLevel(level) {
	switch (level.toLowerCase()) {
		case "trace": return 0;
		case "debug": return 1;
		case "info": return 2;
		case "error": return 4;
		case "warn":
		case "warning": return 3;
		case "off": return 5;
		default: return 2;
	}
}
function format$1(args, depth = 2, color = false, hidden = false) {
	let result = "";
	for (let i = 0; i < args.length; i++) {
		let a = args[i];
		if (typeof a === "object") try {
			a = (0, util.inspect)(a, hidden, depth, color);
		} catch (e) {}
		if (color && (typeof a === "boolean" || typeof a === "number")) a = `${yellowOpen}${a}${yellowClose}`;
		result += (i > 0 ? " " : "") + a;
	}
	return result;
}
function stringifyLogLevel(level) {
	switch (level) {
		case 1: return "DEBUG";
		case 4: return "ERROR";
		case 2: return "INFO";
		case 0: return "TRACE";
		case 3: return "WARN";
	}
	return "";
}
function getTimestamp(date) {
	return `${toTwoDigits$1(date.getHours())}:${toTwoDigits$1(date.getMinutes())}:${toTwoDigits$1(date.getSeconds())}.${toThreeDigits$1(date.getMilliseconds())}`;
}
var MAX_FILE_SIZE, yellowOpen, yellowClose, toTwoDigits$1, toThreeDigits$1, AbstractLogger, FileLogger;
var init_log = __esmMin((() => {
	init_node();
	MAX_FILE_SIZE = 5 * 1024 * 1024;
	yellowOpen = "\x1B[33m";
	yellowClose = "\x1B[39m";
	toTwoDigits$1 = (v) => v < 10 ? `0${v}` : v.toString();
	toThreeDigits$1 = (v) => v < 10 ? `00${v}` : v < 100 ? `0${v}` : v.toString();
	AbstractLogger = class {
		level = 2;
		setLevel(level) {
			if (this.level !== level) this.level = level;
		}
		getLevel() {
			return this.level;
		}
	};
	FileLogger = class extends AbstractLogger {
		fsPath;
		promise;
		backupIndex = 1;
		config;
		useConsole = false;
		loggers = /* @__PURE__ */ new Map();
		constructor(fsPath, level, config) {
			super();
			this.fsPath = fsPath;
			this.config = Object.assign({
				userFormatters: true,
				color: false,
				depth: 2,
				showHidden: false
			}, config);
			this.setLevel(level);
			this.promise = this.initialize();
		}
		switchConsole() {
			this.useConsole = !this.useConsole;
		}
		format(args) {
			let { color, showHidden, depth } = this.config;
			return format$1(args, depth, color, showHidden);
		}
		createLogger(scope) {
			let logger = this.loggers.has(scope) ? this.loggers.get(scope) : {
				category: scope,
				mark: () => {},
				getLevel: () => {
					return this.getLevel();
				},
				trace: (...args) => {
					if (this.level <= 0) this._log(0, scope, args, this.getCurrentTimestamp());
				},
				debug: (...args) => {
					if (this.level <= 1) this._log(1, scope, args, this.getCurrentTimestamp());
				},
				log: (...args) => {
					if (this.level <= 2) this._log(2, scope, args, this.getCurrentTimestamp());
				},
				info: (...args) => {
					if (this.level <= 2) this._log(2, scope, args, this.getCurrentTimestamp());
				},
				warn: (...args) => {
					if (this.level <= 3) this._log(3, scope, args, this.getCurrentTimestamp());
				},
				error: (...args) => {
					if (this.level <= 4) this._log(4, scope, args, this.getCurrentTimestamp());
				},
				fatal: (...args) => {
					if (this.level <= 4) this._log(4, scope, args, this.getCurrentTimestamp());
				},
				/**
				* An operation to flush the contents. Can be synchronous.
				*/
				flush: () => {
					return this.promise;
				}
			};
			this.loggers.set(scope, logger);
			return logger;
		}
		async initialize() {
			return Promise.resolve();
		}
		shouldBackup(size) {
			return size > MAX_FILE_SIZE;
		}
		_log(level, scope, args, time) {
			if (this.useConsole) console[level === 4 ? "error" : "log"](`${stringifyLogLevel(level)} [${scope}]`, format$1(args, null, true));
			else {
				let message = this.format(args);
				this.promise = this.promise.then(() => {
					let fn = async () => {
						let text;
						if (this.config.userFormatters !== false) text = `${[
							time,
							stringifyLogLevel(level),
							`(pid:${process.pid})`,
							`[${scope}]`
						].join(" ")} - ${message}\n`;
						else text = message;
						await fs$6.promises.appendFile(this.fsPath, text, {
							encoding: "utf8",
							flag: "a+"
						});
						let stat = await fs$6.promises.stat(this.fsPath);
						if (this.shouldBackup(stat.size)) {
							let newFile = this.getBackupResource();
							await fs$6.promises.rename(this.fsPath, newFile);
						}
					};
					return fn();
				}).catch((err) => {
					if (!global.REVISION) console.error(err);
				});
			}
		}
		getCurrentTimestamp() {
			const currentTime = /* @__PURE__ */ new Date();
			return `${currentTime.getFullYear()}-${toTwoDigits$1(currentTime.getMonth() + 1)}-${toTwoDigits$1(currentTime.getDate())}T${getTimestamp(currentTime)}`;
		}
		getBackupResource() {
			this.backupIndex = this.backupIndex > 5 ? 1 : this.backupIndex;
			return path$5.join(path$5.dirname(this.fsPath), `${path$5.basename(this.fsPath)}_${this.backupIndex++}`);
		}
	};
}));
//#endregion
//#region src/util/index.ts
function sha256(data) {
	return crypto$1.createHash("sha256").update(data).digest("hex");
}
function getConditionValue(value, testValue) {
	return value;
}
function defaultValue(val, defaultValue) {
	return val == null ? defaultValue : val;
}
function wait(ms) {
	if (ms <= 0) return Promise.resolve(void 0);
	return new Promise((resolve) => {
		setTimeout(() => {
			resolve(void 0);
		}, ms).unref();
	});
}
function waitWithToken(ms, token) {
	if (token.isCancellationRequested || !ms) return Promise.resolve(true);
	return new Promise((resolve) => {
		let disposable = token.onCancellationRequested(() => {
			disposable.dispose();
			clearTimeout(timer);
			resolve(true);
		});
		let timer = setTimeout(() => {
			disposable.dispose();
			resolve(false);
		}, ms);
		timer.unref();
	});
}
function waitNextTick() {
	return new Promise((resolve) => {
		process.nextTick(() => {
			resolve(void 0);
		});
	});
}
function waitImmediate$1() {
	return new Promise((resolve) => {
		setImmediate(() => {
			resolve(void 0);
		});
	});
}
function concurrent(arr, fn, limit = 3) {
	if (arr.length == 0) return Promise.resolve();
	let finished = 0;
	let total = arr.length;
	let remain = arr.slice();
	return new Promise((resolve) => {
		let run = (val) => {
			let cb = () => {
				finished = finished + 1;
				if (finished == total) resolve();
				else if (remain.length) run(remain.shift());
			};
			fn(val).then(cb, cb);
		};
		for (let i = 0; i < Math.min(limit, remain.length); i++) run(remain.shift());
	});
}
function disposeAll(disposables) {
	while (disposables.length) disposables.pop()?.dispose();
}
var pariedCharacters;
var init_util$7 = __esmMin((() => {
	init_node();
	pariedCharacters = new Map([
		["<", ">"],
		[">", "<"],
		["{", "}"],
		["[", "]"],
		["(", ")"]
	]);
}));
//#endregion
//#region src/logger/index.ts
var logger_exports = /* @__PURE__ */ __exportAll({
	createLogger: () => createLogger$1,
	emptyFile: () => emptyFile,
	getLoggerFile: () => getLoggerFile,
	getTimestamp: () => getTimestamp,
	logger: () => logger$55,
	resolveLogFilepath: () => resolveLogFilepath
});
function resolveLogFilepath() {
	let file = process.env.NVIM_COC_LOG_FILE;
	if (file) return file;
	let dir = process.env.XDG_RUNTIME_DIR;
	if (dir) try {
		fs$6.accessSync(dir, fs$6.constants.R_OK | fs$6.constants.W_OK);
		return path$5.join(dir, `coc-nvim-${process.pid}.log`);
	} catch (err) {}
	let tmpdir = os$5.tmpdir();
	dir = path$5.join(tmpdir, `coc.nvim-${process.pid}`);
	fs$6.mkdirSync(dir, { recursive: true });
	return path$5.join(dir, `coc-nvim.log`);
}
function emptyFile(filepath) {
	if (fs$6.existsSync(filepath)) try {
		fs$6.writeFileSync(filepath, "", {
			encoding: "utf8",
			mode: 438
		});
	} catch (e) {}
}
function getLoggerFile() {
	return logfile;
}
function createLogger$1(category = "coc.nvim") {
	return logger$55.createLogger(category);
}
var logfile, level$1, logger$55;
var init_logger$2 = __esmMin((() => {
	init_log();
	init_node();
	init_util$7();
	logfile = resolveLogFilepath();
	emptyFile(logfile);
	level$1 = getConditionValue(process.env.NVIM_COC_LOG_LEVEL || "info", "off");
	logger$55 = new FileLogger(logfile, textToLogLevel(level$1), {
		color: !global.REVISION && process.platform !== "win32",
		userFormatters: true
	});
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/utils/prettyByte.mjs
function prettyByte(byte) {
	return `${byte < 0 ? "-" : ""}0x${Math.abs(byte).toString(16).padStart(2, "0")}`;
}
var init_prettyByte = __esmMin((() => {}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/ExtData.mjs
var ExtData;
var init_ExtData = __esmMin((() => {
	ExtData = class {
		type;
		data;
		constructor(type, data) {
			this.type = type;
			this.data = data;
		}
	};
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/DecodeError.mjs
var DecodeError;
var init_DecodeError = __esmMin((() => {
	DecodeError = class DecodeError extends Error {
		constructor(message) {
			super(message);
			const proto = Object.create(DecodeError.prototype);
			Object.setPrototypeOf(this, proto);
			Object.defineProperty(this, "name", {
				configurable: true,
				enumerable: false,
				value: DecodeError.name
			});
		}
	};
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/utils/int.mjs
function setUint64(view, offset, value) {
	const high = value / 4294967296;
	const low = value;
	view.setUint32(offset, high);
	view.setUint32(offset + 4, low);
}
function setInt64(view, offset, value) {
	const high = Math.floor(value / 4294967296);
	const low = value;
	view.setUint32(offset, high);
	view.setUint32(offset + 4, low);
}
function getInt64(view, offset) {
	const high = view.getInt32(offset);
	const low = view.getUint32(offset + 4);
	return high * 4294967296 + low;
}
function getUint64(view, offset) {
	const high = view.getUint32(offset);
	const low = view.getUint32(offset + 4);
	return high * 4294967296 + low;
}
var init_int = __esmMin((() => {}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/timestamp.mjs
function encodeTimeSpecToTimestamp({ sec, nsec }) {
	if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {
		const rv = new Uint8Array(4);
		new DataView(rv.buffer).setUint32(0, sec);
		return rv;
	} else {
		const secHigh = sec / 4294967296;
		const secLow = sec & 4294967295;
		const rv = new Uint8Array(8);
		const view = new DataView(rv.buffer);
		view.setUint32(0, nsec << 2 | secHigh & 3);
		view.setUint32(4, secLow);
		return rv;
	}
	else {
		const rv = new Uint8Array(12);
		const view = new DataView(rv.buffer);
		view.setUint32(0, nsec);
		setInt64(view, 4, sec);
		return rv;
	}
}
function encodeDateToTimeSpec(date) {
	const msec = date.getTime();
	const sec = Math.floor(msec / 1e3);
	const nsec = (msec - sec * 1e3) * 1e6;
	const nsecInSec = Math.floor(nsec / 1e9);
	return {
		sec: sec + nsecInSec,
		nsec: nsec - nsecInSec * 1e9
	};
}
function encodeTimestampExtension(object) {
	if (object instanceof Date) return encodeTimeSpecToTimestamp(encodeDateToTimeSpec(object));
	else return null;
}
function decodeTimestampToTimeSpec(data) {
	const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
	switch (data.byteLength) {
		case 4: return {
			sec: view.getUint32(0),
			nsec: 0
		};
		case 8: {
			const nsec30AndSecHigh2 = view.getUint32(0);
			const secLow32 = view.getUint32(4);
			return {
				sec: (nsec30AndSecHigh2 & 3) * 4294967296 + secLow32,
				nsec: nsec30AndSecHigh2 >>> 2
			};
		}
		case 12: return {
			sec: getInt64(view, 4),
			nsec: view.getUint32(0)
		};
		default: throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);
	}
}
function decodeTimestampExtension(data) {
	const timeSpec = decodeTimestampToTimeSpec(data);
	return /* @__PURE__ */ new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);
}
var TIMESTAMP32_MAX_SEC, TIMESTAMP64_MAX_SEC, timestampExtension;
var init_timestamp = __esmMin((() => {
	init_DecodeError();
	init_int();
	TIMESTAMP32_MAX_SEC = 4294967295;
	TIMESTAMP64_MAX_SEC = 17179869183;
	timestampExtension = {
		type: -1,
		encode: encodeTimestampExtension,
		decode: decodeTimestampExtension
	};
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/ExtensionCodec.mjs
var ExtensionCodec;
var init_ExtensionCodec = __esmMin((() => {
	init_ExtData();
	init_timestamp();
	ExtensionCodec = class ExtensionCodec {
		static defaultCodec = new ExtensionCodec();
		__brand;
		builtInEncoders = [];
		builtInDecoders = [];
		encoders = [];
		decoders = [];
		constructor() {
			this.register(timestampExtension);
		}
		register({ type, encode, decode }) {
			if (type >= 0) {
				this.encoders[type] = encode;
				this.decoders[type] = decode;
			} else {
				const index = -1 - type;
				this.builtInEncoders[index] = encode;
				this.builtInDecoders[index] = decode;
			}
		}
		tryToEncode(object, context) {
			for (let i = 0; i < this.builtInEncoders.length; i++) {
				const encodeExt = this.builtInEncoders[i];
				if (encodeExt != null) {
					const data = encodeExt(object, context);
					if (data != null) return new ExtData(-1 - i, data);
				}
			}
			for (let i = 0; i < this.encoders.length; i++) {
				const encodeExt = this.encoders[i];
				if (encodeExt != null) {
					const data = encodeExt(object, context);
					if (data != null) return new ExtData(i, data);
				}
			}
			if (object instanceof ExtData) return object;
			return null;
		}
		decode(data, type, context) {
			const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];
			if (decodeExt) return decodeExt(data, type, context);
			else return new ExtData(type, data);
		}
	};
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/utils/utf8.mjs
function utf8Count(str) {
	const strLength = str.length;
	let byteLength = 0;
	let pos = 0;
	while (pos < strLength) {
		let value = str.charCodeAt(pos++);
		if ((value & 4294967168) === 0) {
			byteLength++;
			continue;
		} else if ((value & 4294965248) === 0) byteLength += 2;
		else {
			if (value >= 55296 && value <= 56319) {
				if (pos < strLength) {
					const extra = str.charCodeAt(pos);
					if ((extra & 64512) === 56320) {
						++pos;
						value = ((value & 1023) << 10) + (extra & 1023) + 65536;
					}
				}
			}
			if ((value & 4294901760) === 0) byteLength += 3;
			else byteLength += 4;
		}
	}
	return byteLength;
}
function utf8EncodeJs(str, output, outputOffset) {
	const strLength = str.length;
	let offset = outputOffset;
	let pos = 0;
	while (pos < strLength) {
		let value = str.charCodeAt(pos++);
		if ((value & 4294967168) === 0) {
			output[offset++] = value;
			continue;
		} else if ((value & 4294965248) === 0) output[offset++] = value >> 6 & 31 | 192;
		else {
			if (value >= 55296 && value <= 56319) {
				if (pos < strLength) {
					const extra = str.charCodeAt(pos);
					if ((extra & 64512) === 56320) {
						++pos;
						value = ((value & 1023) << 10) + (extra & 1023) + 65536;
					}
				}
			}
			if ((value & 4294901760) === 0) {
				output[offset++] = value >> 12 & 15 | 224;
				output[offset++] = value >> 6 & 63 | 128;
			} else {
				output[offset++] = value >> 18 & 7 | 240;
				output[offset++] = value >> 12 & 63 | 128;
				output[offset++] = value >> 6 & 63 | 128;
			}
		}
		output[offset++] = value & 63 | 128;
	}
}
function utf8EncodeTE(str, output, outputOffset) {
	sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));
}
function utf8Encode(str, output, outputOffset) {
	if (str.length > TEXT_ENCODER_THRESHOLD) utf8EncodeTE(str, output, outputOffset);
	else utf8EncodeJs(str, output, outputOffset);
}
function utf8DecodeJs(bytes, inputOffset, byteLength) {
	let offset = inputOffset;
	const end = offset + byteLength;
	const units = [];
	let result = "";
	while (offset < end) {
		const byte1 = bytes[offset++];
		if ((byte1 & 128) === 0) units.push(byte1);
		else if ((byte1 & 224) === 192) {
			const byte2 = bytes[offset++] & 63;
			units.push((byte1 & 31) << 6 | byte2);
		} else if ((byte1 & 240) === 224) {
			const byte2 = bytes[offset++] & 63;
			const byte3 = bytes[offset++] & 63;
			units.push((byte1 & 31) << 12 | byte2 << 6 | byte3);
		} else if ((byte1 & 248) === 240) {
			const byte2 = bytes[offset++] & 63;
			const byte3 = bytes[offset++] & 63;
			const byte4 = bytes[offset++] & 63;
			let unit = (byte1 & 7) << 18 | byte2 << 12 | byte3 << 6 | byte4;
			if (unit > 65535) {
				unit -= 65536;
				units.push(unit >>> 10 & 1023 | 55296);
				unit = 56320 | unit & 1023;
			}
			units.push(unit);
		} else units.push(byte1);
		if (units.length >= CHUNK_SIZE) {
			result += String.fromCharCode(...units);
			units.length = 0;
		}
	}
	if (units.length > 0) result += String.fromCharCode(...units);
	return result;
}
function utf8DecodeTD(bytes, inputOffset, byteLength) {
	const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);
	return sharedTextDecoder.decode(stringBytes);
}
function utf8Decode(bytes, inputOffset, byteLength) {
	if (byteLength > TEXT_DECODER_THRESHOLD) return utf8DecodeTD(bytes, inputOffset, byteLength);
	else return utf8DecodeJs(bytes, inputOffset, byteLength);
}
var sharedTextEncoder, TEXT_ENCODER_THRESHOLD, CHUNK_SIZE, sharedTextDecoder, TEXT_DECODER_THRESHOLD;
var init_utf8 = __esmMin((() => {
	sharedTextEncoder = new TextEncoder();
	TEXT_ENCODER_THRESHOLD = 50;
	CHUNK_SIZE = 4096;
	sharedTextDecoder = new TextDecoder();
	TEXT_DECODER_THRESHOLD = 200;
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/utils/typedArrays.mjs
function isArrayBufferLike(buffer) {
	return buffer instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && buffer instanceof SharedArrayBuffer;
}
function ensureUint8Array(buffer) {
	if (buffer instanceof Uint8Array) return buffer;
	else if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
	else if (isArrayBufferLike(buffer)) return new Uint8Array(buffer);
	else return Uint8Array.from(buffer);
}
var init_typedArrays = __esmMin((() => {}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/CachedKeyDecoder.mjs
var DEFAULT_MAX_KEY_LENGTH, DEFAULT_MAX_LENGTH_PER_KEY, CachedKeyDecoder;
var init_CachedKeyDecoder = __esmMin((() => {
	init_utf8();
	DEFAULT_MAX_KEY_LENGTH = 16;
	DEFAULT_MAX_LENGTH_PER_KEY = 16;
	CachedKeyDecoder = class {
		hit = 0;
		miss = 0;
		caches;
		maxKeyLength;
		maxLengthPerKey;
		constructor(maxKeyLength = DEFAULT_MAX_KEY_LENGTH, maxLengthPerKey = DEFAULT_MAX_LENGTH_PER_KEY) {
			this.maxKeyLength = maxKeyLength;
			this.maxLengthPerKey = maxLengthPerKey;
			this.caches = [];
			for (let i = 0; i < this.maxKeyLength; i++) this.caches.push([]);
		}
		canBeCached(byteLength) {
			return byteLength > 0 && byteLength <= this.maxKeyLength;
		}
		find(bytes, inputOffset, byteLength) {
			const records = this.caches[byteLength - 1];
			FIND_CHUNK: for (const record of records) {
				const recordBytes = record.bytes;
				for (let j = 0; j < byteLength; j++) if (recordBytes[j] !== bytes[inputOffset + j]) continue FIND_CHUNK;
				return record.str;
			}
			return null;
		}
		store(bytes, value) {
			const records = this.caches[bytes.length - 1];
			const record = {
				bytes,
				str: value
			};
			if (records.length >= this.maxLengthPerKey) records[Math.random() * records.length | 0] = record;
			else records.push(record);
		}
		decode(bytes, inputOffset, byteLength) {
			const cachedValue = this.find(bytes, inputOffset, byteLength);
			if (cachedValue != null) {
				this.hit++;
				return cachedValue;
			}
			this.miss++;
			const str = utf8DecodeJs(bytes, inputOffset, byteLength);
			const slicedCopyOfBytes = Uint8Array.prototype.slice.call(bytes, inputOffset, inputOffset + byteLength);
			this.store(slicedCopyOfBytes, str);
			return str;
		}
	};
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/Decoder.mjs
var STATE_ARRAY, STATE_MAP_KEY, STATE_MAP_VALUE, mapKeyConverter, StackPool, HEAD_BYTE_REQUIRED, EMPTY_VIEW, EMPTY_BYTES, MORE_DATA, sharedCachedKeyDecoder, Decoder;
var init_Decoder = __esmMin((() => {
	init_prettyByte();
	init_ExtensionCodec();
	init_int();
	init_utf8();
	init_typedArrays();
	init_CachedKeyDecoder();
	init_DecodeError();
	STATE_ARRAY = "array";
	STATE_MAP_KEY = "map_key";
	STATE_MAP_VALUE = "map_value";
	mapKeyConverter = (key) => {
		if (typeof key === "string" || typeof key === "number") return key;
		throw new DecodeError("The type of key must be string or number but " + typeof key);
	};
	StackPool = class {
		stack = [];
		stackHeadPosition = -1;
		get length() {
			return this.stackHeadPosition + 1;
		}
		top() {
			return this.stack[this.stackHeadPosition];
		}
		pushArrayState(size) {
			const state = this.getUninitializedStateFromPool();
			state.type = STATE_ARRAY;
			state.position = 0;
			state.size = size;
			state.array = new Array(size);
		}
		pushMapState(size) {
			const state = this.getUninitializedStateFromPool();
			state.type = STATE_MAP_KEY;
			state.readCount = 0;
			state.size = size;
			state.map = {};
		}
		getUninitializedStateFromPool() {
			this.stackHeadPosition++;
			if (this.stackHeadPosition === this.stack.length) this.stack.push({
				type: void 0,
				size: 0,
				array: void 0,
				position: 0,
				readCount: 0,
				map: void 0,
				key: null
			});
			return this.stack[this.stackHeadPosition];
		}
		release(state) {
			if (this.stack[this.stackHeadPosition] !== state) throw new Error("Invalid stack state. Released state is not on top of the stack.");
			if (state.type === STATE_ARRAY) {
				const partialState = state;
				partialState.size = 0;
				partialState.array = void 0;
				partialState.position = 0;
				partialState.type = void 0;
			}
			if (state.type === STATE_MAP_KEY || state.type === STATE_MAP_VALUE) {
				const partialState = state;
				partialState.size = 0;
				partialState.map = void 0;
				partialState.readCount = 0;
				partialState.type = void 0;
			}
			this.stackHeadPosition--;
		}
		reset() {
			this.stack.length = 0;
			this.stackHeadPosition = -1;
		}
	};
	HEAD_BYTE_REQUIRED = -1;
	EMPTY_VIEW = /* @__PURE__ */ new DataView(/* @__PURE__ */ new ArrayBuffer(0));
	EMPTY_BYTES = new Uint8Array(EMPTY_VIEW.buffer);
	try {
		EMPTY_VIEW.getInt8(0);
	} catch (e) {
		if (!(e instanceof RangeError)) throw new Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access");
	}
	MORE_DATA = /* @__PURE__ */ new RangeError("Insufficient data");
	sharedCachedKeyDecoder = new CachedKeyDecoder();
	Decoder = class Decoder {
		extensionCodec;
		context;
		useBigInt64;
		rawStrings;
		maxStrLength;
		maxBinLength;
		maxArrayLength;
		maxMapLength;
		maxExtLength;
		keyDecoder;
		mapKeyConverter;
		totalPos = 0;
		pos = 0;
		view = EMPTY_VIEW;
		bytes = EMPTY_BYTES;
		headByte = HEAD_BYTE_REQUIRED;
		stack = new StackPool();
		entered = false;
		constructor(options) {
			this.extensionCodec = options?.extensionCodec ?? ExtensionCodec.defaultCodec;
			this.context = options?.context;
			this.useBigInt64 = options?.useBigInt64 ?? false;
			this.rawStrings = options?.rawStrings ?? false;
			this.maxStrLength = options?.maxStrLength ?? 4294967295;
			this.maxBinLength = options?.maxBinLength ?? 4294967295;
			this.maxArrayLength = options?.maxArrayLength ?? 4294967295;
			this.maxMapLength = options?.maxMapLength ?? 4294967295;
			this.maxExtLength = options?.maxExtLength ?? 4294967295;
			this.keyDecoder = options?.keyDecoder !== void 0 ? options.keyDecoder : sharedCachedKeyDecoder;
			this.mapKeyConverter = options?.mapKeyConverter ?? mapKeyConverter;
		}
		clone() {
			return new Decoder({
				extensionCodec: this.extensionCodec,
				context: this.context,
				useBigInt64: this.useBigInt64,
				rawStrings: this.rawStrings,
				maxStrLength: this.maxStrLength,
				maxBinLength: this.maxBinLength,
				maxArrayLength: this.maxArrayLength,
				maxMapLength: this.maxMapLength,
				maxExtLength: this.maxExtLength,
				keyDecoder: this.keyDecoder
			});
		}
		reinitializeState() {
			this.totalPos = 0;
			this.headByte = HEAD_BYTE_REQUIRED;
			this.stack.reset();
		}
		setBuffer(buffer) {
			const bytes = ensureUint8Array(buffer);
			this.bytes = bytes;
			this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
			this.pos = 0;
		}
		appendBuffer(buffer) {
			if (this.headByte === HEAD_BYTE_REQUIRED && !this.hasRemaining(1)) this.setBuffer(buffer);
			else {
				const remainingData = this.bytes.subarray(this.pos);
				const newData = ensureUint8Array(buffer);
				const newBuffer = new Uint8Array(remainingData.length + newData.length);
				newBuffer.set(remainingData);
				newBuffer.set(newData, remainingData.length);
				this.setBuffer(newBuffer);
			}
		}
		hasRemaining(size) {
			return this.view.byteLength - this.pos >= size;
		}
		createExtraByteError(posToShow) {
			const { view, pos } = this;
			return /* @__PURE__ */ new RangeError(`Extra ${view.byteLength - pos} of ${view.byteLength} byte(s) found at buffer[${posToShow}]`);
		}
		/**
		* @throws {@link DecodeError}
		* @throws {@link RangeError}
		*/
		decode(buffer) {
			if (this.entered) return this.clone().decode(buffer);
			try {
				this.entered = true;
				this.reinitializeState();
				this.setBuffer(buffer);
				const object = this.doDecodeSync();
				if (this.hasRemaining(1)) throw this.createExtraByteError(this.pos);
				return object;
			} finally {
				this.entered = false;
			}
		}
		*decodeMulti(buffer) {
			if (this.entered) {
				yield* this.clone().decodeMulti(buffer);
				return;
			}
			try {
				this.entered = true;
				this.reinitializeState();
				this.setBuffer(buffer);
				while (this.hasRemaining(1)) yield this.doDecodeSync();
			} finally {
				this.entered = false;
			}
		}
		async decodeAsync(stream) {
			if (this.entered) return this.clone().decodeAsync(stream);
			try {
				this.entered = true;
				let decoded = false;
				let object;
				for await (const buffer of stream) {
					if (decoded) {
						this.entered = false;
						throw this.createExtraByteError(this.totalPos);
					}
					this.appendBuffer(buffer);
					try {
						object = this.doDecodeSync();
						decoded = true;
					} catch (e) {
						if (!(e instanceof RangeError)) throw e;
					}
					this.totalPos += this.pos;
				}
				if (decoded) {
					if (this.hasRemaining(1)) throw this.createExtraByteError(this.totalPos);
					return object;
				}
				const { headByte, pos, totalPos } = this;
				throw new RangeError(`Insufficient data in parsing ${prettyByte(headByte)} at ${totalPos} (${pos} in the current buffer)`);
			} finally {
				this.entered = false;
			}
		}
		decodeArrayStream(stream) {
			return this.decodeMultiAsync(stream, true);
		}
		decodeStream(stream) {
			return this.decodeMultiAsync(stream, false);
		}
		async *decodeMultiAsync(stream, isArray) {
			if (this.entered) {
				yield* this.clone().decodeMultiAsync(stream, isArray);
				return;
			}
			try {
				this.entered = true;
				let isArrayHeaderRequired = isArray;
				let arrayItemsLeft = -1;
				for await (const buffer of stream) {
					if (isArray && arrayItemsLeft === 0) throw this.createExtraByteError(this.totalPos);
					this.appendBuffer(buffer);
					if (isArrayHeaderRequired) {
						arrayItemsLeft = this.readArraySize();
						isArrayHeaderRequired = false;
						this.complete();
					}
					try {
						while (true) {
							yield this.doDecodeSync();
							if (--arrayItemsLeft === 0) break;
						}
					} catch (e) {
						if (!(e instanceof RangeError)) throw e;
					}
					this.totalPos += this.pos;
				}
			} finally {
				this.entered = false;
			}
		}
		doDecodeSync() {
			DECODE: while (true) {
				const headByte = this.readHeadByte();
				let object;
				if (headByte >= 224) object = headByte - 256;
				else if (headByte < 192) if (headByte < 128) object = headByte;
				else if (headByte < 144) {
					const size = headByte - 128;
					if (size !== 0) {
						this.pushMapState(size);
						this.complete();
						continue DECODE;
					} else object = {};
				} else if (headByte < 160) {
					const size = headByte - 144;
					if (size !== 0) {
						this.pushArrayState(size);
						this.complete();
						continue DECODE;
					} else object = [];
				} else {
					const byteLength = headByte - 160;
					object = this.decodeString(byteLength, 0);
				}
				else if (headByte === 192) object = null;
				else if (headByte === 194) object = false;
				else if (headByte === 195) object = true;
				else if (headByte === 202) object = this.readF32();
				else if (headByte === 203) object = this.readF64();
				else if (headByte === 204) object = this.readU8();
				else if (headByte === 205) object = this.readU16();
				else if (headByte === 206) object = this.readU32();
				else if (headByte === 207) if (this.useBigInt64) object = this.readU64AsBigInt();
				else object = this.readU64();
				else if (headByte === 208) object = this.readI8();
				else if (headByte === 209) object = this.readI16();
				else if (headByte === 210) object = this.readI32();
				else if (headByte === 211) if (this.useBigInt64) object = this.readI64AsBigInt();
				else object = this.readI64();
				else if (headByte === 217) {
					const byteLength = this.lookU8();
					object = this.decodeString(byteLength, 1);
				} else if (headByte === 218) {
					const byteLength = this.lookU16();
					object = this.decodeString(byteLength, 2);
				} else if (headByte === 219) {
					const byteLength = this.lookU32();
					object = this.decodeString(byteLength, 4);
				} else if (headByte === 220) {
					const size = this.readU16();
					if (size !== 0) {
						this.pushArrayState(size);
						this.complete();
						continue DECODE;
					} else object = [];
				} else if (headByte === 221) {
					const size = this.readU32();
					if (size !== 0) {
						this.pushArrayState(size);
						this.complete();
						continue DECODE;
					} else object = [];
				} else if (headByte === 222) {
					const size = this.readU16();
					if (size !== 0) {
						this.pushMapState(size);
						this.complete();
						continue DECODE;
					} else object = {};
				} else if (headByte === 223) {
					const size = this.readU32();
					if (size !== 0) {
						this.pushMapState(size);
						this.complete();
						continue DECODE;
					} else object = {};
				} else if (headByte === 196) {
					const size = this.lookU8();
					object = this.decodeBinary(size, 1);
				} else if (headByte === 197) {
					const size = this.lookU16();
					object = this.decodeBinary(size, 2);
				} else if (headByte === 198) {
					const size = this.lookU32();
					object = this.decodeBinary(size, 4);
				} else if (headByte === 212) object = this.decodeExtension(1, 0);
				else if (headByte === 213) object = this.decodeExtension(2, 0);
				else if (headByte === 214) object = this.decodeExtension(4, 0);
				else if (headByte === 215) object = this.decodeExtension(8, 0);
				else if (headByte === 216) object = this.decodeExtension(16, 0);
				else if (headByte === 199) {
					const size = this.lookU8();
					object = this.decodeExtension(size, 1);
				} else if (headByte === 200) {
					const size = this.lookU16();
					object = this.decodeExtension(size, 2);
				} else if (headByte === 201) {
					const size = this.lookU32();
					object = this.decodeExtension(size, 4);
				} else throw new DecodeError(`Unrecognized type byte: ${prettyByte(headByte)}`);
				this.complete();
				const stack = this.stack;
				while (stack.length > 0) {
					const state = stack.top();
					if (state.type === STATE_ARRAY) {
						state.array[state.position] = object;
						state.position++;
						if (state.position === state.size) {
							object = state.array;
							stack.release(state);
						} else continue DECODE;
					} else if (state.type === STATE_MAP_KEY) {
						if (object === "__proto__") throw new DecodeError("The key __proto__ is not allowed");
						state.key = this.mapKeyConverter(object);
						state.type = STATE_MAP_VALUE;
						continue DECODE;
					} else {
						state.map[state.key] = object;
						state.readCount++;
						if (state.readCount === state.size) {
							object = state.map;
							stack.release(state);
						} else {
							state.key = null;
							state.type = STATE_MAP_KEY;
							continue DECODE;
						}
					}
				}
				return object;
			}
		}
		readHeadByte() {
			if (this.headByte === HEAD_BYTE_REQUIRED) this.headByte = this.readU8();
			return this.headByte;
		}
		complete() {
			this.headByte = HEAD_BYTE_REQUIRED;
		}
		readArraySize() {
			const headByte = this.readHeadByte();
			switch (headByte) {
				case 220: return this.readU16();
				case 221: return this.readU32();
				default: if (headByte < 160) return headByte - 144;
				else throw new DecodeError(`Unrecognized array type byte: ${prettyByte(headByte)}`);
			}
		}
		pushMapState(size) {
			if (size > this.maxMapLength) throw new DecodeError(`Max length exceeded: map length (${size}) > maxMapLengthLength (${this.maxMapLength})`);
			this.stack.pushMapState(size);
		}
		pushArrayState(size) {
			if (size > this.maxArrayLength) throw new DecodeError(`Max length exceeded: array length (${size}) > maxArrayLength (${this.maxArrayLength})`);
			this.stack.pushArrayState(size);
		}
		decodeString(byteLength, headerOffset) {
			if (!this.rawStrings || this.stateIsMapKey()) return this.decodeUtf8String(byteLength, headerOffset);
			return this.decodeBinary(byteLength, headerOffset);
		}
		/**
		* @throws {@link RangeError}
		*/
		decodeUtf8String(byteLength, headerOffset) {
			if (byteLength > this.maxStrLength) throw new DecodeError(`Max length exceeded: UTF-8 byte length (${byteLength}) > maxStrLength (${this.maxStrLength})`);
			if (this.bytes.byteLength < this.pos + headerOffset + byteLength) throw MORE_DATA;
			const offset = this.pos + headerOffset;
			let object;
			if (this.stateIsMapKey() && this.keyDecoder?.canBeCached(byteLength)) object = this.keyDecoder.decode(this.bytes, offset, byteLength);
			else object = utf8Decode(this.bytes, offset, byteLength);
			this.pos += headerOffset + byteLength;
			return object;
		}
		stateIsMapKey() {
			if (this.stack.length > 0) return this.stack.top().type === STATE_MAP_KEY;
			return false;
		}
		/**
		* @throws {@link RangeError}
		*/
		decodeBinary(byteLength, headOffset) {
			if (byteLength > this.maxBinLength) throw new DecodeError(`Max length exceeded: bin length (${byteLength}) > maxBinLength (${this.maxBinLength})`);
			if (!this.hasRemaining(byteLength + headOffset)) throw MORE_DATA;
			const offset = this.pos + headOffset;
			const object = this.bytes.subarray(offset, offset + byteLength);
			this.pos += headOffset + byteLength;
			return object;
		}
		decodeExtension(size, headOffset) {
			if (size > this.maxExtLength) throw new DecodeError(`Max length exceeded: ext length (${size}) > maxExtLength (${this.maxExtLength})`);
			const extType = this.view.getInt8(this.pos + headOffset);
			const data = this.decodeBinary(size, headOffset + 1);
			return this.extensionCodec.decode(data, extType, this.context);
		}
		lookU8() {
			return this.view.getUint8(this.pos);
		}
		lookU16() {
			return this.view.getUint16(this.pos);
		}
		lookU32() {
			return this.view.getUint32(this.pos);
		}
		readU8() {
			const value = this.view.getUint8(this.pos);
			this.pos++;
			return value;
		}
		readI8() {
			const value = this.view.getInt8(this.pos);
			this.pos++;
			return value;
		}
		readU16() {
			const value = this.view.getUint16(this.pos);
			this.pos += 2;
			return value;
		}
		readI16() {
			const value = this.view.getInt16(this.pos);
			this.pos += 2;
			return value;
		}
		readU32() {
			const value = this.view.getUint32(this.pos);
			this.pos += 4;
			return value;
		}
		readI32() {
			const value = this.view.getInt32(this.pos);
			this.pos += 4;
			return value;
		}
		readU64() {
			const value = getUint64(this.view, this.pos);
			this.pos += 8;
			return value;
		}
		readI64() {
			const value = getInt64(this.view, this.pos);
			this.pos += 8;
			return value;
		}
		readU64AsBigInt() {
			const value = this.view.getBigUint64(this.pos);
			this.pos += 8;
			return value;
		}
		readI64AsBigInt() {
			const value = this.view.getBigInt64(this.pos);
			this.pos += 8;
			return value;
		}
		readF32() {
			const value = this.view.getFloat32(this.pos);
			this.pos += 4;
			return value;
		}
		readF64() {
			const value = this.view.getFloat64(this.pos);
			this.pos += 8;
			return value;
		}
	};
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/decode.mjs
/**
* It decodes a single MessagePack object in a buffer.
*
* This is a synchronous decoding function.
* See other variants for asynchronous decoding: {@link decodeAsync}, {@link decodeMultiStream}, or {@link decodeArrayStream}.
*
* @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.
* @throws {@link DecodeError} if the buffer contains invalid data.
*/
function decode(buffer, options) {
	return new Decoder(options).decode(buffer);
}
var init_decode = __esmMin((() => {
	init_Decoder();
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/utils/stream.mjs
function isAsyncIterable(object) {
	return object[Symbol.asyncIterator] != null;
}
async function* asyncIterableFromStream(stream) {
	const reader = stream.getReader();
	try {
		while (true) {
			const { done, value } = await reader.read();
			if (done) return;
			yield value;
		}
	} finally {
		reader.releaseLock();
	}
}
function ensureAsyncIterable(streamLike) {
	if (isAsyncIterable(streamLike)) return streamLike;
	else return asyncIterableFromStream(streamLike);
}
var init_stream = __esmMin((() => {}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/decodeAsync.mjs
/**
* @throws {@link RangeError} if the buffer is incomplete, including the case where the buffer is empty.
* @throws {@link DecodeError} if the buffer contains invalid data.
*/
function decodeMultiStream(streamLike, options) {
	const stream = ensureAsyncIterable(streamLike);
	return new Decoder(options).decodeStream(stream);
}
var init_decodeAsync = __esmMin((() => {
	init_Decoder();
	init_stream();
})), Encoder;
var init_Encoder = __esmMin((() => {
	init_utf8();
	init_ExtensionCodec();
	init_int();
	init_typedArrays();
	Encoder = class Encoder {
		extensionCodec;
		context;
		useBigInt64;
		maxDepth;
		initialBufferSize;
		sortKeys;
		forceFloat32;
		ignoreUndefined;
		forceIntegerToFloat;
		pos;
		view;
		bytes;
		entered = false;
		constructor(options) {
			this.extensionCodec = options?.extensionCodec ?? ExtensionCodec.defaultCodec;
			this.context = options?.context;
			this.useBigInt64 = options?.useBigInt64 ?? false;
			this.maxDepth = options?.maxDepth ?? 100;
			this.initialBufferSize = options?.initialBufferSize ?? 2048;
			this.sortKeys = options?.sortKeys ?? false;
			this.forceFloat32 = options?.forceFloat32 ?? false;
			this.ignoreUndefined = options?.ignoreUndefined ?? false;
			this.forceIntegerToFloat = options?.forceIntegerToFloat ?? false;
			this.pos = 0;
			this.view = new DataView(new ArrayBuffer(this.initialBufferSize));
			this.bytes = new Uint8Array(this.view.buffer);
		}
		clone() {
			return new Encoder({
				extensionCodec: this.extensionCodec,
				context: this.context,
				useBigInt64: this.useBigInt64,
				maxDepth: this.maxDepth,
				initialBufferSize: this.initialBufferSize,
				sortKeys: this.sortKeys,
				forceFloat32: this.forceFloat32,
				ignoreUndefined: this.ignoreUndefined,
				forceIntegerToFloat: this.forceIntegerToFloat
			});
		}
		reinitializeState() {
			this.pos = 0;
		}
		/**
		* This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.
		*
		* @returns Encodes the object and returns a shared reference the encoder's internal buffer.
		*/
		encodeSharedRef(object) {
			if (this.entered) return this.clone().encodeSharedRef(object);
			try {
				this.entered = true;
				this.reinitializeState();
				this.doEncode(object, 1);
				return this.bytes.subarray(0, this.pos);
			} finally {
				this.entered = false;
			}
		}
		/**
		* @returns Encodes the object and returns a copy of the encoder's internal buffer.
		*/
		encode(object) {
			if (this.entered) return this.clone().encode(object);
			try {
				this.entered = true;
				this.reinitializeState();
				this.doEncode(object, 1);
				return this.bytes.slice(0, this.pos);
			} finally {
				this.entered = false;
			}
		}
		doEncode(object, depth) {
			if (depth > this.maxDepth) throw new Error(`Too deep objects in depth ${depth}`);
			if (object == null) this.encodeNil();
			else if (typeof object === "boolean") this.encodeBoolean(object);
			else if (typeof object === "number") if (!this.forceIntegerToFloat) this.encodeNumber(object);
			else this.encodeNumberAsFloat(object);
			else if (typeof object === "string") this.encodeString(object);
			else if (this.useBigInt64 && typeof object === "bigint") this.encodeBigInt64(object);
			else this.encodeObject(object, depth);
		}
		ensureBufferSizeToWrite(sizeToWrite) {
			const requiredSize = this.pos + sizeToWrite;
			if (this.view.byteLength < requiredSize) this.resizeBuffer(requiredSize * 2);
		}
		resizeBuffer(newSize) {
			const newBuffer = new ArrayBuffer(newSize);
			const newBytes = new Uint8Array(newBuffer);
			const newView = new DataView(newBuffer);
			newBytes.set(this.bytes);
			this.view = newView;
			this.bytes = newBytes;
		}
		encodeNil() {
			this.writeU8(192);
		}
		encodeBoolean(object) {
			if (object === false) this.writeU8(194);
			else this.writeU8(195);
		}
		encodeNumber(object) {
			if (!this.forceIntegerToFloat && Number.isSafeInteger(object)) if (object >= 0) if (object < 128) this.writeU8(object);
			else if (object < 256) {
				this.writeU8(204);
				this.writeU8(object);
			} else if (object < 65536) {
				this.writeU8(205);
				this.writeU16(object);
			} else if (object < 4294967296) {
				this.writeU8(206);
				this.writeU32(object);
			} else if (!this.useBigInt64) {
				this.writeU8(207);
				this.writeU64(object);
			} else this.encodeNumberAsFloat(object);
			else if (object >= -32) this.writeU8(224 | object + 32);
			else if (object >= -128) {
				this.writeU8(208);
				this.writeI8(object);
			} else if (object >= -32768) {
				this.writeU8(209);
				this.writeI16(object);
			} else if (object >= -2147483648) {
				this.writeU8(210);
				this.writeI32(object);
			} else if (!this.useBigInt64) {
				this.writeU8(211);
				this.writeI64(object);
			} else this.encodeNumberAsFloat(object);
			else this.encodeNumberAsFloat(object);
		}
		encodeNumberAsFloat(object) {
			if (this.forceFloat32) {
				this.writeU8(202);
				this.writeF32(object);
			} else {
				this.writeU8(203);
				this.writeF64(object);
			}
		}
		encodeBigInt64(object) {
			if (object >= BigInt(0)) {
				this.writeU8(207);
				this.writeBigUint64(object);
			} else {
				this.writeU8(211);
				this.writeBigInt64(object);
			}
		}
		writeStringHeader(byteLength) {
			if (byteLength < 32) this.writeU8(160 + byteLength);
			else if (byteLength < 256) {
				this.writeU8(217);
				this.writeU8(byteLength);
			} else if (byteLength < 65536) {
				this.writeU8(218);
				this.writeU16(byteLength);
			} else if (byteLength < 4294967296) {
				this.writeU8(219);
				this.writeU32(byteLength);
			} else throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);
		}
		encodeString(object) {
			const maxHeaderSize = 5;
			const byteLength = utf8Count(object);
			this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);
			this.writeStringHeader(byteLength);
			utf8Encode(object, this.bytes, this.pos);
			this.pos += byteLength;
		}
		encodeObject(object, depth) {
			const ext = this.extensionCodec.tryToEncode(object, this.context);
			if (ext != null) this.encodeExtension(ext);
			else if (Array.isArray(object)) this.encodeArray(object, depth);
			else if (ArrayBuffer.isView(object)) this.encodeBinary(object);
			else if (typeof object === "object") this.encodeMap(object, depth);
			else throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);
		}
		encodeBinary(object) {
			const size = object.byteLength;
			if (size < 256) {
				this.writeU8(196);
				this.writeU8(size);
			} else if (size < 65536) {
				this.writeU8(197);
				this.writeU16(size);
			} else if (size < 4294967296) {
				this.writeU8(198);
				this.writeU32(size);
			} else throw new Error(`Too large binary: ${size}`);
			const bytes = ensureUint8Array(object);
			this.writeU8a(bytes);
		}
		encodeArray(object, depth) {
			const size = object.length;
			if (size < 16) this.writeU8(144 + size);
			else if (size < 65536) {
				this.writeU8(220);
				this.writeU16(size);
			} else if (size < 4294967296) {
				this.writeU8(221);
				this.writeU32(size);
			} else throw new Error(`Too large array: ${size}`);
			for (const item of object) this.doEncode(item, depth + 1);
		}
		countWithoutUndefined(object, keys) {
			let count = 0;
			for (const key of keys) if (object[key] !== void 0) count++;
			return count;
		}
		encodeMap(object, depth) {
			const keys = Object.keys(object);
			if (this.sortKeys) keys.sort();
			const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;
			if (size < 16) this.writeU8(128 + size);
			else if (size < 65536) {
				this.writeU8(222);
				this.writeU16(size);
			} else if (size < 4294967296) {
				this.writeU8(223);
				this.writeU32(size);
			} else throw new Error(`Too large map object: ${size}`);
			for (const key of keys) {
				const value = object[key];
				if (!(this.ignoreUndefined && value === void 0)) {
					this.encodeString(key);
					this.doEncode(value, depth + 1);
				}
			}
		}
		encodeExtension(ext) {
			if (typeof ext.data === "function") {
				const data = ext.data(this.pos + 6);
				const size = data.length;
				if (size >= 4294967296) throw new Error(`Too large extension object: ${size}`);
				this.writeU8(201);
				this.writeU32(size);
				this.writeI8(ext.type);
				this.writeU8a(data);
				return;
			}
			const size = ext.data.length;
			if (size === 1) this.writeU8(212);
			else if (size === 2) this.writeU8(213);
			else if (size === 4) this.writeU8(214);
			else if (size === 8) this.writeU8(215);
			else if (size === 16) this.writeU8(216);
			else if (size < 256) {
				this.writeU8(199);
				this.writeU8(size);
			} else if (size < 65536) {
				this.writeU8(200);
				this.writeU16(size);
			} else if (size < 4294967296) {
				this.writeU8(201);
				this.writeU32(size);
			} else throw new Error(`Too large extension object: ${size}`);
			this.writeI8(ext.type);
			this.writeU8a(ext.data);
		}
		writeU8(value) {
			this.ensureBufferSizeToWrite(1);
			this.view.setUint8(this.pos, value);
			this.pos++;
		}
		writeU8a(values) {
			const size = values.length;
			this.ensureBufferSizeToWrite(size);
			this.bytes.set(values, this.pos);
			this.pos += size;
		}
		writeI8(value) {
			this.ensureBufferSizeToWrite(1);
			this.view.setInt8(this.pos, value);
			this.pos++;
		}
		writeU16(value) {
			this.ensureBufferSizeToWrite(2);
			this.view.setUint16(this.pos, value);
			this.pos += 2;
		}
		writeI16(value) {
			this.ensureBufferSizeToWrite(2);
			this.view.setInt16(this.pos, value);
			this.pos += 2;
		}
		writeU32(value) {
			this.ensureBufferSizeToWrite(4);
			this.view.setUint32(this.pos, value);
			this.pos += 4;
		}
		writeI32(value) {
			this.ensureBufferSizeToWrite(4);
			this.view.setInt32(this.pos, value);
			this.pos += 4;
		}
		writeF32(value) {
			this.ensureBufferSizeToWrite(4);
			this.view.setFloat32(this.pos, value);
			this.pos += 4;
		}
		writeF64(value) {
			this.ensureBufferSizeToWrite(8);
			this.view.setFloat64(this.pos, value);
			this.pos += 8;
		}
		writeU64(value) {
			this.ensureBufferSizeToWrite(8);
			setUint64(this.view, this.pos, value);
			this.pos += 8;
		}
		writeI64(value) {
			this.ensureBufferSizeToWrite(8);
			setInt64(this.view, this.pos, value);
			this.pos += 8;
		}
		writeBigUint64(value) {
			this.ensureBufferSizeToWrite(8);
			this.view.setBigUint64(this.pos, value);
			this.pos += 8;
		}
		writeBigInt64(value) {
			this.ensureBufferSizeToWrite(8);
			this.view.setBigInt64(this.pos, value);
			this.pos += 8;
		}
	};
}));
//#endregion
//#region node_modules/@msgpack/msgpack/dist.esm/index.mjs
var init_dist_esm = __esmMin((() => {
	init_decode();
	init_decodeAsync();
	init_Encoder();
	init_ExtensionCodec();
}));
//#endregion
//#region src/neovim/utils/constants.ts
var isTester, isVim$1;
var init_constants$1 = __esmMin((() => {
	isTester = process.env.COC_TESTER == "1";
	isVim$1 = process.env.VIM_NODE_RPC == "1";
}));
//#endregion
//#region src/neovim/api/Base.ts
var BaseApi;
var init_Base = __esmMin((() => {
	init_constants$1();
	BaseApi = class {
		prefix;
		data;
		client;
		constructor({ data, client }) {
			this.data = data;
			if (client) this.client = client;
			else Object.defineProperty(this, "client", {
				enumerable: false,
				value: this
			});
		}
		get transport() {
			return this.client.transport;
		}
		equals(other) {
			try {
				return String(this.data) === String(other.data);
			} catch (e) {
				return false;
			}
		}
		async request(name, args = [], skipConvert = false, skipErrorLog = false) {
			Error.captureStackTrace(args);
			return new Promise((resolve, reject) => {
				let converted = skipConvert ? args : this.getArgsByPrefix(args);
				this.transport.request(name, converted, (err, res) => {
					if (err) {
						let e = new Error(err[1]);
						if (!skipErrorLog) {
							e.stack = `Error: request error on "${name}" - ${err[1]}\n` + args["stack"].split(/\r?\n/).slice(3).join("\n");
							this.client.logError(`request error on "${name}"`, converted.map((o) => o === this ? this.data : o), e);
						}
						reject(e);
					} else resolve(res);
				});
			});
		}
		getArgsByPrefix(args) {
			if (this.prefix !== "nvim_" && args[0] !== this) return [isVim$1 ? this.data : this, ...args];
			return args;
		}
		/** Retrieves a scoped variable depending on type (using `this.prefix`) */
		getVar(name) {
			return this.request(`${this.prefix}get_var`, [name], false, true).then((res) => res, (_err) => {
				return null;
			});
		}
		setVar(name, value, isNotify = false) {
			if (isNotify) {
				this.notify(`${this.prefix}set_var`, [name, value]);
				return;
			}
			return this.request(`${this.prefix}set_var`, [name, value]);
		}
		/** Delete a scoped variable */
		deleteVar(name) {
			this.notify(`${this.prefix}del_var`, [name]);
		}
		/** Retrieves a scoped option depending on type of `this` */
		getOption(name) {
			return this.request(`${this.prefix}get_option`, [name]);
		}
		setOption(name, value, isNotify) {
			if (isNotify) {
				this.notify(`${this.prefix}set_option`, [name, value]);
				return;
			}
			return this.request(`${this.prefix}set_option`, [name, value]);
		}
		/** `request` is basically the same except you can choose to wait forpromise to be resolved */
		notify(name, args = [], skipConvert = false) {
			this.transport.notify(name, skipConvert ? args : this.getArgsByPrefix(args));
		}
		toJSON() {
			return this.data ?? 0;
		}
	};
}));
//#endregion
//#region src/neovim/api/Buffer.ts
var Buffer$2;
var init_Buffer = __esmMin((() => {
	init_constants$1();
	init_Base();
	Buffer$2 = class extends BaseApi {
		prefix = "nvim_buf_";
		/**
		* Attach to buffer to listen to buffer events
		* @param sendBuffer Set to true if the initial notification should contain
		* the whole buffer. If so, the first notification will be a
		* `nvim_buf_lines_event`. Otherwise, the first notification will be
		* a `nvim_buf_changedtick_event`
		*/
		async attach(sendBuffer = false, options = {}) {
			return await this.request(`${this.prefix}attach`, [sendBuffer, options]);
		}
		/**
		* Detach from buffer to stop listening to buffer events
		*/
		async detach() {
			return await this.request(`${this.prefix}detach`, []);
		}
		/** Retrieves a scoped option depending on type of `this` */
		getOption(name) {
			return this.request(`nvim_get_option_value`, [name, { buf: this.id }], true);
		}
		setOption(name, value, isNotify) {
			return this[isNotify ? "notify" : "request"](`nvim_set_option_value`, [
				name,
				value,
				{ buf: this.id }
			], true);
		}
		/**
		* Get the bufnr of Buffer
		*/
		get id() {
			return this.data;
		}
		/** Total number of lines in buffer */
		get length() {
			return this.request(`${this.prefix}line_count`, []);
		}
		/** Get lines in buffer */
		get lines() {
			return this.getLines();
		}
		/** Gets a changed tick of a buffer */
		get changedtick() {
			return this.request(`${this.prefix}get_changedtick`, []);
		}
		get commands() {
			return this.getCommands();
		}
		getCommands(options = {}) {
			return this.request(`${this.prefix}get_commands`, [options]);
		}
		/** Get specific lines of buffer */
		getLines({ start, end, strictIndexing } = {
			start: 0,
			end: -1,
			strictIndexing: true
		}) {
			const indexing = typeof strictIndexing === "undefined" ? true : strictIndexing;
			return this.request(`${this.prefix}get_lines`, [
				start,
				end,
				indexing
			]);
		}
		setLines(lines, opts, notify = false) {
			let { start, end, strictIndexing } = opts ?? {};
			start = start ?? 0;
			end = end ?? start + 1;
			const indexing = strictIndexing ?? true;
			const method = notify ? "notify" : "request";
			return this[method](`${this.prefix}set_lines`, [
				start,
				end,
				indexing,
				typeof lines === "string" ? [lines] : lines
			]);
		}
		/**
		* Set virtual text for a line, works on nvim >= 0.5.0 and vim9
		* @public
		* @param {number} src_id - Source group to use or 0 to use a new group, or -1
		* @param {number} line - Line to annotate with virtual text (zero-indexed)
		* @param {Chunk[]} chunks - List with [text, hl_group]
		* @param {{[index} opts
		* @returns {Promise<number>}
		*/
		setVirtualText(src_id, line, chunks, opts = {}) {
			this.client.call("coc#vtext#add", [
				this.id,
				src_id,
				line,
				chunks,
				opts
			], true);
			return Promise.resolve(src_id);
		}
		/**
		* Removes an ext mark by notification.
		* @public
		* @param {number} ns_id - Namespace id
		* @param {number} id - Extmark id
		*/
		deleteExtMark(ns_id, id) {
			this.notify(`${this.prefix}del_extmark`, [ns_id, id]);
		}
		/**
		* Gets the position (0-indexed) of an extmark.
		* @param {number} ns_id - Namespace id
		* @param {number} id - Extmark id
		* @param {Object} opts - Optional parameters.
		* @returns {Promise<[] | [number, number] | [number, number, ExtmarkDetails]>}
		*/
		async getExtMarkById(ns_id, id, opts = {}) {
			return this.request(`${this.prefix}get_extmark_by_id`, [
				ns_id,
				id,
				opts
			]);
		}
		/**
		* Gets extmarks in "traversal order" from a |charwise| region defined by
		* buffer positions (inclusive, 0-indexed |api-indexing|).
		*
		* Region can be given as (row,col) tuples, or valid extmark ids (whose
		* positions define the bounds). 0 and -1 are understood as (0,0) and (-1,-1)
		* respectively, thus the following are equivalent:
		*
		* nvim_buf_get_extmarks(0, my_ns, 0, -1, {})
		* nvim_buf_get_extmarks(0, my_ns, [0,0], [-1,-1], {})
		* @param {number} ns_id - Namespace id
		* @param {[number, number] | number} start
		* @param {[number, number] | number} end
		* @param {Object} opts
		* @returns {Promise<[number, number, number, ExtmarkDetails?][]>}
		*/
		async getExtMarks(ns_id, start, end, opts = {}) {
			return this.request(`${this.prefix}get_extmarks`, [
				ns_id,
				start,
				end,
				opts
			]);
		}
		/**
		* Creates or updates an extmark by notification, `:h nvim_buf_set_extmark`.
		* @param {number} ns_id
		* @param {number} line
		* @param {number} col
		* @param {ExtmarkOptions} opts
		* @returns {void}
		*/
		setExtMark(ns_id, line, col, opts = {}) {
			this.notify(`${this.prefix}set_extmark`, [
				ns_id,
				line,
				col,
				opts
			]);
		}
		/** Insert lines at `start` index */
		insert(lines, start) {
			return this.setLines(lines, {
				start,
				end: start,
				strictIndexing: true
			});
		}
		/** Replace lines starting at `start` index */
		replace(_lines, start) {
			const lines = typeof _lines === "string" ? [_lines] : _lines;
			return this.setLines(lines, {
				start,
				end: start + lines.length,
				strictIndexing: false
			});
		}
		/** Remove lines at index */
		remove(start, end, strictIndexing = false) {
			return this.setLines([], {
				start,
				end,
				strictIndexing
			});
		}
		/** Append a string or list of lines to end of buffer */
		append(lines) {
			return this.setLines(lines, {
				start: -1,
				end: -1,
				strictIndexing: false
			});
		}
		/** Get buffer name */
		get name() {
			return this.request(`${this.prefix}get_name`, []);
		}
		/** Set current buffer name */
		setName(value) {
			return this.request(`${this.prefix}set_name`, [value]);
		}
		/** Is current buffer valid */
		get valid() {
			return this.request(`${this.prefix}is_valid`, []);
		}
		/** Get mark position given mark name */
		mark(name) {
			return this.request(`${this.prefix}get_mark`, [name]);
		}
		/** Gets keymap */
		getKeymap(mode) {
			return this.request(`${this.prefix}get_keymap`, [mode]);
		}
		/**
		* Add buffer keymap by notification, replace keycodes for expr keymap enabled by default.
		*/
		setKeymap(mode, lhs, rhs, opts = {}) {
			let option = opts.expr ? Object.assign({ replace_keycodes: true }, opts) : opts;
			this.notify(`${this.prefix}set_keymap`, [
				mode,
				lhs,
				rhs,
				option
			]);
		}
		deleteKeymap(mode, lhs) {
			this.notify(`${this.prefix}del_keymap`, [mode, lhs]);
		}
		/**
		* Checks if a buffer is valid and loaded. See |api-buffer| for
		* more info about unloaded buffers.
		*/
		get loaded() {
			return this.request(`${this.prefix}is_loaded`, []);
		}
		/**
		* Returns the byte offset for a line.
		*
		* Line 1 (index=0) has offset 0. UTF-8 bytes are counted. EOL is
		* one byte. 'fileformat' and 'fileencoding' are ignored. The
		* line index just after the last line gives the total byte-count
		* of the buffer. A final EOL byte is counted if it would be
		* written, see 'eol'.
		*
		* Unlike |line2byte()|, throws error for out-of-bounds indexing.
		* Returns -1 for unloaded buffer.
		* @return {Number} Integer byte offset, or -1 for unloaded buffer.
		*/
		getOffset(index) {
			return this.request(`${this.prefix}get_offset`, [index]);
		}
		/**
		* Adds a highlight to buffer.
		*
		* This can be used for plugins which dynamically generate
		* highlights to a buffer (like a semantic highlighter or
		* linter). The function adds a single highlight to a buffer.
		* Unlike matchaddpos() highlights follow changes to line
		* numbering (as lines are inserted/removed above the highlighted
		* line), like signs and marks do.
		*
		* "src_id" is useful for batch deletion/updating of a set of
		* highlights. When called with src_id = 0, an unique source id
		* is generated and returned. Succesive calls can pass in it as
		* "src_id" to add new highlights to the same source group. All
		* highlights in the same group can then be cleared with
		* nvim_buf_clear_namespace. If the highlight never will be
		* manually deleted pass in -1 for "src_id".
		*
		* If "hl_group" is the empty string no highlight is added, but a
		* new src_id is still returned. This is useful for an external
		* plugin to synchrounously request an unique src_id at
		* initialization, and later asynchronously add and clear
		* highlights in response to buffer changes.
		*/
		addHighlight({ hlGroup, line, colStart: _start, colEnd: _end, srcId: _srcId }) {
			if (!hlGroup) throw new Error("hlGroup should not empty");
			const colEnd = typeof _end !== "undefined" ? _end : -1;
			const colStart = typeof _start !== "undefined" ? _start : -0;
			const srcId = typeof _srcId !== "undefined" ? _srcId : -1;
			const method = srcId == 0 ? "request" : "notify";
			let res = this[method](`${this.prefix}add_highlight`, [
				srcId,
				hlGroup,
				line,
				colStart,
				colEnd
			]);
			return method === "request" ? res : Promise.resolve(null);
		}
		/**
		* Clear highlights of specified lins.
		* @deprecated use clearNamespace() instead.
		*/
		clearHighlight(args = {}) {
			const { srcId, lineStart, lineEnd } = Object.assign({}, {
				srcId: -1,
				lineStart: 0,
				lineEnd: -1
			}, args);
			return this.notify(`${this.prefix}clear_highlight`, [
				srcId,
				lineStart,
				lineEnd
			]);
		}
		/**
		* Add highlight to ranges by notification.
		* @param {string | number} srcId Unique key or namespace number.
		* @param {string} hlGroup Highlight group.
		* @param {Range[]} ranges List of highlight ranges
		*/
		highlightRanges(srcId, hlGroup, ranges, option) {
			this.client.call("coc#highlight#ranges", [
				this.id,
				srcId,
				hlGroup,
				ranges,
				option ?? {}
			], true);
		}
		/**
		* Clear namespace by id or name.
		* @param key Unique key or namespace number, use -1 for all namespaces
		* @param lineStart Start of line, 0 based, default to 0.
		* @param lineEnd End of line, 0 based, default to -1.
		*/
		clearNamespace(key, lineStart = 0, lineEnd = -1) {
			this.client.call("coc#highlight#clear_highlight", [
				this.id,
				key,
				lineStart,
				lineEnd
			], true);
		}
		/**
		* Add sign to buffer by notification.
		* @param {SignPlaceOption} sign
		* @returns {void}
		*/
		placeSign(sign) {
			let opts = { lnum: sign.lnum };
			if (typeof sign.priority === "number") opts.priority = sign.priority;
			this.client.call("sign_place", [
				sign.id || 0,
				sign.group || "",
				sign.name,
				this.id,
				opts
			], true);
		}
		/**
		* Unplace signs by notification
		*/
		unplaceSign(opts) {
			let details = { buffer: this.id };
			if (opts.id != null) details.id = opts.id;
			this.client.call("sign_unplace", [opts.group || "", details], true);
		}
		/**
		* Get signs by group name or id and lnum.
		* @param {SignPlacedOption} opts
		* @returns {Promise<SignItem[]>}
		*/
		async getSigns(opts) {
			return (await this.client.call("sign_getplaced", [this.id, opts || {}]))[0].signs;
		}
		/**
		* Get highlight items by name space (end inclusive).
		* @param {string} ns Namespace key.
		* @param {number} start 0 based line number.
		* @param {number} end 0 based line number.
		* @returns {Promise<HighlightItem[]>}
		*/
		async getHighlights(ns, start = 0, end = -1) {
			let res = [];
			let arr = await this.client.call("coc#highlight#get_highlights", [
				this.id,
				ns,
				start,
				end
			]);
			for (let item of arr) res.push({
				hlGroup: item[0],
				lnum: item[1],
				colStart: item[2],
				colEnd: item[3],
				id: item[4]
			});
			return res;
		}
		/**
		* Update highlight items by notification.
		* @param {string | number} ns Namespace key or id.
		* @param {HighlightItem[]} highlights Highlight items.
		* @param {HighlightOption} opts Optional options.
		* @returns {void}
		*/
		updateHighlights(ns, highlights, opts = {}) {
			if (typeof opts === "number") {
				this.client.logError("Bad option for buffer.updateHighlights()", /* @__PURE__ */ new Error());
				return;
			}
			let start = typeof opts.start === "number" ? opts.start : 0;
			let end = typeof opts.end === "number" ? opts.end : -1;
			let changedtick = typeof opts.changedtick === "number" ? opts.changedtick : null;
			let priority = typeof opts.priority === "number" ? opts.priority : null;
			let arr = highlights.map((o) => [
				o.hlGroup,
				o.lnum,
				o.colStart,
				o.colEnd,
				o.combine === false ? 0 : 1,
				o.start_incl ? 1 : 0,
				o.end_incl ? 1 : 0
			]);
			if (start == 0 && end == -1) {
				this.client.call("coc#highlight#buffer_update", [
					this.id,
					ns,
					arr,
					priority,
					changedtick
				], true);
				return;
			}
			this.client.call("coc#highlight#update_highlights", [
				this.id,
				ns,
				arr,
				start,
				end,
				priority,
				changedtick
			], true);
		}
		/**
		* Listens to buffer for events
		*/
		listen(eventName, cb, disposables) {
			this.client.attachBufferEvent(this.id, eventName, cb);
			if (disposables) disposables.push({ dispose: () => {
				this.client.detachBufferEvent(this.id, eventName, cb);
			} });
		}
	};
}));
//#endregion
//#region src/neovim/api/Tabpage.ts
var Tabpage;
var init_Tabpage = __esmMin((() => {
	init_Base();
	Tabpage = class extends BaseApi {
		prefix = "nvim_tabpage_";
		/**
		* The windowid that not change within a Vim session
		*/
		get id() {
			return this.data;
		}
		/** Returns all windows of tabpage */
		get windows() {
			return this.request(`${this.prefix}list_wins`, []);
		}
		/** Gets the current window of tabpage */
		get window() {
			return this.request(`${this.prefix}get_win`, []);
		}
		/** Is current tabpage valid */
		get valid() {
			return this.request(`${this.prefix}is_valid`, []);
		}
		/** Tabpage number */
		get number() {
			return this.request(`${this.prefix}get_number`, []);
		}
		/** Invalid */
		getOption() {
			throw new Error("Tabpage does not have `getOption`");
		}
		/** Invalid */
		setOption() {
			throw new Error("Tabpage does not have `setOption`");
		}
	};
}));
//#endregion
//#region src/neovim/api/Window.ts
var Window$1;
var init_Window = __esmMin((() => {
	init_constants$1();
	init_Base();
	Window$1 = class extends BaseApi {
		prefix = "nvim_win_";
		/**
		* The windowid that not change within a Vim session
		*/
		get id() {
			return this.data;
		}
		setBuffer(buffer) {
			return this.request(`${this.prefix}set_buf`, [buffer]);
		}
		/** Retrieves a scoped option depending on type of `this` */
		getOption(name) {
			return this.request(`nvim_get_option_value`, [name, { win: this.id }], true);
		}
		setOption(name, value, isNotify) {
			return this[isNotify ? "notify" : "request"](`nvim_set_option_value`, [
				name,
				value,
				{ win: this.id }
			], true);
		}
		/** Get current buffer of window */
		get buffer() {
			return this.request(`${this.prefix}get_buf`, []);
		}
		/** Get the Tabpage that contains the window */
		get tabpage() {
			return this.request(`${this.prefix}get_tabpage`, []);
		}
		/** Get cursor position */
		get cursor() {
			return this.request(`${this.prefix}get_cursor`, []);
		}
		setCursor(pos, isNotify = false) {
			let method = isNotify ? "notify" : "request";
			return this[method](`${this.prefix}set_cursor`, [pos]);
		}
		/** Get window height by number of rows */
		get height() {
			return this.request(`${this.prefix}get_height`, []);
		}
		setHeight(height, isNotify = false) {
			let method = isNotify ? "notify" : "request";
			return this[method](`${this.prefix}set_height`, [height]);
		}
		/** Get window width by number of columns */
		get width() {
			return this.request(`${this.prefix}get_width`, []);
		}
		setWidth(width, isNotify = false) {
			let method = isNotify ? "notify" : "request";
			return this[method](`${this.prefix}set_width`, [width]);
		}
		/** Get window position */
		get position() {
			return this.request(`${this.prefix}get_position`, []);
		}
		/** 0-indexed, on-screen window position(row) in display cells. */
		get row() {
			return this.request(`${this.prefix}get_position`, []).then((position) => position[0]);
		}
		/** 0-indexed, on-screen window position(col) in display cells. */
		get col() {
			return this.request(`${this.prefix}get_position`, []).then((position) => position[1]);
		}
		/** Is window valid */
		get valid() {
			return this.request(`${this.prefix}is_valid`, []);
		}
		/** Get window number */
		get number() {
			return this.request(`${this.prefix}get_number`, []);
		}
		setConfig(options, isNotify) {
			let method = isNotify ? "notify" : "request";
			return this[method](`${this.prefix}set_config`, [options]);
		}
		getConfig() {
			return this.request(`${this.prefix}get_config`, []);
		}
		close(force, isNotify) {
			if (isNotify) {
				this.notify(`${this.prefix}close`, [force]);
				return null;
			}
			return this.request(`${this.prefix}close`, [force]);
		}
		highlightRanges(hlGroup, ranges, priority = 10, isNotify) {
			if (isNotify) {
				this.client.call("coc#highlight#match_ranges", [
					this.id,
					0,
					ranges,
					hlGroup,
					priority
				], true);
				return;
			}
			return this.client.call("coc#highlight#match_ranges", [
				this.id,
				0,
				ranges,
				hlGroup,
				priority
			]);
		}
		/**
		* Clear match by highlight group.
		*/
		clearMatchGroup(hlGroup) {
			this.client.call("coc#window#clear_match_group", [this.id, hlGroup], true);
		}
		/**
		* Clear match by match ids.
		*/
		clearMatches(ids) {
			this.client.call("coc#window#clear_matches", [this.id, ids], true);
		}
	};
}));
//#endregion
//#region src/neovim/api/types.ts
var Metadata;
var init_types$2 = __esmMin((() => {
	init_Buffer();
	init_Tabpage();
	init_Window();
	Metadata = [
		{
			constructor: Buffer$2,
			name: "Buffer",
			prefix: "nvim_buf_"
		},
		{
			constructor: Window$1,
			name: "Window",
			prefix: "nvim_win_"
		},
		{
			constructor: Tabpage,
			name: "Tabpage",
			prefix: "nvim_tabpage_"
		}
	];
}));
//#endregion
//#region src/neovim/utils/logger.ts
function getLogFile() {
	let file = process.env.NODE_CLIENT_LOG_FILE;
	if (file) return file;
	let dir = process.env.XDG_RUNTIME_DIR;
	if (dir) return path.default.join(dir, "node-client.log");
	return path.default.join(os.default.tmpdir(), `node-client-${process.pid}.log`);
}
function toObject$1(arg) {
	if (arg == null) return arg;
	if (Array.isArray(arg)) return arg.map((o) => toObject$1(o));
	if (typeof arg == "object" && typeof arg.prefix == "string" && typeof arg.data == "number") return "[" + arg.prefix + arg.data + "]";
	return arg;
}
function toString(arg) {
	if (debugging) return (0, util.inspect)(arg, {
		depth: null,
		colors: true,
		compact: false
	});
	if (arg == null) return String(arg);
	if (arg instanceof Error) return arg.stack;
	if (typeof arg == "object") return JSON.stringify(arg, null, 2);
	return String(arg);
}
function toTimeString(currentTime) {
	return `${toTwoDigits(currentTime.getHours())}:${toTwoDigits(currentTime.getMinutes())}:${toTwoDigits(currentTime.getSeconds())}.${toThreeDigits(currentTime.getMilliseconds())}`;
}
function createLogger(name) {
	return new Logger(name);
}
var nullLogger, debugging, LOG_FILE_PATH, level, invalid, toTwoDigits, toThreeDigits, writableStream, Logger;
var init_logger$1 = __esmMin((() => {
	nullLogger = {
		debug: () => {},
		info: () => {},
		warn: () => {},
		error: () => {},
		trace: () => {}
	};
	debugging = process.env.COC_NODE_CLIENT_DEBUG == "1" && process.env.COC_TESTER == "1";
	LOG_FILE_PATH = getLogFile();
	level = debugging ? "debug" : process.env.NODE_CLIENT_LOG_LEVEL || "info";
	invalid = !debugging && process.getuid && process.getuid() == 0;
	if (!invalid && !debugging) try {
		fs.default.mkdirSync(path.default.dirname(LOG_FILE_PATH), { recursive: true });
		fs.default.writeFileSync(LOG_FILE_PATH, "", {
			encoding: "utf8",
			mode: 438
		});
	} catch (_e) {
		invalid = true;
	}
	toTwoDigits = (v) => v < 10 ? `0${v}` : v.toString();
	toThreeDigits = (v) => v < 10 ? `00${v}` : v < 100 ? `0${v}` : v.toString();
	Logger = class {
		name;
		constructor(name) {
			this.name = name;
		}
		get stream() {
			if (writableStream) return writableStream;
			if (debugging) writableStream = process.stdout;
			else writableStream = fs.default.createWriteStream(LOG_FILE_PATH, { encoding: "utf8" });
			return writableStream;
		}
		getText(level, data, meta) {
			let more = "";
			if (meta.length) more = " " + toObject$1(meta).map((o) => toString(o)).join(", ");
			return `${toTimeString(/* @__PURE__ */ new Date())} ${level.toUpperCase()} [${this.name}] - ${data}${more}\n`;
		}
		debug(data, ...meta) {
			if (level != "debug" || invalid) return;
			this.stream.write(this.getText("debug", data, meta));
		}
		info(data, ...meta) {
			if (invalid) return;
			this.stream.write(this.getText("info", data, meta));
		}
		warn(data, ...meta) {
			if (invalid) return;
			this.stream.write(this.getText("warn", data, meta));
		}
		error(data, ...meta) {
			if (invalid) return;
			(debugging ? process.stderr : this.stream).write(this.getText("error", data, meta));
		}
		trace(data, ...meta) {
			if (level != "trace" || invalid) return;
			this.stream.write(this.getText("trace", data, meta));
		}
	};
}));
//#endregion
//#region src/neovim/transport/base.ts
var debug$3, logger$54, Transport$1;
var init_base = __esmMin((() => {
	init_logger$1();
	debug$3 = level === "debug";
	logger$54 = createLogger("transport");
	Transport$1 = class extends events.EventEmitter {
		logger;
		isVim;
		pauseLevel = 0;
		paused = /* @__PURE__ */ new Map();
		constructor(logger, isVim) {
			super();
			this.logger = logger;
			this.isVim = isVim;
		}
		debug(key, ...meta) {
			if (!debug$3) return;
			logger$54.debug(key, ...meta);
		}
		info(key, ...meta) {
			logger$54.info(key, ...meta);
		}
		debugMessage(msg) {
			if (!debug$3) return;
			const msgType = msg[0];
			if (msgType == 0) logger$54.debug("receive request:", msg.slice(1));
			else if (msgType == 1) {} else if (msgType == 2) logger$54.debug("receive notification:", msg.slice(1));
			else logger$54.debug("unknown message:", msg);
		}
		pauseNotification() {
			this.pauseLevel = this.pauseLevel + 1;
			this.paused.set(this.pauseLevel, []);
		}
		cancelNotification() {
			let { pauseLevel } = this;
			if (pauseLevel > 0) {
				this.paused.delete(pauseLevel);
				this.pauseLevel = pauseLevel - 1;
			}
		}
		resumeNotification(isNotify = false) {
			let { pauseLevel } = this;
			if (pauseLevel == 0) return isNotify ? null : Promise.resolve([[], null]);
			let obj = {};
			Error.captureStackTrace(obj);
			this.pauseLevel = pauseLevel - 1;
			let list = this.paused.get(pauseLevel);
			this.paused.delete(pauseLevel);
			if (list && list.length) return new Promise((resolve, reject) => {
				if (!isNotify) return this.request("nvim_call_atomic", [list], (err, res) => {
					if (err) {
						let e = /* @__PURE__ */ new Error(`call_atomic error: ${err[1]}`);
						e.stack = obj.stack.replace(/^Error/, `Error: ${e.message}`);
						return reject(e);
					}
					if (Array.isArray(res) && res[1] != null) {
						let [index, errType, message] = res[1];
						let [fname, args] = list[index];
						let e = /* @__PURE__ */ new Error(`call_atomic request error on "${fname}": ${message}`);
						e.stack = obj.stack.replace(/^Error/, `Error: ${e.message}`);
						this.logger.error(`call_atomic request error ${errType} on "${fname}"`, args, message, e);
						return reject(e);
					}
					resolve(res);
				});
				this.notify("nvim_call_atomic", [list]);
				resolve(void 0);
			});
			return isNotify ? null : Promise.resolve([[], void 0]);
		}
	};
}));
//#endregion
//#region src/neovim/transport/nvim.ts
var NvimTransport;
var init_nvim = __esmMin((() => {
	init_dist_esm();
	init_types$2();
	init_base();
	NvimTransport = class extends Transport$1 {
		pending = /* @__PURE__ */ new Map();
		nextRequestId = 1;
		reader;
		writer;
		extensionCodec = this.initializeExtensionCodec();
		encoder = new Encoder({
			extensionCodec: this.extensionCodec,
			ignoreUndefined: true
		});
		extEncoder = new Encoder({ ignoreUndefined: true });
		decodeIterator;
		decodeGeneration = 0;
		onReaderEnd;
		attached = false;
		client;
		constructor(logger) {
			super(logger, false);
		}
		initializeExtensionCodec() {
			const codec = new ExtensionCodec();
			Metadata.forEach(({ constructor }, id) => {
				codec.register({
					type: id,
					encode: (input) => {
						if (input instanceof constructor) return this.extEncoder.encode(input.data);
						return null;
					},
					decode: (data) => new constructor({
						client: this.client,
						data: decode(data)
					})
				});
			});
			return codec;
		}
		encodeToBuffer(value) {
			const encoded = this.encoder.encode(value);
			return Buffer.from(encoded.buffer, encoded.byteOffset, encoded.byteLength);
		}
		parseMessage(msg) {
			if (!this.attached) return;
			const msgType = msg[0];
			this.debugMessage(msg);
			if (msgType === 0) {
				let method = msg[2].toString();
				this.emit("request", method, msg[3], this.createResponse(method, msg[1]));
			} else if (msgType === 1) {
				const id = msg[1];
				const handler = this.pending.get(id);
				if (handler) {
					this.pending.delete(id);
					let err = msg[2];
					if (err && err.length != 2) err = [0, err.toString()];
					handler(err, msg[3]);
				}
			} else if (msgType === 2) this.emit("notification", msg[1].toString(), msg[2]);
			else console.error(`Invalid message type ${msgType}`);
		}
		createDecodeSource(reader) {
			let readable = reader;
			if (typeof readable.iterator === "function") return readable.iterator({ destroyOnReturn: false });
			return reader;
		}
		async decodeLoop(iter, generation) {
			try {
				while (true) {
					const resolved = await iter.next();
					if (resolved.done || !this.attached || iter !== this.decodeIterator || generation !== this.decodeGeneration) return;
					if (Array.isArray(resolved.value)) this.parseMessage(resolved.value);
					else console.error("invalid msgpack-RPC message: expected array");
				}
			} catch (err) {
				if (iter !== this.decodeIterator || generation !== this.decodeGeneration) return;
				console.error("Decode stream error:", err);
				this.detach();
				this.emit("detach");
			}
		}
		attach(writer, reader, client) {
			this.writer = writer;
			this.reader = reader;
			this.client = client;
			this.attached = true;
			this.decodeGeneration = this.decodeGeneration + 1;
			const generation = this.decodeGeneration;
			this.onReaderEnd = () => {
				const wasAttached = this.attached;
				this.detach();
				if (wasAttached) this.emit("detach");
			};
			this.reader.once("end", this.onReaderEnd);
			const asyncDecodeGenerator = decodeMultiStream(this.createDecodeSource(this.reader), { extensionCodec: this.extensionCodec });
			this.decodeIterator = asyncDecodeGenerator;
			this.decodeLoop(asyncDecodeGenerator, generation);
		}
		detach() {
			if (!this.attached) return;
			this.attached = false;
			this.decodeGeneration = this.decodeGeneration + 1;
			if (this.onReaderEnd) {
				this.reader.off("end", this.onReaderEnd);
				this.onReaderEnd = void 0;
			}
			let iter = this.decodeIterator;
			this.decodeIterator = void 0;
			if (iter && typeof iter.return === "function") iter.return(void 0).catch((err) => {
				this.debug("decode iterator return error:", err);
			});
			for (let handler of this.pending.values()) handler([0, "transport disconnected"]);
			this.pending.clear();
		}
		request(method, args, cb) {
			if (!this.attached) return cb([0, "transport disconnected"]);
			let id = this.nextRequestId;
			this.nextRequestId = this.nextRequestId + 1;
			let startTs = Date.now();
			this.debug("request to nvim:", id, method, args);
			this.writer.write(this.encodeToBuffer([
				0,
				id,
				method,
				args
			]));
			this.pending.set(id, (err, res) => {
				this.debug("response of nvim:", id, Date.now() - startTs, res, err);
				cb(err, res);
			});
		}
		notify(method, args) {
			if (!this.attached) return;
			if (this.pauseLevel != 0) {
				let arr = this.paused.get(this.pauseLevel);
				if (arr) {
					arr.push([method, args]);
					return;
				}
			}
			this.debug("nvim notification:", method, args);
			this.writer.write(this.encodeToBuffer([
				2,
				method,
				args
			]));
		}
		send(arr) {
			this.writer.write(this.encodeToBuffer(arr));
		}
		vimCommand(command, ..._args) {
			throw new Error(`Command "${command}"  not exists on nvim`);
		}
		vimRequest(command, _args) {
			throw new Error(`Command "${command}"  not exists on nvim`);
		}
		createResponse(_method, requestId) {
			let startTs = Date.now();
			let called = false;
			return { send: (resp, isError) => {
				if (called || !this.attached) return;
				this.debug("response of client:", requestId, `${Date.now() - startTs}ms`, resp, isError == true);
				called = true;
				this.writer.write(this.encodeToBuffer([
					1,
					requestId,
					isError ? resp : null,
					!isError ? resp : null
				]));
			} };
		}
	};
}));
//#endregion
//#region src/neovim/transport/connection.ts
var logger$53, NR_CODE, Connection;
var init_connection = __esmMin((() => {
	init_logger$1();
	logger$53 = createLogger("connection");
	NR_CODE = 10;
	Connection = class extends events.default {
		writeable;
		clean;
		constructor(readable, writeable) {
			super();
			this.writeable = writeable;
			let cached = [];
			let hasCache = false;
			readable.once("data", (buf) => {
				if (!Buffer.isBuffer(buf)) throw new Error(`Vim connection expect Buffer from readable stream.`);
			});
			let onData = (buf) => {
				let start = 0;
				let len = buf.byteLength;
				for (let i = 0; i < len; i++) if (buf[i] === NR_CODE) {
					let b = buf.slice(start, i);
					if (hasCache) {
						cached.push(b);
						let concated = Buffer.concat(cached);
						hasCache = false;
						cached = [];
						this.parseData(concated.toString("utf8"));
					} else this.parseData(b.toString("utf8"));
					start = i + 1;
				}
				if (start < len) {
					cached.push(start == 0 ? buf : buf.slice(start));
					hasCache = true;
				}
			};
			readable.on("data", onData);
			let onClose = () => {
				logger$53.warn("readable stream closed.");
			};
			readable.on("close", onClose);
			this.clean = () => {
				readable.off("data", onData);
				readable.off("close", onClose);
			};
		}
		parseData(str) {
			if (str.length == 0) return;
			let arr;
			try {
				arr = JSON.parse(str);
			} catch (e) {
				logger$53.error(`Invalid data from vim: ${str}`);
				return;
			}
			let [id, obj] = arr;
			if (id > 0) {
				logger$53.debug("received request:", id, obj);
				this.emit("request", id, obj);
			} else if (id == 0) {
				logger$53.debug("received notification:", obj);
				this.emit("notification", obj);
			} else {
				logger$53.debug("received response:", id, obj);
				this.emit("response", id, obj);
			}
		}
		response(requestId, data) {
			this.send([requestId, data || null]);
		}
		notify(event, data) {
			this.send([0, [event, data || null]]);
		}
		send(arr) {
			logger$53.debug("send to vim:", arr);
			this.writeable.write(JSON.stringify(arr) + "\n");
		}
		redraw(force) {
			this.send(["redraw", force ? "force" : ""]);
		}
		ex(cmd) {
			this.send(["ex", cmd]);
		}
		expr(expr, requestId) {
			if (typeof requestId === "number") {
				this.send([
					"expr",
					expr,
					requestId
				]);
				return;
			}
			this.send(["expr", expr]);
		}
		call(func, args, requestId) {
			if (typeof requestId === "number") {
				this.send([
					"call",
					func,
					args,
					requestId
				]);
				return;
			}
			this.send([
				"call",
				func,
				args
			]);
		}
		dispose() {
			if (typeof this.clean === "function") {
				this.clean();
				this.clean = void 0;
			}
			this.removeAllListeners();
		}
	};
}));
//#endregion
//#region src/neovim/transport/request.ts
var func$1, Request;
var init_request = __esmMin((() => {
	init_constants$1();
	func$1 = "coc#api#Call";
	Request = class {
		connection;
		cb;
		id;
		method;
		_direct = false;
		constructor(connection, cb, id) {
			this.connection = connection;
			this.cb = cb;
			this.id = id;
		}
		get isDirect() {
			return this._direct;
		}
		request(method, args = []) {
			this.method = method;
			this.connection.call(func$1, [method.slice(5), args], this.id);
		}
		call(method, args = []) {
			this._direct = true;
			this.method = "call";
			this.connection.call(method, args, this.id);
		}
		expr(expr) {
			this._direct = true;
			this.method = "expr";
			this.connection.expr(expr, this.id);
		}
		callback(client, err, result) {
			let { method, cb } = this;
			if (err) return cb([0, err.toString()]);
			switch (method) {
				case "nvim_list_wins":
				case "nvim_tabpage_list_wins": return cb(null, result.map((o) => client.createWindow(o)));
				case "nvim_tabpage_get_win":
				case "nvim_get_current_win":
				case "nvim_open_win": return cb(null, client.createWindow(result));
				case "nvim_list_bufs": return cb(null, result.map((o) => client.createBuffer(o)));
				case "nvim_win_get_buf":
				case "nvim_create_buf":
				case "nvim_get_current_buf": return cb(null, client.createBuffer(result));
				case "nvim_list_tabpages": return cb(null, result.map((o) => client.createTabpage(o)));
				case "nvim_win_get_tabpage":
				case "nvim_get_current_tabpage": return cb(null, client.createTabpage(result));
				default: return cb(null, result);
			}
		}
	};
}));
//#endregion
//#region src/neovim/transport/vim.ts
var notifyMethod, VimTransport;
var init_vim = __esmMin((() => {
	init_constants$1();
	init_base();
	init_connection();
	init_request();
	notifyMethod = "coc#api#Notify";
	VimTransport = class extends Transport$1 {
		pending = /* @__PURE__ */ new Map();
		nextRequestId = -1;
		connection;
		attached = false;
		client;
		/**
		* Cached error message
		*/
		errText = "";
		/**
		* Cached out message
		*/
		outText = "";
		constructor(logger) {
			super(logger, true);
		}
		attach(writer, reader, client) {
			let connection = this.connection = new Connection(reader, writer);
			this.attached = true;
			this.client = client;
			connection.on("request", (id, obj) => {
				let [method, args] = obj;
				this.emit("request", method, args, this.createResponse(method, id));
			});
			connection.on("notification", (obj) => {
				let [event, args] = obj;
				this.emit("notification", event.toString(), args);
			});
			connection.on("response", (id, obj) => {
				let req = this.pending.get(id);
				if (req) {
					this.pending.delete(id);
					let err = null;
					let result = null;
					if (req.isDirect) result = obj;
					else if (!Array.isArray(obj)) err = obj;
					else {
						err = obj[0];
						result = obj[1];
					}
					req.callback(this.client, err, result);
				}
			});
		}
		send(arr) {
			this.connection.send(arr);
		}
		detach() {
			if (!this.attached) return;
			this.attached = false;
			this.connection.dispose();
			for (let req of this.pending.values()) req.callback(this.client, "connection disconnected", null);
			this.pending.clear();
		}
		vimCommand(command, ...args) {
			switch (command) {
				case "expr":
					this.connection.expr(args[0]);
					break;
				case "call":
					this.connection.call(args[0], args[1]);
					break;
				case "ex":
					this.connection.ex(args[0]);
					break;
				case "redraw":
					this.connection.redraw(args[0]);
					break;
				default: throw new Error(`command "${command}" not exists`);
			}
		}
		vimRequest(command, args) {
			if (!this.attached) return Promise.reject(/* @__PURE__ */ new Error("transport disconnected"));
			Error.captureStackTrace(args);
			let id = this.nextRequestId;
			this.nextRequestId = this.nextRequestId - 1;
			return new Promise((resolve, reject) => {
				let req = new Request(this.connection, (err, res) => {
					if (!err && res === "ERROR") if (command === "eval") err = /* @__PURE__ */ new Error(`Invalid expression "${args[0]}", checkout v:errmsg`);
					else err = /* @__PURE__ */ new Error(`Error on function "${args[0]}", checkout v:errmsg"`);
					if (err) {
						err.stack = `Error: vim "${command}" error - ${err}\n` + args["stack"].split(/\r?\n/).slice(3).join("\n");
						this.client.logError(`Error on vim command "${command}"`, args, err);
						reject(err instanceof Error ? err : new Error(String(err)));
						return;
					}
					resolve(res);
				}, id);
				this.pending.set(id, req);
				if (command === "call") req.call(args[0], args[1]);
				else req.expr(args[0]);
			});
		}
		/**
		* Send request to vim
		*/
		request(method, args, cb) {
			if (!this.attached) return cb([0, "transport disconnected"]);
			let id = this.nextRequestId;
			this.nextRequestId = this.nextRequestId - 1;
			let req = new Request(this.connection, (err, res) => {
				cb(err, res);
			}, id);
			this.pending.set(id, req);
			req.request(method, args);
		}
		notify(method, args) {
			if (!this.attached) return;
			if (this.pauseLevel != 0) {
				let arr = this.paused.get(this.pauseLevel);
				if (arr) {
					arr.push([method, args]);
					return;
				}
			}
			let fname = method.slice(5);
			if (fname == "err_write") {
				this.errText = this.errText + args[0].toString();
				return;
			}
			if (fname == "out_write") {
				let msg = args[0].toString() || "";
				if (!msg.includes("\n")) this.outText = this.outText + msg;
				else {
					let text = this.outText + args[0].toString();
					this.outText = "";
					this.connection.call(notifyMethod, [fname, [text]]);
				}
				return;
			}
			if (fname == "err_writeln") {
				let text = this.errText + args[0].toString();
				this.errText = "";
				this.connection.call(notifyMethod, [fname, [text]]);
				return;
			}
			this.connection.call(notifyMethod, [fname, args]);
		}
		createResponse(_method, requestId) {
			let called = false;
			let { connection } = this;
			return { send: (resp, isError) => {
				if (called || !this.attached) return;
				called = true;
				let err = null;
				if (isError) err = typeof resp === "string" ? resp : resp.toString();
				connection.response(requestId, [err, isError ? null : resp]);
			} };
		}
	};
}));
//#endregion
//#region src/neovim/api/Neovim.ts
function getArgs(args) {
	if (!args) return [];
	if (Array.isArray(args)) return args;
	return [args];
}
var Neovim;
var init_Neovim = __esmMin((() => {
	init_constants$1();
	init_Base();
	Neovim = class extends BaseApi {
		prefix = "nvim_";
		get apiInfo() {
			return this.request(`${this.prefix}get_api_info`);
		}
		/** Get list of all buffers */
		get buffers() {
			return this.request(`${this.prefix}list_bufs`);
		}
		/** Get current buffer */
		get buffer() {
			return this.request(`${this.prefix}get_current_buf`);
		}
		/** Retrieves a scoped option depending on type of `this` */
		getOption(name) {
			return this.request(`${this.prefix}get_option_value`, [name, {}]);
		}
		setOption(name, value, isNotify) {
			return this[isNotify ? "notify" : "request"](`${this.prefix}set_option_value`, [
				name,
				value,
				{}
			]);
		}
		/** Set current buffer */
		async setBuffer(buffer) {
			await this.request(`${this.prefix}set_current_buf`, [buffer]);
		}
		get chans() {
			return this.request(`${this.prefix}list_chans`);
		}
		getChanInfo(chan) {
			return this.request(`${this.prefix}get_chan_info`, [chan]);
		}
		createNamespace(name = "") {
			name = name.startsWith("coc-") ? name : `coc-${name}`;
			return this.request(`${this.prefix}create_namespace`, [name]);
		}
		get namespaces() {
			return this.request(`${this.prefix}get_namespaces`, []);
		}
		get commands() {
			return this.getCommands();
		}
		getCommands(options = {}) {
			return this.request(`${this.prefix}get_commands`, [options]);
		}
		/** Get list of all tabpages */
		get tabpages() {
			return this.request(`${this.prefix}list_tabpages`);
		}
		/** Get current tabpage */
		get tabpage() {
			return this.request(`${this.prefix}get_current_tabpage`);
		}
		/** Set current tabpage */
		async setTabpage(tabpage) {
			await this.request(`${this.prefix}set_current_tabpage`, [tabpage]);
		}
		/** Get list of all windows */
		get windows() {
			return this.getWindows();
		}
		/** Get current window */
		get window() {
			return this.request(`${this.prefix}get_current_win`);
		}
		/** Get list of all windows */
		getWindows() {
			return this.request(`${this.prefix}list_wins`);
		}
		async setWindow(win) {
			await this.request(`${this.prefix}set_current_win`, [win]);
		}
		/** Get list of all runtime paths */
		get runtimePaths() {
			return this.request(`${this.prefix}list_runtime_paths`);
		}
		/** Set current directory */
		setDirectory(dir) {
			return this.request(`${this.prefix}set_current_dir`, [dir]);
		}
		/** Get current line. Always returns a Promise. */
		get line() {
			return this.getLine();
		}
		createNewBuffer(listed = false, scratch = false) {
			return this.request(`${this.prefix}create_buf`, [listed, scratch]);
		}
		openFloatWindow(buffer, enter, options) {
			return this.request(`${this.prefix}open_win`, [
				buffer,
				enter,
				options
			]);
		}
		getLine() {
			return this.request(`${this.prefix}get_current_line`);
		}
		/** Set current line */
		setLine(line) {
			return this.request(`${this.prefix}set_current_line`, [line]);
		}
		/** Gets keymap */
		getKeymap(mode) {
			return this.request(`${this.prefix}get_keymap`, [mode]);
		}
		/**
		* Add keymap by notification, replace keycodes for expr keymap enabled by default.
		*/
		setKeymap(mode, lhs, rhs, opts = {}) {
			let option = opts.expr ? Object.assign({ replace_keycodes: true }, opts) : opts;
			this.notify(`${this.prefix}set_keymap`, [
				mode,
				lhs,
				rhs,
				option
			]);
		}
		deleteKeymap(mode, lhs) {
			this.notify(`${this.prefix}del_keymap`, [mode, lhs]);
		}
		/** Gets current mode */
		get mode() {
			return this.request(`${this.prefix}get_mode`);
		}
		/** Gets map of defined colors */
		get colorMap() {
			return this.request(`${this.prefix}get_color_map`);
		}
		/** Get color by name */
		getColorByName(name) {
			return this.request(`${this.prefix}get_color_by_name`, [name]);
		}
		/** Get highlight by name or id */
		getHighlight(nameOrId, isRgb = true) {
			const functionName = typeof nameOrId === "string" ? "by_name" : "by_id";
			return this.request(`${this.prefix}get_hl_${functionName}`, [nameOrId, isRgb]);
		}
		getHighlightByName(name, isRgb = true) {
			return this.request(`${this.prefix}get_hl_by_name`, [name, isRgb]);
		}
		getHighlightById(id, isRgb = true) {
			return this.request(`${this.prefix}get_hl_by_id`, [id, isRgb]);
		}
		/** Delete current line in buffer */
		deleteCurrentLine() {
			return this.request(`${this.prefix}del_current_line`);
		}
		/**
		* Evaluates a VimL expression (:help expression). Dictionaries
		* and Lists are recursively expanded. On VimL error: Returns a
		* generic error; v:errmsg is not updated.
		*
		*/
		eval(expr) {
			return this.request(`${this.prefix}eval`, [expr]);
		}
		/**
		* Executes lua, it's possible neovim client does not support this
		*/
		lua(code, args = []) {
			return this.request(`${this.prefix}exec_lua`, [code, args]);
		}
		executeLua(code, args = []) {
			const _args = getArgs(args);
			return this.lua(code, _args);
		}
		callDictFunction(dict, fname, args = []) {
			const _args = getArgs(args);
			return this.request(`${this.prefix}call_dict_function`, [
				dict,
				fname,
				_args
			]);
		}
		callVim(fname, args = [], isNotify) {
			if (!isVim$1) return this.call(fname, args, isNotify);
			const _args = getArgs(args);
			if (isNotify) return this.transport.vimCommand("call", fname, _args);
			return this.transport.vimRequest("call", [fname, _args]);
		}
		/**
		* Use direct expr command on vim9
		*/
		evalVim(expr) {
			if (!isVim$1) return this.request(`${this.prefix}eval`, [expr]);
			return this.transport.vimRequest("eval", [expr]);
		}
		/**
		* Use direct ex on vim9
		*/
		exVim(arg) {
			if (!isVim$1) return this.notify(`${this.prefix}command`, [arg]);
			this.transport.vimCommand("ex", arg);
		}
		call(fname, args = [], isNotify) {
			const _args = getArgs(args);
			if (isNotify) {
				this.notify(`${this.prefix}call_function`, [fname, _args]);
				return null;
			}
			return this.request(`${this.prefix}call_function`, [fname, _args]);
		}
		callTimer(fname, args = [], isNotify) {
			const _args = getArgs(args);
			if (isNotify) {
				this.notify(`${this.prefix}call_function`, ["coc#util#timer", [fname, _args]]);
				return null;
			}
			if (isVim$1) {
				this.notify(`${this.prefix}call_function`, ["coc#util#timer", [fname, _args]]);
				return new Promise((resolve) => {
					setTimeout(() => {
						resolve(null);
					}, 20);
				});
			}
			return this.request(`${this.prefix}call_function`, ["coc#util#timer", [fname, _args]]);
		}
		callAsync(fname, args = []) {
			const _args = getArgs(args);
			return this.client.sendAsyncRequest(fname, _args);
		}
		/** Alias for `call` */
		callFunction(fname, args = []) {
			return this.call(fname, args);
		}
		/** Call Atomic calls */
		callAtomic(calls) {
			return this.request(`${this.prefix}call_atomic`, [calls]);
		}
		command(arg, isNotify) {
			if (isNotify) {
				this.notify(`${this.prefix}command`, [arg]);
				return null;
			}
			return this.request(`${this.prefix}command`, [arg]);
		}
		/**
		* Runs a command and returns output.
		* @deprecated Use exec instead.
		*/
		commandOutput(arg) {
			return this.request(`${this.prefix}command_output`, [arg]);
		}
		/**
		* Executes Vimscript (multiline block of Ex-commands), like
		* anonymous |:source|
		*/
		exec(src, output = false) {
			return this.request(`${this.prefix}exec`, [src, output]);
		}
		/** Gets a v: variable */
		getVvar(name) {
			return this.request(`${this.prefix}get_vvar`, [name]);
		}
		/** feedKeys */
		feedKeys(keys, mode, escapeCsi) {
			return this.request(`${this.prefix}feedkeys`, [
				keys,
				mode,
				escapeCsi
			]);
		}
		/** Sends input keys */
		input(keys) {
			return this.request(`${this.prefix}input`, [keys]);
		}
		/**
		* Send mouse event from GUI. Neovim only.
		* @param {MouseButton} button Mouse button: one of "left", "right", "middle", "wheel", "move".
		* @param {ButtonAction} action For ordinary buttons, one of "press", "drag", "release".
		* @param {string} modifier String of modifiers each represented by a single char.
		* @param {number} row Mouse row-position (zero-based, like redraw events)
		* @param {number} col Mouse column-position (zero-based, like redraw events)
		* @param {number} grid Grid number if the client uses |ui-multigrid|, else 0.
		* @returns {Promise<null>}
		*/
		inputMouse(button, action, modifier, row, col, grid = 0) {
			return this.request(`${this.prefix}input_mouse`, [
				button,
				action,
				modifier,
				grid,
				row,
				col
			]);
		}
		/**
		* Parse a VimL Expression
		*
		* TODO: return type, see :help
		*/
		parseExpression(expr, flags, highlight) {
			return this.request(`${this.prefix}parse_expression`, [
				expr,
				flags,
				highlight
			]);
		}
		getProc(pid) {
			return this.request(`${this.prefix}get_proc`, [pid]);
		}
		getProcChildren(pid) {
			return this.request(`${this.prefix}get_proc_children`, [pid]);
		}
		/** Replace term codes */
		replaceTermcodes(str, fromPart, doIt, special) {
			return this.request(`${this.prefix}replace_termcodes`, [
				str,
				fromPart,
				doIt,
				special
			]);
		}
		/** Gets width of string */
		strWidth(str) {
			return this.request(`${this.prefix}strwidth`, [str]);
		}
		/** Write to output buffer */
		outWrite(str) {
			this.notify(`${this.prefix}out_write`, [str]);
		}
		outWriteLine(str) {
			this.outWrite(`${str}\n`);
		}
		/** Write to error buffer */
		errWrite(str) {
			this.notify(`${this.prefix}err_write`, [str]);
		}
		/** Write to error buffer */
		errWriteLine(str) {
			this.notify(`${this.prefix}err_writeln`, [str]);
		}
		get uis() {
			return this.request(`${this.prefix}list_uis`);
		}
		uiAttach(width, height, options) {
			return this.request(`${this.prefix}ui_attach`, [
				width,
				height,
				options
			]);
		}
		uiDetach() {
			return this.request(`${this.prefix}ui_detach`, []);
		}
		uiTryResize(width, height) {
			return this.request(`${this.prefix}ui_try_resize`, [width, height]);
		}
		/** Set UI Option */
		uiSetOption(name, value) {
			return this.request(`${this.prefix}ui_set_option`, [name, value]);
		}
		/** Subscribe to nvim event broadcasts */
		subscribe(event) {
			return this.request(`${this.prefix}subscribe`, [event]);
		}
		/** Unsubscribe to nvim event broadcasts */
		unsubscribe(event) {
			return this.request(`${this.prefix}unsubscribe`, [event]);
		}
		createAugroup(name, option = {}, isNotify = false) {
			if (!isNotify) return this.request(`${this.prefix}create_augroup`, [name, option]);
			this.notify(`${this.prefix}create_augroup`, [name, option]);
		}
		createAutocmd(event, option = {}, isNotify = false) {
			if (!isNotify) return this.request(`${this.prefix}create_autocmd`, [event, option]);
			this.notify(`${this.prefix}create_autocmd`, [event, option]);
		}
		deleteAutocmd(id) {
			this.notify(`${this.prefix}del_autocmd`, [id]);
		}
		setClientInfo(name, version, type, methods, attributes) {
			this.notify(`${this.prefix}set_client_info`, [
				name,
				version,
				type,
				methods,
				attributes
			]);
		}
		/** Quit nvim */
		async quit() {
			this.command("qa!", true);
			if (this.transport) this.transport.detach();
		}
	};
}));
//#endregion
//#region src/neovim/api/client.ts
/**
* Handles attaching transport
*/
function applyMixins(derivedCtor, constructors) {
	constructors.forEach((baseCtor) => {
		Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
			Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null));
		});
	});
}
var functionsOnVim, AsyncResponse, NeovimClient;
var init_client$1 = __esmMin((() => {
	init_nvim();
	init_vim();
	init_constants$1();
	init_Buffer();
	init_Neovim();
	init_Tabpage();
	init_Window();
	functionsOnVim = [
		"nvim_buf_attach",
		"nvim_get_mode",
		"nvim_list_runtime_paths",
		"nvim_win_del_var",
		"nvim_create_buf",
		"nvim_exec",
		"nvim_tabpage_list_wins",
		"nvim_buf_del_var",
		"nvim_buf_get_mark",
		"nvim_tabpage_set_var",
		"nvim_create_namespace",
		"nvim_win_get_position",
		"nvim_win_set_height",
		"nvim_call_atomic",
		"nvim_buf_detach",
		"nvim_buf_line_count",
		"nvim_set_current_buf",
		"nvim_set_current_dir",
		"nvim_get_var",
		"nvim_del_current_line",
		"nvim_win_set_width",
		"nvim_out_write",
		"nvim_win_is_valid",
		"nvim_set_current_win",
		"nvim_get_current_tabpage",
		"nvim_tabpage_is_valid",
		"nvim_set_var",
		"nvim_win_get_height",
		"nvim_win_get_buf",
		"nvim_win_get_width",
		"nvim_buf_set_name",
		"nvim_subscribe",
		"nvim_get_current_win",
		"nvim_feedkeys",
		"nvim_get_vvar",
		"nvim_tabpage_get_number",
		"nvim_get_current_buf",
		"nvim_win_get_option",
		"nvim_win_get_cursor",
		"nvim_get_current_line",
		"nvim_win_get_var",
		"nvim_buf_get_var",
		"nvim_set_current_tabpage",
		"nvim_buf_clear_namespace",
		"nvim_err_write",
		"nvim_del_var",
		"nvim_call_dict_function",
		"nvim_set_current_line",
		"nvim_get_api_info",
		"nvim_unsubscribe",
		"nvim_get_option",
		"nvim_list_wins",
		"nvim_set_client_info",
		"nvim_win_set_cursor",
		"nvim_win_set_option",
		"nvim_eval",
		"nvim_tabpage_get_var",
		"nvim_buf_get_option",
		"nvim_tabpage_del_var",
		"nvim_buf_get_name",
		"nvim_list_bufs",
		"nvim_win_set_buf",
		"nvim_win_close",
		"nvim_command_output",
		"nvim_command",
		"nvim_tabpage_get_win",
		"nvim_win_set_var",
		"nvim_buf_add_highlight",
		"nvim_buf_set_var",
		"nvim_win_get_number",
		"nvim_strwidth",
		"nvim_buf_set_lines",
		"nvim_err_writeln",
		"nvim_buf_set_option",
		"nvim_list_tabpages",
		"nvim_set_option",
		"nvim_buf_get_lines",
		"nvim_buf_get_changedtick",
		"nvim_win_get_tabpage",
		"nvim_call_function",
		"nvim_buf_is_valid"
	];
	AsyncResponse = class {
		requestId;
		cb;
		finished = false;
		constructor(requestId, cb) {
			this.requestId = requestId;
			this.cb = cb;
		}
		finish(err, res) {
			if (this.finished) return;
			this.finished = true;
			if (err) {
				this.cb(new Error(err));
				return;
			}
			this.cb(null, res);
		}
	};
	NeovimClient = class extends Neovim {
		logger;
		isVim;
		_isReady;
		requestId = 1;
		responses = /* @__PURE__ */ new Map();
		_channelId;
		attachedBuffers = /* @__PURE__ */ new Map();
		_transport;
		constructor(logger, isVim) {
			super({});
			this.logger = logger;
			this.isVim = isVim;
			const transport = isVim ? new VimTransport(logger) : new NvimTransport(logger);
			Object.defineProperty(this, "_transport", {
				enumerable: false,
				get: () => {
					return transport;
				}
			});
			this.handleRequest = this.handleRequest.bind(this);
			this.handleNotification = this.handleNotification.bind(this);
		}
		get transport() {
			return this._transport;
		}
		echoError(msg) {
			let prefix = "[coc.nvim] ";
			if (msg instanceof Error) {
				if (!isTester) this.errWriteLine(prefix + msg.message + " use :CocOpenLog for details");
				this.logError(msg.message || "Unknown error", msg);
			} else {
				if (!isTester) this.errWriteLine(prefix + msg);
				this.logError(msg.toString(), /* @__PURE__ */ new Error());
			}
		}
		logError(msg, ...args) {
			if (isTester) console.error(msg, ...args);
			if (!this.logger) return;
			this.logger.error(msg, ...args);
		}
		createBuffer(id) {
			return new Buffer$2({
				data: id,
				client: this
			});
		}
		createWindow(id) {
			return new Window$1({
				data: id,
				client: this
			});
		}
		createTabpage(id) {
			return new Tabpage({
				data: id,
				client: this
			});
		}
		/**
		* Invoke redraw on vim, must called when screen need update.
		*/
		redrawVim(force) {
			if (!this.isVim) return;
			this.transport.notify("nvim_command", [`redraw${force ? "!" : ""}`]);
		}
		/** Attaches msgpack to read/write streams * */
		attach({ reader, writer }, requestApi = true) {
			this.transport.attach(writer, reader, this);
			this.transport.on("request", this.handleRequest);
			this.transport.on("notification", this.handleNotification);
			this.transport.on("detach", () => {
				this.emit("disconnect");
				this.transport.removeAllListeners("request");
				this.transport.removeAllListeners("notification");
				this.transport.removeAllListeners("detach");
			});
			if (requestApi) this._isReady = this.generateApi().catch((err) => {
				this.logger.error(err);
				return false;
			});
			else {
				this._channelId = -1;
				this._isReady = Promise.resolve(true);
			}
		}
		detach() {
			this.attachedBuffers.clear();
			this.transport.detach();
			this.removeAllListeners();
		}
		get channelId() {
			return this._isReady.then(() => {
				return this._channelId;
			});
		}
		handleRequest(method, args, resp) {
			this.emit("request", method, args, resp);
		}
		sendAsyncRequest(method, args) {
			let id = this.requestId;
			this.requestId = id + 1;
			this.notify("nvim_call_function", ["coc#rpc#async_request", [
				id,
				method,
				args || []
			]]);
			return new Promise((resolve, reject) => {
				let response = new AsyncResponse(id, (err, res) => {
					if (err) return reject(err);
					resolve(res);
				});
				this.responses.set(id, response);
			});
		}
		handleNotification(method, args) {
			if (method.endsWith("_event")) {
				if (method == "vim_buf_change_event") {
					const id = args[0];
					if (!this.attachedBuffers.has(id)) return;
					(this.attachedBuffers.get(id).get("vim_lines") || []).forEach((cb) => cb(...args));
					return;
				}
				if (method.startsWith("nvim_buf_")) {
					const shortName = method.replace(/nvim_buf_(.*)_event/, "$1");
					const { id } = args[0];
					if (!this.attachedBuffers.has(id)) return;
					(this.attachedBuffers.get(id).get(shortName) || []).forEach((cb) => cb(...args));
					if (shortName === "detach") this.attachedBuffers.delete(id);
					return;
				}
				if (method == "nvim_async_request_event") {
					const [id, method, arr] = args;
					this.handleRequest(method, arr, { send: (resp, isError) => {
						this.notify("nvim_call_function", ["coc#rpc#async_response", [
							id,
							resp,
							isError
						]]);
					} });
					return;
				}
				if (method == "nvim_async_response_event") {
					const [id, err, res] = args;
					const response = this.responses.get(id);
					if (!response) {
						this.logError(`Response not found for request ${id}`);
						return;
					}
					this.responses.delete(id);
					response.finish(err, res);
					return;
				}
				if (method === "nvim_error_event") {
					this.logger.error(`Error event from nvim:`, args[0], args[1]);
					this.emit("vim_error", args[1]);
					return;
				}
				this.logger.warn(`Unhandled event: ${method}`, args);
			} else this.emit("notification", method, args);
		}
		requestApi() {
			return new Promise((resolve, reject) => {
				this.transport.request("nvim_get_api_info", [], (err, res) => {
					if (err) reject(new Error(Array.isArray(err) ? err[1] : err.message || err.toString()));
					else resolve(res);
				});
			});
		}
		async generateApi() {
			const [channelId, metadata] = await this.requestApi();
			this._channelId = channelId;
			return true;
		}
		attachBufferEvent(bufnr, eventName, cb) {
			const bufferMap = this.attachedBuffers.get(bufnr) || /* @__PURE__ */ new Map();
			const cbs = bufferMap.get(eventName) || [];
			if (cbs.includes(cb)) return;
			cbs.push(cb);
			bufferMap.set(eventName, cbs);
			this.attachedBuffers.set(bufnr, bufferMap);
		}
		/**
		* Returns `true` if buffer should be detached
		*/
		detachBufferEvent(bufnr, eventName, cb) {
			const bufferMap = this.attachedBuffers.get(bufnr);
			if (!bufferMap || !bufferMap.has(eventName)) return;
			const handlers = bufferMap.get(eventName).filter((handler) => handler !== cb);
			bufferMap.set(eventName, handlers);
		}
		pauseNotification() {
			let o = {};
			Error.captureStackTrace(o);
			if (this.transport.pauseLevel != 0) this.logError(`Nested nvim.pauseNotification() detected, please avoid it:`, o.stack);
			this.transport.pauseNotification();
			process.nextTick(() => {
				if (this.transport.pauseLevel > 0) this.logError(`resumeNotification not called within same tick:`, o.stack);
			});
		}
		resumeNotification(redrawVim, notify) {
			if (this.isVim && redrawVim) this.transport.notify("nvim_command", ["redraw"]);
			if (notify) {
				this.transport.resumeNotification(true);
				return Promise.resolve(null);
			}
			return this.transport.resumeNotification();
		}
		/**
		* @deprecated
		*/
		hasFunction(name) {
			if (!this.isVim) return true;
			return functionsOnVim.includes(name);
		}
	};
	applyMixins(NeovimClient, [events.EventEmitter]);
}));
//#endregion
//#region src/neovim/api/index.ts
var init_api = __esmMin((() => {
	init_client$1();
	init_Buffer();
	init_Window();
	init_Tabpage();
}));
//#endregion
//#region src/neovim/attach/attach.ts
function attach({ reader: _reader, writer: _writer, proc, socket }, logger = null, requestApi = true) {
	let writer;
	let reader;
	let neovim;
	if (!logger) logger = nullLogger;
	if (socket) {
		const client = (0, net.createConnection)(socket);
		writer = client;
		reader = client;
		client.once("close", () => {
			neovim.detach();
		});
	} else if (_reader && _writer) {
		writer = _writer;
		reader = _reader;
	} else if (proc) {
		writer = proc.stdin;
		reader = proc.stdout;
		proc.once("disconnect", () => {
			neovim.detach();
		});
	}
	writer.on("error", (err) => {
		if (err.code == "EPIPE") neovim.detach();
	});
	if (writer && reader) {
		neovim = new NeovimClient(logger, isVim$1);
		neovim.attach({
			writer,
			reader
		}, requestApi);
		return neovim;
	}
	throw new Error("Invalid arguments, could not attach");
}
var init_attach$1 = __esmMin((() => {
	init_constants$1();
	init_logger$1();
	init_client$1();
}));
//#endregion
//#region src/neovim/index.ts
var init_neovim = __esmMin((() => {
	init_api();
	init_attach$1();
}));
//#endregion
//#region src/util/errors.ts
function assert$3(condition) {
	if (!condition) throw new BugIndicatingError("Assertion Failed");
}
/**
* Checks if the given error is a promise in canceled state
*/
function isCancellationError(error) {
	if (error instanceof CancellationError) return true;
	return error instanceof Error && error.name === canceledName && error.message === canceledName;
}
function shouldIgnore(err) {
	if (isCancellationError(err)) return true;
	if (err instanceof Error && err.message.includes("transport disconnected")) return true;
	return false;
}
function onUnexpectedError(e) {
	if (shouldIgnore(e)) return;
	if (e.stack) throw new Error(e.message + "\n\n" + e.stack);
	else throw e;
}
function notLoaded(uri) {
	return /* @__PURE__ */ new Error(`File ${uri} not loaded`);
}
function illegalArgument(name) {
	if (name) return /* @__PURE__ */ new Error(`Illegal argument: ${name}`);
	else return /* @__PURE__ */ new Error("Illegal argument");
}
function directoryNotExists(dir) {
	return /* @__PURE__ */ new Error(`Directory ${dir} not exists`);
}
function fileExists(filepath) {
	return /* @__PURE__ */ new Error(`File ${filepath} already exists`);
}
function fileNotExists(filepath) {
	return /* @__PURE__ */ new Error(`File ${filepath} not exists`);
}
function shouldNotAsync(method) {
	return /* @__PURE__ */ new Error(`${method} should not be called in an asynchronize manner`);
}
function badScheme(uri) {
	return /* @__PURE__ */ new Error(`Change of ${uri} not supported`);
}
var canceledName, CancellationError, BugIndicatingError;
var init_errors = __esmMin((() => {
	canceledName = "Canceled";
	CancellationError = class extends Error {
		constructor() {
			super(canceledName);
			this.name = this.message;
		}
	};
	BugIndicatingError = class BugIndicatingError extends Error {
		constructor(message) {
			super(message);
			Object.setPrototypeOf(this, BugIndicatingError.prototype);
			debugger;
		}
	};
}));
//#endregion
//#region node_modules/vscode-languageserver-types/lib/esm/main.js
var main_exports = /* @__PURE__ */ __exportAll({
	AnnotatedTextEdit: () => AnnotatedTextEdit,
	ApplyKind: () => ApplyKind,
	ChangeAnnotation: () => ChangeAnnotation,
	ChangeAnnotationIdentifier: () => ChangeAnnotationIdentifier,
	CodeAction: () => CodeAction,
	CodeActionContext: () => CodeActionContext,
	CodeActionKind: () => CodeActionKind,
	CodeActionTag: () => CodeActionTag,
	CodeActionTriggerKind: () => CodeActionTriggerKind,
	CodeDescription: () => CodeDescription,
	CodeLens: () => CodeLens,
	Color: () => Color,
	ColorInformation: () => ColorInformation,
	ColorPresentation: () => ColorPresentation,
	Command: () => Command,
	CompletionItem: () => CompletionItem,
	CompletionItemKind: () => CompletionItemKind,
	CompletionItemLabelDetails: () => CompletionItemLabelDetails,
	CompletionItemTag: () => CompletionItemTag,
	CompletionList: () => CompletionList,
	CreateFile: () => CreateFile,
	DeleteFile: () => DeleteFile,
	Diagnostic: () => Diagnostic,
	DiagnosticRelatedInformation: () => DiagnosticRelatedInformation,
	DiagnosticSeverity: () => DiagnosticSeverity,
	DiagnosticTag: () => DiagnosticTag,
	DocumentHighlight: () => DocumentHighlight,
	DocumentHighlightKind: () => DocumentHighlightKind,
	DocumentLink: () => DocumentLink,
	DocumentSymbol: () => DocumentSymbol,
	DocumentUri: () => DocumentUri,
	EOL: () => EOL,
	FoldingRange: () => FoldingRange,
	FoldingRangeKind: () => FoldingRangeKind$2,
	FormattingOptions: () => FormattingOptions,
	Hover: () => Hover,
	InlayHint: () => InlayHint,
	InlayHintKind: () => InlayHintKind,
	InlayHintLabelPart: () => InlayHintLabelPart,
	InlineCompletionContext: () => InlineCompletionContext$1,
	InlineCompletionItem: () => InlineCompletionItem$1,
	InlineCompletionList: () => InlineCompletionList,
	InlineCompletionTriggerKind: () => InlineCompletionTriggerKind,
	InlineValueContext: () => InlineValueContext,
	InlineValueEvaluatableExpression: () => InlineValueEvaluatableExpression,
	InlineValueText: () => InlineValueText,
	InlineValueVariableLookup: () => InlineValueVariableLookup,
	InsertReplaceEdit: () => InsertReplaceEdit,
	InsertTextFormat: () => InsertTextFormat,
	InsertTextMode: () => InsertTextMode,
	LanguageKind: () => LanguageKind,
	Location: () => Location,
	LocationLink: () => LocationLink,
	MarkedString: () => MarkedString,
	MarkupContent: () => MarkupContent,
	MarkupKind: () => MarkupKind,
	OptionalVersionedTextDocumentIdentifier: () => OptionalVersionedTextDocumentIdentifier,
	ParameterInformation: () => ParameterInformation,
	Position: () => Position,
	Range: () => Range,
	RenameFile: () => RenameFile,
	SelectedCompletionInfo: () => SelectedCompletionInfo,
	SelectionRange: () => SelectionRange,
	SemanticTokenModifiers: () => SemanticTokenModifiers,
	SemanticTokenTypes: () => SemanticTokenTypes,
	SemanticTokens: () => SemanticTokens$1,
	SignatureInformation: () => SignatureInformation,
	SnippetTextEdit: () => SnippetTextEdit,
	StringValue: () => StringValue,
	SymbolInformation: () => SymbolInformation,
	SymbolKind: () => SymbolKind,
	SymbolTag: () => SymbolTag,
	TextDocument: () => TextDocument$1,
	TextDocumentEdit: () => TextDocumentEdit,
	TextDocumentIdentifier: () => TextDocumentIdentifier,
	TextDocumentItem: () => TextDocumentItem,
	TextEdit: () => TextEdit,
	URI: () => URI$1,
	VersionedTextDocumentIdentifier: () => VersionedTextDocumentIdentifier,
	WorkspaceChange: () => WorkspaceChange,
	WorkspaceEdit: () => WorkspaceEdit,
	WorkspaceFolder: () => WorkspaceFolder,
	WorkspaceSymbol: () => WorkspaceSymbol,
	integer: () => integer,
	uinteger: () => uinteger
});
var DocumentUri, URI$1, integer, uinteger, Position, Range, Location, LocationLink, Color, ColorInformation, ColorPresentation, FoldingRangeKind$2, FoldingRange, DiagnosticRelatedInformation, DiagnosticSeverity, DiagnosticTag, CodeDescription, Diagnostic, Command, TextEdit, ChangeAnnotation, ChangeAnnotationIdentifier, AnnotatedTextEdit, TextDocumentEdit, CreateFile, RenameFile, DeleteFile, WorkspaceEdit, TextEditChangeImpl, SnippetTextEdit, ChangeAnnotations, WorkspaceChange, TextDocumentIdentifier, VersionedTextDocumentIdentifier, OptionalVersionedTextDocumentIdentifier, LanguageKind, TextDocumentItem, MarkupKind, MarkupContent, CompletionItemKind, InsertTextFormat, CompletionItemTag, InsertReplaceEdit, InsertTextMode, ApplyKind, CompletionItemLabelDetails, CompletionItem, CompletionList, MarkedString, Hover, ParameterInformation, SignatureInformation, DocumentHighlightKind, DocumentHighlight, SymbolKind, SymbolTag, SymbolInformation, WorkspaceSymbol, DocumentSymbol, CodeActionKind, CodeActionTriggerKind, CodeActionContext, CodeActionTag, CodeAction, CodeLens, FormattingOptions, DocumentLink, SelectionRange, SemanticTokenTypes, SemanticTokenModifiers, SemanticTokens$1, InlineValueText, InlineValueVariableLookup, InlineValueEvaluatableExpression, InlineValueContext, InlayHintKind, InlayHintLabelPart, InlayHint, StringValue, InlineCompletionItem$1, InlineCompletionList, InlineCompletionTriggerKind, SelectedCompletionInfo, InlineCompletionContext$1, WorkspaceFolder, EOL, TextDocument$1, FullTextDocument$1, Is;
var init_main$2 = __esmMin((() => {
	(function(DocumentUri) {
		function is(value) {
			return typeof value === "string";
		}
		DocumentUri.is = is;
	})(DocumentUri || (DocumentUri = {}));
	(function(URI) {
		function is(value) {
			return typeof value === "string";
		}
		URI.is = is;
	})(URI$1 || (URI$1 = {}));
	(function(integer) {
		integer.MIN_VALUE = -2147483648;
		integer.MAX_VALUE = 2147483647;
		function is(value) {
			return typeof value === "number" && integer.MIN_VALUE <= value && value <= integer.MAX_VALUE;
		}
		integer.is = is;
	})(integer || (integer = {}));
	(function(uinteger) {
		uinteger.MIN_VALUE = 0;
		uinteger.MAX_VALUE = 2147483647;
		function is(value) {
			return typeof value === "number" && uinteger.MIN_VALUE <= value && value <= uinteger.MAX_VALUE;
		}
		uinteger.is = is;
	})(uinteger || (uinteger = {}));
	(function(Position) {
		/**
		* Creates a new Position literal from the given line and character.
		* @param line The position's line.
		* @param character The position's character.
		*/
		function create(line, character) {
			if (line === Number.MAX_VALUE) line = uinteger.MAX_VALUE;
			if (character === Number.MAX_VALUE) character = uinteger.MAX_VALUE;
			return {
				line,
				character
			};
		}
		Position.create = create;
		/**
		* Checks whether the given literal conforms to the {@link Position} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);
		}
		Position.is = is;
	})(Position || (Position = {}));
	(function(Range) {
		function create(one, two, three, four) {
			if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) return {
				start: Position.create(one, two),
				end: Position.create(three, four)
			};
			else if (Position.is(one) && Position.is(two)) return {
				start: one,
				end: two
			};
			else throw new Error(`Range#create called with invalid arguments[${one}, ${two}, ${three}, ${four}]`);
		}
		Range.create = create;
		/**
		* Checks whether the given literal conforms to the {@link Range} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
		}
		Range.is = is;
	})(Range || (Range = {}));
	(function(Location) {
		/**
		* Creates a Location literal.
		* @param uri The location's uri.
		* @param range The location's range.
		*/
		function create(uri, range) {
			return {
				uri,
				range
			};
		}
		Location.create = create;
		/**
		* Checks whether the given literal conforms to the {@link Location} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
		}
		Location.is = is;
	})(Location || (Location = {}));
	(function(LocationLink) {
		/**
		* Creates a LocationLink literal.
		* @param targetUri The definition's uri.
		* @param targetRange The full range of the definition.
		* @param targetSelectionRange The span of the symbol definition at the target.
		* @param originSelectionRange The span of the symbol being defined in the originating source file.
		*/
		function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
			return {
				targetUri,
				targetRange,
				targetSelectionRange,
				originSelectionRange
			};
		}
		LocationLink.create = create;
		/**
		* Checks whether the given literal conforms to the {@link LocationLink} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri) && Range.is(candidate.targetSelectionRange) && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
		}
		LocationLink.is = is;
	})(LocationLink || (LocationLink = {}));
	(function(Color) {
		/**
		* Creates a new Color literal.
		*/
		function create(red, green, blue, alpha) {
			return {
				red,
				green,
				blue,
				alpha
			};
		}
		Color.create = create;
		/**
		* Checks whether the given literal conforms to the {@link Color} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1) && Is.numberRange(candidate.green, 0, 1) && Is.numberRange(candidate.blue, 0, 1) && Is.numberRange(candidate.alpha, 0, 1);
		}
		Color.is = is;
	})(Color || (Color = {}));
	(function(ColorInformation) {
		/**
		* Creates a new ColorInformation literal.
		*/
		function create(range, color) {
			return {
				range,
				color
			};
		}
		ColorInformation.create = create;
		/**
		* Checks whether the given literal conforms to the {@link ColorInformation} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);
		}
		ColorInformation.is = is;
	})(ColorInformation || (ColorInformation = {}));
	(function(ColorPresentation) {
		/**
		* Creates a new ColorInformation literal.
		*/
		function create(label, textEdit, additionalTextEdits) {
			return {
				label,
				textEdit,
				additionalTextEdits
			};
		}
		ColorPresentation.create = create;
		/**
		* Checks whether the given literal conforms to the {@link ColorInformation} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
		}
		ColorPresentation.is = is;
	})(ColorPresentation || (ColorPresentation = {}));
	(function(FoldingRangeKind) {
		/**
		* Folding range for a comment
		*/
		FoldingRangeKind.Comment = "comment";
		/**
		* Folding range for an import or include
		*/
		FoldingRangeKind.Imports = "imports";
		/**
		* Folding range for a region (e.g. `#region`)
		*/
		FoldingRangeKind.Region = "region";
	})(FoldingRangeKind$2 || (FoldingRangeKind$2 = {}));
	(function(FoldingRange) {
		/**
		* Creates a new FoldingRange literal.
		*/
		function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {
			const result = {
				startLine,
				endLine
			};
			if (Is.defined(startCharacter)) result.startCharacter = startCharacter;
			if (Is.defined(endCharacter)) result.endCharacter = endCharacter;
			if (Is.defined(kind)) result.kind = kind;
			if (Is.defined(collapsedText)) result.collapsedText = collapsedText;
			return result;
		}
		FoldingRange.create = create;
		/**
		* Checks whether the given literal conforms to the {@link FoldingRange} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
		}
		FoldingRange.is = is;
	})(FoldingRange || (FoldingRange = {}));
	(function(DiagnosticRelatedInformation) {
		/**
		* Creates a new DiagnosticRelatedInformation literal.
		*/
		function create(location, message) {
			return {
				location,
				message
			};
		}
		DiagnosticRelatedInformation.create = create;
		/**
		* Checks whether the given literal conforms to the {@link DiagnosticRelatedInformation} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
		}
		DiagnosticRelatedInformation.is = is;
	})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
	(function(DiagnosticSeverity) {
		/**
		* Reports an error.
		*/
		DiagnosticSeverity.Error = 1;
		/**
		* Reports a warning.
		*/
		DiagnosticSeverity.Warning = 2;
		/**
		* Reports an information.
		*/
		DiagnosticSeverity.Information = 3;
		/**
		* Reports a hint.
		*/
		DiagnosticSeverity.Hint = 4;
	})(DiagnosticSeverity || (DiagnosticSeverity = {}));
	(function(DiagnosticTag) {
		/**
		* Unused or unnecessary code.
		*
		* Clients are allowed to render diagnostics with this tag faded out instead of having
		* an error squiggle.
		*/
		DiagnosticTag.Unnecessary = 1;
		/**
		* Deprecated or obsolete code.
		*
		* Clients are allowed to rendered diagnostics with this tag strike through.
		*/
		DiagnosticTag.Deprecated = 2;
	})(DiagnosticTag || (DiagnosticTag = {}));
	(function(CodeDescription) {
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Is.string(candidate.href);
		}
		CodeDescription.is = is;
	})(CodeDescription || (CodeDescription = {}));
	(function(Diagnostic) {
		/**
		* Creates a new Diagnostic literal.
		*/
		function create(range, message, severity, code, source, relatedInformation) {
			const result = {
				range,
				message
			};
			if (Is.defined(severity)) result.severity = severity;
			if (Is.defined(code)) result.code = code;
			if (Is.defined(source)) result.source = source;
			if (Is.defined(relatedInformation)) result.relatedInformation = relatedInformation;
			return result;
		}
		Diagnostic.create = create;
		/**
		* Checks whether the given literal conforms to the {@link Diagnostic} interface.
		*/
		function is(value) {
			var _a;
			const candidate = value;
			return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.message) || MarkupContent.is(candidate.message)) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.undefined(candidate.codeDescription) || Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
		}
		Diagnostic.is = is;
		/**
		* Checks whether the given diagnostic's message conforms to the 3.17.0
		* version of the protocol where the message is a string.
		*
		* @param value the diagnostic
		* @returns true if the diagnostic's message is a string, false otherwise.
		*/
		function is3_17(value) {
			return Is.string(value.message);
		}
		Diagnostic.is3_17 = is3_17;
		/**
		* Gets the message string of a diagnostic. If the message is already a
		* string, it is returned as is. If the message is a MarkupContent,
		* the value of the MarkupContent is returned. Otherwise an error is thrown.
		*
		* @param diagnostic the diagnostic to get the message string from.
		* @returns the message string of the given diagnostic.
		*/
		function getMessageString(diagnostic) {
			if (Is.string(diagnostic.message)) return diagnostic.message;
			else if (MarkupContent.is(diagnostic.message)) return diagnostic.message.value;
			else throw new Error(`Unknown message type ${typeof diagnostic.message}`);
		}
		Diagnostic.getMessageString = getMessageString;
	})(Diagnostic || (Diagnostic = {}));
	(function(Command) {
		/**
		* Creates a new Command literal.
		*/
		function create(title, command, ...args) {
			const result = {
				title,
				command
			};
			if (Is.defined(args) && args.length > 0) result.arguments = args;
			return result;
		}
		Command.create = create;
		/**
		* Checks whether the given literal conforms to the {@link Command} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Is.string(candidate.title) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip)) && Is.string(candidate.command);
		}
		Command.is = is;
	})(Command || (Command = {}));
	(function(TextEdit) {
		/**
		* Creates a replace text edit.
		* @param range The range of text to be replaced.
		* @param newText The new text.
		*/
		function replace(range, newText) {
			return {
				range,
				newText
			};
		}
		TextEdit.replace = replace;
		/**
		* Creates an insert text edit.
		* @param position The position to insert the text at.
		* @param newText The text to be inserted.
		*/
		function insert(position, newText) {
			return {
				range: {
					start: position,
					end: position
				},
				newText
			};
		}
		TextEdit.insert = insert;
		/**
		* Creates a delete text edit.
		* @param range The range of text to be deleted.
		*/
		function del(range) {
			return {
				range,
				newText: ""
			};
		}
		TextEdit.del = del;
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range.is(candidate.range);
		}
		TextEdit.is = is;
	})(TextEdit || (TextEdit = {}));
	(function(ChangeAnnotation) {
		function create(label, needsConfirmation, description) {
			const result = { label };
			if (needsConfirmation !== void 0) result.needsConfirmation = needsConfirmation;
			if (description !== void 0) result.description = description;
			return result;
		}
		ChangeAnnotation.create = create;
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === void 0) && (Is.string(candidate.description) || candidate.description === void 0);
		}
		ChangeAnnotation.is = is;
	})(ChangeAnnotation || (ChangeAnnotation = {}));
	(function(ChangeAnnotationIdentifier) {
		function is(value) {
			const candidate = value;
			return Is.string(candidate);
		}
		ChangeAnnotationIdentifier.is = is;
	})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));
	(function(AnnotatedTextEdit) {
		/**
		* Creates an annotated replace text edit.
		*
		* @param range The range of text to be replaced.
		* @param newText The new text.
		* @param annotation The annotation.
		*/
		function replace(range, newText, annotation) {
			return {
				range,
				newText,
				annotationId: annotation
			};
		}
		AnnotatedTextEdit.replace = replace;
		/**
		* Creates an annotated insert text edit.
		*
		* @param position The position to insert the text at.
		* @param newText The text to be inserted.
		* @param annotation The annotation.
		*/
		function insert(position, newText, annotation) {
			return {
				range: {
					start: position,
					end: position
				},
				newText,
				annotationId: annotation
			};
		}
		AnnotatedTextEdit.insert = insert;
		/**
		* Creates an annotated delete text edit.
		*
		* @param range The range of text to be deleted.
		* @param annotation The annotation.
		*/
		function del(range, annotation) {
			return {
				range,
				newText: "",
				annotationId: annotation
			};
		}
		AnnotatedTextEdit.del = del;
		function is(value) {
			const candidate = value;
			return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));
		}
		AnnotatedTextEdit.is = is;
	})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));
	(function(TextDocumentEdit) {
		/**
		* Creates a new `TextDocumentEdit`
		*/
		function create(textDocument, edits) {
			return {
				textDocument,
				edits
			};
		}
		TextDocumentEdit.create = create;
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits);
		}
		TextDocumentEdit.is = is;
	})(TextDocumentEdit || (TextDocumentEdit = {}));
	(function(CreateFile) {
		function create(uri, options, annotation) {
			const result = {
				kind: "create",
				uri
			};
			if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) result.options = options;
			if (annotation !== void 0) result.annotationId = annotation;
			return result;
		}
		CreateFile.create = create;
		function is(value) {
			const candidate = value;
			return candidate && candidate.kind === "create" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));
		}
		CreateFile.is = is;
	})(CreateFile || (CreateFile = {}));
	(function(RenameFile) {
		function create(oldUri, newUri, options, annotation) {
			const result = {
				kind: "rename",
				oldUri,
				newUri
			};
			if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) result.options = options;
			if (annotation !== void 0) result.annotationId = annotation;
			return result;
		}
		RenameFile.create = create;
		function is(value) {
			const candidate = value;
			return candidate && candidate.kind === "rename" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === void 0 || (candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));
		}
		RenameFile.is = is;
	})(RenameFile || (RenameFile = {}));
	(function(DeleteFile) {
		function create(uri, options, annotation) {
			const result = {
				kind: "delete",
				uri
			};
			if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) result.options = options;
			if (annotation !== void 0) result.annotationId = annotation;
			return result;
		}
		DeleteFile.create = create;
		function is(value) {
			const candidate = value;
			return candidate && candidate.kind === "delete" && Is.string(candidate.uri) && (candidate.options === void 0 || (candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))) && (candidate.annotationId === void 0 || ChangeAnnotationIdentifier.is(candidate.annotationId));
		}
		DeleteFile.is = is;
	})(DeleteFile || (DeleteFile = {}));
	(function(WorkspaceEdit) {
		function is(value) {
			const candidate = value;
			return candidate && (candidate.changes !== void 0 || candidate.documentChanges !== void 0) && (candidate.documentChanges === void 0 || candidate.documentChanges.every((change) => {
				if (Is.string(change.kind)) return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
				else return TextDocumentEdit.is(change);
			}));
		}
		WorkspaceEdit.is = is;
	})(WorkspaceEdit || (WorkspaceEdit = {}));
	TextEditChangeImpl = class {
		constructor(edits, changeAnnotations) {
			this.edits = edits;
			this.changeAnnotations = changeAnnotations;
		}
		insert(position, newText, annotation) {
			let edit;
			let id;
			if (annotation === void 0) edit = TextEdit.insert(position, newText);
			else if (ChangeAnnotationIdentifier.is(annotation)) {
				id = annotation;
				edit = AnnotatedTextEdit.insert(position, newText, annotation);
			} else {
				this.assertChangeAnnotations(this.changeAnnotations);
				id = this.changeAnnotations.manage(annotation);
				edit = AnnotatedTextEdit.insert(position, newText, id);
			}
			this.edits.push(edit);
			if (id !== void 0) return id;
		}
		replace(range, newText, annotation) {
			let edit;
			let id;
			if (annotation === void 0) edit = TextEdit.replace(range, newText);
			else if (ChangeAnnotationIdentifier.is(annotation)) {
				id = annotation;
				edit = AnnotatedTextEdit.replace(range, newText, annotation);
			} else {
				this.assertChangeAnnotations(this.changeAnnotations);
				id = this.changeAnnotations.manage(annotation);
				edit = AnnotatedTextEdit.replace(range, newText, id);
			}
			this.edits.push(edit);
			if (id !== void 0) return id;
		}
		delete(range, annotation) {
			let edit;
			let id;
			if (annotation === void 0) edit = TextEdit.del(range);
			else if (ChangeAnnotationIdentifier.is(annotation)) {
				id = annotation;
				edit = AnnotatedTextEdit.del(range, annotation);
			} else {
				this.assertChangeAnnotations(this.changeAnnotations);
				id = this.changeAnnotations.manage(annotation);
				edit = AnnotatedTextEdit.del(range, id);
			}
			this.edits.push(edit);
			if (id !== void 0) return id;
		}
		add(edit) {
			this.edits.push(edit);
		}
		all() {
			return this.edits;
		}
		clear() {
			this.edits.splice(0, this.edits.length);
		}
		assertChangeAnnotations(value) {
			if (value === void 0) throw new Error(`Text edit change is not configured to manage change annotations.`);
		}
	};
	(function(SnippetTextEdit) {
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Range.is(candidate.range) && StringValue.isSnippet(candidate.snippet) && (candidate.annotationId === void 0 || ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));
		}
		SnippetTextEdit.is = is;
	})(SnippetTextEdit || (SnippetTextEdit = {}));
	ChangeAnnotations = class {
		constructor(annotations) {
			this._annotations = annotations === void 0 ? Object.create(null) : annotations;
			this._counter = 0;
			this._size = 0;
		}
		all() {
			return this._annotations;
		}
		get size() {
			return this._size;
		}
		manage(idOrAnnotation, annotation) {
			let id;
			if (ChangeAnnotationIdentifier.is(idOrAnnotation)) id = idOrAnnotation;
			else {
				id = this.nextId();
				annotation = idOrAnnotation;
			}
			if (this._annotations[id] !== void 0) throw new Error(`Id ${id} is already in use.`);
			if (annotation === void 0) throw new Error(`No annotation provided for id ${id}`);
			this._annotations[id] = annotation;
			this._size++;
			return id;
		}
		nextId() {
			this._counter++;
			return this._counter.toString();
		}
	};
	WorkspaceChange = class {
		constructor(workspaceEdit) {
			this._textEditChanges = Object.create(null);
			if (workspaceEdit !== void 0) {
				this._workspaceEdit = workspaceEdit;
				if (workspaceEdit.documentChanges) {
					this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);
					workspaceEdit.changeAnnotations = this._changeAnnotations.all();
					workspaceEdit.documentChanges.forEach((change) => {
						if (TextDocumentEdit.is(change)) {
							const textEditChange = new TextEditChangeImpl(change.edits, this._changeAnnotations);
							this._textEditChanges[change.textDocument.uri] = textEditChange;
						}
					});
				} else if (workspaceEdit.changes) Object.keys(workspaceEdit.changes).forEach((key) => {
					const textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
					this._textEditChanges[key] = textEditChange;
				});
			} else this._workspaceEdit = {};
		}
		/**
		* Returns the underlying {@link WorkspaceEdit} literal
		* use to be returned from a workspace edit operation like rename.
		*/
		get edit() {
			this.initDocumentChanges();
			if (this._changeAnnotations !== void 0) if (this._changeAnnotations.size === 0) this._workspaceEdit.changeAnnotations = void 0;
			else this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
			return this._workspaceEdit;
		}
		getTextEditChange(key) {
			if (OptionalVersionedTextDocumentIdentifier.is(key)) {
				this.initDocumentChanges();
				if (this._workspaceEdit.documentChanges === void 0) throw new Error("Workspace edit is not configured for document changes.");
				const textDocument = {
					uri: key.uri,
					version: key.version
				};
				let result = this._textEditChanges[textDocument.uri];
				if (!result) {
					const edits = [];
					const textDocumentEdit = {
						textDocument,
						edits
					};
					this._workspaceEdit.documentChanges.push(textDocumentEdit);
					result = new TextEditChangeImpl(edits, this._changeAnnotations);
					this._textEditChanges[textDocument.uri] = result;
				}
				return result;
			} else {
				this.initChanges();
				if (this._workspaceEdit.changes === void 0) throw new Error("Workspace edit is not configured for normal text edit changes.");
				let result = this._textEditChanges[key];
				if (!result) {
					const edits = [];
					this._workspaceEdit.changes[key] = edits;
					result = new TextEditChangeImpl(edits);
					this._textEditChanges[key] = result;
				}
				return result;
			}
		}
		initDocumentChanges() {
			if (this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0) {
				this._changeAnnotations = new ChangeAnnotations();
				this._workspaceEdit.documentChanges = [];
				this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
			}
		}
		initChanges() {
			if (this._workspaceEdit.documentChanges === void 0 && this._workspaceEdit.changes === void 0) this._workspaceEdit.changes = Object.create(null);
		}
		createFile(uri, optionsOrAnnotation, options) {
			this.initDocumentChanges();
			if (this._workspaceEdit.documentChanges === void 0) throw new Error("Workspace edit is not configured for document changes.");
			let annotation;
			if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) annotation = optionsOrAnnotation;
			else options = optionsOrAnnotation;
			let operation;
			let id;
			if (annotation === void 0) operation = CreateFile.create(uri, options);
			else {
				id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
				operation = CreateFile.create(uri, options, id);
			}
			this._workspaceEdit.documentChanges.push(operation);
			if (id !== void 0) return id;
		}
		renameFile(oldUri, newUri, optionsOrAnnotation, options) {
			this.initDocumentChanges();
			if (this._workspaceEdit.documentChanges === void 0) throw new Error("Workspace edit is not configured for document changes.");
			let annotation;
			if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) annotation = optionsOrAnnotation;
			else options = optionsOrAnnotation;
			let operation;
			let id;
			if (annotation === void 0) operation = RenameFile.create(oldUri, newUri, options);
			else {
				id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
				operation = RenameFile.create(oldUri, newUri, options, id);
			}
			this._workspaceEdit.documentChanges.push(operation);
			if (id !== void 0) return id;
		}
		deleteFile(uri, optionsOrAnnotation, options) {
			this.initDocumentChanges();
			if (this._workspaceEdit.documentChanges === void 0) throw new Error("Workspace edit is not configured for document changes.");
			let annotation;
			if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) annotation = optionsOrAnnotation;
			else options = optionsOrAnnotation;
			let operation;
			let id;
			if (annotation === void 0) operation = DeleteFile.create(uri, options);
			else {
				id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
				operation = DeleteFile.create(uri, options, id);
			}
			this._workspaceEdit.documentChanges.push(operation);
			if (id !== void 0) return id;
		}
	};
	(function(TextDocumentIdentifier) {
		/**
		* Creates a new TextDocumentIdentifier literal.
		* @param uri The document's uri.
		*/
		function create(uri) {
			return { uri };
		}
		TextDocumentIdentifier.create = create;
		/**
		* Checks whether the given literal conforms to the {@link TextDocumentIdentifier} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Is.string(candidate.uri);
		}
		TextDocumentIdentifier.is = is;
	})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
	(function(VersionedTextDocumentIdentifier) {
		/**
		* Creates a new VersionedTextDocumentIdentifier literal.
		* @param uri The document's uri.
		* @param version The document's version.
		*/
		function create(uri, version) {
			return {
				uri,
				version
			};
		}
		VersionedTextDocumentIdentifier.create = create;
		/**
		* Checks whether the given literal conforms to the {@link VersionedTextDocumentIdentifier} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);
		}
		VersionedTextDocumentIdentifier.is = is;
	})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
	(function(OptionalVersionedTextDocumentIdentifier) {
		/**
		* Creates a new OptionalVersionedTextDocumentIdentifier literal.
		* @param uri The document's uri.
		* @param version The document's version.
		*/
		function create(uri, version) {
			return {
				uri,
				version
			};
		}
		OptionalVersionedTextDocumentIdentifier.create = create;
		/**
		* Checks whether the given literal conforms to the {@link OptionalVersionedTextDocumentIdentifier} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));
		}
		OptionalVersionedTextDocumentIdentifier.is = is;
	})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));
	(function(LanguageKind) {
		LanguageKind.ABAP = "abap";
		LanguageKind.WindowsBat = "bat";
		LanguageKind.BibTeX = "bibtex";
		LanguageKind.Clojure = "clojure";
		LanguageKind.Coffeescript = "coffeescript";
		LanguageKind.C = "c";
		LanguageKind.CPP = "cpp";
		LanguageKind.CSharp = "csharp";
		LanguageKind.CSS = "css";
		/**
		* @since 3.18.0
		*/
		LanguageKind.D = "d";
		/**
		* @since 3.18.0
		*/
		LanguageKind.Delphi = "pascal";
		LanguageKind.Diff = "diff";
		LanguageKind.Dart = "dart";
		LanguageKind.Dockerfile = "dockerfile";
		LanguageKind.Elixir = "elixir";
		LanguageKind.Erlang = "erlang";
		LanguageKind.FSharp = "fsharp";
		LanguageKind.GitCommit = "git-commit";
		LanguageKind.GitRebase = "git-rebase";
		LanguageKind.Go = "go";
		LanguageKind.Groovy = "groovy";
		LanguageKind.Handlebars = "handlebars";
		LanguageKind.Haskell = "haskell";
		LanguageKind.HTML = "html";
		LanguageKind.Ini = "ini";
		LanguageKind.Java = "java";
		LanguageKind.JavaScript = "javascript";
		LanguageKind.JavaScriptReact = "javascriptreact";
		LanguageKind.JSON = "json";
		LanguageKind.LaTeX = "latex";
		LanguageKind.Less = "less";
		LanguageKind.Lua = "lua";
		LanguageKind.Makefile = "makefile";
		LanguageKind.Markdown = "markdown";
		LanguageKind.ObjectiveC = "objective-c";
		LanguageKind.ObjectiveCPP = "objective-cpp";
		/**
		* @since 3.18.0
		*/
		LanguageKind.Pascal = "pascal";
		LanguageKind.Perl = "perl";
		LanguageKind.Perl6 = "perl6";
		LanguageKind.PHP = "php";
		LanguageKind.Plaintext = "plaintext";
		LanguageKind.Powershell = "powershell";
		LanguageKind.Pug = "jade";
		LanguageKind.Python = "python";
		LanguageKind.R = "r";
		LanguageKind.Razor = "razor";
		LanguageKind.Ruby = "ruby";
		LanguageKind.Rust = "rust";
		LanguageKind.SCSS = "scss";
		LanguageKind.SASS = "sass";
		LanguageKind.Scala = "scala";
		LanguageKind.ShaderLab = "shaderlab";
		LanguageKind.ShellScript = "shellscript";
		LanguageKind.SQL = "sql";
		LanguageKind.Swift = "swift";
		LanguageKind.TypeScript = "typescript";
		LanguageKind.TypeScriptReact = "typescriptreact";
		LanguageKind.TeX = "tex";
		LanguageKind.VisualBasic = "vb";
		LanguageKind.XML = "xml";
		LanguageKind.XSL = "xsl";
		LanguageKind.YAML = "yaml";
	})(LanguageKind || (LanguageKind = {}));
	(function(TextDocumentItem) {
		/**
		* Creates a new TextDocumentItem literal.
		* @param uri The document's uri.
		* @param languageId The document's language identifier.
		* @param version The document's version number.
		* @param text The document's text.
		*/
		function create(uri, languageId, version, text) {
			return {
				uri,
				languageId,
				version,
				text
			};
		}
		TextDocumentItem.create = create;
		/**
		* Checks whether the given literal conforms to the {@link TextDocumentItem} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);
		}
		TextDocumentItem.is = is;
	})(TextDocumentItem || (TextDocumentItem = {}));
	(function(MarkupKind) {
		/**
		* Plain text is supported as a content format
		*/
		MarkupKind.PlainText = "plaintext";
		/**
		* Markdown is supported as a content format
		*/
		MarkupKind.Markdown = "markdown";
		/**
		* Checks whether the given value is a value of the {@link MarkupKind} type.
		*/
		function is(value) {
			const candidate = value;
			return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;
		}
		MarkupKind.is = is;
	})(MarkupKind || (MarkupKind = {}));
	(function(MarkupContent) {
		/**
		* Checks whether the given value conforms to the {@link MarkupContent} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
		}
		MarkupContent.is = is;
	})(MarkupContent || (MarkupContent = {}));
	(function(CompletionItemKind) {
		CompletionItemKind.Text = 1;
		CompletionItemKind.Method = 2;
		CompletionItemKind.Function = 3;
		CompletionItemKind.Constructor = 4;
		CompletionItemKind.Field = 5;
		CompletionItemKind.Variable = 6;
		CompletionItemKind.Class = 7;
		CompletionItemKind.Interface = 8;
		CompletionItemKind.Module = 9;
		CompletionItemKind.Property = 10;
		CompletionItemKind.Unit = 11;
		CompletionItemKind.Value = 12;
		CompletionItemKind.Enum = 13;
		CompletionItemKind.Keyword = 14;
		CompletionItemKind.Snippet = 15;
		CompletionItemKind.Color = 16;
		CompletionItemKind.File = 17;
		CompletionItemKind.Reference = 18;
		CompletionItemKind.Folder = 19;
		CompletionItemKind.EnumMember = 20;
		CompletionItemKind.Constant = 21;
		CompletionItemKind.Struct = 22;
		CompletionItemKind.Event = 23;
		CompletionItemKind.Operator = 24;
		CompletionItemKind.TypeParameter = 25;
	})(CompletionItemKind || (CompletionItemKind = {}));
	(function(InsertTextFormat) {
		/**
		* The primary text to be inserted is treated as a plain string.
		*/
		InsertTextFormat.PlainText = 1;
		/**
		* The primary text to be inserted is treated as a snippet.
		*
		* A snippet can define tab stops and placeholders with `$1`, `$2`
		* and `${3:foo}`. `$0` defines the final tab stop, it defaults to
		* the end of the snippet. Placeholders with equal identifiers are linked,
		* that is typing in one will update others too.
		*
		* See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax
		*/
		InsertTextFormat.Snippet = 2;
	})(InsertTextFormat || (InsertTextFormat = {}));
	(function(CompletionItemTag) {
		/**
		* Render a completion as obsolete, usually using a strike-out.
		*/
		CompletionItemTag.Deprecated = 1;
	})(CompletionItemTag || (CompletionItemTag = {}));
	(function(InsertReplaceEdit) {
		/**
		* Creates a new insert / replace edit
		*/
		function create(newText, insert, replace) {
			return {
				newText,
				insert,
				replace
			};
		}
		InsertReplaceEdit.create = create;
		/**
		* Checks whether the given literal conforms to the {@link InsertReplaceEdit} interface.
		*/
		function is(value) {
			const candidate = value;
			return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);
		}
		InsertReplaceEdit.is = is;
	})(InsertReplaceEdit || (InsertReplaceEdit = {}));
	(function(InsertTextMode) {
		/**
		* The insertion or replace strings is taken as it is. If the
		* value is multi line the lines below the cursor will be
		* inserted using the indentation defined in the string value.
		* The client will not apply any kind of adjustments to the
		* string.
		*/
		InsertTextMode.asIs = 1;
		/**
		* The editor adjusts leading whitespace of new lines so that
		* they match the indentation up to the cursor of the line for
		* which the item is accepted.
		*
		* Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a
		* multi line completion item is indented using 2 tabs and all
		* following lines inserted will be indented using 2 tabs as well.
		*/
		InsertTextMode.adjustIndentation = 2;
	})(InsertTextMode || (InsertTextMode = {}));
	(function(ApplyKind) {
		/**
		* The value from the individual item (if provided and not `null`) will be
		* used instead of the default.
		*/
		ApplyKind.Replace = 1;
		/**
		* The value from the item will be merged with the default.
		*
		* The specific rules for mergeing values are defined against each field
		* that supports merging.
		*/
		ApplyKind.Merge = 2;
	})(ApplyKind || (ApplyKind = {}));
	(function(CompletionItemLabelDetails) {
		function is(value) {
			const candidate = value;
			return candidate && (Is.string(candidate.detail) || candidate.detail === void 0) && (Is.string(candidate.description) || candidate.description === void 0);
		}
		CompletionItemLabelDetails.is = is;
	})(CompletionItemLabelDetails || (CompletionItemLabelDetails = {}));
	(function(CompletionItem) {
		/**
		* Create a completion item and seed it with a label.
		* @param label The completion item's label
		*/
		function create(label) {
			return { label };
		}
		CompletionItem.create = create;
	})(CompletionItem || (CompletionItem = {}));
	(function(CompletionList) {
		/**
		* Creates a new completion list.
		*
		* @param items The completion items.
		* @param isIncomplete The list is not complete.
		*/
		function create(items, isIncomplete) {
			return {
				items: items ? items : [],
				isIncomplete: !!isIncomplete
			};
		}
		CompletionList.create = create;
	})(CompletionList || (CompletionList = {}));
	(function(MarkedString) {
		/**
		* Creates a marked string from plain text.
		*
		* @param plainText The plain text.
		*/
		function fromPlainText(plainText) {
			return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&");
		}
		MarkedString.fromPlainText = fromPlainText;
		/**
		* Checks whether the given value conforms to the {@link MarkedString} type.
		*/
		function is(value) {
			const candidate = value;
			return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value);
		}
		MarkedString.is = is;
	})(MarkedString || (MarkedString = {}));
	(function(Hover) {
		/**
		* Checks whether the given value conforms to the {@link Hover} interface.
		*/
		function is(value) {
			const candidate = value;
			return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));
		}
		Hover.is = is;
	})(Hover || (Hover = {}));
	(function(ParameterInformation) {
		/**
		* Creates a new parameter information literal.
		*
		* @param label A label string.
		* @param documentation A doc string.
		*/
		function create(label, documentation) {
			return documentation ? {
				label,
				documentation
			} : { label };
		}
		ParameterInformation.create = create;
	})(ParameterInformation || (ParameterInformation = {}));
	(function(SignatureInformation) {
		function create(label, documentation, ...parameters) {
			const result = { label };
			if (Is.defined(documentation)) result.documentation = documentation;
			if (Is.defined(parameters)) result.parameters = parameters;
			else result.parameters = [];
			return result;
		}
		SignatureInformation.create = create;
	})(SignatureInformation || (SignatureInformation = {}));
	(function(DocumentHighlightKind) {
		/**
		* A textual occurrence.
		*/
		DocumentHighlightKind.Text = 1;
		/**
		* Read-access of a symbol, like reading a variable.
		*/
		DocumentHighlightKind.Read = 2;
		/**
		* Write-access of a symbol, like writing to a variable.
		*/
		DocumentHighlightKind.Write = 3;
	})(DocumentHighlightKind || (DocumentHighlightKind = {}));
	(function(DocumentHighlight) {
		/**
		* Create a DocumentHighlight object.
		* @param range The range the highlight applies to.
		* @param kind The highlight kind
		*/
		function create(range, kind) {
			const result = { range };
			if (Is.number(kind)) result.kind = kind;
			return result;
		}
		DocumentHighlight.create = create;
	})(DocumentHighlight || (DocumentHighlight = {}));
	(function(SymbolKind) {
		SymbolKind.File = 1;
		SymbolKind.Module = 2;
		SymbolKind.Namespace = 3;
		SymbolKind.Package = 4;
		SymbolKind.Class = 5;
		SymbolKind.Method = 6;
		SymbolKind.Property = 7;
		SymbolKind.Field = 8;
		SymbolKind.Constructor = 9;
		SymbolKind.Enum = 10;
		SymbolKind.Interface = 11;
		SymbolKind.Function = 12;
		SymbolKind.Variable = 13;
		SymbolKind.Constant = 14;
		SymbolKind.String = 15;
		SymbolKind.Number = 16;
		SymbolKind.Boolean = 17;
		SymbolKind.Array = 18;
		SymbolKind.Object = 19;
		SymbolKind.Key = 20;
		SymbolKind.Null = 21;
		SymbolKind.EnumMember = 22;
		SymbolKind.Struct = 23;
		SymbolKind.Event = 24;
		SymbolKind.Operator = 25;
		SymbolKind.TypeParameter = 26;
	})(SymbolKind || (SymbolKind = {}));
	(function(SymbolTag) {
		/**
		* Render a symbol as obsolete, usually using a strike-out.
		*/
		SymbolTag.Deprecated = 1;
	})(SymbolTag || (SymbolTag = {}));
	(function(SymbolInformation) {
		/**
		* Creates a new symbol information literal.
		*
		* @param name The name of the symbol.
		* @param kind The kind of the symbol.
		* @param range The range of the location of the symbol.
		* @param uri The resource of the location of symbol.
		* @param containerName The name of the symbol containing the symbol.
		*/
		function create(name, kind, range, uri, containerName) {
			const result = {
				name,
				kind,
				location: {
					uri,
					range
				}
			};
			if (containerName) result.containerName = containerName;
			return result;
		}
		SymbolInformation.create = create;
	})(SymbolInformation || (SymbolInformation = {}));
	(function(WorkspaceSymbol) {
		/**
		* Create a new workspace symbol.
		*
		* @param name The name of the symbol.
		* @param kind The kind of the symbol.
		* @param uri The resource of the location of the symbol.
		* @param range An options range of the location.
		* @returns A WorkspaceSymbol.
		*/
		function create(name, kind, uri, range) {
			return range !== void 0 ? {
				name,
				kind,
				location: {
					uri,
					range
				}
			} : {
				name,
				kind,
				location: { uri }
			};
		}
		WorkspaceSymbol.create = create;
	})(WorkspaceSymbol || (WorkspaceSymbol = {}));
	(function(DocumentSymbol) {
		/**
		* Creates a new symbol information literal.
		*
		* @param name The name of the symbol.
		* @param detail The detail of the symbol.
		* @param kind The kind of the symbol.
		* @param range The range of the symbol.
		* @param selectionRange The selectionRange of the symbol.
		* @param children Children of the symbol.
		*/
		function create(name, detail, kind, range, selectionRange, children) {
			const result = {
				name,
				detail,
				kind,
				range,
				selectionRange
			};
			if (children !== void 0) result.children = children;
			return result;
		}
		DocumentSymbol.create = create;
		/**
		* Checks whether the given literal conforms to the {@link DocumentSymbol} interface.
		*/
		function is(value) {
			const candidate = value;
			return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range.is(candidate.range) && Range.is(candidate.selectionRange) && (candidate.detail === void 0 || Is.string(candidate.detail)) && (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) && (candidate.children === void 0 || Array.isArray(candidate.children)) && (candidate.tags === void 0 || Array.isArray(candidate.tags));
		}
		DocumentSymbol.is = is;
	})(DocumentSymbol || (DocumentSymbol = {}));
	(function(CodeActionKind) {
		/**
		* Empty kind.
		*/
		CodeActionKind.Empty = "";
		/**
		* Base kind for quickfix actions: 'quickfix'
		*/
		CodeActionKind.QuickFix = "quickfix";
		/**
		* Base kind for refactoring actions: 'refactor'
		*/
		CodeActionKind.Refactor = "refactor";
		/**
		* Base kind for refactoring extraction actions: 'refactor.extract'
		*
		* Example extract actions:
		*
		* - Extract method
		* - Extract function
		* - Extract variable
		* - Extract interface from class
		* - ...
		*/
		CodeActionKind.RefactorExtract = "refactor.extract";
		/**
		* Base kind for refactoring inline actions: 'refactor.inline'
		*
		* Example inline actions:
		*
		* - Inline function
		* - Inline variable
		* - Inline constant
		* - ...
		*/
		CodeActionKind.RefactorInline = "refactor.inline";
		/**
		* Base kind for refactoring move actions: `refactor.move`
		*
		* Example move actions:
		*
		* - Move a function to a new file
		* - Move a property between classes
		* - Move method to base class
		* - ...
		*
		* @since 3.18.0
		*/
		CodeActionKind.RefactorMove = "refactor.move";
		/**
		* Base kind for refactoring rewrite actions: 'refactor.rewrite'
		*
		* Example rewrite actions:
		*
		* - Convert JavaScript function to class
		* - Add or remove parameter
		* - Encapsulate field
		* - Make method static
		* - Move method to base class
		* - ...
		*/
		CodeActionKind.RefactorRewrite = "refactor.rewrite";
		/**
		* Base kind for source actions: `source`
		*
		* Source code actions apply to the entire file.
		*/
		CodeActionKind.Source = "source";
		/**
		* Base kind for an organize imports source action: `source.organizeImports`
		*/
		CodeActionKind.SourceOrganizeImports = "source.organizeImports";
		/**
		* Base kind for auto-fix source actions: `source.fixAll`.
		*
		* Fix all actions automatically fix errors that have a clear fix that do not require user input.
		* They should not suppress errors or perform unsafe fixes such as generating new types or classes.
		*
		* @since 3.15.0
		*/
		CodeActionKind.SourceFixAll = "source.fixAll";
		/**
		* Base kind for all code actions applying to the entire notebook's scope. CodeActionKinds using
		* this should always begin with `notebook.`
		*
		* @since 3.18.0
		*/
		CodeActionKind.Notebook = "notebook";
	})(CodeActionKind || (CodeActionKind = {}));
	(function(CodeActionTriggerKind) {
		/**
		* Code actions were explicitly requested by the user or by an extension.
		*/
		CodeActionTriggerKind.Invoked = 1;
		/**
		* Code actions were requested automatically.
		*
		* This typically happens when current selection in a file changes, but can
		* also be triggered when file content changes.
		*/
		CodeActionTriggerKind.Automatic = 2;
	})(CodeActionTriggerKind || (CodeActionTriggerKind = {}));
	(function(CodeActionContext) {
		/**
		* Creates a new CodeActionContext literal.
		*/
		function create(diagnostics, only, triggerKind) {
			const result = { diagnostics };
			if (only !== void 0 && only !== null) result.only = only;
			if (triggerKind !== void 0 && triggerKind !== null) result.triggerKind = triggerKind;
			return result;
		}
		CodeActionContext.create = create;
		/**
		* Checks whether the given literal conforms to the {@link CodeActionContext} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string)) && (candidate.triggerKind === void 0 || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);
		}
		CodeActionContext.is = is;
	})(CodeActionContext || (CodeActionContext = {}));
	(function(CodeActionTag) {
		/**
		* Marks the code action as LLM-generated.
		*/
		CodeActionTag.LLMGenerated = 1;
		/**
		* Checks whether the given literal conforms to the {@link CodeActionTag} interface.
		*/
		function is(value) {
			return Is.defined(value) && value === CodeActionTag.LLMGenerated;
		}
		CodeActionTag.is = is;
	})(CodeActionTag || (CodeActionTag = {}));
	(function(CodeAction) {
		function create(title, kindOrCommandOrEdit, kind) {
			const result = { title };
			let checkKind = true;
			if (typeof kindOrCommandOrEdit === "string") {
				checkKind = false;
				result.kind = kindOrCommandOrEdit;
			} else if (Command.is(kindOrCommandOrEdit)) result.command = kindOrCommandOrEdit;
			else result.edit = kindOrCommandOrEdit;
			if (checkKind && kind !== void 0) result.kind = kind;
			return result;
		}
		CodeAction.create = create;
		function is(value) {
			const candidate = value;
			return candidate && Is.string(candidate.title) && (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) && (candidate.kind === void 0 || Is.string(candidate.kind)) && (candidate.edit !== void 0 || candidate.command !== void 0) && (candidate.command === void 0 || Command.is(candidate.command)) && (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) && (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit)) && (candidate.tags === void 0 || Is.typedArray(candidate.tags, CodeActionTag.is));
		}
		CodeAction.is = is;
	})(CodeAction || (CodeAction = {}));
	(function(CodeLens) {
		/**
		* Creates a new CodeLens literal.
		*/
		function create(range, data) {
			const result = { range };
			if (Is.defined(data)) result.data = data;
			return result;
		}
		CodeLens.create = create;
		/**
		* Checks whether the given literal conforms to the {@link CodeLens} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
		}
		CodeLens.is = is;
	})(CodeLens || (CodeLens = {}));
	(function(FormattingOptions) {
		/**
		* Creates a new FormattingOptions literal.
		*/
		function create(tabSize, insertSpaces) {
			return {
				tabSize,
				insertSpaces
			};
		}
		FormattingOptions.create = create;
		/**
		* Checks whether the given literal conforms to the {@link FormattingOptions} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
		}
		FormattingOptions.is = is;
	})(FormattingOptions || (FormattingOptions = {}));
	(function(DocumentLink) {
		/**
		* Creates a new DocumentLink literal.
		*/
		function create(range, target, data) {
			return {
				range,
				target,
				data
			};
		}
		DocumentLink.create = create;
		/**
		* Checks whether the given literal conforms to the {@link DocumentLink} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
		}
		DocumentLink.is = is;
	})(DocumentLink || (DocumentLink = {}));
	(function(SelectionRange) {
		/**
		* Creates a new SelectionRange
		* @param range the range.
		* @param parent an optional parent.
		*/
		function create(range, parent) {
			return {
				range,
				parent
			};
		}
		SelectionRange.create = create;
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === void 0 || SelectionRange.is(candidate.parent));
		}
		SelectionRange.is = is;
	})(SelectionRange || (SelectionRange = {}));
	(function(SemanticTokenTypes) {
		SemanticTokenTypes["namespace"] = "namespace";
		/**
		* Represents a generic type. Acts as a fallback for types which can't be mapped to
		* a specific type like class or enum.
		*/
		SemanticTokenTypes["type"] = "type";
		SemanticTokenTypes["class"] = "class";
		SemanticTokenTypes["enum"] = "enum";
		SemanticTokenTypes["interface"] = "interface";
		SemanticTokenTypes["struct"] = "struct";
		SemanticTokenTypes["typeParameter"] = "typeParameter";
		SemanticTokenTypes["parameter"] = "parameter";
		SemanticTokenTypes["variable"] = "variable";
		SemanticTokenTypes["property"] = "property";
		SemanticTokenTypes["enumMember"] = "enumMember";
		SemanticTokenTypes["event"] = "event";
		SemanticTokenTypes["function"] = "function";
		SemanticTokenTypes["method"] = "method";
		SemanticTokenTypes["macro"] = "macro";
		SemanticTokenTypes["keyword"] = "keyword";
		SemanticTokenTypes["modifier"] = "modifier";
		SemanticTokenTypes["comment"] = "comment";
		SemanticTokenTypes["string"] = "string";
		SemanticTokenTypes["number"] = "number";
		SemanticTokenTypes["regexp"] = "regexp";
		SemanticTokenTypes["operator"] = "operator";
		/**
		* @since 3.17.0
		*/
		SemanticTokenTypes["decorator"] = "decorator";
		/**
		* @since 3.18.0
		*/
		SemanticTokenTypes["label"] = "label";
	})(SemanticTokenTypes || (SemanticTokenTypes = {}));
	(function(SemanticTokenModifiers) {
		SemanticTokenModifiers["declaration"] = "declaration";
		SemanticTokenModifiers["definition"] = "definition";
		SemanticTokenModifiers["readonly"] = "readonly";
		SemanticTokenModifiers["static"] = "static";
		SemanticTokenModifiers["deprecated"] = "deprecated";
		SemanticTokenModifiers["abstract"] = "abstract";
		SemanticTokenModifiers["async"] = "async";
		SemanticTokenModifiers["modification"] = "modification";
		SemanticTokenModifiers["documentation"] = "documentation";
		SemanticTokenModifiers["defaultLibrary"] = "defaultLibrary";
	})(SemanticTokenModifiers || (SemanticTokenModifiers = {}));
	(function(SemanticTokens) {
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && (candidate.resultId === void 0 || typeof candidate.resultId === "string") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === "number");
		}
		SemanticTokens.is = is;
	})(SemanticTokens$1 || (SemanticTokens$1 = {}));
	(function(InlineValueText) {
		/**
		* Creates a new InlineValueText literal.
		*/
		function create(range, text) {
			return {
				range,
				text
			};
		}
		InlineValueText.create = create;
		function is(value) {
			const candidate = value;
			return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);
		}
		InlineValueText.is = is;
	})(InlineValueText || (InlineValueText = {}));
	(function(InlineValueVariableLookup) {
		/**
		* Creates a new InlineValueText literal.
		*/
		function create(range, variableName, caseSensitiveLookup) {
			return {
				range,
				variableName,
				caseSensitiveLookup
			};
		}
		InlineValueVariableLookup.create = create;
		function is(value) {
			const candidate = value;
			return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup) && (Is.string(candidate.variableName) || candidate.variableName === void 0);
		}
		InlineValueVariableLookup.is = is;
	})(InlineValueVariableLookup || (InlineValueVariableLookup = {}));
	(function(InlineValueEvaluatableExpression) {
		/**
		* Creates a new InlineValueEvaluatableExpression literal.
		*/
		function create(range, expression) {
			return {
				range,
				expression
			};
		}
		InlineValueEvaluatableExpression.create = create;
		function is(value) {
			const candidate = value;
			return candidate !== void 0 && candidate !== null && Range.is(candidate.range) && (Is.string(candidate.expression) || candidate.expression === void 0);
		}
		InlineValueEvaluatableExpression.is = is;
	})(InlineValueEvaluatableExpression || (InlineValueEvaluatableExpression = {}));
	(function(InlineValueContext) {
		/**
		* Creates a new InlineValueContext literal.
		*/
		function create(frameId, stoppedLocation) {
			return {
				frameId,
				stoppedLocation
			};
		}
		InlineValueContext.create = create;
		/**
		* Checks whether the given literal conforms to the {@link InlineValueContext} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Range.is(value.stoppedLocation);
		}
		InlineValueContext.is = is;
	})(InlineValueContext || (InlineValueContext = {}));
	(function(InlayHintKind) {
		/**
		* An inlay hint that for a type annotation.
		*/
		InlayHintKind.Type = 1;
		/**
		* An inlay hint that is for a parameter.
		*/
		InlayHintKind.Parameter = 2;
		function is(value) {
			return value === 1 || value === 2;
		}
		InlayHintKind.is = is;
	})(InlayHintKind || (InlayHintKind = {}));
	(function(InlayHintLabelPart) {
		function create(value) {
			return { value };
		}
		InlayHintLabelPart.create = create;
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.location === void 0 || Location.is(candidate.location)) && (candidate.command === void 0 || Command.is(candidate.command));
		}
		InlayHintLabelPart.is = is;
	})(InlayHintLabelPart || (InlayHintLabelPart = {}));
	(function(InlayHint) {
		function create(position, label, kind) {
			const result = {
				position,
				label
			};
			if (kind !== void 0) result.kind = kind;
			return result;
		}
		InlayHint.create = create;
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Position.is(candidate.position) && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is)) && (candidate.kind === void 0 || InlayHintKind.is(candidate.kind)) && candidate.textEdits === void 0 || Is.typedArray(candidate.textEdits, TextEdit.is) && (candidate.tooltip === void 0 || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.paddingLeft === void 0 || Is.boolean(candidate.paddingLeft)) && (candidate.paddingRight === void 0 || Is.boolean(candidate.paddingRight));
		}
		InlayHint.is = is;
	})(InlayHint || (InlayHint = {}));
	(function(StringValue) {
		function createSnippet(value) {
			return {
				kind: "snippet",
				value
			};
		}
		StringValue.createSnippet = createSnippet;
		function isSnippet(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && candidate.kind === "snippet" && Is.string(candidate.value);
		}
		StringValue.isSnippet = isSnippet;
	})(StringValue || (StringValue = {}));
	(function(InlineCompletionItem) {
		function create(insertText, filterText, range, command) {
			return {
				insertText,
				filterText,
				range,
				command
			};
		}
		InlineCompletionItem.create = create;
	})(InlineCompletionItem$1 || (InlineCompletionItem$1 = {}));
	(function(InlineCompletionList) {
		function create(items) {
			return { items };
		}
		InlineCompletionList.create = create;
	})(InlineCompletionList || (InlineCompletionList = {}));
	(function(InlineCompletionTriggerKind) {
		/**
		* Completion was triggered explicitly by a user gesture.
		*/
		InlineCompletionTriggerKind.Invoked = 1;
		/**
		* Completion was triggered automatically while editing.
		*/
		InlineCompletionTriggerKind.Automatic = 2;
	})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));
	(function(SelectedCompletionInfo) {
		function create(range, text) {
			return {
				range,
				text
			};
		}
		SelectedCompletionInfo.create = create;
	})(SelectedCompletionInfo || (SelectedCompletionInfo = {}));
	(function(InlineCompletionContext) {
		function create(triggerKind, selectedCompletionInfo) {
			return {
				triggerKind,
				selectedCompletionInfo
			};
		}
		InlineCompletionContext.create = create;
	})(InlineCompletionContext$1 || (InlineCompletionContext$1 = {}));
	(function(WorkspaceFolder) {
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && URI$1.is(candidate.uri) && Is.string(candidate.name);
		}
		WorkspaceFolder.is = is;
	})(WorkspaceFolder || (WorkspaceFolder = {}));
	EOL = [
		"\n",
		"\r\n",
		"\r"
	];
	(function(TextDocument) {
		/**
		* Creates a new ITextDocument literal from the given uri and content.
		* @param uri The document's uri.
		* @param languageId The document's language Id.
		* @param version The document's version.
		* @param content The document's content.
		*/
		function create(uri, languageId, version, content) {
			return new FullTextDocument$1(uri, languageId, version, content);
		}
		TextDocument.create = create;
		/**
		* Checks whether the given literal conforms to the {@link ITextDocument} interface.
		*/
		function is(value) {
			const candidate = value;
			return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
		}
		TextDocument.is = is;
		function applyEdits(document, edits) {
			let text = document.getText();
			const sortedEdits = mergeSort(edits, (a, b) => {
				const diff = a.range.start.line - b.range.start.line;
				if (diff === 0) return a.range.start.character - b.range.start.character;
				return diff;
			});
			let lastModifiedOffset = text.length;
			for (let i = sortedEdits.length - 1; i >= 0; i--) {
				const e = sortedEdits[i];
				const startOffset = document.offsetAt(e.range.start);
				const endOffset = document.offsetAt(e.range.end);
				if (endOffset <= lastModifiedOffset) text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
				else throw new Error("Overlapping edit");
				lastModifiedOffset = startOffset;
			}
			return text;
		}
		TextDocument.applyEdits = applyEdits;
		function mergeSort(data, compare) {
			if (data.length <= 1) return data;
			const p = data.length / 2 | 0;
			const left = data.slice(0, p);
			const right = data.slice(p);
			mergeSort(left, compare);
			mergeSort(right, compare);
			let leftIdx = 0;
			let rightIdx = 0;
			let i = 0;
			while (leftIdx < left.length && rightIdx < right.length) if (compare(left[leftIdx], right[rightIdx]) <= 0) data[i++] = left[leftIdx++];
			else data[i++] = right[rightIdx++];
			while (leftIdx < left.length) data[i++] = left[leftIdx++];
			while (rightIdx < right.length) data[i++] = right[rightIdx++];
			return data;
		}
	})(TextDocument$1 || (TextDocument$1 = {}));
	FullTextDocument$1 = class {
		constructor(uri, languageId, version, content) {
			this._uri = uri;
			this._languageId = languageId;
			this._version = version;
			this._content = content;
			this._lineOffsets = void 0;
		}
		get uri() {
			return this._uri;
		}
		get languageId() {
			return this._languageId;
		}
		get version() {
			return this._version;
		}
		getText(range) {
			if (range) {
				const start = this.offsetAt(range.start);
				const end = this.offsetAt(range.end);
				return this._content.substring(start, end);
			}
			return this._content;
		}
		update(event, version) {
			this._content = event.text;
			this._version = version;
			this._lineOffsets = void 0;
		}
		getLineOffsets() {
			if (this._lineOffsets === void 0) {
				const lineOffsets = [];
				const text = this._content;
				let isLineStart = true;
				for (let i = 0; i < text.length; i++) {
					if (isLineStart) {
						lineOffsets.push(i);
						isLineStart = false;
					}
					const ch = text.charAt(i);
					isLineStart = ch === "\r" || ch === "\n";
					if (ch === "\r" && i + 1 < text.length && text.charAt(i + 1) === "\n") i++;
				}
				if (isLineStart && text.length > 0) lineOffsets.push(text.length);
				this._lineOffsets = lineOffsets;
			}
			return this._lineOffsets;
		}
		positionAt(offset) {
			offset = Math.max(Math.min(offset, this._content.length), 0);
			const lineOffsets = this.getLineOffsets();
			let low = 0, high = lineOffsets.length;
			if (high === 0) return Position.create(0, offset);
			while (low < high) {
				const mid = Math.floor((low + high) / 2);
				if (lineOffsets[mid] > offset) high = mid;
				else low = mid + 1;
			}
			const line = low - 1;
			return Position.create(line, offset - lineOffsets[line]);
		}
		offsetAt(position) {
			const lineOffsets = this.getLineOffsets();
			if (position.line >= lineOffsets.length) return this._content.length;
			else if (position.line < 0) return 0;
			const lineOffset = lineOffsets[position.line];
			const nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;
			return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
		}
		get lineCount() {
			return this.getLineOffsets().length;
		}
	};
	(function(Is) {
		const toString = Object.prototype.toString;
		function defined(value) {
			return typeof value !== "undefined";
		}
		Is.defined = defined;
		function undefined(value) {
			return typeof value === "undefined";
		}
		Is.undefined = undefined;
		function boolean(value) {
			return value === true || value === false;
		}
		Is.boolean = boolean;
		function string(value) {
			return toString.call(value) === "[object String]";
		}
		Is.string = string;
		function number(value) {
			return toString.call(value) === "[object Number]";
		}
		Is.number = number;
		function numberRange(value, min, max) {
			return toString.call(value) === "[object Number]" && min <= value && value <= max;
		}
		Is.numberRange = numberRange;
		function integer(value) {
			return toString.call(value) === "[object Number]" && -2147483648 <= value && value <= 2147483647;
		}
		Is.integer = integer;
		function uinteger(value) {
			return toString.call(value) === "[object Number]" && 0 <= value && value <= 2147483647;
		}
		Is.uinteger = uinteger;
		function func(value) {
			return toString.call(value) === "[object Function]";
		}
		Is.func = func;
		function objectLiteral(value) {
			return value !== null && typeof value === "object";
		}
		Is.objectLiteral = objectLiteral;
		function typedArray(value, check) {
			return Array.isArray(value) && value.every(check);
		}
		Is.typedArray = typedArray;
	})(Is || (Is = {}));
}));
//#endregion
//#region src/util/is.ts
function isUrl(url) {
	try {
		new URL(url);
		return true;
	} catch (e) {
		return false;
	}
}
function isHover(value) {
	let candidate = value;
	return !!candidate && objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || typedArray(candidate.contents, MarkedString.is)) && (value.range == null || Range.is(value.range));
}
function isEditRange(value) {
	if (!value) return false;
	if (Range.is(value)) return true;
	return Range.is(value.insert) && Range.is(value.replace);
}
function isCommand(obj) {
	if (!obj || !string(obj.title) || !string(obj.command) || obj.command.length == 0) return false;
	return true;
}
function isMarkdown(content) {
	if (content != null && content["kind"] == "markdown") return true;
	return false;
}
function isCompletionItem(obj) {
	return obj && typeof obj.label === "string";
}
function isCompletionList(obj) {
	return !Array.isArray(obj) && Array.isArray(obj.items);
}
function boolean(value) {
	return typeof value === "boolean";
}
function string(value) {
	return typeof value === "string";
}
function number(value) {
	return typeof value === "number";
}
function func(value) {
	return typeof value == "function";
}
function objectLiteral(obj) {
	return obj != null && typeof obj === "object" && !Array.isArray(obj) && !(obj instanceof RegExp) && !(obj instanceof Date);
}
function emptyObject(obj) {
	if (!objectLiteral(obj)) return false;
	for (let key in obj) if (hasOwnProperty$2.call(obj, key)) return false;
	return true;
}
function typedArray(value, check) {
	return Array.isArray(value) && value.every(check);
}
var hasOwnProperty$2;
var init_is = __esmMin((() => {
	init_main$2();
	hasOwnProperty$2 = Object.prototype.hasOwnProperty;
}));
//#endregion
//#region src/util/object.ts
function isEmpty(obj) {
	if (!obj) return true;
	if (Array.isArray(obj)) return obj.length == 0;
	return Object.keys(obj).length == 0;
}
function toObject(obj) {
	return obj == null ? {} : obj;
}
function omitUndefined(obj) {
	const result = {};
	Object.entries(obj).forEach(([key, val]) => {
		if (val !== void 0) result[key] = val;
	});
	return result;
}
function deepIterate(obj, fn) {
	Object.entries(obj).forEach(([key, val]) => {
		fn(obj, key);
		if (Array.isArray(val)) val.forEach((node) => {
			if (objectLiteral(node)) deepIterate(node, fn);
		});
		else if (objectLiteral(val)) deepIterate(val, fn);
	});
	return obj;
}
function deepClone(obj) {
	if (!obj || typeof obj !== "object") return obj;
	if (obj instanceof RegExp) return obj;
	const result = Array.isArray(obj) ? [] : {};
	Object.keys(obj).forEach((key) => {
		if (obj[key] && typeof obj[key] === "object") result[key] = deepClone(obj[key]);
		else result[key] = obj[key];
	});
	return result;
}
function hasOwnProperty$1(obj, key) {
	return _hasOwnProperty.call(obj, key);
}
function deepFreeze(obj) {
	if (!obj || typeof obj !== "object") return obj;
	const stack = [obj];
	while (stack.length > 0) {
		let obj = stack.shift();
		Object.freeze(obj);
		for (const key of Object.keys(obj)) {
			let prop = obj[key];
			if (typeof prop === "object" && !Object.isFrozen(prop)) stack.push(prop);
		}
	}
	return obj;
}
/**
* Copies all properties of source into destination. The optional parameter "overwrite" allows to control
* if existing properties on the destination should be overwritten or not. Defaults to true (overwrite).
*/
function mixin(destination, source, overwrite = true) {
	if (!objectLiteral(destination)) return source;
	if (objectLiteral(source)) Object.keys(source).forEach((key) => {
		if (key in destination) {
			if (overwrite) if (objectLiteral(destination[key]) && objectLiteral(source[key])) mixin(destination[key], source[key], overwrite);
			else destination[key] = source[key];
		} else destination[key] = source[key];
	});
	return destination;
}
function equals(one, other) {
	if (one === other) return true;
	if (one === null || one === void 0 || other === null || other === void 0) return false;
	if (typeof one !== typeof other) return false;
	if (typeof one !== "object") return false;
	if (Array.isArray(one) !== Array.isArray(other)) return false;
	let i;
	let key;
	if (Array.isArray(one)) {
		if (one.length !== other.length) return false;
		for (i = 0; i < one.length; i++) if (!equals(one[i], other[i])) return false;
	} else {
		const oneKeys = [];
		for (key in one) oneKeys.push(key);
		oneKeys.sort();
		const otherKeys = [];
		for (key in other) otherKeys.push(key);
		otherKeys.sort();
		if (!equals(oneKeys, otherKeys)) return false;
		for (i = 0; i < oneKeys.length; i++) if (!equals(one[oneKeys[i]], other[oneKeys[i]])) return false;
	}
	return true;
}
var _hasOwnProperty;
var init_object = __esmMin((() => {
	init_is();
	_hasOwnProperty = Object.prototype.hasOwnProperty;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/is.js
var require_is$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.boolean = boolean;
	exports.string = string;
	exports.number = number;
	exports.error = error;
	exports.func = func;
	exports.array = array;
	exports.stringArray = stringArray;
	function boolean(value) {
		return value === true || value === false;
	}
	function string(value) {
		return typeof value === "string" || value instanceof String;
	}
	function number(value) {
		return typeof value === "number" || value instanceof Number;
	}
	function error(value) {
		return value instanceof Error;
	}
	function func(value) {
		return typeof value === "function";
	}
	function array(value) {
		return Array.isArray(value);
	}
	function stringArray(value) {
		return array(value) && value.every((elem) => string(elem));
	}
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/messages.js
var require_messages$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
		Object.defineProperty(o, "default", {
			enumerable: true,
			value: v
		});
	}) : function(o, v) {
		o["default"] = v;
	});
	var __importStar = exports && exports.__importStar || (function() {
		var ownKeys = function(o) {
			ownKeys = Object.getOwnPropertyNames || function(o) {
				var ar = [];
				for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
				return ar;
			};
			return ownKeys(o);
		};
		return function(mod) {
			if (mod && mod.__esModule) return mod;
			var result = {};
			if (mod != null) {
				for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
			}
			__setModuleDefault(result, mod);
			return result;
		};
	})();
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.Message = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType = exports.RequestType0 = exports.AbstractMessageSignature = exports.ParameterStructures = exports.ResponseError = exports.ErrorCodes = void 0;
	const is = __importStar(require_is$1());
	/**
	* Predefined error codes.
	*/
	var ErrorCodes;
	(function(ErrorCodes) {
		ErrorCodes.ParseError = -32700;
		ErrorCodes.InvalidRequest = -32600;
		ErrorCodes.MethodNotFound = -32601;
		ErrorCodes.InvalidParams = -32602;
		ErrorCodes.InternalError = -32603;
		/**
		* This is the start range of JSON RPC reserved error codes.
		* It doesn't denote a real error code. No application error codes should
		* be defined between the start and end range. For backwards
		* compatibility the `ServerNotInitialized` and the `UnknownErrorCode`
		* are left in the range.
		*
		* @since 3.16.0
		*/
		ErrorCodes.jsonrpcReservedErrorRangeStart = -32099;
		/** @deprecated use  jsonrpcReservedErrorRangeStart */
		ErrorCodes.serverErrorStart = -32099;
		/**
		* An error occurred when write a message to the transport layer.
		*/
		ErrorCodes.MessageWriteError = -32099;
		/**
		* An error occurred when reading a message from the transport layer.
		*/
		ErrorCodes.MessageReadError = -32098;
		/**
		* The connection got disposed or lost and all pending responses got
		* rejected.
		*/
		ErrorCodes.PendingResponseRejected = -32097;
		/**
		* The connection is inactive and a use of it failed.
		*/
		ErrorCodes.ConnectionInactive = -32096;
		/**
		* Error code indicating that a server received a notification or
		* request before the server has received the `initialize` request.
		*/
		ErrorCodes.ServerNotInitialized = -32002;
		ErrorCodes.UnknownErrorCode = -32001;
		/**
		* This is the end range of JSON RPC reserved error codes.
		* It doesn't denote a real error code.
		*
		* @since 3.16.0
		*/
		ErrorCodes.jsonrpcReservedErrorRangeEnd = -32e3;
		/** @deprecated use  jsonrpcReservedErrorRangeEnd */
		ErrorCodes.serverErrorEnd = -32e3;
	})(ErrorCodes || (exports.ErrorCodes = ErrorCodes = {}));
	exports.ResponseError = class ResponseError extends Error {
		code;
		data;
		constructor(code, message, data) {
			super(message);
			this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
			this.data = data;
			Object.setPrototypeOf(this, ResponseError.prototype);
		}
		toJson() {
			const result = {
				code: this.code,
				message: this.message
			};
			if (this.data !== void 0) result.data = this.data;
			return result;
		}
	};
	var ParameterStructures = class ParameterStructures {
		kind;
		/**
		* The parameter structure is automatically inferred on the number of parameters
		* and the parameter type in case of a single param.
		*/
		static auto = new ParameterStructures("auto");
		/**
		* Forces `byPosition` parameter structure. This is useful if you have a single
		* parameter which has a literal type.
		*/
		static byPosition = new ParameterStructures("byPosition");
		/**
		* Forces `byName` parameter structure. This is only useful when having a single
		* parameter. The library will report errors if used with a different number of
		* parameters.
		*/
		static byName = new ParameterStructures("byName");
		constructor(kind) {
			this.kind = kind;
		}
		static is(value) {
			return value === ParameterStructures.auto || value === ParameterStructures.byName || value === ParameterStructures.byPosition;
		}
		toString() {
			return this.kind;
		}
	};
	exports.ParameterStructures = ParameterStructures;
	/**
	* An abstract implementation of a MessageType.
	*/
	var AbstractMessageSignature = class {
		method;
		numberOfParams;
		constructor(method, numberOfParams) {
			this.method = method;
			this.numberOfParams = numberOfParams;
		}
		get parameterStructures() {
			return ParameterStructures.auto;
		}
	};
	exports.AbstractMessageSignature = AbstractMessageSignature;
	/**
	* Classes to type request response pairs
	*/
	var RequestType0 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 0);
		}
	};
	exports.RequestType0 = RequestType0;
	var RequestType = class extends AbstractMessageSignature {
		_parameterStructures;
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method, _parameterStructures = ParameterStructures.auto) {
			super(method, 1);
			this._parameterStructures = _parameterStructures;
		}
		get parameterStructures() {
			return this._parameterStructures;
		}
	};
	exports.RequestType = RequestType;
	var RequestType1 = class extends AbstractMessageSignature {
		_parameterStructures;
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method, _parameterStructures = ParameterStructures.auto) {
			super(method, 1);
			this._parameterStructures = _parameterStructures;
		}
		get parameterStructures() {
			return this._parameterStructures;
		}
	};
	exports.RequestType1 = RequestType1;
	var RequestType2 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 2);
		}
	};
	exports.RequestType2 = RequestType2;
	var RequestType3 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 3);
		}
	};
	exports.RequestType3 = RequestType3;
	var RequestType4 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 4);
		}
	};
	exports.RequestType4 = RequestType4;
	var RequestType5 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 5);
		}
	};
	exports.RequestType5 = RequestType5;
	var RequestType6 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 6);
		}
	};
	exports.RequestType6 = RequestType6;
	var RequestType7 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 7);
		}
	};
	exports.RequestType7 = RequestType7;
	var RequestType8 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 8);
		}
	};
	exports.RequestType8 = RequestType8;
	var RequestType9 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 9);
		}
	};
	exports.RequestType9 = RequestType9;
	var NotificationType = class extends AbstractMessageSignature {
		_parameterStructures;
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method, _parameterStructures = ParameterStructures.auto) {
			super(method, 1);
			this._parameterStructures = _parameterStructures;
		}
		get parameterStructures() {
			return this._parameterStructures;
		}
	};
	exports.NotificationType = NotificationType;
	var NotificationType0 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 0);
		}
	};
	exports.NotificationType0 = NotificationType0;
	var NotificationType1 = class extends AbstractMessageSignature {
		_parameterStructures;
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method, _parameterStructures = ParameterStructures.auto) {
			super(method, 1);
			this._parameterStructures = _parameterStructures;
		}
		get parameterStructures() {
			return this._parameterStructures;
		}
	};
	exports.NotificationType1 = NotificationType1;
	var NotificationType2 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 2);
		}
	};
	exports.NotificationType2 = NotificationType2;
	var NotificationType3 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 3);
		}
	};
	exports.NotificationType3 = NotificationType3;
	var NotificationType4 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 4);
		}
	};
	exports.NotificationType4 = NotificationType4;
	var NotificationType5 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 5);
		}
	};
	exports.NotificationType5 = NotificationType5;
	var NotificationType6 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 6);
		}
	};
	exports.NotificationType6 = NotificationType6;
	var NotificationType7 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 7);
		}
	};
	exports.NotificationType7 = NotificationType7;
	var NotificationType8 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 8);
		}
	};
	exports.NotificationType8 = NotificationType8;
	var NotificationType9 = class extends AbstractMessageSignature {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		_;
		constructor(method) {
			super(method, 9);
		}
	};
	exports.NotificationType9 = NotificationType9;
	var Message;
	(function(Message) {
		/**
		* Tests if the given message is a request message
		*/
		function isRequest(message) {
			const candidate = message;
			return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
		}
		Message.isRequest = isRequest;
		/**
		* Tests if the given message is a notification message
		*/
		function isNotification(message) {
			const candidate = message;
			return candidate && is.string(candidate.method) && message.id === void 0;
		}
		Message.isNotification = isNotification;
		/**
		* Tests if the given message is a response message
		*/
		function isResponse(message) {
			const candidate = message;
			return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
		}
		Message.isResponse = isResponse;
	})(Message || (exports.Message = Message = {}));
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/linkedMap.js
var require_linkedMap = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.LRUCache = exports.LinkedMap = exports.Touch = void 0;
	var Touch;
	(function(Touch) {
		Touch.None = 0;
		Touch.First = 1;
		Touch.AsOld = Touch.First;
		Touch.Last = 2;
		Touch.AsNew = Touch.Last;
	})(Touch || (exports.Touch = Touch = {}));
	var LinkedMap = class {
		[Symbol.toStringTag] = "LinkedMap";
		_map;
		_head;
		_tail;
		_size;
		_state;
		constructor() {
			this._map = /* @__PURE__ */ new Map();
			this._head = void 0;
			this._tail = void 0;
			this._size = 0;
			this._state = 0;
		}
		clear() {
			this._map.clear();
			this._head = void 0;
			this._tail = void 0;
			this._size = 0;
			this._state++;
		}
		isEmpty() {
			return !this._head && !this._tail;
		}
		get size() {
			return this._size;
		}
		get first() {
			return this._head?.value;
		}
		get last() {
			return this._tail?.value;
		}
		before(key) {
			const item = this._map.get(key);
			return item ? item.previous?.value : void 0;
		}
		after(key) {
			const item = this._map.get(key);
			return item ? item.next?.value : void 0;
		}
		has(key) {
			return this._map.has(key);
		}
		get(key, touch = Touch.None) {
			const item = this._map.get(key);
			if (!item) return;
			if (touch !== Touch.None) this.touch(item, touch);
			return item.value;
		}
		set(key, value, touch = Touch.None) {
			let item = this._map.get(key);
			if (item) {
				item.value = value;
				if (touch !== Touch.None) this.touch(item, touch);
			} else {
				item = {
					key,
					value,
					next: void 0,
					previous: void 0
				};
				switch (touch) {
					case Touch.None:
						this.addItemLast(item);
						break;
					case Touch.First:
						this.addItemFirst(item);
						break;
					case Touch.Last:
						this.addItemLast(item);
						break;
					default:
						this.addItemLast(item);
						break;
				}
				this._map.set(key, item);
				this._size++;
			}
			return this;
		}
		delete(key) {
			return !!this.remove(key);
		}
		remove(key) {
			const item = this._map.get(key);
			if (!item) return;
			this._map.delete(key);
			this.removeItem(item);
			this._size--;
			return item.value;
		}
		shift() {
			if (!this._head && !this._tail) return;
			if (!this._head || !this._tail) throw new Error("Invalid list");
			const item = this._head;
			this._map.delete(item.key);
			this.removeItem(item);
			this._size--;
			return item.value;
		}
		forEach(callbackfn, thisArg) {
			const state = this._state;
			let current = this._head;
			while (current) {
				if (thisArg) callbackfn.bind(thisArg)(current.value, current.key, this);
				else callbackfn(current.value, current.key, this);
				if (this._state !== state) throw new Error(`LinkedMap got modified during iteration.`);
				current = current.next;
			}
		}
		keys() {
			const state = this._state;
			let current = this._head;
			const iterator = {
				[Symbol.iterator]: () => {
					return iterator;
				},
				next: () => {
					if (this._state !== state) throw new Error(`LinkedMap got modified during iteration.`);
					if (current) {
						const result = {
							value: current.key,
							done: false
						};
						current = current.next;
						return result;
					} else return {
						value: void 0,
						done: true
					};
				}
			};
			return iterator;
		}
		values() {
			const state = this._state;
			let current = this._head;
			const iterator = {
				[Symbol.iterator]: () => {
					return iterator;
				},
				next: () => {
					if (this._state !== state) throw new Error(`LinkedMap got modified during iteration.`);
					if (current) {
						const result = {
							value: current.value,
							done: false
						};
						current = current.next;
						return result;
					} else return {
						value: void 0,
						done: true
					};
				}
			};
			return iterator;
		}
		entries() {
			const state = this._state;
			let current = this._head;
			const iterator = {
				[Symbol.iterator]: () => {
					return iterator;
				},
				next: () => {
					if (this._state !== state) throw new Error(`LinkedMap got modified during iteration.`);
					if (current) {
						const result = {
							value: [current.key, current.value],
							done: false
						};
						current = current.next;
						return result;
					} else return {
						value: void 0,
						done: true
					};
				}
			};
			return iterator;
		}
		[Symbol.iterator]() {
			return this.entries();
		}
		trimOld(newSize) {
			if (newSize >= this.size) return;
			if (newSize === 0) {
				this.clear();
				return;
			}
			let current = this._head;
			let currentSize = this.size;
			while (current && currentSize > newSize) {
				this._map.delete(current.key);
				current = current.next;
				currentSize--;
			}
			this._head = current;
			this._size = currentSize;
			if (current) current.previous = void 0;
			this._state++;
		}
		addItemFirst(item) {
			if (!this._head && !this._tail) this._tail = item;
			else if (!this._head) throw new Error("Invalid list");
			else {
				item.next = this._head;
				this._head.previous = item;
			}
			this._head = item;
			this._state++;
		}
		addItemLast(item) {
			if (!this._head && !this._tail) this._head = item;
			else if (!this._tail) throw new Error("Invalid list");
			else {
				item.previous = this._tail;
				this._tail.next = item;
			}
			this._tail = item;
			this._state++;
		}
		removeItem(item) {
			if (item === this._head && item === this._tail) {
				this._head = void 0;
				this._tail = void 0;
			} else if (item === this._head) {
				if (!item.next) throw new Error("Invalid list");
				item.next.previous = void 0;
				this._head = item.next;
			} else if (item === this._tail) {
				if (!item.previous) throw new Error("Invalid list");
				item.previous.next = void 0;
				this._tail = item.previous;
			} else {
				const next = item.next;
				const previous = item.previous;
				if (!next || !previous) throw new Error("Invalid list");
				next.previous = previous;
				previous.next = next;
			}
			item.next = void 0;
			item.previous = void 0;
			this._state++;
		}
		touch(item, touch) {
			if (!this._head || !this._tail) throw new Error("Invalid list");
			if (touch !== Touch.First && touch !== Touch.Last) return;
			if (touch === Touch.First) {
				if (item === this._head) return;
				const next = item.next;
				const previous = item.previous;
				if (item === this._tail) {
					previous.next = void 0;
					this._tail = previous;
				} else {
					next.previous = previous;
					previous.next = next;
				}
				item.previous = void 0;
				item.next = this._head;
				this._head.previous = item;
				this._head = item;
				this._state++;
			} else if (touch === Touch.Last) {
				if (item === this._tail) return;
				const next = item.next;
				const previous = item.previous;
				if (item === this._head) {
					next.previous = void 0;
					this._head = next;
				} else {
					next.previous = previous;
					previous.next = next;
				}
				item.next = void 0;
				item.previous = this._tail;
				this._tail.next = item;
				this._tail = item;
				this._state++;
			}
		}
		toJSON() {
			const data = [];
			this.forEach((value, key) => {
				data.push([key, value]);
			});
			return data;
		}
		fromJSON(data) {
			this.clear();
			for (const [key, value] of data) this.set(key, value);
		}
	};
	exports.LinkedMap = LinkedMap;
	var LRUCache = class extends LinkedMap {
		_limit;
		_ratio;
		constructor(limit, ratio = 1) {
			super();
			this._limit = limit;
			this._ratio = Math.min(Math.max(0, ratio), 1);
		}
		get limit() {
			return this._limit;
		}
		set limit(limit) {
			this._limit = limit;
			this.checkTrim();
		}
		get ratio() {
			return this._ratio;
		}
		set ratio(ratio) {
			this._ratio = Math.min(Math.max(0, ratio), 1);
			this.checkTrim();
		}
		get(key, touch = Touch.AsNew) {
			return super.get(key, touch);
		}
		peek(key) {
			return super.get(key, Touch.None);
		}
		set(key, value) {
			super.set(key, value, Touch.Last);
			this.checkTrim();
			return this;
		}
		checkTrim() {
			if (this.size > this._limit) this.trimOld(Math.round(this._limit * this._ratio));
		}
	};
	exports.LRUCache = LRUCache;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/disposable.js
var require_disposable = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.Disposable = void 0;
	var Disposable;
	(function(Disposable) {
		function create(func) {
			return { dispose: func };
		}
		Disposable.create = create;
	})(Disposable || (exports.Disposable = Disposable = {}));
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/ral.js
var require_ral = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	let _ral;
	function RAL() {
		if (_ral === void 0) throw new Error(`No runtime abstraction layer installed`);
		return _ral;
	}
	(function(RAL) {
		function install(ral) {
			if (ral === void 0) throw new Error(`No runtime abstraction layer provided`);
			_ral = ral;
		}
		RAL.install = install;
	})(RAL || (RAL = {}));
	exports.default = RAL;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/events.js
var require_events = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __importDefault = exports && exports.__importDefault || function(mod) {
		return mod && mod.__esModule ? mod : { "default": mod };
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.Emitter = exports.Event = void 0;
	const ral_1 = __importDefault(require_ral());
	var Event;
	(function(Event) {
		const _disposable = { dispose() {} };
		Event.None = function() {
			return _disposable;
		};
	})(Event || (exports.Event = Event = {}));
	var CallbackList = class {
		_callbacks;
		_contexts;
		add(callback, context = null, bucket) {
			if (!this._callbacks) {
				this._callbacks = [];
				this._contexts = [];
			}
			this._callbacks.push(callback);
			this._contexts.push(context);
			if (Array.isArray(bucket)) bucket.push({ dispose: () => this.remove(callback, context) });
		}
		remove(callback, context = null) {
			if (!this._callbacks) return;
			let foundCallbackWithDifferentContext = false;
			for (let i = 0, len = this._callbacks.length; i < len; i++) if (this._callbacks[i] === callback) if (this._contexts[i] === context) {
				this._callbacks.splice(i, 1);
				this._contexts.splice(i, 1);
				return;
			} else foundCallbackWithDifferentContext = true;
			if (foundCallbackWithDifferentContext) throw new Error("When adding a listener with a context, you should remove it with the same context");
		}
		invoke(...args) {
			if (!this._callbacks) return [];
			const ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
			for (let i = 0, len = callbacks.length; i < len; i++) try {
				ret.push(callbacks[i].apply(contexts[i], args));
			} catch (e) {
				(0, ral_1.default)().console.error(e);
			}
			return ret;
		}
		isEmpty() {
			return !this._callbacks || this._callbacks.length === 0;
		}
		dispose() {
			this._callbacks = void 0;
			this._contexts = void 0;
		}
	};
	exports.Emitter = class Emitter {
		_options;
		static _noop = function() {};
		_event;
		_callbacks;
		constructor(_options) {
			this._options = _options;
		}
		/**
		* For the public to allow to subscribe
		* to events from this Emitter
		*/
		get event() {
			if (!this._event) this._event = (listener, thisArgs, disposables) => {
				if (!this._callbacks) this._callbacks = new CallbackList();
				if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) this._options.onFirstListenerAdd(this);
				this._callbacks.add(listener, thisArgs);
				const result = { dispose: () => {
					if (!this._callbacks) return;
					this._callbacks.remove(listener, thisArgs);
					result.dispose = Emitter._noop;
					if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) this._options.onLastListenerRemove(this);
				} };
				if (Array.isArray(disposables)) disposables.push(result);
				return result;
			};
			return this._event;
		}
		/**
		* To be kept private to fire an event to
		* subscribers
		*/
		fire(event) {
			if (this._callbacks) this._callbacks.invoke.call(this._callbacks, event);
		}
		dispose() {
			if (this._callbacks) {
				this._callbacks.dispose();
				this._callbacks = void 0;
			}
		}
	};
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/cancellation.js
var require_cancellation = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
		Object.defineProperty(o, "default", {
			enumerable: true,
			value: v
		});
	}) : function(o, v) {
		o["default"] = v;
	});
	var __importStar = exports && exports.__importStar || (function() {
		var ownKeys = function(o) {
			ownKeys = Object.getOwnPropertyNames || function(o) {
				var ar = [];
				for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
				return ar;
			};
			return ownKeys(o);
		};
		return function(mod) {
			if (mod && mod.__esModule) return mod;
			var result = {};
			if (mod != null) {
				for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
			}
			__setModuleDefault(result, mod);
			return result;
		};
	})();
	var __importDefault = exports && exports.__importDefault || function(mod) {
		return mod && mod.__esModule ? mod : { "default": mod };
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.CancellationTokenSource = exports.CancellationToken = void 0;
	const ral_1 = __importDefault(require_ral());
	const Is = __importStar(require_is$1());
	const events_1 = require_events();
	var CancellationToken;
	(function(CancellationToken) {
		CancellationToken.None = Object.freeze({
			isCancellationRequested: false,
			onCancellationRequested: events_1.Event.None
		});
		CancellationToken.Cancelled = Object.freeze({
			isCancellationRequested: true,
			onCancellationRequested: events_1.Event.None
		});
		function is(value) {
			const candidate = value;
			return candidate && (candidate === CancellationToken.None || candidate === CancellationToken.Cancelled || Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested);
		}
		CancellationToken.is = is;
	})(CancellationToken || (exports.CancellationToken = CancellationToken = {}));
	const shortcutEvent = Object.freeze(function(callback, context) {
		const handle = (0, ral_1.default)().timer.setTimeout(callback.bind(context), 0);
		return { dispose() {
			handle.dispose();
		} };
	});
	var MutableToken = class {
		_isCancelled = false;
		_emitter;
		cancel() {
			if (!this._isCancelled) {
				this._isCancelled = true;
				if (this._emitter) {
					this._emitter.fire(void 0);
					this.dispose();
				}
			}
		}
		get isCancellationRequested() {
			return this._isCancelled;
		}
		get onCancellationRequested() {
			if (this._isCancelled) return shortcutEvent;
			if (!this._emitter) this._emitter = new events_1.Emitter();
			return this._emitter.event;
		}
		dispose() {
			if (this._emitter) {
				this._emitter.dispose();
				this._emitter = void 0;
			}
		}
	};
	var CancellationTokenSource = class {
		_token;
		get token() {
			if (!this._token) this._token = new MutableToken();
			return this._token;
		}
		cancel() {
			if (!this._token) this._token = CancellationToken.Cancelled;
			else this._token.cancel();
		}
		dispose() {
			if (!this._token) this._token = CancellationToken.None;
			else if (this._token instanceof MutableToken) this._token.dispose();
		}
	};
	exports.CancellationTokenSource = CancellationTokenSource;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js
var require_sharedArrayCancellation = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.SharedArrayReceiverStrategy = exports.SharedArraySenderStrategy = void 0;
	const cancellation_1 = require_cancellation();
	var CancellationState;
	(function(CancellationState) {
		CancellationState.Continue = 0;
		CancellationState.Cancelled = 1;
	})(CancellationState || (CancellationState = {}));
	var SharedArraySenderStrategy = class {
		buffers;
		constructor() {
			this.buffers = /* @__PURE__ */ new Map();
		}
		enableCancellation(request) {
			if (request.id === null) return;
			const buffer = new SharedArrayBuffer(4);
			const data = new Int32Array(buffer, 0, 1);
			data[0] = CancellationState.Continue;
			this.buffers.set(request.id, buffer);
			request.$cancellationData = buffer;
		}
		async sendCancellation(_conn, id) {
			const buffer = this.buffers.get(id);
			if (buffer === void 0) return;
			const data = new Int32Array(buffer, 0, 1);
			Atomics.store(data, 0, CancellationState.Cancelled);
		}
		cleanup(id) {
			this.buffers.delete(id);
		}
		dispose() {
			this.buffers.clear();
		}
	};
	exports.SharedArraySenderStrategy = SharedArraySenderStrategy;
	var SharedArrayBufferCancellationToken = class {
		data;
		constructor(buffer) {
			this.data = new Int32Array(buffer, 0, 1);
		}
		get isCancellationRequested() {
			return Atomics.load(this.data, 0) === CancellationState.Cancelled;
		}
		get onCancellationRequested() {
			throw new Error(`Cancellation over SharedArrayBuffer doesn't support cancellation events`);
		}
	};
	var SharedArrayBufferCancellationTokenSource = class {
		token;
		constructor(buffer) {
			this.token = new SharedArrayBufferCancellationToken(buffer);
		}
		cancel() {}
		dispose() {}
	};
	var SharedArrayReceiverStrategy = class {
		kind = "request";
		createCancellationTokenSource(request) {
			const buffer = request.$cancellationData;
			if (buffer === void 0) return new cancellation_1.CancellationTokenSource();
			return new SharedArrayBufferCancellationTokenSource(buffer);
		}
	};
	exports.SharedArrayReceiverStrategy = SharedArrayReceiverStrategy;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/semaphore.js
var require_semaphore = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __importDefault = exports && exports.__importDefault || function(mod) {
		return mod && mod.__esModule ? mod : { "default": mod };
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.Semaphore = void 0;
	const ral_1 = __importDefault(require_ral());
	var Semaphore = class {
		_capacity;
		_active;
		_waiting;
		constructor(capacity = 1) {
			if (capacity <= 0) throw new Error("Capacity must be greater than 0");
			this._capacity = capacity;
			this._active = 0;
			this._waiting = [];
		}
		lock(thunk) {
			return new Promise((resolve, reject) => {
				this._waiting.push({
					thunk,
					resolve,
					reject
				});
				this.runNext();
			});
		}
		get active() {
			return this._active;
		}
		runNext() {
			if (this._waiting.length === 0 || this._active === this._capacity) return;
			(0, ral_1.default)().timer.setImmediate(() => this.doRunNext());
		}
		doRunNext() {
			if (this._waiting.length === 0 || this._active === this._capacity) return;
			const next = this._waiting.shift();
			this._active++;
			if (this._active > this._capacity) throw new Error(`Too many thunks active`);
			try {
				const result = next.thunk();
				if (result instanceof Promise) result.then((value) => {
					this._active--;
					next.resolve(value);
					this.runNext();
				}, (err) => {
					this._active--;
					next.reject(err);
					this.runNext();
				});
				else {
					this._active--;
					next.resolve(result);
					this.runNext();
				}
			} catch (err) {
				this._active--;
				next.reject(err);
				this.runNext();
			}
		}
	};
	exports.Semaphore = Semaphore;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/messageReader.js
var require_messageReader = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
		Object.defineProperty(o, "default", {
			enumerable: true,
			value: v
		});
	}) : function(o, v) {
		o["default"] = v;
	});
	var __importStar = exports && exports.__importStar || (function() {
		var ownKeys = function(o) {
			ownKeys = Object.getOwnPropertyNames || function(o) {
				var ar = [];
				for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
				return ar;
			};
			return ownKeys(o);
		};
		return function(mod) {
			if (mod && mod.__esModule) return mod;
			var result = {};
			if (mod != null) {
				for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
			}
			__setModuleDefault(result, mod);
			return result;
		};
	})();
	var __importDefault = exports && exports.__importDefault || function(mod) {
		return mod && mod.__esModule ? mod : { "default": mod };
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = void 0;
	const ral_1 = __importDefault(require_ral());
	const Is = __importStar(require_is$1());
	const events_1 = require_events();
	const semaphore_1 = require_semaphore();
	var MessageReader;
	(function(MessageReader) {
		function is(value) {
			const candidate = value;
			return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) && Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
		}
		MessageReader.is = is;
	})(MessageReader || (exports.MessageReader = MessageReader = {}));
	var AbstractMessageReader = class {
		errorEmitter;
		closeEmitter;
		partialMessageEmitter;
		constructor() {
			this.errorEmitter = new events_1.Emitter();
			this.closeEmitter = new events_1.Emitter();
			this.partialMessageEmitter = new events_1.Emitter();
		}
		dispose() {
			this.errorEmitter.dispose();
			this.closeEmitter.dispose();
			this.partialMessageEmitter.dispose();
		}
		get onError() {
			return this.errorEmitter.event;
		}
		fireError(error) {
			this.errorEmitter.fire(this.asError(error));
		}
		get onClose() {
			return this.closeEmitter.event;
		}
		fireClose() {
			this.closeEmitter.fire(void 0);
		}
		get onPartialMessage() {
			return this.partialMessageEmitter.event;
		}
		firePartialMessage(info) {
			this.partialMessageEmitter.fire(info);
		}
		asError(error) {
			if (error instanceof Error) return error;
			else return /* @__PURE__ */ new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
		}
	};
	exports.AbstractMessageReader = AbstractMessageReader;
	var ResolvedMessageReaderOptions;
	(function(ResolvedMessageReaderOptions) {
		function fromOptions(options) {
			let charset;
			let contentDecoder;
			const contentDecoders = /* @__PURE__ */ new Map();
			let contentTypeDecoder;
			const contentTypeDecoders = /* @__PURE__ */ new Map();
			if (options === void 0 || typeof options === "string") charset = options ?? "utf-8";
			else {
				charset = options.charset ?? "utf-8";
				if (options.contentDecoder !== void 0) {
					contentDecoder = options.contentDecoder;
					contentDecoders.set(contentDecoder.name, contentDecoder);
				}
				if (options.contentDecoders !== void 0) for (const decoder of options.contentDecoders) contentDecoders.set(decoder.name, decoder);
				if (options.contentTypeDecoder !== void 0) {
					contentTypeDecoder = options.contentTypeDecoder;
					contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
				}
				if (options.contentTypeDecoders !== void 0) for (const decoder of options.contentTypeDecoders) contentTypeDecoders.set(decoder.name, decoder);
			}
			if (contentTypeDecoder === void 0) {
				contentTypeDecoder = (0, ral_1.default)().applicationJson.decoder;
				contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
			}
			return {
				charset,
				contentDecoder,
				contentDecoders,
				contentTypeDecoder,
				contentTypeDecoders
			};
		}
		ResolvedMessageReaderOptions.fromOptions = fromOptions;
	})(ResolvedMessageReaderOptions || (ResolvedMessageReaderOptions = {}));
	var ReadableStreamMessageReader = class extends AbstractMessageReader {
		readable;
		options;
		callback;
		nextMessageLength;
		messageToken;
		buffer;
		partialMessageTimer;
		_partialMessageTimeout;
		readSemaphore;
		constructor(readable, options) {
			super();
			this.readable = readable;
			this.options = ResolvedMessageReaderOptions.fromOptions(options);
			this.buffer = (0, ral_1.default)().messageBuffer.create(this.options.charset);
			this._partialMessageTimeout = 1e4;
			this.nextMessageLength = -1;
			this.messageToken = 0;
			this.readSemaphore = new semaphore_1.Semaphore(1);
		}
		set partialMessageTimeout(timeout) {
			this._partialMessageTimeout = timeout;
		}
		get partialMessageTimeout() {
			return this._partialMessageTimeout;
		}
		listen(callback) {
			this.nextMessageLength = -1;
			this.messageToken = 0;
			this.partialMessageTimer = void 0;
			this.callback = callback;
			const result = this.readable.onData((data) => {
				this.onData(data);
			});
			this.readable.onError((error) => this.fireError(error));
			this.readable.onClose(() => this.fireClose());
			return result;
		}
		onData(data) {
			try {
				this.buffer.append(data);
				while (true) {
					if (this.nextMessageLength === -1) {
						const headers = this.buffer.tryReadHeaders(true);
						if (!headers) return;
						const contentLength = headers.get("content-length");
						if (!contentLength) {
							this.fireError(/* @__PURE__ */ new Error(`Header must provide a Content-Length property.\n${JSON.stringify(Object.fromEntries(headers))}`));
							return;
						}
						const length = parseInt(contentLength);
						if (isNaN(length)) {
							this.fireError(/* @__PURE__ */ new Error(`Content-Length value must be a number. Got ${contentLength}`));
							return;
						}
						this.nextMessageLength = length;
					}
					const body = this.buffer.tryReadBody(this.nextMessageLength);
					if (body === void 0) {
						/** We haven't received the full message yet. */
						this.setPartialMessageTimer();
						return;
					}
					this.clearPartialMessageTimer();
					this.nextMessageLength = -1;
					this.readSemaphore.lock(async () => {
						const bytes = this.options.contentDecoder !== void 0 ? await this.options.contentDecoder.decode(body) : body;
						const message = await this.options.contentTypeDecoder.decode(bytes, this.options);
						this.callback(message);
					}).catch((error) => {
						this.fireError(error);
					});
				}
			} catch (error) {
				this.fireError(error);
			}
		}
		clearPartialMessageTimer() {
			if (this.partialMessageTimer) {
				this.partialMessageTimer.dispose();
				this.partialMessageTimer = void 0;
			}
		}
		setPartialMessageTimer() {
			this.clearPartialMessageTimer();
			if (this._partialMessageTimeout <= 0) return;
			this.partialMessageTimer = (0, ral_1.default)().timer.setTimeout((token, timeout) => {
				this.partialMessageTimer = void 0;
				if (token === this.messageToken) {
					this.firePartialMessage({
						messageToken: token,
						waitingTime: timeout
					});
					this.setPartialMessageTimer();
				}
			}, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
		}
	};
	exports.ReadableStreamMessageReader = ReadableStreamMessageReader;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/messageWriter.js
var require_messageWriter = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
		Object.defineProperty(o, "default", {
			enumerable: true,
			value: v
		});
	}) : function(o, v) {
		o["default"] = v;
	});
	var __importStar = exports && exports.__importStar || (function() {
		var ownKeys = function(o) {
			ownKeys = Object.getOwnPropertyNames || function(o) {
				var ar = [];
				for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
				return ar;
			};
			return ownKeys(o);
		};
		return function(mod) {
			if (mod && mod.__esModule) return mod;
			var result = {};
			if (mod != null) {
				for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
			}
			__setModuleDefault(result, mod);
			return result;
		};
	})();
	var __importDefault = exports && exports.__importDefault || function(mod) {
		return mod && mod.__esModule ? mod : { "default": mod };
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = void 0;
	const ral_1 = __importDefault(require_ral());
	const Is = __importStar(require_is$1());
	const semaphore_1 = require_semaphore();
	const events_1 = require_events();
	const ContentLength = "Content-Length: ";
	const CRLF = "\r\n";
	var MessageWriter;
	(function(MessageWriter) {
		function is(value) {
			const candidate = value;
			return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) && Is.func(candidate.onError) && Is.func(candidate.write);
		}
		MessageWriter.is = is;
	})(MessageWriter || (exports.MessageWriter = MessageWriter = {}));
	var AbstractMessageWriter = class {
		errorEmitter;
		closeEmitter;
		constructor() {
			this.errorEmitter = new events_1.Emitter();
			this.closeEmitter = new events_1.Emitter();
		}
		dispose() {
			this.errorEmitter.dispose();
			this.closeEmitter.dispose();
		}
		get onError() {
			return this.errorEmitter.event;
		}
		fireError(error, message, count) {
			this.errorEmitter.fire([
				this.asError(error),
				message,
				count
			]);
		}
		get onClose() {
			return this.closeEmitter.event;
		}
		fireClose() {
			this.closeEmitter.fire(void 0);
		}
		asError(error) {
			if (error instanceof Error) return error;
			else return /* @__PURE__ */ new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
		}
	};
	exports.AbstractMessageWriter = AbstractMessageWriter;
	var ResolvedMessageWriterOptions;
	(function(ResolvedMessageWriterOptions) {
		function fromOptions(options) {
			if (options === void 0 || typeof options === "string") return {
				charset: options ?? "utf-8",
				contentTypeEncoder: (0, ral_1.default)().applicationJson.encoder
			};
			else return {
				charset: options.charset ?? "utf-8",
				contentEncoder: options.contentEncoder,
				contentTypeEncoder: options.contentTypeEncoder ?? (0, ral_1.default)().applicationJson.encoder
			};
		}
		ResolvedMessageWriterOptions.fromOptions = fromOptions;
	})(ResolvedMessageWriterOptions || (ResolvedMessageWriterOptions = {}));
	var WriteableStreamMessageWriter = class extends AbstractMessageWriter {
		writable;
		options;
		errorCount;
		writeSemaphore;
		constructor(writable, options) {
			super();
			this.writable = writable;
			this.options = ResolvedMessageWriterOptions.fromOptions(options);
			this.errorCount = 0;
			this.writeSemaphore = new semaphore_1.Semaphore(1);
			this.writable.onError((error) => this.fireError(error));
			this.writable.onClose(() => this.fireClose());
		}
		async write(msg) {
			return this.writeSemaphore.lock(async () => {
				return this.options.contentTypeEncoder.encode(msg, this.options).then((buffer) => {
					if (this.options.contentEncoder !== void 0) return this.options.contentEncoder.encode(buffer);
					else return buffer;
				}).then((buffer) => {
					const headers = [];
					headers.push(ContentLength, buffer.byteLength.toString(), CRLF);
					headers.push(CRLF);
					return this.doWrite(msg, headers, buffer);
				}, (error) => {
					this.fireError(error);
					throw error;
				});
			});
		}
		async doWrite(msg, headers, data) {
			try {
				await this.writable.write(headers.join(""), "ascii");
				return this.writable.write(data);
			} catch (error) {
				this.handleError(error, msg);
				return Promise.reject(error);
			}
		}
		handleError(error, msg) {
			this.errorCount++;
			this.fireError(error, msg, this.errorCount);
		}
		end() {
			this.writable.end();
		}
	};
	exports.WriteableStreamMessageWriter = WriteableStreamMessageWriter;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/messageBuffer.js
var require_messageBuffer = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.AbstractMessageBuffer = void 0;
	const CR = 13;
	const LF = 10;
	const CRLF = "\r\n";
	var AbstractMessageBuffer = class {
		_encoding;
		_chunks;
		_totalLength;
		constructor(encoding = "utf-8") {
			this._encoding = encoding;
			this._chunks = [];
			this._totalLength = 0;
		}
		get encoding() {
			return this._encoding;
		}
		append(chunk) {
			const toAppend = typeof chunk === "string" ? this.fromString(chunk, this._encoding) : chunk;
			this._chunks.push(toAppend);
			this._totalLength += toAppend.byteLength;
		}
		tryReadHeaders(lowerCaseKeys = false) {
			if (this._chunks.length === 0) return;
			let state = 0;
			let chunkIndex = 0;
			let offset = 0;
			let chunkBytesRead = 0;
			row: while (chunkIndex < this._chunks.length) {
				const chunk = this._chunks[chunkIndex];
				offset = 0;
				while (offset < chunk.length) {
					switch (chunk[offset]) {
						case CR:
							switch (state) {
								case 0:
									state = 1;
									break;
								case 2:
									state = 3;
									break;
								default: state = 0;
							}
							break;
						case LF:
							switch (state) {
								case 1:
									state = 2;
									break;
								case 3:
									state = 4;
									offset++;
									break row;
								default: state = 0;
							}
							break;
						default: state = 0;
					}
					offset++;
				}
				chunkBytesRead += chunk.byteLength;
				chunkIndex++;
			}
			if (state !== 4) return;
			const buffer = this._read(chunkBytesRead + offset);
			const result = /* @__PURE__ */ new Map();
			const headers = this.toString(buffer, "ascii").split(CRLF);
			if (headers.length < 2) return result;
			for (let i = 0; i < headers.length - 2; i++) {
				const header = headers[i];
				const index = header.indexOf(":");
				if (index === -1) throw new Error(`Message header must separate key and value using ':'\n${header}`);
				const key = header.substr(0, index);
				const value = header.substr(index + 1).trim();
				result.set(lowerCaseKeys ? key.toLowerCase() : key, value);
			}
			return result;
		}
		tryReadBody(length) {
			if (this._totalLength < length) return;
			return this._read(length);
		}
		get numberOfBytes() {
			return this._totalLength;
		}
		_read(byteCount) {
			if (byteCount === 0) return this.emptyBuffer();
			if (byteCount > this._totalLength) throw new Error(`Cannot read so many bytes!`);
			if (this._chunks[0].byteLength === byteCount) {
				const chunk = this._chunks[0];
				this._chunks.shift();
				this._totalLength -= byteCount;
				return this.asNative(chunk);
			}
			if (this._chunks[0].byteLength > byteCount) {
				const chunk = this._chunks[0];
				const result = this.asNative(chunk, byteCount);
				this._chunks[0] = chunk.slice(byteCount);
				this._totalLength -= byteCount;
				return result;
			}
			const result = this.allocNative(byteCount);
			let resultOffset = 0;
			const chunkIndex = 0;
			while (byteCount > 0) {
				const chunk = this._chunks[chunkIndex];
				if (chunk.byteLength > byteCount) {
					const chunkPart = chunk.slice(0, byteCount);
					result.set(chunkPart, resultOffset);
					resultOffset += byteCount;
					this._chunks[chunkIndex] = chunk.slice(byteCount);
					this._totalLength -= byteCount;
					byteCount -= byteCount;
				} else {
					result.set(chunk, resultOffset);
					resultOffset += chunk.byteLength;
					this._chunks.shift();
					this._totalLength -= chunk.byteLength;
					byteCount -= chunk.byteLength;
				}
			}
			return result;
		}
	};
	exports.AbstractMessageBuffer = AbstractMessageBuffer;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/connection.js
var require_connection$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
		Object.defineProperty(o, "default", {
			enumerable: true,
			value: v
		});
	}) : function(o, v) {
		o["default"] = v;
	});
	var __importStar = exports && exports.__importStar || (function() {
		var ownKeys = function(o) {
			ownKeys = Object.getOwnPropertyNames || function(o) {
				var ar = [];
				for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
				return ar;
			};
			return ownKeys(o);
		};
		return function(mod) {
			if (mod && mod.__esModule) return mod;
			var result = {};
			if (mod != null) {
				for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
			}
			__setModuleDefault(result, mod);
			return result;
		};
	})();
	var __importDefault = exports && exports.__importDefault || function(mod) {
		return mod && mod.__esModule ? mod : { "default": mod };
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.ConnectionOptions = exports.MessageStrategy = exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.RequestCancellationReceiverStrategy = exports.IdCancellationReceiverStrategy = exports.ConnectionStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.TraceValues = exports.TraceValue = exports.Trace = exports.NullLogger = exports.ProgressType = exports.ProgressToken = void 0;
	exports.createMessageConnection = createMessageConnection;
	const ral_1 = __importDefault(require_ral());
	const Is = __importStar(require_is$1());
	const messages_1 = require_messages$1();
	const linkedMap_1 = require_linkedMap();
	const events_1 = require_events();
	const cancellation_1 = require_cancellation();
	var CancelNotification;
	(function(CancelNotification) {
		CancelNotification.type = new messages_1.NotificationType("$/cancelRequest");
	})(CancelNotification || (CancelNotification = {}));
	var ProgressToken;
	(function(ProgressToken) {
		function is(value) {
			return typeof value === "string" || typeof value === "number";
		}
		ProgressToken.is = is;
	})(ProgressToken || (exports.ProgressToken = ProgressToken = {}));
	var ProgressNotification;
	(function(ProgressNotification) {
		ProgressNotification.type = new messages_1.NotificationType("$/progress");
	})(ProgressNotification || (ProgressNotification = {}));
	var ProgressType = class {
		/**
		* Clients must not use these properties. They are here to ensure correct typing.
		* in TypeScript
		*/
		__;
		_pr;
		constructor() {}
	};
	exports.ProgressType = ProgressType;
	var StarRequestHandler;
	(function(StarRequestHandler) {
		function is(value) {
			return Is.func(value);
		}
		StarRequestHandler.is = is;
	})(StarRequestHandler || (StarRequestHandler = {}));
	exports.NullLogger = Object.freeze({
		error: () => {},
		warn: () => {},
		info: () => {},
		log: () => {}
	});
	var Trace;
	(function(Trace) {
		Trace[Trace["Off"] = 0] = "Off";
		Trace[Trace["Messages"] = 1] = "Messages";
		Trace[Trace["Compact"] = 2] = "Compact";
		Trace[Trace["Verbose"] = 3] = "Verbose";
	})(Trace || (exports.Trace = Trace = {}));
	var TraceValue;
	(function(TraceValue) {
		/**
		* Turn tracing off.
		*/
		TraceValue.Off = "off";
		/**
		* Trace messages only.
		*/
		TraceValue.Messages = "messages";
		/**
		* Compact message tracing.
		*/
		TraceValue.Compact = "compact";
		/**
		* Verbose message tracing.
		*/
		TraceValue.Verbose = "verbose";
	})(TraceValue || (exports.TraceValue = TraceValue = {}));
	/**
	* @deprecated Use TraceValue instead
	*/
	exports.TraceValues = TraceValue;
	(function(Trace) {
		function fromString(value) {
			if (!Is.string(value)) return Trace.Off;
			value = value.toLowerCase();
			switch (value) {
				case "off": return Trace.Off;
				case "messages": return Trace.Messages;
				case "compact": return Trace.Compact;
				case "verbose": return Trace.Verbose;
				default: return Trace.Off;
			}
		}
		Trace.fromString = fromString;
		function toString(value) {
			switch (value) {
				case Trace.Off: return "off";
				case Trace.Messages: return "messages";
				case Trace.Compact: return "compact";
				case Trace.Verbose: return "verbose";
				default: return "off";
			}
		}
		Trace.toString = toString;
	})(Trace || (exports.Trace = Trace = {}));
	var TraceFormat;
	(function(TraceFormat) {
		TraceFormat["Text"] = "text";
		TraceFormat["JSON"] = "json";
	})(TraceFormat || (exports.TraceFormat = TraceFormat = {}));
	(function(TraceFormat) {
		function fromString(value) {
			if (!Is.string(value)) return TraceFormat.Text;
			value = value.toLowerCase();
			if (value === "json") return TraceFormat.JSON;
			else return TraceFormat.Text;
		}
		TraceFormat.fromString = fromString;
	})(TraceFormat || (exports.TraceFormat = TraceFormat = {}));
	var SetTraceNotification;
	(function(SetTraceNotification) {
		SetTraceNotification.type = new messages_1.NotificationType("$/setTrace");
	})(SetTraceNotification || (exports.SetTraceNotification = SetTraceNotification = {}));
	var LogTraceNotification;
	(function(LogTraceNotification) {
		LogTraceNotification.type = new messages_1.NotificationType("$/logTrace");
	})(LogTraceNotification || (exports.LogTraceNotification = LogTraceNotification = {}));
	var ConnectionErrors;
	(function(ConnectionErrors) {
		/**
		* The connection is closed.
		*/
		ConnectionErrors[ConnectionErrors["Closed"] = 1] = "Closed";
		/**
		* The connection got disposed.
		*/
		ConnectionErrors[ConnectionErrors["Disposed"] = 2] = "Disposed";
		/**
		* The connection is already in listening mode.
		*/
		ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";
	})(ConnectionErrors || (exports.ConnectionErrors = ConnectionErrors = {}));
	var ConnectionError = class ConnectionError extends Error {
		code;
		constructor(code, message) {
			super(message);
			this.code = code;
			Object.setPrototypeOf(this, ConnectionError.prototype);
		}
	};
	exports.ConnectionError = ConnectionError;
	var ConnectionStrategy;
	(function(ConnectionStrategy) {
		function is(value) {
			const candidate = value;
			return candidate && Is.func(candidate.cancelUndispatched);
		}
		ConnectionStrategy.is = is;
	})(ConnectionStrategy || (exports.ConnectionStrategy = ConnectionStrategy = {}));
	var IdCancellationReceiverStrategy;
	(function(IdCancellationReceiverStrategy) {
		function is(value) {
			const candidate = value;
			return candidate && (candidate.kind === void 0 || candidate.kind === "id") && Is.func(candidate.createCancellationTokenSource) && (candidate.dispose === void 0 || Is.func(candidate.dispose));
		}
		IdCancellationReceiverStrategy.is = is;
	})(IdCancellationReceiverStrategy || (exports.IdCancellationReceiverStrategy = IdCancellationReceiverStrategy = {}));
	var RequestCancellationReceiverStrategy;
	(function(RequestCancellationReceiverStrategy) {
		function is(value) {
			const candidate = value;
			return candidate && candidate.kind === "request" && Is.func(candidate.createCancellationTokenSource) && (candidate.dispose === void 0 || Is.func(candidate.dispose));
		}
		RequestCancellationReceiverStrategy.is = is;
	})(RequestCancellationReceiverStrategy || (exports.RequestCancellationReceiverStrategy = RequestCancellationReceiverStrategy = {}));
	var CancellationReceiverStrategy;
	(function(CancellationReceiverStrategy) {
		CancellationReceiverStrategy.Message = Object.freeze({ createCancellationTokenSource(_) {
			return new cancellation_1.CancellationTokenSource();
		} });
		function is(value) {
			return IdCancellationReceiverStrategy.is(value) || RequestCancellationReceiverStrategy.is(value);
		}
		CancellationReceiverStrategy.is = is;
	})(CancellationReceiverStrategy || (exports.CancellationReceiverStrategy = CancellationReceiverStrategy = {}));
	var CancellationSenderStrategy;
	(function(CancellationSenderStrategy) {
		CancellationSenderStrategy.Message = Object.freeze({
			sendCancellation(conn, id) {
				return conn.sendNotification(CancelNotification.type, { id });
			},
			cleanup(_) {}
		});
		function is(value) {
			const candidate = value;
			return candidate && Is.func(candidate.sendCancellation) && Is.func(candidate.cleanup);
		}
		CancellationSenderStrategy.is = is;
	})(CancellationSenderStrategy || (exports.CancellationSenderStrategy = CancellationSenderStrategy = {}));
	var CancellationStrategy;
	(function(CancellationStrategy) {
		CancellationStrategy.Message = Object.freeze({
			receiver: CancellationReceiverStrategy.Message,
			sender: CancellationSenderStrategy.Message
		});
		function is(value) {
			const candidate = value;
			return candidate && CancellationReceiverStrategy.is(candidate.receiver) && CancellationSenderStrategy.is(candidate.sender);
		}
		CancellationStrategy.is = is;
	})(CancellationStrategy || (exports.CancellationStrategy = CancellationStrategy = {}));
	var MessageStrategy;
	(function(MessageStrategy) {
		function is(value) {
			const candidate = value;
			return candidate && Is.func(candidate.handleMessage);
		}
		MessageStrategy.is = is;
	})(MessageStrategy || (exports.MessageStrategy = MessageStrategy = {}));
	var ConnectionOptions;
	(function(ConnectionOptions) {
		function is(value) {
			const candidate = value;
			return candidate && (CancellationStrategy.is(candidate.cancellationStrategy) || ConnectionStrategy.is(candidate.connectionStrategy) || MessageStrategy.is(candidate.messageStrategy) || Is.number(candidate.maxParallelism));
		}
		ConnectionOptions.is = is;
	})(ConnectionOptions || (exports.ConnectionOptions = ConnectionOptions = {}));
	var ConnectionState;
	(function(ConnectionState) {
		ConnectionState[ConnectionState["New"] = 1] = "New";
		ConnectionState[ConnectionState["Listening"] = 2] = "Listening";
		ConnectionState[ConnectionState["Closed"] = 3] = "Closed";
		ConnectionState[ConnectionState["Disposed"] = 4] = "Disposed";
	})(ConnectionState || (ConnectionState = {}));
	function createMessageConnection(messageReader, messageWriter, _logger, options) {
		const logger = _logger !== void 0 ? _logger : exports.NullLogger;
		let sequenceNumber = 0;
		let notificationSequenceNumber = 0;
		let unknownResponseSequenceNumber = 0;
		const version = "2.0";
		const maxParallelism = options?.maxParallelism ?? -1;
		let inFlight = 0;
		let starRequestHandler = void 0;
		const requestHandlers = /* @__PURE__ */ new Map();
		let starNotificationHandler = void 0;
		const notificationHandlers = /* @__PURE__ */ new Map();
		const progressHandlers = /* @__PURE__ */ new Map();
		let timer;
		let messageQueue = new linkedMap_1.LinkedMap();
		let responsePromises = /* @__PURE__ */ new Map();
		let knownCanceledRequests = /* @__PURE__ */ new Set();
		let requestTokens = /* @__PURE__ */ new Map();
		let trace = Trace.Off;
		let traceFormat = TraceFormat.Text;
		let tracer;
		let state = ConnectionState.New;
		const errorEmitter = new events_1.Emitter();
		const closeEmitter = new events_1.Emitter();
		const unhandledNotificationEmitter = new events_1.Emitter();
		const unhandledProgressEmitter = new events_1.Emitter();
		const disposeEmitter = new events_1.Emitter();
		const cancellationStrategy = options && options.cancellationStrategy ? options.cancellationStrategy : CancellationStrategy.Message;
		function cancelUndispatched(_message) {}
		function isListening() {
			return state === ConnectionState.Listening;
		}
		function isClosed() {
			return state === ConnectionState.Closed;
		}
		function isDisposed() {
			return state === ConnectionState.Disposed;
		}
		function closeHandler() {
			if (state === ConnectionState.New || state === ConnectionState.Listening) {
				state = ConnectionState.Closed;
				closeEmitter.fire(void 0);
			}
		}
		function readErrorHandler(error) {
			errorEmitter.fire([
				error,
				void 0,
				void 0
			]);
		}
		function writeErrorHandler(data) {
			errorEmitter.fire(data);
		}
		messageReader.onClose(closeHandler);
		messageReader.onError(readErrorHandler);
		messageWriter.onClose(closeHandler);
		messageWriter.onError(writeErrorHandler);
		function createRequestQueueKey(id) {
			if (id === null) throw new Error(`Can't send requests with id null since the response can't be correlated.`);
			return "req-" + id.toString();
		}
		function createResponseQueueKey(id) {
			if (id === null) return "res-unknown-" + (++unknownResponseSequenceNumber).toString();
			else return "res-" + id.toString();
		}
		function createNotificationQueueKey() {
			return "not-" + (++notificationSequenceNumber).toString();
		}
		function addMessageToQueue(queue, message) {
			if (messages_1.Message.isRequest(message)) queue.set(createRequestQueueKey(message.id), message);
			else if (messages_1.Message.isResponse(message)) if (maxParallelism === -1) queue.set(createResponseQueueKey(message.id), message);
			else handleResponse(message);
			else queue.set(createNotificationQueueKey(), message);
		}
		function triggerMessageQueue() {
			if (timer || messageQueue.size === 0) return;
			if (maxParallelism !== -1 && inFlight >= maxParallelism) return;
			timer = (0, ral_1.default)().timer.setImmediate(async () => {
				timer = void 0;
				if (messageQueue.size === 0) return;
				if (maxParallelism !== -1 && inFlight >= maxParallelism) return;
				const message = messageQueue.shift();
				let result;
				try {
					inFlight++;
					const messageStrategy = options?.messageStrategy;
					if (MessageStrategy.is(messageStrategy)) result = messageStrategy.handleMessage(message, handleMessage);
					else result = handleMessage(message);
				} catch (error) {
					logger.error(`Processing message queue failed: ${error.toString()}`);
				} finally {
					if (result instanceof Promise) result.then(() => {
						inFlight--;
						triggerMessageQueue();
					}).catch((error) => {
						logger.error(`Processing message queue failed: ${error.toString()}`);
					});
					else inFlight--;
					triggerMessageQueue();
				}
			});
		}
		async function handleMessage(message) {
			if (messages_1.Message.isRequest(message)) return handleRequest(message);
			else if (messages_1.Message.isNotification(message)) return handleNotification(message);
			else if (messages_1.Message.isResponse(message)) return handleResponse(message);
			else return handleInvalidMessage(message);
		}
		const callback = (message) => {
			try {
				if (messages_1.Message.isNotification(message) && message.method === CancelNotification.type.method) {
					const cancelId = message.params.id;
					const key = createRequestQueueKey(cancelId);
					const toCancel = messageQueue.get(key);
					if (messages_1.Message.isRequest(toCancel)) {
						const strategy = options?.connectionStrategy;
						const response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : void 0;
						if (response && (response.error !== void 0 || response.result !== void 0)) {
							messageQueue.delete(key);
							requestTokens.delete(cancelId);
							response.id = toCancel.id;
							traceSendingResponse(response, message.method, Date.now());
							messageWriter.write(response).catch(() => logger.error(`Sending response for canceled message failed.`));
							return;
						}
					}
					const cancellationToken = requestTokens.get(cancelId);
					if (cancellationToken !== void 0) {
						cancellationToken.cancel();
						traceReceivedNotification(message);
						return;
					} else knownCanceledRequests.add(cancelId);
				}
				addMessageToQueue(messageQueue, message);
			} finally {
				triggerMessageQueue();
			}
		};
		async function handleRequest(requestMessage) {
			if (isDisposed()) return Promise.resolve();
			function reply(resultOrError, method, startTime) {
				const message = {
					jsonrpc: version,
					id: requestMessage.id
				};
				if (resultOrError instanceof messages_1.ResponseError) message.error = resultOrError.toJson();
				else message.result = resultOrError === void 0 ? null : resultOrError;
				traceSendingResponse(message, method, startTime);
				return messageWriter.write(message);
			}
			function replyError(error, method, startTime) {
				const message = {
					jsonrpc: version,
					id: requestMessage.id,
					error: error.toJson()
				};
				traceSendingResponse(message, method, startTime);
				return messageWriter.write(message);
			}
			traceReceivedRequest(requestMessage);
			const element = requestHandlers.get(requestMessage.method);
			let type;
			let requestHandler;
			if (element) {
				type = element.type;
				requestHandler = element.handler;
			}
			const startTime = Date.now();
			if (requestHandler || starRequestHandler) {
				const tokenKey = requestMessage.id ?? String(Date.now());
				const cancellationSource = IdCancellationReceiverStrategy.is(cancellationStrategy.receiver) ? cancellationStrategy.receiver.createCancellationTokenSource(tokenKey) : cancellationStrategy.receiver.createCancellationTokenSource(requestMessage);
				if (requestMessage.id !== null && knownCanceledRequests.has(requestMessage.id)) cancellationSource.cancel();
				if (requestMessage.id !== null) requestTokens.set(tokenKey, cancellationSource);
				try {
					let handlerResult;
					if (requestHandler) if (requestMessage.params === void 0) {
						if (type !== void 0 && type.numberOfParams !== 0) return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type.numberOfParams} params but received none.`), requestMessage.method, startTime);
						handlerResult = requestHandler(cancellationSource.token);
					} else if (Array.isArray(requestMessage.params)) {
						if (type !== void 0 && type.parameterStructures === messages_1.ParameterStructures.byName) return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by name but received parameters by position`), requestMessage.method, startTime);
						handlerResult = requestHandler(...requestMessage.params, cancellationSource.token);
					} else {
						if (type !== void 0 && type.parameterStructures === messages_1.ParameterStructures.byPosition) return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by position but received parameters by name`), requestMessage.method, startTime);
						handlerResult = requestHandler(requestMessage.params, cancellationSource.token);
					}
					else if (starRequestHandler) handlerResult = starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
					await reply(await handlerResult, requestMessage.method, startTime);
				} catch (error) {
					if (error instanceof messages_1.ResponseError) await reply(error, requestMessage.method, startTime);
					else if (error && Is.string(error.message)) await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
					else await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
				} finally {
					requestTokens.delete(tokenKey);
				}
			} else await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
		}
		function handleResponse(responseMessage) {
			if (isDisposed()) return;
			if (responseMessage.id === null) if (responseMessage.error) logger.error(`Received response message without id: Error is: \n${JSON.stringify(responseMessage.error, void 0, 4)}`);
			else logger.error(`Received response message without id. No further error information provided.`);
			else {
				const key = responseMessage.id;
				const responsePromise = responsePromises.get(key);
				traceReceivedResponse(responseMessage, responsePromise);
				if (responsePromise !== void 0) {
					responsePromises.delete(key);
					try {
						if (responseMessage.error) {
							const error = responseMessage.error;
							responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
						} else if (responseMessage.result !== void 0) responsePromise.resolve(responseMessage.result);
						else throw new Error("Should never happen.");
					} catch (error) {
						if (error.message) logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
						else logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
					}
				}
			}
		}
		async function handleNotification(message) {
			if (isDisposed()) return;
			let type = void 0;
			let notificationHandler;
			if (message.method === CancelNotification.type.method) {
				const cancelId = message.params.id;
				knownCanceledRequests.delete(cancelId);
				traceReceivedNotification(message);
				return;
			} else {
				const element = notificationHandlers.get(message.method);
				if (element) {
					notificationHandler = element.handler;
					type = element.type;
				}
			}
			if (notificationHandler || starNotificationHandler) try {
				traceReceivedNotification(message);
				if (notificationHandler) if (message.params === void 0) {
					if (type !== void 0) {
						if (type.numberOfParams !== 0 && type.parameterStructures !== messages_1.ParameterStructures.byName) logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received none.`);
					}
					await notificationHandler();
				} else if (Array.isArray(message.params)) {
					const params = message.params;
					if (message.method === ProgressNotification.type.method && params.length === 2 && ProgressToken.is(params[0])) await notificationHandler({
						token: params[0],
						value: params[1]
					});
					else {
						if (type !== void 0) {
							if (type.parameterStructures === messages_1.ParameterStructures.byName) logger.error(`Notification ${message.method} defines parameters by name but received parameters by position`);
							if (type.numberOfParams !== message.params.length) logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received ${params.length} arguments`);
						}
						await notificationHandler(...params);
					}
				} else {
					if (type !== void 0 && type.parameterStructures === messages_1.ParameterStructures.byPosition) logger.error(`Notification ${message.method} defines parameters by position but received parameters by name`);
					await notificationHandler(message.params);
				}
				else if (starNotificationHandler) await starNotificationHandler(message.method, message.params);
			} catch (error) {
				if (error.message) logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
				else logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
			}
			else unhandledNotificationEmitter.fire(message);
		}
		function handleInvalidMessage(message) {
			if (!message) {
				logger.error("Received empty message.");
				return;
			}
			logger.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(message, null, 4)}`);
			const responseMessage = message;
			if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
				const key = responseMessage.id;
				const responseHandler = responsePromises.get(key);
				if (responseHandler) responseHandler.reject(/* @__PURE__ */ new Error("The received response has neither a result nor an error property."));
			}
		}
		function stringifyTrace(params) {
			if (params === void 0 || params === null) return;
			switch (trace) {
				case Trace.Verbose: return JSON.stringify(params, null, 4);
				case Trace.Compact: return JSON.stringify(params);
				default: return;
			}
		}
		function traceSendingRequest(message) {
			if (trace === Trace.Off || !tracer) return;
			if (traceFormat === TraceFormat.Text) {
				let data = void 0;
				if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) data = `Params: ${stringifyTrace(message.params)}`;
				tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
			} else logLSPMessage("send-request", message);
		}
		function traceSendingNotification(message) {
			if (trace === Trace.Off || !tracer) return;
			if (traceFormat === TraceFormat.Text) {
				let data = void 0;
				if (trace === Trace.Verbose || trace === Trace.Compact) if (message.params) data = `Params: ${stringifyTrace(message.params)}`;
				else data = "No parameters provided.";
				tracer.log(`Sending notification '${message.method}'.`, data);
			} else logLSPMessage("send-notification", message);
		}
		function traceSendingResponse(message, method, startTime) {
			if (trace === Trace.Off || !tracer) return;
			if (traceFormat === TraceFormat.Text) {
				let data = void 0;
				if (trace === Trace.Verbose || trace === Trace.Compact) {
					if (message.error && message.error.data) data = `Error data: ${stringifyTrace(message.error.data)}`;
					else if (message.result) data = `Result: ${stringifyTrace(message.result)}`;
					else if (message.error === void 0) data = "No result returned.";
				}
				tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
			} else logLSPMessage("send-response", message);
		}
		function traceReceivedRequest(message) {
			if (trace === Trace.Off || !tracer) return;
			if (traceFormat === TraceFormat.Text) {
				let data = void 0;
				if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) data = `Params: ${stringifyTrace(message.params)}`;
				tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
			} else logLSPMessage("receive-request", message);
		}
		function traceReceivedNotification(message) {
			if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) return;
			if (traceFormat === TraceFormat.Text) {
				let data = void 0;
				if (trace === Trace.Verbose || trace === Trace.Compact) if (message.params) data = `Params: ${stringifyTrace(message.params)}`;
				else data = "No parameters provided.";
				tracer.log(`Received notification '${message.method}'.`, data);
			} else logLSPMessage("receive-notification", message);
		}
		function traceReceivedResponse(message, responsePromise) {
			if (trace === Trace.Off || !tracer) return;
			if (traceFormat === TraceFormat.Text) {
				let data = void 0;
				if (trace === Trace.Verbose || trace === Trace.Compact) {
					if (message.error && message.error.data) data = `Error data: ${stringifyTrace(message.error.data)}`;
					else if (message.result) data = `Result: ${stringifyTrace(message.result)}`;
					else if (message.error === void 0) data = "No result returned.";
				}
				if (responsePromise) {
					const error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : "";
					tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
				} else tracer.log(`Received response ${message.id} without active response promise.`, data);
			} else logLSPMessage("receive-response", message);
		}
		function logLSPMessage(type, message) {
			if (!tracer || trace === Trace.Off) return;
			const lspMessage = {
				isLSPMessage: true,
				type,
				message,
				timestamp: Date.now()
			};
			tracer.log(lspMessage);
		}
		function throwIfClosedOrDisposed() {
			if (isClosed()) throw new ConnectionError(ConnectionErrors.Closed, "Connection is closed.");
			if (isDisposed()) throw new ConnectionError(ConnectionErrors.Disposed, "Connection is disposed.");
		}
		function throwIfListening() {
			if (isListening()) throw new ConnectionError(ConnectionErrors.AlreadyListening, "Connection is already listening");
		}
		function throwIfNotListening() {
			if (!isListening()) throw new Error("Call listen() first.");
		}
		function undefinedToNull(param) {
			if (param === void 0) return null;
			else return param;
		}
		function nullToUndefined(param) {
			if (param === null) return;
			else return param;
		}
		function isNamedParam(param) {
			return param !== void 0 && param !== null && !Array.isArray(param) && typeof param === "object";
		}
		function computeSingleParam(parameterStructures, param) {
			switch (parameterStructures) {
				case messages_1.ParameterStructures.auto: if (isNamedParam(param)) return nullToUndefined(param);
				else return [undefinedToNull(param)];
				case messages_1.ParameterStructures.byName:
					if (!isNamedParam(param)) throw new Error(`Received parameters by name but param is not an object literal.`);
					return nullToUndefined(param);
				case messages_1.ParameterStructures.byPosition: return [undefinedToNull(param)];
				default: throw new Error(`Unknown parameter structure ${parameterStructures.toString()}`);
			}
		}
		function computeMessageParams(type, params) {
			let result;
			const numberOfParams = type.numberOfParams;
			switch (numberOfParams) {
				case 0:
					result = void 0;
					break;
				case 1:
					result = computeSingleParam(type.parameterStructures, params[0]);
					break;
				default:
					result = [];
					for (let i = 0; i < params.length && i < numberOfParams; i++) result.push(undefinedToNull(params[i]));
					if (params.length < numberOfParams) for (let i = params.length; i < numberOfParams; i++) result.push(null);
					break;
			}
			return result;
		}
		const connection = {
			sendNotification: (type, ...args) => {
				throwIfClosedOrDisposed();
				let method;
				let messageParams;
				if (Is.string(type)) {
					method = type;
					const first = args[0];
					let paramStart = 0;
					let parameterStructures = messages_1.ParameterStructures.auto;
					if (messages_1.ParameterStructures.is(first)) {
						paramStart = 1;
						parameterStructures = first;
					}
					const paramEnd = args.length;
					const numberOfParams = paramEnd - paramStart;
					switch (numberOfParams) {
						case 0:
							messageParams = void 0;
							break;
						case 1:
							messageParams = computeSingleParam(parameterStructures, args[paramStart]);
							break;
						default:
							if (parameterStructures === messages_1.ParameterStructures.byName) throw new Error(`Received ${numberOfParams} parameters for 'by Name' notification parameter structure.`);
							messageParams = args.slice(paramStart, paramEnd).map((value) => undefinedToNull(value));
							break;
					}
				} else {
					const params = args;
					method = type.method;
					messageParams = computeMessageParams(type, params);
				}
				const notificationMessage = {
					jsonrpc: version,
					method,
					params: messageParams
				};
				traceSendingNotification(notificationMessage);
				return messageWriter.write(notificationMessage).catch((error) => {
					logger.error(`Sending notification failed.`);
					throw error;
				});
			},
			onNotification: (type, handler) => {
				throwIfClosedOrDisposed();
				let method;
				if (Is.func(type)) starNotificationHandler = type;
				else if (handler) if (Is.string(type)) {
					method = type;
					notificationHandlers.set(type, {
						type: void 0,
						handler
					});
				} else {
					method = type.method;
					notificationHandlers.set(type.method, {
						type,
						handler
					});
				}
				return { dispose: () => {
					if (method !== void 0) {
						if (notificationHandlers.get(method)?.handler === handler) notificationHandlers.delete(method);
					} else if (starNotificationHandler === type) starNotificationHandler = void 0;
				} };
			},
			onProgress: (_type, token, handler) => {
				if (progressHandlers.has(token)) throw new Error(`Progress handler for token ${token} already registered`);
				progressHandlers.set(token, handler);
				return { dispose: () => {
					if (progressHandlers.get(token) === handler) progressHandlers.delete(token);
				} };
			},
			sendProgress: (_type, token, value) => {
				return connection.sendNotification(ProgressNotification.type, {
					token,
					value
				});
			},
			onUnhandledProgress: unhandledProgressEmitter.event,
			sendRequest: (type, ...args) => {
				throwIfClosedOrDisposed();
				throwIfNotListening();
				function sendCancellation(connection, id) {
					const p = cancellationStrategy.sender.sendCancellation(connection, id);
					if (p === void 0) logger.log(`Received no promise from cancellation strategy when cancelling id ${id}`);
					else p.catch(() => {
						logger.log(`Sending cancellation messages for id ${id} failed.`);
					});
				}
				let method;
				let messageParams;
				let token = void 0;
				if (Is.string(type)) {
					method = type;
					const first = args[0];
					const last = args[args.length - 1];
					let paramStart = 0;
					let parameterStructures = messages_1.ParameterStructures.auto;
					if (messages_1.ParameterStructures.is(first)) {
						paramStart = 1;
						parameterStructures = first;
					}
					let paramEnd = args.length;
					if (cancellation_1.CancellationToken.is(last)) {
						paramEnd = paramEnd - 1;
						token = last;
					}
					const numberOfParams = paramEnd - paramStart;
					switch (numberOfParams) {
						case 0:
							messageParams = void 0;
							break;
						case 1:
							messageParams = computeSingleParam(parameterStructures, args[paramStart]);
							break;
						default:
							if (parameterStructures === messages_1.ParameterStructures.byName) throw new Error(`Received ${numberOfParams} parameters for 'by Name' request parameter structure.`);
							messageParams = args.slice(paramStart, paramEnd).map((value) => undefinedToNull(value));
							break;
					}
				} else {
					const params = args;
					method = type.method;
					messageParams = computeMessageParams(type, params);
					const numberOfParams = type.numberOfParams;
					token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : void 0;
				}
				const id = sequenceNumber++;
				let disposable;
				let tokenWasCancelled = false;
				if (token !== void 0) if (token.isCancellationRequested) tokenWasCancelled = true;
				else disposable = token.onCancellationRequested(() => {
					sendCancellation(connection, id);
				});
				const requestMessage = {
					jsonrpc: version,
					id,
					method,
					params: messageParams
				};
				traceSendingRequest(requestMessage);
				if (typeof cancellationStrategy.sender.enableCancellation === "function") cancellationStrategy.sender.enableCancellation(requestMessage);
				return new Promise(async (resolve, reject) => {
					const resolveWithCleanup = (r) => {
						resolve(r);
						cancellationStrategy.sender.cleanup(id);
						disposable?.dispose();
					};
					const rejectWithCleanup = (r) => {
						reject(r);
						cancellationStrategy.sender.cleanup(id);
						disposable?.dispose();
					};
					const responsePromise = {
						method,
						timerStart: Date.now(),
						resolve: resolveWithCleanup,
						reject: rejectWithCleanup
					};
					try {
						responsePromises.set(id, responsePromise);
						await messageWriter.write(requestMessage);
						if (tokenWasCancelled) sendCancellation(connection, id);
					} catch (error) {
						responsePromises.delete(id);
						responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, error.message ? error.message : "Unknown reason"));
						logger.error(`Sending request failed.`);
						throw error;
					}
				});
			},
			onRequest: (type, handler) => {
				throwIfClosedOrDisposed();
				let method = null;
				if (StarRequestHandler.is(type)) {
					method = void 0;
					starRequestHandler = type;
				} else if (Is.string(type)) {
					method = null;
					if (handler !== void 0) {
						method = type;
						requestHandlers.set(type, {
							handler,
							type: void 0
						});
					}
				} else if (handler !== void 0) {
					method = type.method;
					requestHandlers.set(type.method, {
						type,
						handler
					});
				}
				return { dispose: () => {
					if (method === null) return;
					if (method !== void 0) {
						if (requestHandlers.get(method)?.handler === handler) requestHandlers.delete(method);
					} else if (starRequestHandler === type) starRequestHandler = void 0;
				} };
			},
			hasPendingResponse: () => {
				return responsePromises.size > 0;
			},
			trace: async (_value, _tracer, sendNotificationOrTraceOptions) => {
				let _sendNotification = false;
				let _traceFormat = TraceFormat.Text;
				if (sendNotificationOrTraceOptions !== void 0) if (Is.boolean(sendNotificationOrTraceOptions)) _sendNotification = sendNotificationOrTraceOptions;
				else {
					_sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
					_traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
				}
				trace = _value;
				traceFormat = _traceFormat;
				if (trace === Trace.Off) tracer = void 0;
				else tracer = _tracer;
				if (_sendNotification && !isClosed() && !isDisposed()) await connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
			},
			onError: errorEmitter.event,
			onClose: closeEmitter.event,
			onUnhandledNotification: unhandledNotificationEmitter.event,
			onDispose: disposeEmitter.event,
			end: () => {
				messageWriter.end();
			},
			dispose: () => {
				if (isDisposed()) return;
				state = ConnectionState.Disposed;
				disposeEmitter.fire(void 0);
				const error = new messages_1.ResponseError(messages_1.ErrorCodes.PendingResponseRejected, "Pending response rejected since connection got disposed");
				for (const promise of responsePromises.values()) promise.reject(error);
				responsePromises = /* @__PURE__ */ new Map();
				requestTokens = /* @__PURE__ */ new Map();
				knownCanceledRequests = /* @__PURE__ */ new Set();
				messageQueue = new linkedMap_1.LinkedMap();
				if (Is.func(messageWriter.dispose)) messageWriter.dispose();
				if (Is.func(messageReader.dispose)) messageReader.dispose();
			},
			listen: () => {
				throwIfClosedOrDisposed();
				throwIfListening();
				state = ConnectionState.Listening;
				messageReader.listen(callback);
			},
			inspect: () => {
				(0, ral_1.default)().console.log("inspect");
			}
		};
		connection.onNotification(LogTraceNotification.type, (params) => {
			if (trace === Trace.Off || !tracer) return;
			const verbose = trace === Trace.Verbose || trace === Trace.Compact;
			tracer.log(params.message, verbose ? params.verbose : void 0);
		});
		connection.onNotification(ProgressNotification.type, async (params) => {
			const handler = progressHandlers.get(params.token);
			if (handler) await handler(params.value);
			else unhandledProgressEmitter.fire(params);
		});
		return connection;
	}
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/common/api.js
var require_api$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __importDefault = exports && exports.__importDefault || function(mod) {
		return mod && mod.__esModule ? mod : { "default": mod };
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.ProgressType = exports.ProgressToken = exports.createMessageConnection = exports.NullLogger = exports.ConnectionOptions = exports.ConnectionStrategy = exports.AbstractMessageBuffer = exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = exports.SharedArrayReceiverStrategy = exports.SharedArraySenderStrategy = exports.CancellationToken = exports.CancellationTokenSource = exports.Emitter = exports.Event = exports.Disposable = exports.LRUCache = exports.Touch = exports.LinkedMap = exports.ParameterStructures = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.ErrorCodes = exports.ResponseError = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType0 = exports.RequestType = exports.Message = exports.RAL = void 0;
	exports.MessageStrategy = exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.RequestCancellationReceiverStrategy = exports.IdCancellationReceiverStrategy = exports.CancellationReceiverStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.TraceValues = exports.TraceValue = exports.Trace = void 0;
	const messages_1 = require_messages$1();
	Object.defineProperty(exports, "Message", {
		enumerable: true,
		get: function() {
			return messages_1.Message;
		}
	});
	Object.defineProperty(exports, "RequestType", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType;
		}
	});
	Object.defineProperty(exports, "RequestType0", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType0;
		}
	});
	Object.defineProperty(exports, "RequestType1", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType1;
		}
	});
	Object.defineProperty(exports, "RequestType2", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType2;
		}
	});
	Object.defineProperty(exports, "RequestType3", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType3;
		}
	});
	Object.defineProperty(exports, "RequestType4", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType4;
		}
	});
	Object.defineProperty(exports, "RequestType5", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType5;
		}
	});
	Object.defineProperty(exports, "RequestType6", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType6;
		}
	});
	Object.defineProperty(exports, "RequestType7", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType7;
		}
	});
	Object.defineProperty(exports, "RequestType8", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType8;
		}
	});
	Object.defineProperty(exports, "RequestType9", {
		enumerable: true,
		get: function() {
			return messages_1.RequestType9;
		}
	});
	Object.defineProperty(exports, "ResponseError", {
		enumerable: true,
		get: function() {
			return messages_1.ResponseError;
		}
	});
	Object.defineProperty(exports, "ErrorCodes", {
		enumerable: true,
		get: function() {
			return messages_1.ErrorCodes;
		}
	});
	Object.defineProperty(exports, "NotificationType", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType;
		}
	});
	Object.defineProperty(exports, "NotificationType0", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType0;
		}
	});
	Object.defineProperty(exports, "NotificationType1", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType1;
		}
	});
	Object.defineProperty(exports, "NotificationType2", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType2;
		}
	});
	Object.defineProperty(exports, "NotificationType3", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType3;
		}
	});
	Object.defineProperty(exports, "NotificationType4", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType4;
		}
	});
	Object.defineProperty(exports, "NotificationType5", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType5;
		}
	});
	Object.defineProperty(exports, "NotificationType6", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType6;
		}
	});
	Object.defineProperty(exports, "NotificationType7", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType7;
		}
	});
	Object.defineProperty(exports, "NotificationType8", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType8;
		}
	});
	Object.defineProperty(exports, "NotificationType9", {
		enumerable: true,
		get: function() {
			return messages_1.NotificationType9;
		}
	});
	Object.defineProperty(exports, "ParameterStructures", {
		enumerable: true,
		get: function() {
			return messages_1.ParameterStructures;
		}
	});
	const linkedMap_1 = require_linkedMap();
	Object.defineProperty(exports, "LinkedMap", {
		enumerable: true,
		get: function() {
			return linkedMap_1.LinkedMap;
		}
	});
	Object.defineProperty(exports, "LRUCache", {
		enumerable: true,
		get: function() {
			return linkedMap_1.LRUCache;
		}
	});
	Object.defineProperty(exports, "Touch", {
		enumerable: true,
		get: function() {
			return linkedMap_1.Touch;
		}
	});
	const disposable_1 = require_disposable();
	Object.defineProperty(exports, "Disposable", {
		enumerable: true,
		get: function() {
			return disposable_1.Disposable;
		}
	});
	const events_1 = require_events();
	Object.defineProperty(exports, "Event", {
		enumerable: true,
		get: function() {
			return events_1.Event;
		}
	});
	Object.defineProperty(exports, "Emitter", {
		enumerable: true,
		get: function() {
			return events_1.Emitter;
		}
	});
	const cancellation_1 = require_cancellation();
	Object.defineProperty(exports, "CancellationTokenSource", {
		enumerable: true,
		get: function() {
			return cancellation_1.CancellationTokenSource;
		}
	});
	Object.defineProperty(exports, "CancellationToken", {
		enumerable: true,
		get: function() {
			return cancellation_1.CancellationToken;
		}
	});
	const sharedArrayCancellation_1 = require_sharedArrayCancellation();
	Object.defineProperty(exports, "SharedArraySenderStrategy", {
		enumerable: true,
		get: function() {
			return sharedArrayCancellation_1.SharedArraySenderStrategy;
		}
	});
	Object.defineProperty(exports, "SharedArrayReceiverStrategy", {
		enumerable: true,
		get: function() {
			return sharedArrayCancellation_1.SharedArrayReceiverStrategy;
		}
	});
	const messageReader_1 = require_messageReader();
	Object.defineProperty(exports, "MessageReader", {
		enumerable: true,
		get: function() {
			return messageReader_1.MessageReader;
		}
	});
	Object.defineProperty(exports, "AbstractMessageReader", {
		enumerable: true,
		get: function() {
			return messageReader_1.AbstractMessageReader;
		}
	});
	Object.defineProperty(exports, "ReadableStreamMessageReader", {
		enumerable: true,
		get: function() {
			return messageReader_1.ReadableStreamMessageReader;
		}
	});
	const messageWriter_1 = require_messageWriter();
	Object.defineProperty(exports, "MessageWriter", {
		enumerable: true,
		get: function() {
			return messageWriter_1.MessageWriter;
		}
	});
	Object.defineProperty(exports, "AbstractMessageWriter", {
		enumerable: true,
		get: function() {
			return messageWriter_1.AbstractMessageWriter;
		}
	});
	Object.defineProperty(exports, "WriteableStreamMessageWriter", {
		enumerable: true,
		get: function() {
			return messageWriter_1.WriteableStreamMessageWriter;
		}
	});
	const messageBuffer_1 = require_messageBuffer();
	Object.defineProperty(exports, "AbstractMessageBuffer", {
		enumerable: true,
		get: function() {
			return messageBuffer_1.AbstractMessageBuffer;
		}
	});
	const connection_1 = require_connection$1();
	Object.defineProperty(exports, "ConnectionStrategy", {
		enumerable: true,
		get: function() {
			return connection_1.ConnectionStrategy;
		}
	});
	Object.defineProperty(exports, "ConnectionOptions", {
		enumerable: true,
		get: function() {
			return connection_1.ConnectionOptions;
		}
	});
	Object.defineProperty(exports, "NullLogger", {
		enumerable: true,
		get: function() {
			return connection_1.NullLogger;
		}
	});
	Object.defineProperty(exports, "createMessageConnection", {
		enumerable: true,
		get: function() {
			return connection_1.createMessageConnection;
		}
	});
	Object.defineProperty(exports, "ProgressToken", {
		enumerable: true,
		get: function() {
			return connection_1.ProgressToken;
		}
	});
	Object.defineProperty(exports, "ProgressType", {
		enumerable: true,
		get: function() {
			return connection_1.ProgressType;
		}
	});
	Object.defineProperty(exports, "Trace", {
		enumerable: true,
		get: function() {
			return connection_1.Trace;
		}
	});
	Object.defineProperty(exports, "TraceValue", {
		enumerable: true,
		get: function() {
			return connection_1.TraceValue;
		}
	});
	Object.defineProperty(exports, "TraceFormat", {
		enumerable: true,
		get: function() {
			return connection_1.TraceFormat;
		}
	});
	Object.defineProperty(exports, "SetTraceNotification", {
		enumerable: true,
		get: function() {
			return connection_1.SetTraceNotification;
		}
	});
	Object.defineProperty(exports, "LogTraceNotification", {
		enumerable: true,
		get: function() {
			return connection_1.LogTraceNotification;
		}
	});
	Object.defineProperty(exports, "ConnectionErrors", {
		enumerable: true,
		get: function() {
			return connection_1.ConnectionErrors;
		}
	});
	Object.defineProperty(exports, "ConnectionError", {
		enumerable: true,
		get: function() {
			return connection_1.ConnectionError;
		}
	});
	Object.defineProperty(exports, "CancellationReceiverStrategy", {
		enumerable: true,
		get: function() {
			return connection_1.CancellationReceiverStrategy;
		}
	});
	Object.defineProperty(exports, "IdCancellationReceiverStrategy", {
		enumerable: true,
		get: function() {
			return connection_1.IdCancellationReceiverStrategy;
		}
	});
	Object.defineProperty(exports, "RequestCancellationReceiverStrategy", {
		enumerable: true,
		get: function() {
			return connection_1.RequestCancellationReceiverStrategy;
		}
	});
	Object.defineProperty(exports, "CancellationSenderStrategy", {
		enumerable: true,
		get: function() {
			return connection_1.CancellationSenderStrategy;
		}
	});
	Object.defineProperty(exports, "CancellationStrategy", {
		enumerable: true,
		get: function() {
			return connection_1.CancellationStrategy;
		}
	});
	Object.defineProperty(exports, "MessageStrategy", {
		enumerable: true,
		get: function() {
			return connection_1.MessageStrategy;
		}
	});
	Object.defineProperty(exports, "TraceValues", {
		enumerable: true,
		get: function() {
			return connection_1.TraceValues;
		}
	});
	exports.RAL = __importDefault(require_ral()).default;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/node/ril.js
var require_ril = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	const util_1 = require("util");
	const api_1 = require_api$1();
	var MessageBuffer = class MessageBuffer extends api_1.AbstractMessageBuffer {
		static emptyBuffer = Buffer.allocUnsafe(0);
		constructor(encoding = "utf-8") {
			super(encoding);
		}
		emptyBuffer() {
			return MessageBuffer.emptyBuffer;
		}
		fromString(value, encoding) {
			return Buffer.from(value, encoding);
		}
		toString(value, encoding) {
			if (value instanceof Buffer) return value.toString(encoding);
			else return new util_1.TextDecoder(encoding).decode(value);
		}
		asNative(buffer, length) {
			if (length === void 0) return buffer instanceof Buffer ? buffer : Buffer.from(buffer);
			else return buffer instanceof Buffer ? buffer.slice(0, length) : Buffer.from(buffer, 0, length);
		}
		allocNative(length) {
			return Buffer.allocUnsafe(length);
		}
	};
	var ReadableStreamWrapper = class {
		stream;
		constructor(stream) {
			this.stream = stream;
		}
		onClose(listener) {
			this.stream.on("close", listener);
			return api_1.Disposable.create(() => this.stream.off("close", listener));
		}
		onError(listener) {
			this.stream.on("error", listener);
			return api_1.Disposable.create(() => this.stream.off("error", listener));
		}
		onEnd(listener) {
			this.stream.on("end", listener);
			return api_1.Disposable.create(() => this.stream.off("end", listener));
		}
		onData(listener) {
			this.stream.on("data", listener);
			return api_1.Disposable.create(() => this.stream.off("data", listener));
		}
	};
	var WritableStreamWrapper = class {
		stream;
		constructor(stream) {
			this.stream = stream;
		}
		onClose(listener) {
			this.stream.on("close", listener);
			return api_1.Disposable.create(() => this.stream.off("close", listener));
		}
		onError(listener) {
			this.stream.on("error", listener);
			return api_1.Disposable.create(() => this.stream.off("error", listener));
		}
		onEnd(listener) {
			this.stream.on("end", listener);
			return api_1.Disposable.create(() => this.stream.off("end", listener));
		}
		write(data, encoding) {
			return new Promise((resolve, reject) => {
				const callback = (error) => {
					if (error === void 0 || error === null) resolve();
					else reject(error);
				};
				if (typeof data === "string") this.stream.write(data, encoding, callback);
				else this.stream.write(data, callback);
			});
		}
		end() {
			this.stream.end();
		}
	};
	const _ril = Object.freeze({
		messageBuffer: Object.freeze({ create: (encoding) => new MessageBuffer(encoding) }),
		applicationJson: Object.freeze({
			encoder: Object.freeze({
				name: "application/json",
				encode: (msg, options) => {
					try {
						return Promise.resolve(Buffer.from(JSON.stringify(msg, void 0, 0), options.charset));
					} catch (err) {
						return Promise.reject(err);
					}
				}
			}),
			decoder: Object.freeze({
				name: "application/json",
				decode: (buffer, options) => {
					try {
						if (buffer instanceof Buffer) return Promise.resolve(JSON.parse(buffer.toString(options.charset)));
						else return Promise.resolve(JSON.parse(new util_1.TextDecoder(options.charset).decode(buffer)));
					} catch (err) {
						return Promise.reject(err);
					}
				}
			})
		}),
		stream: Object.freeze({
			asReadableStream: (stream) => new ReadableStreamWrapper(stream),
			asWritableStream: (stream) => new WritableStreamWrapper(stream)
		}),
		console,
		timer: Object.freeze({
			setTimeout(callback, ms, ...args) {
				const handle = setTimeout(callback, ms, ...args);
				return { dispose: () => clearTimeout(handle) };
			},
			setImmediate(callback, ...args) {
				const handle = setImmediate(callback, ...args);
				return { dispose: () => clearImmediate(handle) };
			},
			setInterval(callback, ms, ...args) {
				const handle = setInterval(callback, ms, ...args);
				return { dispose: () => clearInterval(handle) };
			}
		})
	});
	function RIL() {
		return _ril;
	}
	(function(RIL) {
		function install() {
			api_1.RAL.install(_ril);
		}
		RIL.install = install;
	})(RIL || (RIL = {}));
	exports.default = RIL;
}));
//#endregion
//#region node_modules/vscode-jsonrpc/lib/node/main.js
var require_main$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
		Object.defineProperty(o, "default", {
			enumerable: true,
			value: v
		});
	}) : function(o, v) {
		o["default"] = v;
	});
	var __importStar = exports && exports.__importStar || (function() {
		var ownKeys = function(o) {
			ownKeys = Object.getOwnPropertyNames || function(o) {
				var ar = [];
				for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
				return ar;
			};
			return ownKeys(o);
		};
		return function(mod) {
			if (mod && mod.__esModule) return mod;
			var result = {};
			if (mod != null) {
				for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
			}
			__setModuleDefault(result, mod);
			return result;
		};
	})();
	var __exportStar = exports && exports.__exportStar || function(m, exports$4) {
		for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports$4, p)) __createBinding(exports$4, m, p);
	};
	var __importDefault = exports && exports.__importDefault || function(mod) {
		return mod && mod.__esModule ? mod : { "default": mod };
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.StreamMessageWriter = exports.StreamMessageReader = exports.SocketMessageWriter = exports.SocketMessageReader = exports.PortMessageWriter = exports.PortMessageReader = exports.IPCMessageWriter = exports.IPCMessageReader = void 0;
	exports.generateRandomPipeName = generateRandomPipeName;
	exports.createClientPipeTransport = createClientPipeTransport;
	exports.createServerPipeTransport = createServerPipeTransport;
	exports.createClientSocketTransport = createClientSocketTransport;
	exports.createServerSocketTransport = createServerSocketTransport;
	exports.createMessageConnection = createMessageConnection;
	const ril_1 = __importDefault(require_ril());
	ril_1.default.install();
	const path$3 = __importStar(require("path"));
	const os$3 = __importStar(require("os"));
	const fs$4 = __importStar(require("fs"));
	const crypto_1 = require("crypto");
	const net_1 = require("net");
	const api_1 = require_api$1();
	__exportStar(require_api$1(), exports);
	var IPCMessageReader = class extends api_1.AbstractMessageReader {
		process;
		constructor(process) {
			super();
			this.process = process;
			const eventEmitter = this.process;
			eventEmitter.on("error", (error) => this.fireError(error));
			eventEmitter.on("close", () => this.fireClose());
		}
		listen(callback) {
			this.process.on("message", callback);
			return api_1.Disposable.create(() => this.process.off("message", callback));
		}
	};
	exports.IPCMessageReader = IPCMessageReader;
	var IPCMessageWriter = class extends api_1.AbstractMessageWriter {
		process;
		errorCount;
		constructor(process) {
			super();
			this.process = process;
			this.errorCount = 0;
			const eventEmitter = this.process;
			eventEmitter.on("error", (error) => this.fireError(error));
			eventEmitter.on("close", () => this.fireClose);
		}
		write(msg) {
			try {
				if (typeof this.process.send === "function") this.process.send(msg, void 0, void 0, (error) => {
					if (error) {
						this.errorCount++;
						this.handleError(error, msg);
					} else this.errorCount = 0;
				});
				return Promise.resolve();
			} catch (error) {
				this.handleError(error, msg);
				return Promise.reject(error);
			}
		}
		handleError(error, msg) {
			this.errorCount++;
			this.fireError(error, msg, this.errorCount);
		}
		end() {}
	};
	exports.IPCMessageWriter = IPCMessageWriter;
	var PortMessageReader = class extends api_1.AbstractMessageReader {
		onData;
		constructor(port) {
			super();
			this.onData = new api_1.Emitter();
			port.on("close", () => this.fireClose);
			port.on("error", (error) => this.fireError(error));
			port.on("message", (message) => {
				this.onData.fire(message);
			});
		}
		listen(callback) {
			return this.onData.event(callback);
		}
	};
	exports.PortMessageReader = PortMessageReader;
	var PortMessageWriter = class extends api_1.AbstractMessageWriter {
		port;
		errorCount;
		constructor(port) {
			super();
			this.port = port;
			this.errorCount = 0;
			port.on("close", () => this.fireClose());
			port.on("error", (error) => this.fireError(error));
		}
		write(msg) {
			try {
				this.port.postMessage(msg);
				return Promise.resolve();
			} catch (error) {
				this.handleError(error, msg);
				return Promise.reject(error);
			}
		}
		handleError(error, msg) {
			this.errorCount++;
			this.fireError(error, msg, this.errorCount);
		}
		end() {}
	};
	exports.PortMessageWriter = PortMessageWriter;
	var SocketMessageReader = class extends api_1.ReadableStreamMessageReader {
		constructor(socket, encoding = "utf-8") {
			super((0, ril_1.default)().stream.asReadableStream(socket), encoding);
		}
	};
	exports.SocketMessageReader = SocketMessageReader;
	var SocketMessageWriter = class extends api_1.WriteableStreamMessageWriter {
		socket;
		constructor(socket, options) {
			super((0, ril_1.default)().stream.asWritableStream(socket), options);
			this.socket = socket;
		}
		dispose() {
			super.dispose();
			this.socket.destroy();
		}
	};
	exports.SocketMessageWriter = SocketMessageWriter;
	var StreamMessageReader = class extends api_1.ReadableStreamMessageReader {
		constructor(readable, encoding) {
			super((0, ril_1.default)().stream.asReadableStream(readable), encoding);
		}
	};
	exports.StreamMessageReader = StreamMessageReader;
	var StreamMessageWriter = class extends api_1.WriteableStreamMessageWriter {
		constructor(writable, options) {
			super((0, ril_1.default)().stream.asWritableStream(writable), options);
		}
	};
	exports.StreamMessageWriter = StreamMessageWriter;
	const XDG_RUNTIME_DIR = process.env["XDG_RUNTIME_DIR"];
	const safeIpcPathLengths = new Map([["linux", 107], ["darwin", 103]]);
	function generateRandomPipeName() {
		if (process.platform === "win32") return `\\\\.\\pipe\\lsp-${(0, crypto_1.randomBytes)(16).toString("hex")}-sock`;
		let randomLength = 32;
		const fixedLength = 10;
		const tmpDir = fs$4.realpathSync(XDG_RUNTIME_DIR ?? os$3.tmpdir());
		const limit = safeIpcPathLengths.get(process.platform);
		if (limit !== void 0) randomLength = Math.min(limit - tmpDir.length - fixedLength, randomLength);
		if (randomLength < 16) throw new Error(`Unable to generate a random pipe name with ${randomLength} characters.`);
		const randomSuffix = (0, crypto_1.randomBytes)(Math.floor(randomLength / 2)).toString("hex");
		return path$3.join(tmpDir, `lsp-${randomSuffix}.sock`);
	}
	function createClientPipeTransport(pipeName, encoding = "utf-8") {
		let connectResolve;
		const connected = new Promise((resolve, _reject) => {
			connectResolve = resolve;
		});
		return new Promise((resolve, reject) => {
			const server = (0, net_1.createServer)((socket) => {
				server.close();
				connectResolve([new SocketMessageReader(socket, encoding), new SocketMessageWriter(socket, encoding)]);
			});
			server.on("error", reject);
			server.listen(pipeName, () => {
				server.removeListener("error", reject);
				resolve({ onConnected: () => {
					return connected;
				} });
			});
		});
	}
	function createServerPipeTransport(pipeName, encoding = "utf-8") {
		const socket = (0, net_1.createConnection)(pipeName);
		return [new SocketMessageReader(socket, encoding), new SocketMessageWriter(socket, encoding)];
	}
	function createClientSocketTransport(port, encoding = "utf-8") {
		let connectResolve;
		const connected = new Promise((resolve, _reject) => {
			connectResolve = resolve;
		});
		return new Promise((resolve, reject) => {
			const server = (0, net_1.createServer)((socket) => {
				server.close();
				connectResolve([new SocketMessageReader(socket, encoding), new SocketMessageWriter(socket, encoding)]);
			});
			server.on("error", reject);
			server.listen(port, "127.0.0.1", () => {
				server.removeListener("error", reject);
				resolve({ onConnected: () => {
					return connected;
				} });
			});
		});
	}
	function createServerSocketTransport(port, encoding = "utf-8") {
		const socket = (0, net_1.createConnection)(port, "127.0.0.1");
		return [new SocketMessageReader(socket, encoding), new SocketMessageWriter(socket, encoding)];
	}
	function isReadableStream(value) {
		const candidate = value;
		return candidate.read !== void 0 && candidate.addListener !== void 0;
	}
	function isWritableStream(value) {
		const candidate = value;
		return candidate.write !== void 0 && candidate.addListener !== void 0;
	}
	function createMessageConnection(input, output, logger, options) {
		if (!logger) logger = api_1.NullLogger;
		const reader = isReadableStream(input) ? new StreamMessageReader(input) : input;
		const writer = isWritableStream(output) ? new StreamMessageWriter(output) : output;
		if (api_1.ConnectionStrategy.is(options)) options = { connectionStrategy: options };
		return (0, api_1.createMessageConnection)(reader, writer, logger, options);
	}
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/messages.js
var require_messages = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.CM = exports.ProtocolNotificationType = exports.ProtocolNotificationType0 = exports.ProtocolRequestType = exports.ProtocolRequestType0 = exports.RegistrationType = exports.MessageDirection = void 0;
	const vscode_jsonrpc_1 = require_api$1();
	var MessageDirection;
	(function(MessageDirection) {
		MessageDirection["clientToServer"] = "clientToServer";
		MessageDirection["serverToClient"] = "serverToClient";
		MessageDirection["both"] = "both";
	})(MessageDirection || (exports.MessageDirection = MessageDirection = {}));
	var RegistrationType = class {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		____;
		method;
		constructor(method) {
			this.method = method;
		}
	};
	exports.RegistrationType = RegistrationType;
	var ProtocolRequestType0 = class extends vscode_jsonrpc_1.RequestType0 {
		/**
		* Clients must not use these properties. They are here to ensure correct typing.
		* in TypeScript
		*/
		__;
		___;
		____;
		_pr;
		constructor(method) {
			super(method);
		}
	};
	exports.ProtocolRequestType0 = ProtocolRequestType0;
	var ProtocolRequestType = class extends vscode_jsonrpc_1.RequestType {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		__;
		___;
		____;
		_pr;
		constructor(method) {
			super(method, vscode_jsonrpc_1.ParameterStructures.byName);
		}
	};
	exports.ProtocolRequestType = ProtocolRequestType;
	var ProtocolNotificationType0 = class extends vscode_jsonrpc_1.NotificationType0 {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		___;
		____;
		constructor(method) {
			super(method);
		}
	};
	exports.ProtocolNotificationType0 = ProtocolNotificationType0;
	var ProtocolNotificationType = class extends vscode_jsonrpc_1.NotificationType {
		/**
		* Clients must not use this property. It is here to ensure correct typing.
		*/
		___;
		____;
		constructor(method) {
			super(method, vscode_jsonrpc_1.ParameterStructures.byName);
		}
	};
	exports.ProtocolNotificationType = ProtocolNotificationType;
	var CM;
	(function(CM) {
		function create(client, server) {
			return {
				client,
				server
			};
		}
		CM.create = create;
	})(CM || (exports.CM = CM = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/utils/is.js
var require_is = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.boolean = boolean;
	exports.string = string;
	exports.number = number;
	exports.error = error;
	exports.func = func;
	exports.array = array;
	exports.stringArray = stringArray;
	exports.typedArray = typedArray;
	exports.objectLiteral = objectLiteral;
	function boolean(value) {
		return value === true || value === false;
	}
	function string(value) {
		return typeof value === "string" || value instanceof String;
	}
	function number(value) {
		return typeof value === "number" || value instanceof Number;
	}
	function error(value) {
		return value instanceof Error;
	}
	function func(value) {
		return typeof value === "function";
	}
	function array(value) {
		return Array.isArray(value);
	}
	function stringArray(value) {
		return array(value) && value.every((elem) => string(elem));
	}
	function typedArray(value, check) {
		return Array.isArray(value) && value.every(check);
	}
	function objectLiteral(value) {
		return value !== null && typeof value === "object";
	}
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js
var require_protocol_implementation = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.ImplementationRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to resolve the implementation locations of a symbol at a given text
	* document position. The request's parameter is of type {@link TextDocumentPositionParams}
	* the response is of type {@link Definition} or a Thenable that resolves to such.
	*/
	var ImplementationRequest;
	(function(ImplementationRequest) {
		ImplementationRequest.method = "textDocument/implementation";
		ImplementationRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);
		ImplementationRequest.capabilities = messages_1.CM.create("textDocument.implementation", "implementationProvider");
	})(ImplementationRequest || (exports.ImplementationRequest = ImplementationRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js
var require_protocol_typeDefinition = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.TypeDefinitionRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to resolve the type definition locations of a symbol at a given text
	* document position. The request's parameter is of type {@link TextDocumentPositionParams}
	* the response is of type {@link Definition} or a Thenable that resolves to such.
	*/
	var TypeDefinitionRequest;
	(function(TypeDefinitionRequest) {
		TypeDefinitionRequest.method = "textDocument/typeDefinition";
		TypeDefinitionRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);
		TypeDefinitionRequest.capabilities = messages_1.CM.create("textDocument.typeDefinition", "typeDefinitionProvider");
	})(TypeDefinitionRequest || (exports.TypeDefinitionRequest = TypeDefinitionRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js
var require_protocol_workspaceFolder = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = void 0;
	const messages_1 = require_messages();
	/**
	* The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.
	*/
	var WorkspaceFoldersRequest;
	(function(WorkspaceFoldersRequest) {
		WorkspaceFoldersRequest.method = "workspace/workspaceFolders";
		WorkspaceFoldersRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0(WorkspaceFoldersRequest.method);
		WorkspaceFoldersRequest.capabilities = messages_1.CM.create("workspace.workspaceFolders", "workspace.workspaceFolders");
	})(WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = WorkspaceFoldersRequest = {}));
	/**
	* The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
	* folder configuration changes.
	*/
	var DidChangeWorkspaceFoldersNotification;
	(function(DidChangeWorkspaceFoldersNotification) {
		DidChangeWorkspaceFoldersNotification.method = "workspace/didChangeWorkspaceFolders";
		DidChangeWorkspaceFoldersNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType(DidChangeWorkspaceFoldersNotification.method);
		DidChangeWorkspaceFoldersNotification.capabilities = messages_1.CM.create(void 0, "workspace.workspaceFolders.changeNotifications");
	})(DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = DidChangeWorkspaceFoldersNotification = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js
var require_protocol_configuration = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.ConfigurationRequest = void 0;
	const messages_1 = require_messages();
	/**
	* The 'workspace/configuration' request is sent from the server to the client to fetch a certain
	* configuration setting.
	*
	* This pull model replaces the old push model were the client signaled configuration change via an
	* event. If the server still needs to react to configuration changes (since the server caches the
	* result of `workspace/configuration` requests) the server should register for an empty configuration
	* change event and empty the cache if such an event is received.
	*/
	var ConfigurationRequest;
	(function(ConfigurationRequest) {
		ConfigurationRequest.method = "workspace/configuration";
		ConfigurationRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		ConfigurationRequest.type = new messages_1.ProtocolRequestType(ConfigurationRequest.method);
		ConfigurationRequest.capabilities = messages_1.CM.create("workspace.configuration", void 0);
	})(ConfigurationRequest || (exports.ConfigurationRequest = ConfigurationRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js
var require_protocol_colorProvider = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.ColorPresentationRequest = exports.DocumentColorRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to list all color symbols found in a given text document. The request's
	* parameter is of type {@link DocumentColorParams} the
	* response is of type {@link ColorInformation ColorInformation[]} or a Thenable
	* that resolves to such.
	*/
	var DocumentColorRequest;
	(function(DocumentColorRequest) {
		DocumentColorRequest.method = "textDocument/documentColor";
		DocumentColorRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);
		DocumentColorRequest.capabilities = messages_1.CM.create("textDocument.colorProvider", "colorProvider");
	})(DocumentColorRequest || (exports.DocumentColorRequest = DocumentColorRequest = {}));
	/**
	* A request to list all presentation for a color. The request's
	* parameter is of type {@link ColorPresentationParams} the
	* response is of type {@link ColorPresentation ColorPresentation[]} or a Thenable
	* that resolves to such.
	*/
	var ColorPresentationRequest;
	(function(ColorPresentationRequest) {
		ColorPresentationRequest.method = "textDocument/colorPresentation";
		ColorPresentationRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		ColorPresentationRequest.type = new messages_1.ProtocolRequestType(ColorPresentationRequest.method);
		ColorPresentationRequest.capabilities = messages_1.CM.create("textDocument.colorProvider", "colorProvider");
	})(ColorPresentationRequest || (exports.ColorPresentationRequest = ColorPresentationRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js
var require_protocol_foldingRange = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.FoldingRangeRefreshRequest = exports.FoldingRangeRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to provide folding ranges in a document. The request's
	* parameter is of type {@link FoldingRangeParams}, the
	* response is of type {@link FoldingRangeList} or a Thenable
	* that resolves to such.
	*/
	var FoldingRangeRequest;
	(function(FoldingRangeRequest) {
		FoldingRangeRequest.method = "textDocument/foldingRange";
		FoldingRangeRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);
		FoldingRangeRequest.capabilities = messages_1.CM.create("textDocument.foldingRange", "foldingRangeProvider");
	})(FoldingRangeRequest || (exports.FoldingRangeRequest = FoldingRangeRequest = {}));
	/**
	* A request to refresh the folding ranges in a document.
	*
	* @since 3.18.0
	*/
	var FoldingRangeRefreshRequest;
	(function(FoldingRangeRefreshRequest) {
		FoldingRangeRefreshRequest.method = `workspace/foldingRange/refresh`;
		FoldingRangeRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		FoldingRangeRefreshRequest.type = new messages_1.ProtocolRequestType0(FoldingRangeRefreshRequest.method);
		FoldingRangeRefreshRequest.capabilities = messages_1.CM.create("workspace.foldingRange.refreshSupport", void 0);
	})(FoldingRangeRefreshRequest || (exports.FoldingRangeRefreshRequest = FoldingRangeRefreshRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js
var require_protocol_declaration = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.DeclarationRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to resolve the type definition locations of a symbol at a given text
	* document position. The request's parameter is of type {@link TextDocumentPositionParams}
	* the response is of type {@link Declaration} or a typed array of {@link DeclarationLink}
	* or a Thenable that resolves to such.
	*/
	var DeclarationRequest;
	(function(DeclarationRequest) {
		DeclarationRequest.method = "textDocument/declaration";
		DeclarationRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);
		DeclarationRequest.capabilities = messages_1.CM.create("textDocument.declaration", "declarationProvider");
	})(DeclarationRequest || (exports.DeclarationRequest = DeclarationRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js
var require_protocol_selectionRange = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.SelectionRangeRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to provide selection ranges in a document. The request's
	* parameter is of type {@link SelectionRangeParams}, the
	* response is of type {@link SelectionRange SelectionRange[]} or a Thenable
	* that resolves to such.
	*/
	var SelectionRangeRequest;
	(function(SelectionRangeRequest) {
		SelectionRangeRequest.method = "textDocument/selectionRange";
		SelectionRangeRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);
		SelectionRangeRequest.capabilities = messages_1.CM.create("textDocument.selectionRange", "selectionRangeProvider");
	})(SelectionRangeRequest || (exports.SelectionRangeRequest = SelectionRangeRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js
var require_protocol_progress = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = void 0;
	const vscode_jsonrpc_1 = require_api$1();
	const messages_1 = require_messages();
	var WorkDoneProgress;
	(function(WorkDoneProgress) {
		WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();
		function is(value) {
			return value === WorkDoneProgress.type;
		}
		WorkDoneProgress.is = is;
	})(WorkDoneProgress || (exports.WorkDoneProgress = WorkDoneProgress = {}));
	/**
	* The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress
	* reporting from the server.
	*/
	var WorkDoneProgressCreateRequest;
	(function(WorkDoneProgressCreateRequest) {
		WorkDoneProgressCreateRequest.method = "window/workDoneProgress/create";
		WorkDoneProgressCreateRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType(WorkDoneProgressCreateRequest.method);
		WorkDoneProgressCreateRequest.capabilities = messages_1.CM.create("window.workDoneProgress", void 0);
	})(WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = WorkDoneProgressCreateRequest = {}));
	/**
	* The `window/workDoneProgress/cancel` notification is sent from  the client to the server to cancel a progress
	* initiated on the server side.
	*/
	var WorkDoneProgressCancelNotification;
	(function(WorkDoneProgressCancelNotification) {
		WorkDoneProgressCancelNotification.method = "window/workDoneProgress/cancel";
		WorkDoneProgressCancelNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType(WorkDoneProgressCancelNotification.method);
	})(WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = WorkDoneProgressCancelNotification = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js
var require_protocol_callHierarchy = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.CallHierarchyPrepareRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to result a `CallHierarchyItem` in a document at a given position.
	* Can be used as an input to an incoming or outgoing call hierarchy.
	*
	* @since 3.16.0
	*/
	var CallHierarchyPrepareRequest;
	(function(CallHierarchyPrepareRequest) {
		CallHierarchyPrepareRequest.method = "textDocument/prepareCallHierarchy";
		CallHierarchyPrepareRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);
		CallHierarchyPrepareRequest.capabilities = messages_1.CM.create("textDocument.callHierarchy", "callHierarchyProvider");
	})(CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = CallHierarchyPrepareRequest = {}));
	/**
	* A request to resolve the incoming calls for a given `CallHierarchyItem`.
	*
	* @since 3.16.0
	*/
	var CallHierarchyIncomingCallsRequest;
	(function(CallHierarchyIncomingCallsRequest) {
		CallHierarchyIncomingCallsRequest.method = "callHierarchy/incomingCalls";
		CallHierarchyIncomingCallsRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);
		CallHierarchyIncomingCallsRequest.capabilities = messages_1.CM.create("textDocument.callHierarchy", "callHierarchyProvider");
	})(CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = CallHierarchyIncomingCallsRequest = {}));
	/**
	* A request to resolve the outgoing calls for a given `CallHierarchyItem`.
	*
	* @since 3.16.0
	*/
	var CallHierarchyOutgoingCallsRequest;
	(function(CallHierarchyOutgoingCallsRequest) {
		CallHierarchyOutgoingCallsRequest.method = "callHierarchy/outgoingCalls";
		CallHierarchyOutgoingCallsRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);
		CallHierarchyOutgoingCallsRequest.capabilities = messages_1.CM.create("textDocument.callHierarchy", "callHierarchyProvider");
	})(CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = CallHierarchyOutgoingCallsRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js
var require_protocol_semanticTokens = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.SemanticTokensRegistrationType = exports.TokenFormat = void 0;
	const messages_1 = require_messages();
	var TokenFormat;
	(function(TokenFormat) {
		TokenFormat.Relative = "relative";
	})(TokenFormat || (exports.TokenFormat = TokenFormat = {}));
	var SemanticTokensRegistrationType;
	(function(SemanticTokensRegistrationType) {
		SemanticTokensRegistrationType.method = "textDocument/semanticTokens";
		SemanticTokensRegistrationType.type = new messages_1.RegistrationType(SemanticTokensRegistrationType.method);
	})(SemanticTokensRegistrationType || (exports.SemanticTokensRegistrationType = SemanticTokensRegistrationType = {}));
	/**
	* @since 3.16.0
	*/
	var SemanticTokensRequest;
	(function(SemanticTokensRequest) {
		SemanticTokensRequest.method = "textDocument/semanticTokens/full";
		SemanticTokensRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);
		SemanticTokensRequest.registrationMethod = SemanticTokensRegistrationType.method;
		SemanticTokensRequest.capabilities = messages_1.CM.create("textDocument.semanticTokens", "semanticTokensProvider");
	})(SemanticTokensRequest || (exports.SemanticTokensRequest = SemanticTokensRequest = {}));
	/**
	* @since 3.16.0
	*/
	var SemanticTokensDeltaRequest;
	(function(SemanticTokensDeltaRequest) {
		SemanticTokensDeltaRequest.method = "textDocument/semanticTokens/full/delta";
		SemanticTokensDeltaRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		SemanticTokensDeltaRequest.type = new messages_1.ProtocolRequestType(SemanticTokensDeltaRequest.method);
		SemanticTokensDeltaRequest.registrationMethod = SemanticTokensRegistrationType.method;
		SemanticTokensDeltaRequest.capabilities = messages_1.CM.create("textDocument.semanticTokens.requests.full.delta", "semanticTokensProvider.full.delta");
	})(SemanticTokensDeltaRequest || (exports.SemanticTokensDeltaRequest = SemanticTokensDeltaRequest = {}));
	/**
	* @since 3.16.0
	*/
	var SemanticTokensRangeRequest;
	(function(SemanticTokensRangeRequest) {
		SemanticTokensRangeRequest.method = "textDocument/semanticTokens/range";
		SemanticTokensRangeRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);
		SemanticTokensRangeRequest.registrationMethod = SemanticTokensRegistrationType.method;
		SemanticTokensRangeRequest.capabilities = messages_1.CM.create("textDocument.semanticTokens.requests.range", "semanticTokensProvider.range");
	})(SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = SemanticTokensRangeRequest = {}));
	/**
	* @since 3.16.0
	*/
	var SemanticTokensRefreshRequest;
	(function(SemanticTokensRefreshRequest) {
		SemanticTokensRefreshRequest.method = `workspace/semanticTokens/refresh`;
		SemanticTokensRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		SemanticTokensRefreshRequest.type = new messages_1.ProtocolRequestType0(SemanticTokensRefreshRequest.method);
		SemanticTokensRefreshRequest.capabilities = messages_1.CM.create("workspace.semanticTokens.refreshSupport", void 0);
	})(SemanticTokensRefreshRequest || (exports.SemanticTokensRefreshRequest = SemanticTokensRefreshRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js
var require_protocol_showDocument = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.ShowDocumentRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to show a document. This request might open an
	* external program depending on the value of the URI to open.
	* For example a request to open `https://code.visualstudio.com/`
	* will very likely open the URI in a WEB browser.
	*
	* @since 3.16.0
	*/
	var ShowDocumentRequest;
	(function(ShowDocumentRequest) {
		ShowDocumentRequest.method = "window/showDocument";
		ShowDocumentRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		ShowDocumentRequest.type = new messages_1.ProtocolRequestType(ShowDocumentRequest.method);
		ShowDocumentRequest.capabilities = messages_1.CM.create("window.showDocument.support", void 0);
	})(ShowDocumentRequest || (exports.ShowDocumentRequest = ShowDocumentRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js
var require_protocol_linkedEditingRange = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.LinkedEditingRangeRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to provide ranges that can be edited together.
	*
	* @since 3.16.0
	*/
	var LinkedEditingRangeRequest;
	(function(LinkedEditingRangeRequest) {
		LinkedEditingRangeRequest.method = "textDocument/linkedEditingRange";
		LinkedEditingRangeRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		LinkedEditingRangeRequest.type = new messages_1.ProtocolRequestType(LinkedEditingRangeRequest.method);
		LinkedEditingRangeRequest.capabilities = messages_1.CM.create("textDocument.linkedEditingRange", "linkedEditingRangeProvider");
	})(LinkedEditingRangeRequest || (exports.LinkedEditingRangeRequest = LinkedEditingRangeRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js
var require_protocol_fileOperations = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.DidRenameFilesNotification = exports.WillRenameFilesRequest = exports.DidCreateFilesNotification = exports.WillCreateFilesRequest = exports.FileOperationPatternKind = void 0;
	const messages_1 = require_messages();
	/**
	* A pattern kind describing if a glob pattern matches a file a folder or
	* both.
	*
	* @since 3.16.0
	*/
	var FileOperationPatternKind;
	(function(FileOperationPatternKind) {
		/**
		* The pattern matches a file only.
		*/
		FileOperationPatternKind.file = "file";
		/**
		* The pattern matches a folder only.
		*/
		FileOperationPatternKind.folder = "folder";
	})(FileOperationPatternKind || (exports.FileOperationPatternKind = FileOperationPatternKind = {}));
	/**
	* The will create files request is sent from the client to the server before files are actually
	* created as long as the creation is triggered from within the client.
	*
	* The request can return a `WorkspaceEdit` which will be applied to workspace before the
	* files are created. Hence the `WorkspaceEdit` can not manipulate the content of the file
	* to be created.
	*
	* @since 3.16.0
	*/
	var WillCreateFilesRequest;
	(function(WillCreateFilesRequest) {
		WillCreateFilesRequest.method = "workspace/willCreateFiles";
		WillCreateFilesRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		WillCreateFilesRequest.type = new messages_1.ProtocolRequestType(WillCreateFilesRequest.method);
		WillCreateFilesRequest.capabilities = messages_1.CM.create("workspace.fileOperations.willCreate", "workspace.fileOperations.willCreate");
	})(WillCreateFilesRequest || (exports.WillCreateFilesRequest = WillCreateFilesRequest = {}));
	/**
	* The did create files notification is sent from the client to the server when
	* files were created from within the client.
	*
	* @since 3.16.0
	*/
	var DidCreateFilesNotification;
	(function(DidCreateFilesNotification) {
		DidCreateFilesNotification.method = "workspace/didCreateFiles";
		DidCreateFilesNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidCreateFilesNotification.type = new messages_1.ProtocolNotificationType(DidCreateFilesNotification.method);
		DidCreateFilesNotification.capabilities = messages_1.CM.create("workspace.fileOperations.didCreate", "workspace.fileOperations.didCreate");
	})(DidCreateFilesNotification || (exports.DidCreateFilesNotification = DidCreateFilesNotification = {}));
	/**
	* The will rename files request is sent from the client to the server before files are actually
	* renamed as long as the rename is triggered from within the client.
	*
	* @since 3.16.0
	*/
	var WillRenameFilesRequest;
	(function(WillRenameFilesRequest) {
		WillRenameFilesRequest.method = "workspace/willRenameFiles";
		WillRenameFilesRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		WillRenameFilesRequest.type = new messages_1.ProtocolRequestType(WillRenameFilesRequest.method);
		WillRenameFilesRequest.capabilities = messages_1.CM.create("workspace.fileOperations.willRename", "workspace.fileOperations.willRename");
	})(WillRenameFilesRequest || (exports.WillRenameFilesRequest = WillRenameFilesRequest = {}));
	/**
	* The did rename files notification is sent from the client to the server when
	* files were renamed from within the client.
	*
	* @since 3.16.0
	*/
	var DidRenameFilesNotification;
	(function(DidRenameFilesNotification) {
		DidRenameFilesNotification.method = "workspace/didRenameFiles";
		DidRenameFilesNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidRenameFilesNotification.type = new messages_1.ProtocolNotificationType(DidRenameFilesNotification.method);
		DidRenameFilesNotification.capabilities = messages_1.CM.create("workspace.fileOperations.didRename", "workspace.fileOperations.didRename");
	})(DidRenameFilesNotification || (exports.DidRenameFilesNotification = DidRenameFilesNotification = {}));
	/**
	* The will delete files request is sent from the client to the server before files are actually
	* deleted as long as the deletion is triggered from within the client.
	*
	* @since 3.16.0
	*/
	var DidDeleteFilesNotification;
	(function(DidDeleteFilesNotification) {
		DidDeleteFilesNotification.method = "workspace/didDeleteFiles";
		DidDeleteFilesNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidDeleteFilesNotification.type = new messages_1.ProtocolNotificationType(DidDeleteFilesNotification.method);
		DidDeleteFilesNotification.capabilities = messages_1.CM.create("workspace.fileOperations.didDelete", "workspace.fileOperations.didDelete");
	})(DidDeleteFilesNotification || (exports.DidDeleteFilesNotification = DidDeleteFilesNotification = {}));
	/**
	* The did delete files notification is sent from the client to the server when
	* files were deleted from within the client.
	*
	* @since 3.16.0
	*/
	var WillDeleteFilesRequest;
	(function(WillDeleteFilesRequest) {
		WillDeleteFilesRequest.method = "workspace/willDeleteFiles";
		WillDeleteFilesRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		WillDeleteFilesRequest.type = new messages_1.ProtocolRequestType(WillDeleteFilesRequest.method);
		WillDeleteFilesRequest.capabilities = messages_1.CM.create("workspace.fileOperations.willDelete", "workspace.fileOperations.willDelete");
	})(WillDeleteFilesRequest || (exports.WillDeleteFilesRequest = WillDeleteFilesRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js
var require_protocol_moniker = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = void 0;
	const messages_1 = require_messages();
	/**
	* Moniker uniqueness level to define scope of the moniker.
	*
	* @since 3.16.0
	*/
	var UniquenessLevel;
	(function(UniquenessLevel) {
		/**
		* The moniker is only unique inside a document
		*/
		UniquenessLevel.document = "document";
		/**
		* The moniker is unique inside a project for which a dump got created
		*/
		UniquenessLevel.project = "project";
		/**
		* The moniker is unique inside the group to which a project belongs
		*/
		UniquenessLevel.group = "group";
		/**
		* The moniker is unique inside the moniker scheme.
		*/
		UniquenessLevel.scheme = "scheme";
		/**
		* The moniker is globally unique
		*/
		UniquenessLevel.global = "global";
	})(UniquenessLevel || (exports.UniquenessLevel = UniquenessLevel = {}));
	/**
	* The moniker kind.
	*
	* @since 3.16.0
	*/
	var MonikerKind;
	(function(MonikerKind) {
		/**
		* The moniker represent a symbol that is imported into a project
		*/
		MonikerKind.$import = "import";
		/**
		* The moniker represents a symbol that is exported from a project
		*/
		MonikerKind.$export = "export";
		/**
		* The moniker represents a symbol that is local to a project (e.g. a local
		* variable of a function, a class not visible outside the project, ...)
		*/
		MonikerKind.local = "local";
	})(MonikerKind || (exports.MonikerKind = MonikerKind = {}));
	/**
	* A request to get the moniker of a symbol at a given text document position.
	* The request parameter is of type {@link TextDocumentPositionParams}.
	* The response is of type {@link Moniker Moniker[]} or `null`.
	*/
	var MonikerRequest;
	(function(MonikerRequest) {
		MonikerRequest.method = "textDocument/moniker";
		MonikerRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		MonikerRequest.type = new messages_1.ProtocolRequestType(MonikerRequest.method);
		MonikerRequest.capabilities = messages_1.CM.create("textDocument.moniker", "monikerProvider");
	})(MonikerRequest || (exports.MonikerRequest = MonikerRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js
var require_protocol_typeHierarchy = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.TypeHierarchySubtypesRequest = exports.TypeHierarchySupertypesRequest = exports.TypeHierarchyPrepareRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to result a `TypeHierarchyItem` in a document at a given position.
	* Can be used as an input to a subtypes or supertypes type hierarchy.
	*
	* @since 3.17.0
	*/
	var TypeHierarchyPrepareRequest;
	(function(TypeHierarchyPrepareRequest) {
		TypeHierarchyPrepareRequest.method = "textDocument/prepareTypeHierarchy";
		TypeHierarchyPrepareRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		TypeHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(TypeHierarchyPrepareRequest.method);
		TypeHierarchyPrepareRequest.capabilities = messages_1.CM.create("textDocument.typeHierarchy", "typeHierarchyProvider");
	})(TypeHierarchyPrepareRequest || (exports.TypeHierarchyPrepareRequest = TypeHierarchyPrepareRequest = {}));
	/**
	* A request to resolve the supertypes for a given `TypeHierarchyItem`.
	*
	* @since 3.17.0
	*/
	var TypeHierarchySupertypesRequest;
	(function(TypeHierarchySupertypesRequest) {
		TypeHierarchySupertypesRequest.method = "typeHierarchy/supertypes";
		TypeHierarchySupertypesRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		TypeHierarchySupertypesRequest.type = new messages_1.ProtocolRequestType(TypeHierarchySupertypesRequest.method);
	})(TypeHierarchySupertypesRequest || (exports.TypeHierarchySupertypesRequest = TypeHierarchySupertypesRequest = {}));
	/**
	* A request to resolve the subtypes for a given `TypeHierarchyItem`.
	*
	* @since 3.17.0
	*/
	var TypeHierarchySubtypesRequest;
	(function(TypeHierarchySubtypesRequest) {
		TypeHierarchySubtypesRequest.method = "typeHierarchy/subtypes";
		TypeHierarchySubtypesRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		TypeHierarchySubtypesRequest.type = new messages_1.ProtocolRequestType(TypeHierarchySubtypesRequest.method);
	})(TypeHierarchySubtypesRequest || (exports.TypeHierarchySubtypesRequest = TypeHierarchySubtypesRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js
var require_protocol_inlineValue = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.InlineValueRefreshRequest = exports.InlineValueRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to provide inline values in a document. The request's parameter is of
	* type {@link InlineValueParams}, the response is of type
	* {@link InlineValue InlineValue[]} or a Thenable that resolves to such.
	*
	* @since 3.17.0
	*/
	var InlineValueRequest;
	(function(InlineValueRequest) {
		InlineValueRequest.method = "textDocument/inlineValue";
		InlineValueRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		InlineValueRequest.type = new messages_1.ProtocolRequestType(InlineValueRequest.method);
		InlineValueRequest.capabilities = messages_1.CM.create("textDocument.inlineValue", "inlineValueProvider");
	})(InlineValueRequest || (exports.InlineValueRequest = InlineValueRequest = {}));
	/**
	* @since 3.17.0
	*/
	var InlineValueRefreshRequest;
	(function(InlineValueRefreshRequest) {
		InlineValueRefreshRequest.method = `workspace/inlineValue/refresh`;
		InlineValueRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		InlineValueRefreshRequest.type = new messages_1.ProtocolRequestType0(InlineValueRefreshRequest.method);
		InlineValueRefreshRequest.capabilities = messages_1.CM.create("workspace.inlineValue.refreshSupport", void 0);
	})(InlineValueRefreshRequest || (exports.InlineValueRefreshRequest = InlineValueRefreshRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js
var require_protocol_inlayHint = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.InlayHintRefreshRequest = exports.InlayHintResolveRequest = exports.InlayHintRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to provide inlay hints in a document. The request's parameter is of
	* type {@link InlayHintsParams}, the response is of type
	* {@link InlayHint InlayHint[]} or a Thenable that resolves to such.
	*
	* @since 3.17.0
	*/
	var InlayHintRequest;
	(function(InlayHintRequest) {
		InlayHintRequest.method = "textDocument/inlayHint";
		InlayHintRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		InlayHintRequest.type = new messages_1.ProtocolRequestType(InlayHintRequest.method);
		InlayHintRequest.capabilities = messages_1.CM.create("textDocument.inlayHint", "inlayHintProvider");
	})(InlayHintRequest || (exports.InlayHintRequest = InlayHintRequest = {}));
	/**
	* A request to resolve additional properties for an inlay hint.
	* The request's parameter is of type {@link InlayHint}, the response is
	* of type {@link InlayHint} or a Thenable that resolves to such.
	*
	* @since 3.17.0
	*/
	var InlayHintResolveRequest;
	(function(InlayHintResolveRequest) {
		InlayHintResolveRequest.method = "inlayHint/resolve";
		InlayHintResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		InlayHintResolveRequest.type = new messages_1.ProtocolRequestType(InlayHintResolveRequest.method);
		InlayHintResolveRequest.capabilities = messages_1.CM.create("textDocument.inlayHint.resolveSupport", "inlayHintProvider.resolveProvider");
	})(InlayHintResolveRequest || (exports.InlayHintResolveRequest = InlayHintResolveRequest = {}));
	/**
	* @since 3.17.0
	*/
	var InlayHintRefreshRequest;
	(function(InlayHintRefreshRequest) {
		InlayHintRefreshRequest.method = `workspace/inlayHint/refresh`;
		InlayHintRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		InlayHintRefreshRequest.type = new messages_1.ProtocolRequestType0(InlayHintRefreshRequest.method);
		InlayHintRefreshRequest.capabilities = messages_1.CM.create("workspace.inlayHint.refreshSupport", void 0);
	})(InlayHintRefreshRequest || (exports.InlayHintRefreshRequest = InlayHintRefreshRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js
var require_protocol_diagnostic = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
		Object.defineProperty(o, "default", {
			enumerable: true,
			value: v
		});
	}) : function(o, v) {
		o["default"] = v;
	});
	var __importStar = exports && exports.__importStar || (function() {
		var ownKeys = function(o) {
			ownKeys = Object.getOwnPropertyNames || function(o) {
				var ar = [];
				for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
				return ar;
			};
			return ownKeys(o);
		};
		return function(mod) {
			if (mod && mod.__esModule) return mod;
			var result = {};
			if (mod != null) {
				for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
			}
			__setModuleDefault(result, mod);
			return result;
		};
	})();
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.DiagnosticRefreshRequest = exports.WorkspaceDiagnosticRequest = exports.DocumentDiagnosticRequest = exports.DocumentDiagnosticReportKind = exports.DiagnosticServerCancellationData = void 0;
	const vscode_jsonrpc_1 = require_api$1();
	const Is = __importStar(require_is());
	const messages_1 = require_messages();
	/**
	* @since 3.17.0
	*/
	var DiagnosticServerCancellationData;
	(function(DiagnosticServerCancellationData) {
		function is(value) {
			const candidate = value;
			return candidate && Is.boolean(candidate.retriggerRequest);
		}
		DiagnosticServerCancellationData.is = is;
	})(DiagnosticServerCancellationData || (exports.DiagnosticServerCancellationData = DiagnosticServerCancellationData = {}));
	/**
	* The document diagnostic report kinds.
	*
	* @since 3.17.0
	*/
	var DocumentDiagnosticReportKind;
	(function(DocumentDiagnosticReportKind) {
		/**
		* A diagnostic report with a full
		* set of problems.
		*/
		DocumentDiagnosticReportKind.Full = "full";
		/**
		* A report indicating that the last
		* returned report is still accurate.
		*/
		DocumentDiagnosticReportKind.Unchanged = "unchanged";
	})(DocumentDiagnosticReportKind || (exports.DocumentDiagnosticReportKind = DocumentDiagnosticReportKind = {}));
	/**
	* The document diagnostic request definition.
	*
	* @since 3.17.0
	*/
	var DocumentDiagnosticRequest;
	(function(DocumentDiagnosticRequest) {
		DocumentDiagnosticRequest.method = "textDocument/diagnostic";
		DocumentDiagnosticRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentDiagnosticRequest.type = new messages_1.ProtocolRequestType(DocumentDiagnosticRequest.method);
		DocumentDiagnosticRequest.partialResult = new vscode_jsonrpc_1.ProgressType();
		DocumentDiagnosticRequest.capabilities = messages_1.CM.create("textDocument.diagnostic", "diagnosticProvider");
	})(DocumentDiagnosticRequest || (exports.DocumentDiagnosticRequest = DocumentDiagnosticRequest = {}));
	/**
	* The workspace diagnostic request definition.
	*
	* @since 3.17.0
	*/
	var WorkspaceDiagnosticRequest;
	(function(WorkspaceDiagnosticRequest) {
		WorkspaceDiagnosticRequest.method = "workspace/diagnostic";
		WorkspaceDiagnosticRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		WorkspaceDiagnosticRequest.type = new messages_1.ProtocolRequestType(WorkspaceDiagnosticRequest.method);
		WorkspaceDiagnosticRequest.partialResult = new vscode_jsonrpc_1.ProgressType();
		WorkspaceDiagnosticRequest.capabilities = messages_1.CM.create("workspace.diagnostics", "diagnosticProvider.workspaceDiagnostics");
	})(WorkspaceDiagnosticRequest || (exports.WorkspaceDiagnosticRequest = WorkspaceDiagnosticRequest = {}));
	/**
	* The diagnostic refresh request definition.
	*
	* @since 3.17.0
	*/
	var DiagnosticRefreshRequest;
	(function(DiagnosticRefreshRequest) {
		DiagnosticRefreshRequest.method = `workspace/diagnostic/refresh`;
		DiagnosticRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		DiagnosticRefreshRequest.type = new messages_1.ProtocolRequestType0(DiagnosticRefreshRequest.method);
		DiagnosticRefreshRequest.capabilities = messages_1.CM.create("workspace.diagnostics.refreshSupport", void 0);
	})(DiagnosticRefreshRequest || (exports.DiagnosticRefreshRequest = DiagnosticRefreshRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js
var require_protocol_notebook = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
		Object.defineProperty(o, "default", {
			enumerable: true,
			value: v
		});
	}) : function(o, v) {
		o["default"] = v;
	});
	var __importStar = exports && exports.__importStar || (function() {
		var ownKeys = function(o) {
			ownKeys = Object.getOwnPropertyNames || function(o) {
				var ar = [];
				for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
				return ar;
			};
			return ownKeys(o);
		};
		return function(mod) {
			if (mod && mod.__esModule) return mod;
			var result = {};
			if (mod != null) {
				for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
			}
			__setModuleDefault(result, mod);
			return result;
		};
	})();
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.DidCloseNotebookDocumentNotification = exports.DidSaveNotebookDocumentNotification = exports.DidChangeNotebookDocumentNotification = exports.NotebookCellArrayChange = exports.DidOpenNotebookDocumentNotification = exports.NotebookDocumentSyncRegistrationType = exports.NotebookDocument = exports.NotebookCell = exports.ExecutionSummary = exports.NotebookCellKind = void 0;
	const vscode_languageserver_types_1 = (init_main$2(), __toCommonJS(main_exports));
	const Is = __importStar(require_is());
	const messages_1 = require_messages();
	/**
	* A notebook cell kind.
	*
	* @since 3.17.0
	*/
	var NotebookCellKind;
	(function(NotebookCellKind) {
		/**
		* A markup-cell is formatted source that is used for display.
		*/
		NotebookCellKind.Markup = 1;
		/**
		* A code-cell is source code.
		*/
		NotebookCellKind.Code = 2;
		function is(value) {
			return value === 1 || value === 2;
		}
		NotebookCellKind.is = is;
	})(NotebookCellKind || (exports.NotebookCellKind = NotebookCellKind = {}));
	var ExecutionSummary;
	(function(ExecutionSummary) {
		function create(executionOrder, success) {
			const result = { executionOrder };
			if (success === true || success === false) result.success = success;
			return result;
		}
		ExecutionSummary.create = create;
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && vscode_languageserver_types_1.uinteger.is(candidate.executionOrder) && (candidate.success === void 0 || Is.boolean(candidate.success));
		}
		ExecutionSummary.is = is;
		function equals(one, other) {
			if (one === other) return true;
			if (one === null || one === void 0 || other === null || other === void 0) return false;
			return one.executionOrder === other.executionOrder && one.success === other.success;
		}
		ExecutionSummary.equals = equals;
	})(ExecutionSummary || (exports.ExecutionSummary = ExecutionSummary = {}));
	var NotebookCell;
	(function(NotebookCell) {
		function create(kind, document) {
			return {
				kind,
				document
			};
		}
		NotebookCell.create = create;
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && NotebookCellKind.is(candidate.kind) && vscode_languageserver_types_1.DocumentUri.is(candidate.document) && (candidate.metadata === void 0 || Is.objectLiteral(candidate.metadata));
		}
		NotebookCell.is = is;
		function diff(one, two) {
			const result = /* @__PURE__ */ new Set();
			if (one.document !== two.document) result.add("document");
			if (one.kind !== two.kind) result.add("kind");
			if (one.executionSummary !== two.executionSummary) result.add("executionSummary");
			if ((one.metadata !== void 0 || two.metadata !== void 0) && !equalsMetadata(one.metadata, two.metadata)) result.add("metadata");
			if ((one.executionSummary !== void 0 || two.executionSummary !== void 0) && !ExecutionSummary.equals(one.executionSummary, two.executionSummary)) result.add("executionSummary");
			return result;
		}
		NotebookCell.diff = diff;
		function equalsMetadata(one, other) {
			if (one === other) return true;
			if (one === null || one === void 0 || other === null || other === void 0) return false;
			if (typeof one !== typeof other) return false;
			if (typeof one !== "object") return false;
			const oneArray = Array.isArray(one);
			const otherArray = Array.isArray(other);
			if (oneArray !== otherArray) return false;
			if (oneArray && otherArray) {
				if (one.length !== other.length) return false;
				for (let i = 0; i < one.length; i++) if (!equalsMetadata(one[i], other[i])) return false;
			}
			if (Is.objectLiteral(one) && Is.objectLiteral(other)) {
				const oneKeys = Object.keys(one);
				const otherKeys = Object.keys(other);
				if (oneKeys.length !== otherKeys.length) return false;
				oneKeys.sort();
				otherKeys.sort();
				if (!equalsMetadata(oneKeys, otherKeys)) return false;
				for (let i = 0; i < oneKeys.length; i++) {
					const prop = oneKeys[i];
					if (!equalsMetadata(one[prop], other[prop])) return false;
				}
			}
			return true;
		}
	})(NotebookCell || (exports.NotebookCell = NotebookCell = {}));
	var NotebookDocument;
	(function(NotebookDocument) {
		function create(uri, notebookType, version, cells) {
			return {
				uri,
				notebookType,
				version,
				cells
			};
		}
		NotebookDocument.create = create;
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && Is.string(candidate.uri) && vscode_languageserver_types_1.integer.is(candidate.version) && Is.typedArray(candidate.cells, NotebookCell.is);
		}
		NotebookDocument.is = is;
	})(NotebookDocument || (exports.NotebookDocument = NotebookDocument = {}));
	var NotebookDocumentSyncRegistrationType;
	(function(NotebookDocumentSyncRegistrationType) {
		NotebookDocumentSyncRegistrationType.method = "notebookDocument/sync";
		NotebookDocumentSyncRegistrationType.messageDirection = messages_1.MessageDirection.clientToServer;
		NotebookDocumentSyncRegistrationType.type = new messages_1.RegistrationType(NotebookDocumentSyncRegistrationType.method);
	})(NotebookDocumentSyncRegistrationType || (exports.NotebookDocumentSyncRegistrationType = NotebookDocumentSyncRegistrationType = {}));
	/**
	* A notification sent when a notebook opens.
	*
	* @since 3.17.0
	*/
	var DidOpenNotebookDocumentNotification;
	(function(DidOpenNotebookDocumentNotification) {
		DidOpenNotebookDocumentNotification.method = "notebookDocument/didOpen";
		DidOpenNotebookDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidOpenNotebookDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenNotebookDocumentNotification.method);
		DidOpenNotebookDocumentNotification.registrationMethod = NotebookDocumentSyncRegistrationType.method;
	})(DidOpenNotebookDocumentNotification || (exports.DidOpenNotebookDocumentNotification = DidOpenNotebookDocumentNotification = {}));
	var NotebookCellArrayChange;
	(function(NotebookCellArrayChange) {
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && vscode_languageserver_types_1.uinteger.is(candidate.start) && vscode_languageserver_types_1.uinteger.is(candidate.deleteCount) && (candidate.cells === void 0 || Is.typedArray(candidate.cells, NotebookCell.is));
		}
		NotebookCellArrayChange.is = is;
		function create(start, deleteCount, cells) {
			const result = {
				start,
				deleteCount
			};
			if (cells !== void 0) result.cells = cells;
			return result;
		}
		NotebookCellArrayChange.create = create;
	})(NotebookCellArrayChange || (exports.NotebookCellArrayChange = NotebookCellArrayChange = {}));
	var DidChangeNotebookDocumentNotification;
	(function(DidChangeNotebookDocumentNotification) {
		DidChangeNotebookDocumentNotification.method = "notebookDocument/didChange";
		DidChangeNotebookDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidChangeNotebookDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeNotebookDocumentNotification.method);
		DidChangeNotebookDocumentNotification.registrationMethod = NotebookDocumentSyncRegistrationType.method;
	})(DidChangeNotebookDocumentNotification || (exports.DidChangeNotebookDocumentNotification = DidChangeNotebookDocumentNotification = {}));
	/**
	* A notification sent when a notebook document is saved.
	*
	* @since 3.17.0
	*/
	var DidSaveNotebookDocumentNotification;
	(function(DidSaveNotebookDocumentNotification) {
		DidSaveNotebookDocumentNotification.method = "notebookDocument/didSave";
		DidSaveNotebookDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidSaveNotebookDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveNotebookDocumentNotification.method);
		DidSaveNotebookDocumentNotification.registrationMethod = NotebookDocumentSyncRegistrationType.method;
	})(DidSaveNotebookDocumentNotification || (exports.DidSaveNotebookDocumentNotification = DidSaveNotebookDocumentNotification = {}));
	/**
	* A notification sent when a notebook closes.
	*
	* @since 3.17.0
	*/
	var DidCloseNotebookDocumentNotification;
	(function(DidCloseNotebookDocumentNotification) {
		DidCloseNotebookDocumentNotification.method = "notebookDocument/didClose";
		DidCloseNotebookDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidCloseNotebookDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseNotebookDocumentNotification.method);
		DidCloseNotebookDocumentNotification.registrationMethod = NotebookDocumentSyncRegistrationType.method;
	})(DidCloseNotebookDocumentNotification || (exports.DidCloseNotebookDocumentNotification = DidCloseNotebookDocumentNotification = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.js
var require_protocol_inlineCompletion = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.InlineCompletionRequest = void 0;
	const messages_1 = require_messages();
	/**
	* A request to provide inline completions in a document. The request's parameter is of
	* type {@link InlineCompletionParams}, the response is of type
	* {@link InlineCompletion InlineCompletion[]} or a Thenable that resolves to such.
	*
	* @since 3.18.0
	*/
	var InlineCompletionRequest;
	(function(InlineCompletionRequest) {
		InlineCompletionRequest.method = "textDocument/inlineCompletion";
		InlineCompletionRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		InlineCompletionRequest.type = new messages_1.ProtocolRequestType(InlineCompletionRequest.method);
		InlineCompletionRequest.capabilities = messages_1.CM.create("textDocument.inlineCompletion", "inlineCompletionProvider");
	})(InlineCompletionRequest || (exports.InlineCompletionRequest = InlineCompletionRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.textDocumentContent.js
var require_protocol_textDocumentContent = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.TextDocumentContentRefreshRequest = exports.TextDocumentContentRequest = void 0;
	const messages_1 = require_messages();
	/**
	* The `workspace/textDocumentContent` request is sent from the client to the
	* server to request the content of a text document.
	*
	* @since 3.18.0
	*/
	var TextDocumentContentRequest;
	(function(TextDocumentContentRequest) {
		TextDocumentContentRequest.method = "workspace/textDocumentContent";
		TextDocumentContentRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		TextDocumentContentRequest.type = new messages_1.ProtocolRequestType(TextDocumentContentRequest.method);
		TextDocumentContentRequest.capabilities = messages_1.CM.create("workspace.textDocumentContent", "workspace.textDocumentContent");
	})(TextDocumentContentRequest || (exports.TextDocumentContentRequest = TextDocumentContentRequest = {}));
	/**
	* The `workspace/textDocumentContent` request is sent from the server to the client to refresh
	* the content of a specific text document.
	*
	* @since 3.18.0
	*/
	var TextDocumentContentRefreshRequest;
	(function(TextDocumentContentRefreshRequest) {
		TextDocumentContentRefreshRequest.method = `workspace/textDocumentContent/refresh`;
		TextDocumentContentRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		TextDocumentContentRefreshRequest.type = new messages_1.ProtocolRequestType(TextDocumentContentRefreshRequest.method);
	})(TextDocumentContentRefreshRequest || (exports.TextDocumentContentRefreshRequest = TextDocumentContentRefreshRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/protocol.js
var require_protocol = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __setModuleDefault = exports && exports.__setModuleDefault || (Object.create ? (function(o, v) {
		Object.defineProperty(o, "default", {
			enumerable: true,
			value: v
		});
	}) : function(o, v) {
		o["default"] = v;
	});
	var __importStar = exports && exports.__importStar || (function() {
		var ownKeys = function(o) {
			ownKeys = Object.getOwnPropertyNames || function(o) {
				var ar = [];
				for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
				return ar;
			};
			return ownKeys(o);
		};
		return function(mod) {
			if (mod && mod.__esModule) return mod;
			var result = {};
			if (mod != null) {
				for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
			}
			__setModuleDefault(result, mod);
			return result;
		};
	})();
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.CodeActionRequest = exports.DocumentSymbolRequest = exports.DocumentHighlightRequest = exports.ReferencesRequest = exports.DefinitionRequest = exports.SignatureHelpRequest = exports.SignatureHelpTriggerKind = exports.HoverRequest = exports.CompletionResolveRequest = exports.CompletionRequest = exports.CompletionTriggerKind = exports.PublishDiagnosticsNotification = exports.WatchKind = exports.GlobPattern = exports.RelativePattern = exports.FileChangeType = exports.DidChangeWatchedFilesNotification = exports.WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentNotification = exports.TextDocumentSaveReason = exports.DidSaveTextDocumentNotification = exports.DidCloseTextDocumentNotification = exports.DidChangeTextDocumentNotification = exports.TextDocumentContentChangeEvent = exports.DidOpenTextDocumentNotification = exports.TextDocumentSyncKind = exports.TelemetryEventNotification = exports.LogMessageNotification = exports.ShowMessageRequest = exports.ShowMessageNotification = exports.MessageType = exports.DidChangeConfigurationNotification = exports.ExitNotification = exports.ShutdownRequest = exports.InitializedNotification = exports.InitializeErrorCodes = exports.InitializeRequest = exports.WorkDoneProgressOptions = exports.TextDocumentRegistrationOptions = exports.StaticRegistrationOptions = exports.PositionEncodingKind = exports.RegularExpressionEngineKind = exports.FailureHandlingKind = exports.ResourceOperationKind = exports.UnregistrationRequest = exports.RegistrationRequest = exports.DocumentSelector = exports.NotebookCellTextDocumentFilter = exports.NotebookDocumentFilter = exports.TextDocumentFilter = void 0;
	exports.UniquenessLevel = exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.WillRenameFilesRequest = exports.DidRenameFilesNotification = exports.WillCreateFilesRequest = exports.DidCreateFilesNotification = exports.FileOperationPatternKind = exports.LinkedEditingRangeRequest = exports.ShowDocumentRequest = exports.SemanticTokensRegistrationType = exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.TokenFormat = exports.CallHierarchyPrepareRequest = exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = exports.SelectionRangeRequest = exports.DeclarationRequest = exports.FoldingRangeRefreshRequest = exports.FoldingRangeRequest = exports.ColorPresentationRequest = exports.DocumentColorRequest = exports.ConfigurationRequest = exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = exports.TypeDefinitionRequest = exports.ImplementationRequest = exports.ApplyWorkspaceEditRequest = exports.ExecuteCommandRequest = exports.PrepareRenameRequest = exports.RenameRequest = exports.PrepareSupportDefaultBehavior = exports.DocumentOnTypeFormattingRequest = exports.DocumentRangesFormattingRequest = exports.DocumentRangeFormattingRequest = exports.DocumentFormattingRequest = exports.DocumentLinkResolveRequest = exports.DocumentLinkRequest = exports.CodeLensRefreshRequest = exports.CodeLensResolveRequest = exports.CodeLensRequest = exports.WorkspaceSymbolResolveRequest = exports.WorkspaceSymbolRequest = exports.CodeActionResolveRequest = void 0;
	exports.TextDocumentContentRefreshRequest = exports.TextDocumentContentRequest = exports.InlineCompletionRequest = exports.DidCloseNotebookDocumentNotification = exports.DidSaveNotebookDocumentNotification = exports.DidChangeNotebookDocumentNotification = exports.NotebookCellArrayChange = exports.DidOpenNotebookDocumentNotification = exports.NotebookDocumentSyncRegistrationType = exports.NotebookDocument = exports.NotebookCell = exports.ExecutionSummary = exports.NotebookCellKind = exports.DiagnosticRefreshRequest = exports.WorkspaceDiagnosticRequest = exports.DocumentDiagnosticRequest = exports.DocumentDiagnosticReportKind = exports.DiagnosticServerCancellationData = exports.InlayHintRefreshRequest = exports.InlayHintResolveRequest = exports.InlayHintRequest = exports.InlineValueRefreshRequest = exports.InlineValueRequest = exports.TypeHierarchySupertypesRequest = exports.TypeHierarchySubtypesRequest = exports.TypeHierarchyPrepareRequest = exports.MonikerRequest = exports.MonikerKind = void 0;
	const messages_1 = require_messages();
	const vscode_languageserver_types_1 = (init_main$2(), __toCommonJS(main_exports));
	const Is = __importStar(require_is());
	const protocol_implementation_1 = require_protocol_implementation();
	Object.defineProperty(exports, "ImplementationRequest", {
		enumerable: true,
		get: function() {
			return protocol_implementation_1.ImplementationRequest;
		}
	});
	const protocol_typeDefinition_1 = require_protocol_typeDefinition();
	Object.defineProperty(exports, "TypeDefinitionRequest", {
		enumerable: true,
		get: function() {
			return protocol_typeDefinition_1.TypeDefinitionRequest;
		}
	});
	const protocol_workspaceFolder_1 = require_protocol_workspaceFolder();
	Object.defineProperty(exports, "WorkspaceFoldersRequest", {
		enumerable: true,
		get: function() {
			return protocol_workspaceFolder_1.WorkspaceFoldersRequest;
		}
	});
	Object.defineProperty(exports, "DidChangeWorkspaceFoldersNotification", {
		enumerable: true,
		get: function() {
			return protocol_workspaceFolder_1.DidChangeWorkspaceFoldersNotification;
		}
	});
	const protocol_configuration_1 = require_protocol_configuration();
	Object.defineProperty(exports, "ConfigurationRequest", {
		enumerable: true,
		get: function() {
			return protocol_configuration_1.ConfigurationRequest;
		}
	});
	const protocol_colorProvider_1 = require_protocol_colorProvider();
	Object.defineProperty(exports, "DocumentColorRequest", {
		enumerable: true,
		get: function() {
			return protocol_colorProvider_1.DocumentColorRequest;
		}
	});
	Object.defineProperty(exports, "ColorPresentationRequest", {
		enumerable: true,
		get: function() {
			return protocol_colorProvider_1.ColorPresentationRequest;
		}
	});
	const protocol_foldingRange_1 = require_protocol_foldingRange();
	Object.defineProperty(exports, "FoldingRangeRequest", {
		enumerable: true,
		get: function() {
			return protocol_foldingRange_1.FoldingRangeRequest;
		}
	});
	Object.defineProperty(exports, "FoldingRangeRefreshRequest", {
		enumerable: true,
		get: function() {
			return protocol_foldingRange_1.FoldingRangeRefreshRequest;
		}
	});
	const protocol_declaration_1 = require_protocol_declaration();
	Object.defineProperty(exports, "DeclarationRequest", {
		enumerable: true,
		get: function() {
			return protocol_declaration_1.DeclarationRequest;
		}
	});
	const protocol_selectionRange_1 = require_protocol_selectionRange();
	Object.defineProperty(exports, "SelectionRangeRequest", {
		enumerable: true,
		get: function() {
			return protocol_selectionRange_1.SelectionRangeRequest;
		}
	});
	const protocol_progress_1 = require_protocol_progress();
	Object.defineProperty(exports, "WorkDoneProgress", {
		enumerable: true,
		get: function() {
			return protocol_progress_1.WorkDoneProgress;
		}
	});
	Object.defineProperty(exports, "WorkDoneProgressCreateRequest", {
		enumerable: true,
		get: function() {
			return protocol_progress_1.WorkDoneProgressCreateRequest;
		}
	});
	Object.defineProperty(exports, "WorkDoneProgressCancelNotification", {
		enumerable: true,
		get: function() {
			return protocol_progress_1.WorkDoneProgressCancelNotification;
		}
	});
	const protocol_callHierarchy_1 = require_protocol_callHierarchy();
	Object.defineProperty(exports, "CallHierarchyIncomingCallsRequest", {
		enumerable: true,
		get: function() {
			return protocol_callHierarchy_1.CallHierarchyIncomingCallsRequest;
		}
	});
	Object.defineProperty(exports, "CallHierarchyOutgoingCallsRequest", {
		enumerable: true,
		get: function() {
			return protocol_callHierarchy_1.CallHierarchyOutgoingCallsRequest;
		}
	});
	Object.defineProperty(exports, "CallHierarchyPrepareRequest", {
		enumerable: true,
		get: function() {
			return protocol_callHierarchy_1.CallHierarchyPrepareRequest;
		}
	});
	const protocol_semanticTokens_1 = require_protocol_semanticTokens();
	Object.defineProperty(exports, "TokenFormat", {
		enumerable: true,
		get: function() {
			return protocol_semanticTokens_1.TokenFormat;
		}
	});
	Object.defineProperty(exports, "SemanticTokensRequest", {
		enumerable: true,
		get: function() {
			return protocol_semanticTokens_1.SemanticTokensRequest;
		}
	});
	Object.defineProperty(exports, "SemanticTokensDeltaRequest", {
		enumerable: true,
		get: function() {
			return protocol_semanticTokens_1.SemanticTokensDeltaRequest;
		}
	});
	Object.defineProperty(exports, "SemanticTokensRangeRequest", {
		enumerable: true,
		get: function() {
			return protocol_semanticTokens_1.SemanticTokensRangeRequest;
		}
	});
	Object.defineProperty(exports, "SemanticTokensRefreshRequest", {
		enumerable: true,
		get: function() {
			return protocol_semanticTokens_1.SemanticTokensRefreshRequest;
		}
	});
	Object.defineProperty(exports, "SemanticTokensRegistrationType", {
		enumerable: true,
		get: function() {
			return protocol_semanticTokens_1.SemanticTokensRegistrationType;
		}
	});
	const protocol_showDocument_1 = require_protocol_showDocument();
	Object.defineProperty(exports, "ShowDocumentRequest", {
		enumerable: true,
		get: function() {
			return protocol_showDocument_1.ShowDocumentRequest;
		}
	});
	const protocol_linkedEditingRange_1 = require_protocol_linkedEditingRange();
	Object.defineProperty(exports, "LinkedEditingRangeRequest", {
		enumerable: true,
		get: function() {
			return protocol_linkedEditingRange_1.LinkedEditingRangeRequest;
		}
	});
	const protocol_fileOperations_1 = require_protocol_fileOperations();
	Object.defineProperty(exports, "FileOperationPatternKind", {
		enumerable: true,
		get: function() {
			return protocol_fileOperations_1.FileOperationPatternKind;
		}
	});
	Object.defineProperty(exports, "DidCreateFilesNotification", {
		enumerable: true,
		get: function() {
			return protocol_fileOperations_1.DidCreateFilesNotification;
		}
	});
	Object.defineProperty(exports, "WillCreateFilesRequest", {
		enumerable: true,
		get: function() {
			return protocol_fileOperations_1.WillCreateFilesRequest;
		}
	});
	Object.defineProperty(exports, "DidRenameFilesNotification", {
		enumerable: true,
		get: function() {
			return protocol_fileOperations_1.DidRenameFilesNotification;
		}
	});
	Object.defineProperty(exports, "WillRenameFilesRequest", {
		enumerable: true,
		get: function() {
			return protocol_fileOperations_1.WillRenameFilesRequest;
		}
	});
	Object.defineProperty(exports, "DidDeleteFilesNotification", {
		enumerable: true,
		get: function() {
			return protocol_fileOperations_1.DidDeleteFilesNotification;
		}
	});
	Object.defineProperty(exports, "WillDeleteFilesRequest", {
		enumerable: true,
		get: function() {
			return protocol_fileOperations_1.WillDeleteFilesRequest;
		}
	});
	const protocol_moniker_1 = require_protocol_moniker();
	Object.defineProperty(exports, "UniquenessLevel", {
		enumerable: true,
		get: function() {
			return protocol_moniker_1.UniquenessLevel;
		}
	});
	Object.defineProperty(exports, "MonikerKind", {
		enumerable: true,
		get: function() {
			return protocol_moniker_1.MonikerKind;
		}
	});
	Object.defineProperty(exports, "MonikerRequest", {
		enumerable: true,
		get: function() {
			return protocol_moniker_1.MonikerRequest;
		}
	});
	const protocol_typeHierarchy_1 = require_protocol_typeHierarchy();
	Object.defineProperty(exports, "TypeHierarchyPrepareRequest", {
		enumerable: true,
		get: function() {
			return protocol_typeHierarchy_1.TypeHierarchyPrepareRequest;
		}
	});
	Object.defineProperty(exports, "TypeHierarchySubtypesRequest", {
		enumerable: true,
		get: function() {
			return protocol_typeHierarchy_1.TypeHierarchySubtypesRequest;
		}
	});
	Object.defineProperty(exports, "TypeHierarchySupertypesRequest", {
		enumerable: true,
		get: function() {
			return protocol_typeHierarchy_1.TypeHierarchySupertypesRequest;
		}
	});
	const protocol_inlineValue_1 = require_protocol_inlineValue();
	Object.defineProperty(exports, "InlineValueRequest", {
		enumerable: true,
		get: function() {
			return protocol_inlineValue_1.InlineValueRequest;
		}
	});
	Object.defineProperty(exports, "InlineValueRefreshRequest", {
		enumerable: true,
		get: function() {
			return protocol_inlineValue_1.InlineValueRefreshRequest;
		}
	});
	const protocol_inlayHint_1 = require_protocol_inlayHint();
	Object.defineProperty(exports, "InlayHintRequest", {
		enumerable: true,
		get: function() {
			return protocol_inlayHint_1.InlayHintRequest;
		}
	});
	Object.defineProperty(exports, "InlayHintResolveRequest", {
		enumerable: true,
		get: function() {
			return protocol_inlayHint_1.InlayHintResolveRequest;
		}
	});
	Object.defineProperty(exports, "InlayHintRefreshRequest", {
		enumerable: true,
		get: function() {
			return protocol_inlayHint_1.InlayHintRefreshRequest;
		}
	});
	const protocol_diagnostic_1 = require_protocol_diagnostic();
	Object.defineProperty(exports, "DiagnosticServerCancellationData", {
		enumerable: true,
		get: function() {
			return protocol_diagnostic_1.DiagnosticServerCancellationData;
		}
	});
	Object.defineProperty(exports, "DocumentDiagnosticReportKind", {
		enumerable: true,
		get: function() {
			return protocol_diagnostic_1.DocumentDiagnosticReportKind;
		}
	});
	Object.defineProperty(exports, "DocumentDiagnosticRequest", {
		enumerable: true,
		get: function() {
			return protocol_diagnostic_1.DocumentDiagnosticRequest;
		}
	});
	Object.defineProperty(exports, "WorkspaceDiagnosticRequest", {
		enumerable: true,
		get: function() {
			return protocol_diagnostic_1.WorkspaceDiagnosticRequest;
		}
	});
	Object.defineProperty(exports, "DiagnosticRefreshRequest", {
		enumerable: true,
		get: function() {
			return protocol_diagnostic_1.DiagnosticRefreshRequest;
		}
	});
	const protocol_notebook_1 = require_protocol_notebook();
	Object.defineProperty(exports, "NotebookCellKind", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.NotebookCellKind;
		}
	});
	Object.defineProperty(exports, "ExecutionSummary", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.ExecutionSummary;
		}
	});
	Object.defineProperty(exports, "NotebookCell", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.NotebookCell;
		}
	});
	Object.defineProperty(exports, "NotebookDocument", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.NotebookDocument;
		}
	});
	Object.defineProperty(exports, "NotebookDocumentSyncRegistrationType", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.NotebookDocumentSyncRegistrationType;
		}
	});
	Object.defineProperty(exports, "DidOpenNotebookDocumentNotification", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.DidOpenNotebookDocumentNotification;
		}
	});
	Object.defineProperty(exports, "NotebookCellArrayChange", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.NotebookCellArrayChange;
		}
	});
	Object.defineProperty(exports, "DidChangeNotebookDocumentNotification", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.DidChangeNotebookDocumentNotification;
		}
	});
	Object.defineProperty(exports, "DidSaveNotebookDocumentNotification", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.DidSaveNotebookDocumentNotification;
		}
	});
	Object.defineProperty(exports, "DidCloseNotebookDocumentNotification", {
		enumerable: true,
		get: function() {
			return protocol_notebook_1.DidCloseNotebookDocumentNotification;
		}
	});
	const protocol_inlineCompletion_1 = require_protocol_inlineCompletion();
	Object.defineProperty(exports, "InlineCompletionRequest", {
		enumerable: true,
		get: function() {
			return protocol_inlineCompletion_1.InlineCompletionRequest;
		}
	});
	const protocol_textDocumentContent_1 = require_protocol_textDocumentContent();
	Object.defineProperty(exports, "TextDocumentContentRequest", {
		enumerable: true,
		get: function() {
			return protocol_textDocumentContent_1.TextDocumentContentRequest;
		}
	});
	Object.defineProperty(exports, "TextDocumentContentRefreshRequest", {
		enumerable: true,
		get: function() {
			return protocol_textDocumentContent_1.TextDocumentContentRefreshRequest;
		}
	});
	/**
	* The TextDocumentFilter namespace provides helper functions to work with
	* {@link TextDocumentFilter} literals.
	*
	* @since 3.17.0
	*/
	var TextDocumentFilter;
	(function(TextDocumentFilter) {
		function is(value) {
			const candidate = value;
			return Is.string(candidate) || Is.string(candidate.language) || Is.string(candidate.scheme) || GlobPattern.is(candidate.pattern);
		}
		TextDocumentFilter.is = is;
	})(TextDocumentFilter || (exports.TextDocumentFilter = TextDocumentFilter = {}));
	/**
	* The NotebookDocumentFilter namespace provides helper functions to work with
	* {@link NotebookDocumentFilter} literals.
	*
	* @since 3.17.0
	*/
	var NotebookDocumentFilter;
	(function(NotebookDocumentFilter) {
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && (Is.string(candidate.notebookType) || Is.string(candidate.scheme) || Is.string(candidate.pattern));
		}
		NotebookDocumentFilter.is = is;
	})(NotebookDocumentFilter || (exports.NotebookDocumentFilter = NotebookDocumentFilter = {}));
	/**
	* The NotebookCellTextDocumentFilter namespace provides helper functions to work with
	* {@link NotebookCellTextDocumentFilter} literals.
	*
	* @since 3.17.0
	*/
	var NotebookCellTextDocumentFilter;
	(function(NotebookCellTextDocumentFilter) {
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && (Is.string(candidate.notebook) || NotebookDocumentFilter.is(candidate.notebook)) && (candidate.language === void 0 || Is.string(candidate.language));
		}
		NotebookCellTextDocumentFilter.is = is;
	})(NotebookCellTextDocumentFilter || (exports.NotebookCellTextDocumentFilter = NotebookCellTextDocumentFilter = {}));
	/**
	* The DocumentSelector namespace provides helper functions to work with
	* {@link DocumentSelector}s.
	*/
	var DocumentSelector;
	(function(DocumentSelector) {
		function is(value) {
			if (!Array.isArray(value)) return false;
			for (const elem of value) if (!Is.string(elem) && !TextDocumentFilter.is(elem) && !NotebookCellTextDocumentFilter.is(elem)) return false;
			return true;
		}
		DocumentSelector.is = is;
	})(DocumentSelector || (exports.DocumentSelector = DocumentSelector = {}));
	/**
	* The `client/registerCapability` request is sent from the server to the client to register a new capability
	* handler on the client side.
	*/
	var RegistrationRequest;
	(function(RegistrationRequest) {
		RegistrationRequest.method = "client/registerCapability";
		RegistrationRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		RegistrationRequest.type = new messages_1.ProtocolRequestType(RegistrationRequest.method);
	})(RegistrationRequest || (exports.RegistrationRequest = RegistrationRequest = {}));
	/**
	* The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability
	* handler on the client side.
	*/
	var UnregistrationRequest;
	(function(UnregistrationRequest) {
		UnregistrationRequest.method = "client/unregisterCapability";
		UnregistrationRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		UnregistrationRequest.type = new messages_1.ProtocolRequestType(UnregistrationRequest.method);
	})(UnregistrationRequest || (exports.UnregistrationRequest = UnregistrationRequest = {}));
	var ResourceOperationKind;
	(function(ResourceOperationKind) {
		/**
		* Supports creating new files and folders.
		*/
		ResourceOperationKind.Create = "create";
		/**
		* Supports renaming existing files and folders.
		*/
		ResourceOperationKind.Rename = "rename";
		/**
		* Supports deleting existing files and folders.
		*/
		ResourceOperationKind.Delete = "delete";
	})(ResourceOperationKind || (exports.ResourceOperationKind = ResourceOperationKind = {}));
	var FailureHandlingKind;
	(function(FailureHandlingKind) {
		/**
		* Applying the workspace change is simply aborted if one of the changes provided
		* fails. All operations executed before the failing operation stay executed.
		*/
		FailureHandlingKind.Abort = "abort";
		/**
		* All operations are executed transactional. That means they either all
		* succeed or no changes at all are applied to the workspace.
		*/
		FailureHandlingKind.Transactional = "transactional";
		/**
		* If the workspace edit contains only textual file changes they are executed transactional.
		* If resource changes (create, rename or delete file) are part of the change the failure
		* handling strategy is abort.
		*/
		FailureHandlingKind.TextOnlyTransactional = "textOnlyTransactional";
		/**
		* The client tries to undo the operations already executed. But there is no
		* guarantee that this is succeeding.
		*/
		FailureHandlingKind.Undo = "undo";
	})(FailureHandlingKind || (exports.FailureHandlingKind = FailureHandlingKind = {}));
	/**
	* Regular Expression Engines
	*
	* @since 3.18.0
	*/
	var RegularExpressionEngineKind;
	(function(RegularExpressionEngineKind) {
		RegularExpressionEngineKind.ES2020 = "ES2020";
	})(RegularExpressionEngineKind || (exports.RegularExpressionEngineKind = RegularExpressionEngineKind = {}));
	/**
	* A set of predefined position encoding kinds.
	*
	* @since 3.17.0
	*/
	var PositionEncodingKind;
	(function(PositionEncodingKind) {
		/**
		* Character offsets count UTF-8 code units (e.g. bytes).
		*/
		PositionEncodingKind.UTF8 = "utf-8";
		/**
		* Character offsets count UTF-16 code units.
		*
		* This is the default and must always be supported
		* by servers
		*/
		PositionEncodingKind.UTF16 = "utf-16";
		/**
		* Character offsets count UTF-32 code units.
		*
		* Implementation note: these are the same as Unicode codepoints,
		* so this `PositionEncodingKind` may also be used for an
		* encoding-agnostic representation of character offsets.
		*/
		PositionEncodingKind.UTF32 = "utf-32";
	})(PositionEncodingKind || (exports.PositionEncodingKind = PositionEncodingKind = {}));
	/**
	* The StaticRegistrationOptions namespace provides helper functions to work with
	* {@link StaticRegistrationOptions} literals.
	*/
	var StaticRegistrationOptions;
	(function(StaticRegistrationOptions) {
		function hasId(value) {
			const candidate = value;
			return candidate && Is.string(candidate.id) && candidate.id.length > 0;
		}
		StaticRegistrationOptions.hasId = hasId;
	})(StaticRegistrationOptions || (exports.StaticRegistrationOptions = StaticRegistrationOptions = {}));
	/**
	* The TextDocumentRegistrationOptions namespace provides helper functions to work with
	* {@link TextDocumentRegistrationOptions} literals.
	*/
	var TextDocumentRegistrationOptions;
	(function(TextDocumentRegistrationOptions) {
		function is(value) {
			const candidate = value;
			return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
		}
		TextDocumentRegistrationOptions.is = is;
	})(TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = TextDocumentRegistrationOptions = {}));
	/**
	* The WorkDoneProgressOptions namespace provides helper functions to work with
	* {@link WorkDoneProgressOptions} literals.
	*/
	var WorkDoneProgressOptions;
	(function(WorkDoneProgressOptions) {
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && (candidate.workDoneProgress === void 0 || Is.boolean(candidate.workDoneProgress));
		}
		WorkDoneProgressOptions.is = is;
		function hasWorkDoneProgress(value) {
			const candidate = value;
			return candidate && Is.boolean(candidate.workDoneProgress);
		}
		WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;
	})(WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = WorkDoneProgressOptions = {}));
	/**
	* The initialize request is sent from the client to the server.
	* It is sent once as the request after starting up the server.
	* The requests parameter is of type {@link InitializeParams}
	* the response if of type {@link InitializeResult} of a Thenable that
	* resolves to such.
	*/
	var InitializeRequest;
	(function(InitializeRequest) {
		InitializeRequest.method = "initialize";
		InitializeRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		InitializeRequest.type = new messages_1.ProtocolRequestType(InitializeRequest.method);
	})(InitializeRequest || (exports.InitializeRequest = InitializeRequest = {}));
	/**
	* Known error codes for an `InitializeErrorCodes`;
	*/
	var InitializeErrorCodes;
	(function(InitializeErrorCodes) {
		/**
		* If the protocol version provided by the client can't be handled by the server.
		*
		* @deprecated This initialize error got replaced by client capabilities. There is
		* no version handshake in version 3.0x
		*/
		InitializeErrorCodes.unknownProtocolVersion = 1;
	})(InitializeErrorCodes || (exports.InitializeErrorCodes = InitializeErrorCodes = {}));
	/**
	* The initialized notification is sent from the client to the
	* server after the client is fully initialized and the server
	* is allowed to send requests from the server to the client.
	*/
	var InitializedNotification;
	(function(InitializedNotification) {
		InitializedNotification.method = "initialized";
		InitializedNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		InitializedNotification.type = new messages_1.ProtocolNotificationType(InitializedNotification.method);
	})(InitializedNotification || (exports.InitializedNotification = InitializedNotification = {}));
	/**
	* A shutdown request is sent from the client to the server.
	* It is sent once when the client decides to shutdown the
	* server. The only notification that is sent after a shutdown request
	* is the exit event.
	*/
	var ShutdownRequest;
	(function(ShutdownRequest) {
		ShutdownRequest.method = "shutdown";
		ShutdownRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		ShutdownRequest.type = new messages_1.ProtocolRequestType0(ShutdownRequest.method);
	})(ShutdownRequest || (exports.ShutdownRequest = ShutdownRequest = {}));
	/**
	* The exit event is sent from the client to the server to
	* ask the server to exit its process.
	*/
	var ExitNotification;
	(function(ExitNotification) {
		ExitNotification.method = "exit";
		ExitNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		ExitNotification.type = new messages_1.ProtocolNotificationType0(ExitNotification.method);
	})(ExitNotification || (exports.ExitNotification = ExitNotification = {}));
	/**
	* The configuration change notification is sent from the client to the server
	* when the client's configuration has changed. The notification contains
	* the changed configuration as defined by the language client.
	*/
	var DidChangeConfigurationNotification;
	(function(DidChangeConfigurationNotification) {
		DidChangeConfigurationNotification.method = "workspace/didChangeConfiguration";
		DidChangeConfigurationNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType(DidChangeConfigurationNotification.method);
		DidChangeConfigurationNotification.capabilities = messages_1.CM.create("workspace.didChangeConfiguration", void 0);
	})(DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = DidChangeConfigurationNotification = {}));
	/**
	* The message type
	*/
	var MessageType;
	(function(MessageType) {
		/**
		* An error message.
		*/
		MessageType.Error = 1;
		/**
		* A warning message.
		*/
		MessageType.Warning = 2;
		/**
		* An information message.
		*/
		MessageType.Info = 3;
		/**
		* A log message.
		*/
		MessageType.Log = 4;
		/**
		* A debug message.
		*
		* @since 3.18.0
		*/
		MessageType.Debug = 5;
	})(MessageType || (exports.MessageType = MessageType = {}));
	/**
	* The show message notification is sent from a server to a client to ask
	* the client to display a particular message in the user interface.
	*/
	var ShowMessageNotification;
	(function(ShowMessageNotification) {
		ShowMessageNotification.method = "window/showMessage";
		ShowMessageNotification.messageDirection = messages_1.MessageDirection.serverToClient;
		ShowMessageNotification.type = new messages_1.ProtocolNotificationType(ShowMessageNotification.method);
		ShowMessageNotification.capabilities = messages_1.CM.create("window.showMessage", void 0);
	})(ShowMessageNotification || (exports.ShowMessageNotification = ShowMessageNotification = {}));
	/**
	* The show message request is sent from the server to the client to show a message
	* and a set of options actions to the user.
	*/
	var ShowMessageRequest;
	(function(ShowMessageRequest) {
		ShowMessageRequest.method = "window/showMessageRequest";
		ShowMessageRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		ShowMessageRequest.type = new messages_1.ProtocolRequestType(ShowMessageRequest.method);
		ShowMessageRequest.capabilities = messages_1.CM.create("window.showMessage", void 0);
	})(ShowMessageRequest || (exports.ShowMessageRequest = ShowMessageRequest = {}));
	/**
	* The log message notification is sent from the server to the client to ask
	* the client to log a particular message.
	*/
	var LogMessageNotification;
	(function(LogMessageNotification) {
		LogMessageNotification.method = "window/logMessage";
		LogMessageNotification.messageDirection = messages_1.MessageDirection.serverToClient;
		LogMessageNotification.type = new messages_1.ProtocolNotificationType(LogMessageNotification.method);
	})(LogMessageNotification || (exports.LogMessageNotification = LogMessageNotification = {}));
	/**
	* The telemetry event notification is sent from the server to the client to ask
	* the client to log telemetry data.
	*/
	var TelemetryEventNotification;
	(function(TelemetryEventNotification) {
		TelemetryEventNotification.method = "telemetry/event";
		TelemetryEventNotification.messageDirection = messages_1.MessageDirection.serverToClient;
		TelemetryEventNotification.type = new messages_1.ProtocolNotificationType(TelemetryEventNotification.method);
	})(TelemetryEventNotification || (exports.TelemetryEventNotification = TelemetryEventNotification = {}));
	/**
	* Defines how the host (editor) should sync
	* document changes to the language server.
	*/
	var TextDocumentSyncKind;
	(function(TextDocumentSyncKind) {
		/**
		* Documents should not be synced at all.
		*/
		TextDocumentSyncKind.None = 0;
		/**
		* Documents are synced by always sending the full content
		* of the document.
		*/
		TextDocumentSyncKind.Full = 1;
		/**
		* Documents are synced by sending the full content on open.
		* After that only incremental updates to the document are
		* send.
		*/
		TextDocumentSyncKind.Incremental = 2;
	})(TextDocumentSyncKind || (exports.TextDocumentSyncKind = TextDocumentSyncKind = {}));
	/**
	* The document open notification is sent from the client to the server to signal
	* newly opened text documents. The document's truth is now managed by the client
	* and the server must not try to read the document's truth using the document's
	* uri. Open in this sense means it is managed by the client. It doesn't necessarily
	* mean that its content is presented in an editor. An open notification must not
	* be sent more than once without a corresponding close notification send before.
	* This means open and close notification must be balanced and the max open count
	* is one.
	*/
	var DidOpenTextDocumentNotification;
	(function(DidOpenTextDocumentNotification) {
		DidOpenTextDocumentNotification.method = "textDocument/didOpen";
		DidOpenTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);
		DidOpenTextDocumentNotification.capabilities = messages_1.CM.create("textDocument.synchronization", "textDocumentSync.openClose");
	})(DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = DidOpenTextDocumentNotification = {}));
	var TextDocumentContentChangeEvent;
	(function(TextDocumentContentChangeEvent) {
		/**
		* Checks whether the information describes a delta event.
		*/
		function isIncremental(event) {
			const candidate = event;
			return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range !== void 0 && (candidate.rangeLength === void 0 || typeof candidate.rangeLength === "number");
		}
		TextDocumentContentChangeEvent.isIncremental = isIncremental;
		/**
		* Checks whether the information describes a full replacement event.
		*/
		function isFull(event) {
			const candidate = event;
			return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range === void 0 && candidate.rangeLength === void 0;
		}
		TextDocumentContentChangeEvent.isFull = isFull;
	})(TextDocumentContentChangeEvent || (exports.TextDocumentContentChangeEvent = TextDocumentContentChangeEvent = {}));
	/**
	* The document change notification is sent from the client to the server to signal
	* changes to a text document.
	*/
	var DidChangeTextDocumentNotification;
	(function(DidChangeTextDocumentNotification) {
		DidChangeTextDocumentNotification.method = "textDocument/didChange";
		DidChangeTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);
		DidChangeTextDocumentNotification.capabilities = messages_1.CM.create("textDocument.synchronization", "textDocumentSync");
	})(DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = DidChangeTextDocumentNotification = {}));
	/**
	* The document close notification is sent from the client to the server when
	* the document got closed in the client. The document's truth now exists where
	* the document's uri points to (e.g. if the document's uri is a file uri the
	* truth now exists on disk). As with the open notification the close notification
	* is about managing the document's content. Receiving a close notification
	* doesn't mean that the document was open in an editor before. A close
	* notification requires a previous open notification to be sent.
	*/
	var DidCloseTextDocumentNotification;
	(function(DidCloseTextDocumentNotification) {
		DidCloseTextDocumentNotification.method = "textDocument/didClose";
		DidCloseTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);
		DidCloseTextDocumentNotification.capabilities = messages_1.CM.create("textDocument.synchronization", "textDocumentSync.openClose");
	})(DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = DidCloseTextDocumentNotification = {}));
	/**
	* The document save notification is sent from the client to the server when
	* the document got saved in the client.
	*/
	var DidSaveTextDocumentNotification;
	(function(DidSaveTextDocumentNotification) {
		DidSaveTextDocumentNotification.method = "textDocument/didSave";
		DidSaveTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);
		DidSaveTextDocumentNotification.capabilities = messages_1.CM.create("textDocument.synchronization.didSave", "textDocumentSync.save");
	})(DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = DidSaveTextDocumentNotification = {}));
	/**
	* Represents reasons why a text document is saved.
	*/
	var TextDocumentSaveReason;
	(function(TextDocumentSaveReason) {
		/**
		* Manually triggered, e.g. by the user pressing save, by starting debugging,
		* or by an API call.
		*/
		TextDocumentSaveReason.Manual = 1;
		/**
		* Automatic after a delay.
		*/
		TextDocumentSaveReason.AfterDelay = 2;
		/**
		* When the editor lost focus.
		*/
		TextDocumentSaveReason.FocusOut = 3;
	})(TextDocumentSaveReason || (exports.TextDocumentSaveReason = TextDocumentSaveReason = {}));
	/**
	* A document will save notification is sent from the client to the server before
	* the document is actually saved.
	*/
	var WillSaveTextDocumentNotification;
	(function(WillSaveTextDocumentNotification) {
		WillSaveTextDocumentNotification.method = "textDocument/willSave";
		WillSaveTextDocumentNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);
		WillSaveTextDocumentNotification.capabilities = messages_1.CM.create("textDocument.synchronization.willSave", "textDocumentSync.willSave");
	})(WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = WillSaveTextDocumentNotification = {}));
	/**
	* A document will save request is sent from the client to the server before
	* the document is actually saved. The request can return an array of TextEdits
	* which will be applied to the text document before it is saved. Please note that
	* clients might drop results if computing the text edits took too long or if a
	* server constantly fails on this request. This is done to keep the save fast and
	* reliable.
	*/
	var WillSaveTextDocumentWaitUntilRequest;
	(function(WillSaveTextDocumentWaitUntilRequest) {
		WillSaveTextDocumentWaitUntilRequest.method = "textDocument/willSaveWaitUntil";
		WillSaveTextDocumentWaitUntilRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);
		WillSaveTextDocumentWaitUntilRequest.capabilities = messages_1.CM.create("textDocument.synchronization.willSaveWaitUntil", "textDocumentSync.willSaveWaitUntil");
	})(WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = WillSaveTextDocumentWaitUntilRequest = {}));
	/**
	* The watched files notification is sent from the client to the server when
	* the client detects changes to file watched by the language client.
	*/
	var DidChangeWatchedFilesNotification;
	(function(DidChangeWatchedFilesNotification) {
		DidChangeWatchedFilesNotification.method = "workspace/didChangeWatchedFiles";
		DidChangeWatchedFilesNotification.messageDirection = messages_1.MessageDirection.clientToServer;
		DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType(DidChangeWatchedFilesNotification.method);
		DidChangeWatchedFilesNotification.capabilities = messages_1.CM.create("workspace.didChangeWatchedFiles", void 0);
	})(DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = DidChangeWatchedFilesNotification = {}));
	/**
	* The file event type
	*/
	var FileChangeType;
	(function(FileChangeType) {
		/**
		* The file got created.
		*/
		FileChangeType.Created = 1;
		/**
		* The file got changed.
		*/
		FileChangeType.Changed = 2;
		/**
		* The file got deleted.
		*/
		FileChangeType.Deleted = 3;
	})(FileChangeType || (exports.FileChangeType = FileChangeType = {}));
	var RelativePattern;
	(function(RelativePattern) {
		function is(value) {
			const candidate = value;
			return Is.objectLiteral(candidate) && (vscode_languageserver_types_1.URI.is(candidate.baseUri) || vscode_languageserver_types_1.WorkspaceFolder.is(candidate.baseUri)) && Is.string(candidate.pattern);
		}
		RelativePattern.is = is;
	})(RelativePattern || (exports.RelativePattern = RelativePattern = {}));
	var GlobPattern;
	(function(GlobPattern) {
		function is(value) {
			const candidate = value;
			return Is.string(candidate) || RelativePattern.is(candidate);
		}
		GlobPattern.is = is;
	})(GlobPattern || (exports.GlobPattern = GlobPattern = {}));
	var WatchKind;
	(function(WatchKind) {
		/**
		* Interested in create events.
		*/
		WatchKind.Create = 1;
		/**
		* Interested in change events
		*/
		WatchKind.Change = 2;
		/**
		* Interested in delete events
		*/
		WatchKind.Delete = 4;
	})(WatchKind || (exports.WatchKind = WatchKind = {}));
	/**
	* Diagnostics notification are sent from the server to the client to signal
	* results of validation runs.
	*/
	var PublishDiagnosticsNotification;
	(function(PublishDiagnosticsNotification) {
		PublishDiagnosticsNotification.method = "textDocument/publishDiagnostics";
		PublishDiagnosticsNotification.messageDirection = messages_1.MessageDirection.serverToClient;
		PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType(PublishDiagnosticsNotification.method);
		PublishDiagnosticsNotification.capabilities = messages_1.CM.create("textDocument.publishDiagnostics", void 0);
	})(PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = PublishDiagnosticsNotification = {}));
	/**
	* How a completion was triggered
	*/
	var CompletionTriggerKind;
	(function(CompletionTriggerKind) {
		/**
		* Completion was triggered by typing an identifier (24x7 code
		* complete), manual invocation (e.g Ctrl+Space) or via API.
		*/
		CompletionTriggerKind.Invoked = 1;
		/**
		* Completion was triggered by a trigger character specified by
		* the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
		*/
		CompletionTriggerKind.TriggerCharacter = 2;
		/**
		* Completion was re-triggered as current completion list is incomplete
		*/
		CompletionTriggerKind.TriggerForIncompleteCompletions = 3;
	})(CompletionTriggerKind || (exports.CompletionTriggerKind = CompletionTriggerKind = {}));
	/**
	* Request to request completion at a given text document position. The request's
	* parameter is of type {@link TextDocumentPosition} the response
	* is of type {@link CompletionItem CompletionItem[]} or {@link CompletionList}
	* or a Thenable that resolves to such.
	*
	* The request can delay the computation of the {@link CompletionItem.detail `detail`}
	* and {@link CompletionItem.documentation `documentation`} properties to the `completionItem/resolve`
	* request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
	* `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
	*/
	var CompletionRequest;
	(function(CompletionRequest) {
		CompletionRequest.method = "textDocument/completion";
		CompletionRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);
		CompletionRequest.capabilities = messages_1.CM.create("textDocument.completion", "completionProvider");
	})(CompletionRequest || (exports.CompletionRequest = CompletionRequest = {}));
	/**
	* Request to resolve additional information for a given completion item.The request's
	* parameter is of type {@link CompletionItem} the response
	* is of type {@link CompletionItem} or a Thenable that resolves to such.
	*/
	var CompletionResolveRequest;
	(function(CompletionResolveRequest) {
		CompletionResolveRequest.method = "completionItem/resolve";
		CompletionResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);
		CompletionResolveRequest.capabilities = messages_1.CM.create("textDocument.completion.completionItem.resolveSupport", "completionProvider.resolveProvider");
	})(CompletionResolveRequest || (exports.CompletionResolveRequest = CompletionResolveRequest = {}));
	/**
	* Request to request hover information at a given text document position. The request's
	* parameter is of type {@link TextDocumentPosition} the response is of
	* type {@link Hover} or a Thenable that resolves to such.
	*/
	var HoverRequest;
	(function(HoverRequest) {
		HoverRequest.method = "textDocument/hover";
		HoverRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);
		HoverRequest.capabilities = messages_1.CM.create("textDocument.hover", "hoverProvider");
	})(HoverRequest || (exports.HoverRequest = HoverRequest = {}));
	/**
	* How a signature help was triggered.
	*
	* @since 3.15.0
	*/
	var SignatureHelpTriggerKind;
	(function(SignatureHelpTriggerKind) {
		/**
		* Signature help was invoked manually by the user or by a command.
		*/
		SignatureHelpTriggerKind.Invoked = 1;
		/**
		* Signature help was triggered by a trigger character.
		*/
		SignatureHelpTriggerKind.TriggerCharacter = 2;
		/**
		* Signature help was triggered by the cursor moving or by the document content changing.
		*/
		SignatureHelpTriggerKind.ContentChange = 3;
	})(SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = SignatureHelpTriggerKind = {}));
	var SignatureHelpRequest;
	(function(SignatureHelpRequest) {
		SignatureHelpRequest.method = "textDocument/signatureHelp";
		SignatureHelpRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);
		SignatureHelpRequest.capabilities = messages_1.CM.create("textDocument.signatureHelp", "signatureHelpProvider");
	})(SignatureHelpRequest || (exports.SignatureHelpRequest = SignatureHelpRequest = {}));
	/**
	* A request to resolve the definition location of a symbol at a given text
	* document position. The request's parameter is of type {@link TextDocumentPosition}
	* the response is of either type {@link Definition} or a typed array of
	* {@link DefinitionLink} or a Thenable that resolves to such.
	*/
	var DefinitionRequest;
	(function(DefinitionRequest) {
		DefinitionRequest.method = "textDocument/definition";
		DefinitionRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);
		DefinitionRequest.capabilities = messages_1.CM.create("textDocument.definition", "definitionProvider");
	})(DefinitionRequest || (exports.DefinitionRequest = DefinitionRequest = {}));
	/**
	* A request to resolve project-wide references for the symbol denoted
	* by the given text document position. The request's parameter is of
	* type {@link ReferenceParams} the response is of type
	* {@link Location Location[]} or a Thenable that resolves to such.
	*/
	var ReferencesRequest;
	(function(ReferencesRequest) {
		ReferencesRequest.method = "textDocument/references";
		ReferencesRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);
		ReferencesRequest.capabilities = messages_1.CM.create("textDocument.references", "referencesProvider");
	})(ReferencesRequest || (exports.ReferencesRequest = ReferencesRequest = {}));
	/**
	* Request to resolve a {@link DocumentHighlight} for a given
	* text document position. The request's parameter is of type {@link TextDocumentPosition}
	* the request response is an array of type {@link DocumentHighlight}
	* or a Thenable that resolves to such.
	*/
	var DocumentHighlightRequest;
	(function(DocumentHighlightRequest) {
		DocumentHighlightRequest.method = "textDocument/documentHighlight";
		DocumentHighlightRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);
		DocumentHighlightRequest.capabilities = messages_1.CM.create("textDocument.documentHighlight", "documentHighlightProvider");
	})(DocumentHighlightRequest || (exports.DocumentHighlightRequest = DocumentHighlightRequest = {}));
	/**
	* A request to list all symbols found in a given text document. The request's
	* parameter is of type {@link TextDocumentIdentifier} the
	* response is of type {@link SymbolInformation SymbolInformation[]} or a Thenable
	* that resolves to such.
	*/
	var DocumentSymbolRequest;
	(function(DocumentSymbolRequest) {
		DocumentSymbolRequest.method = "textDocument/documentSymbol";
		DocumentSymbolRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);
		DocumentSymbolRequest.capabilities = messages_1.CM.create("textDocument.documentSymbol", "documentSymbolProvider");
	})(DocumentSymbolRequest || (exports.DocumentSymbolRequest = DocumentSymbolRequest = {}));
	/**
	* A request to provide commands for the given text document and range.
	*/
	var CodeActionRequest;
	(function(CodeActionRequest) {
		CodeActionRequest.method = "textDocument/codeAction";
		CodeActionRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);
		CodeActionRequest.capabilities = messages_1.CM.create("textDocument.codeAction", "codeActionProvider");
	})(CodeActionRequest || (exports.CodeActionRequest = CodeActionRequest = {}));
	/**
	* Request to resolve additional information for a given code action.The request's
	* parameter is of type {@link CodeAction} the response
	* is of type {@link CodeAction} or a Thenable that resolves to such.
	*/
	var CodeActionResolveRequest;
	(function(CodeActionResolveRequest) {
		CodeActionResolveRequest.method = "codeAction/resolve";
		CodeActionResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		CodeActionResolveRequest.type = new messages_1.ProtocolRequestType(CodeActionResolveRequest.method);
		CodeActionResolveRequest.capabilities = messages_1.CM.create("textDocument.codeAction.resolveSupport", "codeActionProvider.resolveProvider");
	})(CodeActionResolveRequest || (exports.CodeActionResolveRequest = CodeActionResolveRequest = {}));
	/**
	* A request to list project-wide symbols matching the query string given
	* by the {@link WorkspaceSymbolParams}. The response is
	* of type {@link SymbolInformation SymbolInformation[]} or a Thenable that
	* resolves to such.
	*
	* @since 3.17.0 - support for WorkspaceSymbol in the returned data. Clients
	*  need to advertise support for WorkspaceSymbols via the client capability
	*  `workspace.symbol.resolveSupport`.
	*
	*/
	var WorkspaceSymbolRequest;
	(function(WorkspaceSymbolRequest) {
		WorkspaceSymbolRequest.method = "workspace/symbol";
		WorkspaceSymbolRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);
		WorkspaceSymbolRequest.capabilities = messages_1.CM.create("workspace.symbol", "workspaceSymbolProvider");
	})(WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = WorkspaceSymbolRequest = {}));
	/**
	* A request to resolve the range inside the workspace
	* symbol's location.
	*
	* @since 3.17.0
	*/
	var WorkspaceSymbolResolveRequest;
	(function(WorkspaceSymbolResolveRequest) {
		WorkspaceSymbolResolveRequest.method = "workspaceSymbol/resolve";
		WorkspaceSymbolResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		WorkspaceSymbolResolveRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolResolveRequest.method);
		WorkspaceSymbolResolveRequest.capabilities = messages_1.CM.create("workspace.symbol.resolveSupport", "workspaceSymbolProvider.resolveProvider");
	})(WorkspaceSymbolResolveRequest || (exports.WorkspaceSymbolResolveRequest = WorkspaceSymbolResolveRequest = {}));
	/**
	* A request to provide code lens for the given text document.
	*/
	var CodeLensRequest;
	(function(CodeLensRequest) {
		CodeLensRequest.method = "textDocument/codeLens";
		CodeLensRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		CodeLensRequest.type = new messages_1.ProtocolRequestType(CodeLensRequest.method);
		CodeLensRequest.capabilities = messages_1.CM.create("textDocument.codeLens", "codeLensProvider");
	})(CodeLensRequest || (exports.CodeLensRequest = CodeLensRequest = {}));
	/**
	* A request to resolve a command for a given code lens.
	*/
	var CodeLensResolveRequest;
	(function(CodeLensResolveRequest) {
		CodeLensResolveRequest.method = "codeLens/resolve";
		CodeLensResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		CodeLensResolveRequest.type = new messages_1.ProtocolRequestType(CodeLensResolveRequest.method);
		CodeLensResolveRequest.capabilities = messages_1.CM.create("textDocument.codeLens.resolveSupport", "codeLensProvider.resolveProvider");
	})(CodeLensResolveRequest || (exports.CodeLensResolveRequest = CodeLensResolveRequest = {}));
	/**
	* A request to refresh all code actions
	*
	* @since 3.16.0
	*/
	var CodeLensRefreshRequest;
	(function(CodeLensRefreshRequest) {
		CodeLensRefreshRequest.method = `workspace/codeLens/refresh`;
		CodeLensRefreshRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		CodeLensRefreshRequest.type = new messages_1.ProtocolRequestType0(CodeLensRefreshRequest.method);
		CodeLensRefreshRequest.capabilities = messages_1.CM.create("workspace.codeLens", void 0);
	})(CodeLensRefreshRequest || (exports.CodeLensRefreshRequest = CodeLensRefreshRequest = {}));
	/**
	* A request to provide document links
	*/
	var DocumentLinkRequest;
	(function(DocumentLinkRequest) {
		DocumentLinkRequest.method = "textDocument/documentLink";
		DocumentLinkRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);
		DocumentLinkRequest.capabilities = messages_1.CM.create("textDocument.documentLink", "documentLinkProvider");
	})(DocumentLinkRequest || (exports.DocumentLinkRequest = DocumentLinkRequest = {}));
	/**
	* Request to resolve additional information for a given document link. The request's
	* parameter is of type {@link DocumentLink} the response
	* is of type {@link DocumentLink} or a Thenable that resolves to such.
	*/
	var DocumentLinkResolveRequest;
	(function(DocumentLinkResolveRequest) {
		DocumentLinkResolveRequest.method = "documentLink/resolve";
		DocumentLinkResolveRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType(DocumentLinkResolveRequest.method);
		DocumentLinkResolveRequest.capabilities = messages_1.CM.create("textDocument.documentLink", "documentLinkProvider.resolveProvider");
	})(DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = DocumentLinkResolveRequest = {}));
	/**
	* A request to format a whole document.
	*/
	var DocumentFormattingRequest;
	(function(DocumentFormattingRequest) {
		DocumentFormattingRequest.method = "textDocument/formatting";
		DocumentFormattingRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);
		DocumentFormattingRequest.capabilities = messages_1.CM.create("textDocument.formatting", "documentFormattingProvider");
	})(DocumentFormattingRequest || (exports.DocumentFormattingRequest = DocumentFormattingRequest = {}));
	/**
	* A request to format a range in a document.
	*/
	var DocumentRangeFormattingRequest;
	(function(DocumentRangeFormattingRequest) {
		DocumentRangeFormattingRequest.method = "textDocument/rangeFormatting";
		DocumentRangeFormattingRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);
		DocumentRangeFormattingRequest.capabilities = messages_1.CM.create("textDocument.rangeFormatting", "documentRangeFormattingProvider");
	})(DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = DocumentRangeFormattingRequest = {}));
	/**
	* A request to format ranges in a document.
	*
	* @since 3.18.0
	*/
	var DocumentRangesFormattingRequest;
	(function(DocumentRangesFormattingRequest) {
		DocumentRangesFormattingRequest.method = "textDocument/rangesFormatting";
		DocumentRangesFormattingRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentRangesFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangesFormattingRequest.method);
		DocumentRangesFormattingRequest.capabilities = messages_1.CM.create("textDocument.rangeFormatting.rangesSupport", "documentRangeFormattingProvider.rangesSupport");
	})(DocumentRangesFormattingRequest || (exports.DocumentRangesFormattingRequest = DocumentRangesFormattingRequest = {}));
	/**
	* A request to format a document on type.
	*/
	var DocumentOnTypeFormattingRequest;
	(function(DocumentOnTypeFormattingRequest) {
		DocumentOnTypeFormattingRequest.method = "textDocument/onTypeFormatting";
		DocumentOnTypeFormattingRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);
		DocumentOnTypeFormattingRequest.capabilities = messages_1.CM.create("textDocument.onTypeFormatting", "documentOnTypeFormattingProvider");
	})(DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = DocumentOnTypeFormattingRequest = {}));
	var PrepareSupportDefaultBehavior;
	(function(PrepareSupportDefaultBehavior) {
		/**
		* The client's default behavior is to select the identifier
		* according the to language's syntax rule.
		*/
		PrepareSupportDefaultBehavior.Identifier = 1;
	})(PrepareSupportDefaultBehavior || (exports.PrepareSupportDefaultBehavior = PrepareSupportDefaultBehavior = {}));
	/**
	* A request to rename a symbol.
	*/
	var RenameRequest;
	(function(RenameRequest) {
		RenameRequest.method = "textDocument/rename";
		RenameRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);
		RenameRequest.capabilities = messages_1.CM.create("textDocument.rename", "renameProvider");
	})(RenameRequest || (exports.RenameRequest = RenameRequest = {}));
	/**
	* A request to test and perform the setup necessary for a rename.
	*
	* @since 3.16 - support for default behavior
	*/
	var PrepareRenameRequest;
	(function(PrepareRenameRequest) {
		PrepareRenameRequest.method = "textDocument/prepareRename";
		PrepareRenameRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);
		PrepareRenameRequest.capabilities = messages_1.CM.create("textDocument.rename.prepareSupport", "renameProvider.prepareProvider");
	})(PrepareRenameRequest || (exports.PrepareRenameRequest = PrepareRenameRequest = {}));
	/**
	* A request send from the client to the server to execute a command. The request might return
	* a workspace edit which the client will apply to the workspace.
	*/
	var ExecuteCommandRequest;
	(function(ExecuteCommandRequest) {
		ExecuteCommandRequest.method = "workspace/executeCommand";
		ExecuteCommandRequest.messageDirection = messages_1.MessageDirection.clientToServer;
		ExecuteCommandRequest.type = new messages_1.ProtocolRequestType(ExecuteCommandRequest.method);
		ExecuteCommandRequest.capabilities = messages_1.CM.create("workspace.executeCommand", "executeCommandProvider");
	})(ExecuteCommandRequest || (exports.ExecuteCommandRequest = ExecuteCommandRequest = {}));
	/**
	* A request sent from the server to the client to modified certain resources.
	*/
	var ApplyWorkspaceEditRequest;
	(function(ApplyWorkspaceEditRequest) {
		ApplyWorkspaceEditRequest.method = "workspace/applyEdit";
		ApplyWorkspaceEditRequest.messageDirection = messages_1.MessageDirection.serverToClient;
		ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType("workspace/applyEdit");
		ApplyWorkspaceEditRequest.capabilities = messages_1.CM.create("workspace.applyEdit", void 0);
	})(ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = ApplyWorkspaceEditRequest = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/connection.js
var require_connection = /* @__PURE__ */ __commonJSMin(((exports) => {
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.createProtocolConnection = createProtocolConnection;
	const vscode_jsonrpc_1 = require_api$1();
	function createProtocolConnection(input, output, logger, options) {
		if (vscode_jsonrpc_1.ConnectionStrategy.is(options)) options = { connectionStrategy: options };
		return (0, vscode_jsonrpc_1.createMessageConnection)(input, output, logger, options);
	}
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/common/api.js
var require_api = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __exportStar = exports && exports.__exportStar || function(m, exports$3) {
		for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports$3, p)) __createBinding(exports$3, m, p);
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.LSPErrorCodes = exports.createProtocolConnection = void 0;
	__exportStar(require_api$1(), exports);
	__exportStar((init_main$2(), __toCommonJS(main_exports)), exports);
	__exportStar(require_messages(), exports);
	__exportStar(require_protocol(), exports);
	var connection_1 = require_connection();
	Object.defineProperty(exports, "createProtocolConnection", {
		enumerable: true,
		get: function() {
			return connection_1.createProtocolConnection;
		}
	});
	var LSPErrorCodes;
	(function(LSPErrorCodes) {
		/**
		* This is the start range of LSP reserved error codes.
		* It doesn't denote a real error code.
		*
		* @since 3.16.0
		*/
		LSPErrorCodes.lspReservedErrorRangeStart = -32899;
		/**
		* A request failed but it was syntactically correct, e.g the
		* method name was known and the parameters were valid. The error
		* message should contain human readable information about why
		* the request failed.
		*
		* @since 3.17.0
		*/
		LSPErrorCodes.RequestFailed = -32803;
		/**
		* The server cancelled the request. This error code should
		* only be used for requests that explicitly support being
		* server cancellable.
		*
		* @since 3.17.0
		*/
		LSPErrorCodes.ServerCancelled = -32802;
		/**
		* The server detected that the content of a document got
		* modified outside normal conditions. A server should
		* NOT send this error code if it detects a content change
		* in it unprocessed messages. The result even computed
		* on an older state might still be useful for the client.
		*
		* If a client decides that a result is not of any use anymore
		* the client should cancel the request.
		*/
		LSPErrorCodes.ContentModified = -32801;
		/**
		* The client has canceled a request and a server has detected
		* the cancel.
		*/
		LSPErrorCodes.RequestCancelled = -32800;
		/**
		* This is the end range of LSP reserved error codes.
		* It doesn't denote a real error code.
		*
		* @since 3.16.0
		*/
		LSPErrorCodes.lspReservedErrorRangeEnd = -32800;
	})(LSPErrorCodes || (exports.LSPErrorCodes = LSPErrorCodes = {}));
}));
//#endregion
//#region node_modules/vscode-languageserver-protocol/lib/node/main.js
var require_main = /* @__PURE__ */ __commonJSMin(((exports) => {
	var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		var desc = Object.getOwnPropertyDescriptor(m, k);
		if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {
			enumerable: true,
			get: function() {
				return m[k];
			}
		};
		Object.defineProperty(o, k2, desc);
	}) : (function(o, m, k, k2) {
		if (k2 === void 0) k2 = k;
		o[k2] = m[k];
	}));
	var __exportStar = exports && exports.__exportStar || function(m, exports$2) {
		for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports$2, p)) __createBinding(exports$2, m, p);
	};
	Object.defineProperty(exports, "__esModule", { value: true });
	exports.createProtocolConnection = createProtocolConnection;
	const node_1 = require_main$1();
	__exportStar(require_main$1(), exports);
	__exportStar(require_api(), exports);
	function createProtocolConnection(input, output, logger, options) {
		return (0, node_1.createMessageConnection)(input, output, logger, options);
	}
}));
//#endregion
//#region src/util/protocol.ts
var import_main$1;
var init_protocol = __esmMin((() => {
	import_main$1 = require_main();
}));
//#endregion
//#region src/util/array.ts
function toArray(item) {
	return Array.isArray(item) ? item : item == null ? [] : [item];
}
/**
* @returns false if the provided object is an array and not empty.
*/
function isFalsyOrEmpty(obj) {
	return !Array.isArray(obj) || obj.length === 0;
}
function compareValue(n, r) {
	if (n < r[0]) return 1;
	if (n > r[1]) return -1;
	return 0;
}
/**
* Check if n in sorted table
*/
function intable(n, table) {
	let low = 0;
	let high = table.length - 1;
	while (low <= high) {
		const mid = (low + high) / 2 | 0;
		const comp = compareValue(n, table[mid]);
		if (comp < 0) low = mid + 1;
		else if (comp > 0) high = mid - 1;
		else return true;
	}
	return false;
}
/**
* Performs a binary search algorithm over a sorted array.
* @param array The array being searched.
* @param key The value we search for.
* @param comparator A function that takes two array elements and returns zero
* if they are equal, a negative number if the first element precedes the
* second one in the sorting order, or a positive number if the second element
* precedes the first one.
* @return See {@link binarySearch2}
*/
function binarySearch(array, key, comparator) {
	return binarySearch2(array.length, (i) => comparator(array[i], key));
}
/**
* Performs a binary search algorithm over a sorted collection. Useful for cases
* when we need to perform a binary search over something that isn't actually an
* array, and converting data to an array would defeat the use of binary search
* in the first place.
* @param length The collection length.
* @param compareToKey A function that takes an index of an element in the
* collection and returns zero if the value at this index is equal to the
* search key, a negative number if the value precedes the search key in the
* sorting order, or a positive number if the search key precedes the value.
* @return A non-negative index of an element, if found. If not found, the
* result is -(n+1) (or ~n, using bitwise notation), where n is the index
* where the key should be inserted to maintain the sorting order.
*/
function binarySearch2(length, compareToKey) {
	let low = 0;
	let high = length - 1;
	while (low <= high) {
		const mid = (low + high) / 2 | 0;
		const comp = compareToKey(mid);
		if (comp < 0) low = mid + 1;
		else if (comp > 0) high = mid - 1;
		else return mid;
	}
	return -(low + 1);
}
function intersect(array, other) {
	for (let item of other) if (array.includes(item)) return true;
	return false;
}
function splitArray(array, fn) {
	let res = [[], []];
	for (let item of array) if (fn(item)) res[0].push(item);
	else res[1].push(item);
	return res;
}
function groupBy(array, fn) {
	let res = [[], []];
	array.forEach((v) => {
		if (fn(v)) res[0].push(v);
		else res[1].push(v);
	});
	return res;
}
/**
* Removes duplicates from the given array. The optional keyFn allows to specify
* how elements are checked for equalness by returning a unique string for each.
*/
function distinct(array, keyFn) {
	if (!keyFn) return array.filter((element, position) => array.indexOf(element) === position);
	const seen = Object.create(null);
	return array.filter((elem) => {
		const key = keyFn(elem);
		if (seen[key]) return false;
		seen[key] = true;
		return true;
	});
}
var init_array = __esmMin((() => {}));
//#endregion
//#region src/util/string.ts
function toErrorText(error) {
	return error instanceof Error ? error.message : error.toString();
}
function toInteger(text) {
	let n = parseInt(text, 10);
	return isNaN(n) ? void 0 : n;
}
function toText(text) {
	if (typeof text === "number") return text.toString();
	return text ?? "";
}
function toBase64(text) {
	return global.Buffer.from(text).toString("base64");
}
function isHighlightGroupCharCode(code) {
	if (intable(code, asciiTable)) return true;
	return code === 95 || code === 46 || code === 64;
}
/**
* A fast function (therefore imprecise) to check if code points are emojis.
* Generated using https://github.com/alexdima/unicode-utils/blob/main/emoji-test.js
*/
function isEmojiImprecise(x) {
	return x >= 127462 && x <= 127487 || x === 8986 || x === 8987 || x === 9200 || x === 9203 || x >= 9728 && x <= 10175 || x === 11088 || x === 11093 || x >= 127744 && x <= 128591 || x >= 128640 && x <= 128764 || x >= 128992 && x <= 129008 || x >= 129280 && x <= 129535 || x >= 129648 && x <= 129782;
}
function* iterateCharacter(input, character) {
	for (let i = 0; i < input.length; i++) if (input[i] == character) yield i;
}
function isHighSurrogate(codePoint) {
	return codePoint >= 55296 && codePoint <= 56319;
}
function isLowSurrogate(codePoint) {
	return codePoint >= 56320 && codePoint <= 57343;
}
/**
* Get byte length from string, from code unit start index.
*/
function byteLength(str, start = 0) {
	if (start === 0) return Buffer.byteLength(str, encoding);
	let len = 0;
	let unitIndex = 0;
	for (let codePoint of str) {
		let n = codePoint.codePointAt(0);
		if (unitIndex >= start) len += utf8_code2len(n);
		unitIndex += n >= UTF8_4BYTES_START ? 2 : 1;
	}
	return len;
}
/**
* utf16 code unit to byte index.
*/
function byteIndex(content, index) {
	let byteLength = 0;
	let codePoint;
	let prevCodePoint;
	let max = Math.min(index, content.length);
	for (let i = 0; i < max; i++) {
		codePoint = content.charCodeAt(i);
		if (isLowSurrogate(codePoint)) if (prevCodePoint && isHighSurrogate(prevCodePoint)) byteLength += 1;
		else byteLength += 3;
		else byteLength += utf8_code2len(codePoint);
		prevCodePoint = codePoint;
	}
	return byteLength;
}
function upperFirst(str) {
	return str?.length > 0 ? str[0].toUpperCase() + str.slice(1) : "";
}
function characterIndex(content, byteIndex) {
	if (byteIndex == 0) return 0;
	let characterIndex = 0;
	let total = 0;
	for (let codePoint of content) {
		let code = codePoint.codePointAt(0);
		if (code >= UTF8_4BYTES_START) {
			characterIndex += 2;
			total += 4;
		} else {
			characterIndex += 1;
			total += utf8_code2len(code);
		}
		if (total >= byteIndex) break;
	}
	return characterIndex;
}
function utf8_code2len(code) {
	if (code < UTF8_2BYTES_START) return 1;
	if (code < UTF8_3BYTES_START) return 2;
	if (code < UTF8_4BYTES_START) return 3;
	return 4;
}
/**
* No need to create Buffer
*/
function byteSlice(content, start, end) {
	let si = characterIndex(content, start);
	let ei = end === void 0 ? void 0 : characterIndex(content, end);
	return content.slice(si, ei);
}
function isAlphabet(code) {
	if (code >= 65 && code <= 90) return true;
	if (code >= 97 && code <= 122) return true;
	return false;
}
function contentToLines(content, eol) {
	if (eol && content.endsWith("\n")) return content.slice(0, -1).split("\n");
	return content.split("\n");
}
function hasUpperCase(str) {
	for (let i = 0, l = str.length; i < l; i++) {
		let code = str.charCodeAt(i);
		if (code >= 65 && code <= 90) return true;
	}
	return false;
}
function smartMatch(a, b) {
	if (a === b) return true;
	let c = b.charCodeAt(0);
	if (c >= 65 && c <= 90) {
		if (c + 32 === a.charCodeAt(0)) return true;
	}
	return false;
}
function smartcaseIndex(input, other) {
	if (input.length > other.length) return -1;
	if (input.length === 0) return 0;
	if (!hasUpperCase(input)) return other.toLowerCase().indexOf(input);
	let total = input.length;
	let checked = 0;
	for (let i = 0; i < other.length; i++) {
		let ch = other[i];
		if (smartMatch(input[checked], ch)) {
			checked++;
			if (checked === total) return i - checked + 1;
		} else if (checked > 0) {
			i = i - checked;
			checked = 0;
		}
	}
	return -1;
}
/**
* For faster convert sequence utf16 character index to byte index
*/
function bytes(text, max) {
	max = max ?? text.length;
	let lens = new Uint8Array(max);
	let ascii = true;
	let prevCodePoint;
	for (let i = 0; i < max; i++) {
		let code = text.charCodeAt(i);
		let len;
		if (isLowSurrogate(code)) if (prevCodePoint && isHighSurrogate(prevCodePoint)) len = 1;
		else len = 3;
		else len = utf8_code2len(code);
		if (ascii && len > 1) ascii = false;
		lens[i] = len;
		prevCodePoint = code;
	}
	return (characterIndex) => {
		if (characterIndex === 0) return 0;
		if (ascii) return Math.min(characterIndex, max);
		let res = 0;
		for (let i = 0; i < Math.min(characterIndex, max); i++) res += lens[i];
		return res;
	};
}
/**
* Get class of a Unicode character.
*/
function getUnicodeClass(char) {
	if (char == null || char.length === 0) return "other";
	const charCode = char.charCodeAt(0);
	if (charCode <= 127) {
		if (charCode === 0) return "other";
		if (/\s/.test(char)) return "space";
		if (/\w/.test(char)) return "word";
		return "punctuation";
	}
	for (const [start, end, category] of nonAsciiUnicodeClassRanges) if (start <= charCode && charCode <= end) return category;
	return "other";
}
var UTF8_2BYTES_START, UTF8_3BYTES_START, UTF8_4BYTES_START, encoding, asciiTable, nonAsciiUnicodeClassRanges;
var init_string$1 = __esmMin((() => {
	init_array();
	UTF8_2BYTES_START = 128;
	UTF8_3BYTES_START = 2048;
	UTF8_4BYTES_START = 65536;
	encoding = "utf8";
	asciiTable = [
		[48, 57],
		[65, 90],
		[97, 122]
	];
	nonAsciiUnicodeClassRanges = [
		[
			894,
			894,
			"punctuation"
		],
		[
			903,
			903,
			"punctuation"
		],
		[
			1370,
			1375,
			"punctuation"
		],
		[
			1417,
			1417,
			"punctuation"
		],
		[
			1470,
			1470,
			"punctuation"
		],
		[
			1472,
			1472,
			"punctuation"
		],
		[
			1475,
			1475,
			"punctuation"
		],
		[
			1523,
			1524,
			"punctuation"
		],
		[
			1548,
			1548,
			"punctuation"
		],
		[
			1563,
			1563,
			"punctuation"
		],
		[
			1567,
			1567,
			"punctuation"
		],
		[
			1642,
			1645,
			"punctuation"
		],
		[
			1748,
			1748,
			"punctuation"
		],
		[
			1792,
			1805,
			"punctuation"
		],
		[
			2404,
			2405,
			"punctuation"
		],
		[
			2416,
			2416,
			"punctuation"
		],
		[
			3572,
			3572,
			"punctuation"
		],
		[
			3663,
			3663,
			"punctuation"
		],
		[
			3674,
			3675,
			"punctuation"
		],
		[
			3844,
			3858,
			"punctuation"
		],
		[
			3898,
			3901,
			"punctuation"
		],
		[
			3973,
			3973,
			"punctuation"
		],
		[
			4170,
			4175,
			"punctuation"
		],
		[
			4347,
			4347,
			"punctuation"
		],
		[
			4961,
			4968,
			"punctuation"
		],
		[
			5741,
			5742,
			"punctuation"
		],
		[
			5760,
			5760,
			"space"
		],
		[
			5787,
			5788,
			"punctuation"
		],
		[
			5867,
			5869,
			"punctuation"
		],
		[
			5941,
			5942,
			"punctuation"
		],
		[
			6100,
			6108,
			"punctuation"
		],
		[
			6144,
			6154,
			"punctuation"
		],
		[
			8192,
			8203,
			"space"
		],
		[
			8204,
			8231,
			"punctuation"
		],
		[
			8232,
			8233,
			"space"
		],
		[
			8234,
			8238,
			"punctuation"
		],
		[
			8239,
			8239,
			"space"
		],
		[
			8240,
			8286,
			"punctuation"
		],
		[
			8287,
			8287,
			"space"
		],
		[
			8288,
			10239,
			"punctuation"
		],
		[
			8304,
			8319,
			"superscript"
		],
		[
			8320,
			8340,
			"subscript"
		],
		[
			8352,
			10239,
			"punctuation"
		],
		[
			10240,
			10495,
			"braille"
		],
		[
			10496,
			10648,
			"punctuation"
		],
		[
			10712,
			10715,
			"punctuation"
		],
		[
			10748,
			10749,
			"punctuation"
		],
		[
			11776,
			11903,
			"punctuation"
		],
		[
			12288,
			12288,
			"space"
		],
		[
			12289,
			12320,
			"punctuation"
		],
		[
			12336,
			12336,
			"punctuation"
		],
		[
			12349,
			12349,
			"punctuation"
		],
		[
			12352,
			12447,
			"hiragana"
		],
		[
			12448,
			12543,
			"katakana"
		],
		[
			13056,
			40959,
			"cjkideograph"
		],
		[
			44032,
			55203,
			"hangulsyllable"
		],
		[
			63744,
			64255,
			"cjkideograph"
		],
		[
			64830,
			64831,
			"punctuation"
		],
		[
			65072,
			65131,
			"punctuation"
		],
		[
			65280,
			65295,
			"punctuation"
		],
		[
			65306,
			65312,
			"punctuation"
		],
		[
			65339,
			65344,
			"punctuation"
		],
		[
			65371,
			65381,
			"punctuation"
		],
		[
			118784,
			119375,
			"other"
		],
		[
			119808,
			120831,
			"other"
		],
		[
			126976,
			127743,
			"other"
		],
		[
			127744,
			129535,
			"other"
		],
		[
			131072,
			173791,
			"cjkideograph"
		],
		[
			173824,
			177983,
			"cjkideograph"
		],
		[
			177984,
			178207,
			"cjkideograph"
		],
		[
			194560,
			195103,
			"cjkideograph"
		]
	];
}));
//#endregion
//#region src/events.ts
var logger$52, debounceTime$11, Events, events_default;
var init_events = __esmMin((() => {
	init_logger$2();
	init_util$7();
	init_errors();
	init_is();
	init_object();
	init_protocol();
	init_string$1();
	logger$52 = createLogger$1("events");
	debounceTime$11 = getConditionValue(100, 10);
	Events = class {
		handlers = /* @__PURE__ */ new Map();
		_cursor;
		_bufnr = 1;
		timeoutMap = /* @__PURE__ */ new Map();
		_recentInserts = [];
		_lastChange = 0;
		_insertMode = false;
		_pumAlignTop = false;
		_pumVisible = false;
		_completing = false;
		_requesting = false;
		_ready = false;
		_mode = "n";
		_pumInserted = false;
		timeout = 1e3;
		set requesting(val) {
			this._requesting = val;
		}
		get requesting() {
			return this._requesting;
		}
		get ready() {
			return this._ready;
		}
		get mode() {
			return this._mode;
		}
		get pumInserted() {
			return this._pumInserted;
		}
		fireVisibleEvent(ev) {
			let { winid } = ev;
			let timer = this.timeoutMap.get(winid);
			if (timer) clearTimeout(timer);
			timer = setTimeout(() => {
				this.fire("WindowVisible", [ev]).catch(onUnexpectedError);
			}, debounceTime$11);
			this.timeoutMap.set(winid, timer);
		}
		clearVisibleTimer(winid) {
			let timer = this.timeoutMap.get(winid);
			if (timer) {
				this.timeoutMap.delete(winid);
				clearTimeout(timer);
			}
		}
		set completing(completing) {
			this._completing = completing;
			this._pumVisible = completing;
			this._pumInserted = false;
		}
		get completing() {
			return this._completing;
		}
		get cursor() {
			return this._cursor ?? {
				bufnr: this._bufnr,
				col: 1,
				lnum: 1,
				insert: false
			};
		}
		get bufnr() {
			return this._bufnr;
		}
		get pumvisible() {
			return this._pumVisible;
		}
		get pumAlignTop() {
			return this._pumAlignTop;
		}
		get insertMode() {
			return this._insertMode && this._mode.startsWith("i");
		}
		get lastChangeTs() {
			return this._lastChange;
		}
		/**
		* Resolved when first event fired or timeout
		*/
		race(events, token) {
			let disposables = [];
			return new Promise((resolve) => {
				if (number(token)) {
					let timer = setTimeout(() => {
						disposeAll(disposables);
						resolve(void 0);
					}, token);
					disposables.push(import_main$1.Disposable.create(() => {
						clearTimeout(timer);
					}));
				} else if (import_main$1.CancellationToken.is(token)) token.onCancellationRequested(() => {
					disposeAll(disposables);
					resolve(void 0);
				}, null, disposables);
				events.forEach((ev) => {
					this.on(ev, (...args) => {
						disposeAll(disposables);
						resolve({
							name: ev,
							args
						});
					}, null, disposables);
				});
			});
		}
		async fire(event, args) {
			if (event === "ready") this._ready = true;
			else if (event == "InsertEnter") this._insertMode = true;
			else if (event == "InsertLeave") {
				this._insertMode = false;
				this._pumVisible = false;
				this._recentInserts = [];
			} else if (event == "CursorHoldI" || event == "CursorMovedI") {
				this._bufnr = args[0];
				if (!this._insertMode) {
					this._insertMode = true;
					this.fire("InsertEnter", [args[0]]);
				}
			} else if (event == "CursorHold" || event == "CursorMoved") {
				this._bufnr = args[0];
				if (this._insertMode) {
					this._insertMode = false;
					this.fire("InsertLeave", [args[0]]);
				}
			} else if (event == "MenuPopupChanged") {
				this._pumVisible = true;
				this._pumAlignTop = args[1] > args[0].row;
				this._pumInserted = args[0].inserted;
			} else if (event == "InsertCharPre") this._recentInserts.push([args[1], args[0]]);
			else if (event == "TextChanged") this._lastChange = Date.now();
			else if (event == "BufEnter") this._bufnr = args[0];
			else if (event == "TextChangedI" || event == "TextChangedP") {
				let info = args[1];
				let pre = byteSlice(info.line ?? "", 0, info.col - 1);
				let arr;
				arr = this._recentInserts.filter((o) => o[0] == args[0]);
				this._bufnr = args[0];
				this._recentInserts = [];
				this._lastChange = Date.now();
				info.pre = pre;
				info.insertChars = arr.map((o) => o[1]);
				this._cursor = Object.freeze({
					bufnr: args[0],
					lnum: info.lnum,
					col: info.col,
					insert: true
				});
				if (arr.length && pre.length) {
					let character = pre.slice(-1);
					if (arr.findIndex((o) => o[1] == character) !== -1) {
						info.insertChar = character;
						process.nextTick(() => {
							this.fire("TextInsert", [...args, character]);
						});
					}
				}
			} else if (event == "BufWinEnter") {
				const [bufnr, winid, region] = args;
				this.fireVisibleEvent({
					bufnr,
					winid,
					region
				});
			} else if (event == "WinScrolled") {
				const [winid, bufnr, region] = args;
				this.fireVisibleEvent({
					bufnr,
					winid,
					region
				});
			} else if (event == "WinClosed") this.clearVisibleTimer(args[0]);
			else if (event == "BufWinLeave") this.clearVisibleTimer(args[1]);
			else if (event == "ModeChanged") this._mode = args[0].new_mode;
			if (event == "CursorMoved" || event == "CursorMovedI") {
				args.push(this._recentInserts.length > 0);
				let cursor = {
					bufnr: args[0],
					lnum: args[1][0],
					col: args[1][1],
					insert: event == "CursorMovedI"
				};
				if (this._cursor && equals(this._cursor, cursor)) return;
				this._cursor = cursor;
			}
			let cbs = this.handlers.get(event);
			if (cbs?.length) {
				let fns = cbs.slice();
				let traceSlow = this.requesting;
				await Promise.allSettled(fns.map((fn) => {
					let promiseFn = async () => {
						let timer;
						if (traceSlow) timer = setTimeout(() => {
							logger$52.warn(`Slow "${event}" handler detected`, fn["stack"]);
						}, this.timeout);
						try {
							await fn(args);
						} catch (e) {
							if (!shouldIgnore(e)) logger$52.error(`Error on event: ${event}`, e, fn["stack"]);
						}
						clearTimeout(timer);
					};
					return promiseFn();
				}));
			}
		}
		on(event, handler, thisArg, disposables) {
			if (Array.isArray(event)) {
				let arr = [];
				for (let ev of event) this.on(ev, handler, thisArg, arr);
				let dis = import_main$1.Disposable.create(() => {
					disposeAll(arr);
				});
				if (Array.isArray(disposables)) disposables.push(dis);
				return dis;
			} else {
				let arr = this.handlers.get(event) ?? [];
				let onFinish = () => {
					if (disposables === true && disposable) disposable.dispose();
				};
				let wrappedhandler = (args) => new Promise((resolve, reject) => {
					try {
						Promise.resolve(handler.apply(thisArg ?? null, args)).then(() => {
							onFinish();
							resolve(void 0);
						}, (e) => {
							onFinish();
							reject(e);
						});
					} catch (e) {
						onFinish();
						reject(e);
					}
				});
				Error.captureStackTrace(wrappedhandler);
				arr.push(wrappedhandler);
				this.handlers.set(event, arr);
				let disposable = import_main$1.Disposable.create(() => {
					let idx = arr.indexOf(wrappedhandler);
					if (idx !== -1) arr.splice(idx, 1);
				});
				if (Array.isArray(disposables)) disposables.push(disposable);
				return disposable;
			}
		}
		once(event, handler, thisArg) {
			return this.on(event, handler, thisArg, true);
		}
	};
	events_default = new Events();
}));
//#endregion
//#region package.json
var version = "0.0.82";
//#endregion
//#region src/util/constants.ts
var VERSION, isVim, floatHighlightGroup, CONFIG_FILE_NAME, configHome, dataHome, userConfigFile, pluginRoot;
var init_constants = __esmMin((() => {
	init_util$7();
	init_node();
	VERSION = version;
	isVim = process.env.VIM_NODE_RPC == "1";
	floatHighlightGroup = "CocFloating";
	CONFIG_FILE_NAME = "coc-settings.json";
	configHome = defaultValue(process.env.COC_VIMCONFIG, path$5.join(os$5.homedir(), ".vim"));
	dataHome = defaultValue(process.env.COC_DATA_HOME, path$5.join(os$5.homedir(), ".config/coc"));
	userConfigFile = path$5.join(path$5.normalize(configHome), CONFIG_FILE_NAME);
	pluginRoot = getConditionValue(path$5.dirname(__dirname), path$5.resolve(__dirname, "../.."));
}));
//#endregion
//#region node_modules/jsonc-parser/lib/esm/impl/scanner.js
/**
* Creates a JSON scanner on the given text.
* If ignoreTrivia is set, whitespaces or comments are ignored.
*/
function createScanner(text, ignoreTrivia = false) {
	const len = text.length;
	let pos = 0, value = "", tokenOffset = 0, token = 16, lineNumber = 0, lineStartOffset = 0, tokenLineStartOffset = 0, prevTokenLineStartOffset = 0, scanError = 0;
	function scanHexDigits(count, exact) {
		let digits = 0;
		let value = 0;
		while (digits < count || !exact) {
			let ch = text.charCodeAt(pos);
			if (ch >= 48 && ch <= 57) value = value * 16 + ch - 48;
			else if (ch >= 65 && ch <= 70) value = value * 16 + ch - 65 + 10;
			else if (ch >= 97 && ch <= 102) value = value * 16 + ch - 97 + 10;
			else break;
			pos++;
			digits++;
		}
		if (digits < count) value = -1;
		return value;
	}
	function setPosition(newPosition) {
		pos = newPosition;
		value = "";
		tokenOffset = 0;
		token = 16;
		scanError = 0;
	}
	function scanNumber() {
		let start = pos;
		if (text.charCodeAt(pos) === 48) pos++;
		else {
			pos++;
			while (pos < text.length && isDigit(text.charCodeAt(pos))) pos++;
		}
		if (pos < text.length && text.charCodeAt(pos) === 46) {
			pos++;
			if (pos < text.length && isDigit(text.charCodeAt(pos))) {
				pos++;
				while (pos < text.length && isDigit(text.charCodeAt(pos))) pos++;
			} else {
				scanError = 3;
				return text.substring(start, pos);
			}
		}
		let end = pos;
		if (pos < text.length && (text.charCodeAt(pos) === 69 || text.charCodeAt(pos) === 101)) {
			pos++;
			if (pos < text.length && text.charCodeAt(pos) === 43 || text.charCodeAt(pos) === 45) pos++;
			if (pos < text.length && isDigit(text.charCodeAt(pos))) {
				pos++;
				while (pos < text.length && isDigit(text.charCodeAt(pos))) pos++;
				end = pos;
			} else scanError = 3;
		}
		return text.substring(start, end);
	}
	function scanString() {
		let result = "", start = pos;
		while (true) {
			if (pos >= len) {
				result += text.substring(start, pos);
				scanError = 2;
				break;
			}
			const ch = text.charCodeAt(pos);
			if (ch === 34) {
				result += text.substring(start, pos);
				pos++;
				break;
			}
			if (ch === 92) {
				result += text.substring(start, pos);
				pos++;
				if (pos >= len) {
					scanError = 2;
					break;
				}
				switch (text.charCodeAt(pos++)) {
					case 34:
						result += "\"";
						break;
					case 92:
						result += "\\";
						break;
					case 47:
						result += "/";
						break;
					case 98:
						result += "\b";
						break;
					case 102:
						result += "\f";
						break;
					case 110:
						result += "\n";
						break;
					case 114:
						result += "\r";
						break;
					case 116:
						result += "	";
						break;
					case 117:
						const ch3 = scanHexDigits(4, true);
						if (ch3 >= 0) result += String.fromCharCode(ch3);
						else scanError = 4;
						break;
					default: scanError = 5;
				}
				start = pos;
				continue;
			}
			if (ch >= 0 && ch <= 31) if (isLineBreak(ch)) {
				result += text.substring(start, pos);
				scanError = 2;
				break;
			} else scanError = 6;
			pos++;
		}
		return result;
	}
	function scanNext() {
		value = "";
		scanError = 0;
		tokenOffset = pos;
		lineStartOffset = lineNumber;
		prevTokenLineStartOffset = tokenLineStartOffset;
		if (pos >= len) {
			tokenOffset = len;
			return token = 17;
		}
		let code = text.charCodeAt(pos);
		if (isWhiteSpace(code)) {
			do {
				pos++;
				value += String.fromCharCode(code);
				code = text.charCodeAt(pos);
			} while (isWhiteSpace(code));
			return token = 15;
		}
		if (isLineBreak(code)) {
			pos++;
			value += String.fromCharCode(code);
			if (code === 13 && text.charCodeAt(pos) === 10) {
				pos++;
				value += "\n";
			}
			lineNumber++;
			tokenLineStartOffset = pos;
			return token = 14;
		}
		switch (code) {
			case 123:
				pos++;
				return token = 1;
			case 125:
				pos++;
				return token = 2;
			case 91:
				pos++;
				return token = 3;
			case 93:
				pos++;
				return token = 4;
			case 58:
				pos++;
				return token = 6;
			case 44:
				pos++;
				return token = 5;
			case 34:
				pos++;
				value = scanString();
				return token = 10;
			case 47:
				const start = pos - 1;
				if (text.charCodeAt(pos + 1) === 47) {
					pos += 2;
					while (pos < len) {
						if (isLineBreak(text.charCodeAt(pos))) break;
						pos++;
					}
					value = text.substring(start, pos);
					return token = 12;
				}
				if (text.charCodeAt(pos + 1) === 42) {
					pos += 2;
					const safeLength = len - 1;
					let commentClosed = false;
					while (pos < safeLength) {
						const ch = text.charCodeAt(pos);
						if (ch === 42 && text.charCodeAt(pos + 1) === 47) {
							pos += 2;
							commentClosed = true;
							break;
						}
						pos++;
						if (isLineBreak(ch)) {
							if (ch === 13 && text.charCodeAt(pos) === 10) pos++;
							lineNumber++;
							tokenLineStartOffset = pos;
						}
					}
					if (!commentClosed) {
						pos++;
						scanError = 1;
					}
					value = text.substring(start, pos);
					return token = 13;
				}
				value += String.fromCharCode(code);
				pos++;
				return token = 16;
			case 45:
				value += String.fromCharCode(code);
				pos++;
				if (pos === len || !isDigit(text.charCodeAt(pos))) return token = 16;
			case 48:
			case 49:
			case 50:
			case 51:
			case 52:
			case 53:
			case 54:
			case 55:
			case 56:
			case 57:
				value += scanNumber();
				return token = 11;
			default:
				while (pos < len && isUnknownContentCharacter(code)) {
					pos++;
					code = text.charCodeAt(pos);
				}
				if (tokenOffset !== pos) {
					value = text.substring(tokenOffset, pos);
					switch (value) {
						case "true": return token = 8;
						case "false": return token = 9;
						case "null": return token = 7;
					}
					return token = 16;
				}
				value += String.fromCharCode(code);
				pos++;
				return token = 16;
		}
	}
	function isUnknownContentCharacter(code) {
		if (isWhiteSpace(code) || isLineBreak(code)) return false;
		switch (code) {
			case 125:
			case 93:
			case 123:
			case 91:
			case 34:
			case 58:
			case 44:
			case 47: return false;
		}
		return true;
	}
	function scanNextNonTrivia() {
		let result;
		do
			result = scanNext();
		while (result >= 12 && result <= 15);
		return result;
	}
	return {
		setPosition,
		getPosition: () => pos,
		scan: ignoreTrivia ? scanNextNonTrivia : scanNext,
		getToken: () => token,
		getTokenValue: () => value,
		getTokenOffset: () => tokenOffset,
		getTokenLength: () => pos - tokenOffset,
		getTokenStartLine: () => lineStartOffset,
		getTokenStartCharacter: () => tokenOffset - prevTokenLineStartOffset,
		getTokenError: () => scanError
	};
}
function isWhiteSpace(ch) {
	return ch === 32 || ch === 9;
}
function isLineBreak(ch) {
	return ch === 10 || ch === 13;
}
function isDigit(ch) {
	return ch >= 48 && ch <= 57;
}
var CharacterCodes;
var init_scanner = __esmMin((() => {
	(function(CharacterCodes) {
		CharacterCodes[CharacterCodes["lineFeed"] = 10] = "lineFeed";
		CharacterCodes[CharacterCodes["carriageReturn"] = 13] = "carriageReturn";
		CharacterCodes[CharacterCodes["space"] = 32] = "space";
		CharacterCodes[CharacterCodes["_0"] = 48] = "_0";
		CharacterCodes[CharacterCodes["_1"] = 49] = "_1";
		CharacterCodes[CharacterCodes["_2"] = 50] = "_2";
		CharacterCodes[CharacterCodes["_3"] = 51] = "_3";
		CharacterCodes[CharacterCodes["_4"] = 52] = "_4";
		CharacterCodes[CharacterCodes["_5"] = 53] = "_5";
		CharacterCodes[CharacterCodes["_6"] = 54] = "_6";
		CharacterCodes[CharacterCodes["_7"] = 55] = "_7";
		CharacterCodes[CharacterCodes["_8"] = 56] = "_8";
		CharacterCodes[CharacterCodes["_9"] = 57] = "_9";
		CharacterCodes[CharacterCodes["a"] = 97] = "a";
		CharacterCodes[CharacterCodes["b"] = 98] = "b";
		CharacterCodes[CharacterCodes["c"] = 99] = "c";
		CharacterCodes[CharacterCodes["d"] = 100] = "d";
		CharacterCodes[CharacterCodes["e"] = 101] = "e";
		CharacterCodes[CharacterCodes["f"] = 102] = "f";
		CharacterCodes[CharacterCodes["g"] = 103] = "g";
		CharacterCodes[CharacterCodes["h"] = 104] = "h";
		CharacterCodes[CharacterCodes["i"] = 105] = "i";
		CharacterCodes[CharacterCodes["j"] = 106] = "j";
		CharacterCodes[CharacterCodes["k"] = 107] = "k";
		CharacterCodes[CharacterCodes["l"] = 108] = "l";
		CharacterCodes[CharacterCodes["m"] = 109] = "m";
		CharacterCodes[CharacterCodes["n"] = 110] = "n";
		CharacterCodes[CharacterCodes["o"] = 111] = "o";
		CharacterCodes[CharacterCodes["p"] = 112] = "p";
		CharacterCodes[CharacterCodes["q"] = 113] = "q";
		CharacterCodes[CharacterCodes["r"] = 114] = "r";
		CharacterCodes[CharacterCodes["s"] = 115] = "s";
		CharacterCodes[CharacterCodes["t"] = 116] = "t";
		CharacterCodes[CharacterCodes["u"] = 117] = "u";
		CharacterCodes[CharacterCodes["v"] = 118] = "v";
		CharacterCodes[CharacterCodes["w"] = 119] = "w";
		CharacterCodes[CharacterCodes["x"] = 120] = "x";
		CharacterCodes[CharacterCodes["y"] = 121] = "y";
		CharacterCodes[CharacterCodes["z"] = 122] = "z";
		CharacterCodes[CharacterCodes["A"] = 65] = "A";
		CharacterCodes[CharacterCodes["B"] = 66] = "B";
		CharacterCodes[CharacterCodes["C"] = 67] = "C";
		CharacterCodes[CharacterCodes["D"] = 68] = "D";
		CharacterCodes[CharacterCodes["E"] = 69] = "E";
		CharacterCodes[CharacterCodes["F"] = 70] = "F";
		CharacterCodes[CharacterCodes["G"] = 71] = "G";
		CharacterCodes[CharacterCodes["H"] = 72] = "H";
		CharacterCodes[CharacterCodes["I"] = 73] = "I";
		CharacterCodes[CharacterCodes["J"] = 74] = "J";
		CharacterCodes[CharacterCodes["K"] = 75] = "K";
		CharacterCodes[CharacterCodes["L"] = 76] = "L";
		CharacterCodes[CharacterCodes["M"] = 77] = "M";
		CharacterCodes[CharacterCodes["N"] = 78] = "N";
		CharacterCodes[CharacterCodes["O"] = 79] = "O";
		CharacterCodes[CharacterCodes["P"] = 80] = "P";
		CharacterCodes[CharacterCodes["Q"] = 81] = "Q";
		CharacterCodes[CharacterCodes["R"] = 82] = "R";
		CharacterCodes[CharacterCodes["S"] = 83] = "S";
		CharacterCodes[CharacterCodes["T"] = 84] = "T";
		CharacterCodes[CharacterCodes["U"] = 85] = "U";
		CharacterCodes[CharacterCodes["V"] = 86] = "V";
		CharacterCodes[CharacterCodes["W"] = 87] = "W";
		CharacterCodes[CharacterCodes["X"] = 88] = "X";
		CharacterCodes[CharacterCodes["Y"] = 89] = "Y";
		CharacterCodes[CharacterCodes["Z"] = 90] = "Z";
		CharacterCodes[CharacterCodes["asterisk"] = 42] = "asterisk";
		CharacterCodes[CharacterCodes["backslash"] = 92] = "backslash";
		CharacterCodes[CharacterCodes["closeBrace"] = 125] = "closeBrace";
		CharacterCodes[CharacterCodes["closeBracket"] = 93] = "closeBracket";
		CharacterCodes[CharacterCodes["colon"] = 58] = "colon";
		CharacterCodes[CharacterCodes["comma"] = 44] = "comma";
		CharacterCodes[CharacterCodes["dot"] = 46] = "dot";
		CharacterCodes[CharacterCodes["doubleQuote"] = 34] = "doubleQuote";
		CharacterCodes[CharacterCodes["minus"] = 45] = "minus";
		CharacterCodes[CharacterCodes["openBrace"] = 123] = "openBrace";
		CharacterCodes[CharacterCodes["openBracket"] = 91] = "openBracket";
		CharacterCodes[CharacterCodes["plus"] = 43] = "plus";
		CharacterCodes[CharacterCodes["slash"] = 47] = "slash";
		CharacterCodes[CharacterCodes["formFeed"] = 12] = "formFeed";
		CharacterCodes[CharacterCodes["tab"] = 9] = "tab";
	})(CharacterCodes || (CharacterCodes = {}));
}));
//#endregion
//#region node_modules/jsonc-parser/lib/esm/impl/string-intern.js
var cachedSpaces, maxCachedValues, cachedBreakLinesWithSpaces, supportedEols;
var init_string_intern = __esmMin((() => {
	cachedSpaces = new Array(20).fill(0).map((_, index) => {
		return " ".repeat(index);
	});
	maxCachedValues = 200;
	cachedBreakLinesWithSpaces = {
		" ": {
			"\n": new Array(maxCachedValues).fill(0).map((_, index) => {
				return "\n" + " ".repeat(index);
			}),
			"\r": new Array(maxCachedValues).fill(0).map((_, index) => {
				return "\r" + " ".repeat(index);
			}),
			"\r\n": new Array(maxCachedValues).fill(0).map((_, index) => {
				return "\r\n" + " ".repeat(index);
			})
		},
		"	": {
			"\n": new Array(maxCachedValues).fill(0).map((_, index) => {
				return "\n" + "	".repeat(index);
			}),
			"\r": new Array(maxCachedValues).fill(0).map((_, index) => {
				return "\r" + "	".repeat(index);
			}),
			"\r\n": new Array(maxCachedValues).fill(0).map((_, index) => {
				return "\r\n" + "	".repeat(index);
			})
		}
	};
	supportedEols = [
		"\n",
		"\r",
		"\r\n"
	];
}));
//#endregion
//#region node_modules/jsonc-parser/lib/esm/impl/format.js
function format(documentText, range, options) {
	let initialIndentLevel;
	let formatText;
	let formatTextStart;
	let rangeStart;
	let rangeEnd;
	if (range) {
		rangeStart = range.offset;
		rangeEnd = rangeStart + range.length;
		formatTextStart = rangeStart;
		while (formatTextStart > 0 && !isEOL$1(documentText, formatTextStart - 1)) formatTextStart--;
		let endOffset = rangeEnd;
		while (endOffset < documentText.length && !isEOL$1(documentText, endOffset)) endOffset++;
		formatText = documentText.substring(formatTextStart, endOffset);
		initialIndentLevel = computeIndentLevel(formatText, options);
	} else {
		formatText = documentText;
		initialIndentLevel = 0;
		formatTextStart = 0;
		rangeStart = 0;
		rangeEnd = documentText.length;
	}
	const eol = getEOL(options, documentText);
	const eolFastPathSupported = supportedEols.includes(eol);
	let numberLineBreaks = 0;
	let indentLevel = 0;
	let indentValue;
	if (options.insertSpaces) indentValue = cachedSpaces[options.tabSize || 4] ?? repeat(cachedSpaces[1], options.tabSize || 4);
	else indentValue = "	";
	const indentType = indentValue === "	" ? "	" : " ";
	let scanner = createScanner(formatText, false);
	let hasError = false;
	function newLinesAndIndent() {
		if (numberLineBreaks > 1) return repeat(eol, numberLineBreaks) + repeat(indentValue, initialIndentLevel + indentLevel);
		const amountOfSpaces = indentValue.length * (initialIndentLevel + indentLevel);
		if (!eolFastPathSupported || amountOfSpaces > cachedBreakLinesWithSpaces[indentType][eol].length) return eol + repeat(indentValue, initialIndentLevel + indentLevel);
		if (amountOfSpaces <= 0) return eol;
		return cachedBreakLinesWithSpaces[indentType][eol][amountOfSpaces];
	}
	function scanNext() {
		let token = scanner.scan();
		numberLineBreaks = 0;
		while (token === 15 || token === 14) {
			if (token === 14 && options.keepLines) numberLineBreaks += 1;
			else if (token === 14) numberLineBreaks = 1;
			token = scanner.scan();
		}
		hasError = token === 16 || scanner.getTokenError() !== 0;
		return token;
	}
	const editOperations = [];
	function addEdit(text, startOffset, endOffset) {
		if (!hasError && (!range || startOffset < rangeEnd && endOffset > rangeStart) && documentText.substring(startOffset, endOffset) !== text) editOperations.push({
			offset: startOffset,
			length: endOffset - startOffset,
			content: text
		});
	}
	let firstToken = scanNext();
	if (options.keepLines && numberLineBreaks > 0) addEdit(repeat(eol, numberLineBreaks), 0, 0);
	if (firstToken !== 17) {
		let firstTokenStart = scanner.getTokenOffset() + formatTextStart;
		addEdit(indentValue.length * initialIndentLevel < 20 && options.insertSpaces ? cachedSpaces[indentValue.length * initialIndentLevel] : repeat(indentValue, initialIndentLevel), formatTextStart, firstTokenStart);
	}
	while (firstToken !== 17) {
		let firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;
		let secondToken = scanNext();
		let replaceContent = "";
		let needsLineBreak = false;
		while (numberLineBreaks === 0 && (secondToken === 12 || secondToken === 13)) {
			let commentTokenStart = scanner.getTokenOffset() + formatTextStart;
			addEdit(cachedSpaces[1], firstTokenEnd, commentTokenStart);
			firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;
			needsLineBreak = secondToken === 12;
			replaceContent = needsLineBreak ? newLinesAndIndent() : "";
			secondToken = scanNext();
		}
		if (secondToken === 2) {
			if (firstToken !== 1) indentLevel--;
			if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 1) replaceContent = newLinesAndIndent();
			else if (options.keepLines) replaceContent = cachedSpaces[1];
		} else if (secondToken === 4) {
			if (firstToken !== 3) indentLevel--;
			if (options.keepLines && numberLineBreaks > 0 || !options.keepLines && firstToken !== 3) replaceContent = newLinesAndIndent();
			else if (options.keepLines) replaceContent = cachedSpaces[1];
		} else {
			switch (firstToken) {
				case 3:
				case 1:
					indentLevel++;
					if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) replaceContent = newLinesAndIndent();
					else replaceContent = cachedSpaces[1];
					break;
				case 5:
					if (options.keepLines && numberLineBreaks > 0 || !options.keepLines) replaceContent = newLinesAndIndent();
					else replaceContent = cachedSpaces[1];
					break;
				case 12:
					replaceContent = newLinesAndIndent();
					break;
				case 13:
					if (numberLineBreaks > 0) replaceContent = newLinesAndIndent();
					else if (!needsLineBreak) replaceContent = cachedSpaces[1];
					break;
				case 6:
					if (options.keepLines && numberLineBreaks > 0) replaceContent = newLinesAndIndent();
					else if (!needsLineBreak) replaceContent = cachedSpaces[1];
					break;
				case 10:
					if (options.keepLines && numberLineBreaks > 0) replaceContent = newLinesAndIndent();
					else if (secondToken === 6 && !needsLineBreak) replaceContent = "";
					break;
				case 7:
				case 8:
				case 9:
				case 11:
				case 2:
				case 4:
					if (options.keepLines && numberLineBreaks > 0) replaceContent = newLinesAndIndent();
					else if ((secondToken === 12 || secondToken === 13) && !needsLineBreak) replaceContent = cachedSpaces[1];
					else if (secondToken !== 5 && secondToken !== 17) hasError = true;
					break;
				case 16:
					hasError = true;
					break;
			}
			if (numberLineBreaks > 0 && (secondToken === 12 || secondToken === 13)) replaceContent = newLinesAndIndent();
		}
		if (secondToken === 17) if (options.keepLines && numberLineBreaks > 0) replaceContent = newLinesAndIndent();
		else replaceContent = options.insertFinalNewline ? eol : "";
		const secondTokenStart = scanner.getTokenOffset() + formatTextStart;
		addEdit(replaceContent, firstTokenEnd, secondTokenStart);
		firstToken = secondToken;
	}
	return editOperations;
}
function repeat(s, count) {
	let result = "";
	for (let i = 0; i < count; i++) result += s;
	return result;
}
function computeIndentLevel(content, options) {
	let i = 0;
	let nChars = 0;
	const tabSize = options.tabSize || 4;
	while (i < content.length) {
		let ch = content.charAt(i);
		if (ch === cachedSpaces[1]) nChars++;
		else if (ch === "	") nChars += tabSize;
		else break;
		i++;
	}
	return Math.floor(nChars / tabSize);
}
function getEOL(options, text) {
	for (let i = 0; i < text.length; i++) {
		const ch = text.charAt(i);
		if (ch === "\r") {
			if (i + 1 < text.length && text.charAt(i + 1) === "\n") return "\r\n";
			return "\r";
		} else if (ch === "\n") return "\n";
	}
	return options && options.eol || "\n";
}
function isEOL$1(text, offset) {
	return "\r\n".indexOf(text.charAt(offset)) !== -1;
}
var init_format$1 = __esmMin((() => {
	init_scanner();
	init_string_intern();
}));
//#endregion
//#region node_modules/jsonc-parser/lib/esm/impl/parser.js
/**
* Parses the given text and returns the object the JSON content represents. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.
* Therefore always check the errors list to find out if the input was valid.
*/
function parse$1(text, errors = [], options = ParseOptions.DEFAULT) {
	let currentProperty = null;
	let currentParent = [];
	const previousParents = [];
	function onValue(value) {
		if (Array.isArray(currentParent)) currentParent.push(value);
		else if (currentProperty !== null) currentParent[currentProperty] = value;
	}
	visit$1(text, {
		onObjectBegin: () => {
			const object = {};
			onValue(object);
			previousParents.push(currentParent);
			currentParent = object;
			currentProperty = null;
		},
		onObjectProperty: (name) => {
			currentProperty = name;
		},
		onObjectEnd: () => {
			currentParent = previousParents.pop();
		},
		onArrayBegin: () => {
			const array = [];
			onValue(array);
			previousParents.push(currentParent);
			currentParent = array;
			currentProperty = null;
		},
		onArrayEnd: () => {
			currentParent = previousParents.pop();
		},
		onLiteralValue: onValue,
		onError: (error, offset, length) => {
			errors.push({
				error,
				offset,
				length
			});
		}
	}, options);
	return currentParent[0];
}
/**
* Parses the given text and returns a tree representation the JSON content. On invalid input, the parser tries to be as fault tolerant as possible, but still return a result.
*/
function parseTree(text, errors = [], options = ParseOptions.DEFAULT) {
	let currentParent = {
		type: "array",
		offset: -1,
		length: -1,
		children: [],
		parent: void 0
	};
	function ensurePropertyComplete(endOffset) {
		if (currentParent.type === "property") {
			currentParent.length = endOffset - currentParent.offset;
			currentParent = currentParent.parent;
		}
	}
	function onValue(valueNode) {
		currentParent.children.push(valueNode);
		return valueNode;
	}
	visit$1(text, {
		onObjectBegin: (offset) => {
			currentParent = onValue({
				type: "object",
				offset,
				length: -1,
				parent: currentParent,
				children: []
			});
		},
		onObjectProperty: (name, offset, length) => {
			currentParent = onValue({
				type: "property",
				offset,
				length: -1,
				parent: currentParent,
				children: []
			});
			currentParent.children.push({
				type: "string",
				value: name,
				offset,
				length,
				parent: currentParent
			});
		},
		onObjectEnd: (offset, length) => {
			ensurePropertyComplete(offset + length);
			currentParent.length = offset + length - currentParent.offset;
			currentParent = currentParent.parent;
			ensurePropertyComplete(offset + length);
		},
		onArrayBegin: (offset, length) => {
			currentParent = onValue({
				type: "array",
				offset,
				length: -1,
				parent: currentParent,
				children: []
			});
		},
		onArrayEnd: (offset, length) => {
			currentParent.length = offset + length - currentParent.offset;
			currentParent = currentParent.parent;
			ensurePropertyComplete(offset + length);
		},
		onLiteralValue: (value, offset, length) => {
			onValue({
				type: getNodeType(value),
				offset,
				length,
				parent: currentParent,
				value
			});
			ensurePropertyComplete(offset + length);
		},
		onSeparator: (sep, offset, length) => {
			if (currentParent.type === "property") {
				if (sep === ":") currentParent.colonOffset = offset;
				else if (sep === ",") ensurePropertyComplete(offset);
			}
		},
		onError: (error, offset, length) => {
			errors.push({
				error,
				offset,
				length
			});
		}
	}, options);
	const result = currentParent.children[0];
	if (result) delete result.parent;
	return result;
}
/**
* Finds the node at the given path in a JSON DOM.
*/
function findNodeAtLocation(root, path) {
	if (!root) return;
	let node = root;
	for (let segment of path) if (typeof segment === "string") {
		if (node.type !== "object" || !Array.isArray(node.children)) return;
		let found = false;
		for (const propertyNode of node.children) if (Array.isArray(propertyNode.children) && propertyNode.children[0].value === segment && propertyNode.children.length === 2) {
			node = propertyNode.children[1];
			found = true;
			break;
		}
		if (!found) return;
	} else {
		const index = segment;
		if (node.type !== "array" || index < 0 || !Array.isArray(node.children) || index >= node.children.length) return;
		node = node.children[index];
	}
	return node;
}
/**
* Parses the given text and invokes the visitor functions for each object, array and literal reached.
*/
function visit$1(text, visitor, options = ParseOptions.DEFAULT) {
	const _scanner = createScanner(text, false);
	const _jsonPath = [];
	let suppressedCallbacks = 0;
	function toNoArgVisit(visitFunction) {
		return visitFunction ? () => suppressedCallbacks === 0 && visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;
	}
	function toOneArgVisit(visitFunction) {
		return visitFunction ? (arg) => suppressedCallbacks === 0 && visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter()) : () => true;
	}
	function toOneArgVisitWithPath(visitFunction) {
		return visitFunction ? (arg) => suppressedCallbacks === 0 && visitFunction(arg, _scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) : () => true;
	}
	function toBeginVisit(visitFunction) {
		return visitFunction ? () => {
			if (suppressedCallbacks > 0) suppressedCallbacks++;
			else if (visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter(), () => _jsonPath.slice()) === false) suppressedCallbacks = 1;
		} : () => true;
	}
	function toEndVisit(visitFunction) {
		return visitFunction ? () => {
			if (suppressedCallbacks > 0) suppressedCallbacks--;
			if (suppressedCallbacks === 0) visitFunction(_scanner.getTokenOffset(), _scanner.getTokenLength(), _scanner.getTokenStartLine(), _scanner.getTokenStartCharacter());
		} : () => true;
	}
	const onObjectBegin = toBeginVisit(visitor.onObjectBegin), onObjectProperty = toOneArgVisitWithPath(visitor.onObjectProperty), onObjectEnd = toEndVisit(visitor.onObjectEnd), onArrayBegin = toBeginVisit(visitor.onArrayBegin), onArrayEnd = toEndVisit(visitor.onArrayEnd), onLiteralValue = toOneArgVisitWithPath(visitor.onLiteralValue), onSeparator = toOneArgVisit(visitor.onSeparator), onComment = toNoArgVisit(visitor.onComment), onError = toOneArgVisit(visitor.onError);
	const disallowComments = options && options.disallowComments;
	const allowTrailingComma = options && options.allowTrailingComma;
	function scanNext() {
		while (true) {
			const token = _scanner.scan();
			switch (_scanner.getTokenError()) {
				case 4:
					handleError(14);
					break;
				case 5:
					handleError(15);
					break;
				case 3:
					handleError(13);
					break;
				case 1:
					if (!disallowComments) handleError(11);
					break;
				case 2:
					handleError(12);
					break;
				case 6:
					handleError(16);
					break;
			}
			switch (token) {
				case 12:
				case 13:
					if (disallowComments) handleError(10);
					else onComment();
					break;
				case 16:
					handleError(1);
					break;
				case 15:
				case 14: break;
				default: return token;
			}
		}
	}
	function handleError(error, skipUntilAfter = [], skipUntil = []) {
		onError(error);
		if (skipUntilAfter.length + skipUntil.length > 0) {
			let token = _scanner.getToken();
			while (token !== 17) {
				if (skipUntilAfter.indexOf(token) !== -1) {
					scanNext();
					break;
				} else if (skipUntil.indexOf(token) !== -1) break;
				token = scanNext();
			}
		}
	}
	function parseString(isValue) {
		const value = _scanner.getTokenValue();
		if (isValue) onLiteralValue(value);
		else {
			onObjectProperty(value);
			_jsonPath.push(value);
		}
		scanNext();
		return true;
	}
	function parseLiteral() {
		switch (_scanner.getToken()) {
			case 11:
				const tokenValue = _scanner.getTokenValue();
				let value = Number(tokenValue);
				if (isNaN(value)) {
					handleError(2);
					value = 0;
				}
				onLiteralValue(value);
				break;
			case 7:
				onLiteralValue(null);
				break;
			case 8:
				onLiteralValue(true);
				break;
			case 9:
				onLiteralValue(false);
				break;
			default: return false;
		}
		scanNext();
		return true;
	}
	function parseProperty() {
		if (_scanner.getToken() !== 10) {
			handleError(3, [], [2, 5]);
			return false;
		}
		parseString(false);
		if (_scanner.getToken() === 6) {
			onSeparator(":");
			scanNext();
			if (!parseValue()) handleError(4, [], [2, 5]);
		} else handleError(5, [], [2, 5]);
		_jsonPath.pop();
		return true;
	}
	function parseObject() {
		onObjectBegin();
		scanNext();
		let needsComma = false;
		while (_scanner.getToken() !== 2 && _scanner.getToken() !== 17) {
			if (_scanner.getToken() === 5) {
				if (!needsComma) handleError(4, [], []);
				onSeparator(",");
				scanNext();
				if (_scanner.getToken() === 2 && allowTrailingComma) break;
			} else if (needsComma) handleError(6, [], []);
			if (!parseProperty()) handleError(4, [], [2, 5]);
			needsComma = true;
		}
		onObjectEnd();
		if (_scanner.getToken() !== 2) handleError(7, [2], []);
		else scanNext();
		return true;
	}
	function parseArray() {
		onArrayBegin();
		scanNext();
		let isFirstElement = true;
		let needsComma = false;
		while (_scanner.getToken() !== 4 && _scanner.getToken() !== 17) {
			if (_scanner.getToken() === 5) {
				if (!needsComma) handleError(4, [], []);
				onSeparator(",");
				scanNext();
				if (_scanner.getToken() === 4 && allowTrailingComma) break;
			} else if (needsComma) handleError(6, [], []);
			if (isFirstElement) {
				_jsonPath.push(0);
				isFirstElement = false;
			} else _jsonPath[_jsonPath.length - 1]++;
			if (!parseValue()) handleError(4, [], [4, 5]);
			needsComma = true;
		}
		onArrayEnd();
		if (!isFirstElement) _jsonPath.pop();
		if (_scanner.getToken() !== 4) handleError(8, [4], []);
		else scanNext();
		return true;
	}
	function parseValue() {
		switch (_scanner.getToken()) {
			case 3: return parseArray();
			case 1: return parseObject();
			case 10: return parseString(true);
			default: return parseLiteral();
		}
	}
	scanNext();
	if (_scanner.getToken() === 17) {
		if (options.allowEmptyContent) return true;
		handleError(4, [], []);
		return false;
	}
	if (!parseValue()) {
		handleError(4, [], []);
		return false;
	}
	if (_scanner.getToken() !== 17) handleError(9, [], []);
	return true;
}
function getNodeType(value) {
	switch (typeof value) {
		case "boolean": return "boolean";
		case "number": return "number";
		case "string": return "string";
		case "object":
			if (!value) return "null";
			else if (Array.isArray(value)) return "array";
			return "object";
		default: return "null";
	}
}
var ParseOptions;
var init_parser$2 = __esmMin((() => {
	init_scanner();
	(function(ParseOptions) {
		ParseOptions.DEFAULT = { allowTrailingComma: false };
	})(ParseOptions || (ParseOptions = {}));
}));
//#endregion
//#region node_modules/jsonc-parser/lib/esm/impl/edit.js
function setProperty(text, originalPath, value, options) {
	const path = originalPath.slice();
	const root = parseTree(text, []);
	let parent = void 0;
	let lastSegment = void 0;
	while (path.length > 0) {
		lastSegment = path.pop();
		parent = findNodeAtLocation(root, path);
		if (parent === void 0 && value !== void 0) if (typeof lastSegment === "string") value = { [lastSegment]: value };
		else value = [value];
		else break;
	}
	if (!parent) {
		if (value === void 0) throw new Error("Can not delete in empty document");
		return withFormatting(text, {
			offset: root ? root.offset : 0,
			length: root ? root.length : 0,
			content: JSON.stringify(value)
		}, options);
	} else if (parent.type === "object" && typeof lastSegment === "string" && Array.isArray(parent.children)) {
		const existing = findNodeAtLocation(parent, [lastSegment]);
		if (existing !== void 0) if (value === void 0) {
			if (!existing.parent) throw new Error("Malformed AST");
			const propertyIndex = parent.children.indexOf(existing.parent);
			let removeBegin;
			let removeEnd = existing.parent.offset + existing.parent.length;
			if (propertyIndex > 0) {
				let previous = parent.children[propertyIndex - 1];
				removeBegin = previous.offset + previous.length;
			} else {
				removeBegin = parent.offset + 1;
				if (parent.children.length > 1) removeEnd = parent.children[1].offset;
			}
			return withFormatting(text, {
				offset: removeBegin,
				length: removeEnd - removeBegin,
				content: ""
			}, options);
		} else return withFormatting(text, {
			offset: existing.offset,
			length: existing.length,
			content: JSON.stringify(value)
		}, options);
		else {
			if (value === void 0) return [];
			const newProperty = `${JSON.stringify(lastSegment)}: ${JSON.stringify(value)}`;
			const index = options.getInsertionIndex ? options.getInsertionIndex(parent.children.map((p) => p.children[0].value)) : parent.children.length;
			let edit;
			if (index > 0) {
				let previous = parent.children[index - 1];
				edit = {
					offset: previous.offset + previous.length,
					length: 0,
					content: "," + newProperty
				};
			} else if (parent.children.length === 0) edit = {
				offset: parent.offset + 1,
				length: 0,
				content: newProperty
			};
			else edit = {
				offset: parent.offset + 1,
				length: 0,
				content: newProperty + ","
			};
			return withFormatting(text, edit, options);
		}
	} else if (parent.type === "array" && typeof lastSegment === "number" && Array.isArray(parent.children)) {
		const insertIndex = lastSegment;
		if (insertIndex === -1) {
			const newProperty = `${JSON.stringify(value)}`;
			let edit;
			if (parent.children.length === 0) edit = {
				offset: parent.offset + 1,
				length: 0,
				content: newProperty
			};
			else {
				const previous = parent.children[parent.children.length - 1];
				edit = {
					offset: previous.offset + previous.length,
					length: 0,
					content: "," + newProperty
				};
			}
			return withFormatting(text, edit, options);
		} else if (value === void 0 && parent.children.length >= 0) {
			const removalIndex = lastSegment;
			const toRemove = parent.children[removalIndex];
			let edit;
			if (parent.children.length === 1) edit = {
				offset: parent.offset + 1,
				length: parent.length - 2,
				content: ""
			};
			else if (parent.children.length - 1 === removalIndex) {
				let previous = parent.children[removalIndex - 1];
				let offset = previous.offset + previous.length;
				edit = {
					offset,
					length: parent.offset + parent.length - 2 - offset,
					content: ""
				};
			} else edit = {
				offset: toRemove.offset,
				length: parent.children[removalIndex + 1].offset - toRemove.offset,
				content: ""
			};
			return withFormatting(text, edit, options);
		} else if (value !== void 0) {
			let edit;
			const newProperty = `${JSON.stringify(value)}`;
			if (!options.isArrayInsertion && parent.children.length > lastSegment) {
				const toModify = parent.children[lastSegment];
				edit = {
					offset: toModify.offset,
					length: toModify.length,
					content: newProperty
				};
			} else if (parent.children.length === 0 || lastSegment === 0) edit = {
				offset: parent.offset + 1,
				length: 0,
				content: parent.children.length === 0 ? newProperty : newProperty + ","
			};
			else {
				const index = lastSegment > parent.children.length ? parent.children.length : lastSegment;
				const previous = parent.children[index - 1];
				edit = {
					offset: previous.offset + previous.length,
					length: 0,
					content: "," + newProperty
				};
			}
			return withFormatting(text, edit, options);
		} else throw new Error(`Can not ${value === void 0 ? "remove" : options.isArrayInsertion ? "insert" : "modify"} Array index ${insertIndex} as length is not sufficient`);
	} else throw new Error(`Can not add ${typeof lastSegment !== "number" ? "index" : "property"} to parent of type ${parent.type}`);
}
function withFormatting(text, edit, options) {
	if (!options.formattingOptions) return [edit];
	let newText = applyEdit(text, edit);
	let begin = edit.offset;
	let end = edit.offset + edit.content.length;
	if (edit.length === 0 || edit.content.length === 0) {
		while (begin > 0 && !isEOL$1(newText, begin - 1)) begin--;
		while (end < newText.length && !isEOL$1(newText, end)) end++;
	}
	const edits = format(newText, {
		offset: begin,
		length: end - begin
	}, {
		...options.formattingOptions,
		keepLines: false
	});
	for (let i = edits.length - 1; i >= 0; i--) {
		const edit = edits[i];
		newText = applyEdit(newText, edit);
		begin = Math.min(begin, edit.offset);
		end = Math.max(end, edit.offset + edit.length);
		end += edit.content.length - edit.length;
	}
	const editLength = text.length - (newText.length - end) - begin;
	return [{
		offset: begin,
		length: editLength,
		content: newText.substring(begin, end)
	}];
}
function applyEdit(text, edit) {
	return text.substring(0, edit.offset) + edit.content + text.substring(edit.offset + edit.length);
}
var init_edit = __esmMin((() => {
	init_format$1();
	init_parser$2();
}));
//#endregion
//#region node_modules/jsonc-parser/lib/esm/main.js
function printParseErrorCode(code) {
	switch (code) {
		case 1: return "InvalidSymbol";
		case 2: return "InvalidNumberFormat";
		case 3: return "PropertyNameExpected";
		case 4: return "ValueExpected";
		case 5: return "ColonExpected";
		case 6: return "CommaExpected";
		case 7: return "CloseBraceExpected";
		case 8: return "CloseBracketExpected";
		case 9: return "EndOfFileExpected";
		case 10: return "InvalidCommentToken";
		case 11: return "UnexpectedEndOfComment";
		case 12: return "UnexpectedEndOfString";
		case 13: return "UnexpectedEndOfNumber";
		case 14: return "InvalidUnicode";
		case 15: return "InvalidEscapeCharacter";
		case 16: return "InvalidCharacter";
	}
	return "<unknown ParseErrorCode>";
}
/**
* Computes the edit operations needed to modify a value in the JSON document.
*
* @param documentText The input text
* @param path The path of the value to change. The path represents either to the document root, a property or an array item.
* If the path points to an non-existing property or item, it will be created.
* @param value The new value for the specified property or item. If the value is undefined,
* the property or item will be removed.
* @param options Options
* @returns The edit operations describing the changes to the original document, following the format described in {@linkcode EditResult}.
* To apply the edit operations to the input, use {@linkcode applyEdits}.
*/
function modify(text, path, value, options) {
	return setProperty(text, path, value, options);
}
/**
* Applies edits to an input string.
* @param text The input text
* @param edits Edit operations following the format described in {@linkcode EditResult}.
* @returns The text with the applied edits.
* @throws An error if the edit operations are not well-formed as described in {@linkcode EditResult}.
*/
function applyEdits$1(text, edits) {
	let sortedEdits = edits.slice(0).sort((a, b) => {
		const diff = a.offset - b.offset;
		if (diff === 0) return a.length - b.length;
		return diff;
	});
	let lastModifiedOffset = text.length;
	for (let i = sortedEdits.length - 1; i >= 0; i--) {
		let e = sortedEdits[i];
		if (e.offset + e.length <= lastModifiedOffset) text = applyEdit(text, e);
		else throw new Error("Overlapping edit");
		lastModifiedOffset = e.offset;
	}
	return text;
}
var ScanError, SyntaxKind, parse, visit, ParseErrorCode;
var init_main$1 = __esmMin((() => {
	init_format$1();
	init_edit();
	init_scanner();
	init_parser$2();
	(function(ScanError) {
		ScanError[ScanError["None"] = 0] = "None";
		ScanError[ScanError["UnexpectedEndOfComment"] = 1] = "UnexpectedEndOfComment";
		ScanError[ScanError["UnexpectedEndOfString"] = 2] = "UnexpectedEndOfString";
		ScanError[ScanError["UnexpectedEndOfNumber"] = 3] = "UnexpectedEndOfNumber";
		ScanError[ScanError["InvalidUnicode"] = 4] = "InvalidUnicode";
		ScanError[ScanError["InvalidEscapeCharacter"] = 5] = "InvalidEscapeCharacter";
		ScanError[ScanError["InvalidCharacter"] = 6] = "InvalidCharacter";
	})(ScanError || (ScanError = {}));
	(function(SyntaxKind) {
		SyntaxKind[SyntaxKind["OpenBraceToken"] = 1] = "OpenBraceToken";
		SyntaxKind[SyntaxKind["CloseBraceToken"] = 2] = "CloseBraceToken";
		SyntaxKind[SyntaxKind["OpenBracketToken"] = 3] = "OpenBracketToken";
		SyntaxKind[SyntaxKind["CloseBracketToken"] = 4] = "CloseBracketToken";
		SyntaxKind[SyntaxKind["CommaToken"] = 5] = "CommaToken";
		SyntaxKind[SyntaxKind["ColonToken"] = 6] = "ColonToken";
		SyntaxKind[SyntaxKind["NullKeyword"] = 7] = "NullKeyword";
		SyntaxKind[SyntaxKind["TrueKeyword"] = 8] = "TrueKeyword";
		SyntaxKind[SyntaxKind["FalseKeyword"] = 9] = "FalseKeyword";
		SyntaxKind[SyntaxKind["StringLiteral"] = 10] = "StringLiteral";
		SyntaxKind[SyntaxKind["NumericLiteral"] = 11] = "NumericLiteral";
		SyntaxKind[SyntaxKind["LineCommentTrivia"] = 12] = "LineCommentTrivia";
		SyntaxKind[SyntaxKind["BlockCommentTrivia"] = 13] = "BlockCommentTrivia";
		SyntaxKind[SyntaxKind["LineBreakTrivia"] = 14] = "LineBreakTrivia";
		SyntaxKind[SyntaxKind["Trivia"] = 15] = "Trivia";
		SyntaxKind[SyntaxKind["Unknown"] = 16] = "Unknown";
		SyntaxKind[SyntaxKind["EOF"] = 17] = "EOF";
	})(SyntaxKind || (SyntaxKind = {}));
	parse = parse$1;
	visit = visit$1;
	(function(ParseErrorCode) {
		ParseErrorCode[ParseErrorCode["InvalidSymbol"] = 1] = "InvalidSymbol";
		ParseErrorCode[ParseErrorCode["InvalidNumberFormat"] = 2] = "InvalidNumberFormat";
		ParseErrorCode[ParseErrorCode["PropertyNameExpected"] = 3] = "PropertyNameExpected";
		ParseErrorCode[ParseErrorCode["ValueExpected"] = 4] = "ValueExpected";
		ParseErrorCode[ParseErrorCode["ColonExpected"] = 5] = "ColonExpected";
		ParseErrorCode[ParseErrorCode["CommaExpected"] = 6] = "CommaExpected";
		ParseErrorCode[ParseErrorCode["CloseBraceExpected"] = 7] = "CloseBraceExpected";
		ParseErrorCode[ParseErrorCode["CloseBracketExpected"] = 8] = "CloseBracketExpected";
		ParseErrorCode[ParseErrorCode["EndOfFileExpected"] = 9] = "EndOfFileExpected";
		ParseErrorCode[ParseErrorCode["InvalidCommentToken"] = 10] = "InvalidCommentToken";
		ParseErrorCode[ParseErrorCode["UnexpectedEndOfComment"] = 11] = "UnexpectedEndOfComment";
		ParseErrorCode[ParseErrorCode["UnexpectedEndOfString"] = 12] = "UnexpectedEndOfString";
		ParseErrorCode[ParseErrorCode["UnexpectedEndOfNumber"] = 13] = "UnexpectedEndOfNumber";
		ParseErrorCode[ParseErrorCode["InvalidUnicode"] = 14] = "InvalidUnicode";
		ParseErrorCode[ParseErrorCode["InvalidEscapeCharacter"] = 15] = "InvalidEscapeCharacter";
		ParseErrorCode[ParseErrorCode["InvalidCharacter"] = 16] = "InvalidCharacter";
	})(ParseErrorCode || (ParseErrorCode = {}));
}));
//#endregion
//#region node_modules/vscode-uri/lib/esm/index.mjs
var LIB, URI, Utils;
var init_esm = __esmMin((() => {
	(() => {
		"use strict";
		var t = { 975: (t) => {
			function e(t) {
				if ("string" != typeof t) throw new TypeError("Path must be a string. Received " + JSON.stringify(t));
			}
			function r(t, e) {
				for (var r, n = "", i = 0, o = -1, s = 0, h = 0; h <= t.length; ++h) {
					if (h < t.length) r = t.charCodeAt(h);
					else {
						if (47 === r) break;
						r = 47;
					}
					if (47 === r) {
						if (o === h - 1 || 1 === s);
						else if (o !== h - 1 && 2 === s) {
							if (n.length < 2 || 2 !== i || 46 !== n.charCodeAt(n.length - 1) || 46 !== n.charCodeAt(n.length - 2)) {
								if (n.length > 2) {
									var a = n.lastIndexOf("/");
									if (a !== n.length - 1) {
										-1 === a ? (n = "", i = 0) : i = (n = n.slice(0, a)).length - 1 - n.lastIndexOf("/"), o = h, s = 0;
										continue;
									}
								} else if (2 === n.length || 1 === n.length) {
									n = "", i = 0, o = h, s = 0;
									continue;
								}
							}
							e && (n.length > 0 ? n += "/.." : n = "..", i = 2);
						} else n.length > 0 ? n += "/" + t.slice(o + 1, h) : n = t.slice(o + 1, h), i = h - o - 1;
						o = h, s = 0;
					} else 46 === r && -1 !== s ? ++s : s = -1;
				}
				return n;
			}
			var n = {
				resolve: function() {
					for (var t, n = "", i = !1, o = arguments.length - 1; o >= -1 && !i; o--) {
						var s;
						o >= 0 ? s = arguments[o] : (void 0 === t && (t = process.cwd()), s = t), e(s), 0 !== s.length && (n = s + "/" + n, i = 47 === s.charCodeAt(0));
					}
					return n = r(n, !i), i ? n.length > 0 ? "/" + n : "/" : n.length > 0 ? n : ".";
				},
				normalize: function(t) {
					if (e(t), 0 === t.length) return ".";
					var n = 47 === t.charCodeAt(0), i = 47 === t.charCodeAt(t.length - 1);
					return 0 !== (t = r(t, !n)).length || n || (t = "."), t.length > 0 && i && (t += "/"), n ? "/" + t : t;
				},
				isAbsolute: function(t) {
					return e(t), t.length > 0 && 47 === t.charCodeAt(0);
				},
				join: function() {
					if (0 === arguments.length) return ".";
					for (var t, r = 0; r < arguments.length; ++r) {
						var i = arguments[r];
						e(i), i.length > 0 && (void 0 === t ? t = i : t += "/" + i);
					}
					return void 0 === t ? "." : n.normalize(t);
				},
				relative: function(t, r) {
					if (e(t), e(r), t === r) return "";
					if ((t = n.resolve(t)) === (r = n.resolve(r))) return "";
					for (var i = 1; i < t.length && 47 === t.charCodeAt(i); ++i);
					for (var o = t.length, s = o - i, h = 1; h < r.length && 47 === r.charCodeAt(h); ++h);
					for (var a = r.length - h, c = s < a ? s : a, f = -1, u = 0; u <= c; ++u) {
						if (u === c) {
							if (a > c) {
								if (47 === r.charCodeAt(h + u)) return r.slice(h + u + 1);
								if (0 === u) return r.slice(h + u);
							} else s > c && (47 === t.charCodeAt(i + u) ? f = u : 0 === u && (f = 0));
							break;
						}
						var l = t.charCodeAt(i + u);
						if (l !== r.charCodeAt(h + u)) break;
						47 === l && (f = u);
					}
					var g = "";
					for (u = i + f + 1; u <= o; ++u) u !== o && 47 !== t.charCodeAt(u) || (0 === g.length ? g += ".." : g += "/..");
					return g.length > 0 ? g + r.slice(h + f) : (h += f, 47 === r.charCodeAt(h) && ++h, r.slice(h));
				},
				_makeLong: function(t) {
					return t;
				},
				dirname: function(t) {
					if (e(t), 0 === t.length) return ".";
					for (var r = t.charCodeAt(0), n = 47 === r, i = -1, o = !0, s = t.length - 1; s >= 1; --s) if (47 === (r = t.charCodeAt(s))) {
						if (!o) {
							i = s;
							break;
						}
					} else o = !1;
					return -1 === i ? n ? "/" : "." : n && 1 === i ? "//" : t.slice(0, i);
				},
				basename: function(t, r) {
					if (void 0 !== r && "string" != typeof r) throw new TypeError("\"ext\" argument must be a string");
					e(t);
					var n, i = 0, o = -1, s = !0;
					if (void 0 !== r && r.length > 0 && r.length <= t.length) {
						if (r.length === t.length && r === t) return "";
						var h = r.length - 1, a = -1;
						for (n = t.length - 1; n >= 0; --n) {
							var c = t.charCodeAt(n);
							if (47 === c) {
								if (!s) {
									i = n + 1;
									break;
								}
							} else -1 === a && (s = !1, a = n + 1), h >= 0 && (c === r.charCodeAt(h) ? -1 == --h && (o = n) : (h = -1, o = a));
						}
						return i === o ? o = a : -1 === o && (o = t.length), t.slice(i, o);
					}
					for (n = t.length - 1; n >= 0; --n) if (47 === t.charCodeAt(n)) {
						if (!s) {
							i = n + 1;
							break;
						}
					} else -1 === o && (s = !1, o = n + 1);
					return -1 === o ? "" : t.slice(i, o);
				},
				extname: function(t) {
					e(t);
					for (var r = -1, n = 0, i = -1, o = !0, s = 0, h = t.length - 1; h >= 0; --h) {
						var a = t.charCodeAt(h);
						if (47 !== a) -1 === i && (o = !1, i = h + 1), 46 === a ? -1 === r ? r = h : 1 !== s && (s = 1) : -1 !== r && (s = -1);
						else if (!o) {
							n = h + 1;
							break;
						}
					}
					return -1 === r || -1 === i || 0 === s || 1 === s && r === i - 1 && r === n + 1 ? "" : t.slice(r, i);
				},
				format: function(t) {
					if (null === t || "object" != typeof t) throw new TypeError("The \"pathObject\" argument must be of type Object. Received type " + typeof t);
					return function(t, e) {
						var r = e.dir || e.root, n = e.base || (e.name || "") + (e.ext || "");
						return r ? r === e.root ? r + n : r + "/" + n : n;
					}(0, t);
				},
				parse: function(t) {
					e(t);
					var r = {
						root: "",
						dir: "",
						base: "",
						ext: "",
						name: ""
					};
					if (0 === t.length) return r;
					var n, i = t.charCodeAt(0), o = 47 === i;
					o ? (r.root = "/", n = 1) : n = 0;
					for (var s = -1, h = 0, a = -1, c = !0, f = t.length - 1, u = 0; f >= n; --f) if (47 !== (i = t.charCodeAt(f))) -1 === a && (c = !1, a = f + 1), 46 === i ? -1 === s ? s = f : 1 !== u && (u = 1) : -1 !== s && (u = -1);
					else if (!c) {
						h = f + 1;
						break;
					}
					return -1 === s || -1 === a || 0 === u || 1 === u && s === a - 1 && s === h + 1 ? -1 !== a && (r.base = r.name = 0 === h && o ? t.slice(1, a) : t.slice(h, a)) : (0 === h && o ? (r.name = t.slice(1, s), r.base = t.slice(1, a)) : (r.name = t.slice(h, s), r.base = t.slice(h, a)), r.ext = t.slice(s, a)), h > 0 ? r.dir = t.slice(0, h - 1) : o && (r.dir = "/"), r;
				},
				sep: "/",
				delimiter: ":",
				win32: null,
				posix: null
			};
			n.posix = n, t.exports = n;
		} }, e = {};
		function r(n) {
			var i = e[n];
			if (void 0 !== i) return i.exports;
			var o = e[n] = { exports: {} };
			return t[n](o, o.exports, r), o.exports;
		}
		r.d = (t, e) => {
			for (var n in e) r.o(e, n) && !r.o(t, n) && Object.defineProperty(t, n, {
				enumerable: !0,
				get: e[n]
			});
		}, r.o = (t, e) => Object.prototype.hasOwnProperty.call(t, e), r.r = (t) => {
			"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, { value: "Module" }), Object.defineProperty(t, "__esModule", { value: !0 });
		};
		var n = {};
		let i;
		if (r.r(n), r.d(n, {
			URI: () => l,
			Utils: () => I
		}), "object" == typeof process) i = "win32" === process.platform;
		else if ("object" == typeof navigator) i = navigator.userAgent.indexOf("Windows") >= 0;
		const o = /^\w[\w\d+.-]*$/, s = /^\//, h = /^\/\//;
		function a(t, e) {
			if (!t.scheme && e) throw new Error(`[UriError]: Scheme is missing: {scheme: "", authority: "${t.authority}", path: "${t.path}", query: "${t.query}", fragment: "${t.fragment}"}`);
			if (t.scheme && !o.test(t.scheme)) throw new Error("[UriError]: Scheme contains illegal characters.");
			if (t.path) {
				if (t.authority) {
					if (!s.test(t.path)) throw new Error("[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character");
				} else if (h.test(t.path)) throw new Error("[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")");
			}
		}
		const c = "", f = "/", u = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
		class l {
			static isUri(t) {
				return t instanceof l || !!t && "string" == typeof t.authority && "string" == typeof t.fragment && "string" == typeof t.path && "string" == typeof t.query && "string" == typeof t.scheme && "string" == typeof t.fsPath && "function" == typeof t.with && "function" == typeof t.toString;
			}
			scheme;
			authority;
			path;
			query;
			fragment;
			constructor(t, e, r, n, i, o = !1) {
				"object" == typeof t ? (this.scheme = t.scheme || c, this.authority = t.authority || c, this.path = t.path || c, this.query = t.query || c, this.fragment = t.fragment || c) : (this.scheme = function(t, e) {
					return t || e ? t : "file";
				}(t, o), this.authority = e || c, this.path = function(t, e) {
					switch (t) {
						case "https":
						case "http":
						case "file": e ? e[0] !== f && (e = f + e) : e = f;
					}
					return e;
				}(this.scheme, r || c), this.query = n || c, this.fragment = i || c, a(this, o));
			}
			get fsPath() {
				return v(this, !1);
			}
			with(t) {
				if (!t) return this;
				let { scheme: e, authority: r, path: n, query: i, fragment: o } = t;
				return void 0 === e ? e = this.scheme : null === e && (e = c), void 0 === r ? r = this.authority : null === r && (r = c), void 0 === n ? n = this.path : null === n && (n = c), void 0 === i ? i = this.query : null === i && (i = c), void 0 === o ? o = this.fragment : null === o && (o = c), e === this.scheme && r === this.authority && n === this.path && i === this.query && o === this.fragment ? this : new d(e, r, n, i, o);
			}
			static parse(t, e = !1) {
				const r = u.exec(t);
				return r ? new d(r[2] || c, w(r[4] || c), w(r[5] || c), w(r[7] || c), w(r[9] || c), e) : new d(c, c, c, c, c);
			}
			static file(t) {
				let e = c;
				if (i && (t = t.replace(/\\/g, f)), t[0] === f && t[1] === f) {
					const r = t.indexOf(f, 2);
					-1 === r ? (e = t.substring(2), t = f) : (e = t.substring(2, r), t = t.substring(r) || f);
				}
				return new d("file", e, t, c, c);
			}
			static from(t) {
				const e = new d(t.scheme, t.authority, t.path, t.query, t.fragment);
				return a(e, !0), e;
			}
			toString(t = !1) {
				return b(this, t);
			}
			toJSON() {
				return this;
			}
			static revive(t) {
				if (t) {
					if (t instanceof l) return t;
					{
						const e = new d(t);
						return e._formatted = t.external, e._fsPath = t._sep === g ? t.fsPath : null, e;
					}
				}
				return t;
			}
		}
		const g = i ? 1 : void 0;
		class d extends l {
			_formatted = null;
			_fsPath = null;
			get fsPath() {
				return this._fsPath || (this._fsPath = v(this, !1)), this._fsPath;
			}
			toString(t = !1) {
				return t ? b(this, !0) : (this._formatted || (this._formatted = b(this, !1)), this._formatted);
			}
			toJSON() {
				const t = { $mid: 1 };
				return this._fsPath && (t.fsPath = this._fsPath, t._sep = g), this._formatted && (t.external = this._formatted), this.path && (t.path = this.path), this.scheme && (t.scheme = this.scheme), this.authority && (t.authority = this.authority), this.query && (t.query = this.query), this.fragment && (t.fragment = this.fragment), t;
			}
		}
		const p = {
			58: "%3A",
			47: "%2F",
			63: "%3F",
			35: "%23",
			91: "%5B",
			93: "%5D",
			64: "%40",
			33: "%21",
			36: "%24",
			38: "%26",
			39: "%27",
			40: "%28",
			41: "%29",
			42: "%2A",
			43: "%2B",
			44: "%2C",
			59: "%3B",
			61: "%3D",
			32: "%20"
		};
		function m(t, e, r) {
			let n, i = -1;
			for (let o = 0; o < t.length; o++) {
				const s = t.charCodeAt(o);
				if (s >= 97 && s <= 122 || s >= 65 && s <= 90 || s >= 48 && s <= 57 || 45 === s || 46 === s || 95 === s || 126 === s || e && 47 === s || r && 91 === s || r && 93 === s || r && 58 === s) -1 !== i && (n += encodeURIComponent(t.substring(i, o)), i = -1), void 0 !== n && (n += t.charAt(o));
				else {
					void 0 === n && (n = t.substr(0, o));
					const e = p[s];
					void 0 !== e ? (-1 !== i && (n += encodeURIComponent(t.substring(i, o)), i = -1), n += e) : -1 === i && (i = o);
				}
			}
			return -1 !== i && (n += encodeURIComponent(t.substring(i))), void 0 !== n ? n : t;
		}
		function y(t) {
			let e;
			for (let r = 0; r < t.length; r++) {
				const n = t.charCodeAt(r);
				35 === n || 63 === n ? (void 0 === e && (e = t.substr(0, r)), e += p[n]) : void 0 !== e && (e += t[r]);
			}
			return void 0 !== e ? e : t;
		}
		function v(t, e) {
			let r;
			return r = t.authority && t.path.length > 1 && "file" === t.scheme ? `//${t.authority}${t.path}` : 47 === t.path.charCodeAt(0) && (t.path.charCodeAt(1) >= 65 && t.path.charCodeAt(1) <= 90 || t.path.charCodeAt(1) >= 97 && t.path.charCodeAt(1) <= 122) && 58 === t.path.charCodeAt(2) ? e ? t.path.substr(1) : t.path[1].toLowerCase() + t.path.substr(2) : t.path, i && (r = r.replace(/\//g, "\\")), r;
		}
		function b(t, e) {
			const r = e ? y : m;
			let n = "", { scheme: i, authority: o, path: s, query: h, fragment: a } = t;
			if (i && (n += i, n += ":"), (o || "file" === i) && (n += f, n += f), o) {
				let t = o.indexOf("@");
				if (-1 !== t) {
					const e = o.substr(0, t);
					o = o.substr(t + 1), t = e.lastIndexOf(":"), -1 === t ? n += r(e, !1, !1) : (n += r(e.substr(0, t), !1, !1), n += ":", n += r(e.substr(t + 1), !1, !0)), n += "@";
				}
				o = o.toLowerCase(), t = o.lastIndexOf(":"), -1 === t ? n += r(o, !1, !0) : (n += r(o.substr(0, t), !1, !0), n += o.substr(t));
			}
			if (s) {
				if (s.length >= 3 && 47 === s.charCodeAt(0) && 58 === s.charCodeAt(2)) {
					const t = s.charCodeAt(1);
					t >= 65 && t <= 90 && (s = `/${String.fromCharCode(t + 32)}:${s.substr(3)}`);
				} else if (s.length >= 2 && 58 === s.charCodeAt(1)) {
					const t = s.charCodeAt(0);
					t >= 65 && t <= 90 && (s = `${String.fromCharCode(t + 32)}:${s.substr(2)}`);
				}
				n += r(s, !0, !1);
			}
			return h && (n += "?", n += r(h, !1, !1)), a && (n += "#", n += e ? a : m(a, !1, !1)), n;
		}
		function C(t) {
			try {
				return decodeURIComponent(t);
			} catch {
				return t.length > 3 ? t.substr(0, 3) + C(t.substr(3)) : t;
			}
		}
		const A = /(%[0-9A-Za-z][0-9A-Za-z])+/g;
		function w(t) {
			return t.match(A) ? t.replace(A, ((t) => C(t))) : t;
		}
		var x = r(975);
		const P = x.posix || x, _ = "/";
		var I;
		(function(t) {
			t.joinPath = function(t, ...e) {
				return t.with({ path: P.join(t.path, ...e) });
			}, t.resolvePath = function(t, ...e) {
				let r = t.path, n = !1;
				r[0] !== _ && (r = _ + r, n = !0);
				let i = P.resolve(r, ...e);
				return n && i[0] === _ && !t.authority && (i = i.substring(1)), t.with({ path: i });
			}, t.dirname = function(t) {
				if (0 === t.path.length || t.path === _) return t;
				let e = P.dirname(t.path);
				return 1 === e.length && 46 === e.charCodeAt(0) && (e = ""), t.with({ path: e });
			}, t.basename = function(t) {
				return P.basename(t.path);
			}, t.extname = function(t) {
				return P.extname(t.path);
			};
		})(I || (I = {})), LIB = n;
	})();
	({URI, Utils} = LIB);
}));
//#endregion
//#region src/util/platform.ts
function getPlatform(process) {
	let { platform } = process;
	if (platform === "win32") return 3;
	if (platform === "darwin") return 1;
	if (platform === "linux") return 2;
	return 4;
}
var _platform, platform, isWindows, isMacintosh;
var init_platform = __esmMin((() => {
	_platform = getPlatform(process);
	platform = _platform;
	isWindows = _platform === 3;
	isMacintosh = _platform === 1;
}));
//#endregion
//#region src/util/fs.ts
function watchFile(filepath, onChange, immediate = false) {
	let callback = debounce(onChange, 100);
	try {
		let watcher = fs$6.watch(filepath, {
			persistent: true,
			recursive: false,
			encoding: "utf8"
		}, () => {
			callback();
		});
		if (immediate) setTimeout(onChange, 10);
		return import_main$1.Disposable.create(() => {
			callback.clear();
			watcher.close();
		});
	} catch (e) {
		return import_main$1.Disposable.create(() => {
			callback.clear();
		});
	}
}
function loadJson$1(filepath) {
	try {
		let errors = [];
		let data = parse(fs$6.readFileSync(filepath, "utf8"), errors, { allowTrailingComma: true });
		if (errors.length > 0) logger$51.error(`Error on parse json file ${filepath}`, errors);
		return data ?? {};
	} catch (e) {
		return {};
	}
}
function writeJson(filepath, obj) {
	let dir = path$5.dirname(filepath);
	if (!fs$6.existsSync(dir)) {
		fs$6.mkdirSync(dir, { recursive: true });
		logger$51.info(`Creating directory ${dir}`);
	}
	fs$6.writeFileSync(filepath, JSON.stringify(toObject(obj), null, 2), "utf8");
}
async function statAsync(filepath) {
	let stat = null;
	try {
		stat = await fs$6.promises.stat(filepath);
	} catch (e) {}
	return stat;
}
function isDirectory(filepath) {
	if (!filepath || !path$5.isAbsolute(filepath) || !fs$6.existsSync(filepath)) return false;
	return fs$6.statSync(filepath).isDirectory();
}
async function remove(filepath) {
	if (!filepath) return;
	try {
		await fs$6.promises.rm(filepath, {
			force: true,
			recursive: true
		});
	} catch (e) {
		return;
	}
}
async function getFileType(filepath) {
	try {
		const stat = await fs$6.promises.lstat(filepath);
		if (stat.isFile()) return 1;
		if (stat.isDirectory()) return 2;
		if (stat.isSymbolicLink()) return 64;
		return 0;
	} catch (e) {
		return;
	}
}
async function isGitIgnored(fullpath) {
	if (!fullpath) return false;
	let stat = await statAsync(fullpath);
	if (!stat || !stat.isFile()) return false;
	let root = null;
	try {
		let { stdout } = await (0, util.promisify)(exec$1)("git rev-parse --show-toplevel", { cwd: path$5.dirname(fullpath) });
		root = stdout.trim();
	} catch (e) {}
	if (!root) return false;
	let file = path$5.relative(root, fullpath);
	try {
		let { stdout } = await (0, util.promisify)(exec$1)(`git check-ignore ${file}`, { cwd: root });
		return stdout.trim() == file;
	} catch (e) {}
	return false;
}
function isFolderIgnored(folder, ignored) {
	if (isFalsyOrEmpty(ignored)) return false;
	return ignored.some((p) => sameFile(p, folder) || minimatch(folder, p, { dot: true }));
}
function resolveRoot(folder, subs, cwd, bottomup = false, checkCwd = true, ignored = []) {
	let dir = normalizeFilePath(folder);
	if (checkCwd && cwd && isParentFolder(cwd, dir, true) && !isFolderIgnored(cwd, ignored) && inDirectory(cwd, subs)) return cwd;
	let parts = dir.split(path$5.sep);
	if (bottomup) {
		while (parts.length > 0) {
			let dir = parts.join(path$5.sep);
			if (!isFolderIgnored(dir, ignored) && inDirectory(dir, subs)) return dir;
			parts.pop();
		}
		return null;
	} else {
		let curr = [parts.shift()];
		for (let part of parts) {
			curr.push(part);
			let dir = curr.join(path$5.sep);
			if (!isFolderIgnored(dir, ignored) && inDirectory(dir, subs)) return dir;
		}
		return null;
	}
}
function checkFolder(dir, patterns, token) {
	return new Promise(async (resolve, reject) => {
		if (isFalsyOrEmpty(patterns)) return resolve(false);
		const ac = new AbortController();
		if (token) token.onCancellationRequested(() => {
			ac.abort();
			reject(new CancellationError());
		});
		let find = false;
		let pattern = patterns.length == 1 ? patterns[0] : `{${patterns.join(",")}}`;
		let gl = new glob.Glob(pattern, {
			nosort: true,
			signal: ac.signal,
			ignore: ["node_modules/**", ".git/**"],
			dot: true,
			cwd: dir,
			nodir: true,
			absolute: false
		});
		try {
			for await (const _file of gl) {
				find = true;
				break;
			}
		} catch (e) {
			logger$51.error(`Error on glob "${pattern}"`, dir, e);
		}
		resolve(find);
	});
}
function inDirectory(dir, subs) {
	try {
		let files = fs$6.readdirSync(dir);
		for (let pattern of subs) if (pattern.includes("*") ? minimatch.match(files, pattern, {
			nobrace: true,
			noext: true,
			nocomment: true,
			nonegate: true,
			dot: true
		}).length !== 0 : files.includes(pattern)) return true;
	} catch (e) {}
	return false;
}
/**
* Find a matched file inside directory.
*/
function findMatch(dir, subs) {
	try {
		let files = fs$6.readdirSync(dir);
		for (let pattern of subs) if (pattern.includes("*")) {
			let filtered = files.filter(minimatch.filter(pattern, {
				nobrace: true,
				noext: true,
				nocomment: true,
				nonegate: true,
				dot: true
			}));
			if (filtered.length > 0) return filtered[0];
		} else {
			let file = files.find((s) => s === pattern);
			if (file) return file;
		}
	} catch (e) {}
}
function findUp$1(name, cwd) {
	let root = path$5.parse(cwd).root;
	let subs = toArray(name);
	while (cwd && cwd !== root) {
		let find = findMatch(cwd, subs);
		if (find) return path$5.join(cwd, find);
		cwd = path$5.dirname(cwd);
	}
	return null;
}
function readFile(fullpath, encoding) {
	return new Promise((resolve, reject) => {
		fs$6.readFile(fullpath, encoding, (err, content) => {
			if (err) reject(err);
			resolve(content);
		});
	});
}
function getFileLineCount(filepath) {
	let i;
	let count = 0;
	return new Promise((resolve, reject) => {
		fs$6.createReadStream(filepath).on("error", (e) => reject(e)).on("data", (chunk) => {
			for (i = 0; i < chunk.length; ++i) if (chunk[i] == 10) count++;
		}).on("end", () => resolve(count));
	});
}
function readFileLines(fullpath, start, end) {
	if (!fs$6.existsSync(fullpath)) return Promise.reject(/* @__PURE__ */ new Error(`file does not exist: ${fullpath}`));
	let res = [];
	const input = fs$6.createReadStream(fullpath, { encoding: "utf8" });
	const rl = readline.createInterface({
		input,
		crlfDelay: Infinity,
		terminal: false
	});
	let n = 0;
	return new Promise((resolve, reject) => {
		rl.on("line", (line) => {
			if (n >= start && n <= end) res.push(line);
			if (n == end) rl.close();
			n = n + 1;
		});
		rl.on("close", () => {
			resolve(res);
			input.close();
		});
		rl.on("error", reject);
	});
}
function readFileLine(fullpath, count) {
	if (!fs$6.existsSync(fullpath)) return Promise.reject(/* @__PURE__ */ new Error(`file does not exist: ${fullpath}`));
	const input = fs$6.createReadStream(fullpath, { encoding: "utf8" });
	const rl = readline.createInterface({
		input,
		crlfDelay: Infinity,
		terminal: false
	});
	let n = 0;
	let result = "";
	return new Promise((resolve, reject) => {
		rl.on("line", (line) => {
			if (n == count) {
				result = line;
				rl.close();
				input.close();
			}
			n = n + 1;
		});
		rl.on("close", () => {
			resolve(result);
		});
		rl.on("error", reject);
	});
}
async function lineToLocation(fsPath, match, text) {
	let uri = URI.file(fsPath).toString();
	if (!fs$6.existsSync(fsPath)) return Location.create(uri, Range.create(0, 0, 0, 0));
	const rl = readline.createInterface({ input: fs$6.createReadStream(fsPath, { encoding: "utf8" }) });
	let n = 0;
	let line = await new Promise((resolve) => {
		let find = false;
		rl.on("line", (line) => {
			if (line.includes(match)) {
				find = true;
				rl.removeAllListeners();
				rl.close();
				resolve(line);
				return;
			}
			n = n + 1;
		});
		rl.on("close", () => {
			if (!find) resolve(void 0);
		});
	});
	if (line != null) {
		let character = text == null ? -1 : smartcaseIndex(text, line);
		if (character == -1) character = line.match(/^\s*/)[0].length;
		let end = Position.create(n, character + (text ? text.length : 0));
		return Location.create(uri, Range.create(Position.create(n, character), end));
	}
	return Location.create(uri, Range.create(0, 0, 0, 0));
}
function sameFile(fullpath, other, caseInsensitive) {
	caseInsensitive = typeof caseInsensitive == "boolean" ? caseInsensitive : isWindows || isMacintosh;
	if (!fullpath || !other) return false;
	fullpath = normalizeFilePath(fullpath);
	other = normalizeFilePath(other);
	if (caseInsensitive) return fullpath.toLowerCase() === other.toLowerCase();
	return fullpath === other;
}
function fileStartsWith(dir, pdir, caseInsensitive = isWindows || isMacintosh) {
	if (caseInsensitive) return dir.toLowerCase().startsWith(pdir.toLowerCase());
	return dir.startsWith(pdir);
}
async function writeFile(fullpath, content) {
	await fs$6.promises.writeFile(fullpath, content, { encoding: "utf8" });
}
function isFile(uri) {
	return uri.startsWith("file:");
}
function normalizeFilePath(filepath) {
	return URI.file(path$5.resolve(path$5.normalize(filepath))).fsPath;
}
function isParentFolder(folder, filepath, checkEqual = false) {
	let pdir = normalizeFilePath(folder);
	let dir = normalizeFilePath(filepath);
	if (sameFile(pdir, dir)) return checkEqual ? true : false;
	return fileStartsWith(dir, pdir) && dir[pdir.length] == path$5.sep;
}
var logger$51, exec$1, FileType;
var init_fs = __esmMin((() => {
	init_main$1();
	init_main$2();
	init_esm();
	init_logger$2();
	init_node();
	init_protocol();
	init_array();
	init_errors();
	init_object();
	init_platform();
	init_string$1();
	logger$51 = createLogger$1("util-fs");
	exec$1 = child_process$1.exec;
	FileType = /* @__PURE__ */ function(FileType) {
		/**
		* The file type is unknown.
		*/
		FileType[FileType["Unknown"] = 0] = "Unknown";
		/**
		* A regular file.
		*/
		FileType[FileType["File"] = 1] = "File";
		/**
		* A directory.
		*/
		FileType[FileType["Directory"] = 2] = "Directory";
		/**
		* A symbolic link to a file.
		*/
		FileType[FileType["SymbolicLink"] = 64] = "SymbolicLink";
		return FileType;
	}({});
}));
//#endregion
//#region src/model/mru.ts
var Mru;
var init_mru = __esmMin((() => {
	init_array();
	init_constants();
	init_fs();
	init_node();
	Mru = class {
		maximum;
		file;
		/**
		* @param {string} name unique name
		* @param {string} base? optional directory name, default to data root of coc.nvim
		*/
		constructor(name, base, maximum = 5e3) {
			this.maximum = maximum;
			this.file = path$5.join(base || dataHome, name);
			let dir = path$5.dirname(this.file);
			fs$6.mkdirSync(dir, { recursive: true });
		}
		/**
		* Load lines from mru file
		*/
		async load() {
			try {
				let lines = await readFileLines(this.file, 0, this.maximum);
				if (lines.length > this.maximum) {
					let newLines = lines.slice(0, this.maximum);
					await writeFile(this.file, newLines.join("\n"));
					return distinct(newLines);
				}
				return distinct(lines);
			} catch (e) {
				return [];
			}
		}
		loadSync() {
			try {
				let content = fs$6.readFileSync(this.file, "utf8");
				content = content.trim();
				return content.length ? content.trim().split("\n") : [];
			} catch (e) {
				return [];
			}
		}
		/**
		* Add item to mru file.
		*/
		async add(item) {
			let buf;
			try {
				buf = fs$6.readFileSync(this.file);
				if (buf[0] === 239 && buf[1] === 187 && buf[2] === 191) buf = buf.slice(3);
				buf = Buffer.concat([
					Buffer.from(item, "utf8"),
					new Uint8Array([10]),
					buf
				]);
			} catch (e) {
				buf = Buffer.concat([Buffer.from(item, "utf8"), new Uint8Array([10])]);
			}
			await fs$6.promises.writeFile(this.file, buf);
		}
		/**
		* Remove item from mru file.
		*/
		async remove(item) {
			let items = await this.load();
			let len = items.length;
			items = items.filter((s) => s != item);
			if (items.length != len) await writeFile(this.file, items.join("\n"));
		}
		/**
		* Remove the data file.
		*/
		async clean() {
			try {
				await fs$6.promises.unlink(this.file);
			} catch (e) {}
		}
	};
}));
//#endregion
//#region src/configuration/types.ts
var ConfigurationUpdateTarget;
var init_types$1 = __esmMin((() => {
	ConfigurationUpdateTarget = /* @__PURE__ */ function(ConfigurationUpdateTarget) {
		ConfigurationUpdateTarget[ConfigurationUpdateTarget["Global"] = 1] = "Global";
		ConfigurationUpdateTarget[ConfigurationUpdateTarget["Workspace"] = 2] = "Workspace";
		ConfigurationUpdateTarget[ConfigurationUpdateTarget["WorkspaceFolder"] = 3] = "WorkspaceFolder";
		return ConfigurationUpdateTarget;
	}({});
}));
//#endregion
//#region src/util/registry.ts
function convertScope(key, scope, defaultScope) {
	if (sourcePrefixes.some((p) => key.startsWith(p))) return 1;
	if (scope === "application") return 1;
	if (scope === "window") return 2;
	if (scope === "resource" || scope === "machine-overridable") return 3;
	if (scope === "language-overridable") return 4;
	return defaultScope;
}
/**
* Properties to schema
*/
function convertProperties(properties, defaultScope = 2) {
	let obj = {};
	for (let [key, def] of Object.entries(toObject(properties))) {
		let data = deepClone(def);
		data.scope = convertScope(key, def.scope, defaultScope);
		obj[key] = data;
	}
	return obj;
}
var RegistryImpl, Registry, sourcePrefixes;
var init_registry$1 = __esmMin((() => {
	init_errors();
	init_is();
	init_object();
	RegistryImpl = class {
		data = /* @__PURE__ */ new Map();
		add(id, data) {
			assert$3(typeof id === "string");
			assert$3(objectLiteral(data));
			assert$3(!this.data.has(id));
			this.data.set(id, data);
		}
		knows(id) {
			return this.data.has(id);
		}
		as(id) {
			return this.data.get(id) || null;
		}
	};
	Registry = new RegistryImpl();
	sourcePrefixes = ["coc.source.", "list.source."];
}));
//#endregion
//#region src/util/extensionRegistry.ts
function getExtensionDefinitions() {
	let obj = {};
	for (let extensionInfo of extensionRegistry$4.getExtensions().extensions) {
		let definitions = extensionInfo.definitions;
		Object.entries(toObject(definitions)).forEach(([key, val]) => {
			obj[key] = val;
		});
	}
	return obj;
}
function validRootPattern(rootPattern) {
	return rootPattern && typeof rootPattern.filetype === "string" && !isFalsyOrEmpty(rootPattern.patterns);
}
function validCommandContribution(cmd) {
	return cmd && typeof cmd.command === "string" && typeof cmd.title === "string";
}
function getProperties(configuration) {
	let obj = {};
	if (Array.isArray(configuration)) for (let item of configuration) Object.assign(obj, toObject(item["properties"]));
	else if (objectLiteral(configuration["properties"])) obj = configuration["properties"];
	return obj;
}
/**
* Get extension name from error stack
*/
function parseExtensionName(stack, level = 2) {
	let lines = toText(stack).split(/\r?\n/).slice(level);
	if (lines.length === 0) return void 0;
	for (let line of lines) {
		let filepath;
		line = line.replace(/^\s*at\s*/, "");
		if (line.endsWith(")")) {
			let ms = line.match(/(\((.*?):\d+:\d+\))$/);
			if (ms) filepath = ms[2];
		} else {
			let ms = line.match(/(.*?):\d+:\d+$/);
			if (ms) filepath = ms[1];
		}
		if (!filepath || isParentFolder(pluginRoot, filepath)) continue;
		let find = extensionRegistry$4.resolveExtension(filepath);
		if (find) return find.name;
	}
	return "coc.nvim";
}
var Extensions$3, ExtensionRegistry, extensionRegistry$4;
var init_extensionRegistry = __esmMin((() => {
	init_array();
	init_constants();
	init_fs();
	init_is();
	init_node();
	init_object();
	init_registry$1();
	init_string$1();
	Extensions$3 = { ExtensionContribution: "base.contributions.extensions" };
	ExtensionRegistry = class {
		extensionsById;
		constructor() {
			this.extensionsById = /* @__PURE__ */ new Map();
		}
		resolveExtension(filepath) {
			for (let item of this.extensionsById.values()) {
				if (item.filepath && sameFile(item.filepath, filepath)) return item;
				if (!item.name.startsWith("single-") && fs$6.existsSync(item.directory) && isParentFolder(fs$6.realpathSync(item.directory), filepath, false)) return item;
			}
		}
		get onCommands() {
			let res = [];
			for (let item of this.extensionsById.values()) {
				let { commands, onCommands } = item;
				for (let cmd of onCommands) if (typeof cmd === "string") {
					let find = commands.find((o) => o.command === cmd);
					let title = find == null ? "" : find.title;
					res.push({
						id: cmd,
						title
					});
				}
			}
			return res;
		}
		getCommandTitle(id) {
			for (let item of this.extensionsById.values()) for (let cmd of toArray(item.commands)) if (cmd.command === id) return cmd.title;
		}
		get commands() {
			let res = [];
			for (let item of this.extensionsById.values()) res.push(...toArray(item.commands).filter(validCommandContribution));
			return res;
		}
		getRootPatternsByFiletype(filetype) {
			let res = [];
			for (let item of this.extensionsById.values()) for (let p of toArray(item.rootPatterns).filter(validRootPattern)) if (p.filetype === filetype) res.push(...p.patterns.filter((s) => typeof s === "string"));
			return res;
		}
		unregistExtension(id) {
			this.extensionsById.delete(id);
		}
		registerExtension(id, info) {
			this.extensionsById.set(id, info);
		}
		getExtension(id) {
			return this.extensionsById.get(id);
		}
		getExtensions() {
			return { extensions: this.extensionsById.values() };
		}
	};
	extensionRegistry$4 = new ExtensionRegistry();
	Registry.add(Extensions$3.ExtensionContribution, extensionRegistry$4);
}));
//#endregion
//#region src/commands.ts
var logger$50, CommandItem, extensionRegistry$3, CommandManager, commands_default;
var init_commands$2 = __esmMin((() => {
	init_events();
	init_logger$2();
	init_mru();
	init_array();
	init_extensionRegistry();
	init_protocol();
	init_registry$1();
	init_string$1();
	logger$50 = createLogger$1("commands");
	CommandItem = class {
		id;
		impl;
		thisArg;
		internal;
		constructor(id, impl, thisArg, internal) {
			this.id = id;
			this.impl = impl;
			this.thisArg = thisArg;
			this.internal = internal;
		}
		execute(...args) {
			let { impl, thisArg } = this;
			return impl.apply(thisArg, toArray(args));
		}
		dispose() {
			this.thisArg = null;
			this.impl = null;
		}
	};
	extensionRegistry$3 = Registry.as(Extensions$3.ExtensionContribution);
	CommandManager = class {
		commands = /* @__PURE__ */ new Map();
		titles = /* @__PURE__ */ new Map();
		mru = new Mru("commands");
		nvim;
		get commandList() {
			let res = [];
			for (let item of this.commands.values()) if (!item.internal) {
				let { id } = item;
				let title = this.titles.get(id) ?? extensionRegistry$3.getCommandTitle(id);
				res.push({
					id,
					title: toText(title)
				});
			}
			return res;
		}
		dispose() {
			for (const registration of this.commands.values()) registration.dispose();
			this.commands.clear();
		}
		execute(command) {
			return this.executeCommand(command.command, ...command.arguments ?? []);
		}
		register(command, internal, description) {
			for (const id of Array.isArray(command.id) ? command.id : [command.id]) {
				this.registerCommand(id, command.execute, command, internal);
				if (description) this.titles.set(id, description);
			}
			return command;
		}
		has(id) {
			return this.commands.has(id);
		}
		unregister(id) {
			let item = this.commands.get(id);
			if (!item) return;
			item.dispose();
			this.commands.delete(id);
		}
		/**
		* Registers a command that can be invoked via a keyboard shortcut,
		* a menu item, an action, or directly.
		*
		* Registering a command with an existing command identifier twice
		* will cause an error.
		* @param command A unique identifier for the command.
		* @param impl A command handler function.
		* @param thisArg The `this` context used when invoking the handler function.
		* @return Disposable which unregisters this command on disposal.
		*/
		registerCommand(id, impl, thisArg, internal = false) {
			if (id.startsWith("_")) internal = true;
			if (this.commands.has(id)) logger$50.warn(`Command ${id} already registered`);
			this.commands.set(id, new CommandItem(id, impl, thisArg, internal));
			return import_main$1.Disposable.create(() => {
				this.commands.delete(id);
			});
		}
		/**
		* Executes the command denoted by the given command identifier.
		*
		* * *Note 1:* When executing an editor command not all types are allowed to
		* be passed as arguments. Allowed are the primitive types `string`, `boolean`,
		* `number`, `undefined`, and `null`, as well as [`Position`](#Position), [`Range`](#Range), [`URI`](#URI) and [`Location`](#Location).
		* * *Note 2:* There are no restrictions when executing commands that have been contributed
		* by extensions.
		* @param command Identifier of the command to execute.
		* @param rest Parameters passed to the command function.
		* @return A promise that resolves to the returned value of the given command. `undefined` when
		* the command handler function doesn't return anything.
		*/
		executeCommand(command, ...rest) {
			let cmd = this.commands.get(command);
			if (!cmd) throw new Error(`Command: ${command} not found`);
			return Promise.resolve(cmd.execute.apply(cmd, rest));
		}
		/**
		* Used for user invoked command.
		*/
		async fireCommand(id, ...args) {
			await events_default.fire("Command", [id]);
			let start = Date.now();
			let res = await this.executeCommand(id, ...args);
			if (args.length == 0) await this.addRecent(id, events_default.lastChangeTs > start);
			return res;
		}
		async addRecent(cmd, repeat) {
			await this.mru.add(cmd);
			if (repeat) this.nvim.command(`silent! call repeat#set("\\<Plug>(coc-command-repeat)", -1)`, true);
		}
		async repeatCommand() {
			let first = (await this.mru.load())[0];
			if (first) {
				await this.executeCommand(first);
				await this.nvim.command(`silent! call repeat#set("\\<Plug>(coc-command-repeat)", -1)`);
			}
		}
	};
	commands_default = new CommandManager();
}));
//#endregion
//#region src/util/numbers.ts
function toNumber(n, defaultValue = 0) {
	return number(n) ? n : defaultValue;
}
function boolToNumber(val) {
	return val ? 1 : 0;
}
function clamp(value, min, max) {
	return Math.min(Math.max(value, min), max);
}
var init_numbers = __esmMin((() => {
	init_is();
}));
//#endregion
//#region src/model/outputChannel.ts
function escapeQuote(input) {
	return input.replace(/'/g, "''");
}
var BufferChannel;
var init_outputChannel = __esmMin((() => {
	BufferChannel = class {
		name;
		nvim;
		onDispose;
		lines = [""];
		_disposed = false;
		created = false;
		constructor(name, nvim, onDispose) {
			this.name = name;
			this.nvim = nvim;
			this.onDispose = onDispose;
		}
		get content() {
			return this.lines.join("\n");
		}
		_append(value) {
			let { nvim } = this;
			if (!nvim) return;
			let idx = this.lines.length - 1;
			let newlines = value.split(/\r?\n/);
			let lastline = this.lines[idx] + newlines[0];
			this.lines[idx] = lastline;
			let append = newlines.slice(1);
			this.lines = this.lines.concat(append);
			if (!this.created) return;
			nvim.pauseNotification();
			nvim.call("setbufline", [
				this.bufname,
				"$",
				lastline
			], true);
			if (append.length) nvim.call("appendbufline", [
				this.bufname,
				"$",
				append
			], true);
			nvim.resumeNotification(false, true);
		}
		append(value) {
			if (!this.validate()) return;
			this._append(value);
		}
		appendLine(value) {
			if (!this.validate()) return;
			this._append(value + "\n");
		}
		clear(keep) {
			let { nvim } = this;
			if (!this.validate() || !nvim) return;
			this.lines = keep ? this.lines.slice(-keep) : [];
			if (!this.created) return;
			nvim.pauseNotification();
			nvim.call("deletebufline", [
				this.bufname,
				1,
				"$"
			], true);
			if (this.lines.length) nvim.call("appendbufline", [
				this.bufname,
				"$",
				this.lines
			], true);
			nvim.resumeNotification(true, true);
		}
		hide() {
			this.created = false;
			let name = escapeQuote(this.bufname);
			if (this.nvim) this.nvim.command(`exe 'silent! bwipeout! '.fnameescape('${name}')`, true);
		}
		get bufname() {
			return `output:///${encodeURI(this.name)}`;
		}
		show(preserveFocus, cmd = "vs") {
			let { nvim } = this;
			if (!nvim) return;
			let name = escapeQuote(this.bufname);
			nvim.pauseNotification();
			nvim.command(`exe '${cmd} '.fnameescape('${name}')`, true);
			if (preserveFocus) nvim.command("wincmd p", true);
			nvim.resumeNotification(true, true);
			this.created = true;
		}
		validate() {
			return !this._disposed;
		}
		dispose() {
			if (this.onDispose) this.onDispose();
			this._disposed = true;
			this.hide();
			this.lines = [];
		}
	};
}));
//#endregion
//#region src/core/channels.ts
var Channels, channels_default;
var init_channels = __esmMin((() => {
	init_events();
	init_outputChannel();
	Channels = class {
		outputChannels = /* @__PURE__ */ new Map();
		bufnrs = /* @__PURE__ */ new Map();
		disposable;
		constructor() {
			this.disposable = events_default.on("BufUnload", (bufnr) => {
				let name = this.bufnrs.get(bufnr);
				if (name) {
					let channel = this.outputChannels.get(name);
					if (channel) channel.created = false;
				}
			});
		}
		/**
		* Get text document provider
		*/
		getProvider(nvim) {
			return {
				onDidChange: null,
				provideTextDocumentContent: async (uri) => {
					let channel = this.get(uri.path.slice(1));
					if (!channel) return "";
					nvim.pauseNotification();
					nvim.call("bufnr", ["%"], true);
					nvim.command("setlocal nospell nofoldenable nowrap noswapfile", true);
					nvim.command("setlocal buftype=nofile bufhidden=hide", true);
					nvim.command("setfiletype log", true);
					let res = await nvim.resumeNotification();
					this.bufnrs.set(res[0][0], channel.name);
					channel.created = true;
					return channel.content;
				}
			};
		}
		get names() {
			return Array.from(this.outputChannels.keys());
		}
		get(channelName) {
			return this.outputChannels.get(channelName);
		}
		create(name, nvim) {
			if (this.outputChannels.has(name)) return this.outputChannels.get(name);
			let channel = new BufferChannel(name, nvim, () => {
				this.outputChannels.delete(name);
			});
			this.outputChannels.set(name, channel);
			return channel;
		}
		show(name, cmd, preserveFocus) {
			let channel = this.outputChannels.get(name);
			if (!channel) return;
			channel.show(preserveFocus, cmd);
		}
		dispose() {
			this.disposable.dispose();
			for (let channel of this.outputChannels.values()) channel.dispose();
			this.outputChannels.clear();
		}
	};
	channels_default = new Channels();
}));
//#endregion
//#region src/model/dialog.ts
var Dialog;
var init_dialog = __esmMin((() => {
	init_protocol();
	init_events();
	init_util$7();
	init_array();
	Dialog = class {
		nvim;
		config;
		disposables = [];
		bufnr;
		_onDidClose = new import_main$1.Emitter();
		onDidClose = this._onDidClose.event;
		constructor(nvim, config) {
			this.nvim = nvim;
			this.config = config;
			events_default.on("BufWinLeave", (bufnr) => {
				if (bufnr == this.bufnr) {
					this.dispose();
					if (config.callback) config.callback(-1);
				}
			}, null, this.disposables);
			let btns = toArray(config.buttons).filter((o) => o.disabled != true);
			events_default.on("FloatBtnClick", (bufnr, idx) => {
				if (bufnr == this.bufnr) {
					this.dispose();
					if (config.callback) config.callback(btns[idx].index);
				}
			}, null, this.disposables);
		}
		get lines() {
			return [...this.config.content.split(/\r?\n/)];
		}
		async show(preferences) {
			let { nvim } = this;
			let { title, close, highlights, buttons } = this.config;
			let borderhighlight = this.config.borderhighlight || preferences.floatBorderHighlight;
			let highlight = this.config.highlight || preferences.floatHighlight;
			let opts = { maxwidth: preferences.maxWidth || 80 };
			if (title) opts.title = title;
			opts.close = +(close ?? 1);
			if (preferences.maxHeight) opts.maxHeight = preferences.maxHeight;
			if (preferences.maxWidth) opts.maxWidth = preferences.maxWidth;
			if (highlight) opts.highlight = highlight;
			if (highlights) opts.highlights = highlights;
			if (borderhighlight) opts.borderhighlight = [borderhighlight];
			if (buttons) opts.buttons = buttons.filter((o) => !o.disabled).map((o) => o.text);
			if (preferences.rounded) opts.rounded = 1;
			if (Array.isArray(opts.buttons)) opts.getchar = 1;
			let [_winid, bufnr] = await nvim.call("coc#dialog#create_dialog", [this.lines, opts]);
			this.bufnr = bufnr;
			nvim.command("redraw", true);
		}
		get winid() {
			if (!this.bufnr) return Promise.resolve(null);
			return this.nvim.call("bufwinid", [this.bufnr]);
		}
		dispose() {
			this._onDidClose.fire();
			this.bufnr = void 0;
			disposeAll(this.disposables);
			this.disposables = [];
		}
	};
}));
//#endregion
//#region src/model/input.ts
var InputBox;
var init_input = __esmMin((() => {
	init_events();
	init_util$7();
	init_constants();
	init_object();
	init_protocol();
	init_string$1();
	InputBox = class {
		nvim;
		disposables = [];
		_winid;
		_bufnr;
		_input;
		accepted = false;
		_disposed = false;
		title;
		loading;
		value;
		borderhighlight;
		_dimension = [
			0,
			0,
			0,
			0
		];
		_onDidFinish = new import_main$1.Emitter();
		_onDidChange = new import_main$1.Emitter();
		clear = false;
		onDidFinish = this._onDidFinish.event;
		onDidChange = this._onDidChange.event;
		constructor(nvim, defaultValue) {
			this.nvim = nvim;
			this._input = defaultValue;
			this.disposables.push(this._onDidFinish);
			this.disposables.push(this._onDidChange);
			let _title;
			Object.defineProperty(this, "title", {
				set: (newTitle) => {
					_title = newTitle;
					if (this._winid) nvim.call("coc#dialog#change_title", [this._winid, newTitle], true);
				},
				get: () => {
					return _title;
				}
			});
			let _loading = false;
			Object.defineProperty(this, "loading", {
				set: (loading) => {
					_loading = loading;
					if (this._winid) nvim.call("coc#dialog#change_loading", [this._winid, loading], true);
				},
				get: () => {
					return _loading;
				}
			});
			let _borderhighlight;
			Object.defineProperty(this, "borderhighlight", {
				set: (borderhighlight) => {
					_borderhighlight = borderhighlight;
					if (this._winid) nvim.call("coc#dialog#change_border_hl", [this._winid, borderhighlight], true);
				},
				get: () => {
					return _borderhighlight;
				}
			});
			Object.defineProperty(this, "value", {
				set: (value) => {
					value = toText(value);
					if (value !== this._input) {
						this.clearVirtualText();
						this._input = value;
						this.nvim.call("coc#dialog#change_input_value", [
							this.winid,
							this.bufnr,
							value
						], true);
						this._onDidChange.fire(value);
					}
				},
				get: () => {
					return this._input;
				}
			});
			events_default.on("BufWinLeave", (bufnr) => {
				if (bufnr == this._bufnr) this.dispose();
			}, null, this.disposables);
			events_default.on("PromptInsert", (value, bufnr) => {
				if (bufnr == this._bufnr) {
					this._input = value;
					this.accepted = true;
					this.dispose();
				}
			}, null, this.disposables);
			events_default.on("PromptExit", (bufnr) => {
				if (bufnr == this._bufnr) this.dispose();
			}, null, this.disposables);
			events_default.on("TextChangedI", (bufnr, info) => {
				if (bufnr == this._bufnr && this._input !== info.line) {
					this.clearVirtualText();
					this._input = info.line;
					this._onDidChange.fire(info.line);
				}
			}, null, this.disposables);
		}
		clearVirtualText() {
			if (this.clear && this.bufnr) {
				this.clear = false;
				this.nvim.createBuffer(this.bufnr).clearNamespace("input-box");
			}
		}
		get dimension() {
			let { _dimension } = this;
			return {
				width: _dimension[0],
				height: _dimension[1],
				row: _dimension[2],
				col: _dimension[3]
			};
		}
		get bufnr() {
			return this._bufnr;
		}
		get winid() {
			return this._winid;
		}
		async show(title, preferences) {
			this.title = title;
			this.borderhighlight = preferences.borderhighlight ?? "CocFloatBorder";
			this.loading = false;
			if (preferences.placeHolder && !this._input && !isVim) this.clear = true;
			let res = await this.nvim.call("coc#dialog#create_prompt_win", [
				title,
				this._input,
				omitUndefined(preferences)
			]);
			if (!res) throw new Error("Unable to open input window");
			this._bufnr = res[0];
			this._winid = res[1];
			this._dimension = res[2];
			return true;
		}
		dispose() {
			if (this._disposed) return;
			this._disposed = true;
			this.nvim.call("coc#float#close", [this._winid ?? -1], true);
			if (isVim) this.nvim.command(`silent! bd! ${this._bufnr}`, true);
			this._onDidFinish.fire(this.accepted ? this._input : null);
			this._winid = void 0;
			this._bufnr = void 0;
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/model/popup.ts
var Popup;
var init_popup = __esmMin((() => {
	init_constants();
	Popup = class {
		nvim;
		winid;
		bufnr;
		linecount;
		_currIndex;
		constructor(nvim, winid, bufnr, linecount, _currIndex = 0) {
			this.nvim = nvim;
			this.winid = winid;
			this.bufnr = bufnr;
			this.linecount = linecount;
			this._currIndex = _currIndex;
		}
		get currIndex() {
			return this._currIndex;
		}
		close() {
			this.nvim.call("coc#float#close", [this.winid], true);
		}
		refreshScrollbar() {
			if (!isVim) this.nvim.call("coc#float#nvim_scrollbar", [this.winid], true);
		}
		execute(cmd) {
			this.nvim.call("win_execute", [this.winid, cmd], true);
		}
		async getWininfo() {
			return await this.nvim.call("coc#float#get_wininfo", [this.winid]);
		}
		/**
		* Simple scroll method, not consider wrapped lines.
		*/
		async scrollForward() {
			let { nvim, bufnr } = this;
			let total = await nvim.createBuffer(bufnr).length;
			let { botline } = await this.getWininfo();
			if (botline >= total || botline == 0) return;
			nvim.pauseNotification();
			this.setCursor(botline - 1);
			this.execute(`silent! noa setl scrolloff=0`);
			this.execute(`normal! ${botline}Gzt`);
			this.refreshScrollbar();
			nvim.command("redraw", true);
			nvim.resumeNotification(false, true);
		}
		/**
		* Simple scroll method, not consider wrapped lines.
		*/
		async scrollBackward() {
			let { nvim } = this;
			let { topline } = await this.getWininfo();
			if (topline == 1) return;
			nvim.pauseNotification();
			this.setCursor(topline - 1);
			this.execute(`normal! ${topline}Gzb`);
			this.refreshScrollbar();
			nvim.command("redraw", true);
			nvim.resumeNotification(false, true);
		}
		/**
		* Move cursor and highlight.
		*/
		setCursor(index, redraw = false) {
			let { nvim, bufnr, winid, linecount } = this;
			if (index < 0) index = 0;
			else if (index > linecount - 1) index = linecount - 1;
			this._currIndex = index;
			nvim.call("coc#dialog#set_cursor", [
				winid,
				bufnr,
				index + 1
			], true);
			if (redraw) {
				this.refreshScrollbar();
				nvim.command("redraw", true);
			}
		}
	};
}));
//#endregion
//#region src/model/menu.ts
function isMenuItem(item) {
	if (!item) return false;
	return typeof item.text === "string";
}
function toIndexText(n) {
	return n < 99 ? `${n + 1}. ` : "  ";
}
var Menu;
var init_menu = __esmMin((() => {
	init_protocol();
	init_events();
	init_util$7();
	init_string$1();
	init_popup();
	Menu = class {
		nvim;
		config;
		bufnr;
		win;
		currIndex = 0;
		contentHeight = 0;
		total;
		disposables = [];
		keyMappings = /* @__PURE__ */ new Map();
		shortcutIndexes = /* @__PURE__ */ new Set();
		_disposed = false;
		_onDidClose = new import_main$1.Emitter();
		onDidClose = this._onDidClose.event;
		constructor(nvim, config, token) {
			this.nvim = nvim;
			this.config = config;
			this.total = config.items.length;
			if (token) token.onCancellationRequested(() => {
				this._onDidClose.fire(-1);
				this.dispose();
			});
			this.disposables.push(this._onDidClose);
			this.addKeymappings();
		}
		attachEvents() {
			events_default.on("InputChar", this.onInputChar.bind(this), null, this.disposables);
			events_default.on("BufWinLeave", (bufnr) => {
				if (bufnr == this.bufnr) {
					this._onDidClose.fire(-1);
					this.dispose();
				}
			}, null, this.disposables);
		}
		addKeymappings() {
			let { nvim } = this;
			this.addKeys(["<esc>", "<C-c>"], () => {
				this._onDidClose.fire(-1);
				this.dispose();
			});
			this.addKeys(["\r", "<cr>"], () => {
				this.selectCurrent();
			});
			let setCursorIndex = (idx) => {
				nvim.pauseNotification();
				this.setCursor(idx + this.contentHeight);
				this.win.refreshScrollbar();
				nvim.command("redraw", true);
				nvim.resumeNotification(false, true);
			};
			this.addKeys("<C-f>", async () => {
				await this.win.scrollForward();
			});
			this.addKeys("<C-b>", async () => {
				await this.win.scrollBackward();
			});
			this.addKeys([
				"j",
				"<C-j>",
				"<down>",
				"<tab>",
				"<C-n>"
			], () => {
				setCursorIndex(this.currIndex == this.total - 1 ? 0 : this.currIndex + 1);
			});
			this.addKeys([
				"k",
				"<C-k>",
				"<up>",
				"<s-tab>",
				"<C-p>"
			], () => {
				setCursorIndex(this.currIndex == 0 ? this.total - 1 : this.currIndex - 1);
			});
			this.addKeys(["g"], () => {
				setCursorIndex(0);
			});
			this.addKeys(["G"], () => {
				setCursorIndex(this.total - 1);
			});
			let timer;
			let firstNumber;
			const choose = (n) => {
				if (this.isDisabled(n)) return;
				this._onDidClose.fire(n);
				this.dispose();
			};
			this.addKeys([
				"0",
				"1",
				"2",
				"3",
				"4",
				"5",
				"6",
				"7",
				"8",
				"9"
			], (character) => {
				if (timer) clearTimeout(timer);
				let n = parseInt(character, 10);
				if (isNaN(n) || n > this.total) return;
				if (firstNumber == null && n == 0) return;
				if (firstNumber) {
					let count = firstNumber * 10 + n;
					firstNumber = void 0;
					choose(count - 1);
					return;
				}
				if (this.total < 10 || n * 10 > this.total) {
					choose(n - 1);
					return;
				}
				timer = setTimeout(async () => {
					choose(n - 1);
				}, 200);
				firstNumber = n;
			});
			if (this.config.shortcuts) this.addShortcuts(choose);
		}
		addShortcuts(choose) {
			let { items } = this.config;
			items.map((o) => {
				return isMenuItem(o) ? o.text : o;
			}).forEach((text, idx) => {
				if (text.length) {
					let s = text[0];
					if (isAlphabet(s.charCodeAt(0)) && !this.keyMappings.has(s)) {
						this.shortcutIndexes.add(idx);
						this.addKeys(s, () => {
							choose(idx);
						});
					}
				}
			});
		}
		isDisabled(idx) {
			let { items } = this.config;
			let item = items[idx];
			if (isMenuItem(item) && item.disabled) return true;
			return false;
		}
		async show(preferences = {}) {
			let { nvim, shortcutIndexes } = this;
			let { title, items, borderhighlight, position, content } = this.config;
			let opts = {};
			if (title) opts.title = title;
			if (position === "center") opts.relative = "editor";
			if (preferences.maxHeight) opts.maxHeight = preferences.maxHeight;
			if (preferences.maxWidth) opts.maxWidth = preferences.maxWidth;
			if (preferences.floatHighlight) opts.highlight = preferences.floatHighlight;
			if (borderhighlight) opts.borderhighlight = borderhighlight;
			else if (preferences.floatBorderHighlight) opts.borderhighlight = preferences.floatBorderHighlight;
			if (preferences.rounded) opts.rounded = 1;
			if (typeof content === "string") opts.content = content;
			if (preferences.confirmKey) this.addKeys(preferences.confirmKey, () => {
				this.selectCurrent();
			});
			let highlights = [];
			let lines = items.map((v, i) => {
				let text = isMenuItem(v) ? v.text : v;
				let pre = toIndexText(i);
				if (shortcutIndexes.has(i)) highlights.push({
					lnum: i,
					hlGroup: preferences.shortcutHighlight || "MoreMsg",
					colStart: byteLength(pre),
					colEnd: byteLength(pre) + 1
				});
				return pre + text.trim();
			});
			lines.forEach((line, i) => {
				let item = items[i];
				if (isMenuItem(item) && item.disabled) highlights.push({
					hlGroup: "CocDisabled",
					lnum: i,
					colStart: 0,
					colEnd: byteLength(line)
				});
			});
			if (highlights.length) opts.highlights = highlights;
			let [winid, bufnr, contentHeight] = await nvim.call("coc#dialog#create_menu", [lines, opts]);
			nvim.command("redraw", true);
			if (this._disposed) return;
			this.win = new Popup(nvim, winid, bufnr, lines.length + contentHeight, contentHeight);
			this.bufnr = bufnr;
			this.contentHeight = contentHeight;
			this.attachEvents();
			nvim.call("coc#prompt#start_prompt", ["menu"], true);
		}
		selectCurrent() {
			if (this.isDisabled(this.currIndex)) {
				let item = this.config.items[this.currIndex];
				if (item.disabled["reason"]) this.nvim.outWriteLine(`Item disabled: ${item.disabled["reason"]}`);
				return;
			}
			this._onDidClose.fire(this.currIndex);
			this.dispose();
		}
		get buffer() {
			return this.bufnr ? this.nvim.createBuffer(this.bufnr) : void 0;
		}
		dispose() {
			if (this._disposed) return;
			this._disposed = true;
			disposeAll(this.disposables);
			this.shortcutIndexes.clear();
			this.keyMappings.clear();
			this.nvim.call("coc#prompt#stop_prompt", ["menu"], true);
			this.win?.close();
			this.bufnr = void 0;
			this.win = void 0;
		}
		async onInputChar(session, character) {
			if (session != "menu" || !this.win) return;
			let fn = this.keyMappings.get(character);
			if (fn) await Promise.resolve(fn(character));
		}
		setCursor(index) {
			this.currIndex = index - this.contentHeight;
			this.win.setCursor(index);
		}
		addKeys(keys, fn) {
			if (Array.isArray(keys)) for (let key of keys) this.keyMappings.set(key, fn);
			else this.keyMappings.set(keys, fn);
		}
	};
}));
//#endregion
//#region src/model/picker.ts
function toPickerItems(items) {
	return items.map((item) => typeof item === "string" ? { label: item } : item);
}
var Picker;
var init_picker = __esmMin((() => {
	init_events();
	init_util$7();
	init_protocol();
	init_string$1();
	init_popup();
	Picker = class {
		nvim;
		config;
		bufnr;
		win;
		picked = /* @__PURE__ */ new Set();
		total;
		disposables = [];
		keyMappings = /* @__PURE__ */ new Map();
		_onDidClose = new import_main$1.Emitter();
		onDidClose = this._onDidClose.event;
		constructor(nvim, config, token) {
			this.nvim = nvim;
			this.config = config;
			for (let i = 0; i < config.items.length; i++) if (config.items[i].picked) this.picked.add(i);
			this.total = config.items.length;
			if (token) token.onCancellationRequested(() => {
				this.win?.close();
			});
			this.disposables.push(this._onDidClose);
		}
		get currIndex() {
			return this.win ? this.win.currIndex : 0;
		}
		attachEvents() {
			events_default.on("InputChar", this.onInputChar.bind(this), null, this.disposables);
			events_default.on("BufWinLeave", (bufnr) => {
				if (bufnr == this.bufnr) {
					this._onDidClose.fire(void 0);
					this.bufnr = void 0;
					this.win = void 0;
					this.dispose();
				}
			}, null, this.disposables);
			events_default.on("FloatBtnClick", (bufnr, idx) => {
				if (bufnr != this.bufnr) return;
				if (idx == 0) {
					let selected = Array.from(this.picked);
					this._onDidClose.fire(selected.length > 0 ? selected : void 0);
				} else this._onDidClose.fire(void 0);
				this.dispose();
			}, null, this.disposables);
			this.addKeymappings();
		}
		addKeymappings() {
			let { nvim } = this;
			const toggleSelect = (idx) => {
				if (this.picked.has(idx)) this.picked.delete(idx);
				else this.picked.add(idx);
			};
			this.addKeys("<LeftRelease>", async () => {
				let [winid, lnum, col] = await nvim.call("coc#ui#get_mouse");
				nvim.pauseNotification();
				if (winid == this.win.winid) if (col <= 3) {
					toggleSelect(lnum - 1);
					this.changeLine(lnum - 1);
				} else this.win.setCursor(lnum - 1);
				nvim.call("win_gotoid", [winid], true);
				nvim.call("cursor", [lnum, col], true);
				nvim.call("coc#float#nvim_float_click", [], true);
				nvim.command("redraw", true);
				await nvim.resumeNotification();
			});
			this.addKeys(["<esc>", "<C-c>"], () => {
				this._onDidClose.fire(void 0);
				this.dispose();
			});
			this.addKeys("<cr>", () => {
				if (this.picked.size == 0) this._onDidClose.fire(void 0);
				else {
					let selected = Array.from(this.picked);
					this._onDidClose.fire(selected);
				}
				this.dispose();
			});
			this.addKeys([
				"j",
				"<down>",
				"<tab>",
				"<C-n>"
			], () => {
				this.win.setCursor(this.currIndex + 1, true);
			});
			this.addKeys([
				"k",
				"<up>",
				"<s-tab>",
				"<C-p>"
			], () => {
				this.win.setCursor(this.currIndex - 1, true);
			});
			this.addKeys(["g"], () => {
				this.win.setCursor(0, true);
			});
			this.addKeys(["G"], () => {
				this.win.setCursor(this.total - 1, true);
			});
			this.addKeys(" ", async () => {
				let idx = this.currIndex;
				toggleSelect(idx);
				nvim.pauseNotification();
				this.changeLine(idx);
				this.win.setCursor(this.currIndex + 1);
				nvim.command("redraw", true);
				await nvim.resumeNotification();
			});
			this.addKeys("<C-f>", async () => {
				await this.win.scrollForward();
			});
			this.addKeys("<C-b>", async () => {
				await this.win.scrollBackward();
			});
		}
		async show(preferences = {}) {
			let { nvim } = this;
			let { title, items } = this.config;
			let opts = {
				close: 1,
				cursorline: 1
			};
			if (preferences.maxHeight) opts.maxHeight = preferences.maxHeight;
			if (preferences.maxWidth) opts.maxWidth = preferences.maxWidth;
			if (title) opts.title = title;
			if (preferences.floatHighlight) opts.highlight = preferences.floatHighlight;
			if (preferences.floatBorderHighlight) opts.borderhighlight = [preferences.floatBorderHighlight];
			if (preferences.pickerButtons) {
				let shortcut = preferences.pickerButtonShortcut;
				opts.buttons = ["Submit" + (shortcut ? " <cr>" : ""), "Cancel" + (shortcut ? " <esc>" : "")];
			}
			if (preferences.rounded) opts.rounded = 1;
			if (preferences.confirmKey && preferences.confirmKey != "<cr>") this.addKeys(preferences.confirmKey, () => {
				this._onDidClose.fire(void 0);
				this.dispose();
			});
			let lines = [];
			let highlights = [];
			for (let i = 0; i < items.length; i++) {
				let item = items[i];
				let line = `[${item.picked ? "x" : " "}] ${item.label}`;
				if (item.description) {
					let start = byteLength(line);
					line = line + ` ${item.description}`;
					highlights.push({
						hlGroup: "Comment",
						lnum: i,
						colStart: start,
						colEnd: byteLength(line)
					});
				}
				lines.push(line);
			}
			if (highlights.length) opts.highlights = highlights;
			let res = await nvim.call("coc#dialog#create_dialog", [lines, opts]);
			this.win = new Popup(nvim, res[0], res[1], lines.length);
			this.bufnr = res[1];
			nvim.call("coc#prompt#start_prompt", ["picker"], true);
			this.attachEvents();
			this.win.setCursor(0, true);
			return res[0];
		}
		get buffer() {
			return this.bufnr ? this.nvim.createBuffer(this.bufnr) : void 0;
		}
		dispose() {
			this.picked.clear();
			this.keyMappings.clear();
			disposeAll(this.disposables);
			this.nvim.call("coc#prompt#stop_prompt", ["picker"], true);
			this.win?.close();
			this.win = void 0;
		}
		async onInputChar(session, character) {
			if (session != "picker" || !this.win) return;
			let fn = this.keyMappings.get(character);
			if (fn) await Promise.resolve(fn(character));
		}
		changeLine(index) {
			let { nvim } = this;
			let item = this.config.items[index];
			if (!item) return;
			let line = `[${this.picked.has(index) ? "x" : " "}] ${item.label}`;
			let col = byteLength(line);
			if (item.description) line = line + ` ${item.description}`;
			nvim.call("setbufline", [
				this.bufnr,
				index + 1,
				line
			], true);
			nvim.createBuffer(this.bufnr).addHighlight({
				hlGroup: "Comment",
				line: index,
				srcId: 1,
				colStart: col,
				colEnd: -1
			});
		}
		addKeys(keys, fn) {
			if (Array.isArray(keys)) for (let key of keys) this.keyMappings.set(key, fn);
			else this.keyMappings.set(keys, fn);
		}
	};
}));
//#endregion
//#region src/util/filter.ts
function initTable() {
	const table = [];
	const row = [];
	for (let i = 0; i <= _maxLen; i++) row[i] = 0;
	for (let i = 0; i <= _maxLen; i++) table.push(row.slice(0));
	return table;
}
function initArr(maxLen) {
	const row = [];
	for (let i = 0; i <= maxLen; i++) row[i] = 0;
	return row;
}
function isUpperCaseAtPos(pos, word, wordLow) {
	return word[pos] !== wordLow[pos];
}
function fuzzyScoreGracefulAggressive(pattern, lowPattern, patternPos, word, lowWord, wordPos, options) {
	return fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, true, options);
}
function fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, aggressive, options) {
	let top = fuzzyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos, options);
	if (top && !aggressive) return top;
	if (pattern.length >= 3) {
		const tries = Math.min(7, pattern.length - 1);
		for (let movingPatternPos = patternPos + 1; movingPatternPos < tries; movingPatternPos++) {
			const newPattern = nextTypoPermutation(pattern, movingPatternPos);
			if (newPattern) {
				const candidate = fuzzyScore(newPattern, newPattern.toLowerCase(), patternPos, word, lowWord, wordPos, options);
				if (candidate) {
					candidate[0] -= 3;
					if (!top || candidate[0] > top[0]) top = candidate;
				}
			}
		}
	}
	return top;
}
function fuzzyScore(pattern, patternLow, patternStart, word, wordLow, wordStart, options = {
	boostFullMatch: true,
	firstMatchCanBeWeak: false
}) {
	const patternLen = pattern.length > _maxLen ? _maxLen : pattern.length;
	const wordLen = word.length > _maxLen ? _maxLen : word.length;
	if (patternStart >= patternLen || wordStart >= wordLen || patternLen - patternStart > wordLen - wordStart) return;
	if (!isPatternInWord(patternLow, patternStart, patternLen, wordLow, wordStart, wordLen, true)) return;
	_fillInMaxWordMatchPos(patternLen, wordLen, patternStart, wordStart, patternLow, wordLow);
	let row = 1;
	let column = 1;
	let patternPos = patternStart;
	let wordPos = wordStart;
	const hasStrongFirstMatch = [false];
	for (row = 1, patternPos = patternStart; patternPos < patternLen; row++, patternPos++) {
		const minWordMatchPos = _minWordMatchPos[patternPos];
		const maxWordMatchPos = _maxWordMatchPos[patternPos];
		const nextMaxWordMatchPos = patternPos + 1 < patternLen ? _maxWordMatchPos[patternPos + 1] : wordLen;
		for (column = minWordMatchPos - wordStart + 1, wordPos = minWordMatchPos; wordPos < nextMaxWordMatchPos; column++, wordPos++) {
			let score = Number.MIN_SAFE_INTEGER;
			let canComeDiag = false;
			if (wordPos <= maxWordMatchPos) score = _doScore(pattern, patternLow, patternPos, patternStart, word, wordLow, wordPos, wordLen, wordStart, _diag[row - 1][column - 1] === 0, hasStrongFirstMatch);
			let diagScore = 0;
			canComeDiag = true;
			diagScore = score + _table[row - 1][column - 1];
			const canComeLeft = wordPos > minWordMatchPos;
			const leftScore = canComeLeft ? _table[row][column - 1] + (_diag[row][column - 1] > 0 ? -5 : 0) : 0;
			const canComeLeftLeft = wordPos > minWordMatchPos + 1 && _diag[row][column - 1] > 0;
			const leftLeftScore = canComeLeftLeft ? _table[row][column - 2] + (_diag[row][column - 2] > 0 ? -5 : 0) : 0;
			if (canComeLeftLeft && (!canComeLeft || leftLeftScore >= leftScore) && (!canComeDiag || leftLeftScore >= diagScore)) {
				_table[row][column] = leftLeftScore;
				_arrows[row][column] = 3;
				_diag[row][column] = 0;
			} else if (canComeLeft && (!canComeDiag || leftScore >= diagScore)) {
				_table[row][column] = leftScore;
				_arrows[row][column] = 2;
				_diag[row][column] = 0;
			} else {
				_table[row][column] = diagScore;
				_arrows[row][column] = 1;
				_diag[row][column] = _diag[row - 1][column - 1] + 1;
			}
		}
	}
	if (!hasStrongFirstMatch[0] && !options.firstMatchCanBeWeak) return;
	row--;
	column--;
	const result = [_table[row][column], wordStart];
	let backwardsDiagLength = 0;
	let maxMatchColumn = 0;
	while (row >= 1) {
		let diagColumn = column;
		do {
			const arrow = _arrows[row][diagColumn];
			if (arrow === 3) diagColumn = diagColumn - 2;
			else if (arrow === 2) diagColumn = diagColumn - 1;
			else break;
		} while (diagColumn >= 1);
		if (backwardsDiagLength > 1 && patternLow[patternStart + row - 1] === wordLow[wordStart + column - 1] && !isUpperCaseAtPos(diagColumn + wordStart - 1, word, wordLow) && backwardsDiagLength + 1 > _diag[row][diagColumn]) diagColumn = column;
		if (diagColumn === column) backwardsDiagLength++;
		else backwardsDiagLength = 1;
		if (!maxMatchColumn) maxMatchColumn = diagColumn;
		row--;
		column = diagColumn - 1;
		result.push(column);
	}
	if (wordLen === patternLen && options.boostFullMatch) result[0] += 2;
	const skippedCharsCount = maxMatchColumn - patternLen;
	result[0] -= skippedCharsCount;
	return result;
}
function anyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos, options) {
	const max = Math.min(13, pattern.length);
	for (; patternPos < max; patternPos++) {
		const result = fuzzyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos, options);
		if (result) return result;
	}
	return [0, wordPos];
}
function _doScore(pattern, patternLow, patternPos, patternStart, word, wordLow, wordPos, wordLen, wordStart, newMatchStart, outFirstMatchStrong) {
	if (patternLow[patternPos] !== wordLow[wordPos]) return Number.MIN_SAFE_INTEGER;
	let score = 1;
	let isGapLocation = false;
	if (wordPos === patternPos - patternStart) score = pattern[patternPos] === word[wordPos] ? 7 : 5;
	else if (isUpperCaseAtPos(wordPos, word, wordLow) && (wordPos === 0 || !isUpperCaseAtPos(wordPos - 1, word, wordLow))) {
		score = pattern[patternPos] === word[wordPos] ? 7 : 5;
		isGapLocation = true;
	} else if (isSeparatorAtPos(wordLow, wordPos) && (wordPos === 0 || !isSeparatorAtPos(wordLow, wordPos - 1))) score = 5;
	else if (isSeparatorAtPos(wordLow, wordPos - 1) || isWhitespaceAtPos(wordLow, wordPos - 1)) {
		score = 5;
		isGapLocation = true;
	}
	if (score > 1 && patternPos === patternStart) outFirstMatchStrong[0] = true;
	if (!isGapLocation) isGapLocation = isUpperCaseAtPos(wordPos, word, wordLow) || isSeparatorAtPos(wordLow, wordPos - 1) || isWhitespaceAtPos(wordLow, wordPos - 1);
	if (patternPos === patternStart) {
		if (wordPos > wordStart) score -= isGapLocation ? 3 : 5;
	} else if (newMatchStart) score += isGapLocation ? 2 : 0;
	else score += isGapLocation ? 0 : 1;
	if (wordPos + 1 === wordLen) score -= isGapLocation ? 3 : 5;
	return score;
}
function isSeparatorAtPos(value, index) {
	const code = value.codePointAt(index);
	switch (code) {
		case 95:
		case 45:
		case 46:
		case 32:
		case 47:
		case 92:
		case 39:
		case 34:
		case 58:
		case 36:
		case 60:
		case 62:
		case 40:
		case 41:
		case 91:
		case 93:
		case 123:
		case 125: return true;
		case void 0: return false;
		default:
			if (isEmojiImprecise(code)) return true;
			return false;
	}
}
function isWhitespaceAtPos(value, index) {
	if (index < 0 || index >= value.length) return false;
	switch (value.charCodeAt(index)) {
		case 32:
		case 9: return true;
		default: return false;
	}
}
function isPatternInWord(patternLow, patternPos, patternLen, wordLow, wordPos, wordLen, fillMinWordPosArr = false) {
	while (patternPos < patternLen && wordPos < wordLen) {
		if (patternLow[patternPos] === wordLow[wordPos]) {
			if (fillMinWordPosArr) _minWordMatchPos[patternPos] = wordPos;
			patternPos += 1;
		}
		wordPos += 1;
	}
	return patternPos === patternLen;
}
function _fillInMaxWordMatchPos(patternLen, wordLen, patternStart, wordStart, patternLow, wordLow) {
	let patternPos = patternLen - 1;
	let wordPos = wordLen - 1;
	while (patternPos >= patternStart && wordPos >= wordStart) {
		if (patternLow[patternPos] === wordLow[wordPos]) {
			_maxWordMatchPos[patternPos] = wordPos;
			patternPos--;
		}
		wordPos--;
	}
}
function nextTypoPermutation(pattern, patternPos) {
	if (patternPos + 1 >= pattern.length) return;
	const swap1 = pattern[patternPos];
	const swap2 = pattern[patternPos + 1];
	if (swap1 === swap2) return;
	return pattern.slice(0, patternPos) + swap2 + swap1 + pattern.slice(patternPos + 2);
}
var _maxLen, _minWordMatchPos, _maxWordMatchPos, _diag, _table, _arrows;
var init_filter$1 = __esmMin((() => {
	init_string$1();
	_maxLen = 128;
	_minWordMatchPos = initArr(2 * _maxLen);
	_maxWordMatchPos = initArr(2 * _maxLen);
	_diag = initTable();
	_table = initTable();
	_arrows = initTable();
}));
//#endregion
//#region src/model/fuzzyMatch.ts
async function initFuzzyWasm() {
	const buffer = await fs$6.promises.readFile(wasmFile);
	return (await global.WebAssembly.instantiate(buffer, { env: {} })).instance.exports;
}
/**
* Convert FuzzyScore to highlight byte spans.
*/
function toSpans(label, score) {
	let res = [];
	for (let span of matchSpansReverse(label, score, 2)) res.push(span);
	return res;
}
/**
* Convert to spans from reversed list of utf16 code unit numbers
* Positions should be sorted numbers from big to small
*/
function* matchSpansReverse(text, positions, endIndex = 0, max = Number.MAX_SAFE_INTEGER) {
	let len = positions.length;
	if (len <= endIndex) return;
	let byteIndex = bytes(text, Math.min(positions[endIndex] + 1, max));
	let start;
	let prev;
	for (let i = len - 1; i >= endIndex; i--) {
		let curr = positions[i];
		if (curr >= max) {
			if (start != null) yield [byteIndex(start), byteIndex(prev + 1)];
			break;
		}
		if (prev != void 0) {
			let d = curr - prev;
			if (d == 1) prev = curr;
			else if (d > 1) {
				yield [byteIndex(start), byteIndex(prev + 1)];
				start = curr;
			} else {
				yield [byteIndex(start), byteIndex(prev + 1)];
				break;
			}
		} else start = curr;
		prev = curr;
		if (i == endIndex) yield [byteIndex(start), byteIndex(prev + 1)];
	}
}
function* matchSpans(text, positions, max) {
	max = max ? Math.min(max, text.length) : text.length;
	let byteIndex = bytes(text, Math.min(text.length, 4096));
	let start;
	let prev;
	let len = positions.length;
	for (let i = 0; i < len; i++) {
		let curr = positions[i];
		if (curr >= max) {
			if (start != null) yield [byteIndex(start), byteIndex(prev + 1)];
			break;
		}
		if (prev != void 0) {
			let d = curr - prev;
			if (d == 1) prev = curr;
			else if (d > 1) {
				yield [byteIndex(start), byteIndex(prev + 1)];
				start = curr;
			} else {
				yield [byteIndex(start), byteIndex(prev + 1)];
				break;
			}
		} else start = curr;
		prev = curr;
		if (i == len - 1) yield [byteIndex(start), byteIndex(prev + 1)];
	}
}
var wasmFile, FuzzyMatch;
var init_fuzzyMatch = __esmMin((() => {
	init_constants();
	init_filter$1();
	init_node();
	init_string$1();
	wasmFile = path$5.join(pluginRoot, "bin/fuzzy.wasm");
	FuzzyMatch = class {
		exports;
		contentPtr;
		patternPtr;
		resultPtr;
		patternLength = 0;
		matchSeq = false;
		sizes = [
			2048,
			1024,
			1024
		];
		constructor(exports) {
			this.exports = exports;
		}
		/**
		* Match character positions to column spans.
		*/
		matchSpans(text, positions, max) {
			return matchSpans(text, positions, max);
		}
		/**
		* Create 0 index byte spans from matched text and FuzzyScore for highlights
		*/
		matchScoreSpans(text, score) {
			return matchSpansReverse(text, score, 2);
		}
		/**
		* Create a score function
		*/
		createScoreFunction(pattern, patternPos, options, kind) {
			let lowPattern = pattern.toLowerCase();
			let fn;
			if (kind === "any") fn = anyScore;
			else if (kind === "aggressive") fn = fuzzyScoreGracefulAggressive;
			else fn = fuzzyScore;
			return (word, wordPos = 0) => {
				return fn(pattern, lowPattern, patternPos, word, word.toLowerCase(), wordPos, options);
			};
		}
		getSizes() {
			return this.sizes;
		}
		setPattern(pattern, matchSeq = false) {
			if (pattern.length > 256) pattern = pattern.slice(0, 256);
			this.matchSeq = matchSeq;
			this.patternLength = matchSeq ? pattern.length : pattern.replace(/(\s|\t)/g, "").length;
			if (this.patternPtr == null) {
				let { malloc } = this.exports;
				let { sizes } = this;
				this.contentPtr = malloc(sizes[0]);
				this.patternPtr = malloc(sizes[1]);
				this.resultPtr = malloc(sizes[2]);
			}
			let buf = Buffer.from(pattern, "utf8");
			let len = buf.length;
			let bytes = new Uint8Array(this.exports.memory.buffer, this.patternPtr, len + 1);
			bytes.set(buf);
			bytes[len] = 0;
		}
		changeContent(text) {
			let { sizes } = this;
			if (text.length > 4096) text = text.slice(0, 4096);
			let buf = Buffer.from(text, "utf8");
			let len = buf.length;
			if (len > sizes[0]) {
				let { malloc, free } = this.exports;
				free(this.contentPtr);
				let byteLength = len + 1;
				this.contentPtr = malloc(byteLength);
				sizes[0] = byteLength;
			}
			let bytes = new Uint8Array(this.exports.memory.buffer, this.contentPtr, len + 1);
			bytes.set(buf);
			bytes[len] = 0;
		}
		match(text) {
			if (this.patternPtr == null) throw new Error("setPattern not called before match");
			if (this.patternLength === 0) return {
				score: 100,
				positions: new Uint32Array()
			};
			this.changeContent(text);
			let { fuzzyMatch, memory } = this.exports;
			let { resultPtr } = this;
			let score = fuzzyMatch(this.contentPtr, this.patternPtr, resultPtr, this.matchSeq ? 1 : 0);
			if (!score) return void 0;
			return {
				score,
				positions: new Uint32Array(memory.buffer, resultPtr, this.patternLength).slice()
			};
		}
		matchHighlights(text, hlGroup) {
			let res = this.match(text);
			if (!res) return void 0;
			let highlights = [];
			for (let span of this.matchSpans(text, res.positions)) highlights.push({
				span,
				hlGroup
			});
			return {
				score: res.score,
				highlights
			};
		}
		free() {
			let ptrs = [
				this.contentPtr,
				this.patternPtr,
				this.resultPtr
			];
			let { free } = this.exports;
			ptrs.forEach((p) => {
				if (p != null) free(p);
			});
			this.contentPtr = this.patternPtr = this.resultPtr = void 0;
		}
	};
}));
//#endregion
//#region src/model/strwidth.ts
async function initStrWidthWasm() {
	const buffer = await fs$6.promises.readFile(wasmPath);
	return (await global.WebAssembly.instantiate(buffer, { env: {} })).instance.exports;
}
var wasmPath, instance, StrWidth;
var init_strwidth = __esmMin((() => {
	init_constants();
	init_node();
	wasmPath = path$5.join(pluginRoot, "bin/strwidth.wasm");
	StrWidth = class StrWidth {
		exports;
		contentPtr;
		bytes;
		cache = /* @__PURE__ */ new Map();
		constructor(exports) {
			this.exports = exports;
			this.bytes = new Uint8Array(exports.memory.buffer);
			this.contentPtr = exports.malloc(4096);
		}
		setAmbw(ambiguousAsDouble) {
			this.exports.setAmbw(ambiguousAsDouble ? 1 : 0);
			this.cache.clear();
		}
		getWidth(content, cache = false) {
			let l = content.length;
			if (l === 0) return 0;
			if (l > 4095) content = content.slice(0, 4095);
			if (cache && this.cache.has(content)) return this.cache.get(content);
			let { contentPtr } = this;
			let buf = Buffer.from(content, "utf8");
			let len = buf.length;
			this.bytes.set(buf, contentPtr);
			this.bytes[contentPtr + len] = 0;
			let res = this.exports.strWidth(contentPtr);
			if (cache) this.cache.set(content, res);
			return res;
		}
		static async create() {
			if (instance) return instance;
			instance = new StrWidth(await initStrWidthWasm());
			return instance;
		}
	};
}));
//#endregion
//#region src/model/quickpick.ts
var QuickPick;
var init_quickpick = __esmMin((() => {
	init_events();
	init_logger$2();
	init_util$7();
	init_array();
	init_filter$1();
	init_protocol();
	init_string$1();
	init_fuzzyMatch();
	init_input();
	init_popup();
	init_strwidth();
	createLogger$1("quickpick");
	QuickPick = class {
		nvim;
		preferences;
		title;
		loading;
		items;
		activeItems;
		selectedItems;
		value;
		canSelectMany = false;
		matchOnDescription = false;
		maxHeight = 30;
		width;
		placeholder;
		bufnr;
		win;
		filteredItems = [];
		disposables = [];
		input;
		_changed = false;
		_onDidFinish = new import_main$1.Emitter();
		_onDidChangeSelection = new import_main$1.Emitter();
		_onDidChangeValue = new import_main$1.Emitter();
		onDidFinish = this._onDidFinish.event;
		onDidChangeSelection = this._onDidChangeSelection.event;
		onDidChangeValue = this._onDidChangeValue.event;
		constructor(nvim, preferences = {}) {
			this.nvim = nvim;
			this.preferences = preferences;
			let items = [];
			let input = this.input = new InputBox(this.nvim, "");
			if (preferences.maxHeight) this.maxHeight = preferences.maxHeight;
			Object.defineProperty(this, "items", {
				set: (list) => {
					items = toArray(list);
					this.selectedItems = items.filter((o) => o.picked);
					this.filterItems("");
				},
				get: () => items
			});
			Object.defineProperty(this, "activeItems", {
				set: (list) => {
					items = toArray(list);
					this.filteredItems = items;
					this.showFilteredItems();
				},
				get: () => this.filteredItems
			});
			Object.defineProperty(this, "value", {
				set: (value) => {
					this.input.value = value;
				},
				get: () => this.input.value
			});
			Object.defineProperty(this, "title", {
				set: (newTitle) => {
					input.title = toText(newTitle);
				},
				get: () => input.title ?? ""
			});
			Object.defineProperty(this, "loading", {
				set: (loading) => {
					input.loading = loading;
				},
				get: () => input.loading
			});
			input.onDidChange((value) => {
				this._changed = false;
				this._onDidChangeValue.fire(value);
				if (this._changed) {
					this._changed = false;
					return;
				}
				this.filterItems(value);
			}, this);
			input.onDidFinish(this.onFinish, this);
		}
		get maxWidth() {
			return this.preferences.maxWidth ?? 80;
		}
		get currIndex() {
			return this.win ? this.win.currIndex : 0;
		}
		get buffer() {
			return this.bufnr ? this.nvim.createBuffer(this.bufnr) : void 0;
		}
		get winid() {
			return this.win?.winid;
		}
		get inputBox() {
			return this.input;
		}
		setCursor(index) {
			this.win?.setCursor(index, true);
		}
		attachEvents(inputBufnr) {
			events_default.on("BufWinLeave", (bufnr) => {
				if (bufnr == this.bufnr) {
					this.bufnr = void 0;
					this.win = void 0;
				}
			}, null, this.disposables);
			events_default.on("InputListSelect", (index) => {
				if (index >= 0) this.setCursor(index);
				this.onFinish(index < 0 ? void 0 : "");
			}, null, this.disposables);
			events_default.on("PromptKeyPress", async (bufnr, key) => {
				if (bufnr == inputBufnr) {
					if (key == "<C-f>") await this.win.scrollForward();
					else if (key == "<C-b>") await this.win.scrollBackward();
					else if ([
						"<C-j>",
						"<C-n>",
						"<down>"
					].includes(key)) this.setCursor(this.currIndex + 1);
					else if ([
						"<C-k>",
						"<C-p>",
						"<up>"
					].includes(key)) this.setCursor(this.currIndex - 1);
					else if (this.canSelectMany && ["<C-@>", "<C-t>"].includes(key)) this.toggePicked(this.currIndex);
				}
			}, null, this.disposables);
		}
		async show() {
			let { nvim, items, input, width, preferences, maxHeight } = this;
			let { lines, highlights } = this.buildList(items, input.value);
			let minWidth;
			let lincount = 0;
			const sw = await StrWidth.create();
			if (typeof width === "number") minWidth = Math.min(width, this.maxWidth);
			let max = 40;
			lines.forEach((line) => {
				let w = sw.getWidth(line);
				if (typeof minWidth === "number") lincount += Math.ceil(w / minWidth);
				else if (w >= 80) {
					minWidth = 80;
					lincount += Math.ceil(w / minWidth);
				} else {
					max = Math.max(max, w);
					lincount += 1;
				}
			});
			if (minWidth === void 0) minWidth = max;
			let rounded = !!preferences.rounded;
			await input.show(this.title, {
				quickpick: lines,
				position: "center",
				placeHolder: this.placeholder,
				marginTop: 10,
				border: [
					1,
					1,
					0,
					1
				],
				list: true,
				rounded,
				minWidth,
				maxWidth: this.maxWidth,
				highlight: preferences.floatHighlight,
				borderhighlight: preferences.floatBorderHighlight
			});
			let opts = {
				lines,
				rounded,
				maxHeight,
				highlights,
				linecount: Math.max(1, lincount)
			};
			if (preferences.floatHighlight !== void 0) opts.highlight = preferences.floatHighlight;
			if (preferences.floatBorderHighlight !== void 0) opts.borderhighlight = preferences.floatBorderHighlight;
			let res = await nvim.call("coc#dialog#create_list", [
				input.winid,
				input.dimension,
				opts
			]);
			if (!res) throw new Error("Unable to open list window.");
			this.win = new Popup(nvim, res[0], res[1], lines.length);
			this.win.refreshScrollbar();
			this.bufnr = res[1];
			this.setCursor(0);
			this.attachEvents(input.bufnr);
		}
		buildList(items, input, loose = false) {
			let { selectedItems, canSelectMany } = this;
			let filteredItems = [];
			let filtered = [];
			let emptyInput = input.length === 0;
			let lowInput = input.toLowerCase();
			const scoreFn = loose ? anyScore : fuzzyScoreGracefulAggressive;
			const wordPos = canSelectMany ? 4 : 0;
			for (let index = 0; index < items.length; index++) {
				const item = items[index];
				let filterText = this.toFilterText(item);
				let spans = [];
				let score = 0;
				let descriptionSpan;
				if (!emptyInput) {
					let res = scoreFn(input, lowInput, 0, filterText, filterText.toLowerCase(), wordPos, {
						boostFullMatch: false,
						firstMatchCanBeWeak: true
					});
					if (!res) continue;
					score = loose ? 0 : res[0];
					spans = toSpans(filterText, res);
				}
				let picked = selectedItems.includes(item);
				let line = canSelectMany ? `[${picked ? "x" : " "}] ${item.label}` : item.label;
				if (item.description) {
					let start = byteLength(line);
					line = line + ` ${item.description}`;
					descriptionSpan = [start, start + 1 + byteLength(item.description)];
				}
				let lineItem = {
					line,
					descriptionSpan,
					index,
					score,
					spans
				};
				filtered.push(lineItem);
			}
			let lines = [];
			let highlights = [];
			filtered.sort((a, b) => {
				if (a.score != b.score) return b.score - a.score;
				return a.index - b.index;
			});
			const toHighlight = (lnum, span, hlGroup, pre) => {
				return {
					lnum,
					colStart: span[0] + pre,
					colEnd: span[1] + pre,
					hlGroup
				};
			};
			filtered.forEach((item, index) => {
				lines.push(item.line);
				item.spans.forEach((span) => {
					highlights.push(toHighlight(index, span, "CocSearch", wordPos));
				});
				if (item.descriptionSpan) highlights.push(toHighlight(index, item.descriptionSpan, "Comment", 0));
				filteredItems.push(items[item.index]);
			});
			this.filteredItems = filteredItems;
			return {
				lines,
				highlights
			};
		}
		/**
		* Filter items, does highlight only when loose is true
		*/
		_filter(items, input, loose = false) {
			if (!this.win) return;
			this._changed = true;
			let { lines, highlights } = this.buildList(items, input, loose);
			this.nvim.call("coc#dialog#update_list", [
				this.win.winid,
				this.win.bufnr,
				lines,
				highlights
			], true);
			this.win.linecount = lines.length;
			this.setCursor(0);
		}
		/**
		* Filter items with input
		*/
		filterItems(input) {
			this._filter(this.items, input);
		}
		showFilteredItems() {
			let { input, filteredItems } = this;
			this._filter(filteredItems, input.value, true);
		}
		onFinish(input) {
			let items = input == null ? null : this.getSelectedItems();
			if (!this.canSelectMany && input !== void 0 && Array.isArray(items)) this._onDidChangeSelection.fire(items);
			this.nvim.call("coc#float#close", [this.winid], true);
			setTimeout(() => {
				this._onDidFinish.fire(items);
				this.dispose();
			}, 30);
		}
		getSelectedItems() {
			let { canSelectMany } = this;
			if (canSelectMany) return this.selectedItems;
			return toArray(this.filteredItems[this.currIndex]);
		}
		toggePicked(index) {
			let { nvim, filteredItems, selectedItems } = this;
			let item = filteredItems[index];
			if (!item) return;
			let idx = selectedItems.indexOf(item);
			if (idx != -1) selectedItems.splice(idx, 1);
			else selectedItems.push(item);
			let text = idx == -1 ? "x" : " ";
			nvim.pauseNotification();
			this.win.execute(`normal! ^1lr${text}`);
			this.win.setCursor(this.win.currIndex + 1);
			nvim.resumeNotification(true, true);
			this._onDidChangeSelection.fire(selectedItems);
		}
		toFilterText(item) {
			let { label, description } = item;
			let { canSelectMany } = this;
			let line = `${canSelectMany ? "    " : ""}${label.replace(/\r?\n/, "")}`;
			return this.matchOnDescription ? line + " " + (description ?? "") : line;
		}
		dispose() {
			this.bufnr = void 0;
			this.input.dispose();
			this.win?.close();
			this._onDidFinish.dispose();
			this._onDidChangeSelection.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/util/mutex.ts
var Mutex;
var init_mutex = __esmMin((() => {
	Mutex = class {
		tasks = [];
		count = 1;
		sched() {
			if (this.count > 0 && this.tasks.length > 0) {
				this.count--;
				this.tasks.shift()();
			}
		}
		reset() {
			this.tasks = [];
			this.count = 1;
		}
		get busy() {
			return this.count == 0;
		}
		acquire() {
			return new Promise((res) => {
				let task = () => {
					let released = false;
					res(() => {
						if (!released) {
							released = true;
							this.count++;
							this.sched();
						}
					});
				};
				this.tasks.push(task);
				process.nextTick(this.sched.bind(this));
			});
		}
		use(f) {
			return this.acquire().then((release) => f().then((res) => {
				release();
				return res;
			}).catch((err) => {
				release();
				throw err;
			}));
		}
	};
}));
//#endregion
//#region node_modules/safer-buffer/safer.js
var require_safer = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var buffer$1 = require("buffer");
	var Buffer = buffer$1.Buffer;
	var safer = {};
	var key;
	for (key in buffer$1) {
		if (!buffer$1.hasOwnProperty(key)) continue;
		if (key === "SlowBuffer" || key === "Buffer") continue;
		safer[key] = buffer$1[key];
	}
	var Safer = safer.Buffer = {};
	for (key in Buffer) {
		if (!Buffer.hasOwnProperty(key)) continue;
		if (key === "allocUnsafe" || key === "allocUnsafeSlow") continue;
		Safer[key] = Buffer[key];
	}
	safer.Buffer.prototype = Buffer.prototype;
	if (!Safer.from || Safer.from === Uint8Array.from) Safer.from = function(value, encodingOrOffset, length) {
		if (typeof value === "number") throw new TypeError("The \"value\" argument must not be of type number. Received type " + typeof value);
		if (value && typeof value.length === "undefined") throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value);
		return Buffer(value, encodingOrOffset, length);
	};
	if (!Safer.alloc) Safer.alloc = function(size, fill, encoding) {
		if (typeof size !== "number") throw new TypeError("The \"size\" argument must be of type number. Received type " + typeof size);
		if (size < 0 || size >= 2 * (1 << 30)) throw new RangeError("The value \"" + size + "\" is invalid for option \"size\"");
		var buf = Buffer(size);
		if (!fill || fill.length === 0) buf.fill(0);
		else if (typeof encoding === "string") buf.fill(fill, encoding);
		else buf.fill(fill);
		return buf;
	};
	if (!safer.kStringMaxLength) try {
		safer.kStringMaxLength = process.binding("buffer").kStringMaxLength;
	} catch (e) {}
	if (!safer.constants) {
		safer.constants = { MAX_LENGTH: safer.kMaxLength };
		if (safer.kStringMaxLength) safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength;
	}
	module.exports = safer;
}));
//#endregion
//#region node_modules/iconv-lite/lib/bom-handling.js
var require_bom_handling = /* @__PURE__ */ __commonJSMin(((exports) => {
	var BOMChar = "﻿";
	exports.PrependBOM = PrependBOMWrapper;
	function PrependBOMWrapper(encoder, options) {
		this.encoder = encoder;
		this.addBOM = true;
	}
	PrependBOMWrapper.prototype.write = function(str) {
		if (this.addBOM) {
			str = BOMChar + str;
			this.addBOM = false;
		}
		return this.encoder.write(str);
	};
	PrependBOMWrapper.prototype.end = function() {
		return this.encoder.end();
	};
	exports.StripBOM = StripBOMWrapper;
	function StripBOMWrapper(decoder, options) {
		this.decoder = decoder;
		this.pass = false;
		this.options = options || {};
	}
	StripBOMWrapper.prototype.write = function(buf) {
		var res = this.decoder.write(buf);
		if (this.pass || !res) return res;
		if (res[0] === BOMChar) {
			res = res.slice(1);
			if (typeof this.options.stripBOM === "function") this.options.stripBOM();
		}
		this.pass = true;
		return res;
	};
	StripBOMWrapper.prototype.end = function() {
		return this.decoder.end();
	};
}));
//#endregion
//#region node_modules/iconv-lite/lib/helpers/merge-exports.js
var require_merge_exports = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var hasOwn = typeof Object.hasOwn === "undefined" ? Function.call.bind(Object.prototype.hasOwnProperty) : Object.hasOwn;
	function mergeModules(target, module$1) {
		for (var key in module$1) if (hasOwn(module$1, key)) target[key] = module$1[key];
	}
	module.exports = mergeModules;
}));
//#endregion
//#region node_modules/iconv-lite/encodings/internal.js
var require_internal = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var Buffer = require_safer().Buffer;
	module.exports = {
		utf8: {
			type: "_internal",
			bomAware: true
		},
		cesu8: {
			type: "_internal",
			bomAware: true
		},
		unicode11utf8: "utf8",
		ucs2: {
			type: "_internal",
			bomAware: true
		},
		utf16le: "ucs2",
		binary: { type: "_internal" },
		base64: { type: "_internal" },
		hex: { type: "_internal" },
		_internal: InternalCodec
	};
	function InternalCodec(codecOptions, iconv) {
		this.enc = codecOptions.encodingName;
		this.bomAware = codecOptions.bomAware;
		if (this.enc === "base64") this.encoder = InternalEncoderBase64;
		else if (this.enc === "utf8") this.encoder = InternalEncoderUtf8;
		else if (this.enc === "cesu8") {
			this.enc = "utf8";
			this.encoder = InternalEncoderCesu8;
			if (Buffer.from("eda0bdedb2a9", "hex").toString() !== "💩") {
				this.decoder = InternalDecoderCesu8;
				this.defaultCharUnicode = iconv.defaultCharUnicode;
			}
		}
	}
	InternalCodec.prototype.encoder = InternalEncoder;
	InternalCodec.prototype.decoder = InternalDecoder;
	var StringDecoder = require("string_decoder").StringDecoder;
	function InternalDecoder(options, codec) {
		this.decoder = new StringDecoder(codec.enc);
	}
	InternalDecoder.prototype.write = function(buf) {
		if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);
		return this.decoder.write(buf);
	};
	InternalDecoder.prototype.end = function() {
		return this.decoder.end();
	};
	function InternalEncoder(options, codec) {
		this.enc = codec.enc;
	}
	InternalEncoder.prototype.write = function(str) {
		return Buffer.from(str, this.enc);
	};
	InternalEncoder.prototype.end = function() {};
	function InternalEncoderBase64(options, codec) {
		this.prevStr = "";
	}
	InternalEncoderBase64.prototype.write = function(str) {
		str = this.prevStr + str;
		var completeQuads = str.length - str.length % 4;
		this.prevStr = str.slice(completeQuads);
		str = str.slice(0, completeQuads);
		return Buffer.from(str, "base64");
	};
	InternalEncoderBase64.prototype.end = function() {
		return Buffer.from(this.prevStr, "base64");
	};
	function InternalEncoderCesu8(options, codec) {}
	InternalEncoderCesu8.prototype.write = function(str) {
		var buf = Buffer.alloc(str.length * 3);
		var bufIdx = 0;
		for (var i = 0; i < str.length; i++) {
			var charCode = str.charCodeAt(i);
			if (charCode < 128) buf[bufIdx++] = charCode;
			else if (charCode < 2048) {
				buf[bufIdx++] = 192 + (charCode >>> 6);
				buf[bufIdx++] = 128 + (charCode & 63);
			} else {
				buf[bufIdx++] = 224 + (charCode >>> 12);
				buf[bufIdx++] = 128 + (charCode >>> 6 & 63);
				buf[bufIdx++] = 128 + (charCode & 63);
			}
		}
		return buf.slice(0, bufIdx);
	};
	InternalEncoderCesu8.prototype.end = function() {};
	function InternalDecoderCesu8(options, codec) {
		this.acc = 0;
		this.contBytes = 0;
		this.accBytes = 0;
		this.defaultCharUnicode = codec.defaultCharUnicode;
	}
	InternalDecoderCesu8.prototype.write = function(buf) {
		var acc = this.acc;
		var contBytes = this.contBytes;
		var accBytes = this.accBytes;
		var res = "";
		for (var i = 0; i < buf.length; i++) {
			var curByte = buf[i];
			if ((curByte & 192) !== 128) {
				if (contBytes > 0) {
					res += this.defaultCharUnicode;
					contBytes = 0;
				}
				if (curByte < 128) res += String.fromCharCode(curByte);
				else if (curByte < 224) {
					acc = curByte & 31;
					contBytes = 1;
					accBytes = 1;
				} else if (curByte < 240) {
					acc = curByte & 15;
					contBytes = 2;
					accBytes = 1;
				} else res += this.defaultCharUnicode;
			} else if (contBytes > 0) {
				acc = acc << 6 | curByte & 63;
				contBytes--;
				accBytes++;
				if (contBytes === 0) if (accBytes === 2 && acc < 128 && acc > 0) res += this.defaultCharUnicode;
				else if (accBytes === 3 && acc < 2048) res += this.defaultCharUnicode;
				else res += String.fromCharCode(acc);
			} else res += this.defaultCharUnicode;
		}
		this.acc = acc;
		this.contBytes = contBytes;
		this.accBytes = accBytes;
		return res;
	};
	InternalDecoderCesu8.prototype.end = function() {
		var res = 0;
		if (this.contBytes > 0) res += this.defaultCharUnicode;
		return res;
	};
	function InternalEncoderUtf8(options, codec) {
		this.highSurrogate = "";
	}
	InternalEncoderUtf8.prototype.write = function(str) {
		if (this.highSurrogate) {
			str = this.highSurrogate + str;
			this.highSurrogate = "";
		}
		if (str.length > 0) {
			var charCode = str.charCodeAt(str.length - 1);
			if (charCode >= 55296 && charCode < 56320) {
				this.highSurrogate = str[str.length - 1];
				str = str.slice(0, str.length - 1);
			}
		}
		return Buffer.from(str, this.enc);
	};
	InternalEncoderUtf8.prototype.end = function() {
		if (this.highSurrogate) {
			var str = this.highSurrogate;
			this.highSurrogate = "";
			return Buffer.from(str, this.enc);
		}
	};
}));
//#endregion
//#region node_modules/iconv-lite/encodings/utf32.js
var require_utf32 = /* @__PURE__ */ __commonJSMin(((exports) => {
	var Buffer = require_safer().Buffer;
	exports._utf32 = Utf32Codec;
	function Utf32Codec(codecOptions, iconv) {
		this.iconv = iconv;
		this.bomAware = true;
		this.isLE = codecOptions.isLE;
	}
	exports.utf32le = {
		type: "_utf32",
		isLE: true
	};
	exports.utf32be = {
		type: "_utf32",
		isLE: false
	};
	exports.ucs4le = "utf32le";
	exports.ucs4be = "utf32be";
	Utf32Codec.prototype.encoder = Utf32Encoder;
	Utf32Codec.prototype.decoder = Utf32Decoder;
	function Utf32Encoder(options, codec) {
		this.isLE = codec.isLE;
		this.highSurrogate = 0;
	}
	Utf32Encoder.prototype.write = function(str) {
		var src = Buffer.from(str, "ucs2");
		var dst = Buffer.alloc(src.length * 2);
		var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;
		var offset = 0;
		for (var i = 0; i < src.length; i += 2) {
			var code = src.readUInt16LE(i);
			var isHighSurrogate = code >= 55296 && code < 56320;
			var isLowSurrogate = code >= 56320 && code < 57344;
			if (this.highSurrogate) if (isHighSurrogate || !isLowSurrogate) {
				write32.call(dst, this.highSurrogate, offset);
				offset += 4;
			} else {
				var codepoint = (this.highSurrogate - 55296 << 10 | code - 56320) + 65536;
				write32.call(dst, codepoint, offset);
				offset += 4;
				this.highSurrogate = 0;
				continue;
			}
			if (isHighSurrogate) this.highSurrogate = code;
			else {
				write32.call(dst, code, offset);
				offset += 4;
				this.highSurrogate = 0;
			}
		}
		if (offset < dst.length) dst = dst.slice(0, offset);
		return dst;
	};
	Utf32Encoder.prototype.end = function() {
		if (!this.highSurrogate) return;
		var buf = Buffer.alloc(4);
		if (this.isLE) buf.writeUInt32LE(this.highSurrogate, 0);
		else buf.writeUInt32BE(this.highSurrogate, 0);
		this.highSurrogate = 0;
		return buf;
	};
	function Utf32Decoder(options, codec) {
		this.isLE = codec.isLE;
		this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);
		this.overflow = [];
	}
	Utf32Decoder.prototype.write = function(src) {
		if (src.length === 0) return "";
		var i = 0;
		var codepoint = 0;
		var dst = Buffer.alloc(src.length + 4);
		var offset = 0;
		var isLE = this.isLE;
		var overflow = this.overflow;
		var badChar = this.badChar;
		if (overflow.length > 0) {
			for (; i < src.length && overflow.length < 4; i++) overflow.push(src[i]);
			if (overflow.length === 4) {
				if (isLE) codepoint = overflow[i] | overflow[i + 1] << 8 | overflow[i + 2] << 16 | overflow[i + 3] << 24;
				else codepoint = overflow[i + 3] | overflow[i + 2] << 8 | overflow[i + 1] << 16 | overflow[i] << 24;
				overflow.length = 0;
				offset = _writeCodepoint(dst, offset, codepoint, badChar);
			}
		}
		for (; i < src.length - 3; i += 4) {
			if (isLE) codepoint = src[i] | src[i + 1] << 8 | src[i + 2] << 16 | src[i + 3] << 24;
			else codepoint = src[i + 3] | src[i + 2] << 8 | src[i + 1] << 16 | src[i] << 24;
			offset = _writeCodepoint(dst, offset, codepoint, badChar);
		}
		for (; i < src.length; i++) overflow.push(src[i]);
		return dst.slice(0, offset).toString("ucs2");
	};
	function _writeCodepoint(dst, offset, codepoint, badChar) {
		if (codepoint < 0 || codepoint > 1114111) codepoint = badChar;
		if (codepoint >= 65536) {
			codepoint -= 65536;
			var high = 55296 | codepoint >> 10;
			dst[offset++] = high & 255;
			dst[offset++] = high >> 8;
			var codepoint = 56320 | codepoint & 1023;
		}
		dst[offset++] = codepoint & 255;
		dst[offset++] = codepoint >> 8;
		return offset;
	}
	Utf32Decoder.prototype.end = function() {
		this.overflow.length = 0;
	};
	exports.utf32 = Utf32AutoCodec;
	exports.ucs4 = "utf32";
	function Utf32AutoCodec(options, iconv) {
		this.iconv = iconv;
	}
	Utf32AutoCodec.prototype.encoder = Utf32AutoEncoder;
	Utf32AutoCodec.prototype.decoder = Utf32AutoDecoder;
	function Utf32AutoEncoder(options, codec) {
		options = options || {};
		if (options.addBOM === void 0) options.addBOM = true;
		this.encoder = codec.iconv.getEncoder(options.defaultEncoding || "utf-32le", options);
	}
	Utf32AutoEncoder.prototype.write = function(str) {
		return this.encoder.write(str);
	};
	Utf32AutoEncoder.prototype.end = function() {
		return this.encoder.end();
	};
	function Utf32AutoDecoder(options, codec) {
		this.decoder = null;
		this.initialBufs = [];
		this.initialBufsLen = 0;
		this.options = options || {};
		this.iconv = codec.iconv;
	}
	Utf32AutoDecoder.prototype.write = function(buf) {
		if (!this.decoder) {
			this.initialBufs.push(buf);
			this.initialBufsLen += buf.length;
			if (this.initialBufsLen < 32) return "";
			var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
			this.decoder = this.iconv.getDecoder(encoding, this.options);
			var resStr = "";
			for (var i = 0; i < this.initialBufs.length; i++) resStr += this.decoder.write(this.initialBufs[i]);
			this.initialBufs.length = this.initialBufsLen = 0;
			return resStr;
		}
		return this.decoder.write(buf);
	};
	Utf32AutoDecoder.prototype.end = function() {
		if (!this.decoder) {
			var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
			this.decoder = this.iconv.getDecoder(encoding, this.options);
			var resStr = "";
			for (var i = 0; i < this.initialBufs.length; i++) resStr += this.decoder.write(this.initialBufs[i]);
			var trail = this.decoder.end();
			if (trail) resStr += trail;
			this.initialBufs.length = this.initialBufsLen = 0;
			return resStr;
		}
		return this.decoder.end();
	};
	function detectEncoding(bufs, defaultEncoding) {
		var b = [];
		var charsProcessed = 0;
		var invalidLE = 0;
		var invalidBE = 0;
		var bmpCharsLE = 0;
		var bmpCharsBE = 0;
		outerLoop: for (var i = 0; i < bufs.length; i++) {
			var buf = bufs[i];
			for (var j = 0; j < buf.length; j++) {
				b.push(buf[j]);
				if (b.length === 4) {
					if (charsProcessed === 0) {
						if (b[0] === 255 && b[1] === 254 && b[2] === 0 && b[3] === 0) return "utf-32le";
						if (b[0] === 0 && b[1] === 0 && b[2] === 254 && b[3] === 255) return "utf-32be";
					}
					if (b[0] !== 0 || b[1] > 16) invalidBE++;
					if (b[3] !== 0 || b[2] > 16) invalidLE++;
					if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;
					if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;
					b.length = 0;
					charsProcessed++;
					if (charsProcessed >= 100) break outerLoop;
				}
			}
		}
		if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return "utf-32be";
		if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return "utf-32le";
		return defaultEncoding || "utf-32le";
	}
}));
//#endregion
//#region node_modules/iconv-lite/encodings/utf16.js
var require_utf16 = /* @__PURE__ */ __commonJSMin(((exports) => {
	var Buffer = require_safer().Buffer;
	exports.utf16be = Utf16BECodec;
	function Utf16BECodec() {}
	Utf16BECodec.prototype.encoder = Utf16BEEncoder;
	Utf16BECodec.prototype.decoder = Utf16BEDecoder;
	Utf16BECodec.prototype.bomAware = true;
	function Utf16BEEncoder() {}
	Utf16BEEncoder.prototype.write = function(str) {
		var buf = Buffer.from(str, "ucs2");
		for (var i = 0; i < buf.length; i += 2) {
			var tmp = buf[i];
			buf[i] = buf[i + 1];
			buf[i + 1] = tmp;
		}
		return buf;
	};
	Utf16BEEncoder.prototype.end = function() {};
	function Utf16BEDecoder() {
		this.overflowByte = -1;
	}
	Utf16BEDecoder.prototype.write = function(buf) {
		if (buf.length == 0) return "";
		var buf2 = Buffer.alloc(buf.length + 1);
		var i = 0;
		var j = 0;
		if (this.overflowByte !== -1) {
			buf2[0] = buf[0];
			buf2[1] = this.overflowByte;
			i = 1;
			j = 2;
		}
		for (; i < buf.length - 1; i += 2, j += 2) {
			buf2[j] = buf[i + 1];
			buf2[j + 1] = buf[i];
		}
		this.overflowByte = i == buf.length - 1 ? buf[buf.length - 1] : -1;
		return buf2.slice(0, j).toString("ucs2");
	};
	Utf16BEDecoder.prototype.end = function() {
		this.overflowByte = -1;
	};
	exports.utf16 = Utf16Codec;
	function Utf16Codec(codecOptions, iconv) {
		this.iconv = iconv;
	}
	Utf16Codec.prototype.encoder = Utf16Encoder;
	Utf16Codec.prototype.decoder = Utf16Decoder;
	function Utf16Encoder(options, codec) {
		options = options || {};
		if (options.addBOM === void 0) options.addBOM = true;
		this.encoder = codec.iconv.getEncoder("utf-16le", options);
	}
	Utf16Encoder.prototype.write = function(str) {
		return this.encoder.write(str);
	};
	Utf16Encoder.prototype.end = function() {
		return this.encoder.end();
	};
	function Utf16Decoder(options, codec) {
		this.decoder = null;
		this.initialBufs = [];
		this.initialBufsLen = 0;
		this.options = options || {};
		this.iconv = codec.iconv;
	}
	Utf16Decoder.prototype.write = function(buf) {
		if (!this.decoder) {
			this.initialBufs.push(buf);
			this.initialBufsLen += buf.length;
			if (this.initialBufsLen < 16) return "";
			var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
			this.decoder = this.iconv.getDecoder(encoding, this.options);
			var resStr = "";
			for (var i = 0; i < this.initialBufs.length; i++) resStr += this.decoder.write(this.initialBufs[i]);
			this.initialBufs.length = this.initialBufsLen = 0;
			return resStr;
		}
		return this.decoder.write(buf);
	};
	Utf16Decoder.prototype.end = function() {
		if (!this.decoder) {
			var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
			this.decoder = this.iconv.getDecoder(encoding, this.options);
			var resStr = "";
			for (var i = 0; i < this.initialBufs.length; i++) resStr += this.decoder.write(this.initialBufs[i]);
			var trail = this.decoder.end();
			if (trail) resStr += trail;
			this.initialBufs.length = this.initialBufsLen = 0;
			return resStr;
		}
		return this.decoder.end();
	};
	function detectEncoding(bufs, defaultEncoding) {
		var b = [];
		var charsProcessed = 0;
		var asciiCharsLE = 0;
		var asciiCharsBE = 0;
		outerLoop: for (var i = 0; i < bufs.length; i++) {
			var buf = bufs[i];
			for (var j = 0; j < buf.length; j++) {
				b.push(buf[j]);
				if (b.length === 2) {
					if (charsProcessed === 0) {
						if (b[0] === 255 && b[1] === 254) return "utf-16le";
						if (b[0] === 254 && b[1] === 255) return "utf-16be";
					}
					if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;
					if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;
					b.length = 0;
					charsProcessed++;
					if (charsProcessed >= 100) break outerLoop;
				}
			}
		}
		if (asciiCharsBE > asciiCharsLE) return "utf-16be";
		if (asciiCharsBE < asciiCharsLE) return "utf-16le";
		return defaultEncoding || "utf-16le";
	}
}));
//#endregion
//#region node_modules/iconv-lite/encodings/utf7.js
var require_utf7 = /* @__PURE__ */ __commonJSMin(((exports) => {
	var Buffer = require_safer().Buffer;
	exports.utf7 = Utf7Codec;
	exports.unicode11utf7 = "utf7";
	function Utf7Codec(codecOptions, iconv) {
		this.iconv = iconv;
	}
	Utf7Codec.prototype.encoder = Utf7Encoder;
	Utf7Codec.prototype.decoder = Utf7Decoder;
	Utf7Codec.prototype.bomAware = true;
	var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;
	function Utf7Encoder(options, codec) {
		this.iconv = codec.iconv;
	}
	Utf7Encoder.prototype.write = function(str) {
		return Buffer.from(str.replace(nonDirectChars, function(chunk) {
			return "+" + (chunk === "+" ? "" : this.iconv.encode(chunk, "utf16-be").toString("base64").replace(/=+$/, "")) + "-";
		}.bind(this)));
	};
	Utf7Encoder.prototype.end = function() {};
	function Utf7Decoder(options, codec) {
		this.iconv = codec.iconv;
		this.inBase64 = false;
		this.base64Accum = "";
	}
	var base64Regex = /[A-Za-z0-9\/+]/;
	var base64Chars = [];
	for (var i = 0; i < 256; i++) base64Chars[i] = base64Regex.test(String.fromCharCode(i));
	var plusChar = "+".charCodeAt(0);
	var minusChar = "-".charCodeAt(0);
	var andChar = "&".charCodeAt(0);
	Utf7Decoder.prototype.write = function(buf) {
		var res = "";
		var lastI = 0;
		var inBase64 = this.inBase64;
		var base64Accum = this.base64Accum;
		for (var i = 0; i < buf.length; i++) if (!inBase64) {
			if (buf[i] == plusChar) {
				res += this.iconv.decode(buf.slice(lastI, i), "ascii");
				lastI = i + 1;
				inBase64 = true;
			}
		} else if (!base64Chars[buf[i]]) {
			if (i == lastI && buf[i] == minusChar) res += "+";
			else {
				var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), "ascii");
				res += this.iconv.decode(Buffer.from(b64str, "base64"), "utf16-be");
			}
			if (buf[i] != minusChar) i--;
			lastI = i + 1;
			inBase64 = false;
			base64Accum = "";
		}
		if (!inBase64) res += this.iconv.decode(buf.slice(lastI), "ascii");
		else {
			var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii");
			var canBeDecoded = b64str.length - b64str.length % 8;
			base64Accum = b64str.slice(canBeDecoded);
			b64str = b64str.slice(0, canBeDecoded);
			res += this.iconv.decode(Buffer.from(b64str, "base64"), "utf16-be");
		}
		this.inBase64 = inBase64;
		this.base64Accum = base64Accum;
		return res;
	};
	Utf7Decoder.prototype.end = function() {
		var res = "";
		if (this.inBase64 && this.base64Accum.length > 0) res = this.iconv.decode(Buffer.from(this.base64Accum, "base64"), "utf16-be");
		this.inBase64 = false;
		this.base64Accum = "";
		return res;
	};
	exports.utf7imap = Utf7IMAPCodec;
	function Utf7IMAPCodec(codecOptions, iconv) {
		this.iconv = iconv;
	}
	Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;
	Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;
	Utf7IMAPCodec.prototype.bomAware = true;
	function Utf7IMAPEncoder(options, codec) {
		this.iconv = codec.iconv;
		this.inBase64 = false;
		this.base64Accum = Buffer.alloc(6);
		this.base64AccumIdx = 0;
	}
	Utf7IMAPEncoder.prototype.write = function(str) {
		var inBase64 = this.inBase64;
		var base64Accum = this.base64Accum;
		var base64AccumIdx = this.base64AccumIdx;
		var buf = Buffer.alloc(str.length * 5 + 10);
		var bufIdx = 0;
		for (var i = 0; i < str.length; i++) {
			var uChar = str.charCodeAt(i);
			if (uChar >= 32 && uChar <= 126) {
				if (inBase64) {
					if (base64AccumIdx > 0) {
						bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
						base64AccumIdx = 0;
					}
					buf[bufIdx++] = minusChar;
					inBase64 = false;
				}
				if (!inBase64) {
					buf[bufIdx++] = uChar;
					if (uChar === andChar) buf[bufIdx++] = minusChar;
				}
			} else {
				if (!inBase64) {
					buf[bufIdx++] = andChar;
					inBase64 = true;
				}
				if (inBase64) {
					base64Accum[base64AccumIdx++] = uChar >> 8;
					base64Accum[base64AccumIdx++] = uChar & 255;
					if (base64AccumIdx == base64Accum.length) {
						bufIdx += buf.write(base64Accum.toString("base64").replace(/\//g, ","), bufIdx);
						base64AccumIdx = 0;
					}
				}
			}
		}
		this.inBase64 = inBase64;
		this.base64AccumIdx = base64AccumIdx;
		return buf.slice(0, bufIdx);
	};
	Utf7IMAPEncoder.prototype.end = function() {
		var buf = Buffer.alloc(10);
		var bufIdx = 0;
		if (this.inBase64) {
			if (this.base64AccumIdx > 0) {
				bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
				this.base64AccumIdx = 0;
			}
			buf[bufIdx++] = minusChar;
			this.inBase64 = false;
		}
		return buf.slice(0, bufIdx);
	};
	function Utf7IMAPDecoder(options, codec) {
		this.iconv = codec.iconv;
		this.inBase64 = false;
		this.base64Accum = "";
	}
	var base64IMAPChars = base64Chars.slice();
	base64IMAPChars[",".charCodeAt(0)] = true;
	Utf7IMAPDecoder.prototype.write = function(buf) {
		var res = "";
		var lastI = 0;
		var inBase64 = this.inBase64;
		var base64Accum = this.base64Accum;
		for (var i = 0; i < buf.length; i++) if (!inBase64) {
			if (buf[i] == andChar) {
				res += this.iconv.decode(buf.slice(lastI, i), "ascii");
				lastI = i + 1;
				inBase64 = true;
			}
		} else if (!base64IMAPChars[buf[i]]) {
			if (i == lastI && buf[i] == minusChar) res += "&";
			else {
				var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), "ascii").replace(/,/g, "/");
				res += this.iconv.decode(Buffer.from(b64str, "base64"), "utf16-be");
			}
			if (buf[i] != minusChar) i--;
			lastI = i + 1;
			inBase64 = false;
			base64Accum = "";
		}
		if (!inBase64) res += this.iconv.decode(buf.slice(lastI), "ascii");
		else {
			var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii").replace(/,/g, "/");
			var canBeDecoded = b64str.length - b64str.length % 8;
			base64Accum = b64str.slice(canBeDecoded);
			b64str = b64str.slice(0, canBeDecoded);
			res += this.iconv.decode(Buffer.from(b64str, "base64"), "utf16-be");
		}
		this.inBase64 = inBase64;
		this.base64Accum = base64Accum;
		return res;
	};
	Utf7IMAPDecoder.prototype.end = function() {
		var res = "";
		if (this.inBase64 && this.base64Accum.length > 0) res = this.iconv.decode(Buffer.from(this.base64Accum, "base64"), "utf16-be");
		this.inBase64 = false;
		this.base64Accum = "";
		return res;
	};
}));
//#endregion
//#region node_modules/iconv-lite/encodings/sbcs-codec.js
var require_sbcs_codec = /* @__PURE__ */ __commonJSMin(((exports) => {
	var Buffer = require_safer().Buffer;
	exports._sbcs = SBCSCodec;
	function SBCSCodec(codecOptions, iconv) {
		if (!codecOptions) throw new Error("SBCS codec is called without the data.");
		if (!codecOptions.chars || codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256) throw new Error("Encoding '" + codecOptions.type + "' has incorrect 'chars' (must be of len 128 or 256)");
		if (codecOptions.chars.length === 128) {
			var asciiString = "";
			for (var i = 0; i < 128; i++) asciiString += String.fromCharCode(i);
			codecOptions.chars = asciiString + codecOptions.chars;
		}
		this.decodeBuf = Buffer.from(codecOptions.chars, "ucs2");
		var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));
		for (var i = 0; i < codecOptions.chars.length; i++) encodeBuf[codecOptions.chars.charCodeAt(i)] = i;
		this.encodeBuf = encodeBuf;
	}
	SBCSCodec.prototype.encoder = SBCSEncoder;
	SBCSCodec.prototype.decoder = SBCSDecoder;
	function SBCSEncoder(options, codec) {
		this.encodeBuf = codec.encodeBuf;
	}
	SBCSEncoder.prototype.write = function(str) {
		var buf = Buffer.alloc(str.length);
		for (var i = 0; i < str.length; i++) buf[i] = this.encodeBuf[str.charCodeAt(i)];
		return buf;
	};
	SBCSEncoder.prototype.end = function() {};
	function SBCSDecoder(options, codec) {
		this.decodeBuf = codec.decodeBuf;
	}
	SBCSDecoder.prototype.write = function(buf) {
		var decodeBuf = this.decodeBuf;
		var newBuf = Buffer.alloc(buf.length * 2);
		var idx1 = 0;
		var idx2 = 0;
		for (var i = 0; i < buf.length; i++) {
			idx1 = buf[i] * 2;
			idx2 = i * 2;
			newBuf[idx2] = decodeBuf[idx1];
			newBuf[idx2 + 1] = decodeBuf[idx1 + 1];
		}
		return newBuf.toString("ucs2");
	};
	SBCSDecoder.prototype.end = function() {};
}));
//#endregion
//#region node_modules/iconv-lite/encodings/sbcs-data.js
var require_sbcs_data = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = {
		10029: "maccenteuro",
		maccenteuro: {
			type: "_sbcs",
			chars: "ÄĀāÉĄÖÜáąČäčĆćéŹźĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņŃ¬√ńŇ∆«»…\xA0ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ"
		},
		808: "cp808",
		ibm808: "cp808",
		cp808: {
			type: "_sbcs",
			chars: "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■\xA0"
		},
		mik: {
			type: "_sbcs",
			chars: "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"
		},
		cp720: {
			type: "_sbcs",
			chars: "éâàçêëèïîّْô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡ًٌٍَُِ≈°∙·√ⁿ²■\xA0"
		},
		ascii8bit: "ascii",
		usascii: "ascii",
		ansix34: "ascii",
		ansix341968: "ascii",
		ansix341986: "ascii",
		csascii: "ascii",
		cp367: "ascii",
		ibm367: "ascii",
		isoir6: "ascii",
		iso646us: "ascii",
		iso646irv: "ascii",
		us: "ascii",
		latin1: "iso88591",
		latin2: "iso88592",
		latin3: "iso88593",
		latin4: "iso88594",
		latin5: "iso88599",
		latin6: "iso885910",
		latin7: "iso885913",
		latin8: "iso885914",
		latin9: "iso885915",
		latin10: "iso885916",
		csisolatin1: "iso88591",
		csisolatin2: "iso88592",
		csisolatin3: "iso88593",
		csisolatin4: "iso88594",
		csisolatincyrillic: "iso88595",
		csisolatinarabic: "iso88596",
		csisolatingreek: "iso88597",
		csisolatinhebrew: "iso88598",
		csisolatin5: "iso88599",
		csisolatin6: "iso885910",
		l1: "iso88591",
		l2: "iso88592",
		l3: "iso88593",
		l4: "iso88594",
		l5: "iso88599",
		l6: "iso885910",
		l7: "iso885913",
		l8: "iso885914",
		l9: "iso885915",
		l10: "iso885916",
		isoir14: "iso646jp",
		isoir57: "iso646cn",
		isoir100: "iso88591",
		isoir101: "iso88592",
		isoir109: "iso88593",
		isoir110: "iso88594",
		isoir144: "iso88595",
		isoir127: "iso88596",
		isoir126: "iso88597",
		isoir138: "iso88598",
		isoir148: "iso88599",
		isoir157: "iso885910",
		isoir166: "tis620",
		isoir179: "iso885913",
		isoir199: "iso885914",
		isoir203: "iso885915",
		isoir226: "iso885916",
		cp819: "iso88591",
		ibm819: "iso88591",
		cyrillic: "iso88595",
		arabic: "iso88596",
		arabic8: "iso88596",
		ecma114: "iso88596",
		asmo708: "iso88596",
		greek: "iso88597",
		greek8: "iso88597",
		ecma118: "iso88597",
		elot928: "iso88597",
		hebrew: "iso88598",
		hebrew8: "iso88598",
		turkish: "iso88599",
		turkish8: "iso88599",
		thai: "iso885911",
		thai8: "iso885911",
		celtic: "iso885914",
		celtic8: "iso885914",
		isoceltic: "iso885914",
		tis6200: "tis620",
		tis62025291: "tis620",
		tis62025330: "tis620",
		1e4: "macroman",
		10006: "macgreek",
		10007: "maccyrillic",
		10079: "maciceland",
		10081: "macturkish",
		cspc8codepage437: "cp437",
		cspc775baltic: "cp775",
		cspc850multilingual: "cp850",
		cspcp852: "cp852",
		cspc862latinhebrew: "cp862",
		cpgr: "cp869",
		msee: "cp1250",
		mscyrl: "cp1251",
		msansi: "cp1252",
		msgreek: "cp1253",
		msturk: "cp1254",
		mshebr: "cp1255",
		msarab: "cp1256",
		winbaltrim: "cp1257",
		cp20866: "koi8r",
		20866: "koi8r",
		ibm878: "koi8r",
		cskoi8r: "koi8r",
		cp21866: "koi8u",
		21866: "koi8u",
		ibm1168: "koi8u",
		strk10482002: "rk1048",
		tcvn5712: "tcvn",
		tcvn57121: "tcvn",
		gb198880: "iso646cn",
		cn: "iso646cn",
		csiso14jisc6220ro: "iso646jp",
		jisc62201969ro: "iso646jp",
		jp: "iso646jp",
		cshproman8: "hproman8",
		r8: "hproman8",
		roman8: "hproman8",
		xroman8: "hproman8",
		ibm1051: "hproman8",
		mac: "macintosh",
		csmacintosh: "macintosh"
	};
}));
//#endregion
//#region node_modules/iconv-lite/encodings/sbcs-data-generated.js
var require_sbcs_data_generated = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = {
		"437": "cp437",
		"737": "cp737",
		"775": "cp775",
		"850": "cp850",
		"852": "cp852",
		"855": "cp855",
		"856": "cp856",
		"857": "cp857",
		"858": "cp858",
		"860": "cp860",
		"861": "cp861",
		"862": "cp862",
		"863": "cp863",
		"864": "cp864",
		"865": "cp865",
		"866": "cp866",
		"869": "cp869",
		"874": "windows874",
		"922": "cp922",
		"1046": "cp1046",
		"1124": "cp1124",
		"1125": "cp1125",
		"1129": "cp1129",
		"1133": "cp1133",
		"1161": "cp1161",
		"1162": "cp1162",
		"1163": "cp1163",
		"1250": "windows1250",
		"1251": "windows1251",
		"1252": "windows1252",
		"1253": "windows1253",
		"1254": "windows1254",
		"1255": "windows1255",
		"1256": "windows1256",
		"1257": "windows1257",
		"1258": "windows1258",
		"28591": "iso88591",
		"28592": "iso88592",
		"28593": "iso88593",
		"28594": "iso88594",
		"28595": "iso88595",
		"28596": "iso88596",
		"28597": "iso88597",
		"28598": "iso88598",
		"28599": "iso88599",
		"28600": "iso885910",
		"28601": "iso885911",
		"28603": "iso885913",
		"28604": "iso885914",
		"28605": "iso885915",
		"28606": "iso885916",
		"windows874": {
			"type": "_sbcs",
			"chars": "€����…�����������‘’“”•–—��������\xA0กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
		},
		"win874": "windows874",
		"cp874": "windows874",
		"windows1250": {
			"type": "_sbcs",
			"chars": "€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź\xA0ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"
		},
		"win1250": "windows1250",
		"cp1250": "windows1250",
		"windows1251": {
			"type": "_sbcs",
			"chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ\xA0ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
		},
		"win1251": "windows1251",
		"cp1251": "windows1251",
		"windows1252": {
			"type": "_sbcs",
			"chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ\xA0¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
		},
		"win1252": "windows1252",
		"cp1252": "windows1252",
		"windows1253": {
			"type": "_sbcs",
			"chars": "€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›����\xA0΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"
		},
		"win1253": "windows1253",
		"cp1253": "windows1253",
		"windows1254": {
			"type": "_sbcs",
			"chars": "€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ\xA0¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"
		},
		"win1254": "windows1254",
		"cp1254": "windows1254",
		"windows1255": {
			"type": "_sbcs",
			"chars": "€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›����\xA0¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"
		},
		"win1255": "windows1255",
		"cp1255": "windows1255",
		"windows1256": {
			"type": "_sbcs",
			"chars": "€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں\xA0،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے"
		},
		"win1256": "windows1256",
		"cp1256": "windows1256",
		"windows1257": {
			"type": "_sbcs",
			"chars": "€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛�\xA0�¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙"
		},
		"win1257": "windows1257",
		"cp1257": "windows1257",
		"windows1258": {
			"type": "_sbcs",
			"chars": "€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ\xA0¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
		},
		"win1258": "windows1258",
		"cp1258": "windows1258",
		"iso88591": {
			"type": "_sbcs",
			"chars": "\xA0¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
		},
		"cp28591": "iso88591",
		"iso88592": {
			"type": "_sbcs",
			"chars": "\xA0Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙"
		},
		"cp28592": "iso88592",
		"iso88593": {
			"type": "_sbcs",
			"chars": "\xA0Ħ˘£¤�Ĥ§¨İŞĞĴ­�Ż°ħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙"
		},
		"cp28593": "iso88593",
		"iso88594": {
			"type": "_sbcs",
			"chars": "\xA0ĄĸŖ¤ĨĻ§¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙"
		},
		"cp28594": "iso88594",
		"iso88595": {
			"type": "_sbcs",
			"chars": "\xA0ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ"
		},
		"cp28595": "iso88595",
		"iso88596": {
			"type": "_sbcs",
			"chars": "\xA0���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������"
		},
		"cp28596": "iso88596",
		"iso88597": {
			"type": "_sbcs",
			"chars": "\xA0‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�"
		},
		"cp28597": "iso88597",
		"iso88598": {
			"type": "_sbcs",
			"chars": "\xA0�¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�"
		},
		"cp28598": "iso88598",
		"iso88599": {
			"type": "_sbcs",
			"chars": "\xA0¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"
		},
		"cp28599": "iso88599",
		"iso885910": {
			"type": "_sbcs",
			"chars": "\xA0ĄĒĢĪĨĶ§ĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ"
		},
		"cp28600": "iso885910",
		"iso885911": {
			"type": "_sbcs",
			"chars": "\xA0กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
		},
		"cp28601": "iso885911",
		"iso885913": {
			"type": "_sbcs",
			"chars": "\xA0”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’"
		},
		"cp28603": "iso885913",
		"iso885914": {
			"type": "_sbcs",
			"chars": "\xA0Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ"
		},
		"cp28604": "iso885914",
		"iso885915": {
			"type": "_sbcs",
			"chars": "\xA0¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
		},
		"cp28605": "iso885915",
		"iso885916": {
			"type": "_sbcs",
			"chars": "\xA0ĄąŁ€„Š§š©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ"
		},
		"cp28606": "iso885916",
		"cp437": {
			"type": "_sbcs",
			"chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"
		},
		"ibm437": "cp437",
		"csibm437": "cp437",
		"cp737": {
			"type": "_sbcs",
			"chars": "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■\xA0"
		},
		"ibm737": "cp737",
		"csibm737": "cp737",
		"cp775": {
			"type": "_sbcs",
			"chars": "ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■\xA0"
		},
		"ibm775": "cp775",
		"csibm775": "cp775",
		"cp850": {
			"type": "_sbcs",
			"chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■\xA0"
		},
		"ibm850": "cp850",
		"csibm850": "cp850",
		"cp852": {
			"type": "_sbcs",
			"chars": "ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘę¬źČş«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■\xA0"
		},
		"ibm852": "cp852",
		"csibm852": "cp852",
		"cp855": {
			"type": "_sbcs",
			"chars": "ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■\xA0"
		},
		"ibm855": "cp855",
		"csibm855": "cp855",
		"cp856": {
			"type": "_sbcs",
			"chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■\xA0"
		},
		"ibm856": "cp856",
		"csibm856": "cp856",
		"cp857": {
			"type": "_sbcs",
			"chars": "ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞğ¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■\xA0"
		},
		"ibm857": "cp857",
		"csibm857": "cp857",
		"cp858": {
			"type": "_sbcs",
			"chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñÑªº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýÝ¯´­±‗¾¶§÷¸°¨·¹³²■\xA0"
		},
		"ibm858": "cp858",
		"csibm858": "cp858",
		"cp860": {
			"type": "_sbcs",
			"chars": "ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñÑªº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"
		},
		"ibm860": "cp860",
		"csibm860": "cp860",
		"cp861": {
			"type": "_sbcs",
			"chars": "ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"
		},
		"ibm861": "cp861",
		"csibm861": "cp861",
		"cp862": {
			"type": "_sbcs",
			"chars": "אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"
		},
		"ibm862": "cp862",
		"csibm862": "cp862",
		"cp863": {
			"type": "_sbcs",
			"chars": "ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"
		},
		"ibm863": "cp863",
		"csibm863": "cp863",
		"cp864": {
			"type": "_sbcs",
			"chars": "\0\x07\b	\n\v\f\r\x1B !\"#$٪&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ�\xA0­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�"
		},
		"ibm864": "cp864",
		"csibm864": "cp864",
		"cp865": {
			"type": "_sbcs",
			"chars": "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñÑªº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0"
		},
		"ibm865": "cp865",
		"csibm865": "cp865",
		"cp866": {
			"type": "_sbcs",
			"chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■\xA0"
		},
		"ibm866": "cp866",
		"csibm866": "cp866",
		"cp869": {
			"type": "_sbcs",
			"chars": "������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■\xA0"
		},
		"ibm869": "cp869",
		"csibm869": "cp869",
		"cp922": {
			"type": "_sbcs",
			"chars": "\xA0¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖ×ØÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ"
		},
		"ibm922": "cp922",
		"csibm922": "cp922",
		"cp1046": {
			"type": "_sbcs",
			"chars": "ﺈ×÷ﹱ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ\xA0¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�"
		},
		"ibm1046": "cp1046",
		"csibm1046": "cp1046",
		"cp1124": {
			"type": "_sbcs",
			"chars": "\xA0ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ"
		},
		"ibm1124": "cp1124",
		"csibm1124": "cp1124",
		"cp1125": {
			"type": "_sbcs",
			"chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■\xA0"
		},
		"ibm1125": "cp1125",
		"csibm1125": "cp1125",
		"cp1129": {
			"type": "_sbcs",
			"chars": "\xA0¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
		},
		"ibm1129": "cp1129",
		"csibm1129": "cp1129",
		"cp1133": {
			"type": "_sbcs",
			"chars": "\xA0ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�"
		},
		"ibm1133": "cp1133",
		"csibm1133": "cp1133",
		"cp1161": {
			"type": "_sbcs",
			"chars": "��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦\xA0"
		},
		"ibm1161": "cp1161",
		"csibm1161": "cp1161",
		"cp1162": {
			"type": "_sbcs",
			"chars": "€…‘’“”•–—\xA0กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
		},
		"ibm1162": "cp1162",
		"csibm1162": "cp1162",
		"cp1163": {
			"type": "_sbcs",
			"chars": "\xA0¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖ×ØÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"
		},
		"ibm1163": "cp1163",
		"csibm1163": "cp1163",
		"maccroatian": {
			"type": "_sbcs",
			"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈Ć«Č…\xA0ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ"
		},
		"maccyrillic": {
			"type": "_sbcs",
			"chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»…\xA0ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"
		},
		"macgreek": {
			"type": "_sbcs",
			"chars": "Ä¹²É³ÖÜ΅àâä΄¨çéèêë£™îï•½‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»…\xA0ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�"
		},
		"maciceland": {
			"type": "_sbcs",
			"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
		},
		"macroman": {
			"type": "_sbcs",
			"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
		},
		"macromania": {
			"type": "_sbcs",
			"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
		},
		"macthai": {
			"type": "_sbcs",
			"chars": "«»…“”�•‘’�\xA0กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู﻿​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����"
		},
		"macturkish": {
			"type": "_sbcs",
			"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ"
		},
		"macukraine": {
			"type": "_sbcs",
			"chars": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»…\xA0ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"
		},
		"koi8r": {
			"type": "_sbcs",
			"chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥\xA0⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
		},
		"koi8u": {
			"type": "_sbcs",
			"chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥\xA0⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
		},
		"koi8ru": {
			"type": "_sbcs",
			"chars": "─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥\xA0⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
		},
		"koi8t": {
			"type": "_sbcs",
			"chars": "қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"
		},
		"armscii8": {
			"type": "_sbcs",
			"chars": "\xA0�և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�"
		},
		"rk1048": {
			"type": "_sbcs",
			"chars": "ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ\xA0ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
		},
		"tcvn": {
			"type": "_sbcs",
			"chars": "\0ÚỤỪỬỮ\x07\b	\n\v\f\rỨỰỲỶỸÝỴ\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ\xA0ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ"
		},
		"georgianacademy": {
			"type": "_sbcs",
			"chars": "‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ\xA0¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
		},
		"georgianps": {
			"type": "_sbcs",
			"chars": "‚ƒ„…†‡ˆ‰Š‹Œ‘’“”•–—˜™š›œŸ\xA0¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
		},
		"pt154": {
			"type": "_sbcs",
			"chars": "ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ\xA0ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
		},
		"viscii": {
			"type": "_sbcs",
			"chars": "\0ẲẴẪ\x07\b	\n\v\f\rỶỸ\x1BỴ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ"
		},
		"iso646cn": {
			"type": "_sbcs",
			"chars": "\0\x07\b	\n\v\f\r\x1B !\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"
		},
		"iso646jp": {
			"type": "_sbcs",
			"chars": "\0\x07\b	\n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"
		},
		"hproman8": {
			"type": "_sbcs",
			"chars": "\xA0ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�"
		},
		"macintosh": {
			"type": "_sbcs",
			"chars": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›ﬁﬂ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"
		},
		"ascii": {
			"type": "_sbcs",
			"chars": "��������������������������������������������������������������������������������������������������������������������������������"
		},
		"tis620": {
			"type": "_sbcs",
			"chars": "���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"
		}
	};
}));
//#endregion
//#region node_modules/iconv-lite/encodings/dbcs-codec.js
var require_dbcs_codec = /* @__PURE__ */ __commonJSMin(((exports) => {
	var Buffer = require_safer().Buffer;
	exports._dbcs = DBCSCodec;
	var UNASSIGNED = -1;
	var GB18030_CODE = -2;
	var SEQ_START = -10;
	var NODE_START = -1e3;
	var UNASSIGNED_NODE = new Array(256);
	var DEF_CHAR = -1;
	for (var i = 0; i < 256; i++) UNASSIGNED_NODE[i] = UNASSIGNED;
	function DBCSCodec(codecOptions, iconv) {
		this.encodingName = codecOptions.encodingName;
		if (!codecOptions) throw new Error("DBCS codec is called without the data.");
		if (!codecOptions.table) throw new Error("Encoding '" + this.encodingName + "' has no data.");
		var mappingTable = codecOptions.table();
		this.decodeTables = [];
		this.decodeTables[0] = UNASSIGNED_NODE.slice(0);
		this.decodeTableSeq = [];
		for (var i = 0; i < mappingTable.length; i++) this._addDecodeChunk(mappingTable[i]);
		if (typeof codecOptions.gb18030 === "function") {
			this.gb18030 = codecOptions.gb18030();
			var commonThirdByteNodeIdx = this.decodeTables.length;
			this.decodeTables.push(UNASSIGNED_NODE.slice(0));
			var commonFourthByteNodeIdx = this.decodeTables.length;
			this.decodeTables.push(UNASSIGNED_NODE.slice(0));
			var firstByteNode = this.decodeTables[0];
			for (var i = 129; i <= 254; i++) {
				var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];
				for (var j = 48; j <= 57; j++) {
					if (secondByteNode[j] === UNASSIGNED) secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;
					else if (secondByteNode[j] > NODE_START) throw new Error("gb18030 decode tables conflict at byte 2");
					var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];
					for (var k = 129; k <= 254; k++) {
						if (thirdByteNode[k] === UNASSIGNED) thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;
						else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) continue;
						else if (thirdByteNode[k] > NODE_START) throw new Error("gb18030 decode tables conflict at byte 3");
						var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];
						for (var l = 48; l <= 57; l++) if (fourthByteNode[l] === UNASSIGNED) fourthByteNode[l] = GB18030_CODE;
					}
				}
			}
		}
		this.defaultCharUnicode = iconv.defaultCharUnicode;
		this.encodeTable = [];
		this.encodeTableSeq = [];
		var skipEncodeChars = {};
		if (codecOptions.encodeSkipVals) for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {
			var val = codecOptions.encodeSkipVals[i];
			if (typeof val === "number") skipEncodeChars[val] = true;
			else for (var j = val.from; j <= val.to; j++) skipEncodeChars[j] = true;
		}
		this._fillEncodeTable(0, 0, skipEncodeChars);
		if (codecOptions.encodeAdd) {
			for (var uChar in codecOptions.encodeAdd) if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);
		}
		this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];
		if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]["?"];
		if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0);
	}
	DBCSCodec.prototype.encoder = DBCSEncoder;
	DBCSCodec.prototype.decoder = DBCSDecoder;
	DBCSCodec.prototype._getDecodeTrieNode = function(addr) {
		var bytes = [];
		for (; addr > 0; addr >>>= 8) bytes.push(addr & 255);
		if (bytes.length == 0) bytes.push(0);
		var node = this.decodeTables[0];
		for (var i = bytes.length - 1; i > 0; i--) {
			var val = node[bytes[i]];
			if (val == UNASSIGNED) {
				node[bytes[i]] = NODE_START - this.decodeTables.length;
				this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));
			} else if (val <= NODE_START) node = this.decodeTables[NODE_START - val];
			else throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16));
		}
		return node;
	};
	DBCSCodec.prototype._addDecodeChunk = function(chunk) {
		var curAddr = parseInt(chunk[0], 16);
		var writeTable = this._getDecodeTrieNode(curAddr);
		curAddr = curAddr & 255;
		for (var k = 1; k < chunk.length; k++) {
			var part = chunk[k];
			if (typeof part === "string") for (var l = 0; l < part.length;) {
				var code = part.charCodeAt(l++);
				if (code >= 55296 && code < 56320) {
					var codeTrail = part.charCodeAt(l++);
					if (codeTrail >= 56320 && codeTrail < 57344) writeTable[curAddr++] = 65536 + (code - 55296) * 1024 + (codeTrail - 56320);
					else throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]);
				} else if (code > 4080 && code <= 4095) {
					var len = 4095 - code + 2;
					var seq = [];
					for (var m = 0; m < len; m++) seq.push(part.charCodeAt(l++));
					writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;
					this.decodeTableSeq.push(seq);
				} else writeTable[curAddr++] = code;
			}
			else if (typeof part === "number") {
				var charCode = writeTable[curAddr - 1] + 1;
				for (var l = 0; l < part; l++) writeTable[curAddr++] = charCode++;
			} else throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]);
		}
		if (curAddr > 255) throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr);
	};
	DBCSCodec.prototype._getEncodeBucket = function(uCode) {
		var high = uCode >> 8;
		if (this.encodeTable[high] === void 0) this.encodeTable[high] = UNASSIGNED_NODE.slice(0);
		return this.encodeTable[high];
	};
	DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {
		var bucket = this._getEncodeBucket(uCode);
		var low = uCode & 255;
		if (bucket[low] <= SEQ_START) this.encodeTableSeq[SEQ_START - bucket[low]][DEF_CHAR] = dbcsCode;
		else if (bucket[low] == UNASSIGNED) bucket[low] = dbcsCode;
	};
	DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {
		var uCode = seq[0];
		var bucket = this._getEncodeBucket(uCode);
		var low = uCode & 255;
		var node;
		if (bucket[low] <= SEQ_START) node = this.encodeTableSeq[SEQ_START - bucket[low]];
		else {
			node = {};
			if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low];
			bucket[low] = SEQ_START - this.encodeTableSeq.length;
			this.encodeTableSeq.push(node);
		}
		for (var j = 1; j < seq.length - 1; j++) {
			var oldVal = node[uCode];
			if (typeof oldVal === "object") node = oldVal;
			else {
				node = node[uCode] = {};
				if (oldVal !== void 0) node[DEF_CHAR] = oldVal;
			}
		}
		uCode = seq[seq.length - 1];
		node[uCode] = dbcsCode;
	};
	DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {
		var node = this.decodeTables[nodeIdx];
		var hasValues = false;
		var subNodeEmpty = {};
		for (var i = 0; i < 256; i++) {
			var uCode = node[i];
			var mbCode = prefix + i;
			if (skipEncodeChars[mbCode]) continue;
			if (uCode >= 0) {
				this._setEncodeChar(uCode, mbCode);
				hasValues = true;
			} else if (uCode <= NODE_START) {
				var subNodeIdx = NODE_START - uCode;
				if (!subNodeEmpty[subNodeIdx]) {
					var newPrefix = mbCode << 8 >>> 0;
					if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars)) hasValues = true;
					else subNodeEmpty[subNodeIdx] = true;
				}
			} else if (uCode <= SEQ_START) {
				this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);
				hasValues = true;
			}
		}
		return hasValues;
	};
	function DBCSEncoder(options, codec) {
		this.leadSurrogate = -1;
		this.seqObj = void 0;
		this.encodeTable = codec.encodeTable;
		this.encodeTableSeq = codec.encodeTableSeq;
		this.defaultCharSingleByte = codec.defCharSB;
		this.gb18030 = codec.gb18030;
	}
	DBCSEncoder.prototype.write = function(str) {
		var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3));
		var leadSurrogate = this.leadSurrogate;
		var seqObj = this.seqObj;
		var nextChar = -1;
		var i = 0;
		var j = 0;
		while (true) {
			if (nextChar === -1) {
				if (i == str.length) break;
				var uCode = str.charCodeAt(i++);
			} else {
				var uCode = nextChar;
				nextChar = -1;
			}
			if (uCode >= 55296 && uCode < 57344) if (uCode < 56320) if (leadSurrogate === -1) {
				leadSurrogate = uCode;
				continue;
			} else {
				leadSurrogate = uCode;
				uCode = UNASSIGNED;
			}
			else if (leadSurrogate !== -1) {
				uCode = 65536 + (leadSurrogate - 55296) * 1024 + (uCode - 56320);
				leadSurrogate = -1;
			} else uCode = UNASSIGNED;
			else if (leadSurrogate !== -1) {
				nextChar = uCode;
				uCode = UNASSIGNED;
				leadSurrogate = -1;
			}
			var dbcsCode = UNASSIGNED;
			if (seqObj !== void 0 && uCode != UNASSIGNED) {
				var resCode = seqObj[uCode];
				if (typeof resCode === "object") {
					seqObj = resCode;
					continue;
				} else if (typeof resCode === "number") dbcsCode = resCode;
				else if (resCode == void 0) {
					resCode = seqObj[DEF_CHAR];
					if (resCode !== void 0) {
						dbcsCode = resCode;
						nextChar = uCode;
					}
				}
				seqObj = void 0;
			} else if (uCode >= 0) {
				var subtable = this.encodeTable[uCode >> 8];
				if (subtable !== void 0) dbcsCode = subtable[uCode & 255];
				if (dbcsCode <= SEQ_START) {
					seqObj = this.encodeTableSeq[SEQ_START - dbcsCode];
					continue;
				}
				if (dbcsCode == UNASSIGNED && this.gb18030) {
					var idx = findIdx(this.gb18030.uChars, uCode);
					if (idx != -1) {
						var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);
						newBuf[j++] = 129 + Math.floor(dbcsCode / 12600);
						dbcsCode = dbcsCode % 12600;
						newBuf[j++] = 48 + Math.floor(dbcsCode / 1260);
						dbcsCode = dbcsCode % 1260;
						newBuf[j++] = 129 + Math.floor(dbcsCode / 10);
						dbcsCode = dbcsCode % 10;
						newBuf[j++] = 48 + dbcsCode;
						continue;
					}
				}
			}
			if (dbcsCode === UNASSIGNED) dbcsCode = this.defaultCharSingleByte;
			if (dbcsCode < 256) newBuf[j++] = dbcsCode;
			else if (dbcsCode < 65536) {
				newBuf[j++] = dbcsCode >> 8;
				newBuf[j++] = dbcsCode & 255;
			} else if (dbcsCode < 16777216) {
				newBuf[j++] = dbcsCode >> 16;
				newBuf[j++] = dbcsCode >> 8 & 255;
				newBuf[j++] = dbcsCode & 255;
			} else {
				newBuf[j++] = dbcsCode >>> 24;
				newBuf[j++] = dbcsCode >>> 16 & 255;
				newBuf[j++] = dbcsCode >>> 8 & 255;
				newBuf[j++] = dbcsCode & 255;
			}
		}
		this.seqObj = seqObj;
		this.leadSurrogate = leadSurrogate;
		return newBuf.slice(0, j);
	};
	DBCSEncoder.prototype.end = function() {
		if (this.leadSurrogate === -1 && this.seqObj === void 0) return;
		var newBuf = Buffer.alloc(10);
		var j = 0;
		if (this.seqObj) {
			var dbcsCode = this.seqObj[DEF_CHAR];
			if (dbcsCode !== void 0) if (dbcsCode < 256) newBuf[j++] = dbcsCode;
			else {
				newBuf[j++] = dbcsCode >> 8;
				newBuf[j++] = dbcsCode & 255;
			}
			this.seqObj = void 0;
		}
		if (this.leadSurrogate !== -1) {
			newBuf[j++] = this.defaultCharSingleByte;
			this.leadSurrogate = -1;
		}
		return newBuf.slice(0, j);
	};
	DBCSEncoder.prototype.findIdx = findIdx;
	function DBCSDecoder(options, codec) {
		this.nodeIdx = 0;
		this.prevBytes = [];
		this.decodeTables = codec.decodeTables;
		this.decodeTableSeq = codec.decodeTableSeq;
		this.defaultCharUnicode = codec.defaultCharUnicode;
		this.gb18030 = codec.gb18030;
	}
	DBCSDecoder.prototype.write = function(buf) {
		var newBuf = Buffer.alloc(buf.length * 2);
		var nodeIdx = this.nodeIdx;
		var prevBytes = this.prevBytes;
		var prevOffset = this.prevBytes.length;
		var seqStart = -this.prevBytes.length;
		var uCode;
		for (var i = 0, j = 0; i < buf.length; i++) {
			var curByte = i >= 0 ? buf[i] : prevBytes[i + prevOffset];
			var uCode = this.decodeTables[nodeIdx][curByte];
			if (uCode >= 0) {} else if (uCode === UNASSIGNED) {
				uCode = this.defaultCharUnicode.charCodeAt(0);
				i = seqStart;
			} else if (uCode === GB18030_CODE) {
				if (i >= 3) var ptr = (buf[i - 3] - 129) * 12600 + (buf[i - 2] - 48) * 1260 + (buf[i - 1] - 129) * 10 + (curByte - 48);
				else var ptr = (prevBytes[i - 3 + prevOffset] - 129) * 12600 + ((i - 2 >= 0 ? buf[i - 2] : prevBytes[i - 2 + prevOffset]) - 48) * 1260 + ((i - 1 >= 0 ? buf[i - 1] : prevBytes[i - 1 + prevOffset]) - 129) * 10 + (curByte - 48);
				var idx = findIdx(this.gb18030.gbChars, ptr);
				uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];
			} else if (uCode <= NODE_START) {
				nodeIdx = NODE_START - uCode;
				continue;
			} else if (uCode <= SEQ_START) {
				var seq = this.decodeTableSeq[SEQ_START - uCode];
				for (var k = 0; k < seq.length - 1; k++) {
					uCode = seq[k];
					newBuf[j++] = uCode & 255;
					newBuf[j++] = uCode >> 8;
				}
				uCode = seq[seq.length - 1];
			} else throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte);
			if (uCode >= 65536) {
				uCode -= 65536;
				var uCodeLead = 55296 | uCode >> 10;
				newBuf[j++] = uCodeLead & 255;
				newBuf[j++] = uCodeLead >> 8;
				uCode = 56320 | uCode & 1023;
			}
			newBuf[j++] = uCode & 255;
			newBuf[j++] = uCode >> 8;
			nodeIdx = 0;
			seqStart = i + 1;
		}
		this.nodeIdx = nodeIdx;
		this.prevBytes = seqStart >= 0 ? Array.prototype.slice.call(buf, seqStart) : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));
		return newBuf.slice(0, j).toString("ucs2");
	};
	DBCSDecoder.prototype.end = function() {
		var ret = "";
		while (this.prevBytes.length > 0) {
			ret += this.defaultCharUnicode;
			var bytesArr = this.prevBytes.slice(1);
			this.prevBytes = [];
			this.nodeIdx = 0;
			if (bytesArr.length > 0) ret += this.write(bytesArr);
		}
		this.prevBytes = [];
		this.nodeIdx = 0;
		return ret;
	};
	function findIdx(table, val) {
		if (table[0] > val) return -1;
		var l = 0;
		var r = table.length;
		while (l < r - 1) {
			var mid = l + (r - l + 1 >> 1);
			if (table[mid] <= val) l = mid;
			else r = mid;
		}
		return l;
	}
}));
//#endregion
//#region node_modules/iconv-lite/encodings/tables/shiftjis.json
var require_shiftjis = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		[
			"0",
			"\0",
			128
		],
		[
			"a1",
			"｡",
			62
		],
		[
			"8140",
			"　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈",
			9,
			"＋－±×"
		],
		["8180", "÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓"],
		["81b8", "∈∋⊆⊇⊂⊃∪∩"],
		["81c8", "∧∨￢⇒⇔∀∃"],
		["81da", "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],
		["81f0", "Å‰♯♭♪†‡¶"],
		["81fc", "◯"],
		[
			"824f",
			"０",
			9
		],
		[
			"8260",
			"Ａ",
			25
		],
		[
			"8281",
			"ａ",
			25
		],
		[
			"829f",
			"ぁ",
			82
		],
		[
			"8340",
			"ァ",
			62
		],
		[
			"8380",
			"ム",
			22
		],
		[
			"839f",
			"Α",
			16,
			"Σ",
			6
		],
		[
			"83bf",
			"α",
			16,
			"σ",
			6
		],
		[
			"8440",
			"А",
			5,
			"ЁЖ",
			25
		],
		[
			"8470",
			"а",
			5,
			"ёж",
			7
		],
		[
			"8480",
			"о",
			17
		],
		["849f", "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],
		[
			"8740",
			"①",
			19,
			"Ⅰ",
			9
		],
		["875f", "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],
		["877e", "㍻"],
		[
			"8780",
			"〝〟№㏍℡㊤",
			4,
			"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"
		],
		["889f", "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],
		["8940", "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円"],
		["8980", "園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],
		["8a40", "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫"],
		["8a80", "橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],
		["8b40", "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救"],
		["8b80", "朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],
		["8c40", "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨"],
		["8c80", "劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],
		["8d40", "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降"],
		["8d80", "項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],
		["8e40", "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止"],
		["8e80", "死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],
		["8f40", "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳"],
		["8f80", "準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],
		["9040", "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨"],
		["9080", "逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],
		["9140", "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻"],
		["9180", "操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],
		["9240", "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄"],
		["9280", "逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],
		["9340", "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬"],
		["9380", "凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],
		["9440", "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅"],
		["9480", "楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],
		["9540", "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷"],
		["9580", "斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],
		["9640", "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆"],
		["9680", "摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],
		["9740", "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲"],
		["9780", "沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],
		["9840", "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],
		["989f", "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],
		["9940", "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"],
		["9980", "凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],
		["9a40", "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸"],
		["9a80", "噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],
		["9b40", "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀"],
		["9b80", "它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],
		["9c40", "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠"],
		["9c80", "怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],
		["9d40", "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫"],
		["9d80", "捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],
		["9e40", "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎"],
		["9e80", "梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],
		["9f40", "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯"],
		["9f80", "麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],
		["e040", "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝"],
		["e080", "烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],
		["e140", "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿"],
		["e180", "痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],
		["e240", "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰"],
		["e280", "窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],
		["e340", "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"],
		["e380", "縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],
		["e440", "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤"],
		["e480", "艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],
		["e540", "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"],
		["e580", "蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],
		["e640", "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧"],
		["e680", "諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],
		["e740", "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"],
		["e780", "轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],
		["e840", "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙"],
		["e880", "閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],
		["e940", "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃"],
		["e980", "騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],
		["ea40", "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯"],
		["ea80", "黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"],
		["ed40", "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏"],
		["ed80", "塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],
		["ee40", "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙"],
		["ee80", "蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],
		[
			"eeef",
			"ⅰ",
			9,
			"￢￤＇＂"
		],
		[
			"f040",
			"",
			62
		],
		[
			"f080",
			"",
			124
		],
		[
			"f140",
			"",
			62
		],
		[
			"f180",
			"",
			124
		],
		[
			"f240",
			"",
			62
		],
		[
			"f280",
			"",
			124
		],
		[
			"f340",
			"",
			62
		],
		[
			"f380",
			"",
			124
		],
		[
			"f440",
			"",
			62
		],
		[
			"f480",
			"",
			124
		],
		[
			"f540",
			"",
			62
		],
		[
			"f580",
			"",
			124
		],
		[
			"f640",
			"",
			62
		],
		[
			"f680",
			"",
			124
		],
		[
			"f740",
			"",
			62
		],
		[
			"f780",
			"",
			124
		],
		[
			"f840",
			"",
			62
		],
		[
			"f880",
			"",
			124
		],
		["f940", ""],
		[
			"fa40",
			"ⅰ",
			9,
			"Ⅰ",
			9,
			"￢￤＇＂㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊"
		],
		["fa80", "兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"],
		["fb40", "涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神"],
		["fb80", "祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"],
		["fc40", "髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"]
	];
}));
//#endregion
//#region node_modules/iconv-lite/encodings/tables/eucjp.json
var require_eucjp = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		[
			"0",
			"\0",
			127
		],
		[
			"8ea1",
			"｡",
			62
		],
		[
			"a1a1",
			"　、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈",
			9,
			"＋－±×÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇"
		],
		["a2a1", "◆□■△▲▽▼※〒→←↑↓〓"],
		["a2ba", "∈∋⊆⊇⊂⊃∪∩"],
		["a2ca", "∧∨￢⇒⇔∀∃"],
		["a2dc", "∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],
		["a2f2", "Å‰♯♭♪†‡¶"],
		["a2fe", "◯"],
		[
			"a3b0",
			"０",
			9
		],
		[
			"a3c1",
			"Ａ",
			25
		],
		[
			"a3e1",
			"ａ",
			25
		],
		[
			"a4a1",
			"ぁ",
			82
		],
		[
			"a5a1",
			"ァ",
			85
		],
		[
			"a6a1",
			"Α",
			16,
			"Σ",
			6
		],
		[
			"a6c1",
			"α",
			16,
			"σ",
			6
		],
		[
			"a7a1",
			"А",
			5,
			"ЁЖ",
			25
		],
		[
			"a7d1",
			"а",
			5,
			"ёж",
			25
		],
		["a8a1", "─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],
		[
			"ada1",
			"①",
			19,
			"Ⅰ",
			9
		],
		["adc0", "㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],
		[
			"addf",
			"㍻〝〟№㏍℡㊤",
			4,
			"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"
		],
		["b0a1", "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],
		["b1a1", "院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応"],
		["b2a1", "押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],
		["b3a1", "魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱"],
		["b4a1", "粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],
		["b5a1", "機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京"],
		["b6a1", "供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],
		["b7a1", "掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲"],
		["b8a1", "検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],
		["b9a1", "后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込"],
		["baa1", "此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],
		["bba1", "察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時"],
		["bca1", "次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],
		["bda1", "宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償"],
		["bea1", "勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],
		["bfa1", "拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾"],
		["c0a1", "澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],
		["c1a1", "繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎"],
		["c2a1", "臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],
		["c3a1", "叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵"],
		["c4a1", "帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],
		["c5a1", "邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到"],
		["c6a1", "董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],
		["c7a1", "如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦"],
		["c8a1", "函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],
		["c9a1", "鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服"],
		["caa1", "福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],
		["cba1", "法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満"],
		["cca1", "漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],
		["cda1", "諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃"],
		["cea1", "痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],
		["cfa1", "蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],
		["d0a1", "弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],
		["d1a1", "僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨"],
		["d2a1", "辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],
		["d3a1", "咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉"],
		["d4a1", "圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],
		["d5a1", "奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓"],
		["d6a1", "屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],
		["d7a1", "廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚"],
		["d8a1", "悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],
		["d9a1", "戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼"],
		["daa1", "據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],
		["dba1", "曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍"],
		["dca1", "棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],
		["dda1", "檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾"],
		["dea1", "沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],
		["dfa1", "漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"],
		["e0a1", "燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],
		["e1a1", "瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰"],
		["e2a1", "癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],
		["e3a1", "磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐"],
		["e4a1", "筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],
		["e5a1", "紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺"],
		["e6a1", "罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],
		["e7a1", "隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"],
		["e8a1", "茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],
		["e9a1", "蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙"],
		["eaa1", "蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],
		["eba1", "襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫"],
		["eca1", "譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],
		["eda1", "蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸"],
		["eea1", "遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],
		["efa1", "錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞"],
		["f0a1", "陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],
		["f1a1", "顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷"],
		["f2a1", "髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],
		["f3a1", "鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"],
		["f4a1", "堯槇遙瑤凜熙"],
		["f9a1", "纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德"],
		["faa1", "忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],
		["fba1", "犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚"],
		["fca1", "釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],
		[
			"fcf1",
			"ⅰ",
			9,
			"￢￤＇＂"
		],
		["8fa2af", "˘ˇ¸˙˝¯˛˚～΄΅"],
		["8fa2c2", "¡¦¿"],
		["8fa2eb", "ºª©®™¤№"],
		["8fa6e1", "ΆΈΉΊΪ"],
		["8fa6e7", "Ό"],
		["8fa6e9", "ΎΫ"],
		["8fa6ec", "Ώ"],
		["8fa6f1", "άέήίϊΐόςύϋΰώ"],
		[
			"8fa7c2",
			"Ђ",
			10,
			"ЎЏ"
		],
		[
			"8fa7f2",
			"ђ",
			10,
			"ўџ"
		],
		["8fa9a1", "ÆĐ"],
		["8fa9a4", "Ħ"],
		["8fa9a6", "Ĳ"],
		["8fa9a8", "ŁĿ"],
		["8fa9ab", "ŊØŒ"],
		["8fa9af", "ŦÞ"],
		["8fa9c1", "æđðħıĳĸłŀŉŋøœßŧþ"],
		["8faaa1", "ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"],
		["8faaba", "ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ"],
		["8faba1", "áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ"],
		["8fabbd", "ġĥíìïîǐ"],
		["8fabc5", "īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"],
		["8fb0a1", "丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄"],
		["8fb1a1", "侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐"],
		[
			"8fb2a1",
			"傒傓傔傖傛傜傞",
			4,
			"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂"
		],
		["8fb3a1", "凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"],
		["8fb4a1", "匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿"],
		["8fb5a1", "咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒"],
		[
			"8fb6a1",
			"嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍",
			5,
			"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤",
			4,
			"囱囫园"
		],
		[
			"8fb7a1",
			"囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭",
			4,
			"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡"
		],
		["8fb8a1", "堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭"],
		["8fb9a1", "奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"],
		[
			"8fbaa1",
			"嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖",
			4,
			"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"
		],
		["8fbba1", "屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤"],
		[
			"8fbca1",
			"巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪",
			4,
			"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧"
		],
		[
			"8fbda1",
			"彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐",
			4,
			"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷"
		],
		[
			"8fbea1",
			"悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐",
			4,
			"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥"
		],
		["8fbfa1", "懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵"],
		["8fc0a1", "捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿"],
		["8fc1a1", "擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝"],
		["8fc2a1", "昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝"],
		[
			"8fc3a1",
			"杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮",
			4,
			"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏"
		],
		["8fc4a1", "棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲"],
		["8fc5a1", "樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽"],
		["8fc6a1", "歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖"],
		["8fc7a1", "泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞"],
		["8fc8a1", "湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"],
		[
			"8fc9a1",
			"濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔",
			4,
			"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃",
			4,
			"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠"
		],
		["8fcaa1", "煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻"],
		["8fcba1", "狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽"],
		[
			"8fcca1",
			"珿琀琁琄琇琊琑琚琛琤琦琨",
			9,
			"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"
		],
		[
			"8fcda1",
			"甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹",
			5,
			"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹"
		],
		[
			"8fcea1",
			"瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢",
			6,
			"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢"
		],
		["8fcfa1", "睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳"],
		["8fd0a1", "碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞"],
		["8fd1a1", "秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"],
		[
			"8fd2a1",
			"笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙",
			5
		],
		["8fd3a1", "籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝"],
		[
			"8fd4a1",
			"綞綦綧綪綳綶綷綹緂",
			4,
			"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭"
		],
		["8fd5a1", "罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮"],
		["8fd6a1", "胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆"],
		["8fd7a1", "艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸"],
		["8fd8a1", "荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓"],
		[
			"8fd9a1",
			"蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏",
			4,
			"蕖蕙蕜",
			6,
			"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"
		],
		[
			"8fdaa1",
			"藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠",
			4,
			"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣"
		],
		[
			"8fdba1",
			"蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃",
			6,
			"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"
		],
		[
			"8fdca1",
			"蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊",
			4,
			"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺"
		],
		[
			"8fdda1",
			"襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔",
			4,
			"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳"
		],
		[
			"8fdea1",
			"誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂",
			4,
			"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆"
		],
		["8fdfa1", "貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢"],
		["8fe0a1", "踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁"],
		[
			"8fe1a1",
			"轃轇轏轑",
			4,
			"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"
		],
		["8fe2a1", "郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"],
		[
			"8fe3a1",
			"釂釃釅釓釔釗釙釚釞釤釥釩釪釬",
			5,
			"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵",
			4,
			"鉻鉼鉽鉿銈銉銊銍銎銒銗"
		],
		[
			"8fe4a1",
			"銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿",
			4,
			"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶"
		],
		[
			"8fe5a1",
			"鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉",
			4,
			"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"
		],
		["8fe6a1", "镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂"],
		["8fe7a1", "霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦"],
		[
			"8fe8a1",
			"頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱",
			4,
			"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵"
		],
		[
			"8fe9a1",
			"馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿",
			4
		],
		[
			"8feaa1",
			"鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪",
			4,
			"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸"
		],
		[
			"8feba1",
			"鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦",
			4,
			"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"
		],
		["8feca1", "鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"],
		[
			"8feda1",
			"黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃",
			4,
			"齓齕齖齗齘齚齝齞齨齩齭",
			4,
			"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"
		]
	];
}));
//#endregion
//#region node_modules/iconv-lite/encodings/tables/cp936.json
var require_cp936 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		[
			"0",
			"\0",
			127,
			"€"
		],
		[
			"8140",
			"丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪",
			5,
			"乲乴",
			9,
			"乿",
			6,
			"亇亊"
		],
		[
			"8180",
			"亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂",
			6,
			"伋伌伒",
			4,
			"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾",
			4,
			"佄佅佇",
			5,
			"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢"
		],
		[
			"8240",
			"侤侫侭侰",
			4,
			"侶",
			8,
			"俀俁係俆俇俈俉俋俌俍俒",
			4,
			"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿",
			11
		],
		[
			"8280",
			"個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯",
			10,
			"倻倽倿偀偁偂偄偅偆偉偊偋偍偐",
			4,
			"偖偗偘偙偛偝",
			7,
			"偦",
			5,
			"偭",
			8,
			"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎",
			20,
			"傤傦傪傫傭",
			4,
			"傳",
			6,
			"傼"
		],
		[
			"8340",
			"傽",
			17,
			"僐",
			5,
			"僗僘僙僛",
			10,
			"僨僩僪僫僯僰僱僲僴僶",
			4,
			"僼",
			9,
			"儈"
		],
		[
			"8380",
			"儉儊儌",
			5,
			"儓",
			13,
			"儢",
			28,
			"兂兇兊兌兎兏児兒兓兗兘兙兛兝",
			4,
			"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦",
			4,
			"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒",
			5
		],
		[
			"8440",
			"凘凙凚凜凞凟凢凣凥",
			5,
			"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄",
			5,
			"剋剎剏剒剓剕剗剘"
		],
		[
			"8480",
			"剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳",
			9,
			"剾劀劃",
			4,
			"劉",
			6,
			"劑劒劔",
			6,
			"劜劤劥劦劧劮劯劰労",
			9,
			"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務",
			5,
			"勠勡勢勣勥",
			10,
			"勱",
			7,
			"勻勼勽匁匂匃匄匇匉匊匋匌匎"
		],
		[
			"8540",
			"匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯",
			9,
			"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏"
		],
		[
			"8580",
			"厐",
			4,
			"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯",
			6,
			"厷厸厹厺厼厽厾叀參",
			4,
			"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝",
			4,
			"呣呥呧呩",
			7,
			"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡"
		],
		[
			"8640",
			"咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠",
			4,
			"哫哬哯哰哱哴",
			5,
			"哻哾唀唂唃唄唅唈唊",
			4,
			"唒唓唕",
			5,
			"唜唝唞唟唡唥唦"
		],
		[
			"8680",
			"唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋",
			4,
			"啑啒啓啔啗",
			4,
			"啝啞啟啠啢啣啨啩啫啯",
			5,
			"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠",
			6,
			"喨",
			8,
			"喲喴営喸喺喼喿",
			4,
			"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗",
			4,
			"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸",
			4,
			"嗿嘂嘃嘄嘅"
		],
		[
			"8740",
			"嘆嘇嘊嘋嘍嘐",
			7,
			"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀",
			11,
			"噏",
			4,
			"噕噖噚噛噝",
			4
		],
		[
			"8780",
			"噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽",
			7,
			"嚇",
			6,
			"嚐嚑嚒嚔",
			14,
			"嚤",
			10,
			"嚰",
			6,
			"嚸嚹嚺嚻嚽",
			12,
			"囋",
			8,
			"囕囖囘囙囜団囥",
			5,
			"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國",
			6
		],
		[
			"8840",
			"園",
			9,
			"圝圞圠圡圢圤圥圦圧圫圱圲圴",
			4,
			"圼圽圿坁坃坄坅坆坈坉坋坒",
			4,
			"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀"
		],
		[
			"8880",
			"垁垇垈垉垊垍",
			4,
			"垔",
			6,
			"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹",
			8,
			"埄",
			6,
			"埌埍埐埑埓埖埗埛埜埞埡埢埣埥",
			7,
			"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥",
			4,
			"堫",
			4,
			"報堲堳場堶",
			7
		],
		[
			"8940",
			"堾",
			5,
			"塅",
			6,
			"塎塏塐塒塓塕塖塗塙",
			4,
			"塟",
			5,
			"塦",
			4,
			"塭",
			16,
			"塿墂墄墆墇墈墊墋墌"
		],
		[
			"8980",
			"墍",
			4,
			"墔",
			4,
			"墛墜墝墠",
			7,
			"墪",
			17,
			"墽墾墿壀壂壃壄壆",
			10,
			"壒壓壔壖",
			13,
			"壥",
			5,
			"壭壯壱売壴壵壷壸壺",
			7,
			"夃夅夆夈",
			4,
			"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻"
		],
		[
			"8a40",
			"夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛",
			4,
			"奡奣奤奦",
			12,
			"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦"
		],
		[
			"8a80",
			"妧妬妭妰妱妳",
			5,
			"妺妼妽妿",
			6,
			"姇姈姉姌姍姎姏姕姖姙姛姞",
			4,
			"姤姦姧姩姪姫姭",
			11,
			"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪",
			6,
			"娳娵娷",
			4,
			"娽娾娿婁",
			4,
			"婇婈婋",
			9,
			"婖婗婘婙婛",
			5
		],
		[
			"8b40",
			"婡婣婤婥婦婨婩婫",
			8,
			"婸婹婻婼婽婾媀",
			17,
			"媓",
			6,
			"媜",
			13,
			"媫媬"
		],
		[
			"8b80",
			"媭",
			4,
			"媴媶媷媹",
			4,
			"媿嫀嫃",
			5,
			"嫊嫋嫍",
			4,
			"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬",
			4,
			"嫲",
			22,
			"嬊",
			11,
			"嬘",
			25,
			"嬳嬵嬶嬸",
			7,
			"孁",
			6
		],
		[
			"8c40",
			"孈",
			7,
			"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏"
		],
		[
			"8c80",
			"寑寔",
			8,
			"寠寢寣實寧審",
			4,
			"寯寱",
			6,
			"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧",
			6,
			"屰屲",
			6,
			"屻屼屽屾岀岃",
			4,
			"岉岊岋岎岏岒岓岕岝",
			4,
			"岤",
			4
		],
		[
			"8d40",
			"岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅",
			5,
			"峌",
			5,
			"峓",
			5,
			"峚",
			6,
			"峢峣峧峩峫峬峮峯峱",
			9,
			"峼",
			4
		],
		[
			"8d80",
			"崁崄崅崈",
			5,
			"崏",
			4,
			"崕崗崘崙崚崜崝崟",
			4,
			"崥崨崪崫崬崯",
			4,
			"崵",
			7,
			"崿",
			7,
			"嵈嵉嵍",
			10,
			"嵙嵚嵜嵞",
			10,
			"嵪嵭嵮嵰嵱嵲嵳嵵",
			12,
			"嶃",
			21,
			"嶚嶛嶜嶞嶟嶠"
		],
		[
			"8e40",
			"嶡",
			21,
			"嶸",
			12,
			"巆",
			6,
			"巎",
			12,
			"巜巟巠巣巤巪巬巭"
		],
		[
			"8e80",
			"巰巵巶巸",
			4,
			"巿帀帄帇帉帊帋帍帎帒帓帗帞",
			7,
			"帨",
			4,
			"帯帰帲",
			4,
			"帹帺帾帿幀幁幃幆",
			5,
			"幍",
			6,
			"幖",
			4,
			"幜幝幟幠幣",
			14,
			"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨",
			4,
			"庮",
			4,
			"庴庺庻庼庽庿",
			6
		],
		[
			"8f40",
			"廆廇廈廋",
			5,
			"廔廕廗廘廙廚廜",
			11,
			"廩廫",
			8,
			"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤"
		],
		[
			"8f80",
			"弨弫弬弮弰弲",
			6,
			"弻弽弾弿彁",
			14,
			"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢",
			5,
			"復徫徬徯",
			5,
			"徶徸徹徺徻徾",
			4,
			"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"
		],
		[
			"9040",
			"怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰",
			4,
			"怶",
			4,
			"怽怾恀恄",
			6,
			"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀"
		],
		[
			"9080",
			"悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽",
			7,
			"惇惈惉惌",
			4,
			"惒惓惔惖惗惙惛惞惡",
			4,
			"惪惱惲惵惷惸惻",
			4,
			"愂愃愄愅愇愊愋愌愐",
			4,
			"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬",
			18,
			"慀",
			6
		],
		[
			"9140",
			"慇慉態慍慏慐慒慓慔慖",
			6,
			"慞慟慠慡慣慤慥慦慩",
			6,
			"慱慲慳慴慶慸",
			18,
			"憌憍憏",
			4,
			"憕"
		],
		[
			"9180",
			"憖",
			6,
			"憞",
			8,
			"憪憫憭",
			9,
			"憸",
			5,
			"憿懀懁懃",
			4,
			"應懌",
			4,
			"懓懕",
			16,
			"懧",
			13,
			"懶",
			8,
			"戀",
			5,
			"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸",
			4,
			"扂扄扅扆扊"
		],
		[
			"9240",
			"扏扐払扖扗扙扚扜",
			6,
			"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋",
			5,
			"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁"
		],
		[
			"9280",
			"拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳",
			5,
			"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖",
			7,
			"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙",
			6,
			"採掤掦掫掯掱掲掵掶掹掻掽掿揀"
		],
		[
			"9340",
			"揁揂揃揅揇揈揊揋揌揑揓揔揕揗",
			6,
			"揟揢揤",
			4,
			"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆",
			4,
			"損搎搑搒搕",
			5,
			"搝搟搢搣搤"
		],
		[
			"9380",
			"搥搧搨搩搫搮",
			5,
			"搵",
			4,
			"搻搼搾摀摂摃摉摋",
			6,
			"摓摕摖摗摙",
			4,
			"摟",
			7,
			"摨摪摫摬摮",
			9,
			"摻",
			6,
			"撃撆撈",
			8,
			"撓撔撗撘撚撛撜撝撟",
			4,
			"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆",
			6,
			"擏擑擓擔擕擖擙據"
		],
		[
			"9440",
			"擛擜擝擟擠擡擣擥擧",
			24,
			"攁",
			7,
			"攊",
			7,
			"攓",
			4,
			"攙",
			8
		],
		[
			"9480",
			"攢攣攤攦",
			4,
			"攬攭攰攱攲攳攷攺攼攽敀",
			4,
			"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數",
			14,
			"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱",
			7,
			"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘",
			7,
			"旡旣旤旪旫"
		],
		[
			"9540",
			"旲旳旴旵旸旹旻",
			4,
			"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷",
			4,
			"昽昿晀時晄",
			6,
			"晍晎晐晑晘"
		],
		[
			"9580",
			"晙晛晜晝晞晠晢晣晥晧晩",
			4,
			"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘",
			4,
			"暞",
			8,
			"暩",
			4,
			"暯",
			4,
			"暵暶暷暸暺暻暼暽暿",
			25,
			"曚曞",
			7,
			"曧曨曪",
			5,
			"曱曵曶書曺曻曽朁朂會"
		],
		[
			"9640",
			"朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠",
			5,
			"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗",
			4,
			"杝杢杣杤杦杧杫杬杮東杴杶"
		],
		[
			"9680",
			"杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹",
			7,
			"柂柅",
			9,
			"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵",
			7,
			"柾栁栂栃栄栆栍栐栒栔栕栘",
			4,
			"栞栟栠栢",
			6,
			"栫",
			6,
			"栴栵栶栺栻栿桇桋桍桏桒桖",
			5
		],
		[
			"9740",
			"桜桝桞桟桪桬",
			7,
			"桵桸",
			8,
			"梂梄梇",
			7,
			"梐梑梒梔梕梖梘",
			9,
			"梣梤梥梩梪梫梬梮梱梲梴梶梷梸"
		],
		[
			"9780",
			"梹",
			6,
			"棁棃",
			5,
			"棊棌棎棏棐棑棓棔棖棗棙棛",
			4,
			"棡棢棤",
			9,
			"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆",
			4,
			"椌椏椑椓",
			11,
			"椡椢椣椥",
			7,
			"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃",
			16,
			"楕楖楘楙楛楜楟"
		],
		[
			"9840",
			"楡楢楤楥楧楨楩楪楬業楯楰楲",
			4,
			"楺楻楽楾楿榁榃榅榊榋榌榎",
			5,
			"榖榗榙榚榝",
			9,
			"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"
		],
		[
			"9880",
			"榾榿槀槂",
			7,
			"構槍槏槑槒槓槕",
			5,
			"槜槝槞槡",
			11,
			"槮槯槰槱槳",
			9,
			"槾樀",
			9,
			"樋",
			11,
			"標",
			5,
			"樠樢",
			5,
			"権樫樬樭樮樰樲樳樴樶",
			6,
			"樿",
			4,
			"橅橆橈",
			7,
			"橑",
			6,
			"橚"
		],
		[
			"9940",
			"橜",
			4,
			"橢橣橤橦",
			10,
			"橲",
			6,
			"橺橻橽橾橿檁檂檃檅",
			8,
			"檏檒",
			4,
			"檘",
			7,
			"檡",
			5
		],
		[
			"9980",
			"檧檨檪檭",
			114,
			"欥欦欨",
			6
		],
		[
			"9a40",
			"欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍",
			11,
			"歚",
			7,
			"歨歩歫",
			13,
			"歺歽歾歿殀殅殈"
		],
		[
			"9a80",
			"殌殎殏殐殑殔殕殗殘殙殜",
			4,
			"殢",
			7,
			"殫",
			7,
			"殶殸",
			6,
			"毀毃毄毆",
			4,
			"毌毎毐毑毘毚毜",
			4,
			"毢",
			7,
			"毬毭毮毰毱毲毴毶毷毸毺毻毼毾",
			6,
			"氈",
			4,
			"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋",
			4,
			"汑汒汓汖汘"
		],
		[
			"9b40",
			"汙汚汢汣汥汦汧汫",
			4,
			"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘"
		],
		[
			"9b80",
			"泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟",
			5,
			"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽",
			4,
			"涃涄涆涇涊涋涍涏涐涒涖",
			4,
			"涜涢涥涬涭涰涱涳涴涶涷涹",
			5,
			"淁淂淃淈淉淊"
		],
		[
			"9c40",
			"淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽",
			7,
			"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"
		],
		[
			"9c80",
			"渶渷渹渻",
			7,
			"湅",
			7,
			"湏湐湑湒湕湗湙湚湜湝湞湠",
			10,
			"湬湭湯",
			14,
			"満溁溂溄溇溈溊",
			4,
			"溑",
			6,
			"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪",
			5
		],
		[
			"9d40",
			"滰滱滲滳滵滶滷滸滺",
			7,
			"漃漄漅漇漈漊",
			4,
			"漐漑漒漖",
			9,
			"漡漢漣漥漦漧漨漬漮漰漲漴漵漷",
			6,
			"漿潀潁潂"
		],
		[
			"9d80",
			"潃潄潅潈潉潊潌潎",
			9,
			"潙潚潛潝潟潠潡潣潤潥潧",
			5,
			"潯潰潱潳潵潶潷潹潻潽",
			6,
			"澅澆澇澊澋澏",
			12,
			"澝澞澟澠澢",
			4,
			"澨",
			10,
			"澴澵澷澸澺",
			5,
			"濁濃",
			5,
			"濊",
			6,
			"濓",
			10,
			"濟濢濣濤濥"
		],
		[
			"9e40",
			"濦",
			7,
			"濰",
			32,
			"瀒",
			7,
			"瀜",
			6,
			"瀤",
			6
		],
		[
			"9e80",
			"瀫",
			9,
			"瀶瀷瀸瀺",
			17,
			"灍灎灐",
			13,
			"灟",
			11,
			"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞",
			12,
			"炰炲炴炵炶為炾炿烄烅烆烇烉烋",
			12,
			"烚"
		],
		[
			"9f40",
			"烜烝烞烠烡烢烣烥烪烮烰",
			6,
			"烸烺烻烼烾",
			10,
			"焋",
			4,
			"焑焒焔焗焛",
			10,
			"焧",
			7,
			"焲焳焴"
		],
		[
			"9f80",
			"焵焷",
			13,
			"煆煇煈煉煋煍煏",
			12,
			"煝煟",
			4,
			"煥煩",
			4,
			"煯煰煱煴煵煶煷煹煻煼煾",
			5,
			"熅",
			4,
			"熋熌熍熎熐熑熒熓熕熖熗熚",
			4,
			"熡",
			6,
			"熩熪熫熭",
			5,
			"熴熶熷熸熺",
			8,
			"燄",
			9,
			"燏",
			4
		],
		[
			"a040",
			"燖",
			9,
			"燡燢燣燤燦燨",
			5,
			"燯",
			9,
			"燺",
			11,
			"爇",
			19
		],
		[
			"a080",
			"爛爜爞",
			9,
			"爩爫爭爮爯爲爳爴爺爼爾牀",
			6,
			"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅",
			4,
			"犌犎犐犑犓",
			11,
			"犠",
			11,
			"犮犱犲犳犵犺",
			6,
			"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛"
		],
		[
			"a1a1",
			"　、。·ˉˇ¨〃々—～‖…‘’“”〔〕〈",
			7,
			"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃＄¤￠￡‰§№☆★○●◎◇◆□■△▲※→←↑↓〓"
		],
		[
			"a2a1",
			"ⅰ",
			9
		],
		[
			"a2b1",
			"⒈",
			19,
			"⑴",
			19,
			"①",
			9
		],
		[
			"a2e5",
			"㈠",
			9
		],
		[
			"a2f1",
			"Ⅰ",
			11
		],
		[
			"a3a1",
			"！＂＃￥％",
			88,
			"￣"
		],
		[
			"a4a1",
			"ぁ",
			82
		],
		[
			"a5a1",
			"ァ",
			85
		],
		[
			"a6a1",
			"Α",
			16,
			"Σ",
			6
		],
		[
			"a6c1",
			"α",
			16,
			"σ",
			6
		],
		["a6e0", "︵︶︹︺︿﹀︽︾﹁﹂﹃﹄"],
		["a6ee", "︻︼︷︸︱"],
		["a6f4", "︳︴"],
		[
			"a7a1",
			"А",
			5,
			"ЁЖ",
			25
		],
		[
			"a7d1",
			"а",
			5,
			"ёж",
			25
		],
		[
			"a840",
			"ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═",
			35,
			"▁",
			6
		],
		[
			"a880",
			"█",
			7,
			"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞"
		],
		["a8a1", "āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ"],
		["a8bd", "ńň"],
		["a8c0", "ɡ"],
		[
			"a8c5",
			"ㄅ",
			36
		],
		[
			"a940",
			"〡",
			8,
			"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰￢￤"
		],
		["a959", "℡㈱"],
		["a95c", "‐"],
		[
			"a960",
			"ー゛゜ヽヾ〆ゝゞ﹉",
			9,
			"﹔﹕﹖﹗﹙",
			8
		],
		[
			"a980",
			"﹢",
			4,
			"﹨﹩﹪﹫"
		],
		["a996", "〇"],
		[
			"a9a4",
			"─",
			75
		],
		[
			"aa40",
			"狜狝狟狢",
			5,
			"狪狫狵狶狹狽狾狿猀猂猄",
			5,
			"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀",
			8
		],
		[
			"aa80",
			"獉獊獋獌獎獏獑獓獔獕獖獘",
			7,
			"獡",
			10,
			"獮獰獱"
		],
		[
			"ab40",
			"獲",
			11,
			"獿",
			4,
			"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣",
			5,
			"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃",
			4
		],
		[
			"ab80",
			"珋珌珎珒",
			6,
			"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳",
			4
		],
		[
			"ac40",
			"珸",
			10,
			"琄琇琈琋琌琍琎琑",
			8,
			"琜",
			5,
			"琣琤琧琩琫琭琯琱琲琷",
			4,
			"琽琾琿瑀瑂",
			11
		],
		[
			"ac80",
			"瑎",
			6,
			"瑖瑘瑝瑠",
			12,
			"瑮瑯瑱",
			4,
			"瑸瑹瑺"
		],
		[
			"ad40",
			"瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑",
			10,
			"璝璟",
			7,
			"璪",
			15,
			"璻",
			12
		],
		[
			"ad80",
			"瓈",
			9,
			"瓓",
			8,
			"瓝瓟瓡瓥瓧",
			6,
			"瓰瓱瓲"
		],
		[
			"ae40",
			"瓳瓵瓸",
			6,
			"甀甁甂甃甅",
			7,
			"甎甐甒甔甕甖甗甛甝甞甠",
			4,
			"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘"
		],
		[
			"ae80",
			"畝",
			7,
			"畧畨畩畫",
			6,
			"畳畵當畷畺",
			4,
			"疀疁疂疄疅疇"
		],
		[
			"af40",
			"疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦",
			4,
			"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"
		],
		["af80", "瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄"],
		[
			"b040",
			"癅",
			6,
			"癎",
			5,
			"癕癗",
			4,
			"癝癟癠癡癢癤",
			6,
			"癬癭癮癰",
			7,
			"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛"
		],
		[
			"b080",
			"皜",
			7,
			"皥",
			8,
			"皯皰皳皵",
			9,
			"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥"
		],
		[
			"b140",
			"盄盇盉盋盌盓盕盙盚盜盝盞盠",
			4,
			"盦",
			7,
			"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎",
			10,
			"眛眜眝眞眡眣眤眥眧眪眫"
		],
		[
			"b180",
			"眬眮眰",
			4,
			"眹眻眽眾眿睂睄睅睆睈",
			7,
			"睒",
			7,
			"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"
		],
		[
			"b240",
			"睝睞睟睠睤睧睩睪睭",
			11,
			"睺睻睼瞁瞂瞃瞆",
			5,
			"瞏瞐瞓",
			11,
			"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶",
			4
		],
		[
			"b280",
			"瞼瞾矀",
			12,
			"矎",
			8,
			"矘矙矚矝",
			4,
			"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖"
		],
		[
			"b340",
			"矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃",
			5,
			"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚"
		],
		[
			"b380",
			"硛硜硞",
			11,
			"硯",
			7,
			"硸硹硺硻硽",
			6,
			"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚"
		],
		[
			"b440",
			"碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨",
			7,
			"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚",
			9
		],
		[
			"b480",
			"磤磥磦磧磩磪磫磭",
			4,
			"磳磵磶磸磹磻",
			5,
			"礂礃礄礆",
			6,
			"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮"
		],
		[
			"b540",
			"礍",
			5,
			"礔",
			9,
			"礟",
			4,
			"礥",
			14,
			"礵",
			4,
			"礽礿祂祃祄祅祇祊",
			8,
			"祔祕祘祙祡祣"
		],
		[
			"b580",
			"祤祦祩祪祫祬祮祰",
			6,
			"祹祻",
			4,
			"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠"
		],
		[
			"b640",
			"禓",
			6,
			"禛",
			11,
			"禨",
			10,
			"禴",
			4,
			"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙",
			5,
			"秠秡秢秥秨秪"
		],
		[
			"b680",
			"秬秮秱",
			6,
			"秹秺秼秾秿稁稄稅稇稈稉稊稌稏",
			4,
			"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二"
		],
		[
			"b740",
			"稝稟稡稢稤",
			14,
			"稴稵稶稸稺稾穀",
			5,
			"穇",
			9,
			"穒",
			4,
			"穘",
			16
		],
		[
			"b780",
			"穩",
			6,
			"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服"
		],
		[
			"b840",
			"窣窤窧窩窪窫窮",
			4,
			"窴",
			10,
			"竀",
			10,
			"竌",
			9,
			"竗竘竚竛竜竝竡竢竤竧",
			5,
			"竮竰竱竲竳"
		],
		[
			"b880",
			"竴",
			4,
			"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹"
		],
		[
			"b940",
			"笯笰笲笴笵笶笷笹笻笽笿",
			5,
			"筆筈筊筍筎筓筕筗筙筜筞筟筡筣",
			10,
			"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆",
			6,
			"箎箏"
		],
		[
			"b980",
			"箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹",
			7,
			"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈"
		],
		[
			"ba40",
			"篅篈築篊篋篍篎篏篐篒篔",
			4,
			"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲",
			4,
			"篸篹篺篻篽篿",
			7,
			"簈簉簊簍簎簐",
			5,
			"簗簘簙"
		],
		[
			"ba80",
			"簚",
			4,
			"簠",
			5,
			"簨簩簫",
			12,
			"簹",
			5,
			"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖"
		],
		[
			"bb40",
			"籃",
			9,
			"籎",
			36,
			"籵",
			5,
			"籾",
			9
		],
		[
			"bb80",
			"粈粊",
			6,
			"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴",
			4,
			"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕"
		],
		[
			"bc40",
			"粿糀糂糃糄糆糉糋糎",
			6,
			"糘糚糛糝糞糡",
			6,
			"糩",
			5,
			"糰",
			7,
			"糹糺糼",
			13,
			"紋",
			5
		],
		[
			"bc80",
			"紑",
			14,
			"紡紣紤紥紦紨紩紪紬紭紮細",
			6,
			"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件"
		],
		[
			"bd40",
			"紷",
			54,
			"絯",
			7
		],
		[
			"bd80",
			"絸",
			32,
			"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸"
		],
		[
			"be40",
			"継",
			12,
			"綧",
			6,
			"綯",
			42
		],
		[
			"be80",
			"線",
			32,
			"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻"
		],
		[
			"bf40",
			"緻",
			62
		],
		[
			"bf80",
			"縺縼",
			4,
			"繂",
			4,
			"繈",
			21,
			"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀"
		],
		[
			"c040",
			"繞",
			35,
			"纃",
			23,
			"纜纝纞"
		],
		[
			"c080",
			"纮纴纻纼绖绤绬绹缊缐缞缷缹缻",
			6,
			"罃罆",
			9,
			"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐"
		],
		[
			"c140",
			"罖罙罛罜罝罞罠罣",
			4,
			"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂",
			7,
			"羋羍羏",
			4,
			"羕",
			4,
			"羛羜羠羢羣羥羦羨",
			6,
			"羱"
		],
		[
			"c180",
			"羳",
			4,
			"羺羻羾翀翂翃翄翆翇翈翉翋翍翏",
			4,
			"翖翗翙",
			5,
			"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿"
		],
		[
			"c240",
			"翤翧翨翪翫翬翭翯翲翴",
			6,
			"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫",
			5,
			"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗"
		],
		[
			"c280",
			"聙聛",
			13,
			"聫",
			5,
			"聲",
			11,
			"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫"
		],
		[
			"c340",
			"聾肁肂肅肈肊肍",
			5,
			"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇",
			4,
			"胏",
			6,
			"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋"
		],
		[
			"c380",
			"脌脕脗脙脛脜脝脟",
			12,
			"脭脮脰脳脴脵脷脹",
			4,
			"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸"
		],
		[
			"c440",
			"腀",
			5,
			"腇腉腍腎腏腒腖腗腘腛",
			4,
			"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃",
			4,
			"膉膋膌膍膎膐膒",
			5,
			"膙膚膞",
			4,
			"膤膥"
		],
		[
			"c480",
			"膧膩膫",
			7,
			"膴",
			5,
			"膼膽膾膿臄臅臇臈臉臋臍",
			6,
			"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁"
		],
		[
			"c540",
			"臔",
			14,
			"臤臥臦臨臩臫臮",
			4,
			"臵",
			5,
			"臽臿舃與",
			4,
			"舎舏舑舓舕",
			5,
			"舝舠舤舥舦舧舩舮舲舺舼舽舿"
		],
		[
			"c580",
			"艀艁艂艃艅艆艈艊艌艍艎艐",
			7,
			"艙艛艜艝艞艠",
			7,
			"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗"
		],
		["c640", "艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸"],
		[
			"c680",
			"苺苼",
			4,
			"茊茋茍茐茒茓茖茘茙茝",
			9,
			"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐"
		],
		[
			"c740",
			"茾茿荁荂荄荅荈荊",
			4,
			"荓荕",
			4,
			"荝荢荰",
			6,
			"荹荺荾",
			6,
			"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡",
			6,
			"莬莭莮"
		],
		["c780", "莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠"],
		[
			"c840",
			"菮華菳",
			4,
			"菺菻菼菾菿萀萂萅萇萈萉萊萐萒",
			5,
			"萙萚萛萞",
			5,
			"萩",
			7,
			"萲",
			5,
			"萹萺萻萾",
			7,
			"葇葈葉"
		],
		[
			"c880",
			"葊",
			6,
			"葒",
			4,
			"葘葝葞葟葠葢葤",
			4,
			"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁"
		],
		[
			"c940",
			"葽",
			4,
			"蒃蒄蒅蒆蒊蒍蒏",
			7,
			"蒘蒚蒛蒝蒞蒟蒠蒢",
			12,
			"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗"
		],
		[
			"c980",
			"蓘",
			4,
			"蓞蓡蓢蓤蓧",
			4,
			"蓭蓮蓯蓱",
			10,
			"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳"
		],
		[
			"ca40",
			"蔃",
			8,
			"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢",
			8,
			"蔭",
			9,
			"蔾",
			4,
			"蕄蕅蕆蕇蕋",
			10
		],
		[
			"ca80",
			"蕗蕘蕚蕛蕜蕝蕟",
			4,
			"蕥蕦蕧蕩",
			8,
			"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱"
		],
		[
			"cb40",
			"薂薃薆薈",
			6,
			"薐",
			10,
			"薝",
			6,
			"薥薦薧薩薫薬薭薱",
			5,
			"薸薺",
			6,
			"藂",
			6,
			"藊",
			4,
			"藑藒"
		],
		[
			"cb80",
			"藔藖",
			5,
			"藝",
			6,
			"藥藦藧藨藪",
			14,
			"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔"
		],
		[
			"cc40",
			"藹藺藼藽藾蘀",
			4,
			"蘆",
			10,
			"蘒蘓蘔蘕蘗",
			15,
			"蘨蘪",
			13,
			"蘹蘺蘻蘽蘾蘿虀"
		],
		[
			"cc80",
			"虁",
			11,
			"虒虓處",
			4,
			"虛虜虝號虠虡虣",
			7,
			"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃"
		],
		[
			"cd40",
			"虭虯虰虲",
			6,
			"蚃",
			6,
			"蚎",
			4,
			"蚔蚖",
			5,
			"蚞",
			4,
			"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻",
			4,
			"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜"
		],
		["cd80", "蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威"],
		[
			"ce40",
			"蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀",
			6,
			"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚",
			5,
			"蝡蝢蝦",
			7,
			"蝯蝱蝲蝳蝵"
		],
		[
			"ce80",
			"蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎",
			4,
			"螔螕螖螘",
			6,
			"螠",
			4,
			"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺"
		],
		[
			"cf40",
			"螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁",
			4,
			"蟇蟈蟉蟌",
			4,
			"蟔",
			6,
			"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯",
			9
		],
		[
			"cf80",
			"蟺蟻蟼蟽蟿蠀蠁蠂蠄",
			5,
			"蠋",
			7,
			"蠔蠗蠘蠙蠚蠜",
			4,
			"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓"
		],
		[
			"d040",
			"蠤",
			13,
			"蠳",
			5,
			"蠺蠻蠽蠾蠿衁衂衃衆",
			5,
			"衎",
			5,
			"衕衖衘衚",
			6,
			"衦衧衪衭衯衱衳衴衵衶衸衹衺"
		],
		[
			"d080",
			"衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗",
			4,
			"袝",
			4,
			"袣袥",
			5,
			"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄"
		],
		[
			"d140",
			"袬袮袯袰袲",
			4,
			"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚",
			4,
			"裠裡裦裧裩",
			6,
			"裲裵裶裷裺裻製裿褀褁褃",
			5
		],
		[
			"d180",
			"褉褋",
			4,
			"褑褔",
			4,
			"褜",
			4,
			"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶"
		],
		[
			"d240",
			"褸",
			8,
			"襂襃襅",
			24,
			"襠",
			5,
			"襧",
			19,
			"襼"
		],
		[
			"d280",
			"襽襾覀覂覄覅覇",
			26,
			"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐"
		],
		[
			"d340",
			"覢",
			30,
			"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴",
			6
		],
		[
			"d380",
			"觻",
			4,
			"訁",
			5,
			"計",
			21,
			"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉"
		],
		[
			"d440",
			"訞",
			31,
			"訿",
			8,
			"詉",
			21
		],
		[
			"d480",
			"詟",
			25,
			"詺",
			6,
			"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧"
		],
		[
			"d540",
			"誁",
			7,
			"誋",
			7,
			"誔",
			46
		],
		[
			"d580",
			"諃",
			32,
			"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政"
		],
		[
			"d640",
			"諤",
			34,
			"謈",
			27
		],
		[
			"d680",
			"謤謥謧",
			30,
			"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑"
		],
		[
			"d740",
			"譆",
			31,
			"譧",
			4,
			"譭",
			25
		],
		[
			"d780",
			"讇",
			24,
			"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座"
		],
		[
			"d840",
			"谸",
			8,
			"豂豃豄豅豈豊豋豍",
			7,
			"豖豗豘豙豛",
			5,
			"豣",
			6,
			"豬",
			6,
			"豴豵豶豷豻",
			6,
			"貃貄貆貇"
		],
		[
			"d880",
			"貈貋貍",
			6,
			"貕貖貗貙",
			20,
			"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝"
		],
		[
			"d940",
			"貮",
			62
		],
		[
			"d980",
			"賭",
			32,
			"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"
		],
		[
			"da40",
			"贎",
			14,
			"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸",
			8,
			"趂趃趆趇趈趉趌",
			4,
			"趒趓趕",
			9,
			"趠趡"
		],
		[
			"da80",
			"趢趤",
			12,
			"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺"
		],
		[
			"db40",
			"跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾",
			6,
			"踆踇踈踋踍踎踐踑踒踓踕",
			7,
			"踠踡踤",
			4,
			"踫踭踰踲踳踴踶踷踸踻踼踾"
		],
		[
			"db80",
			"踿蹃蹅蹆蹌",
			4,
			"蹓",
			5,
			"蹚",
			11,
			"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝"
		],
		[
			"dc40",
			"蹳蹵蹷",
			4,
			"蹽蹾躀躂躃躄躆躈",
			6,
			"躑躒躓躕",
			6,
			"躝躟",
			11,
			"躭躮躰躱躳",
			6,
			"躻",
			7
		],
		[
			"dc80",
			"軃",
			10,
			"軏",
			21,
			"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥"
		],
		[
			"dd40",
			"軥",
			62
		],
		[
			"dd80",
			"輤",
			32,
			"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺"
		],
		[
			"de40",
			"轅",
			32,
			"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆"
		],
		[
			"de80",
			"迉",
			4,
			"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖"
		],
		[
			"df40",
			"這逜連逤逥逧",
			5,
			"逰",
			4,
			"逷逹逺逽逿遀遃遅遆遈",
			4,
			"過達違遖遙遚遜",
			5,
			"遤遦遧適遪遫遬遯",
			4,
			"遶",
			6,
			"遾邁"
		],
		[
			"df80",
			"還邅邆邇邉邊邌",
			4,
			"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼"
		],
		[
			"e040",
			"郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅",
			19,
			"鄚鄛鄜"
		],
		[
			"e080",
			"鄝鄟鄠鄡鄤",
			10,
			"鄰鄲",
			6,
			"鄺",
			8,
			"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼"
		],
		[
			"e140",
			"酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀",
			4,
			"醆醈醊醎醏醓",
			6,
			"醜",
			5,
			"醤",
			5,
			"醫醬醰醱醲醳醶醷醸醹醻"
		],
		[
			"e180",
			"醼",
			10,
			"釈釋釐釒",
			9,
			"針",
			8,
			"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺"
		],
		[
			"e240",
			"釦",
			62
		],
		[
			"e280",
			"鈥",
			32,
			"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧",
			5,
			"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂"
		],
		[
			"e340",
			"鉆",
			45,
			"鉵",
			16
		],
		[
			"e380",
			"銆",
			7,
			"銏",
			24,
			"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"
		],
		[
			"e440",
			"銨",
			5,
			"銯",
			24,
			"鋉",
			31
		],
		[
			"e480",
			"鋩",
			32,
			"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑"
		],
		[
			"e540",
			"錊",
			51,
			"錿",
			10
		],
		[
			"e580",
			"鍊",
			31,
			"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣"
		],
		[
			"e640",
			"鍬",
			34,
			"鎐",
			27
		],
		[
			"e680",
			"鎬",
			29,
			"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩"
		],
		[
			"e740",
			"鏎",
			7,
			"鏗",
			54
		],
		[
			"e780",
			"鐎",
			32,
			"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡",
			6,
			"缪缫缬缭缯",
			4,
			"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬"
		],
		[
			"e840",
			"鐯",
			14,
			"鐿",
			43,
			"鑬鑭鑮鑯"
		],
		[
			"e880",
			"鑰",
			20,
			"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹"
		],
		[
			"e940",
			"锧锳锽镃镈镋镕镚镠镮镴镵長",
			7,
			"門",
			42
		],
		[
			"e980",
			"閫",
			32,
			"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋"
		],
		[
			"ea40",
			"闌",
			27,
			"闬闿阇阓阘阛阞阠阣",
			6,
			"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗"
		],
		[
			"ea80",
			"陘陙陚陜陝陞陠陣陥陦陫陭",
			4,
			"陳陸",
			12,
			"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰"
		],
		[
			"eb40",
			"隌階隑隒隓隕隖隚際隝",
			9,
			"隨",
			7,
			"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖",
			9,
			"雡",
			6,
			"雫"
		],
		[
			"eb80",
			"雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗",
			4,
			"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻"
		],
		[
			"ec40",
			"霡",
			8,
			"霫霬霮霯霱霳",
			4,
			"霺霻霼霽霿",
			18,
			"靔靕靗靘靚靜靝靟靣靤靦靧靨靪",
			7
		],
		[
			"ec80",
			"靲靵靷",
			4,
			"靽",
			7,
			"鞆",
			4,
			"鞌鞎鞏鞐鞓鞕鞖鞗鞙",
			4,
			"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐"
		],
		[
			"ed40",
			"鞞鞟鞡鞢鞤",
			6,
			"鞬鞮鞰鞱鞳鞵",
			46
		],
		[
			"ed80",
			"韤韥韨韮",
			4,
			"韴韷",
			23,
			"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨"
		],
		[
			"ee40",
			"頏",
			62
		],
		[
			"ee80",
			"顎",
			32,
			"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶",
			4,
			"钼钽钿铄铈",
			6,
			"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"
		],
		[
			"ef40",
			"顯",
			5,
			"颋颎颒颕颙颣風",
			37,
			"飏飐飔飖飗飛飜飝飠",
			4
		],
		[
			"ef80",
			"飥飦飩",
			30,
			"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒",
			4,
			"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤",
			8,
			"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"
		],
		[
			"f040",
			"餈",
			4,
			"餎餏餑",
			28,
			"餯",
			26
		],
		[
			"f080",
			"饊",
			9,
			"饖",
			12,
			"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨",
			4,
			"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦",
			6,
			"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙"
		],
		[
			"f140",
			"馌馎馚",
			10,
			"馦馧馩",
			47
		],
		[
			"f180",
			"駙",
			32,
			"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃"
		],
		[
			"f240",
			"駺",
			62
		],
		[
			"f280",
			"騹",
			32,
			"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒"
		],
		[
			"f340",
			"驚",
			17,
			"驲骃骉骍骎骔骕骙骦骩",
			6,
			"骲骳骴骵骹骻骽骾骿髃髄髆",
			4,
			"髍髎髏髐髒體髕髖髗髙髚髛髜"
		],
		[
			"f380",
			"髝髞髠髢髣髤髥髧髨髩髪髬髮髰",
			8,
			"髺髼",
			6,
			"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋"
		],
		[
			"f440",
			"鬇鬉",
			5,
			"鬐鬑鬒鬔",
			10,
			"鬠鬡鬢鬤",
			10,
			"鬰鬱鬳",
			7,
			"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕",
			5
		],
		[
			"f480",
			"魛",
			32,
			"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤"
		],
		[
			"f540",
			"魼",
			62
		],
		[
			"f580",
			"鮻",
			32,
			"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜"
		],
		[
			"f640",
			"鯜",
			62
		],
		[
			"f680",
			"鰛",
			32,
			"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅",
			5,
			"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞",
			5,
			"鲥",
			4,
			"鲫鲭鲮鲰",
			7,
			"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"
		],
		[
			"f740",
			"鰼",
			62
		],
		[
			"f780",
			"鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾",
			4,
			"鳈鳉鳑鳒鳚鳛鳠鳡鳌",
			4,
			"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄"
		],
		[
			"f840",
			"鳣",
			62
		],
		[
			"f880",
			"鴢",
			32
		],
		[
			"f940",
			"鵃",
			62
		],
		[
			"f980",
			"鶂",
			32
		],
		[
			"fa40",
			"鶣",
			62
		],
		[
			"fa80",
			"鷢",
			32
		],
		[
			"fb40",
			"鸃",
			27,
			"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴",
			9,
			"麀"
		],
		[
			"fb80",
			"麁麃麄麅麆麉麊麌",
			5,
			"麔",
			8,
			"麞麠",
			5,
			"麧麨麩麪"
		],
		[
			"fc40",
			"麫",
			8,
			"麵麶麷麹麺麼麿",
			4,
			"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰",
			8,
			"黺黽黿",
			6
		],
		[
			"fc80",
			"鼆",
			4,
			"鼌鼏鼑鼒鼔鼕鼖鼘鼚",
			5,
			"鼡鼣",
			8,
			"鼭鼮鼰鼱"
		],
		[
			"fd40",
			"鼲",
			4,
			"鼸鼺鼼鼿",
			4,
			"齅",
			10,
			"齒",
			38
		],
		[
			"fd80",
			"齹",
			5,
			"龁龂龍",
			11,
			"龜龝龞龡",
			4,
			"郎凉秊裏隣"
		],
		["fe40", "兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"]
	];
}));
//#endregion
//#region node_modules/iconv-lite/encodings/tables/gbk-added.json
var require_gbk_added = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		[
			"a140",
			"",
			62
		],
		[
			"a180",
			"",
			32
		],
		[
			"a240",
			"",
			62
		],
		[
			"a280",
			"",
			32
		],
		[
			"a2ab",
			"",
			5
		],
		["a2e3", "€"],
		["a2ef", ""],
		["a2fd", ""],
		[
			"a340",
			"",
			62
		],
		[
			"a380",
			"",
			31,
			"　"
		],
		[
			"a440",
			"",
			62
		],
		[
			"a480",
			"",
			32
		],
		[
			"a4f4",
			"",
			10
		],
		[
			"a540",
			"",
			62
		],
		[
			"a580",
			"",
			32
		],
		[
			"a5f7",
			"",
			7
		],
		[
			"a640",
			"",
			62
		],
		[
			"a680",
			"",
			32
		],
		[
			"a6b9",
			"",
			7
		],
		[
			"a6d9",
			"",
			6
		],
		["a6ec", ""],
		["a6f3", ""],
		[
			"a6f6",
			"",
			8
		],
		[
			"a740",
			"",
			62
		],
		[
			"a780",
			"",
			32
		],
		[
			"a7c2",
			"",
			14
		],
		[
			"a7f2",
			"",
			12
		],
		[
			"a896",
			"",
			10
		],
		["a8bc", "ḿ"],
		["a8bf", "ǹ"],
		["a8c1", ""],
		[
			"a8ea",
			"",
			20
		],
		["a958", ""],
		["a95b", ""],
		["a95d", ""],
		[
			"a989",
			"〾⿰",
			11
		],
		[
			"a997",
			"",
			12
		],
		[
			"a9f0",
			"",
			14
		],
		[
			"aaa1",
			"",
			93
		],
		[
			"aba1",
			"",
			93
		],
		[
			"aca1",
			"",
			93
		],
		[
			"ada1",
			"",
			93
		],
		[
			"aea1",
			"",
			93
		],
		[
			"afa1",
			"",
			93
		],
		[
			"d7fa",
			"",
			4
		],
		[
			"f8a1",
			"",
			93
		],
		[
			"f9a1",
			"",
			93
		],
		[
			"faa1",
			"",
			93
		],
		[
			"fba1",
			"",
			93
		],
		[
			"fca1",
			"",
			93
		],
		[
			"fda1",
			"",
			93
		],
		["fe50", "⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"],
		[
			"fe80",
			"䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓",
			6,
			"䶮",
			93
		],
		["8135f437", ""]
	];
}));
//#endregion
//#region node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
var require_gb18030_ranges = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = {
		"uChars": [
			128,
			165,
			169,
			178,
			184,
			216,
			226,
			235,
			238,
			244,
			248,
			251,
			253,
			258,
			276,
			284,
			300,
			325,
			329,
			334,
			364,
			463,
			465,
			467,
			469,
			471,
			473,
			475,
			477,
			506,
			594,
			610,
			712,
			716,
			730,
			930,
			938,
			962,
			970,
			1026,
			1104,
			1106,
			8209,
			8215,
			8218,
			8222,
			8231,
			8241,
			8244,
			8246,
			8252,
			8365,
			8452,
			8454,
			8458,
			8471,
			8482,
			8556,
			8570,
			8596,
			8602,
			8713,
			8720,
			8722,
			8726,
			8731,
			8737,
			8740,
			8742,
			8748,
			8751,
			8760,
			8766,
			8777,
			8781,
			8787,
			8802,
			8808,
			8816,
			8854,
			8858,
			8870,
			8896,
			8979,
			9322,
			9372,
			9548,
			9588,
			9616,
			9622,
			9634,
			9652,
			9662,
			9672,
			9676,
			9680,
			9702,
			9735,
			9738,
			9793,
			9795,
			11906,
			11909,
			11913,
			11917,
			11928,
			11944,
			11947,
			11951,
			11956,
			11960,
			11964,
			11979,
			12284,
			12292,
			12312,
			12319,
			12330,
			12351,
			12436,
			12447,
			12535,
			12543,
			12586,
			12842,
			12850,
			12964,
			13200,
			13215,
			13218,
			13253,
			13263,
			13267,
			13270,
			13384,
			13428,
			13727,
			13839,
			13851,
			14617,
			14703,
			14801,
			14816,
			14964,
			15183,
			15471,
			15585,
			16471,
			16736,
			17208,
			17325,
			17330,
			17374,
			17623,
			17997,
			18018,
			18212,
			18218,
			18301,
			18318,
			18760,
			18811,
			18814,
			18820,
			18823,
			18844,
			18848,
			18872,
			19576,
			19620,
			19738,
			19887,
			40870,
			59244,
			59336,
			59367,
			59413,
			59417,
			59423,
			59431,
			59437,
			59443,
			59452,
			59460,
			59478,
			59493,
			63789,
			63866,
			63894,
			63976,
			63986,
			64016,
			64018,
			64021,
			64025,
			64034,
			64037,
			64042,
			65074,
			65093,
			65107,
			65112,
			65127,
			65132,
			65375,
			65510,
			65536
		],
		"gbChars": [
			0,
			36,
			38,
			45,
			50,
			81,
			89,
			95,
			96,
			100,
			103,
			104,
			105,
			109,
			126,
			133,
			148,
			172,
			175,
			179,
			208,
			306,
			307,
			308,
			309,
			310,
			311,
			312,
			313,
			341,
			428,
			443,
			544,
			545,
			558,
			741,
			742,
			749,
			750,
			805,
			819,
			820,
			7922,
			7924,
			7925,
			7927,
			7934,
			7943,
			7944,
			7945,
			7950,
			8062,
			8148,
			8149,
			8152,
			8164,
			8174,
			8236,
			8240,
			8262,
			8264,
			8374,
			8380,
			8381,
			8384,
			8388,
			8390,
			8392,
			8393,
			8394,
			8396,
			8401,
			8406,
			8416,
			8419,
			8424,
			8437,
			8439,
			8445,
			8482,
			8485,
			8496,
			8521,
			8603,
			8936,
			8946,
			9046,
			9050,
			9063,
			9066,
			9076,
			9092,
			9100,
			9108,
			9111,
			9113,
			9131,
			9162,
			9164,
			9218,
			9219,
			11329,
			11331,
			11334,
			11336,
			11346,
			11361,
			11363,
			11366,
			11370,
			11372,
			11375,
			11389,
			11682,
			11686,
			11687,
			11692,
			11694,
			11714,
			11716,
			11723,
			11725,
			11730,
			11736,
			11982,
			11989,
			12102,
			12336,
			12348,
			12350,
			12384,
			12393,
			12395,
			12397,
			12510,
			12553,
			12851,
			12962,
			12973,
			13738,
			13823,
			13919,
			13933,
			14080,
			14298,
			14585,
			14698,
			15583,
			15847,
			16318,
			16434,
			16438,
			16481,
			16729,
			17102,
			17122,
			17315,
			17320,
			17402,
			17418,
			17859,
			17909,
			17911,
			17915,
			17916,
			17936,
			17939,
			17961,
			18664,
			18703,
			18814,
			18962,
			19043,
			33469,
			33470,
			33471,
			33484,
			33485,
			33490,
			33497,
			33501,
			33505,
			33513,
			33520,
			33536,
			33550,
			37845,
			37921,
			37948,
			38029,
			38038,
			38064,
			38065,
			38066,
			38069,
			38075,
			38076,
			38078,
			39108,
			39109,
			39113,
			39114,
			39115,
			39116,
			39265,
			39394,
			189e3
		]
	};
}));
//#endregion
//#region node_modules/iconv-lite/encodings/tables/cp949.json
var require_cp949 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		[
			"0",
			"\0",
			127
		],
		[
			"8141",
			"갂갃갅갆갋",
			4,
			"갘갞갟갡갢갣갥",
			6,
			"갮갲갳갴"
		],
		[
			"8161",
			"갵갶갷갺갻갽갾갿걁",
			9,
			"걌걎",
			5,
			"걕"
		],
		[
			"8181",
			"걖걗걙걚걛걝",
			18,
			"걲걳걵걶걹걻",
			4,
			"겂겇겈겍겎겏겑겒겓겕",
			6,
			"겞겢",
			5,
			"겫겭겮겱",
			6,
			"겺겾겿곀곂곃곅곆곇곉곊곋곍",
			7,
			"곖곘",
			7,
			"곢곣곥곦곩곫곭곮곲곴곷",
			4,
			"곾곿괁괂괃괅괇",
			4,
			"괎괐괒괓"
		],
		[
			"8241",
			"괔괕괖괗괙괚괛괝괞괟괡",
			7,
			"괪괫괮",
			5
		],
		[
			"8261",
			"괶괷괹괺괻괽",
			6,
			"굆굈굊",
			5,
			"굑굒굓굕굖굗"
		],
		[
			"8281",
			"굙",
			7,
			"굢굤",
			7,
			"굮굯굱굲굷굸굹굺굾궀궃",
			4,
			"궊궋궍궎궏궑",
			10,
			"궞",
			5,
			"궥",
			17,
			"궸",
			7,
			"귂귃귅귆귇귉",
			6,
			"귒귔",
			7,
			"귝귞귟귡귢귣귥",
			18
		],
		[
			"8341",
			"귺귻귽귾긂",
			5,
			"긊긌긎",
			5,
			"긕",
			7
		],
		[
			"8361",
			"긝",
			18,
			"긲긳긵긶긹긻긼"
		],
		[
			"8381",
			"긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗",
			4,
			"깞깢깣깤깦깧깪깫깭깮깯깱",
			6,
			"깺깾",
			5,
			"꺆",
			5,
			"꺍",
			46,
			"꺿껁껂껃껅",
			6,
			"껎껒",
			5,
			"껚껛껝",
			8
		],
		[
			"8441",
			"껦껧껩껪껬껮",
			5,
			"껵껶껷껹껺껻껽",
			8
		],
		[
			"8461",
			"꼆꼉꼊꼋꼌꼎꼏꼑",
			18
		],
		[
			"8481",
			"꼤",
			7,
			"꼮꼯꼱꼳꼵",
			6,
			"꼾꽀꽄꽅꽆꽇꽊",
			5,
			"꽑",
			10,
			"꽞",
			5,
			"꽦",
			18,
			"꽺",
			5,
			"꾁꾂꾃꾅꾆꾇꾉",
			6,
			"꾒꾓꾔꾖",
			5,
			"꾝",
			26,
			"꾺꾻꾽꾾"
		],
		[
			"8541",
			"꾿꿁",
			5,
			"꿊꿌꿏",
			4,
			"꿕",
			6,
			"꿝",
			4
		],
		[
			"8561",
			"꿢",
			5,
			"꿪",
			5,
			"꿲꿳꿵꿶꿷꿹",
			6,
			"뀂뀃"
		],
		[
			"8581",
			"뀅",
			6,
			"뀍뀎뀏뀑뀒뀓뀕",
			6,
			"뀞",
			9,
			"뀩",
			26,
			"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞",
			29,
			"끾끿낁낂낃낅",
			6,
			"낎낐낒",
			5,
			"낛낝낞낣낤"
		],
		[
			"8641",
			"낥낦낧낪낰낲낶낷낹낺낻낽",
			6,
			"냆냊",
			5,
			"냒"
		],
		[
			"8661",
			"냓냕냖냗냙",
			6,
			"냡냢냣냤냦",
			10
		],
		[
			"8681",
			"냱",
			22,
			"넊넍넎넏넑넔넕넖넗넚넞",
			4,
			"넦넧넩넪넫넭",
			6,
			"넶넺",
			5,
			"녂녃녅녆녇녉",
			6,
			"녒녓녖녗녙녚녛녝녞녟녡",
			22,
			"녺녻녽녾녿놁놃",
			4,
			"놊놌놎놏놐놑놕놖놗놙놚놛놝"
		],
		[
			"8741",
			"놞",
			9,
			"놩",
			15
		],
		[
			"8761",
			"놹",
			18,
			"뇍뇎뇏뇑뇒뇓뇕"
		],
		[
			"8781",
			"뇖",
			5,
			"뇞뇠",
			7,
			"뇪뇫뇭뇮뇯뇱",
			7,
			"뇺뇼뇾",
			5,
			"눆눇눉눊눍",
			6,
			"눖눘눚",
			5,
			"눡",
			18,
			"눵",
			6,
			"눽",
			26,
			"뉙뉚뉛뉝뉞뉟뉡",
			6,
			"뉪",
			4
		],
		[
			"8841",
			"뉯",
			4,
			"뉶",
			5,
			"뉽",
			6,
			"늆늇늈늊",
			4
		],
		[
			"8861",
			"늏늒늓늕늖늗늛",
			4,
			"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"
		],
		[
			"8881",
			"늸",
			15,
			"닊닋닍닎닏닑닓",
			4,
			"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉",
			6,
			"댒댖",
			5,
			"댝",
			54,
			"덗덙덚덝덠덡덢덣"
		],
		[
			"8941",
			"덦덨덪덬덭덯덲덳덵덶덷덹",
			6,
			"뎂뎆",
			5,
			"뎍"
		],
		[
			"8961",
			"뎎뎏뎑뎒뎓뎕",
			10,
			"뎢",
			5,
			"뎩뎪뎫뎭"
		],
		[
			"8981",
			"뎮",
			21,
			"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩",
			18,
			"돽",
			18,
			"됑",
			6,
			"됙됚됛됝됞됟됡",
			6,
			"됪됬",
			7,
			"됵",
			15
		],
		[
			"8a41",
			"둅",
			10,
			"둒둓둕둖둗둙",
			6,
			"둢둤둦"
		],
		[
			"8a61",
			"둧",
			4,
			"둭",
			18,
			"뒁뒂"
		],
		[
			"8a81",
			"뒃",
			4,
			"뒉",
			19,
			"뒞",
			5,
			"뒥뒦뒧뒩뒪뒫뒭",
			7,
			"뒶뒸뒺",
			5,
			"듁듂듃듅듆듇듉",
			6,
			"듑듒듓듔듖",
			5,
			"듞듟듡듢듥듧",
			4,
			"듮듰듲",
			5,
			"듹",
			26,
			"딖딗딙딚딝"
		],
		[
			"8b41",
			"딞",
			5,
			"딦딫",
			4,
			"딲딳딵딶딷딹",
			6,
			"땂땆"
		],
		[
			"8b61",
			"땇땈땉땊땎땏땑땒땓땕",
			6,
			"땞땢",
			8
		],
		[
			"8b81",
			"땫",
			52,
			"떢떣떥떦떧떩떬떭떮떯떲떶",
			4,
			"떾떿뗁뗂뗃뗅",
			6,
			"뗎뗒",
			5,
			"뗙",
			18,
			"뗭",
			18
		],
		[
			"8c41",
			"똀",
			15,
			"똒똓똕똖똗똙",
			4
		],
		[
			"8c61",
			"똞",
			6,
			"똦",
			5,
			"똭",
			6,
			"똵",
			5
		],
		[
			"8c81",
			"똻",
			12,
			"뙉",
			26,
			"뙥뙦뙧뙩",
			50,
			"뚞뚟뚡뚢뚣뚥",
			5,
			"뚭뚮뚯뚰뚲",
			16
		],
		[
			"8d41",
			"뛃",
			16,
			"뛕",
			8
		],
		[
			"8d61",
			"뛞",
			17,
			"뛱뛲뛳뛵뛶뛷뛹뛺"
		],
		[
			"8d81",
			"뛻",
			4,
			"뜂뜃뜄뜆",
			33,
			"뜪뜫뜭뜮뜱",
			6,
			"뜺뜼",
			7,
			"띅띆띇띉띊띋띍",
			6,
			"띖",
			9,
			"띡띢띣띥띦띧띩",
			6,
			"띲띴띶",
			5,
			"띾띿랁랂랃랅",
			6,
			"랎랓랔랕랚랛랝랞"
		],
		[
			"8e41",
			"랟랡",
			6,
			"랪랮",
			5,
			"랶랷랹",
			8
		],
		[
			"8e61",
			"럂",
			4,
			"럈럊",
			19
		],
		[
			"8e81",
			"럞",
			13,
			"럮럯럱럲럳럵",
			6,
			"럾렂",
			4,
			"렊렋렍렎렏렑",
			6,
			"렚렜렞",
			5,
			"렦렧렩렪렫렭",
			6,
			"렶렺",
			5,
			"롁롂롃롅",
			11,
			"롒롔",
			7,
			"롞롟롡롢롣롥",
			6,
			"롮롰롲",
			5,
			"롹롺롻롽",
			7
		],
		[
			"8f41",
			"뢅",
			7,
			"뢎",
			17
		],
		[
			"8f61",
			"뢠",
			7,
			"뢩",
			6,
			"뢱뢲뢳뢵뢶뢷뢹",
			4
		],
		[
			"8f81",
			"뢾뢿룂룄룆",
			5,
			"룍룎룏룑룒룓룕",
			7,
			"룞룠룢",
			5,
			"룪룫룭룮룯룱",
			6,
			"룺룼룾",
			5,
			"뤅",
			18,
			"뤙",
			6,
			"뤡",
			26,
			"뤾뤿륁륂륃륅",
			6,
			"륍륎륐륒",
			5
		],
		[
			"9041",
			"륚륛륝륞륟륡",
			6,
			"륪륬륮",
			5,
			"륶륷륹륺륻륽"
		],
		[
			"9061",
			"륾",
			5,
			"릆릈릋릌릏",
			15
		],
		[
			"9081",
			"릟",
			12,
			"릮릯릱릲릳릵",
			6,
			"릾맀맂",
			5,
			"맊맋맍맓",
			4,
			"맚맜맟맠맢맦맧맩맪맫맭",
			6,
			"맶맻",
			4,
			"먂",
			5,
			"먉",
			11,
			"먖",
			33,
			"먺먻먽먾먿멁멃멄멅멆"
		],
		[
			"9141",
			"멇멊멌멏멐멑멒멖멗멙멚멛멝",
			6,
			"멦멪",
			5
		],
		[
			"9161",
			"멲멳멵멶멷멹",
			9,
			"몆몈몉몊몋몍",
			5
		],
		[
			"9181",
			"몓",
			20,
			"몪몭몮몯몱몳",
			4,
			"몺몼몾",
			5,
			"뫅뫆뫇뫉",
			14,
			"뫚",
			33,
			"뫽뫾뫿묁묂묃묅",
			7,
			"묎묐묒",
			5,
			"묙묚묛묝묞묟묡",
			6
		],
		[
			"9241",
			"묨묪묬",
			7,
			"묷묹묺묿",
			4,
			"뭆뭈뭊뭋뭌뭎뭑뭒"
		],
		[
			"9261",
			"뭓뭕뭖뭗뭙",
			7,
			"뭢뭤",
			7,
			"뭭",
			4
		],
		[
			"9281",
			"뭲",
			21,
			"뮉뮊뮋뮍뮎뮏뮑",
			18,
			"뮥뮦뮧뮩뮪뮫뮭",
			6,
			"뮵뮶뮸",
			7,
			"믁믂믃믅믆믇믉",
			6,
			"믑믒믔",
			35,
			"믺믻믽믾밁"
		],
		[
			"9341",
			"밃",
			4,
			"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"
		],
		[
			"9361",
			"밶밷밹",
			6,
			"뱂뱆뱇뱈뱊뱋뱎뱏뱑",
			8
		],
		[
			"9381",
			"뱚뱛뱜뱞",
			37,
			"벆벇벉벊벍벏",
			4,
			"벖벘벛",
			4,
			"벢벣벥벦벩",
			6,
			"벲벶",
			5,
			"벾벿볁볂볃볅",
			7,
			"볎볒볓볔볖볗볙볚볛볝",
			22,
			"볷볹볺볻볽"
		],
		[
			"9441",
			"볾",
			5,
			"봆봈봊",
			5,
			"봑봒봓봕",
			8
		],
		[
			"9461",
			"봞",
			5,
			"봥",
			6,
			"봭",
			12
		],
		[
			"9481",
			"봺",
			5,
			"뵁",
			6,
			"뵊뵋뵍뵎뵏뵑",
			6,
			"뵚",
			9,
			"뵥뵦뵧뵩",
			22,
			"붂붃붅붆붋",
			4,
			"붒붔붖붗붘붛붝",
			6,
			"붥",
			10,
			"붱",
			6,
			"붹",
			24
		],
		[
			"9541",
			"뷒뷓뷖뷗뷙뷚뷛뷝",
			11,
			"뷪",
			5,
			"뷱"
		],
		[
			"9561",
			"뷲뷳뷵뷶뷷뷹",
			6,
			"븁븂븄븆",
			5,
			"븎븏븑븒븓"
		],
		[
			"9581",
			"븕",
			6,
			"븞븠",
			35,
			"빆빇빉빊빋빍빏",
			4,
			"빖빘빜빝빞빟빢빣빥빦빧빩빫",
			4,
			"빲빶",
			4,
			"빾빿뺁뺂뺃뺅",
			6,
			"뺎뺒",
			5,
			"뺚",
			13,
			"뺩",
			14
		],
		[
			"9641",
			"뺸",
			23,
			"뻒뻓"
		],
		[
			"9661",
			"뻕뻖뻙",
			6,
			"뻡뻢뻦",
			5,
			"뻭",
			8
		],
		[
			"9681",
			"뻶",
			10,
			"뼂",
			5,
			"뼊",
			13,
			"뼚뼞",
			33,
			"뽂뽃뽅뽆뽇뽉",
			6,
			"뽒뽓뽔뽖",
			44
		],
		[
			"9741",
			"뾃",
			16,
			"뾕",
			8
		],
		[
			"9761",
			"뾞",
			17,
			"뾱",
			7
		],
		[
			"9781",
			"뾹",
			11,
			"뿆",
			5,
			"뿎뿏뿑뿒뿓뿕",
			6,
			"뿝뿞뿠뿢",
			89,
			"쀽쀾쀿"
		],
		[
			"9841",
			"쁀",
			16,
			"쁒",
			5,
			"쁙쁚쁛"
		],
		[
			"9861",
			"쁝쁞쁟쁡",
			6,
			"쁪",
			15
		],
		[
			"9881",
			"쁺",
			21,
			"삒삓삕삖삗삙",
			6,
			"삢삤삦",
			5,
			"삮삱삲삷",
			4,
			"삾샂샃샄샆샇샊샋샍샎샏샑",
			6,
			"샚샞",
			5,
			"샦샧샩샪샫샭",
			6,
			"샶샸샺",
			5,
			"섁섂섃섅섆섇섉",
			6,
			"섑섒섓섔섖",
			5,
			"섡섢섥섨섩섪섫섮"
		],
		[
			"9941",
			"섲섳섴섵섷섺섻섽섾섿셁",
			6,
			"셊셎",
			5,
			"셖셗"
		],
		[
			"9961",
			"셙셚셛셝",
			6,
			"셦셪",
			5,
			"셱셲셳셵셶셷셹셺셻"
		],
		[
			"9981",
			"셼",
			8,
			"솆",
			5,
			"솏솑솒솓솕솗",
			4,
			"솞솠솢솣솤솦솧솪솫솭솮솯솱",
			11,
			"솾",
			5,
			"쇅쇆쇇쇉쇊쇋쇍",
			6,
			"쇕쇖쇙",
			6,
			"쇡쇢쇣쇥쇦쇧쇩",
			6,
			"쇲쇴",
			7,
			"쇾쇿숁숂숃숅",
			6,
			"숎숐숒",
			5,
			"숚숛숝숞숡숢숣"
		],
		[
			"9a41",
			"숤숥숦숧숪숬숮숰숳숵",
			16
		],
		[
			"9a61",
			"쉆쉇쉉",
			6,
			"쉒쉓쉕쉖쉗쉙",
			6,
			"쉡쉢쉣쉤쉦"
		],
		[
			"9a81",
			"쉧",
			4,
			"쉮쉯쉱쉲쉳쉵",
			6,
			"쉾슀슂",
			5,
			"슊",
			5,
			"슑",
			6,
			"슙슚슜슞",
			5,
			"슦슧슩슪슫슮",
			5,
			"슶슸슺",
			33,
			"싞싟싡싢싥",
			5,
			"싮싰싲싳싴싵싷싺싽싾싿쌁",
			6,
			"쌊쌋쌎쌏"
		],
		[
			"9b41",
			"쌐쌑쌒쌖쌗쌙쌚쌛쌝",
			6,
			"쌦쌧쌪",
			8
		],
		[
			"9b61",
			"쌳",
			17,
			"썆",
			7
		],
		[
			"9b81",
			"썎",
			25,
			"썪썫썭썮썯썱썳",
			4,
			"썺썻썾",
			5,
			"쎅쎆쎇쎉쎊쎋쎍",
			50,
			"쏁",
			22,
			"쏚"
		],
		[
			"9c41",
			"쏛쏝쏞쏡쏣",
			4,
			"쏪쏫쏬쏮",
			5,
			"쏶쏷쏹",
			5
		],
		[
			"9c61",
			"쏿",
			8,
			"쐉",
			6,
			"쐑",
			9
		],
		[
			"9c81",
			"쐛",
			8,
			"쐥",
			6,
			"쐭쐮쐯쐱쐲쐳쐵",
			6,
			"쐾",
			9,
			"쑉",
			26,
			"쑦쑧쑩쑪쑫쑭",
			6,
			"쑶쑷쑸쑺",
			5,
			"쒁",
			18,
			"쒕",
			6,
			"쒝",
			12
		],
		[
			"9d41",
			"쒪",
			13,
			"쒹쒺쒻쒽",
			8
		],
		[
			"9d61",
			"쓆",
			25
		],
		[
			"9d81",
			"쓠",
			8,
			"쓪",
			5,
			"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂",
			9,
			"씍씎씏씑씒씓씕",
			6,
			"씝",
			10,
			"씪씫씭씮씯씱",
			6,
			"씺씼씾",
			5,
			"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩",
			6,
			"앲앶",
			5,
			"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔"
		],
		[
			"9e41",
			"얖얙얚얛얝얞얟얡",
			7,
			"얪",
			9,
			"얶"
		],
		[
			"9e61",
			"얷얺얿",
			4,
			"엋엍엏엒엓엕엖엗엙",
			6,
			"엢엤엦엧"
		],
		[
			"9e81",
			"엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑",
			6,
			"옚옝",
			6,
			"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉",
			6,
			"왒왖",
			5,
			"왞왟왡",
			10,
			"왭왮왰왲",
			5,
			"왺왻왽왾왿욁",
			6,
			"욊욌욎",
			5,
			"욖욗욙욚욛욝",
			6,
			"욦"
		],
		[
			"9f41",
			"욨욪",
			5,
			"욲욳욵욶욷욻",
			4,
			"웂웄웆",
			5,
			"웎"
		],
		[
			"9f61",
			"웏웑웒웓웕",
			6,
			"웞웟웢",
			5,
			"웪웫웭웮웯웱웲"
		],
		[
			"9f81",
			"웳",
			4,
			"웺웻웼웾",
			5,
			"윆윇윉윊윋윍",
			6,
			"윖윘윚",
			5,
			"윢윣윥윦윧윩",
			6,
			"윲윴윶윸윹윺윻윾윿읁읂읃읅",
			4,
			"읋읎읐읙읚읛읝읞읟읡",
			6,
			"읩읪읬",
			7,
			"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛",
			4,
			"잢잧",
			4,
			"잮잯잱잲잳잵잶잷"
		],
		[
			"a041",
			"잸잹잺잻잾쟂",
			5,
			"쟊쟋쟍쟏쟑",
			6,
			"쟙쟚쟛쟜"
		],
		[
			"a061",
			"쟞",
			5,
			"쟥쟦쟧쟩쟪쟫쟭",
			13
		],
		[
			"a081",
			"쟻",
			4,
			"젂젃젅젆젇젉젋",
			4,
			"젒젔젗",
			4,
			"젞젟젡젢젣젥",
			6,
			"젮젰젲",
			5,
			"젹젺젻젽젾젿졁",
			6,
			"졊졋졎",
			5,
			"졕",
			26,
			"졲졳졵졶졷졹졻",
			4,
			"좂좄좈좉좊좎",
			5,
			"좕",
			7,
			"좞좠좢좣좤"
		],
		[
			"a141",
			"좥좦좧좩",
			18,
			"좾좿죀죁"
		],
		[
			"a161",
			"죂죃죅죆죇죉죊죋죍",
			6,
			"죖죘죚",
			5,
			"죢죣죥"
		],
		[
			"a181",
			"죦",
			14,
			"죶",
			5,
			"죾죿줁줂줃줇",
			4,
			"줎　、。·‥…¨〃­―∥＼∼‘’“”〔〕〈",
			9,
			"±×÷≠≤≥∞∴°′″℃Å￠￡￥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨￢"
		],
		[
			"a241",
			"줐줒",
			5,
			"줙",
			18
		],
		[
			"a261",
			"줭",
			6,
			"줵",
			18
		],
		[
			"a281",
			"쥈",
			7,
			"쥒쥓쥕쥖쥗쥙",
			6,
			"쥢쥤",
			7,
			"쥭쥮쥯⇒⇔∀∃´～ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®"
		],
		[
			"a341",
			"쥱쥲쥳쥵",
			6,
			"쥽",
			10,
			"즊즋즍즎즏"
		],
		[
			"a361",
			"즑",
			6,
			"즚즜즞",
			16
		],
		[
			"a381",
			"즯",
			16,
			"짂짃짅짆짉짋",
			4,
			"짒짔짗짘짛！",
			58,
			"￦］",
			32,
			"￣"
		],
		[
			"a441",
			"짞짟짡짣짥짦짨짩짪짫짮짲",
			5,
			"짺짻짽짾짿쨁쨂쨃쨄"
		],
		[
			"a461",
			"쨅쨆쨇쨊쨎",
			5,
			"쨕쨖쨗쨙",
			12
		],
		[
			"a481",
			"쨦쨧쨨쨪",
			28,
			"ㄱ",
			93
		],
		[
			"a541",
			"쩇",
			4,
			"쩎쩏쩑쩒쩓쩕",
			6,
			"쩞쩢",
			5,
			"쩩쩪"
		],
		[
			"a561",
			"쩫",
			17,
			"쩾",
			5,
			"쪅쪆"
		],
		[
			"a581",
			"쪇",
			16,
			"쪙",
			14,
			"ⅰ",
			9
		],
		[
			"a5b0",
			"Ⅰ",
			9
		],
		[
			"a5c1",
			"Α",
			16,
			"Σ",
			6
		],
		[
			"a5e1",
			"α",
			16,
			"σ",
			6
		],
		[
			"a641",
			"쪨",
			19,
			"쪾쪿쫁쫂쫃쫅"
		],
		[
			"a661",
			"쫆",
			5,
			"쫎쫐쫒쫔쫕쫖쫗쫚",
			5,
			"쫡",
			6
		],
		[
			"a681",
			"쫨쫩쫪쫫쫭",
			6,
			"쫵",
			18,
			"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃",
			7
		],
		[
			"a741",
			"쬋",
			4,
			"쬑쬒쬓쬕쬖쬗쬙",
			6,
			"쬢",
			7
		],
		[
			"a761",
			"쬪",
			22,
			"쭂쭃쭄"
		],
		[
			"a781",
			"쭅쭆쭇쭊쭋쭍쭎쭏쭑",
			6,
			"쭚쭛쭜쭞",
			5,
			"쭥",
			7,
			"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙",
			9,
			"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰",
			9,
			"㎀",
			4,
			"㎺",
			5,
			"㎐",
			4,
			"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆"
		],
		[
			"a841",
			"쭭",
			10,
			"쭺",
			14
		],
		[
			"a861",
			"쮉",
			18,
			"쮝",
			6
		],
		[
			"a881",
			"쮤",
			19,
			"쮹",
			11,
			"ÆÐªĦ"
		],
		["a8a6", "Ĳ"],
		["a8a8", "ĿŁØŒºÞŦŊ"],
		[
			"a8b1",
			"㉠",
			27,
			"ⓐ",
			25,
			"①",
			14,
			"½⅓⅔¼¾⅛⅜⅝⅞"
		],
		[
			"a941",
			"쯅",
			14,
			"쯕",
			10
		],
		[
			"a961",
			"쯠쯡쯢쯣쯥쯦쯨쯪",
			18
		],
		[
			"a981",
			"쯽",
			14,
			"찎찏찑찒찓찕",
			6,
			"찞찟찠찣찤æđðħıĳĸŀłøœßþŧŋŉ㈀",
			27,
			"⒜",
			25,
			"⑴",
			14,
			"¹²³⁴ⁿ₁₂₃₄"
		],
		[
			"aa41",
			"찥찦찪찫찭찯찱",
			6,
			"찺찿",
			4,
			"챆챇챉챊챋챍챎"
		],
		[
			"aa61",
			"챏",
			4,
			"챖챚",
			5,
			"챡챢챣챥챧챩",
			6,
			"챱챲"
		],
		[
			"aa81",
			"챳챴챶",
			29,
			"ぁ",
			82
		],
		[
			"ab41",
			"첔첕첖첗첚첛첝첞첟첡",
			6,
			"첪첮",
			5,
			"첶첷첹"
		],
		[
			"ab61",
			"첺첻첽",
			6,
			"쳆쳈쳊",
			5,
			"쳑쳒쳓쳕",
			5
		],
		[
			"ab81",
			"쳛",
			8,
			"쳥",
			6,
			"쳭쳮쳯쳱",
			12,
			"ァ",
			85
		],
		[
			"ac41",
			"쳾쳿촀촂",
			5,
			"촊촋촍촎촏촑",
			6,
			"촚촜촞촟촠"
		],
		[
			"ac61",
			"촡촢촣촥촦촧촩촪촫촭",
			11,
			"촺",
			4
		],
		[
			"ac81",
			"촿",
			28,
			"쵝쵞쵟А",
			5,
			"ЁЖ",
			25
		],
		[
			"acd1",
			"а",
			5,
			"ёж",
			25
		],
		[
			"ad41",
			"쵡쵢쵣쵥",
			6,
			"쵮쵰쵲",
			5,
			"쵹",
			7
		],
		[
			"ad61",
			"춁",
			6,
			"춉",
			10,
			"춖춗춙춚춛춝춞춟"
		],
		[
			"ad81",
			"춠춡춢춣춦춨춪",
			5,
			"춱",
			18,
			"췅"
		],
		[
			"ae41",
			"췆",
			5,
			"췍췎췏췑",
			16
		],
		[
			"ae61",
			"췢",
			5,
			"췩췪췫췭췮췯췱",
			6,
			"췺췼췾",
			4
		],
		[
			"ae81",
			"츃츅츆츇츉츊츋츍",
			6,
			"츕츖츗츘츚",
			5,
			"츢츣츥츦츧츩츪츫"
		],
		[
			"af41",
			"츬츭츮츯츲츴츶",
			19
		],
		[
			"af61",
			"칊",
			13,
			"칚칛칝칞칢",
			5,
			"칪칬"
		],
		[
			"af81",
			"칮",
			5,
			"칶칷칹칺칻칽",
			6,
			"캆캈캊",
			5,
			"캒캓캕캖캗캙"
		],
		[
			"b041",
			"캚",
			5,
			"캢캦",
			5,
			"캮",
			12
		],
		[
			"b061",
			"캻",
			5,
			"컂",
			19
		],
		[
			"b081",
			"컖",
			13,
			"컦컧컩컪컭",
			6,
			"컶컺",
			5,
			"가각간갇갈갉갊감",
			7,
			"같",
			4,
			"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"
		],
		[
			"b141",
			"켂켃켅켆켇켉",
			6,
			"켒켔켖",
			5,
			"켝켞켟켡켢켣"
		],
		[
			"b161",
			"켥",
			6,
			"켮켲",
			5,
			"켹",
			11
		],
		[
			"b181",
			"콅",
			14,
			"콖콗콙콚콛콝",
			6,
			"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸"
		],
		[
			"b241",
			"콭콮콯콲콳콵콶콷콹",
			6,
			"쾁쾂쾃쾄쾆",
			5,
			"쾍"
		],
		[
			"b261",
			"쾎",
			18,
			"쾢",
			5,
			"쾩"
		],
		[
			"b281",
			"쾪",
			5,
			"쾱",
			18,
			"쿅",
			6,
			"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙"
		],
		[
			"b341",
			"쿌",
			19,
			"쿢쿣쿥쿦쿧쿩"
		],
		[
			"b361",
			"쿪",
			5,
			"쿲쿴쿶",
			5,
			"쿽쿾쿿퀁퀂퀃퀅",
			5
		],
		[
			"b381",
			"퀋",
			5,
			"퀒",
			5,
			"퀙",
			19,
			"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫",
			4,
			"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝"
		],
		[
			"b441",
			"퀮",
			5,
			"퀶퀷퀹퀺퀻퀽",
			6,
			"큆큈큊",
			5
		],
		[
			"b461",
			"큑큒큓큕큖큗큙",
			6,
			"큡",
			10,
			"큮큯"
		],
		[
			"b481",
			"큱큲큳큵",
			6,
			"큾큿킀킂",
			18,
			"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫",
			4,
			"닳담답닷",
			4,
			"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥"
		],
		[
			"b541",
			"킕",
			14,
			"킦킧킩킪킫킭",
			5
		],
		[
			"b561",
			"킳킶킸킺",
			5,
			"탂탃탅탆탇탊",
			5,
			"탒탖",
			4
		],
		[
			"b581",
			"탛탞탟탡탢탣탥",
			6,
			"탮탲",
			5,
			"탹",
			11,
			"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"
		],
		[
			"b641",
			"턅",
			7,
			"턎",
			17
		],
		[
			"b661",
			"턠",
			15,
			"턲턳턵턶턷턹턻턼턽턾"
		],
		[
			"b681",
			"턿텂텆",
			5,
			"텎텏텑텒텓텕",
			6,
			"텞텠텢",
			5,
			"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗"
		],
		[
			"b741",
			"텮",
			13,
			"텽",
			6,
			"톅톆톇톉톊"
		],
		[
			"b761",
			"톋",
			20,
			"톢톣톥톦톧"
		],
		[
			"b781",
			"톩",
			6,
			"톲톴톶톷톸톹톻톽톾톿퇁",
			14,
			"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩"
		],
		[
			"b841",
			"퇐",
			7,
			"퇙",
			17
		],
		[
			"b861",
			"퇫",
			8,
			"퇵퇶퇷퇹",
			13
		],
		[
			"b881",
			"툈툊",
			5,
			"툑",
			24,
			"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많",
			4,
			"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"
		],
		[
			"b941",
			"툪툫툮툯툱툲툳툵",
			6,
			"툾퉀퉂",
			5,
			"퉉퉊퉋퉌"
		],
		[
			"b961",
			"퉍",
			14,
			"퉝",
			6,
			"퉥퉦퉧퉨"
		],
		[
			"b981",
			"퉩",
			22,
			"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바",
			4,
			"받",
			4,
			"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗"
		],
		[
			"ba41",
			"튍튎튏튒튓튔튖",
			5,
			"튝튞튟튡튢튣튥",
			6,
			"튭"
		],
		[
			"ba61",
			"튮튯튰튲",
			5,
			"튺튻튽튾틁틃",
			4,
			"틊틌",
			5
		],
		[
			"ba81",
			"틒틓틕틖틗틙틚틛틝",
			6,
			"틦",
			9,
			"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤"
		],
		[
			"bb41",
			"틻",
			4,
			"팂팄팆",
			5,
			"팏팑팒팓팕팗",
			4,
			"팞팢팣"
		],
		[
			"bb61",
			"팤팦팧팪팫팭팮팯팱",
			6,
			"팺팾",
			5,
			"퍆퍇퍈퍉"
		],
		[
			"bb81",
			"퍊",
			31,
			"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤"
		],
		[
			"bc41",
			"퍪",
			17,
			"퍾퍿펁펂펃펅펆펇"
		],
		[
			"bc61",
			"펈펉펊펋펎펒",
			5,
			"펚펛펝펞펟펡",
			6,
			"펪펬펮"
		],
		[
			"bc81",
			"펯",
			4,
			"펵펶펷펹펺펻펽",
			6,
			"폆폇폊",
			5,
			"폑",
			5,
			"샥샨샬샴샵샷샹섀섄섈섐섕서",
			4,
			"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭"
		],
		[
			"bd41",
			"폗폙",
			7,
			"폢폤",
			7,
			"폮폯폱폲폳폵폶폷"
		],
		[
			"bd61",
			"폸폹폺폻폾퐀퐂",
			5,
			"퐉",
			13
		],
		[
			"bd81",
			"퐗",
			5,
			"퐞",
			25,
			"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰"
		],
		[
			"be41",
			"퐸",
			7,
			"푁푂푃푅",
			14
		],
		[
			"be61",
			"푔",
			7,
			"푝푞푟푡푢푣푥",
			7,
			"푮푰푱푲"
		],
		[
			"be81",
			"푳",
			4,
			"푺푻푽푾풁풃",
			4,
			"풊풌풎",
			5,
			"풕",
			8,
			"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄",
			6,
			"엌엎"
		],
		[
			"bf41",
			"풞",
			10,
			"풪",
			14
		],
		[
			"bf61",
			"풹",
			18,
			"퓍퓎퓏퓑퓒퓓퓕"
		],
		[
			"bf81",
			"퓖",
			5,
			"퓝퓞퓠",
			7,
			"퓩퓪퓫퓭퓮퓯퓱",
			6,
			"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염",
			5,
			"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨"
		],
		[
			"c041",
			"퓾",
			5,
			"픅픆픇픉픊픋픍",
			6,
			"픖픘",
			5
		],
		[
			"c061",
			"픞",
			25
		],
		[
			"c081",
			"픸픹픺픻픾픿핁핂핃핅",
			6,
			"핎핐핒",
			5,
			"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응",
			7,
			"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊"
		],
		[
			"c141",
			"핤핦핧핪핬핮",
			5,
			"핶핷핹핺핻핽",
			6,
			"햆햊햋"
		],
		[
			"c161",
			"햌햍햎햏햑",
			19,
			"햦햧"
		],
		[
			"c181",
			"햨",
			31,
			"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓"
		],
		[
			"c241",
			"헊헋헍헎헏헑헓",
			4,
			"헚헜헞",
			5,
			"헦헧헩헪헫헭헮"
		],
		[
			"c261",
			"헯",
			4,
			"헶헸헺",
			5,
			"혂혃혅혆혇혉",
			6,
			"혒"
		],
		[
			"c281",
			"혖",
			5,
			"혝혞혟혡혢혣혥",
			7,
			"혮",
			9,
			"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻"
		],
		[
			"c341",
			"혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝",
			4
		],
		[
			"c361",
			"홢",
			4,
			"홨홪",
			5,
			"홲홳홵",
			11
		],
		[
			"c381",
			"횁횂횄횆",
			5,
			"횎횏횑횒횓횕",
			7,
			"횞횠횢",
			5,
			"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층"
		],
		[
			"c441",
			"횫횭횮횯횱",
			7,
			"횺횼",
			7,
			"훆훇훉훊훋"
		],
		[
			"c461",
			"훍훎훏훐훒훓훕훖훘훚",
			5,
			"훡훢훣훥훦훧훩",
			4
		],
		[
			"c481",
			"훮훯훱훲훳훴훶",
			5,
			"훾훿휁휂휃휅",
			11,
			"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"
		],
		[
			"c541",
			"휕휖휗휚휛휝휞휟휡",
			6,
			"휪휬휮",
			5,
			"휶휷휹"
		],
		[
			"c561",
			"휺휻휽",
			6,
			"흅흆흈흊",
			5,
			"흒흓흕흚",
			4
		],
		[
			"c581",
			"흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵",
			6,
			"흾흿힀힂",
			5,
			"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜"
		],
		[
			"c641",
			"힍힎힏힑",
			6,
			"힚힜힞",
			5
		],
		["c6a1", "퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁"],
		["c7a1", "퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠"],
		["c8a1", "혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"],
		["caa1", "伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕"],
		["cba1", "匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢"],
		["cca1", "瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械"],
		["cda1", "棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜"],
		["cea1", "科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾"],
		["cfa1", "區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴"],
		["d0a1", "鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣"],
		[
			"d1a1",
			"朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩",
			5,
			"那樂",
			4,
			"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉"
		],
		[
			"d2a1",
			"納臘蠟衲囊娘廊",
			4,
			"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧",
			5,
			"駑魯",
			10,
			"濃籠聾膿農惱牢磊腦賂雷尿壘",
			7,
			"嫩訥杻紐勒",
			5,
			"能菱陵尼泥匿溺多茶"
		],
		["d3a1", "丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃"],
		["d4a1", "棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅"],
		["d5a1", "蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣"],
		["d6a1", "煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼"],
		["d7a1", "遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬"],
		["d8a1", "立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅"],
		["d9a1", "蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文"],
		["daa1", "汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑"],
		["dba1", "發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖"],
		["dca1", "碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦"],
		["dda1", "孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥"],
		["dea1", "脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索"],
		["dfa1", "傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署"],
		["e0a1", "胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬"],
		["e1a1", "聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁"],
		["e2a1", "戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧"],
		["e3a1", "嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁"],
		["e4a1", "沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額"],
		["e5a1", "櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬"],
		["e6a1", "旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒"],
		["e7a1", "簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳"],
		["e8a1", "烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療"],
		["e9a1", "窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓"],
		["eaa1", "運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜"],
		["eba1", "濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼"],
		["eca1", "議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄"],
		["eda1", "立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長"],
		["eea1", "障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱"],
		["efa1", "煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖"],
		["f0a1", "靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫"],
		["f1a1", "踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只"],
		["f2a1", "咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯"],
		["f3a1", "鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策"],
		["f4a1", "責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢"],
		["f5a1", "椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃"],
		["f6a1", "贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託"],
		["f7a1", "鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑"],
		["f8a1", "阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃"],
		["f9a1", "品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航"],
		["faa1", "行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型"],
		["fba1", "形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵"],
		["fca1", "禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆"],
		["fda1", "爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"]
	];
}));
//#endregion
//#region node_modules/iconv-lite/encodings/tables/cp950.json
var require_cp950 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		[
			"0",
			"\0",
			127
		],
		["a140", "　，、。．‧；：？！︰…‥﹐﹑﹒·﹔﹕﹖﹗｜–︱—︳╴︴﹏（）︵︶｛｝︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚"],
		[
			"a1a1",
			"﹛﹜﹝﹞‘’“”〝〞‵′＃＆＊※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯￣＿ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡＋－×÷±√＜＞＝≦≧≠∞≒≡﹢",
			4,
			"～∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣／"
		],
		[
			"a240",
			"＼∕﹨＄￥〒￠￡％＠℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁",
			7,
			"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭"
		],
		[
			"a2a1",
			"╮╰╯═╞╪╡◢◣◥◤╱╲╳０",
			9,
			"Ⅰ",
			9,
			"〡",
			8,
			"十卄卅Ａ",
			25,
			"ａ",
			21
		],
		[
			"a340",
			"ｗｘｙｚΑ",
			16,
			"Σ",
			6,
			"α",
			16,
			"σ",
			6,
			"ㄅ",
			10
		],
		[
			"a3a1",
			"ㄐ",
			25,
			"˙ˉˊˇˋ"
		],
		["a3e1", "€"],
		["a440", "一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才"],
		["a4a1", "丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙"],
		["a540", "世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外"],
		["a5a1", "央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全"],
		["a640", "共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年"],
		["a6a1", "式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣"],
		["a740", "作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍"],
		["a7a1", "均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠"],
		["a840", "杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒"],
		["a8a1", "芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵"],
		["a940", "咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"],
		["a9a1", "屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊"],
		["aa40", "昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠"],
		["aaa1", "炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附"],
		["ab40", "陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品"],
		["aba1", "哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷"],
		["ac40", "拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗"],
		["aca1", "活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄"],
		["ad40", "耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥"],
		["ada1", "迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪"],
		["ae40", "哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙"],
		["aea1", "恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓"],
		["af40", "浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷"],
		["afa1", "砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃"],
		["b040", "虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡"],
		["b0a1", "陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀"],
		["b140", "娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽"],
		["b1a1", "情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺"],
		["b240", "毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶"],
		["b2a1", "瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼"],
		["b340", "莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途"],
		["b3a1", "部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠"],
		["b440", "婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍"],
		["b4a1", "插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋"],
		["b540", "溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘"],
		["b5a1", "窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁"],
		["b640", "詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑"],
		["b6a1", "間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼"],
		["b740", "媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業"],
		["b7a1", "楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督"],
		["b840", "睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫"],
		["b8a1", "腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"],
		["b940", "辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴"],
		["b9a1", "飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇"],
		["ba40", "愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢"],
		["baa1", "滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"],
		["bb40", "罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤"],
		["bba1", "說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"],
		["bc40", "劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂"],
		["bca1", "慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃"],
		["bd40", "瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯"],
		["bda1", "翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞"],
		["be40", "輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"],
		["bea1", "鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"],
		["bf40", "濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊"],
		["bfa1", "縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚"],
		["c040", "錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇"],
		["c0a1", "嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬"],
		["c140", "瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪"],
		["c1a1", "薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁"],
		["c240", "駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘"],
		["c2a1", "癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦"],
		["c340", "鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸"],
		["c3a1", "獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類"],
		["c440", "願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼"],
		["c4a1", "纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴"],
		["c540", "護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬"],
		["c5a1", "禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒"],
		["c640", "讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"],
		["c940", "乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕"],
		["c9a1", "氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋"],
		["ca40", "汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘"],
		["caa1", "吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇"],
		["cb40", "杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓"],
		["cba1", "芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢"],
		["cc40", "坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"],
		["cca1", "怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲"],
		["cd40", "泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"],
		["cda1", "矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏"],
		["ce40", "哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛"],
		["cea1", "峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺"],
		["cf40", "柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂"],
		["cfa1", "洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀"],
		["d040", "穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"],
		["d0a1", "苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱"],
		["d140", "唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧"],
		["d1a1", "恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤"],
		["d240", "毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸"],
		["d2a1", "牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐"],
		["d340", "笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢"],
		["d3a1", "荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐"],
		["d440", "酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅"],
		["d4a1", "唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏"],
		["d540", "崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟"],
		["d5a1", "捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉"],
		["d640", "淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏"],
		["d6a1", "痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟"],
		["d740", "耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷"],
		["d7a1", "蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"],
		["d840", "釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷"],
		["d8a1", "堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔"],
		["d940", "惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒"],
		["d9a1", "晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞"],
		["da40", "湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖"],
		["daa1", "琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥"],
		["db40", "罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳"],
		["dba1", "菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺"],
		["dc40", "軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈"],
		["dca1", "隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆"],
		["dd40", "媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤"],
		["dda1", "搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼"],
		["de40", "毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓"],
		["dea1", "煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"],
		["df40", "稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"],
		["dfa1", "腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤"],
		["e040", "觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿"],
		["e0a1", "遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠"],
		["e140", "凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠"],
		["e1a1", "寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉"],
		["e240", "榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"],
		["e2a1", "漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓"],
		["e340", "禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"],
		["e3a1", "耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"],
		["e440", "裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍"],
		["e4a1", "銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘"],
		["e540", "噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉"],
		["e5a1", "憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒"],
		["e640", "澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙"],
		["e6a1", "獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟"],
		["e740", "膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"],
		["e7a1", "蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧"],
		["e840", "踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓"],
		["e8a1", "銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮"],
		["e940", "噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺"],
		["e9a1", "憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸"],
		["ea40", "澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙"],
		["eaa1", "瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘"],
		["eb40", "蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"],
		["eba1", "諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌"],
		["ec40", "錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕"],
		["eca1", "魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎"],
		["ed40", "檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"],
		["eda1", "瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞"],
		["ee40", "蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞"],
		["eea1", "謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜"],
		["ef40", "鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰"],
		["efa1", "鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶"],
		["f040", "璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒"],
		["f0a1", "臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"],
		["f140", "蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪"],
		["f1a1", "鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰"],
		["f240", "徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛"],
		["f2a1", "礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕"],
		["f340", "譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦"],
		["f3a1", "鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲"],
		["f440", "嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩"],
		["f4a1", "禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿"],
		["f540", "鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛"],
		["f5a1", "鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥"],
		["f640", "蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺"],
		["f6a1", "騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚"],
		["f740", "糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊"],
		["f7a1", "驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"],
		["f840", "讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏"],
		["f8a1", "齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚"],
		["f940", "纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊"],
		["f9a1", "龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"]
	];
}));
//#endregion
//#region node_modules/iconv-lite/encodings/tables/big5-added.json
var require_big5_added = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = [
		["8740", "䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻"],
		["8767", "綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬"],
		["87a1", "𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋"],
		[
			"8840",
			"㇀",
			4,
			"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ"
		],
		["88a1", "ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛"],
		["8940", "𪎩𡅅"],
		["8943", "攊"],
		["8946", "丽滝鵎釟"],
		["894c", "𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮"],
		["89a1", "琑糼緍楆竉刧"],
		["89ab", "醌碸酞肼"],
		["89b0", "贋胶𠧧"],
		["89b5", "肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁"],
		["89c1", "溚舾甙"],
		["89c5", "䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅"],
		["8a40", "𧶄唥"],
		["8a43", "𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓"],
		["8a64", "𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"],
		["8a76", "䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯"],
		["8aa1", "𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱"],
		["8aac", "䠋𠆩㿺塳𢶍"],
		["8ab2", "𤗈𠓼𦂗𠽌𠶖啹䂻䎺"],
		["8abb", "䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃"],
		["8ac9", "𪘁𠸉𢫏𢳉"],
		["8ace", "𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"],
		["8adf", "𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌"],
		["8af6", "𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭"],
		["8b40", "𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹"],
		["8b55", "𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑"],
		["8ba1", "𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁"],
		["8bde", "𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢"],
		["8c40", "倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋"],
		["8ca1", "𣏹椙橃𣱣泿"],
		["8ca7", "爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚"],
		["8cc9", "顨杫䉶圽"],
		["8cce", "藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"],
		["8ce6", "峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻"],
		["8d40", "𠮟"],
		["8d42", "𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱"],
		["8da1", "㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘"],
		["8e40", "𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎"],
		["8ea1", "繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛"],
		["8f40", "蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"],
		["8fa1", "𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起"],
		["9040", "趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛"],
		["90a1", "𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜"],
		["9140", "𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"],
		["91a1", "鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨"],
		["9240", "𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘"],
		["92a1", "働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"],
		["9340", "媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍"],
		["93a1", "摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"],
		["9440", "銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"],
		["94a1", "㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡"],
		["9540", "𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂"],
		["95a1", "衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰"],
		["9640", "桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸"],
		["96a1", "𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"],
		["9740", "愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫"],
		["97a1", "𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎"],
		["9840", "𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦"],
		["98a1", "咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃"],
		["9940", "䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚"],
		["99a1", "䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿"],
		["9a40", "鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺"],
		["9aa1", "黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪"],
		["9b40", "𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"],
		["9b62", "𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎"],
		["9ba1", "椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊"],
		["9c40", "嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶"],
		["9ca1", "㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏"],
		["9d40", "𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁"],
		["9da1", "辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢"],
		["9e40", "𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺"],
		["9ea1", "鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭"],
		["9ead", "𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹"],
		["9ec5", "㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲"],
		["9ef5", "噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼"],
		["9f40", "籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱"],
		["9f4f", "凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰"],
		["9fa1", "椬叚鰊鴂䰻陁榀傦畆𡝭駚剳"],
		["9fae", "酙隁酜"],
		["9fb2", "酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽"],
		["9fc1", "𤤙盖鮝个𠳔莾衂"],
		["9fc9", "届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳"],
		["9fdb", "歒酼龥鮗頮颴骺麨麄煺笔"],
		["9fe7", "毺蠘罸"],
		["9feb", "嘠𪙊蹷齓"],
		["9ff0", "跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇"],
		["a040", "𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷"],
		["a055", "𡠻𦸅"],
		["a058", "詾𢔛"],
		["a05b", "惽癧髗鵄鍮鮏蟵"],
		["a063", "蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽"],
		["a073", "坟慯抦戹拎㩜懢厪𣏵捤栂㗒"],
		["a0a1", "嵗𨯂迚𨸹"],
		["a0a6", "僙𡵆礆匲阸𠼻䁥"],
		["a0ae", "矾"],
		["a0b0", "糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"],
		["a0d4", "覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷"],
		["a0e2", "罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫"],
		[
			"a3c0",
			"␀",
			31,
			"␡"
		],
		[
			"c6a1",
			"①",
			9,
			"⑴",
			9,
			"ⅰ",
			9,
			"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー［］✽ぁ",
			23
		],
		[
			"c740",
			"す",
			58,
			"ァアィイ"
		],
		[
			"c7a1",
			"ゥ",
			81,
			"А",
			5,
			"ЁЖ",
			4
		],
		[
			"c840",
			"Л",
			26,
			"ёж",
			25,
			"⇧↸↹㇏𠃌乚𠂊刂䒑"
		],
		["c8a1", "龰冈龱𧘇"],
		["c8cd", "￢￤＇＂㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣"],
		["c8f5", "ʃɐɛɔɵœøŋʊɪ"],
		["f9fe", "￭"],
		["fa40", "𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸"],
		["faa1", "鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍"],
		["fb40", "𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙"],
		["fba1", "𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂"],
		["fc40", "廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷"],
		["fca1", "𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝"],
		["fd40", "𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"],
		["fda1", "𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎"],
		["fe40", "鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌"],
		["fea1", "𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"]
	];
}));
//#endregion
//#region node_modules/iconv-lite/encodings/dbcs-data.js
var require_dbcs_data = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = {
		shiftjis: {
			type: "_dbcs",
			table: function() {
				return require_shiftjis();
			},
			encodeAdd: {
				"¥": 92,
				"‾": 126
			},
			encodeSkipVals: [{
				from: 60736,
				to: 63808
			}]
		},
		csshiftjis: "shiftjis",
		mskanji: "shiftjis",
		sjis: "shiftjis",
		windows31j: "shiftjis",
		ms31j: "shiftjis",
		xsjis: "shiftjis",
		windows932: "shiftjis",
		ms932: "shiftjis",
		932: "shiftjis",
		cp932: "shiftjis",
		eucjp: {
			type: "_dbcs",
			table: function() {
				return require_eucjp();
			},
			encodeAdd: {
				"¥": 92,
				"‾": 126
			}
		},
		gb2312: "cp936",
		gb231280: "cp936",
		gb23121980: "cp936",
		csgb2312: "cp936",
		csiso58gb231280: "cp936",
		euccn: "cp936",
		windows936: "cp936",
		ms936: "cp936",
		936: "cp936",
		cp936: {
			type: "_dbcs",
			table: function() {
				return require_cp936();
			}
		},
		gbk: {
			type: "_dbcs",
			table: function() {
				return require_cp936().concat(require_gbk_added());
			}
		},
		xgbk: "gbk",
		isoir58: "gbk",
		gb18030: {
			type: "_dbcs",
			table: function() {
				return require_cp936().concat(require_gbk_added());
			},
			gb18030: function() {
				return require_gb18030_ranges();
			},
			encodeSkipVals: [128],
			encodeAdd: { "€": 41699 }
		},
		chinese: "gb18030",
		windows949: "cp949",
		ms949: "cp949",
		949: "cp949",
		cp949: {
			type: "_dbcs",
			table: function() {
				return require_cp949();
			}
		},
		cseuckr: "cp949",
		csksc56011987: "cp949",
		euckr: "cp949",
		isoir149: "cp949",
		korean: "cp949",
		ksc56011987: "cp949",
		ksc56011989: "cp949",
		ksc5601: "cp949",
		windows950: "cp950",
		ms950: "cp950",
		950: "cp950",
		cp950: {
			type: "_dbcs",
			table: function() {
				return require_cp950();
			}
		},
		big5: "big5hkscs",
		big5hkscs: {
			type: "_dbcs",
			table: function() {
				return require_cp950().concat(require_big5_added());
			},
			encodeSkipVals: [
				36457,
				36463,
				36478,
				36523,
				36532,
				36557,
				36560,
				36695,
				36713,
				36718,
				36811,
				36862,
				36973,
				36986,
				37060,
				37084,
				37105,
				37311,
				37551,
				37552,
				37553,
				37554,
				37585,
				37959,
				38090,
				38361,
				38652,
				39285,
				39798,
				39800,
				39803,
				39878,
				39902,
				39916,
				39926,
				40002,
				40019,
				40034,
				40040,
				40043,
				40055,
				40124,
				40125,
				40144,
				40279,
				40282,
				40388,
				40431,
				40443,
				40617,
				40687,
				40701,
				40800,
				40907,
				41079,
				41180,
				41183,
				36812,
				37576,
				38468,
				38637,
				41636,
				41637,
				41639,
				41638,
				41676,
				41678
			]
		},
		cnbig5: "big5hkscs",
		csbig5: "big5hkscs",
		xxbig5: "big5hkscs"
	};
}));
//#endregion
//#region node_modules/iconv-lite/encodings/index.js
var require_encodings = /* @__PURE__ */ __commonJSMin(((exports) => {
	var mergeModules = require_merge_exports();
	var modules = [
		require_internal(),
		require_utf32(),
		require_utf16(),
		require_utf7(),
		require_sbcs_codec(),
		require_sbcs_data(),
		require_sbcs_data_generated(),
		require_dbcs_codec(),
		require_dbcs_data()
	];
	for (var i = 0; i < modules.length; i++) {
		var module = modules[i];
		mergeModules(exports, module);
	}
}));
//#endregion
//#region node_modules/iconv-lite/lib/streams.js
var require_streams = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var Buffer = require_safer().Buffer;
	module.exports = function(streamModule) {
		var Transform = streamModule.Transform;
		function IconvLiteEncoderStream(conv, options) {
			this.conv = conv;
			options = options || {};
			options.decodeStrings = false;
			Transform.call(this, options);
		}
		IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { constructor: { value: IconvLiteEncoderStream } });
		IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {
			if (typeof chunk !== "string") return done(/* @__PURE__ */ new Error("Iconv encoding stream needs strings as its input."));
			try {
				var res = this.conv.write(chunk);
				if (res && res.length) this.push(res);
				done();
			} catch (e) {
				done(e);
			}
		};
		IconvLiteEncoderStream.prototype._flush = function(done) {
			try {
				var res = this.conv.end();
				if (res && res.length) this.push(res);
				done();
			} catch (e) {
				done(e);
			}
		};
		IconvLiteEncoderStream.prototype.collect = function(cb) {
			var chunks = [];
			this.on("error", cb);
			this.on("data", function(chunk) {
				chunks.push(chunk);
			});
			this.on("end", function() {
				cb(null, Buffer.concat(chunks));
			});
			return this;
		};
		function IconvLiteDecoderStream(conv, options) {
			this.conv = conv;
			options = options || {};
			options.encoding = this.encoding = "utf8";
			Transform.call(this, options);
		}
		IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { constructor: { value: IconvLiteDecoderStream } });
		IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {
			if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array)) return done(/* @__PURE__ */ new Error("Iconv decoding stream needs buffers as its input."));
			try {
				var res = this.conv.write(chunk);
				if (res && res.length) this.push(res, this.encoding);
				done();
			} catch (e) {
				done(e);
			}
		};
		IconvLiteDecoderStream.prototype._flush = function(done) {
			try {
				var res = this.conv.end();
				if (res && res.length) this.push(res, this.encoding);
				done();
			} catch (e) {
				done(e);
			}
		};
		IconvLiteDecoderStream.prototype.collect = function(cb) {
			var res = "";
			this.on("error", cb);
			this.on("data", function(chunk) {
				res += chunk;
			});
			this.on("end", function() {
				cb(null, res);
			});
			return this;
		};
		return {
			IconvLiteEncoderStream,
			IconvLiteDecoderStream
		};
	};
}));
//#endregion
//#region node_modules/iconv-lite/lib/index.js
var require_lib$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var Buffer = require_safer().Buffer;
	var bomHandling = require_bom_handling();
	var mergeModules = require_merge_exports();
	module.exports.encodings = null;
	module.exports.defaultCharUnicode = "�";
	module.exports.defaultCharSingleByte = "?";
	module.exports.encode = function encode(str, encoding, options) {
		str = "" + (str || "");
		var encoder = module.exports.getEncoder(encoding, options);
		var res = encoder.write(str);
		var trail = encoder.end();
		return trail && trail.length > 0 ? Buffer.concat([res, trail]) : res;
	};
	module.exports.decode = function decode(buf, encoding, options) {
		if (typeof buf === "string") {
			if (!module.exports.skipDecodeWarning) {
				console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding");
				module.exports.skipDecodeWarning = true;
			}
			buf = Buffer.from("" + (buf || ""), "binary");
		}
		var decoder = module.exports.getDecoder(encoding, options);
		var res = decoder.write(buf);
		var trail = decoder.end();
		return trail ? res + trail : res;
	};
	module.exports.encodingExists = function encodingExists(enc) {
		try {
			module.exports.getCodec(enc);
			return true;
		} catch (e) {
			return false;
		}
	};
	module.exports.toEncoding = module.exports.encode;
	module.exports.fromEncoding = module.exports.decode;
	module.exports._codecDataCache = { __proto__: null };
	module.exports.getCodec = function getCodec(encoding) {
		if (!module.exports.encodings) {
			var raw = require_encodings();
			module.exports.encodings = { __proto__: null };
			mergeModules(module.exports.encodings, raw);
		}
		var enc = module.exports._canonicalizeEncoding(encoding);
		var codecOptions = {};
		while (true) {
			var codec = module.exports._codecDataCache[enc];
			if (codec) return codec;
			var codecDef = module.exports.encodings[enc];
			switch (typeof codecDef) {
				case "string":
					enc = codecDef;
					break;
				case "object":
					for (var key in codecDef) codecOptions[key] = codecDef[key];
					if (!codecOptions.encodingName) codecOptions.encodingName = enc;
					enc = codecDef.type;
					break;
				case "function":
					if (!codecOptions.encodingName) codecOptions.encodingName = enc;
					codec = new codecDef(codecOptions, module.exports);
					module.exports._codecDataCache[codecOptions.encodingName] = codec;
					return codec;
				default: throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '" + enc + "')");
			}
		}
	};
	module.exports._canonicalizeEncoding = function(encoding) {
		return ("" + encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, "");
	};
	module.exports.getEncoder = function getEncoder(encoding, options) {
		var codec = module.exports.getCodec(encoding);
		var encoder = new codec.encoder(options, codec);
		if (codec.bomAware && options && options.addBOM) encoder = new bomHandling.PrependBOM(encoder, options);
		return encoder;
	};
	module.exports.getDecoder = function getDecoder(encoding, options) {
		var codec = module.exports.getCodec(encoding);
		var decoder = new codec.decoder(options, codec);
		if (codec.bomAware && !(options && options.stripBOM === false)) decoder = new bomHandling.StripBOM(decoder, options);
		return decoder;
	};
	module.exports.enableStreamingAPI = function enableStreamingAPI(streamModule) {
		if (module.exports.supportsStreams) return;
		var streams = require_streams()(streamModule);
		module.exports.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;
		module.exports.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;
		module.exports.encodeStream = function encodeStream(encoding, options) {
			return new module.exports.IconvLiteEncoderStream(module.exports.getEncoder(encoding, options), options);
		};
		module.exports.decodeStream = function decodeStream(encoding, options) {
			return new module.exports.IconvLiteDecoderStream(module.exports.getDecoder(encoding, options), options);
		};
		module.exports.supportsStreams = true;
	};
	var streamModule;
	try {
		streamModule = require("stream");
	} catch (e) {}
	if (streamModule && streamModule.Transform) module.exports.enableStreamingAPI(streamModule);
	else module.exports.encodeStream = module.exports.decodeStream = function() {
		throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.");
	};
}));
//#endregion
//#region src/util/lodash.ts
function omit$2(obj, properties) {
	let o = {};
	for (let key of Object.keys(obj)) if (!properties.includes(key)) o[key] = obj[key];
	return o;
}
var objectProto;
var init_lodash = __esmMin((() => {
	objectProto = Object.prototype;
	objectProto.hasOwnProperty;
}));
//#endregion
//#region src/util/processes.ts
function isRunning(pid) {
	try {
		return process.kill(pid, 0) == true;
	} catch (e) {
		return e["code"] === "EPERM";
	}
}
function executable(command) {
	try {
		which.sync(command);
	} catch (e) {
		return false;
	}
	return true;
}
function runCommand(cmd, opts = {}, timeout, isWindows = platform === 3) {
	if (!isWindows) opts.shell = opts.shell || process.env.SHELL;
	opts.maxBuffer = opts.maxBuffer ?? 500 * 1024;
	let encoding = opts.encoding || "utf8";
	encoding = import_lib.default.encodingExists(encoding) ? encoding : "utf8";
	return new Promise((resolve, reject) => {
		let disposable;
		let cp;
		if (typeof timeout === "number") {
			let timer = setTimeout(() => {
				terminate(cp);
				reject(new CancellationError());
			}, timeout * 1e3);
			disposable = import_main$1.Disposable.create(() => {
				clearTimeout(timer);
			});
		} else if (import_main$1.CancellationToken.is(timeout)) disposable = timeout.onCancellationRequested(() => {
			terminate(cp);
			reject(new CancellationError());
		});
		cp = child_process$1.exec(cmd, {
			...omit$2(opts, ["encoding"]),
			encoding: "buffer"
		}, (err, stdout, stderr) => {
			if (disposable) disposable.dispose();
			if (err) {
				reject(/* @__PURE__ */ new Error(`exited with ${err.code}\n${err}\n${stderr.toString("utf8")}`));
				return;
			}
			resolve(import_lib.default.decode(stdout, encoding));
		});
	});
}
function terminate(process, cwd, pt = platform) {
	if (process.killed) return;
	if (pt === 3) try {
		let options = { stdio: [
			"pipe",
			"pipe",
			"ignore"
		] };
		if (cwd) options.cwd = cwd;
		child_process$1.execFileSync("taskkill", [
			"/T",
			"/F",
			"/PID",
			process.pid.toString()
		], options);
		return true;
	} catch (err) {
		return false;
	}
	else if (pt === 2 || pt === 1) try {
		let filepath = path$5.join(pluginRoot, "bin/terminateProcess.sh");
		return child_process$1.spawnSync(filepath, [process.pid.toString()]).error ? false : true;
	} catch (err) {
		return false;
	}
	else {
		process.kill("SIGKILL");
		return true;
	}
}
var import_lib;
var init_processes = __esmMin((() => {
	init_constants();
	init_errors();
	init_node();
	init_platform();
	import_lib = /* @__PURE__ */ __toESM(require_lib$1());
	init_protocol();
	init_lodash();
}));
//#endregion
//#region src/model/resolver.ts
var Resolver;
var init_resolver = __esmMin((() => {
	init_node();
	init_fs();
	init_processes();
	Resolver = class {
		_npmFolder;
		_yarnFolder;
		get nodeFolder() {
			if (!executable("npm")) return Promise.resolve("");
			if (this._npmFolder) return Promise.resolve(this._npmFolder);
			return runCommand("npm --loglevel silent root -g", {}, 3e3).then((root) => {
				this._npmFolder = stripAnsi(root).trim();
				return this._npmFolder;
			});
		}
		get yarnFolder() {
			if (!executable("yarnpkg")) return Promise.resolve("");
			if (this._yarnFolder) return Promise.resolve(this._yarnFolder);
			return runCommand("yarnpkg global dir", {}, 3e3).then((root) => {
				let folder = path$5.join(stripAnsi(root).trim(), "node_modules");
				let exists = fs$6.existsSync(folder);
				if (exists) this._yarnFolder = folder;
				return exists ? folder : "";
			});
		}
		async resolveModule(mod) {
			let nodeFolder = await this.nodeFolder;
			let yarnFolder = await this.yarnFolder;
			if (yarnFolder) {
				let s = await statAsync(path$5.join(yarnFolder, mod, "package.json"));
				if (s && s.isFile()) return path$5.join(yarnFolder, mod);
			}
			if (nodeFolder) {
				let s = await statAsync(path$5.join(nodeFolder, mod, "package.json"));
				if (s && s.isFile()) return path$5.join(nodeFolder, mod);
			}
			return null;
		}
	};
}));
//#endregion
//#region src/core/funcs.ts
/**
* Like vim's has(), but for version check only.
* Check patch on neovim and check nvim on vim would return false.
*
* For example:
* - has('nvim-0.6.0')
* - has('patch-7.4.248')
*/
function has(env, feature) {
	if (!feature.startsWith("nvim-") && !feature.startsWith("patch-")) throw new Error("Feature param could only starts with nvim and patch");
	if (!env.isVim && feature.startsWith("patch-")) return false;
	if (env.isVim && feature.startsWith("nvim-")) return false;
	if (env.isVim) {
		let [_, major, minor, patch] = env.version.match(/^(\d)(\d{2})(\d+)$/);
		let version = `${major}.${parseInt(minor, 10)}.${parseInt(patch, 10)}`;
		return semver.gte(version, convertVersion(feature.slice(6)));
	}
	return semver.gte(env.version, feature.slice(5));
}
function convertVersion(version) {
	let parts = version.split(".");
	return `${parseInt(parts[0], 10)}.${parseInt(parts[1], 10)}.${parseInt(parts[2], 10)}`;
}
function callAsync(nvim, method, args) {
	return mutex.use(() => {
		if (!isVim) return nvim.call(method, args);
		return nvim.callAsync("coc#util#with_callback", [method, args]).catch(onUnexpectedError);
	});
}
/**
* @deprecated
*/
function createNameSpace(name) {
	if (namespaceMap.has(name)) return namespaceMap.get(name);
	NAME_SPACE$1 = NAME_SPACE$1 + 1;
	namespaceMap.set(name, NAME_SPACE$1);
	return NAME_SPACE$1;
}
/**
* Resolve watchman path.
*/
function getWatchmanPath(configurations) {
	const watchmanPath = configurations.initialConfiguration.get("coc.preferences.watchmanPath", "watchman");
	return which.sync(watchmanPath, { nothrow: true });
}
async function findUp(nvim, cwd, filename) {
	let filepath = await nvim.call("coc#util#get_fullpath");
	filepath = path$5.normalize(filepath);
	let isFile = filepath && path$5.isAbsolute(filepath);
	if (isFile && !isParentFolder(cwd, filepath, true)) return findUp$1(filename, path$5.dirname(filepath));
	let res = findUp$1(filename, cwd);
	if (res && res != os$5.homedir()) return res;
	if (isFile) return findUp$1(filename, path$5.dirname(filepath));
	return null;
}
function resolveModule(name) {
	return resolver.resolveModule(name);
}
function score$1(selector, uri, languageId, caseInsensitive = isWindows || isMacintosh) {
	let u = URI.parse(uri);
	if (Array.isArray(selector)) {
		let ret = 0;
		for (const filter of selector) {
			const value = score$1(filter, uri, languageId);
			if (value === 10) return value;
			if (value > ret) ret = value;
		}
		return ret;
	} else if (typeof selector === "string") if (selector === "*") return 5;
	else if (selector === languageId) return 10;
	else return 0;
	else if (selector && import_main$1.TextDocumentFilter.is(selector)) {
		const { language, pattern, scheme } = selector;
		let ret = 0;
		if (scheme) if (scheme === u.scheme) ret = 5;
		else if (scheme === "*") ret = 3;
		else return 0;
		if (language) if (language === languageId) ret = 10;
		else if (language === "*") ret = Math.max(ret, 5);
		else return 0;
		if (pattern) {
			let relativePattern;
			if (import_main$1.RelativePattern.is(pattern)) {
				relativePattern = pattern.pattern;
				let baseUri = URI.parse(typeof pattern.baseUri === "string" ? pattern.baseUri : pattern.baseUri.uri);
				if (u.scheme !== "file" || !isParentFolder(baseUri.fsPath, u.fsPath, true)) return 0;
			} else relativePattern = pattern;
			let p = caseInsensitive ? relativePattern.toLowerCase() : relativePattern;
			let f = caseInsensitive ? u.fsPath.toLowerCase() : u.fsPath;
			if (p === f || minimatch(f, p, { dot: true })) ret = Math.max(ret, 5);
			else return 0;
		}
		return ret;
	} else return 0;
}
var NAME_SPACE$1, resolver, namespaceMap, mutex;
var init_funcs = __esmMin((() => {
	init_esm();
	init_resolver();
	init_constants();
	init_errors();
	init_fs();
	init_mutex();
	init_node();
	init_platform();
	init_protocol();
	NAME_SPACE$1 = 2e3;
	resolver = new Resolver();
	namespaceMap = /* @__PURE__ */ new Map();
	mutex = new Mutex();
}));
//#endregion
//#region node_modules/marked/lib/marked.esm.js
/**
* marked v10.0.0 - a markdown parser
* Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)
* https://github.com/markedjs/marked
*/
/**
* DO NOT EDIT THIS FILE
* The code in this file is generated from files in ./src/
*/
/**
* Gets the original marked default options.
*/
function _getDefaults() {
	return {
		async: false,
		breaks: false,
		extensions: null,
		gfm: true,
		hooks: null,
		pedantic: false,
		renderer: null,
		silent: false,
		tokenizer: null,
		walkTokens: null
	};
}
function changeDefaults(newDefaults) {
	_defaults = newDefaults;
}
function escape(html, encode) {
	if (encode) {
		if (escapeTest.test(html)) return html.replace(escapeReplace, getEscapeReplacement);
	} else if (escapeTestNoEncode.test(html)) return html.replace(escapeReplaceNoEncode, getEscapeReplacement);
	return html;
}
function unescape$1(html) {
	return html.replace(unescapeTest, (_, n) => {
		n = n.toLowerCase();
		if (n === "colon") return ":";
		if (n.charAt(0) === "#") return n.charAt(1) === "x" ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));
		return "";
	});
}
function edit(regex, opt) {
	regex = typeof regex === "string" ? regex : regex.source;
	opt = opt || "";
	const obj = {
		replace: (name, val) => {
			val = typeof val === "object" && "source" in val ? val.source : val;
			val = val.replace(caret, "$1");
			regex = regex.replace(name, val);
			return obj;
		},
		getRegex: () => {
			return new RegExp(regex, opt);
		}
	};
	return obj;
}
function cleanUrl(href) {
	try {
		href = encodeURI(href).replace(/%25/g, "%");
	} catch (e) {
		return null;
	}
	return href;
}
function splitCells(tableRow, count) {
	const cells = tableRow.replace(/\|/g, (match, offset, str) => {
		let escaped = false;
		let curr = offset;
		while (--curr >= 0 && str[curr] === "\\") escaped = !escaped;
		if (escaped) return "|";
		else return " |";
	}).split(/ \|/);
	let i = 0;
	if (!cells[0].trim()) cells.shift();
	if (cells.length > 0 && !cells[cells.length - 1].trim()) cells.pop();
	if (count) if (cells.length > count) cells.splice(count);
	else while (cells.length < count) cells.push("");
	for (; i < cells.length; i++) cells[i] = cells[i].trim().replace(/\\\|/g, "|");
	return cells;
}
/**
* Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').
* /c*$/ is vulnerable to REDOS.
*
* @param str
* @param c
* @param invert Remove suffix of non-c chars instead. Default falsey.
*/
function rtrim(str, c, invert) {
	const l = str.length;
	if (l === 0) return "";
	let suffLen = 0;
	while (suffLen < l) {
		const currChar = str.charAt(l - suffLen - 1);
		if (currChar === c && !invert) suffLen++;
		else if (currChar !== c && invert) suffLen++;
		else break;
	}
	return str.slice(0, l - suffLen);
}
function findClosingBracket(str, b) {
	if (str.indexOf(b[1]) === -1) return -1;
	let level = 0;
	for (let i = 0; i < str.length; i++) if (str[i] === "\\") i++;
	else if (str[i] === b[0]) level++;
	else if (str[i] === b[1]) {
		level--;
		if (level < 0) return i;
	}
	return -1;
}
function outputLink(cap, link, raw, lexer) {
	const href = link.href;
	const title = link.title ? escape(link.title) : null;
	const text = cap[1].replace(/\\([\[\]])/g, "$1");
	if (cap[0].charAt(0) !== "!") {
		lexer.state.inLink = true;
		const token = {
			type: "link",
			raw,
			href,
			title,
			text,
			tokens: lexer.inlineTokens(text)
		};
		lexer.state.inLink = false;
		return token;
	}
	return {
		type: "image",
		raw,
		href,
		title,
		text: escape(text)
	};
}
function indentCodeCompensation(raw, text) {
	const matchIndentToCode = raw.match(/^(\s+)(?:```)/);
	if (matchIndentToCode === null) return text;
	const indentToCode = matchIndentToCode[1];
	return text.split("\n").map((node) => {
		const matchIndentInNode = node.match(/^\s+/);
		if (matchIndentInNode === null) return node;
		const [indentInNode] = matchIndentInNode;
		if (indentInNode.length >= indentToCode.length) return node.slice(indentToCode.length);
		return node;
	}).join("\n");
}
function marked(src, opt) {
	return markedInstance.parse(src, opt);
}
var _defaults, escapeTest, escapeReplace, escapeTestNoEncode, escapeReplaceNoEncode, escapeReplacements, getEscapeReplacement, unescapeTest, caret, noopTest, _Tokenizer, block, inline, _Lexer, _Renderer, _TextRenderer, _Parser, _Hooks, Marked, markedInstance;
var init_marked_esm = __esmMin((() => {
	_defaults = _getDefaults();
	escapeTest = /[&<>"']/;
	escapeReplace = new RegExp(escapeTest.source, "g");
	escapeTestNoEncode = /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/;
	escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, "g");
	escapeReplacements = {
		"&": "&amp;",
		"<": "&lt;",
		">": "&gt;",
		"\"": "&quot;",
		"'": "&#39;"
	};
	getEscapeReplacement = (ch) => escapeReplacements[ch];
	unescapeTest = /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;
	caret = /(^|[^\[])\^/g;
	noopTest = { exec: () => null };
	_Tokenizer = class {
		options;
		rules;
		lexer;
		constructor(options) {
			this.options = options || _defaults;
		}
		space(src) {
			const cap = this.rules.block.newline.exec(src);
			if (cap && cap[0].length > 0) return {
				type: "space",
				raw: cap[0]
			};
		}
		code(src) {
			const cap = this.rules.block.code.exec(src);
			if (cap) {
				const text = cap[0].replace(/^ {1,4}/gm, "");
				return {
					type: "code",
					raw: cap[0],
					codeBlockStyle: "indented",
					text: !this.options.pedantic ? rtrim(text, "\n") : text
				};
			}
		}
		fences(src) {
			const cap = this.rules.block.fences.exec(src);
			if (cap) {
				const raw = cap[0];
				const text = indentCodeCompensation(raw, cap[3] || "");
				return {
					type: "code",
					raw,
					lang: cap[2] ? cap[2].trim().replace(this.rules.inline._escapes, "$1") : cap[2],
					text
				};
			}
		}
		heading(src) {
			const cap = this.rules.block.heading.exec(src);
			if (cap) {
				let text = cap[2].trim();
				if (/#$/.test(text)) {
					const trimmed = rtrim(text, "#");
					if (this.options.pedantic) text = trimmed.trim();
					else if (!trimmed || / $/.test(trimmed)) text = trimmed.trim();
				}
				return {
					type: "heading",
					raw: cap[0],
					depth: cap[1].length,
					text,
					tokens: this.lexer.inline(text)
				};
			}
		}
		hr(src) {
			const cap = this.rules.block.hr.exec(src);
			if (cap) return {
				type: "hr",
				raw: cap[0]
			};
		}
		blockquote(src) {
			const cap = this.rules.block.blockquote.exec(src);
			if (cap) {
				const text = rtrim(cap[0].replace(/^ *>[ \t]?/gm, ""), "\n");
				const top = this.lexer.state.top;
				this.lexer.state.top = true;
				const tokens = this.lexer.blockTokens(text);
				this.lexer.state.top = top;
				return {
					type: "blockquote",
					raw: cap[0],
					tokens,
					text
				};
			}
		}
		list(src) {
			let cap = this.rules.block.list.exec(src);
			if (cap) {
				let bull = cap[1].trim();
				const isordered = bull.length > 1;
				const list = {
					type: "list",
					raw: "",
					ordered: isordered,
					start: isordered ? +bull.slice(0, -1) : "",
					loose: false,
					items: []
				};
				bull = isordered ? `\\d{1,9}\\${bull.slice(-1)}` : `\\${bull}`;
				if (this.options.pedantic) bull = isordered ? bull : "[*+-]";
				const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\t ][^\\n]*)?(?:\\n|$))`);
				let raw = "";
				let itemContents = "";
				let endsWithBlankLine = false;
				while (src) {
					let endEarly = false;
					if (!(cap = itemRegex.exec(src))) break;
					if (this.rules.block.hr.test(src)) break;
					raw = cap[0];
					src = src.substring(raw.length);
					let line = cap[2].split("\n", 1)[0].replace(/^\t+/, (t) => " ".repeat(3 * t.length));
					let nextLine = src.split("\n", 1)[0];
					let indent = 0;
					if (this.options.pedantic) {
						indent = 2;
						itemContents = line.trimStart();
					} else {
						indent = cap[2].search(/[^ ]/);
						indent = indent > 4 ? 1 : indent;
						itemContents = line.slice(indent);
						indent += cap[1].length;
					}
					let blankLine = false;
					if (!line && /^ *$/.test(nextLine)) {
						raw += nextLine + "\n";
						src = src.substring(nextLine.length + 1);
						endEarly = true;
					}
					if (!endEarly) {
						const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`);
						const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`);
						const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\`\`\`|~~~)`);
						const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);
						while (src) {
							const rawLine = src.split("\n", 1)[0];
							nextLine = rawLine;
							if (this.options.pedantic) nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, "  ");
							if (fencesBeginRegex.test(nextLine)) break;
							if (headingBeginRegex.test(nextLine)) break;
							if (nextBulletRegex.test(nextLine)) break;
							if (hrRegex.test(src)) break;
							if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) itemContents += "\n" + nextLine.slice(indent);
							else {
								if (blankLine) break;
								if (line.search(/[^ ]/) >= 4) break;
								if (fencesBeginRegex.test(line)) break;
								if (headingBeginRegex.test(line)) break;
								if (hrRegex.test(line)) break;
								itemContents += "\n" + nextLine;
							}
							if (!blankLine && !nextLine.trim()) blankLine = true;
							raw += rawLine + "\n";
							src = src.substring(rawLine.length + 1);
							line = nextLine.slice(indent);
						}
					}
					if (!list.loose) {
						if (endsWithBlankLine) list.loose = true;
						else if (/\n *\n *$/.test(raw)) endsWithBlankLine = true;
					}
					let istask = null;
					let ischecked;
					if (this.options.gfm) {
						istask = /^\[[ xX]\] /.exec(itemContents);
						if (istask) {
							ischecked = istask[0] !== "[ ] ";
							itemContents = itemContents.replace(/^\[[ xX]\] +/, "");
						}
					}
					list.items.push({
						type: "list_item",
						raw,
						task: !!istask,
						checked: ischecked,
						loose: false,
						text: itemContents,
						tokens: []
					});
					list.raw += raw;
				}
				list.items[list.items.length - 1].raw = raw.trimEnd();
				list.items[list.items.length - 1].text = itemContents.trimEnd();
				list.raw = list.raw.trimEnd();
				for (let i = 0; i < list.items.length; i++) {
					this.lexer.state.top = false;
					list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);
					if (!list.loose) {
						const spacers = list.items[i].tokens.filter((t) => t.type === "space");
						list.loose = spacers.length > 0 && spacers.some((t) => /\n.*\n/.test(t.raw));
					}
				}
				if (list.loose) for (let i = 0; i < list.items.length; i++) list.items[i].loose = true;
				return list;
			}
		}
		html(src) {
			const cap = this.rules.block.html.exec(src);
			if (cap) return {
				type: "html",
				block: true,
				raw: cap[0],
				pre: cap[1] === "pre" || cap[1] === "script" || cap[1] === "style",
				text: cap[0]
			};
		}
		def(src) {
			const cap = this.rules.block.def.exec(src);
			if (cap) {
				const tag = cap[1].toLowerCase().replace(/\s+/g, " ");
				const href = cap[2] ? cap[2].replace(/^<(.*)>$/, "$1").replace(this.rules.inline._escapes, "$1") : "";
				const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline._escapes, "$1") : cap[3];
				return {
					type: "def",
					tag,
					raw: cap[0],
					href,
					title
				};
			}
		}
		table(src) {
			const cap = this.rules.block.table.exec(src);
			if (cap) {
				if (!/[:|]/.test(cap[2])) return;
				const item = {
					type: "table",
					raw: cap[0],
					header: splitCells(cap[1]).map((c) => {
						return {
							text: c,
							tokens: []
						};
					}),
					align: cap[2].replace(/^\||\| *$/g, "").split("|"),
					rows: cap[3] && cap[3].trim() ? cap[3].replace(/\n[ \t]*$/, "").split("\n") : []
				};
				if (item.header.length === item.align.length) {
					let l = item.align.length;
					let i, j, k, row;
					for (i = 0; i < l; i++) {
						const align = item.align[i];
						if (align) if (/^ *-+: *$/.test(align)) item.align[i] = "right";
						else if (/^ *:-+: *$/.test(align)) item.align[i] = "center";
						else if (/^ *:-+ *$/.test(align)) item.align[i] = "left";
						else item.align[i] = null;
					}
					l = item.rows.length;
					for (i = 0; i < l; i++) item.rows[i] = splitCells(item.rows[i], item.header.length).map((c) => {
						return {
							text: c,
							tokens: []
						};
					});
					l = item.header.length;
					for (j = 0; j < l; j++) item.header[j].tokens = this.lexer.inline(item.header[j].text);
					l = item.rows.length;
					for (j = 0; j < l; j++) {
						row = item.rows[j];
						for (k = 0; k < row.length; k++) row[k].tokens = this.lexer.inline(row[k].text);
					}
					return item;
				}
			}
		}
		lheading(src) {
			const cap = this.rules.block.lheading.exec(src);
			if (cap) return {
				type: "heading",
				raw: cap[0],
				depth: cap[2].charAt(0) === "=" ? 1 : 2,
				text: cap[1],
				tokens: this.lexer.inline(cap[1])
			};
		}
		paragraph(src) {
			const cap = this.rules.block.paragraph.exec(src);
			if (cap) {
				const text = cap[1].charAt(cap[1].length - 1) === "\n" ? cap[1].slice(0, -1) : cap[1];
				return {
					type: "paragraph",
					raw: cap[0],
					text,
					tokens: this.lexer.inline(text)
				};
			}
		}
		text(src) {
			const cap = this.rules.block.text.exec(src);
			if (cap) return {
				type: "text",
				raw: cap[0],
				text: cap[0],
				tokens: this.lexer.inline(cap[0])
			};
		}
		escape(src) {
			const cap = this.rules.inline.escape.exec(src);
			if (cap) return {
				type: "escape",
				raw: cap[0],
				text: escape(cap[1])
			};
		}
		tag(src) {
			const cap = this.rules.inline.tag.exec(src);
			if (cap) {
				if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) this.lexer.state.inLink = true;
				else if (this.lexer.state.inLink && /^<\/a>/i.test(cap[0])) this.lexer.state.inLink = false;
				if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\s|>)/i.test(cap[0])) this.lexer.state.inRawBlock = true;
				else if (this.lexer.state.inRawBlock && /^<\/(pre|code|kbd|script)(\s|>)/i.test(cap[0])) this.lexer.state.inRawBlock = false;
				return {
					type: "html",
					raw: cap[0],
					inLink: this.lexer.state.inLink,
					inRawBlock: this.lexer.state.inRawBlock,
					block: false,
					text: cap[0]
				};
			}
		}
		link(src) {
			const cap = this.rules.inline.link.exec(src);
			if (cap) {
				const trimmedUrl = cap[2].trim();
				if (!this.options.pedantic && /^</.test(trimmedUrl)) {
					if (!/>$/.test(trimmedUrl)) return;
					const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), "\\");
					if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) return;
				} else {
					const lastParenIndex = findClosingBracket(cap[2], "()");
					if (lastParenIndex > -1) {
						const linkLen = (cap[0].indexOf("!") === 0 ? 5 : 4) + cap[1].length + lastParenIndex;
						cap[2] = cap[2].substring(0, lastParenIndex);
						cap[0] = cap[0].substring(0, linkLen).trim();
						cap[3] = "";
					}
				}
				let href = cap[2];
				let title = "";
				if (this.options.pedantic) {
					const link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
					if (link) {
						href = link[1];
						title = link[3];
					}
				} else title = cap[3] ? cap[3].slice(1, -1) : "";
				href = href.trim();
				if (/^</.test(href)) if (this.options.pedantic && !/>$/.test(trimmedUrl)) href = href.slice(1);
				else href = href.slice(1, -1);
				return outputLink(cap, {
					href: href ? href.replace(this.rules.inline._escapes, "$1") : href,
					title: title ? title.replace(this.rules.inline._escapes, "$1") : title
				}, cap[0], this.lexer);
			}
		}
		reflink(src, links) {
			let cap;
			if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {
				let link = (cap[2] || cap[1]).replace(/\s+/g, " ");
				link = links[link.toLowerCase()];
				if (!link) {
					const text = cap[0].charAt(0);
					return {
						type: "text",
						raw: text,
						text
					};
				}
				return outputLink(cap, link, cap[0], this.lexer);
			}
		}
		emStrong(src, maskedSrc, prevChar = "") {
			let match = this.rules.inline.emStrong.lDelim.exec(src);
			if (!match) return;
			if (match[3] && prevChar.match(/[\p{L}\p{N}]/u)) return;
			if (!(match[1] || match[2] || "") || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {
				const lLength = [...match[0]].length - 1;
				let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;
				const endReg = match[0][0] === "*" ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;
				endReg.lastIndex = 0;
				maskedSrc = maskedSrc.slice(-1 * src.length + lLength);
				while ((match = endReg.exec(maskedSrc)) != null) {
					rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];
					if (!rDelim) continue;
					rLength = [...rDelim].length;
					if (match[3] || match[4]) {
						delimTotal += rLength;
						continue;
					} else if (match[5] || match[6]) {
						if (lLength % 3 && !((lLength + rLength) % 3)) {
							midDelimTotal += rLength;
							continue;
						}
					}
					delimTotal -= rLength;
					if (delimTotal > 0) continue;
					rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);
					const lastCharLength = [...match[0]][0].length;
					const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);
					if (Math.min(lLength, rLength) % 2) {
						const text = raw.slice(1, -1);
						return {
							type: "em",
							raw,
							text,
							tokens: this.lexer.inlineTokens(text)
						};
					}
					const text = raw.slice(2, -2);
					return {
						type: "strong",
						raw,
						text,
						tokens: this.lexer.inlineTokens(text)
					};
				}
			}
		}
		codespan(src) {
			const cap = this.rules.inline.code.exec(src);
			if (cap) {
				let text = cap[2].replace(/\n/g, " ");
				const hasNonSpaceChars = /[^ ]/.test(text);
				const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
				if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) text = text.substring(1, text.length - 1);
				text = escape(text, true);
				return {
					type: "codespan",
					raw: cap[0],
					text
				};
			}
		}
		br(src) {
			const cap = this.rules.inline.br.exec(src);
			if (cap) return {
				type: "br",
				raw: cap[0]
			};
		}
		del(src) {
			const cap = this.rules.inline.del.exec(src);
			if (cap) return {
				type: "del",
				raw: cap[0],
				text: cap[2],
				tokens: this.lexer.inlineTokens(cap[2])
			};
		}
		autolink(src) {
			const cap = this.rules.inline.autolink.exec(src);
			if (cap) {
				let text, href;
				if (cap[2] === "@") {
					text = escape(cap[1]);
					href = "mailto:" + text;
				} else {
					text = escape(cap[1]);
					href = text;
				}
				return {
					type: "link",
					raw: cap[0],
					text,
					href,
					tokens: [{
						type: "text",
						raw: text,
						text
					}]
				};
			}
		}
		url(src) {
			let cap;
			if (cap = this.rules.inline.url.exec(src)) {
				let text, href;
				if (cap[2] === "@") {
					text = escape(cap[0]);
					href = "mailto:" + text;
				} else {
					let prevCapZero;
					do {
						prevCapZero = cap[0];
						cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];
					} while (prevCapZero !== cap[0]);
					text = escape(cap[0]);
					if (cap[1] === "www.") href = "http://" + cap[0];
					else href = cap[0];
				}
				return {
					type: "link",
					raw: cap[0],
					text,
					href,
					tokens: [{
						type: "text",
						raw: text,
						text
					}]
				};
			}
		}
		inlineText(src) {
			const cap = this.rules.inline.text.exec(src);
			if (cap) {
				let text;
				if (this.lexer.state.inRawBlock) text = cap[0];
				else text = escape(cap[0]);
				return {
					type: "text",
					raw: cap[0],
					text
				};
			}
		}
	};
	block = {
		newline: /^(?: *(?:\n|$))+/,
		code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
		fences: /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,
		hr: /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,
		heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
		blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
		list: /^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,
		html: "^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",
		def: /^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,
		table: noopTest,
		lheading: /^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,
		_paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,
		text: /^[^\n]+/
	};
	block._label = /(?!\s*\])(?:\\.|[^\[\]\\])+/;
	block._title = /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;
	block.def = edit(block.def).replace("label", block._label).replace("title", block._title).getRegex();
	block.bullet = /(?:[*+-]|\d{1,9}[.)])/;
	block.listItemStart = edit(/^( *)(bull) */).replace("bull", block.bullet).getRegex();
	block.list = edit(block.list).replace(/bull/g, block.bullet).replace("hr", "\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def", "\\n+(?=" + block.def.source + ")").getRegex();
	block._tag = "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|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";
	block._comment = /<!--(?!-?>)[\s\S]*?(?:-->|$)/;
	block.html = edit(block.html, "i").replace("comment", block._comment).replace("tag", block._tag).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();
	block.lheading = edit(block.lheading).replace(/bull/g, block.bullet).getRegex();
	block.paragraph = edit(block._paragraph).replace("hr", block.hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", block._tag).getRegex();
	block.blockquote = edit(block.blockquote).replace("paragraph", block.paragraph).getRegex();
	/**
	* Normal Block Grammar
	*/
	block.normal = { ...block };
	/**
	* GFM Block Grammar
	*/
	block.gfm = {
		...block.normal,
		table: "^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"
	};
	block.gfm.table = edit(block.gfm.table).replace("hr", block.hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", " {4}[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", block._tag).getRegex();
	block.gfm.paragraph = edit(block._paragraph).replace("hr", block.hr).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", block.gfm.table).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list", " {0,3}(?:[*+-]|1[.)]) ").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", block._tag).getRegex();
	/**
	* Pedantic grammar (original John Gruber's loose markdown specification)
	*/
	block.pedantic = {
		...block.normal,
		html: edit("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\s[^'\"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment", block._comment).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),
		def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
		heading: /^(#{1,6})(.*)(?:\n+|$)/,
		fences: noopTest,
		lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,
		paragraph: edit(block.normal._paragraph).replace("hr", block.hr).replace("heading", " *#{1,6} *[^\n]").replace("lheading", block.lheading).replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").getRegex()
	};
	inline = {
		escape: /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,
		autolink: /^<(scheme:[^\s\x00-\x1f<>]*|email)>/,
		url: noopTest,
		tag: "^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>",
		link: /^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,
		reflink: /^!?\[(label)\]\[(ref)\]/,
		nolink: /^!?\[(ref)\](?:\[\])?/,
		reflinkSearch: "reflink|nolink(?!\\()",
		emStrong: {
			lDelim: /^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,
			rDelimAst: /^[^_*]*?__[^_*]*?\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\*)[punct](\*+)(?=[\s]|$)|[^punct\s](\*+)(?!\*)(?=[punct\s]|$)|(?!\*)[punct\s](\*+)(?=[^punct\s])|[\s](\*+)(?!\*)(?=[punct])|(?!\*)[punct](\*+)(?!\*)(?=[punct])|[^punct\s](\*+)(?=[^punct\s])/,
			rDelimUnd: /^[^_*]*?\*\*[^_*]*?_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\s]|$)|[^punct\s](_+)(?!_)(?=[punct\s]|$)|(?!_)[punct\s](_+)(?=[^punct\s])|[\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])/
		},
		code: /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,
		br: /^( {2,}|\\)\n(?!\s*$)/,
		del: noopTest,
		text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,
		punctuation: /^((?![*_])[\spunctuation])/
	};
	inline._punctuation = "\\p{P}$+<=>`^|~";
	inline.punctuation = edit(inline.punctuation, "u").replace(/punctuation/g, inline._punctuation).getRegex();
	inline.blockSkip = /\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g;
	inline.anyPunctuation = /\\[punct]/g;
	inline._escapes = /\\([punct])/g;
	inline._comment = edit(block._comment).replace("(?:-->|$)", "-->").getRegex();
	inline.emStrong.lDelim = edit(inline.emStrong.lDelim, "u").replace(/punct/g, inline._punctuation).getRegex();
	inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, "gu").replace(/punct/g, inline._punctuation).getRegex();
	inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, "gu").replace(/punct/g, inline._punctuation).getRegex();
	inline.anyPunctuation = edit(inline.anyPunctuation, "gu").replace(/punct/g, inline._punctuation).getRegex();
	inline._escapes = edit(inline._escapes, "gu").replace(/punct/g, inline._punctuation).getRegex();
	inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;
	inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;
	inline.autolink = edit(inline.autolink).replace("scheme", inline._scheme).replace("email", inline._email).getRegex();
	inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
	inline.tag = edit(inline.tag).replace("comment", inline._comment).replace("attribute", inline._attribute).getRegex();
	inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
	inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;
	inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
	inline.link = edit(inline.link).replace("label", inline._label).replace("href", inline._href).replace("title", inline._title).getRegex();
	inline.reflink = edit(inline.reflink).replace("label", inline._label).replace("ref", block._label).getRegex();
	inline.nolink = edit(inline.nolink).replace("ref", block._label).getRegex();
	inline.reflinkSearch = edit(inline.reflinkSearch, "g").replace("reflink", inline.reflink).replace("nolink", inline.nolink).getRegex();
	/**
	* Normal Inline Grammar
	*/
	inline.normal = { ...inline };
	/**
	* Pedantic Inline Grammar
	*/
	inline.pedantic = {
		...inline.normal,
		strong: {
			start: /^__|\*\*/,
			middle: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
			endAst: /\*\*(?!\*)/g,
			endUnd: /__(?!_)/g
		},
		em: {
			start: /^_|\*/,
			middle: /^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,
			endAst: /\*(?!\*)/g,
			endUnd: /_(?!_)/g
		},
		link: edit(/^!?\[(label)\]\((.*?)\)/).replace("label", inline._label).getRegex(),
		reflink: edit(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", inline._label).getRegex()
	};
	/**
	* GFM Inline Grammar
	*/
	inline.gfm = {
		...inline.normal,
		escape: edit(inline.escape).replace("])", "~|])").getRegex(),
		_extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
		url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
		_backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,
		del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
		text: /^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/
	};
	inline.gfm.url = edit(inline.gfm.url, "i").replace("email", inline.gfm._extended_email).getRegex();
	/**
	* GFM + Line Breaks Inline Grammar
	*/
	inline.breaks = {
		...inline.gfm,
		br: edit(inline.br).replace("{2,}", "*").getRegex(),
		text: edit(inline.gfm.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex()
	};
	_Lexer = class _Lexer {
		tokens;
		options;
		state;
		tokenizer;
		inlineQueue;
		constructor(options) {
			this.tokens = [];
			this.tokens.links = Object.create(null);
			this.options = options || _defaults;
			this.options.tokenizer = this.options.tokenizer || new _Tokenizer();
			this.tokenizer = this.options.tokenizer;
			this.tokenizer.options = this.options;
			this.tokenizer.lexer = this;
			this.inlineQueue = [];
			this.state = {
				inLink: false,
				inRawBlock: false,
				top: true
			};
			const rules = {
				block: block.normal,
				inline: inline.normal
			};
			if (this.options.pedantic) {
				rules.block = block.pedantic;
				rules.inline = inline.pedantic;
			} else if (this.options.gfm) {
				rules.block = block.gfm;
				if (this.options.breaks) rules.inline = inline.breaks;
				else rules.inline = inline.gfm;
			}
			this.tokenizer.rules = rules;
		}
		/**
		* Expose Rules
		*/
		static get rules() {
			return {
				block,
				inline
			};
		}
		/**
		* Static Lex Method
		*/
		static lex(src, options) {
			return new _Lexer(options).lex(src);
		}
		/**
		* Static Lex Inline Method
		*/
		static lexInline(src, options) {
			return new _Lexer(options).inlineTokens(src);
		}
		/**
		* Preprocessing
		*/
		lex(src) {
			src = src.replace(/\r\n|\r/g, "\n");
			this.blockTokens(src, this.tokens);
			let next;
			while (next = this.inlineQueue.shift()) this.inlineTokens(next.src, next.tokens);
			return this.tokens;
		}
		blockTokens(src, tokens = []) {
			if (this.options.pedantic) src = src.replace(/\t/g, "    ").replace(/^ +$/gm, "");
			else src = src.replace(/^( *)(\t+)/gm, (_, leading, tabs) => {
				return leading + "    ".repeat(tabs.length);
			});
			let token;
			let lastToken;
			let cutSrc;
			let lastParagraphClipped;
			while (src) {
				if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some((extTokenizer) => {
					if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
						src = src.substring(token.raw.length);
						tokens.push(token);
						return true;
					}
					return false;
				})) continue;
				if (token = this.tokenizer.space(src)) {
					src = src.substring(token.raw.length);
					if (token.raw.length === 1 && tokens.length > 0) tokens[tokens.length - 1].raw += "\n";
					else tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.code(src)) {
					src = src.substring(token.raw.length);
					lastToken = tokens[tokens.length - 1];
					if (lastToken && (lastToken.type === "paragraph" || lastToken.type === "text")) {
						lastToken.raw += "\n" + token.raw;
						lastToken.text += "\n" + token.text;
						this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
					} else tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.fences(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.heading(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.hr(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.blockquote(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.list(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.html(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.def(src)) {
					src = src.substring(token.raw.length);
					lastToken = tokens[tokens.length - 1];
					if (lastToken && (lastToken.type === "paragraph" || lastToken.type === "text")) {
						lastToken.raw += "\n" + token.raw;
						lastToken.text += "\n" + token.raw;
						this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
					} else if (!this.tokens.links[token.tag]) this.tokens.links[token.tag] = {
						href: token.href,
						title: token.title
					};
					continue;
				}
				if (token = this.tokenizer.table(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.lheading(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				cutSrc = src;
				if (this.options.extensions && this.options.extensions.startBlock) {
					let startIndex = Infinity;
					const tempSrc = src.slice(1);
					let tempStart;
					this.options.extensions.startBlock.forEach((getStartIndex) => {
						tempStart = getStartIndex.call({ lexer: this }, tempSrc);
						if (typeof tempStart === "number" && tempStart >= 0) startIndex = Math.min(startIndex, tempStart);
					});
					if (startIndex < Infinity && startIndex >= 0) cutSrc = src.substring(0, startIndex + 1);
				}
				if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {
					lastToken = tokens[tokens.length - 1];
					if (lastParagraphClipped && lastToken.type === "paragraph") {
						lastToken.raw += "\n" + token.raw;
						lastToken.text += "\n" + token.text;
						this.inlineQueue.pop();
						this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
					} else tokens.push(token);
					lastParagraphClipped = cutSrc.length !== src.length;
					src = src.substring(token.raw.length);
					continue;
				}
				if (token = this.tokenizer.text(src)) {
					src = src.substring(token.raw.length);
					lastToken = tokens[tokens.length - 1];
					if (lastToken && lastToken.type === "text") {
						lastToken.raw += "\n" + token.raw;
						lastToken.text += "\n" + token.text;
						this.inlineQueue.pop();
						this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;
					} else tokens.push(token);
					continue;
				}
				if (src) {
					const errMsg = "Infinite loop on byte: " + src.charCodeAt(0);
					if (this.options.silent) {
						console.error(errMsg);
						break;
					} else throw new Error(errMsg);
				}
			}
			this.state.top = true;
			return tokens;
		}
		inline(src, tokens = []) {
			this.inlineQueue.push({
				src,
				tokens
			});
			return tokens;
		}
		/**
		* Lexing/Compiling
		*/
		inlineTokens(src, tokens = []) {
			let token, lastToken, cutSrc;
			let maskedSrc = src;
			let match;
			let keepPrevChar, prevChar;
			if (this.tokens.links) {
				const links = Object.keys(this.tokens.links);
				if (links.length > 0) {
					while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) if (links.includes(match[0].slice(match[0].lastIndexOf("[") + 1, -1))) maskedSrc = maskedSrc.slice(0, match.index) + "[" + "a".repeat(match[0].length - 2) + "]" + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);
				}
			}
			while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) maskedSrc = maskedSrc.slice(0, match.index) + "[" + "a".repeat(match[0].length - 2) + "]" + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);
			while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) maskedSrc = maskedSrc.slice(0, match.index) + "++" + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);
			while (src) {
				if (!keepPrevChar) prevChar = "";
				keepPrevChar = false;
				if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some((extTokenizer) => {
					if (token = extTokenizer.call({ lexer: this }, src, tokens)) {
						src = src.substring(token.raw.length);
						tokens.push(token);
						return true;
					}
					return false;
				})) continue;
				if (token = this.tokenizer.escape(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.tag(src)) {
					src = src.substring(token.raw.length);
					lastToken = tokens[tokens.length - 1];
					if (lastToken && token.type === "text" && lastToken.type === "text") {
						lastToken.raw += token.raw;
						lastToken.text += token.text;
					} else tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.link(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.reflink(src, this.tokens.links)) {
					src = src.substring(token.raw.length);
					lastToken = tokens[tokens.length - 1];
					if (lastToken && token.type === "text" && lastToken.type === "text") {
						lastToken.raw += token.raw;
						lastToken.text += token.text;
					} else tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.codespan(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.br(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.del(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (token = this.tokenizer.autolink(src)) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				if (!this.state.inLink && (token = this.tokenizer.url(src))) {
					src = src.substring(token.raw.length);
					tokens.push(token);
					continue;
				}
				cutSrc = src;
				if (this.options.extensions && this.options.extensions.startInline) {
					let startIndex = Infinity;
					const tempSrc = src.slice(1);
					let tempStart;
					this.options.extensions.startInline.forEach((getStartIndex) => {
						tempStart = getStartIndex.call({ lexer: this }, tempSrc);
						if (typeof tempStart === "number" && tempStart >= 0) startIndex = Math.min(startIndex, tempStart);
					});
					if (startIndex < Infinity && startIndex >= 0) cutSrc = src.substring(0, startIndex + 1);
				}
				if (token = this.tokenizer.inlineText(cutSrc)) {
					src = src.substring(token.raw.length);
					if (token.raw.slice(-1) !== "_") prevChar = token.raw.slice(-1);
					keepPrevChar = true;
					lastToken = tokens[tokens.length - 1];
					if (lastToken && lastToken.type === "text") {
						lastToken.raw += token.raw;
						lastToken.text += token.text;
					} else tokens.push(token);
					continue;
				}
				if (src) {
					const errMsg = "Infinite loop on byte: " + src.charCodeAt(0);
					if (this.options.silent) {
						console.error(errMsg);
						break;
					} else throw new Error(errMsg);
				}
			}
			return tokens;
		}
	};
	_Renderer = class {
		options;
		constructor(options) {
			this.options = options || _defaults;
		}
		code(code, infostring, escaped) {
			const lang = (infostring || "").match(/^\S*/)?.[0];
			code = code.replace(/\n$/, "") + "\n";
			if (!lang) return "<pre><code>" + (escaped ? code : escape(code, true)) + "</code></pre>\n";
			return "<pre><code class=\"language-" + escape(lang) + "\">" + (escaped ? code : escape(code, true)) + "</code></pre>\n";
		}
		blockquote(quote) {
			return `<blockquote>\n${quote}</blockquote>\n`;
		}
		html(html, block) {
			return html;
		}
		heading(text, level, raw) {
			return `<h${level}>${text}</h${level}>\n`;
		}
		hr() {
			return "<hr>\n";
		}
		list(body, ordered, start) {
			const type = ordered ? "ol" : "ul";
			const startatt = ordered && start !== 1 ? " start=\"" + start + "\"" : "";
			return "<" + type + startatt + ">\n" + body + "</" + type + ">\n";
		}
		listitem(text, task, checked) {
			return `<li>${text}</li>\n`;
		}
		checkbox(checked) {
			return "<input " + (checked ? "checked=\"\" " : "") + "disabled=\"\" type=\"checkbox\">";
		}
		paragraph(text) {
			return `<p>${text}</p>\n`;
		}
		table(header, body) {
			if (body) body = `<tbody>${body}</tbody>`;
			return "<table>\n<thead>\n" + header + "</thead>\n" + body + "</table>\n";
		}
		tablerow(content) {
			return `<tr>\n${content}</tr>\n`;
		}
		tablecell(content, flags) {
			const type = flags.header ? "th" : "td";
			return (flags.align ? `<${type} align="${flags.align}">` : `<${type}>`) + content + `</${type}>\n`;
		}
		/**
		* span level renderer
		*/
		strong(text) {
			return `<strong>${text}</strong>`;
		}
		em(text) {
			return `<em>${text}</em>`;
		}
		codespan(text) {
			return `<code>${text}</code>`;
		}
		br() {
			return "<br>";
		}
		del(text) {
			return `<del>${text}</del>`;
		}
		link(href, title, text) {
			const cleanHref = cleanUrl(href);
			if (cleanHref === null) return text;
			href = cleanHref;
			let out = "<a href=\"" + href + "\"";
			if (title) out += " title=\"" + title + "\"";
			out += ">" + text + "</a>";
			return out;
		}
		image(href, title, text) {
			const cleanHref = cleanUrl(href);
			if (cleanHref === null) return text;
			href = cleanHref;
			let out = `<img src="${href}" alt="${text}"`;
			if (title) out += ` title="${title}"`;
			out += ">";
			return out;
		}
		text(text) {
			return text;
		}
	};
	_TextRenderer = class {
		strong(text) {
			return text;
		}
		em(text) {
			return text;
		}
		codespan(text) {
			return text;
		}
		del(text) {
			return text;
		}
		html(text) {
			return text;
		}
		text(text) {
			return text;
		}
		link(href, title, text) {
			return "" + text;
		}
		image(href, title, text) {
			return "" + text;
		}
		br() {
			return "";
		}
	};
	_Parser = class _Parser {
		options;
		renderer;
		textRenderer;
		constructor(options) {
			this.options = options || _defaults;
			this.options.renderer = this.options.renderer || new _Renderer();
			this.renderer = this.options.renderer;
			this.renderer.options = this.options;
			this.textRenderer = new _TextRenderer();
		}
		/**
		* Static Parse Method
		*/
		static parse(tokens, options) {
			return new _Parser(options).parse(tokens);
		}
		/**
		* Static Parse Inline Method
		*/
		static parseInline(tokens, options) {
			return new _Parser(options).parseInline(tokens);
		}
		/**
		* Parse Loop
		*/
		parse(tokens, top = true) {
			let out = "";
			for (let i = 0; i < tokens.length; i++) {
				const token = tokens[i];
				if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
					const genericToken = token;
					const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);
					if (ret !== false || ![
						"space",
						"hr",
						"heading",
						"code",
						"table",
						"blockquote",
						"list",
						"html",
						"paragraph",
						"text"
					].includes(genericToken.type)) {
						out += ret || "";
						continue;
					}
				}
				switch (token.type) {
					case "space": continue;
					case "hr":
						out += this.renderer.hr();
						continue;
					case "heading": {
						const headingToken = token;
						out += this.renderer.heading(this.parseInline(headingToken.tokens), headingToken.depth, unescape$1(this.parseInline(headingToken.tokens, this.textRenderer)));
						continue;
					}
					case "code": {
						const codeToken = token;
						out += this.renderer.code(codeToken.text, codeToken.lang, !!codeToken.escaped);
						continue;
					}
					case "table": {
						const tableToken = token;
						let header = "";
						let cell = "";
						for (let j = 0; j < tableToken.header.length; j++) cell += this.renderer.tablecell(this.parseInline(tableToken.header[j].tokens), {
							header: true,
							align: tableToken.align[j]
						});
						header += this.renderer.tablerow(cell);
						let body = "";
						for (let j = 0; j < tableToken.rows.length; j++) {
							const row = tableToken.rows[j];
							cell = "";
							for (let k = 0; k < row.length; k++) cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {
								header: false,
								align: tableToken.align[k]
							});
							body += this.renderer.tablerow(cell);
						}
						out += this.renderer.table(header, body);
						continue;
					}
					case "blockquote": {
						const blockquoteToken = token;
						const body = this.parse(blockquoteToken.tokens);
						out += this.renderer.blockquote(body);
						continue;
					}
					case "list": {
						const listToken = token;
						const ordered = listToken.ordered;
						const start = listToken.start;
						const loose = listToken.loose;
						let body = "";
						for (let j = 0; j < listToken.items.length; j++) {
							const item = listToken.items[j];
							const checked = item.checked;
							const task = item.task;
							let itemBody = "";
							if (item.task) {
								const checkbox = this.renderer.checkbox(!!checked);
								if (loose) if (item.tokens.length > 0 && item.tokens[0].type === "paragraph") {
									item.tokens[0].text = checkbox + " " + item.tokens[0].text;
									if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === "text") item.tokens[0].tokens[0].text = checkbox + " " + item.tokens[0].tokens[0].text;
								} else item.tokens.unshift({
									type: "text",
									text: checkbox + " "
								});
								else itemBody += checkbox + " ";
							}
							itemBody += this.parse(item.tokens, loose);
							body += this.renderer.listitem(itemBody, task, !!checked);
						}
						out += this.renderer.list(body, ordered, start);
						continue;
					}
					case "html": {
						const htmlToken = token;
						out += this.renderer.html(htmlToken.text, htmlToken.block);
						continue;
					}
					case "paragraph": {
						const paragraphToken = token;
						out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens));
						continue;
					}
					case "text": {
						let textToken = token;
						let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text;
						while (i + 1 < tokens.length && tokens[i + 1].type === "text") {
							textToken = tokens[++i];
							body += "\n" + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text);
						}
						out += top ? this.renderer.paragraph(body) : body;
						continue;
					}
					default: {
						const errMsg = "Token with \"" + token.type + "\" type was not found.";
						if (this.options.silent) {
							console.error(errMsg);
							return "";
						} else throw new Error(errMsg);
					}
				}
			}
			return out;
		}
		/**
		* Parse Inline Tokens
		*/
		parseInline(tokens, renderer) {
			renderer = renderer || this.renderer;
			let out = "";
			for (let i = 0; i < tokens.length; i++) {
				const token = tokens[i];
				if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {
					const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);
					if (ret !== false || ![
						"escape",
						"html",
						"link",
						"image",
						"strong",
						"em",
						"codespan",
						"br",
						"del",
						"text"
					].includes(token.type)) {
						out += ret || "";
						continue;
					}
				}
				switch (token.type) {
					case "escape": {
						const escapeToken = token;
						out += renderer.text(escapeToken.text);
						break;
					}
					case "html": {
						const tagToken = token;
						out += renderer.html(tagToken.text);
						break;
					}
					case "link": {
						const linkToken = token;
						out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer));
						break;
					}
					case "image": {
						const imageToken = token;
						out += renderer.image(imageToken.href, imageToken.title, imageToken.text);
						break;
					}
					case "strong": {
						const strongToken = token;
						out += renderer.strong(this.parseInline(strongToken.tokens, renderer));
						break;
					}
					case "em": {
						const emToken = token;
						out += renderer.em(this.parseInline(emToken.tokens, renderer));
						break;
					}
					case "codespan": {
						const codespanToken = token;
						out += renderer.codespan(codespanToken.text);
						break;
					}
					case "br":
						out += renderer.br();
						break;
					case "del": {
						const delToken = token;
						out += renderer.del(this.parseInline(delToken.tokens, renderer));
						break;
					}
					case "text": {
						const textToken = token;
						out += renderer.text(textToken.text);
						break;
					}
					default: {
						const errMsg = "Token with \"" + token.type + "\" type was not found.";
						if (this.options.silent) {
							console.error(errMsg);
							return "";
						} else throw new Error(errMsg);
					}
				}
			}
			return out;
		}
	};
	_Hooks = class {
		options;
		constructor(options) {
			this.options = options || _defaults;
		}
		static passThroughHooks = new Set(["preprocess", "postprocess"]);
		/**
		* Process markdown before marked
		*/
		preprocess(markdown) {
			return markdown;
		}
		/**
		* Process HTML after marked is finished
		*/
		postprocess(html) {
			return html;
		}
	};
	Marked = class {
		defaults = _getDefaults();
		options = this.setOptions;
		parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);
		parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);
		Parser = _Parser;
		Renderer = _Renderer;
		TextRenderer = _TextRenderer;
		Lexer = _Lexer;
		Tokenizer = _Tokenizer;
		Hooks = _Hooks;
		constructor(...args) {
			this.use(...args);
		}
		/**
		* Run callback for every token
		*/
		walkTokens(tokens, callback) {
			let values = [];
			for (const token of tokens) {
				values = values.concat(callback.call(this, token));
				switch (token.type) {
					case "table": {
						const tableToken = token;
						for (const cell of tableToken.header) values = values.concat(this.walkTokens(cell.tokens, callback));
						for (const row of tableToken.rows) for (const cell of row) values = values.concat(this.walkTokens(cell.tokens, callback));
						break;
					}
					case "list": {
						const listToken = token;
						values = values.concat(this.walkTokens(listToken.items, callback));
						break;
					}
					default: {
						const genericToken = token;
						if (this.defaults.extensions?.childTokens?.[genericToken.type]) this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {
							values = values.concat(this.walkTokens(genericToken[childTokens], callback));
						});
						else if (genericToken.tokens) values = values.concat(this.walkTokens(genericToken.tokens, callback));
					}
				}
			}
			return values;
		}
		use(...args) {
			const extensions = this.defaults.extensions || {
				renderers: {},
				childTokens: {}
			};
			args.forEach((pack) => {
				const opts = { ...pack };
				opts.async = this.defaults.async || opts.async || false;
				if (pack.extensions) {
					pack.extensions.forEach((ext) => {
						if (!ext.name) throw new Error("extension name required");
						if ("renderer" in ext) {
							const prevRenderer = extensions.renderers[ext.name];
							if (prevRenderer) extensions.renderers[ext.name] = function(...args) {
								let ret = ext.renderer.apply(this, args);
								if (ret === false) ret = prevRenderer.apply(this, args);
								return ret;
							};
							else extensions.renderers[ext.name] = ext.renderer;
						}
						if ("tokenizer" in ext) {
							if (!ext.level || ext.level !== "block" && ext.level !== "inline") throw new Error("extension level must be 'block' or 'inline'");
							const extLevel = extensions[ext.level];
							if (extLevel) extLevel.unshift(ext.tokenizer);
							else extensions[ext.level] = [ext.tokenizer];
							if (ext.start) {
								if (ext.level === "block") if (extensions.startBlock) extensions.startBlock.push(ext.start);
								else extensions.startBlock = [ext.start];
								else if (ext.level === "inline") if (extensions.startInline) extensions.startInline.push(ext.start);
								else extensions.startInline = [ext.start];
							}
						}
						if ("childTokens" in ext && ext.childTokens) extensions.childTokens[ext.name] = ext.childTokens;
					});
					opts.extensions = extensions;
				}
				if (pack.renderer) {
					const renderer = this.defaults.renderer || new _Renderer(this.defaults);
					for (const prop in pack.renderer) {
						const rendererFunc = pack.renderer[prop];
						const rendererKey = prop;
						const prevRenderer = renderer[rendererKey];
						renderer[rendererKey] = (...args) => {
							let ret = rendererFunc.apply(renderer, args);
							if (ret === false) ret = prevRenderer.apply(renderer, args);
							return ret || "";
						};
					}
					opts.renderer = renderer;
				}
				if (pack.tokenizer) {
					const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);
					for (const prop in pack.tokenizer) {
						const tokenizerFunc = pack.tokenizer[prop];
						const tokenizerKey = prop;
						const prevTokenizer = tokenizer[tokenizerKey];
						tokenizer[tokenizerKey] = (...args) => {
							let ret = tokenizerFunc.apply(tokenizer, args);
							if (ret === false) ret = prevTokenizer.apply(tokenizer, args);
							return ret;
						};
					}
					opts.tokenizer = tokenizer;
				}
				if (pack.hooks) {
					const hooks = this.defaults.hooks || new _Hooks();
					for (const prop in pack.hooks) {
						const hooksFunc = pack.hooks[prop];
						const hooksKey = prop;
						const prevHook = hooks[hooksKey];
						if (_Hooks.passThroughHooks.has(prop)) hooks[hooksKey] = (arg) => {
							if (this.defaults.async) return Promise.resolve(hooksFunc.call(hooks, arg)).then((ret) => {
								return prevHook.call(hooks, ret);
							});
							const ret = hooksFunc.call(hooks, arg);
							return prevHook.call(hooks, ret);
						};
						else hooks[hooksKey] = (...args) => {
							let ret = hooksFunc.apply(hooks, args);
							if (ret === false) ret = prevHook.apply(hooks, args);
							return ret;
						};
					}
					opts.hooks = hooks;
				}
				if (pack.walkTokens) {
					const walkTokens = this.defaults.walkTokens;
					const packWalktokens = pack.walkTokens;
					opts.walkTokens = function(token) {
						let values = [];
						values.push(packWalktokens.call(this, token));
						if (walkTokens) values = values.concat(walkTokens.call(this, token));
						return values;
					};
				}
				this.defaults = {
					...this.defaults,
					...opts
				};
			});
			return this;
		}
		setOptions(opt) {
			this.defaults = {
				...this.defaults,
				...opt
			};
			return this;
		}
		lexer(src, options) {
			return _Lexer.lex(src, options ?? this.defaults);
		}
		parser(tokens, options) {
			return _Parser.parse(tokens, options ?? this.defaults);
		}
		#parseMarkdown(lexer, parser) {
			return (src, options) => {
				const origOpt = { ...options };
				const opt = {
					...this.defaults,
					...origOpt
				};
				if (this.defaults.async === true && origOpt.async === false) {
					if (!opt.silent) console.warn("marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.");
					opt.async = true;
				}
				const throwError = this.#onError(!!opt.silent, !!opt.async);
				if (typeof src === "undefined" || src === null) return throwError(/* @__PURE__ */ new Error("marked(): input parameter is undefined or null"));
				if (typeof src !== "string") return throwError(/* @__PURE__ */ new Error("marked(): input parameter is of type " + Object.prototype.toString.call(src) + ", string expected"));
				if (opt.hooks) opt.hooks.options = opt;
				if (opt.async) return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src).then((src) => lexer(src, opt)).then((tokens) => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens).then((tokens) => parser(tokens, opt)).then((html) => opt.hooks ? opt.hooks.postprocess(html) : html).catch(throwError);
				try {
					if (opt.hooks) src = opt.hooks.preprocess(src);
					const tokens = lexer(src, opt);
					if (opt.walkTokens) this.walkTokens(tokens, opt.walkTokens);
					let html = parser(tokens, opt);
					if (opt.hooks) html = opt.hooks.postprocess(html);
					return html;
				} catch (e) {
					return throwError(e);
				}
			};
		}
		#onError(silent, async) {
			return (e) => {
				e.message += "\nPlease report this to https://github.com/markedjs/marked.";
				if (silent) {
					const msg = "<p>An error occurred:</p><pre>" + escape(e.message + "", true) + "</pre>";
					if (async) return Promise.resolve(msg);
					return msg;
				}
				if (async) return Promise.reject(e);
				throw e;
			};
		}
	};
	markedInstance = new Marked();
	/**
	* Sets the default options.
	*
	* @param options Hash of options
	*/
	marked.options = marked.setOptions = function(options) {
		markedInstance.setOptions(options);
		marked.defaults = markedInstance.defaults;
		changeDefaults(marked.defaults);
		return marked;
	};
	/**
	* Gets the original marked default options.
	*/
	marked.getDefaults = _getDefaults;
	marked.defaults = _defaults;
	/**
	* Use Extension
	*/
	marked.use = function(...args) {
		markedInstance.use(...args);
		marked.defaults = markedInstance.defaults;
		changeDefaults(marked.defaults);
		return marked;
	};
	/**
	* Run callback for every token
	*/
	marked.walkTokens = function(tokens, callback) {
		return markedInstance.walkTokens(tokens, callback);
	};
	/**
	* Compiles markdown to HTML without enclosing `p` tag.
	*
	* @param src String of markdown source to be compiled
	* @param options Hash of options
	* @return String of compiled HTML
	*/
	marked.parseInline = markedInstance.parseInline;
	/**
	* Expose
	*/
	marked.Parser = _Parser;
	marked.parser = _Parser.parse;
	marked.Renderer = _Renderer;
	marked.TextRenderer = _TextRenderer;
	marked.Lexer = _Lexer;
	marked.lexer = _Lexer.lex;
	marked.Tokenizer = _Tokenizer;
	marked.Hooks = _Hooks;
	marked.parse = marked;
	marked.options;
	marked.setOptions;
	marked.use;
	marked.walkTokens;
	marked.parseInline;
	_Parser.parse;
	_Lexer.lex;
}));
//#endregion
//#region src/util/ansiparse.ts
function parseAnsiHighlights(line, markdown = false) {
	let items = ansiparse(line);
	let highlights = [];
	let newLabel = "";
	for (let item of items) {
		if (!item.text) continue;
		let { foreground, background } = item;
		let len = byteLength(newLabel);
		let span = [len, len + byteLength(item.text)];
		if (foreground && background) {
			let hlGroup = `CocList${upperFirst(foreground)}${upperFirst(background)}`;
			highlights.push({
				span,
				hlGroup
			});
		} else if (foreground) {
			let hlGroup;
			if (markdown) if (foreground == "yellow") hlGroup = "CocMarkdownCode";
			else if (foreground == "blue") hlGroup = "CocMarkdownLink";
			else if (foreground == "magenta") hlGroup = "CocMarkdownHeader";
			else hlGroup = `CocListFg${upperFirst(foreground)}`;
			else hlGroup = `CocListFg${upperFirst(foreground)}`;
			highlights.push({
				span,
				hlGroup
			});
		} else if (background) {
			let hlGroup = `CocListBg${upperFirst(background)}`;
			highlights.push({
				span,
				hlGroup
			});
		}
		if (item.bold) highlights.push({
			span,
			hlGroup: "CocBold"
		});
		else if (item.italic) highlights.push({
			span,
			hlGroup: "CocItalic"
		});
		else if (item.underline) highlights.push({
			span,
			hlGroup: "CocUnderline"
		});
		else if (item.strikethrough) highlights.push({
			span,
			hlGroup: "CocStrikeThrough"
		});
		newLabel = newLabel + item.text;
	}
	return {
		line: newLabel,
		highlights
	};
}
function ansiparse(str) {
	let matchingControl = null;
	let matchingData = null;
	let matchingText = "";
	let ansiState = [];
	let result = [];
	let state = {};
	let eraseChar = () => {
		let index;
		let text;
		if (matchingText.length) matchingText = matchingText.slice(0, matchingText.length - 1);
		else if (result.length) {
			index = result.length - 1;
			text = result[index].text;
			if (text.length === 1) result.pop();
			else result[index].text = text.slice(0, text.length - 1);
		}
	};
	for (let i = 0; i < str.length; i++) {
		if (matchingControl != null) {
			if (matchingControl == "\x1B" && str[i] == "[") {
				if (matchingText) {
					state.text = matchingText;
					result.push(state);
					state = {};
					matchingText = "";
				}
				if (matchingText == "" && (str[i + 1] == "m" || str[i + 1] == "K")) {
					if (state.foreground || state.background) {
						state.text = "";
						result.push(state);
					}
					state = {};
				}
				matchingControl = null;
				matchingData = "";
			} else {
				matchingText += matchingControl + str[i];
				matchingControl = null;
			}
			continue;
		} else if (matchingData != null) {
			if (str[i] == ";") {
				ansiState.push(matchingData);
				matchingData = "";
			} else if (str[i] == "m" || str[i] == "K") {
				ansiState.push(matchingData);
				matchingData = null;
				matchingText = "";
				ansiState.forEach((ansiCode) => {
					if (foregroundColors[ansiCode]) state.foreground = foregroundColors[ansiCode];
					else if (backgroundColors[ansiCode]) state.background = backgroundColors[ansiCode];
					else if (ansiCode == 39) delete state.foreground;
					else if (ansiCode == 49) delete state.background;
					else if (styles[ansiCode]) state[styles[ansiCode]] = true;
					else if (ansiCode == 22) state.bold = false;
					else if (ansiCode == 23) state.italic = false;
					else if (ansiCode == 24) state.underline = false;
					else if (ansiCode == 29) state.strikethrough = false;
				});
				ansiState = [];
			} else matchingData += str[i];
			continue;
		}
		if (str[i] == "\x1B") matchingControl = str[i];
		else if (str[i] == "\b") eraseChar();
		else matchingText += str[i];
	}
	if (matchingText) {
		state.text = matchingText + toText(matchingControl);
		result.push(state);
	}
	return result;
}
function stripAnsiColoring(str) {
	return str.replace(/\u001b\[[0-9;]*m/g, "");
}
var foregroundColors, backgroundColors, styles;
var init_ansiparse = __esmMin((() => {
	init_string$1();
	foregroundColors = {
		30: "black",
		31: "red",
		32: "green",
		33: "yellow",
		34: "blue",
		35: "magenta",
		36: "cyan",
		37: "white",
		90: "grey"
	};
	backgroundColors = {
		40: "black",
		41: "red",
		42: "green",
		43: "yellow",
		44: "blue",
		45: "magenta",
		46: "cyan",
		47: "white"
	};
	styles = {
		1: "bold",
		3: "italic",
		4: "underline",
		9: "strikethrough"
	};
}));
//#endregion
//#region src/markdown/styles.ts
function gray(str) {
	return `${styles$1.gray.open}${str}${styles$1.gray.close}`;
}
function magenta(str) {
	return `${styles$1.magenta.open}${str}${styles$1.magenta.close}`;
}
function bold(str) {
	return `${styles$1.bold.open}${str}${styles$1.bold.close}`;
}
function underline(str) {
	return `${styles$1.underline.open}${str}${styles$1.underline.close}`;
}
function strikethrough(str) {
	return `${styles$1.strikethrough.open}${str}${styles$1.strikethrough.close}`;
}
function italic(str) {
	return `${styles$1.italic.open}${str}${styles$1.italic.close}`;
}
function yellow(str) {
	return `${styles$1.yellow.open}${str}${styles$1.yellow.close}`;
}
function blue(str) {
	return `${styles$1.blue.open}${str}${styles$1.blue.close}`;
}
var init_styles = __esmMin((() => {
	init_node();
}));
//#endregion
//#region node_modules/colors/lib/styles.js
var require_styles = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var styles = {};
	module["exports"] = styles;
	var codes = {
		reset: [0, 0],
		bold: [1, 22],
		dim: [2, 22],
		italic: [3, 23],
		underline: [4, 24],
		inverse: [7, 27],
		hidden: [8, 28],
		strikethrough: [9, 29],
		black: [30, 39],
		red: [31, 39],
		green: [32, 39],
		yellow: [33, 39],
		blue: [34, 39],
		magenta: [35, 39],
		cyan: [36, 39],
		white: [37, 39],
		gray: [90, 39],
		grey: [90, 39],
		bgBlack: [40, 49],
		bgRed: [41, 49],
		bgGreen: [42, 49],
		bgYellow: [43, 49],
		bgBlue: [44, 49],
		bgMagenta: [45, 49],
		bgCyan: [46, 49],
		bgWhite: [47, 49],
		blackBG: [40, 49],
		redBG: [41, 49],
		greenBG: [42, 49],
		yellowBG: [43, 49],
		blueBG: [44, 49],
		magentaBG: [45, 49],
		cyanBG: [46, 49],
		whiteBG: [47, 49]
	};
	Object.keys(codes).forEach(function(key) {
		var val = codes[key];
		var style = styles[key] = [];
		style.open = "\x1B[" + val[0] + "m";
		style.close = "\x1B[" + val[1] + "m";
	});
}));
//#endregion
//#region node_modules/colors/lib/system/supports-colors.js
var require_supports_colors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var argv = process.argv;
	module.exports = (function() {
		if (argv.indexOf("--no-color") !== -1 || argv.indexOf("--color=false") !== -1) return false;
		if (argv.indexOf("--color") !== -1 || argv.indexOf("--color=true") !== -1 || argv.indexOf("--color=always") !== -1) return true;
		if (process.stdout && !process.stdout.isTTY) return false;
		if (process.platform === "win32") return true;
		if ("COLORTERM" in process.env) return true;
		if (process.env.TERM === "dumb") return false;
		if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) return true;
		return false;
	})();
}));
//#endregion
//#region node_modules/colors/lib/custom/trap.js
var require_trap = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module["exports"] = function runTheTrap(text, options) {
		var result = "";
		text = text || "Run the trap, drop the bass";
		text = text.split("");
		var trap = {
			a: [
				"@",
				"Ą",
				"Ⱥ",
				"Ʌ",
				"Δ",
				"Λ",
				"Д"
			],
			b: [
				"ß",
				"Ɓ",
				"Ƀ",
				"ɮ",
				"β",
				"฿"
			],
			c: [
				"©",
				"Ȼ",
				"Ͼ"
			],
			d: [
				"Ð",
				"Ɗ",
				"Ԁ",
				"ԁ",
				"Ԃ",
				"ԃ"
			],
			e: [
				"Ë",
				"ĕ",
				"Ǝ",
				"ɘ",
				"Σ",
				"ξ",
				"Ҽ",
				"੬"
			],
			f: ["Ӻ"],
			g: ["ɢ"],
			h: [
				"Ħ",
				"ƕ",
				"Ң",
				"Һ",
				"Ӈ",
				"Ԋ"
			],
			i: ["༏"],
			j: ["Ĵ"],
			k: [
				"ĸ",
				"Ҡ",
				"Ӄ",
				"Ԟ"
			],
			l: ["Ĺ"],
			m: [
				"ʍ",
				"Ӎ",
				"ӎ",
				"Ԡ",
				"ԡ",
				"൩"
			],
			n: [
				"Ñ",
				"ŋ",
				"Ɲ",
				"Ͷ",
				"Π",
				"Ҋ"
			],
			o: [
				"Ø",
				"õ",
				"ø",
				"Ǿ",
				"ʘ",
				"Ѻ",
				"ם",
				"۝",
				"๏"
			],
			p: ["Ƿ", "Ҏ"],
			q: ["্"],
			r: [
				"®",
				"Ʀ",
				"Ȑ",
				"Ɍ",
				"ʀ",
				"Я"
			],
			s: [
				"§",
				"Ϟ",
				"ϟ",
				"Ϩ"
			],
			t: [
				"Ł",
				"Ŧ",
				"ͳ"
			],
			u: ["Ʊ", "Ս"],
			v: ["ט"],
			w: [
				"Ш",
				"Ѡ",
				"Ѽ",
				"൰"
			],
			x: [
				"Ҳ",
				"Ӿ",
				"Ӽ",
				"ӽ"
			],
			y: [
				"¥",
				"Ұ",
				"Ӌ"
			],
			z: ["Ƶ", "ɀ"]
		};
		text.forEach(function(c) {
			c = c.toLowerCase();
			var chars = trap[c] || [" "];
			var rand = Math.floor(Math.random() * chars.length);
			if (typeof trap[c] !== "undefined") result += trap[c][rand];
			else result += c;
		});
		return result;
	};
}));
//#endregion
//#region node_modules/colors/lib/custom/zalgo.js
var require_zalgo = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module["exports"] = function zalgo(text, options) {
		text = text || "   he is here   ";
		var soul = {
			"up": [
				"̍",
				"̎",
				"̄",
				"̅",
				"̿",
				"̑",
				"̆",
				"̐",
				"͒",
				"͗",
				"͑",
				"̇",
				"̈",
				"̊",
				"͂",
				"̓",
				"̈",
				"͊",
				"͋",
				"͌",
				"̃",
				"̂",
				"̌",
				"͐",
				"̀",
				"́",
				"̋",
				"̏",
				"̒",
				"̓",
				"̔",
				"̽",
				"̉",
				"ͣ",
				"ͤ",
				"ͥ",
				"ͦ",
				"ͧ",
				"ͨ",
				"ͩ",
				"ͪ",
				"ͫ",
				"ͬ",
				"ͭ",
				"ͮ",
				"ͯ",
				"̾",
				"͛",
				"͆",
				"̚"
			],
			"down": [
				"̖",
				"̗",
				"̘",
				"̙",
				"̜",
				"̝",
				"̞",
				"̟",
				"̠",
				"̤",
				"̥",
				"̦",
				"̩",
				"̪",
				"̫",
				"̬",
				"̭",
				"̮",
				"̯",
				"̰",
				"̱",
				"̲",
				"̳",
				"̹",
				"̺",
				"̻",
				"̼",
				"ͅ",
				"͇",
				"͈",
				"͉",
				"͍",
				"͎",
				"͓",
				"͔",
				"͕",
				"͖",
				"͙",
				"͚",
				"̣"
			],
			"mid": [
				"̕",
				"̛",
				"̀",
				"́",
				"͘",
				"̡",
				"̢",
				"̧",
				"̨",
				"̴",
				"̵",
				"̶",
				"͜",
				"͝",
				"͞",
				"͟",
				"͠",
				"͢",
				"̸",
				"̷",
				"͡",
				" ҉"
			]
		}, all = [].concat(soul.up, soul.down, soul.mid);
		function randomNumber(range) {
			return Math.floor(Math.random() * range);
		}
		function is_char(character) {
			var bool = false;
			all.filter(function(i) {
				bool = i === character;
			});
			return bool;
		}
		function heComes(text, options) {
			var result = "", counts, l;
			options = options || {};
			options["up"] = options["up"] || true;
			options["mid"] = options["mid"] || true;
			options["down"] = options["down"] || true;
			options["size"] = options["size"] || "maxi";
			text = text.split("");
			for (l in text) {
				if (is_char(l)) continue;
				result = result + text[l];
				counts = {
					"up": 0,
					"down": 0,
					"mid": 0
				};
				switch (options.size) {
					case "mini":
						counts.up = randomNumber(8);
						counts.min = randomNumber(2);
						counts.down = randomNumber(8);
						break;
					case "maxi":
						counts.up = randomNumber(16) + 3;
						counts.min = randomNumber(4) + 1;
						counts.down = randomNumber(64) + 3;
						break;
					default:
						counts.up = randomNumber(8) + 1;
						counts.mid = randomNumber(6) / 2;
						counts.down = randomNumber(8) + 1;
						break;
				}
				var arr = [
					"up",
					"mid",
					"down"
				];
				for (var d in arr) {
					var index = arr[d];
					for (var i = 0; i <= counts[index]; i++) if (options[index]) result = result + soul[index][randomNumber(soul[index].length)];
				}
			}
			return result;
		}
		return heComes(text);
	};
}));
//#endregion
//#region node_modules/colors/lib/maps/america.js
var require_america = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var colors = require_colors();
	module["exports"] = (function() {
		return function(letter, i, exploded) {
			if (letter === " ") return letter;
			switch (i % 3) {
				case 0: return colors.red(letter);
				case 1: return colors.white(letter);
				case 2: return colors.blue(letter);
			}
		};
	})();
}));
//#endregion
//#region node_modules/colors/lib/maps/zebra.js
var require_zebra = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var colors = require_colors();
	module["exports"] = function(letter, i, exploded) {
		return i % 2 === 0 ? letter : colors.inverse(letter);
	};
}));
//#endregion
//#region node_modules/colors/lib/maps/rainbow.js
var require_rainbow = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var colors = require_colors();
	module["exports"] = (function() {
		var rainbowColors = [
			"red",
			"yellow",
			"green",
			"blue",
			"magenta"
		];
		return function(letter, i, exploded) {
			if (letter === " ") return letter;
			else return colors[rainbowColors[i++ % rainbowColors.length]](letter);
		};
	})();
}));
//#endregion
//#region node_modules/colors/lib/maps/random.js
var require_random = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var colors = require_colors();
	module["exports"] = (function() {
		var available = [
			"underline",
			"inverse",
			"grey",
			"yellow",
			"red",
			"green",
			"blue",
			"white",
			"cyan",
			"magenta"
		];
		return function(letter, i, exploded) {
			return letter === " " ? letter : colors[available[Math.round(Math.random() * (available.length - 1))]](letter);
		};
	})();
}));
//#endregion
//#region node_modules/colors/lib/colors.js
var require_colors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var colors = {};
	module["exports"] = colors;
	colors.themes = {};
	var ansiStyles = colors.styles = require_styles();
	var defineProps = Object.defineProperties;
	colors.supportsColor = require_supports_colors();
	if (typeof colors.enabled === "undefined") colors.enabled = colors.supportsColor;
	colors.stripColors = colors.strip = function(str) {
		return ("" + str).replace(/\x1B\[\d+m/g, "");
	};
	colors.stylize = function stylize(str, style) {
		return ansiStyles[style].open + str + ansiStyles[style].close;
	};
	var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
	var escapeStringRegexp = function(str) {
		if (typeof str !== "string") throw new TypeError("Expected a string");
		return str.replace(matchOperatorsRe, "\\$&");
	};
	function build(_styles) {
		var builder = function builder() {
			return applyStyle.apply(builder, arguments);
		};
		builder._styles = _styles;
		builder.__proto__ = proto;
		return builder;
	}
	var styles = (function() {
		var ret = {};
		ansiStyles.grey = ansiStyles.gray;
		Object.keys(ansiStyles).forEach(function(key) {
			ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), "g");
			ret[key] = { get: function() {
				return build(this._styles.concat(key));
			} };
		});
		return ret;
	})();
	var proto = defineProps(function colors() {}, styles);
	function applyStyle() {
		var args = arguments;
		var argsLen = args.length;
		var str = argsLen !== 0 && String(arguments[0]);
		if (argsLen > 1) for (var a = 1; a < argsLen; a++) str += " " + args[a];
		if (!colors.enabled || !str) return str;
		var nestedStyles = this._styles;
		var i = nestedStyles.length;
		while (i--) {
			var code = ansiStyles[nestedStyles[i]];
			str = code.open + str.replace(code.closeRe, code.open) + code.close;
		}
		return str;
	}
	function applyTheme(theme) {
		for (var style in theme) (function(style) {
			colors[style] = function(str) {
				return colors[theme[style]](str);
			};
		})(style);
	}
	colors.setTheme = function(theme) {
		if (typeof theme === "string") try {
			colors.themes[theme] = require(theme);
			applyTheme(colors.themes[theme]);
			return colors.themes[theme];
		} catch (err) {
			console.log(err);
			return err;
		}
		else applyTheme(theme);
	};
	function init() {
		var ret = {};
		Object.keys(styles).forEach(function(name) {
			ret[name] = { get: function() {
				return build([name]);
			} };
		});
		return ret;
	}
	var sequencer = function sequencer(map, str) {
		var exploded = str.split("");
		exploded = exploded.map(map);
		return exploded.join("");
	};
	colors.trap = require_trap();
	colors.zalgo = require_zalgo();
	colors.maps = {};
	colors.maps.america = require_america();
	colors.maps.zebra = require_zebra();
	colors.maps.rainbow = require_rainbow();
	colors.maps.random = require_random();
	for (var map in colors.maps) (function(map) {
		colors[map] = function(str) {
			return sequencer(colors.maps[map], str);
		};
	})(map);
	defineProps(colors, init());
}));
//#endregion
//#region node_modules/colors/safe.js
var require_safe = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module["exports"] = require_colors();
}));
//#endregion
//#region node_modules/cli-table/lib/utils.js
var require_utils = /* @__PURE__ */ __commonJSMin(((exports) => {
	/**
	* Repeats a string.
	*
	* @param {String} char(s)
	* @param {Number} number of times
	* @return {String} repeated string
	*/
	exports.repeat = function(str, times) {
		return Array(times + 1).join(str);
	};
	/**
	* Pads a string
	*
	* @api public
	*/
	exports.pad = function(str, len, pad, dir) {
		if (len + 1 >= str.length) switch (dir) {
			case "left":
				str = Array(len + 1 - str.length).join(pad) + str;
				break;
			case "both":
				var right = Math.ceil((padlen = len - str.length) / 2);
				var left = padlen - right;
				str = Array(left + 1).join(pad) + str + Array(right + 1).join(pad);
				break;
			default: str = str + Array(len + 1 - str.length).join(pad);
		}
		return str;
	};
	/**
	* Truncates a string
	*
	* @api public
	*/
	exports.truncate = function(str, length, chr) {
		chr = chr || "…";
		return str.length >= length ? str.substr(0, length - chr.length) + chr : str;
	};
	/**
	* Copies and merges options with defaults.
	*
	* @param {Object} defaults
	* @param {Object} supplied options
	* @return {Object} new (merged) object
	*/
	function options(defaults, opts) {
		for (var p in opts) {
			if (p === "__proto__" || p === "constructor" || p === "prototype") continue;
			if (opts[p] && opts[p].constructor && opts[p].constructor === Object) {
				defaults[p] = defaults[p] || {};
				options(defaults[p], opts[p]);
			} else defaults[p] = opts[p];
		}
		return defaults;
	}
	exports.options = options;
	exports.strlen = function(str) {
		return ("" + str).replace(/\u001b\[(?:\d*;){0,5}\d*m/g, "").split("\n").reduce(function(memo, s) {
			return s.length > memo ? s.length : memo;
		}, 0);
	};
}));
//#endregion
//#region node_modules/cli-table/lib/index.js
var require_lib = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/**
	* Module dependencies.
	*/
	var colors = require_safe(), utils = require_utils(), repeat = utils.repeat, truncate = utils.truncate, pad = utils.pad;
	/**
	* Table constructor
	*
	* @param {Object} options
	* @api public
	*/
	function Table(options) {
		this.options = utils.options({
			chars: {
				"top": "─",
				"top-mid": "┬",
				"top-left": "┌",
				"top-right": "┐",
				"bottom": "─",
				"bottom-mid": "┴",
				"bottom-left": "└",
				"bottom-right": "┘",
				"left": "│",
				"left-mid": "├",
				"mid": "─",
				"mid-mid": "┼",
				"right": "│",
				"right-mid": "┤",
				"middle": "│"
			},
			truncate: "…",
			colWidths: [],
			colAligns: [],
			style: {
				"padding-left": 1,
				"padding-right": 1,
				head: ["red"],
				border: ["grey"],
				compact: false
			},
			head: []
		}, options);
		if (options && options.rows) for (var i = 0; i < options.rows.length; i++) this.push(options.rows[i]);
	}
	/**
	* Inherit from Array.
	*/
	Table.prototype.__proto__ = Array.prototype;
	/**
	* Width getter
	*
	* @return {Number} width
	* @api public
	*/
	Table.prototype.__defineGetter__("width", function() {
		var str = this.toString().split("\n");
		if (str.length) return str[0].length;
		return 0;
	});
	/**
	* Render to a string.
	*
	* @return {String} table representation
	* @api public
	*/
	Table.prototype.render;
	Table.prototype.toString = function() {
		var ret = "", options = this.options, style = options.style, head = options.head, chars = options.chars, truncater = options.truncate, colWidths = options.colWidths || new Array(this.head.length), totalWidth = 0;
		if (!head.length && !this.length) return "";
		if (!colWidths.length) {
			var all_rows = this.slice(0);
			if (head.length) all_rows = all_rows.concat([head]);
			all_rows.forEach(function(cells) {
				if (typeof cells === "object" && cells.length) extractColumnWidths(cells);
				else {
					var header_cell = Object.keys(cells)[0], value_cell = cells[header_cell];
					colWidths[0] = Math.max(colWidths[0] || 0, get_width(header_cell) || 0);
					if (typeof value_cell === "object" && value_cell.length) extractColumnWidths(value_cell, 1);
					else colWidths[1] = Math.max(colWidths[1] || 0, get_width(value_cell) || 0);
				}
			});
		}
		totalWidth = (colWidths.length == 1 ? colWidths[0] : colWidths.reduce(function(a, b) {
			return a + b;
		})) + colWidths.length + 1;
		function extractColumnWidths(arr, offset) {
			var offset = offset || 0;
			arr.forEach(function(cell, i) {
				colWidths[i + offset] = Math.max(colWidths[i + offset] || 0, get_width(cell) || 0);
			});
		}
		function get_width(obj) {
			return typeof obj == "object" && obj.width != void 0 ? obj.width : (typeof obj == "object" ? utils.strlen(obj.text) : utils.strlen(obj)) + (style["padding-left"] || 0) + (style["padding-right"] || 0);
		}
		function line(line, left, right, intersection) {
			var width = 0, line = left + repeat(line, totalWidth - 2) + right;
			colWidths.forEach(function(w, i) {
				if (i == colWidths.length - 1) return;
				width += w + 1;
				line = line.substr(0, width) + intersection + line.substr(width + 1);
			});
			return applyStyles(options.style.border, line);
		}
		function lineTop() {
			var l = line(chars.top, chars["top-left"] || chars.top, chars["top-right"] || chars.top, chars["top-mid"]);
			if (l) ret += l + "\n";
		}
		function generateRow(items, style) {
			var cells = [], max_height = 0;
			if (!Array.isArray(items) && typeof items === "object") {
				var key = Object.keys(items)[0], value = items[key], first_cell_head = true;
				if (Array.isArray(value)) {
					items = value;
					items.unshift(key);
				} else items = [key, value];
			}
			items.forEach(function(item, i) {
				var contents = item.toString().split("\n").reduce(function(memo, l) {
					memo.push(string(l, i));
					return memo;
				}, []);
				var height = contents.length;
				if (height > max_height) max_height = height;
				cells.push({
					contents,
					height
				});
			});
			var lines = new Array(max_height);
			cells.forEach(function(cell, i) {
				cell.contents.forEach(function(line, j) {
					if (!lines[j]) lines[j] = [];
					if (style || first_cell_head && i === 0 && options.style.head) line = applyStyles(options.style.head, line);
					lines[j].push(line);
				});
				for (var j = cell.height, l = max_height; j < l; j++) {
					if (!lines[j]) lines[j] = [];
					lines[j].push(string("", i));
				}
			});
			var ret = "";
			lines.forEach(function(line, index) {
				if (ret.length > 0) ret += "\n" + applyStyles(options.style.border, chars.left);
				ret += line.join(applyStyles(options.style.border, chars.middle)) + applyStyles(options.style.border, chars.right);
			});
			return applyStyles(options.style.border, chars.left) + ret;
		}
		function applyStyles(styles, subject) {
			if (!subject) return "";
			styles.forEach(function(style) {
				subject = colors[style](subject);
			});
			return subject;
		}
		function string(str, index) {
			var str = String(typeof str == "object" && str.text ? str.text : str), length = utils.strlen(str), width = colWidths[index] - (style["padding-left"] || 0) - (style["padding-right"] || 0), align = options.colAligns[index] || "left";
			return repeat(" ", style["padding-left"] || 0) + (length == width ? str : length < width ? pad(str, width + (str.length - length), " ", align == "left" ? "right" : align == "middle" ? "both" : "left") : truncater ? truncate(str, width, truncater) : str) + repeat(" ", style["padding-right"] || 0);
		}
		if (head.length) {
			lineTop();
			ret += generateRow(head, style.head) + "\n";
		}
		if (this.length) this.forEach(function(cells, i) {
			if (!head.length && i == 0) lineTop();
			else if (!style.compact || i < !!head.length ? 1 : cells.length == 0) {
				var l = line(chars.mid, chars["left-mid"], chars["right-mid"], chars["mid-mid"]);
				if (l) ret += l + "\n";
			}
			if (cells.hasOwnProperty("length") && !cells.length) return;
			else ret += generateRow(cells) + "\n";
		});
		var l = line(chars.bottom, chars["bottom-left"] || chars.bottom, chars["bottom-right"] || chars.bottom, chars["bottom-mid"]);
		if (l) ret += l;
		else ret = ret.slice(0, -1);
		return ret;
	};
	/**
	* Module exports.
	*/
	module.exports = Table;
	module.exports.version = "0.0.1";
}));
//#endregion
//#region src/markdown/renderer.ts
function identity(str) {
	return str;
}
function cleanUpHtml(input) {
	return gray(input.replace(/(<([^>]+)>)/gi, ""));
}
function fixHardReturn(text, reflow) {
	return reflow ? text.replace(HARD_RETURN, "\n") : text;
}
function indentLines(indent, text) {
	return text.replace(/(^|\n)(.+)/g, "$1" + indent + "$2");
}
function identify(indent, text) {
	if (!text) return text;
	return indent + text.split("\n").join("\n" + indent);
}
function fixNestedLists(body, indent) {
	let regex = new RegExp("(\\S(?: |  )?)((?:" + indent + ")+)(" + POINT_REGEX + "(?:.*)+)$", "gm");
	return body.replace(regex, "$1\n" + indent + "$2$3");
}
function toSpaces(str) {
	return " ".repeat(str.length);
}
function toSpecialSpaces(str) {
	return SPECIAL_SPACE.repeat(str.length);
}
function bulletPointLine(indent, line) {
	if (isPointedLine(line, indent)) return line;
	if (!line.includes(SPECIAL_SPACE)) return toSpecialSpaces(BULLET_POINT) + line;
	return line;
}
function bulletPointLines(lines, indent) {
	let transform = bulletPointLine.bind(null, indent);
	return lines.split("\n").filter(identity).map(transform).join("\n");
}
function numberedLine(indent, line, num) {
	return isPointedLine(line, indent) ? {
		num: num + 1,
		line: line.replace(BULLET_POINT, numberedPoint(num + 1))
	} : {
		num,
		line: toSpaces(numberedPoint(num)) + line
	};
}
function numberedLines(lines, indent) {
	let transform = numberedLine.bind(null, indent);
	let num = 0;
	return lines.split("\n").filter(identity).map((line) => {
		const numbered = transform(line, num);
		num = numbered.num;
		return numbered.line;
	}).join("\n");
}
function list(body, ordered, indent) {
	body = body.trim();
	body = ordered ? numberedLines(body, indent) : bulletPointLines(body, indent);
	return body;
}
function section(text) {
	return text + "\n\n";
}
function undoColon(str) {
	return str.replace(COLON_REPLACER_REGEXP, ":");
}
function generateTableRow(text, escape = null) {
	if (!text) return [];
	escape = escape || identity;
	let lines = escape(text).split("\n");
	let data = [];
	lines.forEach(function(line) {
		if (!line) return;
		let parsed = line.replace(TABLE_ROW_WRAP_REGEXP, "").split(TABLE_CELL_SPLIT);
		data.push(parsed.splice(0, parsed.length - 1));
	});
	return data;
}
function escapeRegExp(str) {
	return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
function unescapeEntities(html) {
	return html.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"").replace(/&#39;/g, "'");
}
var TABLE_CELL_SPLIT, TABLE_ROW_WRAP, TABLE_ROW_WRAP_REGEXP, COLON_REPLACER, COLON_REPLACER_REGEXP, HARD_RETURN, defaultOptions, POINT_REGEX, isPointedLine, SPECIAL_SPACE, SPACE, BULLET_POINT, numberedPoint, links, Renderer;
var init_renderer = __esmMin((() => {
	init_object();
	init_styles();
	TABLE_CELL_SPLIT = "^*||*^";
	TABLE_ROW_WRAP = "*|*|*|*";
	TABLE_ROW_WRAP_REGEXP = new RegExp(escapeRegExp(TABLE_ROW_WRAP), "g");
	COLON_REPLACER = "*#COLON|*";
	COLON_REPLACER_REGEXP = new RegExp(escapeRegExp(COLON_REPLACER), "g");
	HARD_RETURN = /\r/g;
	defaultOptions = {
		code: identity,
		blockquote: identity,
		html: cleanUpHtml,
		heading: magenta,
		firstHeading: magenta,
		hr: identity,
		listitem: identity,
		list,
		table: identity,
		paragraph: identity,
		strong: bold,
		em: italic,
		codespan: yellow,
		del: strikethrough,
		link: underline,
		href: underline,
		text: identity,
		unescape: true,
		emoji: false,
		width: 80,
		showSectionPrefix: false,
		tab: 2,
		tableOptions: {}
	};
	POINT_REGEX = "(?:" + ["\\*", "\\d+\\."].join("|") + ")";
	isPointedLine = function(line, indent) {
		return line.match("^(?:" + indent + ")*" + POINT_REGEX) != null;
	};
	SPECIAL_SPACE = "\0\0\0";
	SPACE = " ";
	BULLET_POINT = "* ";
	numberedPoint = function(n) {
		return n + ". ";
	};
	links = /* @__PURE__ */ new Map();
	Renderer = class {
		options;
		highlightOptions;
		o;
		tab;
		tableSettings;
		unescape;
		transform;
		constructor(options = {}, highlightOptions = {}) {
			this.options = options;
			this.highlightOptions = highlightOptions;
			this.o = Object.assign({}, defaultOptions, options);
			this.tab = "  ";
			this.tableSettings = this.o.tableOptions;
			this.unescape = unescapeEntities;
			this.highlightOptions = toObject(highlightOptions);
			this.transform = this.compose(undoColon, this.unescape);
		}
		static hooks = {
			preprocess: (str) => str,
			postprocess: (str) => {
				return str.replace(new RegExp(SPECIAL_SPACE, "g"), SPACE);
			}
		};
		text(t) {
			return this.o.text(t);
		}
		code(code, lang, _escaped) {
			return "``` " + lang + "\n" + code + "\n```\n";
		}
		blockquote(quote) {
			return section(this.o.blockquote(identify(this.tab, quote.trim())));
		}
		html(html) {
			return this.o.html(html);
		}
		heading(text, level, _raw) {
			text = this.transform(text);
			return section(level === 1 ? this.o.firstHeading(text) : this.o.heading(text));
		}
		hr() {
			return `───\n`;
		}
		list(body, ordered) {
			body = this.o.list(body, ordered, this.tab);
			return section(fixNestedLists(indentLines(this.tab, body), this.tab));
		}
		listitem(text) {
			let transform = this.compose(this.o.listitem, this.transform);
			if (text.indexOf("\n") !== -1) text = text.trim();
			return "\n* " + transform(text);
		}
		checkbox(checked) {
			return "[" + (checked ? "X" : " ") + "]";
		}
		paragraph(text) {
			text = this.compose(this.o.paragraph, this.transform)(text);
			return section(text);
		}
		table(header, body) {
			let table = new (require_lib())(Object.assign({}, { head: generateTableRow(header, this.transform)[0] }, this.tableSettings));
			generateTableRow(body, this.transform).forEach(function(row) {
				table.push(row);
			});
			return section(this.o.table(table.toString()));
		}
		tablerow(content) {
			return TABLE_ROW_WRAP + content + "*|*|*|*\n";
		}
		tablecell(content, _flags) {
			return content + TABLE_CELL_SPLIT;
		}
		strong(text) {
			return this.o.strong(text);
		}
		em(text) {
			text = fixHardReturn(text, this.o.reflowText);
			return this.o.em(text);
		}
		codespan(text) {
			text = fixHardReturn(text, this.o.reflowText);
			return this.o.codespan(text.replace(/:/g, COLON_REPLACER));
		}
		br() {
			return "\n";
		}
		del(text) {
			return this.o.del(text);
		}
		link(href, title, text) {
			let prot;
			try {
				prot = decodeURIComponent(unescape(href)).replace(/[^\w:]/g, "").toLowerCase();
			} catch (e) {
				return "";
			}
			if (prot.startsWith("javascript:")) return "";
			if (text && href && text != href) links.set(text, href);
			if (text && text != href) return blue(text);
			let out = this.o.href(href);
			return this.o.link(out);
		}
		image(href, title, text) {
			return `![${text}](${href}${title ? ` "${title}"` : ""})`;
		}
		compose(...funcs) {
			return (...args) => {
				for (let i = funcs.length; i-- > 0;) args = [funcs[i].apply(this, args)];
				return args[0];
			};
		}
		static getLinks() {
			let res = [];
			for (let [text, href] of links.entries()) res.push(`${blue(text)}: ${href}`);
			links.clear();
			return res;
		}
	};
}));
//#endregion
//#region src/markdown/index.ts
function toFiletype(match) {
	if (!match) return TXT;
	let mapped = filetyepsMap[match];
	return string(mapped) ? mapped : match;
}
function parseDocuments(docs, opts = {}) {
	let lines = [];
	let highlights = [];
	let codes = [];
	let idx = 0;
	for (let doc of docs) {
		let currline = lines.length;
		let { content, filetype } = doc;
		let hls = doc.highlights;
		if (filetype == MARKDOWN) {
			let info = parseMarkdown(content, opts);
			codes.push(...info.codes.map((o) => {
				o.startLine = o.startLine + currline;
				o.endLine = o.endLine + currline;
				return o;
			}));
			highlights.push(...info.highlights.map((o) => {
				o.lnum = o.lnum + currline;
				return o;
			}));
			lines.push(...info.lines);
		} else {
			let parts = content.trim().split(/\r?\n/);
			let hlGroup = FiletypeHighlights[doc.filetype];
			if (string(hlGroup)) codes.push({
				hlGroup,
				startLine: currline,
				endLine: currline + parts.length
			});
			else codes.push({
				filetype: doc.filetype,
				startLine: currline,
				endLine: currline + parts.length
			});
			lines.push(...parts);
		}
		if (Array.isArray(hls)) highlights.push(...hls.map((o) => {
			return Object.assign({}, o, { lnum: o.lnum + currline });
		}));
		if (Array.isArray(doc.active)) {
			let arr = getHighlightItems(content, currline, doc.active);
			if (arr.length) highlights.push(...arr);
		}
		if (idx != docs.length - 1) {
			highlights.push({
				lnum: lines.length,
				hlGroup: DIVIDING_LINE_HI_GROUP,
				colStart: 0,
				colEnd: -1
			});
			lines.push(DIVIDE_CHARACTER);
		}
		idx = idx + 1;
	}
	return {
		lines,
		highlights,
		codes
	};
}
/**
* Get 'CocSearch' highlights from offset range
*/
function getHighlightItems(content, currline, active) {
	let res = [];
	let [start, end] = active;
	let lines = content.split(/\r?\n/);
	let used = 0;
	let inRange = false;
	for (let i = 0; i < lines.length; i++) {
		let line = lines[i];
		if (!inRange) {
			if (used + line.length > start) {
				inRange = true;
				let colStart = byteIndex(line, start - used);
				if (used + line.length > end) {
					let colEnd = byteIndex(line, end - used);
					inRange = false;
					res.push({
						colStart,
						colEnd,
						lnum: i + currline,
						hlGroup: ACTIVE_HL_GROUP
					});
					break;
				} else {
					let colEnd = byteLength(line);
					res.push({
						colStart,
						colEnd,
						lnum: i + currline,
						hlGroup: ACTIVE_HL_GROUP
					});
				}
			}
		} else if (used + line.length > end) {
			let colEnd = byteIndex(line, end - used);
			res.push({
				colStart: 0,
				colEnd,
				lnum: i + currline,
				hlGroup: ACTIVE_HL_GROUP
			});
			inRange = false;
			break;
		} else {
			let colEnd = byteLength(line);
			res.push({
				colStart: 0,
				colEnd,
				lnum: i + currline,
				hlGroup: ACTIVE_HL_GROUP
			});
		}
		used = used + line.length + 1;
	}
	return res;
}
/**
* Parse markdown for lines, highlights & codes
*/
function parseMarkdown(content, opts) {
	marked.setOptions({
		renderer: new Renderer(),
		gfm: true,
		breaks: boolean(opts.breaks) ? opts.breaks : true,
		hooks: Renderer.hooks
	});
	let lines = [];
	let highlights = [];
	let codes = [];
	let currline = 0;
	let inCodeBlock = false;
	let filetype;
	let startLnum = 0;
	let parsed = marked(content);
	let links = Renderer.getLinks();
	parsed = parsed.replace(/\s*$/, "");
	if (links.length) parsed = parsed + "\n\n" + links.join("\n");
	let parsedLines = parsed.split(/\n/);
	for (let i = 0; i < parsedLines.length; i++) {
		let line = parsedLines[i];
		if (!line.length) {
			if (!lines[lines.length - 1]) continue;
			let next = parsedLines[i + 1];
			if (!next || next.startsWith(DOTS) || next.startsWith(DIVIDE_CHARACTER)) continue;
			lines.push(line);
			currline++;
			continue;
		}
		if (opts.excludeImages && line.indexOf("![") !== -1) {
			line = line.replace(/\s*!\[.*?\]\(.*?\)/g, "");
			if (!stripAnsi(line).trim().length) continue;
		}
		let ms = line.match(/^\s*```\s*(\S+)?/);
		if (ms) {
			if (!inCodeBlock) {
				let pre = parsedLines[i - 1];
				if (pre && /^\s*```\s*/.test(pre)) {
					lines.push("");
					currline++;
				}
				inCodeBlock = true;
				filetype = toFiletype(ms[1]);
				startLnum = currline;
			} else {
				inCodeBlock = false;
				codes.push({
					filetype,
					startLine: startLnum,
					endLine: currline
				});
			}
			continue;
		}
		if (inCodeBlock) {
			lines.push(line);
			currline++;
			continue;
		}
		let res = parseAnsiHighlights(line, true);
		if (line === DIVIDE_LINE) highlights.push({
			hlGroup: DIVIDING_LINE_HI_GROUP,
			lnum: currline,
			colStart: 0,
			colEnd: -1
		});
		else if (res.highlights) for (let hi of res.highlights) {
			let { hlGroup, span } = hi;
			highlights.push({
				hlGroup,
				lnum: currline,
				colStart: span[0],
				colEnd: span[1]
			});
		}
		lines.push(res.line);
		currline++;
	}
	return {
		lines,
		highlights,
		codes
	};
}
var FiletypeHighlights, filetyepsMap, ACTIVE_HL_GROUP, DIVIDING_LINE_HI_GROUP, MARKDOWN, DOTS, TXT, DIVIDE_CHARACTER, DIVIDE_LINE;
var init_markdown = __esmMin((() => {
	init_marked_esm();
	init_ansiparse();
	init_is();
	init_node();
	init_string$1();
	init_renderer();
	FiletypeHighlights = /* @__PURE__ */ function(FiletypeHighlights) {
		FiletypeHighlights["Error"] = "CocErrorFloat";
		FiletypeHighlights["Warning"] = "CocWarningFloat";
		FiletypeHighlights["Info"] = "CocInfoFloat";
		FiletypeHighlights["Hint"] = "CocHintFloat";
		return FiletypeHighlights;
	}(FiletypeHighlights || {});
	filetyepsMap = {
		js: "javascript",
		ts: "typescript",
		bash: "sh"
	};
	ACTIVE_HL_GROUP = "CocFloatActive";
	DIVIDING_LINE_HI_GROUP = "CocFloatDividingLine";
	MARKDOWN = "markdown";
	DOTS = "```";
	TXT = "txt";
	DIVIDE_CHARACTER = "─";
	DIVIDE_LINE = "───";
}));
//#endregion
//#region src/model/floatFactory.ts
var debounceTime$10, FloatFactoryImpl;
var init_floatFactory = __esmMin((() => {
	init_events();
	init_markdown();
	init_util$7();
	init_array();
	init_constants();
	init_mutex();
	init_node();
	init_object();
	init_protocol();
	debounceTime$10 = getConditionValue(100, 10);
	FloatFactoryImpl = class {
		nvim;
		winid = 0;
		_bufnr = 0;
		closeTs;
		targetBufnr;
		mutex = new Mutex();
		disposables = [];
		cursor;
		onCursorMoved;
		constructor(nvim) {
			this.nvim = nvim;
			this.onCursorMoved = debounce(this._onCursorMoved.bind(this), debounceTime$10);
		}
		bindEvents(autoHide, alignTop) {
			for (let ev of [
				"InsertLeave",
				"InsertEnter",
				"BufEnter"
			]) events_default.on(ev, (bufnr) => {
				if (bufnr == this._bufnr) return;
				this.close();
			}, null, this.disposables);
			events_default.on("MenuPopupChanged", () => {
				if (events_default.pumAlignTop == alignTop) this.close();
			}, null, this.disposables);
			this.disposables.push(import_main$1.Disposable.create(() => {
				this.onCursorMoved.clear();
			}));
			events_default.on("CursorMoved", this.onCursorMoved.bind(this, autoHide), this, this.disposables);
			events_default.on("CursorMovedI", this.onCursorMoved.bind(this, autoHide), this, this.disposables);
		}
		unbind() {
			if (this.disposables.length) {
				disposeAll(this.disposables);
				this.disposables = [];
			}
		}
		_onCursorMoved(autoHide, bufnr, cursor) {
			if (bufnr == this._bufnr) return;
			if (bufnr == this.targetBufnr && equals(cursor, this.cursor)) return;
			if (bufnr != this.targetBufnr || !events_default.insertMode || autoHide) {
				this.close();
				return;
			}
		}
		/**
		* Create float window/popup at cursor position.
		* @deprecated use show method instead
		*/
		async create(docs, _allowSelection = false, offsetX = 0) {
			await this.show(docs, { offsetX });
		}
		/**
		* Show documentations in float window/popup around cursor.
		* Window and buffer are reused when possible.
		* Window is closed automatically on change buffer, InsertEnter, CursorMoved and CursorMovedI.
		* @param docs List of documentations.
		* @param config Configuration for floating window/popup.
		*/
		async show(docs, config = {}) {
			if (docs.length == 0 || docs.every((doc) => doc.content.length == 0)) {
				this.close();
				return;
			}
			let curr = Date.now();
			let release = await this.mutex.acquire();
			try {
				await this.createPopup(docs, config, curr);
				release();
			} catch (e) {
				this.nvim.echoError(e);
				release();
			}
		}
		async createPopup(docs, opts, timestamp) {
			docs = docs.filter((o) => o.content.trim().length > 0);
			let { lines, codes, highlights } = parseDocuments(docs, {
				excludeImages: opts.excludeImages,
				breaks: opts.breaks
			});
			let config = {
				codes,
				highlights,
				pumAlignTop: events_default.pumAlignTop,
				preferTop: typeof opts.preferTop === "boolean" ? opts.preferTop : false,
				offsetX: opts.offsetX || 0,
				title: opts.title || "",
				close: opts.close ? 1 : 0,
				rounded: opts.rounded ? 1 : 0,
				modes: opts.modes || [
					"n",
					"i",
					"ic",
					"s"
				],
				relative: opts.position === "fixed" ? "editor" : "cursor"
			};
			if (!isVim) {
				if (typeof opts.winblend === "number") config.winblend = opts.winblend;
				if (opts.focusable != null) config.focusable = opts.focusable ? 1 : 0;
				if (opts.shadow) config.shadow = 1;
			}
			if (opts.maxHeight) config.maxHeight = opts.maxHeight;
			if (opts.maxWidth) config.maxWidth = opts.maxWidth;
			if (opts.border === true) config.border = [
				1,
				1,
				1,
				1
			];
			else if (Array.isArray(opts.border) && !opts.border.every((o) => o == 0)) {
				config.border = opts.border.slice(0, 4);
				config.rounded = opts.rounded ? 1 : 0;
			}
			if (opts.highlight) config.highlight = opts.highlight;
			if (opts.borderhighlight) config.borderhighlight = opts.borderhighlight;
			if (opts.cursorline) config.cursorline = 1;
			for (let key of [
				"top",
				"left",
				"bottom",
				"right"
			]) if (typeof opts[key] === "number" && opts[key] >= 0) config[key] = opts[key];
			let autoHide = opts.autoHide === false ? false : true;
			if (autoHide) config.autohide = 1;
			this.unbind();
			let arr = await this.nvim.call("coc#dialog#create_cursor_float", [
				this.winid,
				this._bufnr,
				lines,
				config
			]);
			if (isFalsyOrEmpty(arr) || this.closeTs > timestamp) {
				let winid = arr && arr.length > 0 ? arr[2] : this.winid;
				if (winid) {
					this.winid = 0;
					this.nvim.call("coc#float#close", [winid], true);
					this.nvim.redrawVim();
				}
				return;
			}
			let [targetBufnr, cursor, winid, bufnr, alignTop] = arr;
			this.winid = winid;
			this._bufnr = bufnr;
			this.targetBufnr = targetBufnr;
			this.cursor = cursor;
			this.bindEvents(autoHide, alignTop == 1);
		}
		/**
		* Close float window
		*/
		close() {
			let { winid, nvim } = this;
			this.closeTs = Date.now();
			this.unbind();
			if (winid) {
				this.winid = 0;
				nvim.call("coc#float#close", [winid], true);
				nvim.redrawVim();
			}
		}
		checkRetrigger(bufnr) {
			if (this.winid && this.targetBufnr == bufnr) return true;
			return false;
		}
		get bufnr() {
			return this._bufnr;
		}
		get buffer() {
			return this.bufnr ? this.nvim.createBuffer(this.bufnr) : null;
		}
		get window() {
			return this.winid ? this.nvim.createWindow(this.winid) : null;
		}
		async activated() {
			if (!this.winid) return false;
			return await this.nvim.call("coc#float#valid", [this.winid]) != 0;
		}
		dispose() {
			this.cursor = void 0;
			this.onCursorMoved.clear();
			this.close();
		}
	};
}));
//#endregion
//#region src/model/regions.ts
var Regions;
var init_regions = __esmMin((() => {
	Regions = class {
		/**
		* ranges that never overlaps.
		*/
		ranges = [];
		get current() {
			let res = [];
			this.ranges.sort((a, b) => a[0] - b[0]);
			this.ranges.forEach((o) => {
				res.push(o[0], o[1]);
			});
			return res;
		}
		get isEmpty() {
			return this.ranges.length === 0;
		}
		clear() {
			this.ranges = [];
		}
		getRange(line) {
			for (const [start, end] of this.ranges) if (line >= start && line <= end) return [start, end];
		}
		/**
		* Get the span that not covered yet, all 0 based
		*/
		toUncoveredSpan(span, delta, max) {
			let [start, end] = span;
			start = Math.max(0, start - delta);
			end = Math.min(max, end + delta);
			let r = this.getRange(start);
			start = r ? r[1] : start;
			let s = this.getRange(end);
			if (s && r && s[0] === r[0] && s[1] === r[1]) return void 0;
			end = s ? s[0] : end;
			return [start, end];
		}
		/**
		* start, end 0 based, both inclusive
		*/
		add(start, end) {
			if (start > end) [start, end] = [end, start];
			let { ranges } = this;
			if (ranges.length == 0) ranges.push([start, end]);
			else {
				ranges.sort((a, b) => a[0] - b[0]);
				let s;
				let e;
				let removedIndexes = [];
				for (let i = 0; i < ranges.length; i++) {
					let r = ranges[i];
					if (r[1] < start - 1) continue;
					if (r[0] > end + 1) break;
					removedIndexes.push(i);
					if (s == null) s = Math.min(start, r[0]);
					e = Math.max(end, r[1]);
				}
				let newRanges = removedIndexes.length ? ranges.filter((_, i) => !removedIndexes.includes(i)) : ranges;
				this.ranges = newRanges;
				if (s != null && e != null) this.ranges.push([s, e]);
				else this.ranges.push([start, end]);
			}
		}
		has(start, end) {
			return this.ranges.findIndex((o) => o[0] <= start && o[1] >= end) !== -1;
		}
		static mergeSpans(ranges) {
			let res = [];
			for (let r of ranges) {
				let idx = res.findIndex((o) => !(r[1] < o[0] || r[0] > o[1]));
				if (idx == -1) res.push(r);
				else {
					let o = res[idx];
					res[idx] = [Math.min(r[0], o[0]), Math.max(r[1], o[1])];
				}
			}
			return res;
		}
	};
}));
//#endregion
//#region src/core/ui.ts
async function getCursorPosition(nvim) {
	let [line, content] = await nvim.eval(`[line('.')-1, strpart(getline('.'), 0, col('.') - 1)]`);
	return Position.create(line, content.length);
}
async function getVisibleRanges(nvim, bufnr, winid) {
	if (winid == null) {
		const spans = await nvim.call("coc#window#visible_ranges", [bufnr]);
		if (spans.length === 0) return [];
		return Regions.mergeSpans(spans);
	}
	const span = await nvim.call("coc#window#visible_range", [winid]);
	return span == null ? [] : [span];
}
async function getLineAndPosition(nvim) {
	let [text, lnum, content] = await nvim.eval(`[getline('.'), line('.'), strpart(getline('.'), 0, col('.') - 1)]`);
	return {
		text,
		line: lnum - 1,
		character: content.length
	};
}
function createFloatFactory(nvim, conf, defaults) {
	let opts = Object.assign({}, defaults, conf);
	let factory = new FloatFactoryImpl(nvim);
	return {
		get window() {
			return factory.window;
		},
		show: (docs, option) => {
			return factory.show(docs, option ? Object.assign({}, opts, option) : opts);
		},
		activated: () => {
			return factory.activated();
		},
		dispose: () => {
			factory.dispose();
		},
		checkRetrigger: (bufnr) => {
			return factory.checkRetrigger(bufnr);
		},
		close: () => {
			factory.close();
		}
	};
}
/**
* Prompt user for confirm, a float/popup window would be used when possible,
* use vim's |confirm()| function as callback.
* @param title The prompt text.
* @returns Result of confirm.
*/
async function showPrompt(nvim, title) {
	return await nvim.callAsync("coc#dialog#prompt_confirm", [title]) == 1;
}
/**
* Move cursor to position.
* @param position LSP position.
*/
async function moveTo(nvim, position, redraw) {
	await nvim.call("coc#cursor#move_to", [position.line, position.character]);
	if (redraw) nvim.command("redraw", true);
}
/**
* Get current cursor character offset in document,
* length of line break would always be 1.
* @returns Character offset.
*/
async function getOffset(nvim) {
	return await nvim.call("coc#cursor#char_offset");
}
/**
* Get screen position of current cursor(relative to editor),
* both `row` and `col` are 0 based.
* @returns Cursor screen position.
*/
async function getCursorScreenPosition(nvim) {
	let [row, col] = await nvim.call("coc#cursor#screen_pos");
	return {
		row,
		col
	};
}
async function echoLines(nvim, env, lines, truncate) {
	let cmdHeight = env.cmdheight;
	if (lines.length > cmdHeight && truncate) lines = lines.slice(0, cmdHeight);
	let maxLen = env.columns - 12;
	lines = lines.map((line) => {
		line = line.replace(/\n/g, " ");
		if (truncate) line = line.slice(0, maxLen);
		return line;
	});
	if (truncate && lines.length == cmdHeight) {
		let last = lines[lines.length - 1];
		lines[cmdHeight - 1] = `${last.length >= maxLen ? last.slice(0, -4) : last} ...`;
	}
	await nvim.call("coc#ui#echo_lines", [lines]);
}
/**
* Reveal message with highlight.
*/
function echoMessages(nvim, msg, messageType, messageLevel) {
	let hl = "Error";
	let level = 2;
	switch (messageType) {
		case "more":
			level = 0;
			hl = "MoreMsg";
			break;
		case "warning":
			level = 1;
			hl = "WarningMsg";
			break;
	}
	if (level >= toMessageLevel(messageLevel)) nvim[isVim ? "callTimer" : "call"]("coc#ui#echo_messages", [hl, ("[coc.nvim] " + msg).split("\n")], true);
}
function toMessageLevel(level) {
	switch (level) {
		case "error": return 2;
		case "warning": return 1;
		default: return 0;
	}
}
/**
* Mode could be 'char', 'line', 'cursor', 'v', 'V', '\x16'
*/
async function getSelection(nvim, mode) {
	if (mode === "currline") {
		let line = await nvim.call("line", ["."]);
		return Range.create(line - 1, 0, line, 0);
	}
	if (mode === "cursor") {
		let position = await getCursorPosition(nvim);
		return Range.create(position, position);
	}
	let res = await nvim.call("coc#cursor#get_selection", [operateModes.includes(mode) ? 1 : 0]);
	if (!res || res[0] == -1) return null;
	return Range.create(res[0], res[1], res[2], res[3]);
}
async function selectRange(nvim, range, redraw) {
	let { start, end } = range;
	let [line, endLine] = await nvim.eval(`[getline(${start.line + 1}),getline(${end.line + 1})]`);
	let col = line.length > 0 ? byteIndex(line, start.character) : 0;
	let endCol;
	let endLnum;
	let toEnd = end.character == 0;
	if (toEnd) {
		endLnum = end.line == 0 ? 0 : end.line - 1;
		endCol = byteLength(await nvim.call("getline", [endLnum + 1]));
	} else {
		endLnum = end.line;
		endCol = endLine.length > 0 ? byteIndex(endLine, end.character) : 0;
	}
	nvim.pauseNotification();
	nvim.command(`noa call cursor(${start.line + 1},${col + 1})`, true);
	nvim.command("normal! v", true);
	nvim.command(`noa call cursor(${endLnum + 1},${endCol})`, true);
	if (toEnd) nvim.command("normal! $", true);
	await nvim.resumeNotification(redraw);
}
var operateModes;
var init_ui$2 = __esmMin((() => {
	init_main$2();
	init_floatFactory();
	init_regions();
	init_constants();
	init_string$1();
	operateModes = [
		"char",
		"line",
		"block"
	];
}));
//#endregion
//#region src/core/dialogs.ts
var Dialogs;
var init_dialogs = __esmMin((() => {
	init_events();
	init_dialog();
	init_input();
	init_menu();
	init_picker();
	init_quickpick();
	init_util$7();
	init_array();
	init_constants();
	init_mutex();
	init_numbers();
	init_platform();
	init_string$1();
	init_funcs();
	init_ui$2();
	Dialogs = class {
		mutex = new Mutex();
		nvim;
		configuration;
		constructor() {}
		async showDialog(config) {
			return await this.mutex.use(async () => {
				let dialog = new Dialog(this.nvim, config);
				await dialog.show(this.dialogPreference);
				return dialog;
			});
		}
		async showPrompt(title) {
			return await this.mutex.use(() => {
				return showPrompt(this.nvim, title);
			});
		}
		async createQuickPick(config) {
			return await this.mutex.use(async () => {
				let quickpick = new QuickPick(this.nvim, this.dialogPreference);
				Object.assign(quickpick, config);
				return quickpick;
			});
		}
		async showMenuPicker(items, option, token) {
			return await this.mutex.use(async () => {
				if (token && token.isCancellationRequested) return -1;
				option = option || {};
				if (typeof option === "string") option = { title: option };
				let menu = new Menu(this.nvim, {
					items,
					...option
				}, token);
				let promise = new Promise((resolve) => {
					menu.onDidClose((selected) => {
						events_default.race(["BufHidden"], 20).finally(() => {
							resolve(selected);
						});
					});
				});
				await menu.show(this.dialogPreference);
				return await promise;
			});
		}
		/**
		* Shows a selection list.
		*/
		async showQuickPick(itemsOrItemsPromise, options, token) {
			options = defaultValue(options, {});
			const items = await Promise.resolve(itemsOrItemsPromise);
			if (isFalsyOrEmpty(items)) return void 0;
			let isText = items.some((s) => typeof s === "string");
			return await this.mutex.use(() => {
				return new Promise((resolve, reject) => {
					if (token.isCancellationRequested) return resolve(void 0);
					let quickpick = new QuickPick(this.nvim, this.dialogPreference);
					quickpick.items = items.map((o) => typeof o === "string" ? { label: o } : o);
					quickpick.title = toText(options.title);
					quickpick.placeholder = options.placeHolder ?? options["placeholder"];
					quickpick.canSelectMany = !!options.canPickMany;
					quickpick.matchOnDescription = options.matchOnDescription;
					quickpick.onDidFinish((items) => {
						if (items == null) return resolve(void 0);
						let arr = isText ? items.map((o) => o.label) : items;
						if (options.canPickMany) return resolve(arr);
						resolve(arr[0]);
					});
					quickpick.show().catch(reject);
				});
			});
		}
		async showPickerDialog(items, title, token) {
			return await this.mutex.use(async () => {
				if (token && token.isCancellationRequested) return;
				const picker = new Picker(this.nvim, {
					title,
					items: toPickerItems(items)
				}, token);
				let promise = new Promise((resolve) => {
					picker.onDidClose((selected) => {
						resolve(selected);
					});
				});
				await picker.show(this.dialogPreference);
				let picked = await promise;
				return picked == void 0 ? void 0 : items.filter((_, i) => picked.includes(i));
			});
		}
		async requestInput(title, env, value, option) {
			let { nvim } = this;
			let noPrompt = !env.terminal || !env.dialog || env.isVim && isWindows && !env.isCygwin;
			if (this.configuration.get("coc.preferences.promptInput") && !noPrompt) return await this.mutex.use(async () => {
				let input = new InputBox(nvim, toText(value));
				await input.show(title, Object.assign(this.inputPreference, defaultValue(option, {})));
				return await new Promise((resolve) => {
					input.onDidFinish((text) => {
						setTimeout(() => {
							resolve(text);
						}, 20);
					});
				});
			});
			else {
				let res = await callAsync(this.nvim, "input", [title + ": ", toText(value)]);
				nvim.command("normal! :<C-u>", true);
				return res;
			}
		}
		/**
		* Request selection by use inputlist of vim.
		*/
		async requestInputList(prompt, items) {
			let { nvim } = this;
			let list = items.map((text, i) => `${i + 1}. ${text}`);
			let res = await callAsync(this.nvim, "inputlist", [[`${prompt}:`, ...list]]);
			nvim.command("normal! :<C-u>", true);
			return res >= 1 && res <= items.length ? res - 1 : -1;
		}
		async createInputBox(title, value, option) {
			let input = new InputBox(this.nvim, toText(value));
			await input.show(title, Object.assign(this.inputPreference, defaultValue(option, {})));
			return input;
		}
		get inputPreference() {
			let config = this.configuration.get("dialog");
			return {
				rounded: !!config.rounded,
				maxWidth: toNumber(config.maxWidth, 80),
				highlight: defaultValue(config.floatHighlight, floatHighlightGroup),
				borderhighlight: defaultValue(config.floatBorderHighlight, floatHighlightGroup)
			};
		}
		get dialogPreference() {
			let config = this.configuration.get("dialog");
			return {
				rounded: !!config.rounded,
				maxWidth: toNumber(config.maxWidth, 80),
				maxHeight: config.maxHeight,
				floatHighlight: defaultValue(config.floatHighlight, floatHighlightGroup),
				floatBorderHighlight: defaultValue(config.floatBorderHighlight, floatHighlightGroup),
				pickerButtons: config.pickerButtons,
				pickerButtonShortcut: config.pickerButtonShortcut,
				confirmKey: toText(config.confirmKey),
				shortcutHighlight: toText(config.shortcutHighlight)
			};
		}
	};
}));
//#endregion
//#region src/core/highlights.ts
function convertHighlightItem(item) {
	return [
		item.hlGroup,
		item.lnum,
		item.colStart,
		item.colEnd,
		item.combine ? 1 : 0,
		item.start_incl ? 1 : 0,
		item.end_incl ? 1 : 0
	];
}
function isSame(item, curr) {
	return curr[0] == item.hlGroup && curr[1] === item.lnum && curr[2] === item.colStart && curr[3] === item.colEnd;
}
var Highlights$1;
var init_highlights$1 = __esmMin((() => {
	init_util$7();
	Highlights$1 = class {
		nvim;
		async diffHighlights(bufnr, ns, items, region, token) {
			let args = [
				bufnr,
				ns,
				Array.isArray(region) ? region[0] : 0,
				Array.isArray(region) ? region[1] : -1
			];
			let curr = await this.nvim.call("coc#highlight#get_highlights", args);
			if (!curr || token?.isCancellationRequested) return null;
			items.sort((a, b) => {
				if (a.lnum != b.lnum) return a.lnum - b.lnum;
				if (a.colStart != b.colStart) return a.colStart - b.colStart;
				return a.hlGroup > b.hlGroup ? 1 : -1;
			});
			let removeMarkers = [];
			let newItems = [];
			let itemIndex = 0;
			let maxIndex = items.length - 1;
			let maxLnum = 0;
			let map = /* @__PURE__ */ new Map();
			curr.forEach((o) => {
				maxLnum = Math.max(maxLnum, o[1]);
				let arr = map.get(o[1]);
				if (arr) arr.push(o);
				else map.set(o[1], [o]);
			});
			if (curr.length > 0) {
				let start = Array.isArray(region) ? region[0] : 0;
				for (let i = start; i <= maxLnum; i++) {
					let exists = defaultValue(map.get(i), []);
					exists.sort((a, b) => {
						if (a[2] != b[2]) return a[2] - b[2];
						return a[0] > b[0] ? 1 : -1;
					});
					let added = [];
					for (let j = itemIndex; j <= maxIndex; j++) {
						let o = items[j];
						if (o.lnum == i) {
							itemIndex = j + 1;
							added.push(o);
						} else {
							itemIndex = j;
							break;
						}
					}
					if (added.length == 0) removeMarkers.push(...exists.map((o) => o[4]));
					else if (exists.length == 0) newItems.push(...added.map((o) => convertHighlightItem(o)));
					else {
						let skip = 0;
						let min = Math.min(exists.length, added.length);
						while (skip < min) if (isSame(added[skip], exists[skip])) skip++;
						else break;
						let toRemove = exists.slice(skip).map((o) => o[4]);
						removeMarkers.push(...toRemove);
						newItems.push(...added.slice(skip).map((o) => convertHighlightItem(o)));
					}
				}
			}
			for (let i = itemIndex; i <= maxIndex; i++) newItems.push(convertHighlightItem(items[i]));
			return {
				remove: [],
				add: newItems,
				removeMarkers
			};
		}
		async applyDiffHighlights(bufnr, ns, priority, diff, notify) {
			let { nvim } = this;
			let { remove, add, removeMarkers } = diff;
			if (remove.length === 0 && add.length === 0 && removeMarkers.length === 0) return;
			nvim.pauseNotification();
			if (add.length) nvim.call("coc#highlight#set", [
				bufnr,
				ns,
				add,
				priority
			], true);
			if (removeMarkers.length) nvim.call("coc#highlight#del_markers", [
				bufnr,
				ns,
				removeMarkers
			], true);
			if (notify) nvim.resumeNotification(true, true);
			else await nvim.resumeNotification(true);
		}
	};
}));
//#endregion
//#region src/model/notification.ts
function toButtons(texts) {
	return texts.map((s, index) => {
		return {
			text: s,
			index
		};
	});
}
function toTitles(items) {
	return items.map((item) => typeof item === "string" ? item : item.title);
}
var Notification;
var init_notification = __esmMin((() => {
	init_events();
	init_util$7();
	init_array();
	init_string$1();
	Notification = class {
		nvim;
		config;
		disposables = [];
		bufnr;
		_winid;
		constructor(nvim, config, attachEvents = true) {
			this.nvim = nvim;
			this.config = config;
			if (attachEvents) {
				events_default.on("BufWinLeave", (bufnr) => {
					if (bufnr == this.bufnr) {
						this.dispose();
						if (config.callback) config.callback(-1);
					}
				}, null, this.disposables);
				let btns = toArray(config.buttons).filter((o) => o.disabled != true);
				events_default.on("FloatBtnClick", (bufnr, idx) => {
					if (bufnr == this.bufnr) {
						this.dispose();
						if (config.callback) config.callback(defaultValue(btns[idx]?.index, -1));
					}
				}, null, this.disposables);
			}
		}
		get lines() {
			return this.config.content ? this.config.content.split(/\r?\n/) : [];
		}
		async show(preferences) {
			let { nvim } = this;
			let { buttons, kind, title } = this.config;
			let opts = Object.assign({}, preferences);
			opts.kind = toText(kind);
			opts.close = this.config.closable === true ? 1 : 0;
			if (title) opts.title = title;
			if (preferences.border) opts.borderhighlight = kind ? `CocNotification${kind[0].toUpperCase()}${kind.slice(1)}` : preferences.highlight;
			if (Array.isArray(buttons)) opts.actions = buttons.filter((o) => !o.disabled).map((o) => o.text);
			let res = await nvim.call("coc#notify#create", [this.lines, opts]);
			this._winid = res[0];
			this.bufnr = res[1];
		}
		get winid() {
			return this._winid;
		}
		dispose() {
			let { winid } = this;
			if (winid) {
				this.nvim.call("coc#notify#close", [winid], true);
				this.nvim.redrawVim();
			}
			this.bufnr = void 0;
			this._winid = void 0;
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/model/progress.ts
function formatMessage(title, message, total) {
	let parts = [];
	if (title) parts.push(title);
	if (message) parts.push(message);
	if (total) parts.push(total + "%");
	return parts.join(" ");
}
var logger$49, ProgressNotification;
var init_progress$1 = __esmMin((() => {
	init_events();
	init_logger$2();
	init_protocol();
	init_notification();
	logger$49 = createLogger$1("model-progress");
	ProgressNotification = class extends Notification {
		option;
		tokenSource;
		_onDidFinish = new import_main$1.Emitter();
		onDidFinish = this._onDidFinish.event;
		constructor(nvim, option) {
			super(nvim, {
				kind: "progress",
				title: option.title,
				closable: option.cancellable
			}, false);
			this.option = option;
			this.disposables.push(this._onDidFinish);
			events_default.on("BufWinLeave", this.cancelProgress, null, this.disposables);
		}
		cancelProgress = (bufnr) => {
			if (bufnr == this.bufnr && this.tokenSource) this.tokenSource.cancel();
		};
		async show(preferences) {
			let { task } = this.option;
			let tokenSource = this.tokenSource = new import_main$1.CancellationTokenSource();
			this.disposables.push(tokenSource);
			let total = 0;
			if (!preferences.disabled) await super.show(preferences);
			else logger$49.warn(`progress window disabled by configuration "notification.disabledProgressSources"`);
			task({ report: (p) => {
				if (!this.winid) return;
				let { nvim } = this;
				if (p.increment) {
					total += p.increment;
					nvim.call("coc#window#set_var", [
						this.winid,
						"percent",
						`${total}%`
					], true);
				}
				if (p.message) nvim.call("coc#window#set_var", [
					this.winid,
					"message",
					p.message
				], true);
			} }, tokenSource.token).then((res) => {
				this._onDidFinish.fire(res);
				this.dispose();
			}, (err) => {
				if (err) this.nvim.echoError(err);
				this._onDidFinish.fire(void 0);
				this.dispose();
			});
		}
	};
}));
//#endregion
//#region src/core/notifications.ts
var Notifications;
var init_notifications$1 = __esmMin((() => {
	init_notification();
	init_progress$1();
	init_util$7();
	init_extensionRegistry();
	init_numbers();
	init_protocol();
	init_string$1();
	init_funcs();
	init_ui$2();
	Notifications = class {
		dialogs;
		nvim;
		configuration;
		statusLine;
		_history = [];
		constructor(dialogs) {
			this.dialogs = dialogs;
		}
		getCurrentTimestamp() {
			const now = /* @__PURE__ */ new Date();
			return `${now.getFullYear()}-${(now.getMonth() + 1).toString().padStart(2, "0")}-${now.getDate().toString().padStart(2, "0")}T${now.getHours().toString().padStart(2, "0")}:${now.getMinutes().toString().padStart(2, "0")}:${now.getSeconds().toString().padStart(2, "0")}.${now.getMilliseconds().toString().padStart(3, "0")}`;
		}
		async _showMessage(kind, message, items) {
			this._history.push({
				time: this.getCurrentTimestamp(),
				kind,
				message
			});
			let msgDialogKind = this.messageDialogKind;
			if (this.enableMessageDialog === true) msgDialogKind = "notification";
			if (items.length > 0) switch (msgDialogKind) {
				case "confirm": return await this.showConfirm(message, items, kind);
				case "menu": return await this.showMenuPicker(`Choose an action`, message, `Coc${kind}Float`, items);
				case "notification": {
					let texts = items.map((o) => typeof o === "string" ? o : o.title);
					return items[await this.createNotification(kind.toLowerCase(), message, texts)];
				}
				default: throw new Error(`Unexpected messageDialogKind: ${this.messageDialogKind}`);
			}
			else {
				let msgReportKind = this.messageReportKind;
				switch (msgReportKind) {
					case "echo": {
						let msgType = kind == "Info" ? "more" : kind == "Error" ? "error" : "warning";
						this.echoMessages(message, msgType);
						break;
					}
					case "notification":
						await this.createNotification(kind.toLowerCase(), message, []);
						break;
					default: throw new Error(`Unexpected messageReportKind: ${msgReportKind}`);
				}
				return;
			}
		}
		get history() {
			return this._history;
		}
		clearHistory() {
			this._history = [];
		}
		createNotification(kind, message, items) {
			return new Promise((resolve, reject) => {
				let config = {
					kind,
					content: message,
					buttons: toButtons(items),
					callback: (idx) => {
						resolve(idx);
					}
				};
				new Notification(this.nvim, config).show(this.getNotificationPreference()).catch(reject);
				if (items.length == 0) resolve(-1);
			});
		}
		async showConfirm(message, items, kind) {
			let choices = toTitles(items).map((s, i) => `${i + 1}${s}`);
			return items[await callAsync(this.nvim, "confirm", [
				message,
				choices.join("\n"),
				1,
				kind
			]) - 1];
		}
		async showMenuPicker(title, content, hlGroup, items) {
			let texts = items.map((o) => typeof o === "string" ? o : o.title);
			return items[await this.dialogs.showMenuPicker(texts, {
				position: "center",
				content,
				title: title.replace(/\r?\n/, " "),
				borderhighlight: hlGroup
			})];
		}
		async showNotification(config, stack) {
			await new Notification(this.nvim, config).show(this.getNotificationPreference(stack));
		}
		echoMessages(msg, messageType) {
			let level = this.configuration.get("coc.preferences.messageLevel", "more");
			echoMessages(this.nvim, msg, messageType, level);
		}
		async withProgress(options, task) {
			let config = this.configuration.get("notification");
			if (!options.cancellable && config.statusLineProgress) return await this.createStatusLineProgress(options, task);
			let progress = new ProgressNotification(this.nvim, {
				task,
				title: options.title,
				cancellable: options.cancellable
			});
			let minWidth = toNumber(config.minProgressWidth, 40);
			let promise = new Promise((resolve) => {
				progress.onDidFinish(resolve);
			});
			await progress.show(Object.assign(this.getNotificationPreference(options.source, true), { minWidth }));
			return await promise;
		}
		async createStatusLineProgress(options, task) {
			let { title } = options;
			let statusItem = this.statusLine.createStatusBarItem(0, true);
			statusItem.text = toText(title);
			statusItem.show();
			let total = 0;
			let result = await task({ report: (p) => {
				if (p.increment) total += p.increment;
				statusItem.text = formatMessage(title, p.message, total).replace(/\r?\n/g, " ");
			} }, import_main$1.CancellationToken.None);
			statusItem.dispose();
			return result;
		}
		get enableMessageDialog() {
			return this.configuration.get("coc.preferences.enableMessageDialog", false);
		}
		get messageDialogKind() {
			return this.configuration.get("coc.preferences.messageDialogKind", "confirm");
		}
		get messageReportKind() {
			return this.configuration.get("coc.preferences.messageReportKind", "echo");
		}
		getNotificationPreference(source, isProgress = false) {
			if (!source) source = parseExtensionName(Error().stack);
			let config = this.configuration.get("notification");
			let disabled = false;
			if (isProgress) {
				let disabledList = defaultValue(config.disabledProgressSources, []);
				disabled = Array.isArray(disabledList) && (disabledList.includes("*") || disabledList.includes(source));
			}
			return {
				border: config.border,
				focusable: config.focusable,
				marginRight: toNumber(config.marginRight, 10),
				timeout: toNumber(config.timeout, 1e4),
				maxWidth: toNumber(config.maxWidth, 60),
				maxHeight: toNumber(config.maxHeight, 10),
				highlight: config.highlightGroup,
				winblend: toNumber(config.winblend, 30),
				disabled,
				source
			};
		}
	};
}));
//#endregion
//#region src/model/terminal.ts
var TerminalModel;
var init_terminal = __esmMin((() => {
	TerminalModel = class {
		cmd;
		args;
		nvim;
		_name;
		strictEnv;
		bufnr;
		pid = 0;
		exitStatus;
		constructor(cmd, args, nvim, _name, strictEnv) {
			this.cmd = cmd;
			this.args = args;
			this.nvim = nvim;
			this._name = _name;
			this.strictEnv = strictEnv;
		}
		async start(cwd, env) {
			let { nvim } = this;
			let cmd = [this.cmd, ...this.args];
			let [bufnr, pid] = await nvim.call("coc#terminal#start", [
				cmd,
				cwd,
				env || {},
				!!this.strictEnv
			]);
			this.bufnr = bufnr;
			this.pid = pid;
		}
		onExit(code) {
			this.exitStatus = { code: code === -1 ? void 0 : code };
		}
		get name() {
			return this._name || this.cmd;
		}
		get processId() {
			return Promise.resolve(this.pid);
		}
		sendText(text, addNewLine = true) {
			if (!this.bufnr) return;
			this.nvim.call("coc#terminal#send", [
				this.bufnr,
				text,
				addNewLine
			], true);
		}
		async show(preserveFocus) {
			let { bufnr, nvim } = this;
			if (!bufnr) return false;
			return await nvim.call("coc#terminal#show", [bufnr, { preserveFocus }]);
		}
		async hide() {
			let { bufnr, nvim } = this;
			if (!bufnr) return;
			await nvim.eval(`coc#window#close(bufwinid(${bufnr}))`);
		}
		dispose() {
			if (!this.exitStatus) this.exitStatus = { code: void 0 };
			let { bufnr, nvim } = this;
			if (!bufnr) return;
			this.bufnr = void 0;
			nvim.call("coc#terminal#close", [bufnr], true);
		}
	};
}));
//#endregion
//#region src/core/terminals.ts
var Terminals;
var init_terminals = __esmMin((() => {
	init_events();
	init_terminal();
	init_util$7();
	init_object();
	init_protocol();
	Terminals = class {
		_terminals = /* @__PURE__ */ new Map();
		disposables = [];
		_onDidOpenTerminal = new import_main$1.Emitter();
		_onDidCloseTerminal = new import_main$1.Emitter();
		onDidCloseTerminal = this._onDidCloseTerminal.event;
		onDidOpenTerminal = this._onDidOpenTerminal.event;
		constructor() {
			events_default.on("BufUnload", (bufnr) => {
				if (this._terminals.has(bufnr)) {
					let terminal = this._terminals.get(bufnr);
					this._onDidCloseTerminal.fire(terminal);
					this._terminals.delete(bufnr);
				}
			}, null, this.disposables);
			events_default.on("TermExit", (bufnr, status) => {
				let terminal = this._terminals.get(bufnr);
				if (terminal) {
					terminal.onExit(status);
					terminal.dispose();
				}
			}, null, this.disposables);
		}
		get terminals() {
			return Array.from(this._terminals.values());
		}
		async createTerminal(nvim, opts) {
			let cwd = opts.cwd;
			let cmd = opts.shellPath;
			let args = opts.shellArgs;
			if (!cmd) cmd = await nvim.getOption("shell");
			if (!cwd) cwd = await nvim.call("getcwd");
			let terminal = new TerminalModel(cmd, args || [], nvim, opts.name, opts.strictEnv);
			await terminal.start(cwd, opts.env);
			this._terminals.set(terminal.bufnr, terminal);
			this._onDidOpenTerminal.fire(terminal);
			return terminal;
		}
		async runTerminalCommand(nvim, cmd, cwd, keepfocus) {
			return await nvim.callAsync("coc#ui#run_terminal", {
				cmd,
				cwd,
				keepfocus: keepfocus ? 1 : 0
			});
		}
		async openTerminal(nvim, cmd, opts) {
			return await nvim.call("coc#ui#open_terminal", {
				cmd,
				...toObject(opts)
			});
		}
		reset() {
			for (let terminal of this._terminals.values()) terminal.dispose();
			this._terminals.clear();
		}
		dispose() {
			this._onDidOpenTerminal.dispose();
			this._onDidCloseTerminal.dispose();
			disposeAll(this.disposables);
			this.reset();
		}
	};
}));
//#endregion
//#region data/schema.json
var definitions = {
	"floatConfig": {
		"type": "object",
		"properties": {
			"border": {
				"type": "boolean",
				"default": false,
				"description": "Set to true to use borders."
			},
			"rounded": {
				"type": "boolean",
				"default": false,
				"description": "Use rounded borders when border is true."
			},
			"highlight": {
				"type": "string",
				"default": "CocFloating",
				"description": "Background highlight group of float window."
			},
			"title": {
				"type": "string",
				"default": "",
				"description": "Title used by float window."
			},
			"borderhighlight": {
				"type": "string",
				"default": "CocFloatBorder",
				"description": "Border highlight group of float window."
			},
			"close": {
				"type": "boolean",
				"default": false,
				"description": "Set to true to draw close icon"
			},
			"maxWidth": {
				"type": "integer",
				"description": "Maximum width of float window, include border."
			},
			"maxHeight": {
				"type": "integer",
				"minimum": 2,
				"description": "Maximum height of float window, include border."
			},
			"focusable": {
				"type": "boolean",
				"default": true,
				"description": "Enable focus by user actions (wincmds, mouse events), neovim only."
			},
			"shadow": {
				"type": "boolean",
				"default": false,
				"description": "Drop shadow effect by blending with the background, neovim only."
			},
			"winblend": {
				"type": "integer",
				"default": 0,
				"minimum": 0,
				"maximum": 100,
				"description": "Enables pseudo-transparency by set 'winblend' option of window, neovim only."
			},
			"position": {
				"type": "string",
				"default": "auto",
				"description": "Controls how floating windows are positioned. When set to `'fixed'`, the window will be positioned according to the `top`, `bottom`, `left`, and `right` settings. When set to `'auto'`, the window follows the default position.",
				"enum": ["fixed", "auto"]
			},
			"top": {
				"type": "number",
				"description": "Distance from the top of the editor window in characters. Only takes effect when `position` is set to `'fixed'`. Will be ignored if `bottom` is set."
			},
			"bottom": {
				"type": "number",
				"description": "Distance from the bottom of the editor window in characters. Only takes effect when `position` is set to `'fixed'`. Takes precedence over `top` if both are set."
			},
			"left": {
				"type": "number",
				"description": "Distance from the left edge of the editor window in characters. Only takes effect when `position` is set to `'fixed'`. Will be ignored if `right` is set."
			},
			"right": {
				"type": "number",
				"description": "Distance from the right edge of the editor window in characters. Only takes effect when `position` is set to `'fixed'`. Takes precedence over `left` if both are set."
			}
		}
	},
	"languageserver.enable": {
		"type": "boolean",
		"description": "Enable the languageserver, restart coc.nvim required after change.",
		"default": true
	},
	"languageserver.filetypes": {
		"type": "array",
		"default": [],
		"description": "Supported filetypes, add * in array for all filetypes.",
		"items": { "type": "string" }
	},
	"languageserver.maxRestartCount": {
		"type": "integer",
		"default": 4,
		"minimum": 1,
		"description": "Maximum restart count when server closed in the last 3 minutes."
	},
	"languageserver.cwd": {
		"type": "string",
		"default": "",
		"description": "Working directory of languageserver, absolute path or relative to workspace folder, use workspace root by default"
	},
	"languageserver.settings": {
		"type": "object",
		"default": {},
		"description": "Settings of languageserver"
	},
	"languageserver.initializationOptions": {
		"type": "object",
		"default": {},
		"description": "initializationOptions passed to languageserver"
	},
	"languageserver.env": {
		"type": "object",
		"default": null,
		"description": "Environment variables for child process."
	},
	"languageserver.stdioEncoding": {
		"type": "string",
		"default": "utf8",
		"description": "Encoding used for stdio of child process."
	},
	"languageserver.rootPatterns": {
		"type": "array",
		"default": [],
		"description": "Root patterns used to resolve rootPath from current file, default to workspace root",
		"items": { "type": "string" }
	},
	"languageserver.requireRootPattern": {
		"type": "boolean",
		"default": false,
		"description": "If true, doesn't start server when root pattern not found."
	},
	"languageserver.ignoredRootPaths": {
		"type": "array",
		"default": [],
		"description": "Absolute root paths that language server should not use as rootPath, higher priority than rootPatterns.",
		"items": { "type": "string" }
	},
	"languageserver.additionalSchemes": {
		"type": "array",
		"default": [],
		"description": "Additional URI schemes, default schemes including file & untitled.",
		"items": { "type": "string" }
	},
	"languageserver.revealOutputChannelOn": {
		"type": "string",
		"default": "never",
		"description": "Configure message level to show the output channel buffer",
		"enum": [
			"info",
			"warn",
			"error",
			"never"
		]
	},
	"languageserver.progressOnInitialization": {
		"type": "boolean",
		"default": false,
		"description": "Enable progress report on languageserver initialize."
	},
	"languageserver.trace.server": {
		"type": "string",
		"default": "off",
		"enum": [
			"off",
			"messages",
			"verbose"
		],
		"description": "Trace level of communication between server and client"
	},
	"languageserver.trace.server.verbosity": {
		"type": "string",
		"default": "off",
		"enum": [
			"off",
			"messages",
			"compact",
			"verbose"
		],
		"description": "Trace level of communication between server and client"
	},
	"languageserver.trace.server.format": {
		"type": "string",
		"default": "text",
		"enum": ["text", "json"],
		"description": "Text format of trace messages."
	},
	"languageserver.disableDynamicRegister": {
		"type": "boolean",
		"default": false,
		"description": "Disable dynamic registerCapability feature for this languageserver to avoid duplicate feature registration."
	},
	"languageserver.disableSnippetCompletion": {
		"type": "boolean",
		"default": false,
		"description": "Disable completion snippet feature for this languageserver, the languageserver may not respect it."
	},
	"languageserver.disabledFeatures": {
		"type": "array",
		"default": [],
		"description": "Disabled features for this languageserver.",
		"items": {
			"type": "string",
			"enum": [
				"completion",
				"configuration",
				"workspaceFolders",
				"diagnostics",
				"willSave",
				"willSaveUntil",
				"didSaveTextDocument",
				"fileSystemWatcher",
				"hover",
				"signatureHelp",
				"definition",
				"references",
				"documentHighlight",
				"documentSymbol",
				"workspaceSymbol",
				"codeAction",
				"codeLens",
				"formatting",
				"documentFormatting",
				"documentRangeFormatting",
				"documentOnTypeFormatting",
				"rename",
				"documentLink",
				"executeCommand",
				"pullConfiguration",
				"typeDefinition",
				"implementation",
				"declaration",
				"color",
				"foldingRange",
				"selectionRange",
				"progress",
				"callHierarchy",
				"linkedEditing",
				"inlayHint",
				"inlineValue",
				"typeHierarchy",
				"pullDiagnostic",
				"fileEvents",
				"semanticTokens"
			]
		}
	},
	"languageserver.formatterPriority": {
		"type": "integer",
		"default": 0,
		"description": "Priority of this languageserver's formatter."
	},
	"languageServerSocket": {
		"type": "object",
		"required": ["port", "filetypes"],
		"additionalProperties": false,
		"properties": {
			"port": {
				"type": "integer",
				"description": "Port number of socket server"
			},
			"host": {
				"type": "string",
				"default": "127.0.0.1",
				"description": "Host of server"
			},
			"enable": { "$ref": "#/definitions/languageserver.enable" },
			"disableSnippetCompletion": { "$ref": "#/definitions/languageserver.disableSnippetCompletion" },
			"disableDynamicRegister": { "$ref": "#/definitions/languageserver.disableDynamicRegister" },
			"disabledFeatures": { "$ref": "#/definitions/languageserver.disabledFeatures" },
			"formatterPriority": { "$ref": "#/definitions/languageserver.formatterPriority" },
			"rootPatterns": { "$ref": "#/definitions/languageserver.rootPatterns" },
			"requireRootPattern": { "$ref": "#/definitions/languageserver.requireRootPattern" },
			"ignoredRootPaths": { "$ref": "#/definitions/languageserver.ignoredRootPaths" },
			"maxRestartCount": { "$ref": "#/definitions/languageserver.maxRestartCount" },
			"filetypes": { "$ref": "#/definitions/languageserver.filetypes" },
			"additionalSchemes": { "$ref": "#/definitions/languageserver.additionalSchemes" },
			"revealOutputChannelOn": { "$ref": "#/definitions/languageserver.revealOutputChannelOn" },
			"progressOnInitialization": { "$ref": "#/definitions/languageserver.progressOnInitialization" },
			"initializationOptions": { "$ref": "#/definitions/languageserver.initializationOptions" },
			"settings": { "$ref": "#/definitions/languageserver.settings" },
			"stdioEncoding": { "$ref": "#/definitions/languageserver.stdioEncoding" },
			"trace.server": { "$ref": "#/definitions/languageserver.trace.server" },
			"trace.server.verbosity": { "$ref": "#/definitions/languageserver.trace.server.verbosity" },
			"trace.server.format": { "$ref": "#/definitions/languageserver.trace.server.format" }
		}
	},
	"languageServerModule": {
		"type": "object",
		"required": ["module", "filetypes"],
		"additionalProperties": false,
		"properties": {
			"module": {
				"type": "string",
				"default": "",
				"description": "Absolute path of Javascript file, should works in IPC mode"
			},
			"args": {
				"type": "array",
				"default": [],
				"description": "Extra arguments of module",
				"items": { "type": "string" }
			},
			"runtime": {
				"type": "string",
				"default": "",
				"description": "Absolute path of node runtime."
			},
			"execArgv": {
				"type": "array",
				"default": [],
				"description": "ARGV passed to node when using module, normally used for debugging, ex: [\"--nolazy\", \"--inspect-brk=6045\"]",
				"items": { "type": "string" }
			},
			"transport": {
				"type": "string",
				"default": "ipc",
				"description": "Transport kind used by server, could be 'ipc', 'stdio', 'socket' and 'pipe'",
				"enum": [
					"ipc",
					"stdio",
					"socket",
					"pipe"
				]
			},
			"transportPort": {
				"type": "integer",
				"description": "Port number used when transport is 'socket'"
			},
			"enable": { "$ref": "#/definitions/languageserver.enable" },
			"disableSnippetCompletion": { "$ref": "#/definitions/languageserver.disableSnippetCompletion" },
			"disableDynamicRegister": { "$ref": "#/definitions/languageserver.disableDynamicRegister" },
			"disabledFeatures": { "$ref": "#/definitions/languageserver.disabledFeatures" },
			"formatterPriority": { "$ref": "#/definitions/languageserver.formatterPriority" },
			"rootPatterns": { "$ref": "#/definitions/languageserver.rootPatterns" },
			"requireRootPattern": { "$ref": "#/definitions/languageserver.requireRootPattern" },
			"ignoredRootPaths": { "$ref": "#/definitions/languageserver.ignoredRootPaths" },
			"maxRestartCount": { "$ref": "#/definitions/languageserver.maxRestartCount" },
			"filetypes": { "$ref": "#/definitions/languageserver.filetypes" },
			"additionalSchemes": { "$ref": "#/definitions/languageserver.additionalSchemes" },
			"revealOutputChannelOn": { "$ref": "#/definitions/languageserver.revealOutputChannelOn" },
			"progressOnInitialization": { "$ref": "#/definitions/languageserver.progressOnInitialization" },
			"initializationOptions": { "$ref": "#/definitions/languageserver.initializationOptions" },
			"settings": { "$ref": "#/definitions/languageserver.settings" },
			"stdioEncoding": { "$ref": "#/definitions/languageserver.stdioEncoding" },
			"trace.server": { "$ref": "#/definitions/languageserver.trace.server" },
			"trace.server.verbosity": { "$ref": "#/definitions/languageserver.trace.server.verbosity" },
			"trace.server.format": { "$ref": "#/definitions/languageserver.trace.server.format" }
		}
	},
	"languageServerCommand": {
		"type": "object",
		"required": ["command", "filetypes"],
		"additionalProperties": false,
		"properties": {
			"command": {
				"type": "string",
				"default": "",
				"description": "Executable in $PATH to start languageserver, should not used with module"
			},
			"args": {
				"type": "array",
				"default": [],
				"description": "Arguments of command",
				"items": { "type": "string" }
			},
			"detached": {
				"type": "boolean",
				"default": false,
				"description": "Detach the languageserver process"
			},
			"shell": {
				"type": ["boolean", "string"],
				"default": false,
				"description": "If true runs command inside of a shell, always true on windows."
			},
			"enable": { "$ref": "#/definitions/languageserver.enable" },
			"env": { "$ref": "#/definitions/languageserver.env" },
			"disableSnippetCompletion": { "$ref": "#/definitions/languageserver.disableSnippetCompletion" },
			"disableDynamicRegister": { "$ref": "#/definitions/languageserver.disableDynamicRegister" },
			"disabledFeatures": { "$ref": "#/definitions/languageserver.disabledFeatures" },
			"formatterPriority": { "$ref": "#/definitions/languageserver.formatterPriority" },
			"rootPatterns": { "$ref": "#/definitions/languageserver.rootPatterns" },
			"requireRootPattern": { "$ref": "#/definitions/languageserver.requireRootPattern" },
			"ignoredRootPaths": { "$ref": "#/definitions/languageserver.ignoredRootPaths" },
			"maxRestartCount": { "$ref": "#/definitions/languageserver.maxRestartCount" },
			"filetypes": { "$ref": "#/definitions/languageserver.filetypes" },
			"additionalSchemes": { "$ref": "#/definitions/languageserver.additionalSchemes" },
			"revealOutputChannelOn": { "$ref": "#/definitions/languageserver.revealOutputChannelOn" },
			"progressOnInitialization": { "$ref": "#/definitions/languageserver.progressOnInitialization" },
			"initializationOptions": { "$ref": "#/definitions/languageserver.initializationOptions" },
			"settings": { "$ref": "#/definitions/languageserver.settings" },
			"stdioEncoding": { "$ref": "#/definitions/languageserver.stdioEncoding" },
			"trace.server": { "$ref": "#/definitions/languageserver.trace.server" },
			"trace.server.verbosity": { "$ref": "#/definitions/languageserver.trace.server.verbosity" },
			"trace.server.format": { "$ref": "#/definitions/languageserver.trace.server.format" }
		}
	}
};
var properties = {
	"callHierarchy.enableTooltip": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Enable tooltip to show relative filepath of call hierarchy."
	},
	"callHierarchy.openCommand": {
		"type": "string",
		"scope": "application",
		"default": "edit",
		"description": "Open command for callHierarchy tree view."
	},
	"callHierarchy.splitCommand": {
		"type": "string",
		"scope": "application",
		"default": "botright 30vs",
		"description": "Window split command used by callHierarchy tree view."
	},
	"coc.preferences.rootPatterns": {
		"type": ["array", "null"],
		"default": null,
		"scope": "application",
		"description": "Root patterns to resolve workspaceFolder from parent folders of opened files, resolved from up to down.",
		"deprecationMessage": "Use 'workspace.rootPatterns' instead.",
		"items": { "type": "string" }
	},
	"coc.preferences.bracketEnterImprove": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Improve enter inside bracket `<> {} [] ()` by add new empty line below and place cursor to it. Works with `coc#on_enter()`",
		"default": true
	},
	"coc.preferences.currentFunctionSymbolAutoUpdate": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Automatically update the value of b:coc_current_function on CursorMove event",
		"default": false
	},
	"coc.preferences.currentFunctionSymbolDebounceTime": {
		"type": "number",
		"scope": "application",
		"description": "Set debounce timer for the update of b:coc_current_function on CursorMove event",
		"default": 300
	},
	"coc.preferences.enableLinkedEditing": {
		"type": "boolean",
		"scope": "language-overridable",
		"default": false,
		"description": "Enable linked editing support."
	},
	"coc.preferences.enableMarkdown": {
		"type": "boolean",
		"scope": "application",
		"description": "Tell the language server that markdown text format is supported, note that markdown text may not rendered as expected.",
		"default": true
	},
	"coc.preferences.enableMessageDialog": {
		"type": "boolean",
		"scope": "application",
		"default": false,
		"deprecationMessage": "Use configuration 'coc.preferences.messageDialogKind' instead.",
		"description": "Enable interactive messages in notification dialog, or fallback to native vim confirm action."
	},
	"coc.preferences.messageDialogKind": {
		"type": "string",
		"scope": "application",
		"default": "confirm",
		"description": "Method to use when showing interactive messages to the user",
		"enum": [
			"notification",
			"menu",
			"confirm"
		]
	},
	"coc.preferences.messageReportKind": {
		"type": "string",
		"scope": "application",
		"default": "echo",
		"description": "Method to use when printing or showing plain user messages",
		"enum": ["notification", "echo"]
	},
	"coc.preferences.excludeImageLinksInMarkdownDocument": {
		"type": "boolean",
		"description": "Exclude image links from markdown text in float window.",
		"scope": "application",
		"default": true
	},
	"coc.preferences.enableGFMBreaksInMarkdownDocument": {
		"type": "boolean",
		"description": "Exclude GFM breaks in markdown document.",
		"scope": "application",
		"default": true
	},
	"coc.preferences.extensionUpdateCheck": {
		"type": "string",
		"scope": "application",
		"default": "never",
		"description": "Interval for check extension update, could be daily, weekly, never",
		"deprecationMessage": "Use configuration 'extensions.updateCheck' instead.",
		"enum": [
			"daily",
			"weekly",
			"never"
		]
	},
	"coc.preferences.extensionUpdateUIInTab": {
		"type": "boolean",
		"scope": "application",
		"default": false,
		"deprecationMessage": "Use configuration 'extensions.updateUIInTab' instead.",
		"description": "Display extension updating UI in new vim tab"
	},
	"coc.preferences.silentAutoupdate": {
		"type": "boolean",
		"description": "Not open split window with update status when performing auto update.",
		"deprecationMessage": "Use configuration 'extensions.silentAutoupdate' instead.",
		"scope": "application",
		"default": true
	},
	"coc.preferences.floatActions": {
		"type": "boolean",
		"scope": "application",
		"description": "Set to false to disable float/popup support for actions menu.",
		"default": true
	},
	"coc.preferences.autoApplySingleQuickfix": {
		"type": "boolean",
		"scope": "application",
		"description": "Automatically apply the single quickfix action .",
		"default": true
	},
	"coc.preferences.formatOnSave": {
		"type": "boolean",
		"description": "Set to true to enable formatting on save.",
		"scope": "language-overridable",
		"default": false
	},
	"coc.preferences.formatOnSaveTimeout": {
		"type": "integer",
		"scope": "language-overridable",
		"description": "How long before the format command run on save times out.",
		"default": 500,
		"minimum": 200,
		"maximum": 5e3
	},
	"coc.preferences.formatOnSaveFiletypes": {
		"type": ["null", "array"],
		"scope": "resource",
		"default": null,
		"description": "Filetypes that should run format on save.",
		"deprecationMessage": "Use 'coc.preferences.formatOnSave' as language override configuration instead, see :h coc-configuration-scope",
		"items": { "type": "string" }
	},
	"coc.preferences.formatOnType": {
		"type": "boolean",
		"description": "Set to true to enable formatting on typing.",
		"scope": "language-overridable",
		"default": false
	},
	"coc.preferences.formatOnTypeFiletypes": {
		"type": ["null", "array"],
		"default": null,
		"scope": "resource",
		"description": "Filetypes that should run format on typing, only works when `coc.preferences.formatOnType` is `true`",
		"deprecationMessage": "Use 'coc.preferences.formatOnType' as language override configuration instead, see :h coc-configuration-scope",
		"items": { "type": "string" }
	},
	"coc.preferences.formatterExtension": {
		"type": ["null", "string"],
		"default": null,
		"scope": "language-overridable",
		"description": "Extension used for formatting documents. When set to null, the formatter with highest priority is used."
	},
	"coc.preferences.jumpCommand": {
		"anyOf": [{
			"type": "string",
			"enum": [
				"edit",
				"split",
				"vsplit",
				"tabe",
				"drop",
				"tab drop",
				"pedit"
			]
		}, {
			"type": "string",
			"minimum": 1
		}],
		"scope": "application",
		"description": "Command used for location jump, like goto definition, goto references etc. Can be also a custom command that gives file as an argument.",
		"default": "edit"
	},
	"coc.preferences.maxFileSize": {
		"type": "string",
		"scope": "application",
		"default": "10MB",
		"description": "Maximum file size in bytes that coc.nvim should handle, default '10MB'"
	},
	"coc.preferences.messageLevel": {
		"type": "string",
		"scope": "application",
		"description": "Message level for filter echoed messages, could be 'more', 'warning' and 'error'",
		"default": "more",
		"enum": [
			"more",
			"warning",
			"error"
		]
	},
	"coc.preferences.promptInput": {
		"type": "boolean",
		"description": "Use prompt buffer in float window for user input.",
		"scope": "application",
		"default": true
	},
	"coc.preferences.renameFillCurrent": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Disable to stop Refactor-Rename float/popup window from populating with old name in the New Name field."
	},
	"coc.preferences.useQuickfixForLocations": {
		"type": "boolean",
		"scope": "application",
		"description": "Use vim's quickfix list for jump locations,\n need restart on change.",
		"default": false
	},
	"coc.preferences.watchmanPath": {
		"type": "string",
		"scope": "application",
		"deprecationMessage": "Use configuration \"fileSystemWatch.watchmanPath\" instead.",
		"description": "executable path for https://facebook.github.io/watchman/, detected from $PATH by default",
		"default": null
	},
	"coc.preferences.willSaveHandlerTimeout": {
		"type": "integer",
		"scope": "application",
		"default": 500,
		"minimum": 200,
		"maximum": 5e3,
		"description": "Will save handler timeout"
	},
	"coc.preferences.tagDefinitionTimeout": {
		"type": "integer",
		"scope": "application",
		"default": 0,
		"description": "The timeout of CocTagFunc, default is infinity"
	},
	"coc.source.around.disableSyntaxes": {
		"type": "array",
		"default": [],
		"scope": "application",
		"items": { "type": "string" }
	},
	"coc.source.around.enable": {
		"type": "boolean",
		"scope": "application",
		"default": true
	},
	"coc.source.around.priority": {
		"type": "integer",
		"scope": "application",
		"default": 1
	},
	"coc.source.around.shortcut": {
		"type": "string",
		"scope": "application",
		"default": "A"
	},
	"coc.source.buffer.disableSyntaxes": {
		"type": "array",
		"default": [],
		"scope": "application",
		"items": { "type": "string" }
	},
	"coc.source.buffer.enable": {
		"type": "boolean",
		"scope": "application",
		"default": true
	},
	"coc.source.buffer.ignoreGitignore": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Ignore git ignored files for buffer words"
	},
	"coc.source.buffer.priority": {
		"type": "integer",
		"scope": "application",
		"default": 1
	},
	"coc.source.buffer.shortcut": {
		"type": "string",
		"scope": "application",
		"default": "B"
	},
	"coc.source.file.disableSyntaxes": {
		"type": "array",
		"default": [],
		"scope": "application",
		"items": { "type": "string" }
	},
	"coc.source.file.enable": {
		"type": "boolean",
		"scope": "application",
		"default": true
	},
	"coc.source.file.ignoreHidden": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Ignore completion for hidden files"
	},
	"coc.source.file.ignorePatterns": {
		"type": "array",
		"scope": "application",
		"default": [],
		"description": "Ignore patterns of matcher",
		"items": { "type": "string" }
	},
	"coc.source.file.priority": {
		"type": "integer",
		"scope": "application",
		"default": 10
	},
	"coc.source.file.shortcut": {
		"type": "string",
		"scope": "application",
		"default": "F"
	},
	"coc.source.file.triggerCharacters": {
		"type": "array",
		"default": ["/", "\\"],
		"scope": "application",
		"items": { "type": "string" }
	},
	"coc.source.file.trimSameExts": {
		"type": "array",
		"scope": "application",
		"default": [".ts", ".js"],
		"description": "Trim same extension on file completion",
		"items": { "type": "string" }
	},
	"codeLens.enable": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Enable codeLens feature, require neovim with set virtual text feature.",
		"default": false
	},
	"codeLens.display": {
		"type": "boolean",
		"scope": "language-overridable",
		"default": true,
		"description": "Display codeLens."
	},
	"codeLens.position": {
		"type": "string",
		"scope": "language-overridable",
		"enum": [
			"top",
			"eol",
			"right_align"
		],
		"description": "Display position of codeLens virtual text.",
		"default": "top"
	},
	"codeLens.separator": {
		"type": "string",
		"scope": "language-overridable",
		"description": "Separator text for codeLens in virtual text",
		"default": ""
	},
	"codeLens.subseparator": {
		"type": "string",
		"scope": "language-overridable",
		"description": "Subseparator between codeLenses in virtual text",
		"default": " | "
	},
	"colors.enable": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Enable colors highlight feature, for terminal vim, 'termguicolors' option should be enabled and the terminal support gui colors.",
		"default": false
	},
	"colors.filetypes": {
		"type": ["array", "null"],
		"default": null,
		"scope": "resource",
		"deprecationMessage": "Use colors.enable as language override configuration instead, see :h coc-configuration-scope",
		"description": "Filetypes that should be enabled for colors highlight feature, use \"*\" for all filetypes.",
		"items": { "type": "string" }
	},
	"colors.highlightPriority": {
		"type": "integer",
		"scope": "application",
		"description": "Priority for colors highlights, works on vim8 and neovim >= 0.6.0",
		"default": 1e3,
		"maximum": 4096
	},
	"cursors.cancelKey": {
		"type": "string",
		"scope": "application",
		"default": "<esc>",
		"description": "Key used for cancel cursors session."
	},
	"cursors.nextKey": {
		"type": "string",
		"scope": "application",
		"default": "<C-n>",
		"description": "Key used for jump to next cursors position."
	},
	"cursors.previousKey": {
		"type": "string",
		"scope": "application",
		"default": "<C-p>",
		"description": "Key used for jump to previous cursors position."
	},
	"cursors.wrapscan": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Searches wrap around the first or last cursors range."
	},
	"diagnostic.autoRefresh": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Enable automatically refresh diagnostics, use diagnosticRefresh action when it's disabled.",
		"default": true
	},
	"diagnostic.checkCurrentLine": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "When enabled, show all diagnostics of current line if there are none at the current position.",
		"default": false
	},
	"diagnostic.displayByAle": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Use Ale, coc-diagnostics-shim.nvim, or other provider to display diagnostics in vim. This setting will disable diagnostic display using coc's handler. A restart required on change.",
		"default": false
	},
	"diagnostic.displayByVimDiagnostic": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Display diagnostics with nvim's `vim.diagnostic`. This setting will disable diagnostic display using coc's handler. A restart required on change. Neovim only.",
		"default": false
	},
	"diagnostic.enable": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Set to false to disable diagnostic display",
		"default": true
	},
	"diagnostic.enableHighlightLineNumber": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Enable highlighting line numbers for diagnostics, only works with neovim."
	},
	"diagnostic.enableMessage": {
		"type": "string",
		"scope": "application",
		"default": "always",
		"description": "When to enable show messages of diagnostics.",
		"enum": [
			"always",
			"jump",
			"never"
		]
	},
	"diagnostic.enableSign": {
		"type": "boolean",
		"scope": "language-overridable",
		"default": true,
		"description": "Enable signs for diagnostics."
	},
	"diagnostic.errorSign": {
		"type": "string",
		"scope": "application",
		"description": "Text of error sign",
		"default": ">>"
	},
	"diagnostic.filetypeMap": {
		"type": "object",
		"scope": "application",
		"description": "A map between buffer filetype and the filetype assigned to diagnostics. To syntax highlight diagnostics with their parent buffer type use `\"default\": \"bufferType\"`",
		"default": {}
	},
	"diagnostic.floatConfig": {
		"type": "object",
		"scope": "application",
		"description": "Configure float window style of diagnostic message.",
		"allOf": [{ "$ref": "#/definitions/floatConfig" }],
		"additionalProperties": false,
		"properties": {
			"border": {},
			"rounded": {},
			"highlight": {},
			"borderhighlight": {},
			"title": {},
			"close": {},
			"maxHeight": {},
			"maxWidth": {},
			"winblend": {},
			"focusable": {},
			"shadow": {},
			"position": {},
			"top": {},
			"bottom": {},
			"left": {},
			"right": {}
		}
	},
	"diagnostic.format": {
		"type": "string",
		"scope": "language-overridable",
		"description": "Define the diagnostic format that shown in float window or echoed, available parts: source, code, severity, message",
		"default": "%message (%source%code)"
	},
	"diagnostic.highlightLimit": {
		"type": "integer",
		"scope": "language-overridable",
		"description": "Limit count for highlighted diagnostics, too many diagnostic highlights could make vim stop responding",
		"default": 1e3
	},
	"diagnostic.highlightPriority": {
		"type": "integer",
		"scope": "language-overridable",
		"description": "Priority for diagnostic highlights, works on vim8 and neovim >= 0.6.0",
		"default": 4096,
		"maximum": 4096,
		"minimum": 110
	},
	"diagnostic.hintSign": {
		"type": "string",
		"scope": "application",
		"description": "Text of hint sign",
		"default": ">>"
	},
	"diagnostic.infoSign": {
		"type": "string",
		"scope": "application",
		"description": "Text of info sign",
		"default": ">>"
	},
	"diagnostic.level": {
		"type": "string",
		"scope": "resource",
		"description": "Used for filter diagnostics by diagnostic severity.",
		"default": "hint",
		"enum": [
			"hint",
			"information",
			"warning",
			"error"
		]
	},
	"diagnostic.locationlistLevel": {
		"type": ["string", "null"],
		"scope": "language-overridable",
		"description": "Filter diagnostics in locationlist.",
		"default": null,
		"enum": [
			"hint",
			"information",
			"warning",
			"error"
		]
	},
	"diagnostic.locationlistUpdate": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Update locationlist on diagnostics change, only works with locationlist opened by :CocDiagnostics command and first window of associated buffer.",
		"default": true
	},
	"diagnostic.messageDelay": {
		"type": "integer",
		"scope": "application",
		"description": "How long to wait (in milliseconds) before displaying the diagnostic message with echo or float",
		"default": 200
	},
	"diagnostic.messageLevel": {
		"type": ["string", "null"],
		"scope": "language-overridable",
		"description": "Filter diagnostic message in float window/popup.",
		"default": null,
		"enum": [
			"hint",
			"information",
			"warning",
			"error"
		]
	},
	"diagnostic.messageTarget": {
		"type": "string",
		"scope": "language-overridable",
		"description": "Diagnostic message target.",
		"default": "float",
		"enum": ["echo", "float"]
	},
	"diagnostic.refreshOnInsertMode": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Enable diagnostic refresh on insert mode, default false.",
		"default": false
	},
	"diagnostic.showDeprecated": {
		"type": "boolean",
		"default": true,
		"scope": "language-overridable",
		"description": "Show diagnostics with deprecated tag."
	},
	"diagnostic.showUnused": {
		"type": "boolean",
		"default": true,
		"scope": "language-overridable",
		"description": "Show diagnostics with unused tag, affects highlight, sign, virtual text, message"
	},
	"diagnostic.signLevel": {
		"type": ["string", "null"],
		"scope": "language-overridable",
		"description": "Filter diagnostics displayed in signcolumn.",
		"default": null,
		"enum": [
			"hint",
			"information",
			"warning",
			"error"
		]
	},
	"diagnostic.signPriority": {
		"type": "integer",
		"scope": "resource",
		"description": "Priority of diagnostic signs, default to 10",
		"default": 10
	},
	"diagnostic.virtualText": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Use virtual text to display diagnostics.",
		"default": false
	},
	"diagnostic.virtualTextAlign": {
		"type": "string",
		"scope": "language-overridable",
		"description": "Position of virtual text, default 'after'",
		"default": "after",
		"enum": [
			"after",
			"right",
			"below"
		]
	},
	"diagnostic.virtualTextCurrentLineOnly": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Only show virtualText diagnostic on current cursor line",
		"default": true
	},
	"diagnostic.virtualTextFormat": {
		"type": "string",
		"scope": "language-overridable",
		"description": "Define the virtual text diagnostic format, available parts: source, code, severity, message",
		"default": "%message"
	},
	"diagnostic.virtualTextLevel": {
		"type": ["string", "null"],
		"scope": "language-overridable",
		"description": "Filter diagnostic message in virtual text by level",
		"default": null,
		"enum": [
			"hint",
			"information",
			"warning",
			"error"
		]
	},
	"diagnostic.virtualTextLimitInOneLine": {
		"type": "integer",
		"scope": "language-overridable",
		"minimum": 1,
		"description": "The maximum number of diagnostic messages to display in one line",
		"default": 999
	},
	"diagnostic.virtualTextLineSeparator": {
		"type": "string",
		"scope": "language-overridable",
		"description": "The text that will mark a line end from the diagnostic message",
		"default": " \\ "
	},
	"diagnostic.virtualTextLines": {
		"type": "integer",
		"scope": "language-overridable",
		"description": "The number of non empty lines from a diagnostic to display",
		"default": 3
	},
	"diagnostic.virtualTextPrefix": {
		"type": "string",
		"scope": "language-overridable",
		"description": "The prefix added virtual text diagnostics",
		"default": " "
	},
	"diagnostic.virtualTextWinCol": {
		"type": ["integer", "null"],
		"scope": "language-overridable",
		"description": "Window column number to align virtual text, neovim only.",
		"default": null
	},
	"diagnostic.warningSign": {
		"type": "string",
		"scope": "application",
		"description": "Text of warning sign",
		"default": "⚠"
	},
	"diagnostic.showRelatedInformation": {
		"type": "boolean",
		"default": true,
		"scope": "language-overridable",
		"description": "Display related information in the diagnostic floating window."
	},
	"dialog.confirmKey": {
		"type": "string",
		"default": "<cr>",
		"scope": "application",
		"description": "Confirm key for confirm selection used by menu and picker, you can always use <esc> to cancel."
	},
	"dialog.floatBorderHighlight": {
		"type": ["string", "null"],
		"default": null,
		"scope": "application",
		"description": "Highlight group for border of dialog window/popup, default to 'CocFloatBorder'"
	},
	"dialog.floatHighlight": {
		"type": ["string", "null"],
		"default": null,
		"scope": "application",
		"description": "Highlight group for dialog window/popup, default to 'CocFloating'"
	},
	"dialog.maxHeight": {
		"type": "integer",
		"default": 30,
		"scope": "application",
		"description": "Maximum height of dialog window."
	},
	"dialog.maxWidth": {
		"type": "integer",
		"default": 80,
		"scope": "application",
		"description": "Maximum width of dialog window."
	},
	"dialog.pickerButtonShortcut": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Show shortcut in buttons of picker dialog window/popup, used when dialog.pickerButtons is true."
	},
	"dialog.pickerButtons": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Show buttons for picker dialog window/popup."
	},
	"dialog.rounded": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "use rounded border for dialog window."
	},
	"dialog.shortcutHighlight": {
		"type": "string",
		"default": "MoreMsg",
		"scope": "application",
		"description": "Highlight group for shortcut character in menu dialog, default to 'MoreMsg'"
	},
	"documentHighlight.priority": {
		"type": "integer",
		"default": -1,
		"scope": "resource",
		"description": "Match priority used by document highlight, see ':h matchadd'."
	},
	"documentHighlight.limit": {
		"type": "integer",
		"default": 200,
		"scope": "resource",
		"description": "Limit the highlights added by matchaddpos, too many positions could cause vim slow."
	},
	"documentHighlight.timeout": {
		"type": "integer",
		"default": 300,
		"minimum": 200,
		"maximum": 5e3,
		"scope": "resource",
		"description": "Timeout for document highlight, in milliseconds."
	},
	"editor.autocmdTimeout": {
		"type": "integer",
		"default": 1e3,
		"minimum": 100,
		"maximum": 5e3,
		"scope": "application",
		"description": "Timeout for execute request autocmd registered by coc extensions."
	},
	"editor.codeActionsOnSave": {
		"additionalProperties": {
			"type": ["string", "boolean"],
			"enum": [
				"always",
				"never",
				true,
				false
			]
		},
		"type": "object",
		"default": {},
		"scope": "language-overridable",
		"description": "Run Code Actions for the buffer on save, normally source actions, Example: `\"source.organizeImports\": \"always\""
	},
	"fileSystemWatch.watchmanPath": {
		"type": ["null", "string"],
		"scope": "application",
		"description": "executable path for https://facebook.github.io/watchman/, detected from $PATH by default",
		"default": null
	},
	"fileSystemWatch.enable": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Enable file system watch support for workspace folders."
	},
	"fileSystemWatch.ignoredFolders": {
		"type": "array",
		"default": [
			"/private/tmp",
			"/",
			"${tmpdir}"
		],
		"scope": "application",
		"description": "List of folders that should not be watched for file changes, environment variables and minimatch patterns can be used.",
		"items": { "type": "string" }
	},
	"floatFactory.floatConfig": {
		"type": "object",
		"scope": "application",
		"description": "Configure default style float window/popup created by float factory (created around cursor and automatically closed)",
		"allOf": [{ "$ref": "#/definitions/floatConfig" }],
		"additionalProperties": false,
		"properties": {
			"border": {},
			"rounded": {},
			"highlight": {},
			"borderhighlight": {},
			"title": {},
			"close": {},
			"maxWidth": {},
			"maxHeight": {},
			"winblend": {},
			"focusable": {},
			"shadow": {},
			"position": {},
			"top": {},
			"bottom": {},
			"left": {},
			"right": {}
		}
	},
	"hover.autoHide": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Automatically hide hover float window on CursorMove or InsertEnter."
	},
	"hover.floatConfig": {
		"type": "object",
		"scope": "application",
		"description": "Configure float window style of hover documents.",
		"allOf": [{ "$ref": "#/definitions/floatConfig" }],
		"additionalProperties": false,
		"properties": {
			"border": {},
			"rounded": {},
			"highlight": {},
			"borderhighlight": {},
			"title": {},
			"close": {},
			"maxHeight": {},
			"maxWidth": {},
			"winblend": {},
			"focusable": {},
			"shadow": {},
			"position": {},
			"top": {},
			"bottom": {},
			"left": {},
			"right": {}
		}
	},
	"hover.previewMaxHeight": {
		"type": "integer",
		"scope": "resource",
		"default": 12,
		"description": "Max height of preview window for hover."
	},
	"hover.target": {
		"type": "string",
		"default": "float",
		"scope": "resource",
		"description": "Target to show hover information, default is floating window when possible.",
		"enum": [
			"preview",
			"echo",
			"float"
		]
	},
	"http.proxy": {
		"type": "string",
		"default": "",
		"pattern": "^https?://([^:]*(:[^@]*)?@)?([^:]+|\\[[:0-9a-fA-F]+\\])(:\\d+)?/?$|^$",
		"description": "The proxy setting to use. If not set, will be inherited from the `http_proxy` and `https_proxy` environment variables.",
		"scope": "application"
	},
	"http.proxyAuthorization": {
		"type": ["null", "string"],
		"description": "The value to send as the `Proxy-Authorization` header for every network request.",
		"default": null,
		"scope": "application"
	},
	"http.proxyCA": {
		"type": "string",
		"description": "CA (file) to use as Certificate Authority",
		"default": null,
		"scope": "application"
	},
	"http.proxyStrictSSL": {
		"type": "boolean",
		"description": "Controls whether the proxy server certificate should be verified against the list of supplied CAs",
		"default": true,
		"scope": "application"
	},
	"extensions.updateCheck": {
		"type": "string",
		"scope": "application",
		"default": "never",
		"description": "Interval time for check extension update, could be daily, weekly, never",
		"enum": [
			"daily",
			"weekly",
			"never"
		]
	},
	"extensions.recommendations": {
		"type": "array",
		"scope": "resource",
		"description": "List of extensions recommended for installation in the current project",
		"default": [],
		"items": { "type": "string" }
	},
	"extensions.silentAutoupdate": {
		"type": "boolean",
		"description": "Not open split window with update status when performing auto update.",
		"scope": "application",
		"default": true
	},
	"extensions.updateUIInTab": {
		"type": "boolean",
		"scope": "application",
		"default": false,
		"description": "Display extension updating UI in new vim tab"
	},
	"inlayHint.enable": {
		"type": "boolean",
		"default": true,
		"scope": "language-overridable",
		"description": "Enable inlay hint support"
	},
	"inlayHint.position": {
		"type": "string",
		"default": "inline",
		"scope": "language-overridable",
		"description": "Controls where to show inlay hints: inline in the text, or at the end of the line",
		"enum": ["inline", "eol"]
	},
	"inlayHint.enableParameter": {
		"type": "boolean",
		"scope": "language-overridable",
		"default": true,
		"description": "Enable inlay hints for parameters."
	},
	"inlayHint.display": {
		"type": "boolean",
		"scope": "language-overridable",
		"default": true,
		"description": "Display inlay hints."
	},
	"inlayHint.filetypes": {
		"type": ["array", "null"],
		"scope": "application",
		"description": "Filetypes that enable inlayHint, all filetypes are enabled by default",
		"deprecationMessage": "Use inlayHint.enable with language scope instead, see :h coc-configuration-scope",
		"default": null,
		"items": { "type": "string" }
	},
	"inlayHint.refreshOnInsertMode": {
		"type": "boolean",
		"default": false,
		"scope": "language-overridable",
		"description": "Refresh inlayHints on insert mode."
	},
	"inlayHint.maximumLength": {
		"type": "integer",
		"default": 0,
		"minimum": 0,
		"scope": "language-overridable",
		"description": "Maximum overall length of inlay hints, for a single line, before they get truncated by the editor. Set to `0`to disable truncation."
	},
	"links.enable": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Enable document links",
		"default": true
	},
	"links.tooltip": {
		"type": "boolean",
		"scope": "application",
		"description": "Show tooltip of link under cursor on CursorHold.",
		"default": false
	},
	"links.highlight": {
		"type": "boolean",
		"scope": "application",
		"description": "Use CocLink highlight group to highlight links",
		"default": false
	},
	"list.floatPreview": {
		"type": "boolean",
		"default": false,
		"scope": "application",
		"description": "Enable preview with float window/popup, default: `false`"
	},
	"list.alignColumns": {
		"type": "boolean",
		"default": false,
		"scope": "application",
		"description": "Whether to align lists in columns, default: `false`"
	},
	"list.extendedSearchMode": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Enable extended search mode which allows multiple search patterns delimited by spaces."
	},
	"list.height": {
		"type": "integer",
		"scope": "application",
		"default": 10,
		"description": "Height of split list window."
	},
	"list.indicator": {
		"type": "string",
		"default": ">",
		"scope": "application",
		"description": "The character used as first character in prompt line."
	},
	"list.insertMappings": {
		"type": "object",
		"scope": "application",
		"default": {},
		"description": "Custom keymappings on insert mode."
	},
	"list.interactiveDebounceTime": {
		"type": "integer",
		"default": 100,
		"scope": "application",
		"description": "Debounce time for input change on interactive mode."
	},
	"list.limitLines": {
		"type": ["number", "null"],
		"scope": "application",
		"default": null,
		"description": "Limit lines for list buffer."
	},
	"list.maxPreviewHeight": {
		"type": "integer",
		"scope": "application",
		"default": 12,
		"description": "Max height for preview window of list."
	},
	"list.menuAction": {
		"type": "boolean",
		"default": false,
		"scope": "application",
		"description": "Use menu picker instead of confirm() for choose action."
	},
	"list.nextKeymap": {
		"type": "string",
		"scope": "application",
		"default": "<C-j>",
		"description": "Key used for select next line on insert mode."
	},
	"list.normalMappings": {
		"type": "object",
		"scope": "application",
		"default": {},
		"description": "Custom keymappings on normal mode."
	},
	"list.previewHighlightGroup": {
		"type": "string",
		"scope": "application",
		"default": "Search",
		"description": "Highlight group used for highlight the range in preview window."
	},
	"list.previewSplitRight": {
		"type": "boolean",
		"scope": "application",
		"default": false,
		"description": "Use vsplit for preview window."
	},
	"list.previewToplineOffset": {
		"type": "integer",
		"scope": "application",
		"default": 3,
		"description": "Topline offset for list previews"
	},
	"list.previewToplineStyle": {
		"type": "string",
		"scope": "application",
		"default": "offset",
		"description": "Topline style for list previews",
		"enum": ["offset", "middle"]
	},
	"list.previousKeymap": {
		"type": "string",
		"scope": "application",
		"default": "<C-k>",
		"description": "Key used for select previous line on insert mode."
	},
	"list.selectedSignText": {
		"type": "string",
		"scope": "application",
		"default": "*",
		"description": "Sign text for selected lines."
	},
	"list.signOffset": {
		"type": "integer",
		"scope": "application",
		"default": 900,
		"description": "Sign offset of list, should be different from other plugins."
	},
	"list.smartCase": {
		"type": "boolean",
		"default": false,
		"scope": "application",
		"description": "Use smartcase match for fuzzy match and strict match, --ignore-case will be ignored, may not affect interactive list."
	},
	"list.source.diagnostics.includeCode": {
		"type": "boolean",
		"scope": "application",
		"description": "Whether to show the diagnostic code in the list.",
		"default": true
	},
	"list.source.diagnostics.pathFormat": {
		"type": "string",
		"scope": "application",
		"description": "Decide how the filepath is shown in the list.",
		"enum": [
			"full",
			"short",
			"filename",
			"hidden"
		],
		"default": "full"
	},
	"list.source.outline.ctagsFiletypes": {
		"type": "array",
		"scope": "application",
		"default": [],
		"description": "Filetypes that should use ctags for outline instead of language server.",
		"items": { "type": "string" }
	},
	"list.source.symbols.excludes": {
		"type": "array",
		"scope": "application",
		"default": [],
		"description": "Patterns of minimatch for filepath to exclude from symbols list.",
		"items": { "type": "string" }
	},
	"list.statusLineSegments": {
		"type": ["array", "null"],
		"scope": "application",
		"default": [
			"%#CocListMode#-- %{coc#list#status(\"mode\")} --%*",
			"%{coc#list#status(\"loading\")}",
			"%{coc#list#status(\"args\")}",
			"(%L/%{coc#list#status(\"total\")})",
			"%=",
			"%#CocListPath# %{coc#list#status(\"cwd\")} %l/%L%*"
		],
		"items": { "types": "string" },
		"description": "An array of statusline segments that will be used to draw the status line for list windows."
	},
	"notification.statusLineProgress": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Show progress notification in status line, instead of float window/popup."
	},
	"notification.border": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Enable rounded border for notification windows."
	},
	"notification.disabledProgressSources": {
		"type": "array",
		"default": [],
		"scope": "application",
		"description": "Sources that should be disabled for message progress, use * to disable all message only progresses",
		"items": { "type": "string" }
	},
	"notification.focusable": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Enable focus by user actions (wincmds, mouse events), neovim only."
	},
	"notification.highlightGroup": {
		"type": "string",
		"default": "Normal",
		"scope": "application",
		"description": "Highlight group of notification dialog."
	},
	"notification.marginRight": {
		"type": "integer",
		"default": 10,
		"scope": "application",
		"description": "Margin right to the right of editor window."
	},
	"notification.maxHeight": {
		"type": "integer",
		"default": 10,
		"scope": "application",
		"description": "Maximum content height of notification dialog."
	},
	"notification.maxWidth": {
		"type": "integer",
		"default": 60,
		"scope": "application",
		"description": "Maximum content width of notification dialog."
	},
	"notification.minProgressWidth": {
		"type": "integer",
		"default": 30,
		"scope": "application",
		"description": "Minimal with of progress notification."
	},
	"notification.timeout": {
		"type": "integer",
		"default": 1e4,
		"scope": "application",
		"description": "Timeout for auto close notifications, in milliseconds."
	},
	"notification.winblend": {
		"type": "integer",
		"default": 30,
		"minimum": 0,
		"maximum": 100,
		"scope": "application",
		"description": "Winblend option of notification window, neovim only."
	},
	"npm.binPath": {
		"type": "string",
		"scope": "application",
		"default": "npm",
		"description": "Command or absolute path to npm or yarn."
	},
	"outline.autoHide": {
		"type": "boolean",
		"scope": "application",
		"default": false,
		"description": "Automatically close the outline window when an item is clicked."
	},
	"outline.autoPreview": {
		"type": "boolean",
		"scope": "application",
		"default": false,
		"description": "Enable auto preview on cursor move."
	},
	"outline.autoWidth": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Automatically increase window width to avoid wrapped lines."
	},
	"outline.checkBufferSwitch": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Recreate outline view after user changed to another buffer on current tab."
	},
	"outline.codeActionKinds": {
		"type": "array",
		"scope": "application",
		"default": [
			"",
			"quickfix",
			"refactor"
		],
		"description": "Filter code actions in actions menu by kinds.",
		"items": {
			"type": "string",
			"enum": [
				"",
				"quickfix",
				"refactor",
				"source"
			]
		}
	},
	"outline.detailAsDescription": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Show detail as description aside with label, when false detail will be shown in tooltip on cursor hold."
	},
	"outline.expandLevel": {
		"type": "integer",
		"scope": "application",
		"default": 1,
		"description": "Expand level of tree nodes."
	},
	"outline.followCursor": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Reveal item in outline tree on cursor hold."
	},
	"outline.keepWindow": {
		"type": "boolean",
		"scope": "application",
		"default": false,
		"description": "Jump back to original window after outline is shown."
	},
	"outline.previewBorder": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Use border for preview window."
	},
	"outline.previewBorderHighlightGroup": {
		"type": "string",
		"scope": "application",
		"default": "Normal",
		"description": "Border highlight group of preview window."
	},
	"outline.previewBorderRounded": {
		"type": "boolean",
		"scope": "application",
		"default": false,
		"description": "Use rounded border for preview window."
	},
	"outline.previewHighlightGroup": {
		"type": "string",
		"scope": "application",
		"default": "Normal",
		"description": "Highlight group of preview window."
	},
	"outline.previewMaxWidth": {
		"type": "integer",
		"scope": "application",
		"default": 80,
		"description": "Max width of preview window."
	},
	"outline.previewWinblend": {
		"type": "integer",
		"scope": "application",
		"default": 0,
		"minimum": 0,
		"maximum": 100,
		"description": "Enables pseudo-transparency by set 'winblend' option of window, neovim only."
	},
	"outline.showLineNumber": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Show line number of symbols."
	},
	"outline.sortBy": {
		"type": "string",
		"scope": "application",
		"default": "category",
		"description": "Sort method for symbols.",
		"enum": [
			"position",
			"name",
			"category"
		]
	},
	"outline.splitCommand": {
		"type": "string",
		"scope": "application",
		"default": "botright 30vs",
		"description": "Window split command used by outline."
	},
	"outline.switchSortKey": {
		"type": "string",
		"scope": "application",
		"default": "<C-s>",
		"description": "The key used to switch sort method for symbols provider of current tree view."
	},
	"outline.togglePreviewKey": {
		"type": "string",
		"scope": "application",
		"default": "p",
		"description": "The key used to toggle auto preview feature."
	},
	"pullDiagnostic.ignored": {
		"type": "array",
		"default": [],
		"scope": "application",
		"description": "Minimatch patterns to match full filepath that should be ignored for pullDiagnostic.",
		"items": { "type": "string" }
	},
	"pullDiagnostic.onChange": {
		"type": "boolean",
		"default": true,
		"scope": "language-overridable",
		"description": "Whether to pull for diagnostics on document change."
	},
	"pullDiagnostic.onSave": {
		"type": "boolean",
		"default": false,
		"scope": "language-overridable",
		"description": "Whether to pull for diagnostics on document save."
	},
	"pullDiagnostic.workspace": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Whether to pull for workspace diagnostics when possible."
	},
	"refactor.afterContext": {
		"type": "integer",
		"scope": "application",
		"default": 3,
		"description": "Print num lines of trailing context after each match."
	},
	"refactor.beforeContext": {
		"type": "integer",
		"scope": "application",
		"default": 3,
		"description": "Print num lines of leading context before each match."
	},
	"refactor.openCommand": {
		"type": "string",
		"scope": "application",
		"description": "Open command for refactor window.",
		"default": "vsplit"
	},
	"refactor.saveToFile": {
		"type": "boolean",
		"scope": "application",
		"description": "Save changed buffer to file when write refactor buffer with ':noa wa' command.",
		"default": true
	},
	"refactor.showMenu": {
		"type": "string",
		"scope": "application",
		"default": "<Tab>",
		"description": "Refactor buffer local mapping to bring up menu for this chunk."
	},
	"semanticTokens.combinedModifiers": {
		"type": "array",
		"scope": "language-overridable",
		"description": "Semantic token modifiers that should have highlight combined with syntax highlights.",
		"default": ["deprecated"],
		"items": { "type": "string" }
	},
	"semanticTokens.enable": {
		"type": "boolean",
		"default": false,
		"scope": "language-overridable",
		"description": "Enable semantic tokens support"
	},
	"semanticTokens.filetypes": {
		"type": ["array", "null"],
		"scope": "resource",
		"description": "Filetypes that enable semantic tokens highlighting or [\"*\"] for any filetype",
		"deprecationMessage": "Use semanticTokens.enable configuration with language scope instead, see :h coc-configuration-scope",
		"default": null,
		"items": { "type": "string" }
	},
	"semanticTokens.highlightPriority": {
		"type": "integer",
		"scope": "language-overridable",
		"description": "Priority for semantic tokens highlight.",
		"default": 2048,
		"maximum": 4096
	},
	"semanticTokens.incrementTypes": {
		"type": "array",
		"scope": "language-overridable",
		"description": "Semantic token types that should increase highlight when insert at the start and end position of token.",
		"default": [
			"variable",
			"string",
			"parameter"
		],
		"items": { "type": "string" }
	},
	"signature.enable": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Enable show signature help when trigger character typed.",
		"default": true
	},
	"signature.floatConfig": {
		"type": "object",
		"scope": "application",
		"description": "Configure float window style of signature documents.",
		"allOf": [{ "$ref": "#/definitions/floatConfig" }],
		"additionalProperties": false,
		"properties": {
			"border": {},
			"rounded": {},
			"highlight": {},
			"borderhighlight": {},
			"title": {},
			"close": {},
			"maxHeight": {},
			"maxWidth": {},
			"winblend": {},
			"focusable": {},
			"shadow": {},
			"position": {},
			"top": {},
			"bottom": {},
			"left": {},
			"right": {}
		}
	},
	"signature.hideOnTextChange": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Hide signature float window when text changed on insert mode.",
		"default": false
	},
	"signature.preferShownAbove": {
		"type": "boolean",
		"scope": "application",
		"description": "Show signature help float window above cursor when possible, require restart service on change.",
		"default": true
	},
	"signature.target": {
		"type": "string",
		"scope": "language-overridable",
		"description": "Target of signature help, use float when possible by default.",
		"default": "float",
		"enum": ["float", "echo"]
	},
	"signature.triggerSignatureWait": {
		"type": "integer",
		"scope": "language-overridable",
		"default": 500,
		"minimum": 200,
		"maximum": 1e3,
		"description": "Timeout for trigger signature help, in milliseconds."
	},
	"snippet.highlight": {
		"type": "boolean",
		"scope": "application",
		"description": "Use highlight group 'CocSnippetVisual' to highlight placeholders with same index of current one.",
		"default": false
	},
	"snippet.nextPlaceholderOnDelete": {
		"type": "boolean",
		"scope": "application",
		"description": "Automatically jump to the next placeholder when the current one is completely deleted.",
		"default": false
	},
	"snippet.statusText": {
		"type": "string",
		"scope": "application",
		"default": "SNIP",
		"description": "Text shown in statusline to indicate snippet session is activated."
	},
	"suggest.acceptSuggestionOnCommitCharacter": {
		"type": "boolean",
		"default": false,
		"scope": "language-overridable",
		"description": "Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character."
	},
	"suggest.asciiCharactersOnly": {
		"type": "boolean",
		"description": "Trigger suggest with ASCII characters only",
		"scope": "language-overridable",
		"default": false
	},
	"suggest.segmenterLocales": {
		"type": ["string", "null"],
		"default": "",
		"scope": "language-overridable",
		"description": "Locales used for divide sentence into segments for around and buffer source, works when NodeJS built with intl support, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters, default empty string means auto detect, use null to disable this feature."
	},
	"suggest.asciiMatch": {
		"type": "boolean",
		"description": "Convert unicode characters to ascii for match",
		"scope": "language-overridable",
		"default": true
	},
	"suggest.autoTrigger": {
		"type": "string",
		"scope": "language-overridable",
		"default": "always",
		"description": "How should completion be triggered",
		"enum": [
			"always",
			"trigger",
			"none"
		]
	},
	"suggest.reTriggerAfterIndent": {
		"type": "boolean",
		"description": "Re-Trigger completion after indent changes",
		"scope": "language-overridable",
		"default": true
	},
	"suggest.completionItemKindLabels": {
		"type": "object",
		"default": {},
		"scope": "application",
		"description": "Set custom labels to completion items' kinds.",
		"properties": {
			"text": { "type": "string" },
			"method": { "type": "string" },
			"function": { "type": "string" },
			"constructor": { "type": "string" },
			"field": { "type": "string" },
			"variable": { "type": "string" },
			"class": { "type": "string" },
			"interface": { "type": "string" },
			"module": { "type": "string" },
			"property": { "type": "string" },
			"unit": { "type": "string" },
			"value": { "type": "string" },
			"enum": { "type": "string" },
			"keyword": { "type": "string" },
			"snippet": { "type": "string" },
			"color": { "type": "string" },
			"file": { "type": "string" },
			"reference": { "type": "string" },
			"folder": { "type": "string" },
			"enumMember": { "type": "string" },
			"constant": { "type": "string" },
			"struct": { "type": "string" },
			"event": { "type": "string" },
			"operator": { "type": "string" },
			"typeParameter": { "type": "string" },
			"default": { "type": "string" }
		},
		"additionalProperties": false
	},
	"suggest.defaultSortMethod": {
		"type": "string",
		"description": "Default sorting behavior for suggested completion items.",
		"default": "length",
		"scope": "language-overridable",
		"enum": [
			"length",
			"alphabetical",
			"none"
		]
	},
	"suggest.detailField": {
		"type": "string",
		"scope": "application",
		"default": "preview",
		"description": "Where to show the detail text of CompleteItem from LS.",
		"enum": ["abbr", "preview"]
	},
	"suggest.detailMaxLength": {
		"type": "integer",
		"scope": "application",
		"description": "Max length of detail that should be shown in popup menu.",
		"deprecationMessage": "Use suggest.labelMaxLength instead.",
		"default": 100
	},
	"suggest.enableFloat": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Enable float window with documentation aside with popupmenu.",
		"default": true
	},
	"suggest.enablePreselect": {
		"type": "boolean",
		"scope": "application",
		"description": "Enable preselect feature of LSP, works when suggest.noselect is false.",
		"default": true
	},
	"suggest.filterGraceful": {
		"type": "boolean",
		"description": "Controls whether filtering and sorting suggestions accounts for small typos.",
		"scope": "language-overridable",
		"default": true
	},
	"suggest.filterOnBackspace": {
		"type": "boolean",
		"scope": "application",
		"description": "Filter complete items on backspace.",
		"default": true
	},
	"suggest.floatConfig": {
		"type": "object",
		"scope": "application",
		"description": "Configure style of popup menu and documentation window of completion.",
		"allOf": [{ "$ref": "#/definitions/floatConfig" }],
		"additionalProperties": false,
		"properties": {
			"border": {},
			"rounded": {},
			"highlight": {},
			"borderhighlight": {},
			"title": {},
			"maxWidth": {},
			"winblend": {},
			"shadow": {}
		}
	},
	"suggest.formatItems": {
		"type": "array",
		"scope": "application",
		"items": { "enum": [
			"abbr",
			"menu",
			"kind",
			"shortcut"
		] },
		"contains": { "enum": ["abbr"] },
		"uniqueItems": true,
		"description": "Items shown in popup menu in order.",
		"default": [
			"abbr",
			"menu",
			"kind",
			"shortcut"
		]
	},
	"suggest.highPrioritySourceLimit": {
		"type": "integer",
		"minimum": 1,
		"maximum": 100,
		"scope": "language-overridable",
		"description": "Max items count for source priority bigger than or equal to 90."
	},
	"suggest.insertMode": {
		"type": "string",
		"scope": "language-overridable",
		"default": "replace",
		"description": "Controls whether words are overwritten when accepting completions.",
		"enum": ["insert", "replace"]
	},
	"suggest.ignoreRegexps": {
		"type": "array",
		"scope": "language-overridable",
		"items": { "type": "string" },
		"description": "Regexps to ignore when trigger suggest",
		"default": []
	},
	"suggest.invalidInsertCharacters": {
		"type": "array",
		"items": { "type": "string" },
		"scope": "application",
		"description": "Invalid character for strip valid word when inserting text of complete item.",
		"default": ["\r", "\n"]
	},
	"suggest.labelMaxLength": {
		"type": "integer",
		"scope": "application",
		"description": "Max length of abbr that shown as label of complete item.",
		"default": 200
	},
	"suggest.languageSourcePriority": {
		"type": "integer",
		"default": 99,
		"scope": "language-overridable",
		"description": "Priority of language sources."
	},
	"suggest.localityBonus": {
		"type": "boolean",
		"description": "Controls whether sorting favors words that appear close to the cursor.",
		"scope": "language-overridable",
		"default": true
	},
	"suggest.lowPrioritySourceLimit": {
		"type": "integer",
		"minimum": 1,
		"maximum": 100,
		"scope": "language-overridable",
		"description": "Max items count for source priority lower than 90."
	},
	"suggest.maxCompleteItemCount": {
		"type": "integer",
		"default": 256,
		"scope": "language-overridable",
		"description": "Maximum number of complete items shown in vim"
	},
	"suggest.minTriggerInputLength": {
		"type": "integer",
		"default": 1,
		"scope": "language-overridable",
		"description": "Minimal input length for trigger completion, default 1"
	},
	"suggest.noselect": {
		"type": "boolean",
		"scope": "application",
		"description": "Not make vim select first item on popupmenu shown",
		"default": false
	},
	"suggest.preferCompleteThanJumpPlaceholder": {
		"type": "boolean",
		"description": "Confirm completion instead of jump to next placeholder when completion is activated.",
		"scope": "resource",
		"default": false
	},
	"suggest.pumFloatConfig": {
		"type": ["object", "null"],
		"scope": "application",
		"description": "Configure style of popup menu, suggest.floatConfig is used when not specified.",
		"allOf": [{ "$ref": "#/definitions/floatConfig" }],
		"additionalProperties": false,
		"default": null,
		"properties": {
			"title": {},
			"border": {},
			"rounded": {},
			"highlight": {},
			"borderhighlight": {},
			"winblend": {},
			"shadow": {}
		}
	},
	"suggest.removeDuplicateItems": {
		"type": "boolean",
		"description": "Remove completion items with duplicated word for all sources, snippet items are excluded.",
		"scope": "language-overridable",
		"default": false
	},
	"suggest.removeCurrentWord": {
		"type": "boolean",
		"description": "Remove word item (from around and buffer source) that is identical to current input",
		"scope": "language-overridable",
		"default": false
	},
	"suggest.reversePumAboveCursor": {
		"type": "boolean",
		"scope": "application",
		"description": "Reverse order of complete items when pum shown above cursor.",
		"default": false
	},
	"suggest.selection": {
		"type": "string",
		"scope": "application",
		"default": "first",
		"description": "Controls how suggestions are pre-selected when showing the suggest list.",
		"enum": [
			"first",
			"recentlyUsed",
			"recentlyUsedByPrefix"
		]
	},
	"suggest.snippetIndicator": {
		"type": "string",
		"default": "~",
		"scope": "application",
		"description": "The character used in abbr of complete item to indicate the item could be expand as snippet."
	},
	"suggest.snippetsSupport": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Set to false to disable snippets support of completion.",
		"default": true
	},
	"suggest.timeout": {
		"type": "integer",
		"default": 5e3,
		"minimum": 500,
		"maximum": 15e3,
		"scope": "language-overridable",
		"description": "Timeout for completion, in milliseconds."
	},
	"suggest.triggerAfterInsertEnter": {
		"type": "boolean",
		"description": "Trigger completion after InsertEnter, auto trigger should be 'always' to enable this option",
		"scope": "language-overridable",
		"default": false
	},
	"suggest.triggerCompletionWait": {
		"type": "integer",
		"default": 0,
		"minimum": 0,
		"maximum": 10,
		"scope": "language-overridable",
		"description": "Wait time between text change and completion start, completion is canceled when text changed during wait."
	},
	"suggest.virtualText": {
		"type": "boolean",
		"scope": "application",
		"description": "Show virtual text for insert word of the selected item if any",
		"default": false
	},
	"inlineSuggest.autoTrigger": {
		"type": "boolean",
		"scope": "language-overridable",
		"description": "Enable automatically trigger inline completion on insert mode cursor hold.",
		"default": true
	},
	"inlineSuggest.triggerCompletionWait": {
		"type": "integer",
		"default": 0,
		"minimum": 0,
		"maximum": 1e3,
		"scope": "language-overridable",
		"description": "Wait time in milliseconds between text change and trigger inline completion."
	},
	"tree.closedIcon": {
		"type": "string",
		"scope": "application",
		"default": "+",
		"description": "Closed icon of tree view."
	},
	"tree.key.actions": {
		"type": "string",
		"scope": "application",
		"default": "<tab>",
		"description": "Trigger key to invoke actions."
	},
	"tree.key.activeFilter": {
		"type": "string",
		"scope": "application",
		"default": "f",
		"description": "Trigger key active filter."
	},
	"tree.key.close": {
		"type": "string",
		"scope": "application",
		"default": "<esc>",
		"description": "Trigger key to dispose the tree and close tree window."
	},
	"tree.key.collapseAll": {
		"type": "string",
		"scope": "application",
		"default": "M",
		"description": "Trigger key to collapse all tree node."
	},
	"tree.key.invoke": {
		"type": "string",
		"scope": "application",
		"default": "<cr>",
		"description": "Trigger key to invoke default command of current node or selection."
	},
	"tree.key.selectNext": {
		"type": "string",
		"scope": "application",
		"default": "<C-j>",
		"description": "Trigger key to select next item during filter."
	},
	"tree.key.selectPrevious": {
		"type": "string",
		"scope": "application",
		"default": "<C-k>",
		"description": "Trigger key to select previous item during filter."
	},
	"tree.key.toggle": {
		"type": "string",
		"scope": "application",
		"default": "t",
		"description": "Trigger key to toggle expand state of tree node, does nothing with leaf node."
	},
	"tree.key.toggleSelection": {
		"type": "string",
		"scope": "application",
		"default": "<space>",
		"description": "Trigger key to select/unselect item"
	},
	"tree.openedIcon": {
		"type": "string",
		"scope": "application",
		"default": "-",
		"description": "Opened icon of tree view."
	},
	"typeHierarchy.enableTooltip": {
		"type": "boolean",
		"scope": "application",
		"default": true,
		"description": "Enable tooltip to show relative filepath of type hierarchy."
	},
	"typeHierarchy.openCommand": {
		"type": "string",
		"scope": "application",
		"default": "edit",
		"description": "Open command for type hierarchy tree view."
	},
	"typeHierarchy.splitCommand": {
		"type": "string",
		"scope": "application",
		"default": "botright 30vs",
		"description": "Window split command used by type hierarchy tree view."
	},
	"workspace.rootPatterns": {
		"type": "array",
		"default": [
			".git",
			".hg",
			".projections.json"
		],
		"scope": "application",
		"description": "Root patterns to resolve workspaceFolder from parent folders of opened files, resolved from up to down.",
		"items": { "type": "string" }
	},
	"workspace.bottomUpFiletypes": {
		"type": "array",
		"default": [],
		"scope": "application",
		"description": "Filetypes that should have workspace folder should resolved from base directory of file, or [\"*\"] for any filetype.",
		"items": { "type": "string" }
	},
	"workspace.ignoredFiletypes": {
		"type": "array",
		"default": [],
		"scope": "application",
		"description": "Filetypes that should be ignored for workspace folder resolve.",
		"items": { "type": "string" }
	},
	"workspace.ignoredFolders": {
		"type": "array",
		"default": [
			"$HOME",
			"$HOME/.cargo/**",
			"$HOME/.rustup/**",
			"$HOME/pkg/mod/**",
			"$HOMEBREW_PREFIX/**"
		],
		"scope": "application",
		"description": "List of folders that should not be resolved as workspace folder, environment variables and minimatch patterns can be used.",
		"items": { "type": "string" }
	},
	"workspace.openOutputCommand": {
		"type": "string",
		"default": "vs",
		"scope": "resource",
		"description": "Command used to open output channel."
	},
	"workspace.openResourceCommand": {
		"type": "string",
		"default": "tab drop",
		"scope": "application",
		"description": "Command to open files that not loaded, load files as hidden buffers when empty."
	},
	"workspace.workspaceFolderCheckCwd": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Whether the current working directory should be used first when checking patterns match for workspace folder."
	},
	"workspace.workspaceFolderFallbackCwd": {
		"type": "boolean",
		"default": true,
		"scope": "application",
		"description": "Use current working directory as workspace folder when no root patterns resolved."
	},
	"workspace.removeEmptyWorkspaceFolder": {
		"type": "boolean",
		"default": false,
		"scope": "application",
		"description": "Automatically remove the workspace folder when no buffer associated with it."
	},
	"languageserver": {
		"type": "object",
		"default": {},
		"scope": "resource",
		"description": "Dictionary of languageservers, key is used as id of languageserver, restart coc.nvim required after change.",
		"patternProperties": { "^[_a-zA-Z]+$": { "oneOf": [
			{ "$ref": "#/definitions/languageServerModule" },
			{ "$ref": "#/definitions/languageServerCommand" },
			{ "$ref": "#/definitions/languageServerSocket" }
		] } }
	}
};
//#endregion
//#region src/util/jsonRegistry.ts
var Extensions$2, JSONContributionRegistry, jsonContributionRegistry;
var init_jsonRegistry = __esmMin((() => {
	init_protocol();
	init_registry$1();
	Extensions$2 = { JSONContribution: "base.contributions.json" };
	JSONContributionRegistry = class {
		schemasById;
		_onDidChangeSchema = new import_main$1.Emitter();
		onDidChangeSchema = this._onDidChangeSchema.event;
		constructor() {
			this.schemasById = {};
		}
		registerSchema(uri, unresolvedSchemaContent) {
			this.schemasById[uri] = unresolvedSchemaContent;
			this._onDidChangeSchema.fire(uri);
		}
		notifySchemaChanged(uri) {
			this._onDidChangeSchema.fire(uri);
		}
		getSchemaContributions() {
			return { schemas: this.schemasById };
		}
	};
	jsonContributionRegistry = new JSONContributionRegistry();
	Registry.add(Extensions$2.JSONContribution, jsonContributionRegistry);
}));
//#endregion
//#region node_modules/vscode-languageserver-textdocument/lib/esm/main.js
function mergeSort$1(data, compare) {
	if (data.length <= 1) return data;
	const p = data.length / 2 | 0;
	const left = data.slice(0, p);
	const right = data.slice(p);
	mergeSort$1(left, compare);
	mergeSort$1(right, compare);
	let leftIdx = 0;
	let rightIdx = 0;
	let i = 0;
	while (leftIdx < left.length && rightIdx < right.length) if (compare(left[leftIdx], right[rightIdx]) <= 0) data[i++] = left[leftIdx++];
	else data[i++] = right[rightIdx++];
	while (leftIdx < left.length) data[i++] = left[leftIdx++];
	while (rightIdx < right.length) data[i++] = right[rightIdx++];
	return data;
}
function computeLineOffsets(text, isAtLineStart, textOffset = 0) {
	const result = isAtLineStart ? [textOffset] : [];
	for (let i = 0; i < text.length; i++) {
		const ch = text.charCodeAt(i);
		if (isEOL(ch)) {
			if (ch === 13 && i + 1 < text.length && text.charCodeAt(i + 1) === 10) i++;
			result.push(textOffset + i + 1);
		}
	}
	return result;
}
function isEOL(char) {
	return char === 13 || char === 10;
}
function getWellformedRange$1(range) {
	const start = range.start;
	const end = range.end;
	if (start.line > end.line || start.line === end.line && start.character > end.character) return {
		start: end,
		end: start
	};
	return range;
}
function getWellformedEdit(textEdit) {
	const range = getWellformedRange$1(textEdit.range);
	if (range !== textEdit.range) return {
		newText: textEdit.newText,
		range
	};
	return textEdit;
}
var FullTextDocument, TextDocument;
var init_main = __esmMin((() => {
	FullTextDocument = class FullTextDocument {
		constructor(uri, languageId, version, content) {
			this._uri = uri;
			this._languageId = languageId;
			this._version = version;
			this._content = content;
			this._lineOffsets = void 0;
		}
		get uri() {
			return this._uri;
		}
		get languageId() {
			return this._languageId;
		}
		get version() {
			return this._version;
		}
		getText(range) {
			if (range) {
				const start = this.offsetAt(range.start);
				const end = this.offsetAt(range.end);
				return this._content.substring(start, end);
			}
			return this._content;
		}
		update(changes, version) {
			for (const change of changes) if (FullTextDocument.isIncremental(change)) {
				const range = getWellformedRange$1(change.range);
				const startOffset = this.offsetAt(range.start);
				const endOffset = this.offsetAt(range.end);
				this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);
				const startLine = Math.max(range.start.line, 0);
				const endLine = Math.max(range.end.line, 0);
				let lineOffsets = this._lineOffsets;
				const addedLineOffsets = computeLineOffsets(change.text, false, startOffset);
				if (endLine - startLine === addedLineOffsets.length) for (let i = 0, len = addedLineOffsets.length; i < len; i++) lineOffsets[i + startLine + 1] = addedLineOffsets[i];
				else if (addedLineOffsets.length < 1e4) lineOffsets.splice(startLine + 1, endLine - startLine, ...addedLineOffsets);
				else this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));
				const diff = change.text.length - (endOffset - startOffset);
				if (diff !== 0) for (let i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) lineOffsets[i] = lineOffsets[i] + diff;
			} else if (FullTextDocument.isFull(change)) {
				this._content = change.text;
				this._lineOffsets = void 0;
			} else throw new Error("Unknown change event received");
			this._version = version;
		}
		getLineOffsets() {
			if (this._lineOffsets === void 0) this._lineOffsets = computeLineOffsets(this._content, true);
			return this._lineOffsets;
		}
		positionAt(offset) {
			offset = Math.max(Math.min(offset, this._content.length), 0);
			const lineOffsets = this.getLineOffsets();
			let low = 0, high = lineOffsets.length;
			if (high === 0) return {
				line: 0,
				character: offset
			};
			while (low < high) {
				const mid = Math.floor((low + high) / 2);
				if (lineOffsets[mid] > offset) high = mid;
				else low = mid + 1;
			}
			const line = low - 1;
			offset = this.ensureBeforeEOL(offset, lineOffsets[line]);
			return {
				line,
				character: offset - lineOffsets[line]
			};
		}
		offsetAt(position) {
			const lineOffsets = this.getLineOffsets();
			if (position.line >= lineOffsets.length) return this._content.length;
			else if (position.line < 0) return 0;
			const lineOffset = lineOffsets[position.line];
			if (position.character <= 0) return lineOffset;
			const nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;
			const offset = Math.min(lineOffset + position.character, nextLineOffset);
			return this.ensureBeforeEOL(offset, lineOffset);
		}
		ensureBeforeEOL(offset, lineOffset) {
			while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) offset--;
			return offset;
		}
		get lineCount() {
			return this.getLineOffsets().length;
		}
		static isIncremental(event) {
			const candidate = event;
			return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range !== void 0 && (candidate.rangeLength === void 0 || typeof candidate.rangeLength === "number");
		}
		static isFull(event) {
			const candidate = event;
			return candidate !== void 0 && candidate !== null && typeof candidate.text === "string" && candidate.range === void 0 && candidate.rangeLength === void 0;
		}
	};
	(function(TextDocument) {
		/**
		* Creates a new text document.
		*
		* @param uri The document's uri.
		* @param languageId  The document's language Id.
		* @param version The document's initial version number.
		* @param content The document's content.
		*/
		function create(uri, languageId, version, content) {
			return new FullTextDocument(uri, languageId, version, content);
		}
		TextDocument.create = create;
		/**
		* Updates a TextDocument by modifying its content.
		*
		* @param document the document to update. Only documents created by TextDocument.create are valid inputs.
		* @param changes the changes to apply to the document.
		* @param version the changes version for the document.
		* @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.
		*
		*/
		function update(document, changes, version) {
			if (document instanceof FullTextDocument) {
				document.update(changes, version);
				return document;
			} else throw new Error("TextDocument.update: document must be created by TextDocument.create");
		}
		TextDocument.update = update;
		function applyEdits(document, edits) {
			const text = document.getText();
			const sortedEdits = mergeSort$1(edits.map(getWellformedEdit), (a, b) => {
				const diff = a.range.start.line - b.range.start.line;
				if (diff === 0) return a.range.start.character - b.range.start.character;
				return diff;
			});
			let lastModifiedOffset = 0;
			const spans = [];
			for (const e of sortedEdits) {
				const startOffset = document.offsetAt(e.range.start);
				if (startOffset < lastModifiedOffset) throw new Error("Overlapping edit");
				else if (startOffset > lastModifiedOffset) spans.push(text.substring(lastModifiedOffset, startOffset));
				if (e.newText.length) spans.push(e.newText);
				lastModifiedOffset = document.offsetAt(e.range.end);
			}
			spans.push(text.substr(lastModifiedOffset));
			return spans.join("");
		}
		TextDocument.applyEdits = applyEdits;
	})(TextDocument || (TextDocument = {}));
}));
//#endregion
//#region src/util/expand.ts
/**
* Expand `${...}` placeholders in `input`. Variables that need a context
* value not provided in `ctx` are left untouched (so callers downstream can
* resolve them later).
*/
function expandVariables(input, ctx = {}) {
	return input.replace(/\$\{(.*?)\}/g, (match, name) => {
		if (name.startsWith("env:")) {
			const key = name.slice(4);
			if (!key) return match;
			return process.env[key] ?? match;
		}
		switch (name) {
			case "tmpdir": return os$5.tmpdir();
			case "userHome": return os$5.homedir();
			case "cwd": return ctx.cwd ?? process.cwd();
			case "workspace":
			case "workspaceRoot":
			case "workspaceFolder": return ctx.root ?? match;
			case "workspaceFolderBasename": return ctx.root ? path$5.basename(ctx.root) : match;
			case "file": return ctx.file ?? match;
			case "fileDirname": return ctx.file ? path$5.dirname(ctx.file) : match;
			case "fileExtname": return ctx.file ? path$5.extname(ctx.file) : match;
			case "fileBasename": return ctx.file ? path$5.basename(ctx.file) : match;
			case "fileBasenameNoExtension": {
				if (!ctx.file) return match;
				const base = path$5.basename(ctx.file);
				return base.slice(0, base.length - path$5.extname(base).length);
			}
			default: return match;
		}
	});
}
var init_expand = __esmMin((() => {
	init_node();
}));
//#endregion
//#region src/configuration/util.ts
/**
* Basic expand for configuration values. Resolves the context-free variables
* (`${env:X}`, `${cwd}`, `${userHome}`, `${tmpdir}`); workspace/file variables
* are left untouched here and resolved later via `workspace.expand` at use
* time, when the workspace folder and current file are known.
*/
function expand(input) {
	return expandVariables(input);
}
function expandObject(obj) {
	if (obj == null) return obj;
	if (typeof obj === "string") return expand(obj);
	if (Array.isArray(obj)) return obj.map((obj) => expandObject(obj));
	if (objectLiteral(obj)) {
		for (let key of Object.keys(obj)) obj[key] = expandObject(obj[key]);
		return obj;
	}
	return obj;
}
function convertTarget(updateTarget) {
	let target;
	switch (updateTarget) {
		case 1:
			target = 1;
			break;
		case 2:
			target = 2;
			break;
		default: target = 3;
	}
	return target;
}
function scopeToOverrides(scope) {
	let overrides;
	if (typeof scope === "string") overrides = { resource: scope };
	else if (URI.isUri(scope)) overrides = { resource: scope.toString() };
	else if (scope != null) overrides = {
		resource: scope["uri"],
		overrideIdentifier: scope["languageId"]
	};
	return overrides;
}
function overrideIdentifiersFromKey(key) {
	const identifiers = [];
	if (OVERRIDE_PROPERTY_REGEX.test(key)) {
		let matches = OVERRIDE_IDENTIFIER_REGEX.exec(key);
		while (matches?.length) {
			const identifier = matches[1].trim();
			if (identifier) identifiers.push(identifier);
			matches = OVERRIDE_IDENTIFIER_REGEX.exec(key);
		}
	}
	return distinct(identifiers);
}
function mergeConfigProperties(obj) {
	let res = {};
	for (let key of Object.keys(obj)) if (key.indexOf(".") == -1) res[key] = obj[key];
	else {
		let parts = key.split(".");
		let pre = res;
		let len = parts.length;
		for (let i = 0; i < len; i++) {
			let k = parts[i];
			if (i == len - 1) pre[k] = obj[key];
			else {
				pre[k] = pre[k] || {};
				pre = pre[k];
			}
		}
	}
	return res;
}
function convertErrors(content, errors) {
	let items = [];
	let document = TextDocument.create(documentUri, "json", 0, content);
	for (let err of errors) {
		const range = Range.create(document.positionAt(err.offset), document.positionAt(err.offset + err.length));
		items.push(Diagnostic.create(range, printParseErrorCode(err.error), DiagnosticSeverity.Error));
	}
	return items;
}
function toValuesTree(properties, conflictReporter, doExpand = false) {
	const root = Object.create(null);
	for (const key in properties) addToValueTree(root, key, properties[key], conflictReporter, doExpand);
	return root;
}
function addToValueTree(settingsTreeRoot, key, value, conflictReporter, doExpand = false) {
	const segments = key.split(".");
	const last = segments.pop();
	let curr = settingsTreeRoot;
	for (let i = 0; i < segments.length; i++) {
		const s = segments[i];
		let obj = curr[s];
		switch (typeof obj) {
			case "undefined":
				obj = curr[s] = Object.create(null);
				break;
			case "object": break;
			default:
				if (conflictReporter) conflictReporter(`Ignoring ${key} as ${segments.slice(0, i + 1).join(".")} is ${JSON.stringify(obj)}`);
				return;
		}
		curr = obj;
	}
	if (typeof curr === "object" && curr !== null) if (doExpand) curr[last] = expandObject(value);
	else curr[last] = value;
	else if (conflictReporter) conflictReporter(`Ignoring ${key} as ${segments.join(".")} is ${JSON.stringify(curr)}`);
}
function removeFromValueTree(valueTree, key) {
	doRemoveFromValueTree(valueTree, key.split("."));
}
function doRemoveFromValueTree(valueTree, segments) {
	const first = segments.shift();
	if (segments.length === 0) {
		delete valueTree[first];
		return;
	}
	if (Object.keys(valueTree).includes(first)) {
		const value = valueTree[first];
		if (typeof value === "object" && !Array.isArray(value)) {
			doRemoveFromValueTree(value, segments);
			if (Object.keys(value).length === 0) delete valueTree[first];
		}
	}
}
function getConfigurationValue(config, settingPath, defaultValue) {
	function accessSetting(config, path) {
		let current = config;
		for (let i = 0; i < path.length; i++) {
			if (typeof current !== "object" || current === null) return;
			current = current[path[i]];
		}
		return current;
	}
	const result = accessSetting(config, settingPath.split("."));
	return typeof result === "undefined" ? defaultValue : result;
}
function toJSONObject(obj) {
	if (obj) {
		if (Array.isArray(obj)) return obj.map(toJSONObject);
		else if (typeof obj === "object") {
			const res = Object.create(null);
			for (const key in obj) if (Object.prototype.hasOwnProperty.call(obj, key)) res[key] = toJSONObject(obj[key]);
			return res;
		}
	}
	return obj;
}
/**
* Compare too configuration contents
*/
function compareConfigurationContents(to, from) {
	const added = to ? from ? to.keys.filter((key) => from.keys.indexOf(key) === -1) : [...to.keys] : [];
	const removed = from ? to ? from.keys.filter((key) => to.keys.indexOf(key) === -1) : [...from.keys] : [];
	const updated = [];
	if (to && from) {
		for (const key of from.keys) if (to.keys.indexOf(key) !== -1) {
			if (!equals(getConfigurationValue(from.contents, key), getConfigurationValue(to.contents, key))) updated.push(key);
		}
	}
	return {
		added,
		removed,
		updated
	};
}
function getDefaultValue(type) {
	switch (Array.isArray(type) ? type[0] : type) {
		case "boolean": return false;
		case "integer":
		case "number": return 0;
		case "string": return "";
		case "array": return [];
		case "object": return {};
		default: return null;
	}
}
function lookUp(tree, key) {
	if (key) {
		if (tree && hasOwnProperty$1(tree, key)) return tree[key];
		const parts = key.split(".");
		let node = tree;
		for (let i = 0; node && i < parts.length; i++) node = node[parts[i]];
		return node;
	}
	return tree;
}
var documentUri, OVERRIDE_IDENTIFIER_PATTERN, OVERRIDE_IDENTIFIER_REGEX, OVERRIDE_PROPERTY_PATTERN, OVERRIDE_PROPERTY_REGEX;
var init_util$6 = __esmMin((() => {
	init_main$1();
	init_main();
	init_main$2();
	init_esm();
	init_array();
	init_expand();
	init_is();
	init_object();
	documentUri = "file:///1";
	OVERRIDE_IDENTIFIER_PATTERN = `\\[([^\\]]+)\\]`;
	OVERRIDE_IDENTIFIER_REGEX = new RegExp(OVERRIDE_IDENTIFIER_PATTERN, "g");
	OVERRIDE_PROPERTY_PATTERN = `^(${OVERRIDE_IDENTIFIER_PATTERN})+$`;
	OVERRIDE_PROPERTY_REGEX = new RegExp(OVERRIDE_PROPERTY_PATTERN);
}));
//#endregion
//#region src/configuration/model.ts
var ConfigurationModel;
var init_model = __esmMin((() => {
	init_array();
	init_is();
	init_object();
	init_util$6();
	ConfigurationModel = class ConfigurationModel {
		_contents;
		_keys;
		_overrides;
		frozen = false;
		overrideConfigurations = /* @__PURE__ */ new Map();
		constructor(_contents = {}, _keys = [], _overrides = []) {
			this._contents = _contents;
			this._keys = _keys;
			this._overrides = _overrides;
		}
		get contents() {
			return this.checkAndFreeze(this._contents);
		}
		get overrides() {
			return this.checkAndFreeze(this._overrides);
		}
		get keys() {
			return this.checkAndFreeze(this._keys);
		}
		get isFrozen() {
			return this.frozen;
		}
		checkAndFreeze(data) {
			if (this.frozen && !Object.isFrozen(data)) return deepFreeze(data);
			return data;
		}
		isEmpty() {
			return this._keys.length === 0 && Object.keys(this._contents).length === 0 && this._overrides.length === 0;
		}
		clone() {
			return new ConfigurationModel(deepClone(this._contents), [...this.keys], deepClone(this.overrides));
		}
		toJSON() {
			return {
				contents: this.contents,
				overrides: this.overrides,
				keys: this.keys
			};
		}
		getValue(section) {
			return section ? getConfigurationValue(this.contents, section) : this.contents;
		}
		getOverrideValue(section, overrideIdentifier) {
			const overrideContents = this.getContentsForOverrideIdentifier(overrideIdentifier);
			return overrideContents ? section ? getConfigurationValue(overrideContents, section) : overrideContents : void 0;
		}
		getKeysForOverrideIdentifier(identifier) {
			const keys = [];
			for (const override of this.overrides) if (override.identifiers.includes(identifier)) keys.push(...override.keys);
			return distinct(keys);
		}
		getAllOverrideIdentifiers() {
			const result = [];
			for (const override of this.overrides) result.push(...override.identifiers);
			return distinct(result);
		}
		override(identifier) {
			let overrideConfigurationModel = this.overrideConfigurations.get(identifier);
			if (!overrideConfigurationModel) {
				overrideConfigurationModel = this.createOverrideConfigurationModel(identifier);
				this.overrideConfigurations.set(identifier, overrideConfigurationModel);
			}
			return overrideConfigurationModel;
		}
		merge(...others) {
			const contents = deepClone(this._contents);
			const overrides = deepClone(this._overrides);
			const keys = [...this._keys];
			for (const other of others) {
				if (other.isEmpty()) continue;
				this.mergeContents(contents, other.contents);
				for (const otherOverride of other.overrides) {
					const [override] = overrides.filter((o) => equals(o.identifiers, otherOverride.identifiers));
					if (override) {
						this.mergeContents(override.contents, otherOverride.contents);
						override.keys.push(...otherOverride.keys);
						override.keys = distinct(override.keys);
					} else overrides.push(deepClone(otherOverride));
				}
				for (const key of other.keys) if (keys.indexOf(key) === -1) keys.push(key);
			}
			return new ConfigurationModel(contents, keys, overrides);
		}
		freeze() {
			this.frozen = true;
			return this;
		}
		mergeContents(source, target) {
			for (const key of Object.keys(target)) {
				if (key in source) {
					if (objectLiteral(source[key]) && objectLiteral(target[key])) {
						this.mergeContents(source[key], target[key]);
						continue;
					}
				}
				source[key] = deepClone(target[key]);
			}
		}
		setValue(key, value) {
			this.addKey(key);
			addToValueTree(this.contents, key, value, (e) => {
				console.error(e);
			});
		}
		removeValue(key) {
			if (this.removeKey(key)) removeFromValueTree(this.contents, key);
		}
		addKey(key) {
			let index = this.keys.length;
			for (let i = 0; i < index; i++) if (key.indexOf(this.keys[i]) === 0) index = i;
			this.keys.splice(index, 1, key);
		}
		removeKey(key) {
			const index = this.keys.indexOf(key);
			if (index !== -1) {
				this.keys.splice(index, 1);
				return true;
			}
			return false;
		}
		createOverrideConfigurationModel(identifier) {
			const overrideContents = this.getContentsForOverrideIdentifier(identifier);
			if (!overrideContents || typeof overrideContents !== "object" || !Object.keys(overrideContents).length) return this;
			const contents = {};
			for (const key of distinct([...Object.keys(this.contents), ...Object.keys(overrideContents)])) {
				let contentsForKey = this.contents[key];
				const overrideContentsForKey = overrideContents[key];
				if (overrideContentsForKey) if (typeof contentsForKey === "object" && typeof overrideContentsForKey === "object") {
					contentsForKey = deepClone(contentsForKey);
					this.mergeContents(contentsForKey, overrideContentsForKey);
				} else contentsForKey = overrideContentsForKey;
				contents[key] = contentsForKey;
			}
			return new ConfigurationModel(contents, this._keys, this.overrides);
		}
		getContentsForOverrideIdentifier(identifier) {
			let contentsForIdentifierOnly = null;
			let contents = null;
			const mergeContents = (contentsToMerge) => {
				if (contentsToMerge) if (contents) this.mergeContents(contents, contentsToMerge);
				else contents = deepClone(contentsToMerge);
			};
			for (const override of this.overrides) if (equals(override.identifiers, [identifier])) contentsForIdentifierOnly = override.contents;
			else if (override.identifiers.includes(identifier)) mergeContents(override.contents);
			mergeContents(contentsForIdentifierOnly);
			return contents;
		}
	};
}));
//#endregion
//#region src/configuration/configuration.ts
function compare(from, to) {
	const { added, removed, updated } = compareConfigurationContents(to, from);
	const overrides = [];
	const fromOverrideIdentifiers = from?.getAllOverrideIdentifiers() ?? [];
	const toOverrideIdentifiers = to?.getAllOverrideIdentifiers() ?? [];
	if (to) {
		const addedOverrideIdentifiers = toOverrideIdentifiers.filter((key) => !fromOverrideIdentifiers.includes(key));
		for (const identifier of addedOverrideIdentifiers) overrides.push([identifier, to.getKeysForOverrideIdentifier(identifier)]);
	}
	if (from) {
		const removedOverrideIdentifiers = fromOverrideIdentifiers.filter((key) => !toOverrideIdentifiers.includes(key));
		for (const identifier of removedOverrideIdentifiers) overrides.push([identifier, from.getKeysForOverrideIdentifier(identifier)]);
	}
	if (to && from) {
		for (const identifier of fromOverrideIdentifiers) if (toOverrideIdentifiers.includes(identifier)) {
			const result = compareConfigurationContents({
				contents: from.getOverrideValue(void 0, identifier) || {},
				keys: from.getKeysForOverrideIdentifier(identifier)
			}, {
				contents: to.getOverrideValue(void 0, identifier) || {},
				keys: to.getKeysForOverrideIdentifier(identifier)
			});
			overrides.push([identifier, [
				...result.added,
				...result.removed,
				...result.updated
			]]);
		}
	}
	return {
		added,
		removed,
		updated,
		overrides
	};
}
var FolderConfigutions, Configuration;
var init_configuration$3 = __esmMin((() => {
	init_esm();
	init_array();
	init_fs();
	init_object();
	init_model();
	init_util$6();
	FolderConfigutions = class {
		_folderConfigurations = /* @__PURE__ */ new Map();
		get keys() {
			return this._folderConfigurations.keys();
		}
		has(folder) {
			for (let key of this.keys) if (sameFile(folder, key)) return true;
			return false;
		}
		set(folder, model) {
			let key = normalizeFilePath(folder);
			this._folderConfigurations.set(key, model);
		}
		get(folder) {
			let key = normalizeFilePath(folder);
			return this._folderConfigurations.get(key);
		}
		delete(folder) {
			let key = normalizeFilePath(folder);
			this._folderConfigurations.delete(key);
		}
		forEach(fn) {
			this._folderConfigurations.forEach(fn);
		}
		getConfigurationByResource(uri) {
			let u = URI.parse(uri);
			if (u.scheme !== "file") return void 0;
			let folders = Array.from(this._folderConfigurations.keys());
			folders.sort((a, b) => b.length - a.length);
			let fullpath = u.fsPath;
			for (let folder of folders) if (isParentFolder(folder, fullpath, true)) return {
				folder,
				model: this._folderConfigurations.get(folder)
			};
		}
	};
	Configuration = class Configuration {
		_defaultConfiguration;
		_userConfiguration;
		_workspaceConfiguration;
		_folderConfigurations;
		_memoryConfiguration;
		_workspaceConsolidatedConfiguration = null;
		_resolvedFolderConfigurations = /* @__PURE__ */ new Map();
		_memoryConfigurationByResource = /* @__PURE__ */ new Map();
		constructor(_defaultConfiguration, _userConfiguration, _workspaceConfiguration = new ConfigurationModel(), _folderConfigurations = new FolderConfigutions(), _memoryConfiguration = new ConfigurationModel()) {
			this._defaultConfiguration = _defaultConfiguration;
			this._userConfiguration = _userConfiguration;
			this._workspaceConfiguration = _workspaceConfiguration;
			this._folderConfigurations = _folderConfigurations;
			this._memoryConfiguration = _memoryConfiguration;
		}
		updateValue(key, value, overrides = {}) {
			let memoryConfiguration;
			if (overrides.resource) {
				memoryConfiguration = this._memoryConfigurationByResource.get(overrides.resource);
				if (!memoryConfiguration) {
					memoryConfiguration = new ConfigurationModel();
					this._memoryConfigurationByResource.set(overrides.resource, memoryConfiguration);
				}
			} else memoryConfiguration = this._memoryConfiguration;
			if (value === void 0) memoryConfiguration.removeValue(key);
			else memoryConfiguration.setValue(key, value);
			if (!overrides.resource) this._workspaceConsolidatedConfiguration = null;
		}
		hasFolder(folder) {
			return this._folderConfigurations.has(folder);
		}
		addFolderConfiguration(folder, model, resource) {
			this._folderConfigurations.set(folder, model);
			if (resource) this._resolvedFolderConfigurations.set(resource, folder);
		}
		deleteFolderConfiguration(fsPath) {
			this._folderConfigurations.delete(fsPath);
		}
		getWorkspaceConsolidateConfiguration() {
			if (!this._workspaceConsolidatedConfiguration) {
				this._workspaceConsolidatedConfiguration = this._defaultConfiguration.merge(this._userConfiguration, this._workspaceConfiguration, this._memoryConfiguration);
				this._workspaceConsolidatedConfiguration = this._workspaceConsolidatedConfiguration.freeze();
			}
			return this._workspaceConsolidatedConfiguration;
		}
		/**
		* Get folder configuration fsPath & model
		* @param uri folder or file uri
		*/
		getFolderConfigurationModelForResource(uri) {
			let folder = this._resolvedFolderConfigurations.get(uri);
			if (folder) return this._folderConfigurations.get(folder);
			let conf = this._folderConfigurations.getConfigurationByResource(uri);
			if (!conf) return void 0;
			this._resolvedFolderConfigurations.set(uri, conf.folder);
			return conf.model;
		}
		resolveFolder(uri) {
			let folder = this._resolvedFolderConfigurations.get(uri);
			if (folder) return folder;
			let folders = Array.from(this._folderConfigurations.keys);
			folders.sort((a, b) => b.length - a.length);
			for (let folder of folders) if (isParentFolder(folder, URI.parse(uri).fsPath, true)) {
				this._resolvedFolderConfigurations.set(uri, folder);
				return folder;
			}
		}
		getConsolidatedConfigurationModel(overrides) {
			let configuration = this.getWorkspaceConsolidateConfiguration();
			if (overrides.resource) {
				let folderConfiguration = this.getFolderConfigurationModelForResource(overrides.resource);
				if (folderConfiguration) configuration = configuration.merge(folderConfiguration);
				const memoryConfigurationForResource = this._memoryConfigurationByResource.get(overrides.resource);
				if (memoryConfigurationForResource) configuration = configuration.merge(memoryConfigurationForResource);
			}
			if (overrides.overrideIdentifier) configuration = configuration.override(overrides.overrideIdentifier);
			return configuration;
		}
		getValue(section, overrides) {
			return this.getConsolidatedConfigurationModel(overrides).getValue(section);
		}
		inspect(key, overrides) {
			const consolidateConfigurationModel = this.getConsolidatedConfigurationModel(overrides);
			const folderConfigurationModel = this.getFolderConfigurationModelForResource(overrides.resource);
			const memoryConfigurationModel = overrides.resource ? this._memoryConfigurationByResource.get(overrides.resource) || this._memoryConfiguration : this._memoryConfiguration;
			const defaultValue = overrides.overrideIdentifier ? this._defaultConfiguration.freeze().override(overrides.overrideIdentifier).getValue(key) : this._defaultConfiguration.freeze().getValue(key);
			const userValue = overrides.overrideIdentifier ? this._userConfiguration.freeze().override(overrides.overrideIdentifier).getValue(key) : this._userConfiguration.freeze().getValue(key);
			const workspaceValue = overrides.overrideIdentifier ? this._workspaceConfiguration.freeze().override(overrides.overrideIdentifier).getValue(key) : this._workspaceConfiguration.freeze().getValue(key);
			const workspaceFolderValue = folderConfigurationModel ? overrides.overrideIdentifier ? folderConfigurationModel.freeze().override(overrides.overrideIdentifier).getValue(key) : folderConfigurationModel.freeze().getValue(key) : void 0;
			const memoryValue = overrides.overrideIdentifier ? memoryConfigurationModel.override(overrides.overrideIdentifier).getValue(key) : memoryConfigurationModel.getValue(key);
			const value = consolidateConfigurationModel.getValue(key);
			const overrideIdentifiers = distinct(consolidateConfigurationModel.overrides.map((override) => override.identifiers).flat()).filter((overrideIdentifier) => consolidateConfigurationModel.getOverrideValue(key, overrideIdentifier) !== void 0);
			return {
				defaultValue,
				userValue,
				workspaceValue,
				workspaceFolderValue,
				memoryValue,
				value,
				default: defaultValue !== void 0 ? {
					value: this._defaultConfiguration.freeze().getValue(key),
					override: overrides.overrideIdentifier ? this._defaultConfiguration.freeze().getOverrideValue(key, overrides.overrideIdentifier) : void 0
				} : void 0,
				user: userValue !== void 0 ? {
					value: this._userConfiguration.freeze().getValue(key),
					override: overrides.overrideIdentifier ? this._userConfiguration.freeze().getOverrideValue(key, overrides.overrideIdentifier) : void 0
				} : void 0,
				workspace: workspaceValue !== void 0 ? {
					value: this._workspaceConfiguration.freeze().getValue(key),
					override: overrides.overrideIdentifier ? this._workspaceConfiguration.freeze().getOverrideValue(key, overrides.overrideIdentifier) : void 0
				} : void 0,
				workspaceFolder: workspaceFolderValue !== void 0 ? {
					value: folderConfigurationModel?.freeze().getValue(key),
					override: overrides.overrideIdentifier ? folderConfigurationModel?.freeze().getOverrideValue(key, overrides.overrideIdentifier) : void 0
				} : void 0,
				memory: memoryValue !== void 0 ? {
					value: memoryConfigurationModel.getValue(key),
					override: overrides.overrideIdentifier ? memoryConfigurationModel.getOverrideValue(key, overrides.overrideIdentifier) : void 0
				} : void 0,
				overrideIdentifiers: overrideIdentifiers.length ? overrideIdentifiers : void 0
			};
		}
		get defaults() {
			return this._defaultConfiguration;
		}
		get user() {
			return this._userConfiguration;
		}
		get workspace() {
			return this._workspaceConfiguration;
		}
		get memory() {
			return this._memoryConfiguration;
		}
		getConfigurationModel(target, folder) {
			switch (target) {
				case 0: return this._defaultConfiguration;
				case 1: return this._userConfiguration;
				case 2: return this._workspaceConfiguration;
				case 3: return this._folderConfigurations.get(folder) ?? new ConfigurationModel();
				default: return this._memoryConfiguration;
			}
		}
		updateFolderConfiguration(folder, model) {
			this._folderConfigurations.set(folder, model);
		}
		updateUserConfiguration(model) {
			this._userConfiguration = model;
			this._workspaceConsolidatedConfiguration = null;
		}
		updateWorkspaceConfiguration(model) {
			this._workspaceConfiguration = model;
			this._workspaceConsolidatedConfiguration = null;
		}
		updateDefaultConfiguration(model) {
			this._defaultConfiguration = model;
			this._workspaceConsolidatedConfiguration = null;
		}
		updateMemoryConfiguration(model) {
			this._memoryConfiguration = model;
			this._workspaceConsolidatedConfiguration = null;
		}
		compareAndUpdateMemoryConfiguration(memory) {
			const { added, updated, removed, overrides } = compare(this._memoryConfiguration, memory);
			const keys = [
				...added,
				...updated,
				...removed
			];
			if (keys.length) this.updateMemoryConfiguration(memory);
			return {
				keys,
				overrides
			};
		}
		compareAndUpdateUserConfiguration(user) {
			const { added, updated, removed, overrides } = compare(this._userConfiguration, user);
			const keys = [
				...added,
				...updated,
				...removed
			];
			if (keys.length) this.updateUserConfiguration(user);
			return {
				keys,
				overrides
			};
		}
		compareAndUpdateDefaultConfiguration(defaults, keys) {
			const overrides = [];
			if (!keys) {
				const { added, updated, removed } = compare(this._defaultConfiguration, defaults);
				keys = [
					...added,
					...updated,
					...removed
				];
			}
			for (const key of keys) for (const overrideIdentifier of overrideIdentifiersFromKey(key)) {
				const fromKeys = this._defaultConfiguration.getKeysForOverrideIdentifier(overrideIdentifier);
				const toKeys = defaults.getKeysForOverrideIdentifier(overrideIdentifier);
				const keys = [
					...toKeys.filter((key) => fromKeys.indexOf(key) === -1),
					...fromKeys.filter((key) => toKeys.indexOf(key) === -1),
					...fromKeys.filter((key) => !equals(this._defaultConfiguration.override(overrideIdentifier).getValue(key), defaults.override(overrideIdentifier).getValue(key)))
				];
				overrides.push([overrideIdentifier, keys]);
			}
			this.updateDefaultConfiguration(defaults);
			return {
				keys,
				overrides
			};
		}
		compareAndUpdateWorkspaceConfiguration(workspaceConfiguration) {
			const { added, updated, removed, overrides } = compare(this._workspaceConfiguration, workspaceConfiguration);
			const keys = [
				...added,
				...updated,
				...removed
			];
			if (keys.length) this.updateWorkspaceConfiguration(workspaceConfiguration);
			return {
				keys,
				overrides
			};
		}
		compareAndUpdateFolderConfiguration(folder, folderConfiguration) {
			const currentFolderConfiguration = this._folderConfigurations.get(folder);
			const { added, updated, removed, overrides } = compare(currentFolderConfiguration, folderConfiguration);
			const keys = [
				...added,
				...updated,
				...removed
			];
			if (keys.length || !currentFolderConfiguration) this.updateFolderConfiguration(folder, folderConfiguration);
			return {
				keys,
				overrides
			};
		}
		compareAndDeleteFolderConfiguration(folder) {
			const folderConfig = this._folderConfigurations.get(folder);
			if (!folderConfig) return;
			this.deleteFolderConfiguration(folder);
			const { added, updated, removed, overrides } = compare(folderConfig, void 0);
			return {
				keys: [
					...added,
					...updated,
					...removed
				],
				overrides
			};
		}
		allKeys() {
			const keys = /* @__PURE__ */ new Set();
			this._defaultConfiguration.freeze().keys.forEach((key) => keys.add(key));
			this._userConfiguration.freeze().keys.forEach((key) => keys.add(key));
			this._workspaceConfiguration.freeze().keys.forEach((key) => keys.add(key));
			this._folderConfigurations.forEach((folderConfiguration) => folderConfiguration.freeze().keys.forEach((key) => keys.add(key)));
			return [...keys.values()];
		}
		toData() {
			let { _defaultConfiguration, _memoryConfiguration, _userConfiguration, _workspaceConfiguration, _folderConfigurations } = this;
			let folders = [];
			_folderConfigurations.forEach((model, fsPath) => {
				folders.push([fsPath, model.toJSON()]);
			});
			return {
				defaults: _defaultConfiguration.toJSON(),
				user: _userConfiguration.toJSON(),
				workspace: _workspaceConfiguration.toJSON(),
				folders,
				memory: _memoryConfiguration.toJSON()
			};
		}
		static parse(data) {
			const defaultConfiguration = this.parseConfigurationModel(data.defaults);
			const userConfiguration = this.parseConfigurationModel(data.user);
			const workspaceConfiguration = this.parseConfigurationModel(data.workspace);
			const folderConfigurations = new FolderConfigutions();
			const memoryConfiguration = this.parseConfigurationModel(data.memory);
			data.folders.forEach((value) => {
				folderConfigurations.set(value[0], this.parseConfigurationModel(value[1]));
			});
			return new Configuration(defaultConfiguration, userConfiguration, workspaceConfiguration, folderConfigurations, memoryConfiguration);
		}
		static parseConfigurationModel(model) {
			return new ConfigurationModel(model.contents, model.keys, model.overrides).freeze();
		}
	};
}));
//#endregion
//#region src/configuration/event.ts
var ConfigurationChangeEvent;
var init_event = __esmMin((() => {
	init_object();
	init_configuration$3();
	init_model();
	init_util$6();
	ConfigurationChangeEvent = class {
		change;
		previous;
		currentConfiguration;
		affectedKeysTree;
		affectedKeys;
		source;
		constructor(change, previous, currentConfiguration) {
			this.change = change;
			this.previous = previous;
			this.currentConfiguration = currentConfiguration;
			const keysSet = /* @__PURE__ */ new Set();
			change.keys.forEach((key) => keysSet.add(key));
			change.overrides.forEach(([, keys]) => keys.forEach((key) => keysSet.add(key)));
			this.affectedKeys = [...keysSet.values()];
			const configurationModel = new ConfigurationModel();
			this.affectedKeys.forEach((key) => configurationModel.setValue(key, {}));
			this.affectedKeysTree = configurationModel.contents;
		}
		_previousConfiguration = void 0;
		get previousConfiguration() {
			if (!this._previousConfiguration && this.previous) this._previousConfiguration = Configuration.parse(this.previous);
			return this._previousConfiguration;
		}
		affectsConfiguration(section, scope) {
			let overrides = scope ? scopeToOverrides(scope) : void 0;
			if (this.doesAffectedKeysTreeContains(this.affectedKeysTree, section)) {
				if (overrides) return !equals(this.previousConfiguration ? this.previousConfiguration.getValue(section, overrides) : void 0, this.currentConfiguration.getValue(section, overrides));
				return true;
			}
			return false;
		}
		doesAffectedKeysTreeContains(affectedKeysTree, section) {
			let requestedTree = toValuesTree({ [section]: true }, () => {});
			let key;
			while (typeof requestedTree === "object" && (key = Object.keys(requestedTree)[0])) {
				affectedKeysTree = affectedKeysTree[key];
				if (!affectedKeysTree) return false;
				requestedTree = requestedTree[key];
			}
			return true;
		}
	};
}));
//#endregion
//#region src/configuration/parser.ts
var ConfigurationModelParser;
var init_parser$1 = __esmMin((() => {
	init_main$1();
	init_main$2();
	init_logger$2();
	init_model();
	init_util$6();
	createLogger$1("parser");
	ConfigurationModelParser = class {
		_name;
		_raw = null;
		_configurationModel = null;
		_parseErrors = [];
		constructor(_name) {
			this._name = _name;
		}
		get configurationModel() {
			return this._configurationModel || new ConfigurationModel();
		}
		get errors() {
			return this._parseErrors;
		}
		parse(content, options) {
			if (content != null) {
				const raw = this.doParseContent(content);
				this.parseRaw(raw, options);
			}
		}
		parseRaw(raw, options) {
			this._raw = raw;
			const { contents, keys, overrides } = this.doParseRaw(raw, options);
			this._configurationModel = new ConfigurationModel(contents, keys, overrides);
		}
		doParseContent(content) {
			let raw = {};
			let currentProperty = null;
			let currentParent = [];
			const previousParents = [];
			const _errors = [];
			function onValue(value) {
				if (Array.isArray(currentParent)) currentParent.push(value);
				else if (currentProperty !== null) currentParent[currentProperty] = value;
			}
			const visitor = {
				onObjectBegin: () => {
					const object = {};
					onValue(object);
					previousParents.push(currentParent);
					currentParent = object;
					currentProperty = null;
				},
				onObjectProperty: (name) => {
					currentProperty = name;
				},
				onObjectEnd: () => {
					currentParent = previousParents.pop();
				},
				onArrayBegin: () => {
					const array = [];
					onValue(array);
					previousParents.push(currentParent);
					currentParent = array;
					currentProperty = null;
				},
				onArrayEnd: () => {
					currentParent = previousParents.pop();
				},
				onLiteralValue: onValue,
				onError: (error, offset, length) => {
					_errors.push({
						error,
						length,
						offset
					});
				}
			};
			if (content) try {
				visit(content, visitor, {
					allowTrailingComma: true,
					allowEmptyContent: true
				});
				raw = currentParent[0] ?? {};
				if (_errors.length > 0) this._parseErrors = convertErrors(content, _errors);
			} catch (e) {
				this._parseErrors = [{
					range: Range.create(0, 0, 0, 0),
					message: `Error on parse configuration file ${this._name}: ${e}`
				}];
			}
			return raw;
		}
		doParseRaw(raw, _options) {
			const onError = (message) => {
				console.error(`Conflict in settings file ${this._name}: ${message}`);
			};
			return {
				contents: toValuesTree(raw, onError, true),
				keys: Object.keys(raw),
				overrides: this.toOverrides(raw, onError),
				restricted: []
			};
		}
		toOverrides(raw, conflictReporter) {
			const overrides = [];
			for (const key of Object.keys(raw)) if (OVERRIDE_PROPERTY_REGEX.test(key)) {
				const overrideRaw = {};
				for (const keyInOverrideRaw in raw[key]) overrideRaw[keyInOverrideRaw] = raw[key][keyInOverrideRaw];
				overrides.push({
					identifiers: overrideIdentifiersFromKey(key),
					keys: Object.keys(overrideRaw),
					contents: toValuesTree(overrideRaw, conflictReporter, true)
				});
			}
			return overrides;
		}
	};
}));
//#endregion
//#region src/configuration/registry.ts
function validateProperty(property, _schema = void 0) {
	if (!property.trim()) return "Cannot register an empty property";
	if (OVERRIDE_PROPERTY_REGEX.test(property)) return `Cannot register ${property}. This matches property pattern '\\\\[.*\\\\]$' for describing language specific editor settings`;
	if (configurationRegistry$1.getConfigurationProperties()[property] !== void 0) return `Cannot register '${property}'. This property is already registered.`;
	return null;
}
var EXCLUDE_KEYS, Extensions$1, allSettings, resourceSettings, resourceLanguageSettingsSchemaId, contributionRegistry, ConfigurationRegistry, configurationRegistry$1;
var init_registry = __esmMin((() => {
	init_array();
	init_jsonRegistry();
	init_object();
	init_protocol();
	init_registry$1();
	init_util$6();
	EXCLUDE_KEYS = ["log-path", "logPath"];
	Extensions$1 = { Configuration: "base.contributions.configuration" };
	allSettings = {
		properties: {},
		patternProperties: {}
	};
	resourceSettings = {
		properties: {},
		patternProperties: {}
	};
	resourceLanguageSettingsSchemaId = "vscode://schemas/settings/resourceLanguage";
	contributionRegistry = Registry.as(Extensions$2.JSONContribution);
	ConfigurationRegistry = class {
		configurationProperties;
		excludedConfigurationProperties;
		resourceLanguageSettingsSchema;
		_onDidSchemaChange = new import_main$1.Emitter();
		onDidSchemaChange = this._onDidSchemaChange.event;
		_onDidUpdateConfiguration = new import_main$1.Emitter();
		onDidUpdateConfiguration = this._onDidUpdateConfiguration.event;
		constructor() {
			this.resourceLanguageSettingsSchema = {
				properties: {},
				patternProperties: {},
				additionalProperties: false,
				errorMessage: "Unknown coc.nvim configuration property",
				allowTrailingCommas: true,
				allowComments: true
			};
			this.configurationProperties = {};
			this.excludedConfigurationProperties = {};
			contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);
			this.registerOverridePropertyPatternKey();
		}
		registerConfiguration(configuration, validate = true) {
			this.registerConfigurations([configuration], validate);
		}
		registerConfigurations(configurations, validate = true) {
			const properties = this.doRegisterConfigurations(configurations, validate);
			contributionRegistry.notifySchemaChanged(resourceLanguageSettingsSchemaId);
			this._onDidSchemaChange.fire();
			this._onDidUpdateConfiguration.fire({ properties });
		}
		deregisterConfigurations(configurations) {
			const properties = this.doDeregisterConfigurations(configurations);
			contributionRegistry.notifySchemaChanged(resourceLanguageSettingsSchemaId);
			this._onDidSchemaChange.fire();
			this._onDidUpdateConfiguration.fire({ properties });
		}
		updateConfigurations({ add, remove }) {
			const properties = [];
			properties.push(...this.doDeregisterConfigurations(remove));
			properties.push(...this.doRegisterConfigurations(add, false));
			contributionRegistry.notifySchemaChanged(resourceLanguageSettingsSchemaId);
			this._onDidSchemaChange.fire();
			this._onDidUpdateConfiguration.fire({ properties: distinct(properties) });
		}
		doRegisterConfigurations(configurations, validate) {
			const properties = [];
			configurations.forEach((configuration) => {
				properties.push(...this.validateAndRegisterProperties(configuration, validate, configuration.extensionInfo));
				this.registerJSONConfiguration(configuration);
			});
			return properties;
		}
		doDeregisterConfigurations(configurations) {
			const properties = [];
			const deregisterConfiguration = (configuration) => {
				for (const key in toObject(configuration.properties)) {
					properties.push(key);
					delete this.configurationProperties[key];
					this.removeFromSchema(key, configuration.properties[key]);
				}
			};
			for (const configuration of configurations) deregisterConfiguration(configuration);
			return properties;
		}
		validateAndRegisterProperties(configuration, validate, extensionInfo, scope = 1) {
			scope = configuration.scope == null ? scope : configuration.scope;
			const propertyKeys = [];
			const properties = configuration.properties;
			for (const key in toObject(properties)) {
				const property = properties[key];
				if (validate && validateProperty(key, property)) {
					delete properties[key];
					continue;
				}
				property.source = extensionInfo;
				property.defaultDefaultValue = properties[key].default;
				this.updatePropertyDefaultValue(key, property);
				property.scope = property.scope == null ? scope : property.scope;
				if (extensionInfo) property.description = (property.description ? `${property.description}\n` : "") + `From ${extensionInfo.id}`;
				if (property.hasOwnProperty("included") && !property.included) {
					this.excludedConfigurationProperties[key] = properties[key];
					delete properties[key];
					continue;
				} else this.configurationProperties[key] = properties[key];
				if (!properties[key].deprecationMessage && properties[key].markdownDeprecationMessage) properties[key].deprecationMessage = properties[key].markdownDeprecationMessage;
				propertyKeys.push(key);
			}
			return propertyKeys;
		}
		getConfigurationProperties() {
			return this.configurationProperties;
		}
		getExcludedConfigurationProperties() {
			return this.excludedConfigurationProperties;
		}
		registerJSONConfiguration(configuration) {
			const register = (configuration) => {
				const properties = configuration.properties;
				for (const key in toObject(properties)) this.updateSchema(key, properties[key]);
			};
			register(configuration);
		}
		updateSchema(key, property) {
			allSettings.properties[key] = property;
			switch (property.scope) {
				case 2:
				case 3:
					resourceSettings.properties[key] = property;
					break;
				case 4:
					resourceSettings.properties[key] = property;
					this.resourceLanguageSettingsSchema.properties[key] = property;
					break;
			}
		}
		removeFromSchema(key, property) {
			delete allSettings.properties[key];
			switch (property.scope) {
				case 2:
				case 3:
				case 4:
					delete resourceSettings.properties[key];
					delete this.resourceLanguageSettingsSchema.properties[key];
					break;
			}
		}
		registerOverridePropertyPatternKey() {
			const resourceLanguagePropertiesSchema = {
				type: "object",
				description: "Configure editor settings to be overridden for a language.",
				errorMessage: "This setting does not support per-language configuration.",
				$ref: resourceLanguageSettingsSchemaId
			};
			allSettings.patternProperties[OVERRIDE_PROPERTY_PATTERN] = resourceLanguagePropertiesSchema;
			resourceSettings.patternProperties[OVERRIDE_PROPERTY_PATTERN] = resourceLanguagePropertiesSchema;
		}
		updatePropertyDefaultValue(key, property) {
			let defaultValue = property.defaultDefaultValue;
			if (typeof defaultValue === "undefined" && !EXCLUDE_KEYS.some((k) => key.includes(k))) defaultValue = getDefaultValue(property.type);
			property.default = defaultValue;
			property.defaultValueSource = void 0;
		}
	};
	configurationRegistry$1 = new ConfigurationRegistry();
	Registry.add(Extensions$1.Configuration, configurationRegistry$1);
})), logger$48, jsonRegistry, configuration, Configurations;
var init_configuration$2 = __esmMin((() => {
	init_esm();
	init_logger$2();
	init_util$7();
	init_array();
	init_constants();
	init_extensionRegistry();
	init_fs();
	init_is();
	init_jsonRegistry();
	init_node();
	init_object();
	init_protocol();
	init_registry$1();
	init_configuration$3();
	init_event();
	init_model();
	init_parser$1();
	init_registry();
	init_util$6();
	logger$48 = createLogger$1("configurations");
	jsonRegistry = Registry.as(Extensions$2.JSONContribution);
	configuration = Registry.as(Extensions$1.Configuration);
	Configurations = class {
		userConfigFile;
		_proxy;
		noWatch;
		_watchedFiles = /* @__PURE__ */ new Set();
		_configuration;
		_errors = /* @__PURE__ */ new Map();
		_onError = new import_main$1.Emitter();
		_onChange = new import_main$1.Emitter();
		disposables = [];
		_initialized = false;
		cached = [];
		_initialConfiguration;
		onError = this._onError.event;
		onDidChange = this._onChange.event;
		constructor(userConfigFile, _proxy, noWatch = false, cwd = process.cwd()) {
			this.userConfigFile = userConfigFile;
			this._proxy = _proxy;
			this.noWatch = noWatch;
			let defaultConfiguration = this.loadDefaultConfigurations();
			let userConfiguration = this.parseConfigurationModel(this.userConfigFile);
			this._configuration = new Configuration(defaultConfiguration, userConfiguration);
			this.watchFile(this.userConfigFile, 1);
			let filepath = this.folderToConfigfile(cwd);
			if (filepath) this.addFolderFile(filepath, true);
			this._initialConfiguration = this.getConfiguration(void 0, null);
		}
		/**
		* Contains default, memory and user configuration only
		*/
		get initialConfiguration() {
			return this._initialConfiguration;
		}
		get markdownPreference() {
			let preferences = this._initialConfiguration.get("coc.preferences");
			return {
				excludeImages: preferences.excludeImageLinksInMarkdownDocument,
				breaks: preferences.enableGFMBreaksInMarkdownDocument
			};
		}
		get errors() {
			return this._errors;
		}
		get configuration() {
			return this._configuration;
		}
		flushConfigurations() {
			this._initialized = true;
			configuration.registerConfigurations(this.cached);
			this.cached = [];
		}
		updateConfigurations(add, remove) {
			if (this._initialized) if (!isFalsyOrEmpty(remove)) configuration.updateConfigurations({
				add,
				remove
			});
			else configuration.registerConfigurations(add);
			else this.cached.push(...add);
		}
		loadDefaultConfigurations() {
			let node = { properties: convertProperties(properties) };
			configuration.registerConfiguration(node);
			configuration.onDidUpdateConfiguration((e) => {
				if (e.properties.length === 0) return;
				const dict = configuration.getConfigurationProperties();
				const toRemove = [];
				const root = Object.create(null);
				const keys = [];
				for (let key of e.properties) {
					let def = dict[key];
					if (def) {
						keys.push(key);
						let val = def.default;
						addToValueTree(root, key, val, (msg) => {
							logger$48.error(`Conflict configuration: ${msg}`);
						});
					} else toRemove.push(key);
				}
				const model = this._configuration.defaults.merge(new ConfigurationModel(root, keys));
				toRemove.forEach((key) => {
					model.removeValue(key);
				});
				if (!this._initialized) {
					this._configuration.updateDefaultConfiguration(model);
					this._initialConfiguration = this.getConfiguration(void 0, null);
				} else this.changeConfiguration(0, model, void 0, e.properties);
			}, null, this.disposables);
			let properties$1 = configuration.getConfigurationProperties();
			let config = {};
			let keys = [];
			Object.keys(properties$1).forEach((key) => {
				let value = properties$1[key].default;
				keys.push(key);
				addToValueTree(config, key, value, void 0);
			});
			return new ConfigurationModel(config, keys);
		}
		getDescription(key) {
			let property = allSettings.properties[key];
			return property ? property.description : void 0;
		}
		getJSONSchema(uri) {
			if (uri === "vscode://schemas/settings/user") return {
				properties: allSettings.properties,
				patternProperties: allSettings.patternProperties,
				definitions: Object.assign(getExtensionDefinitions(), definitions),
				additionalProperties: false,
				allowTrailingCommas: true,
				allowComments: true
			};
			if (uri === "vscode://schemas/settings/folder") return {
				properties: resourceSettings.properties,
				patternProperties: resourceSettings.patternProperties,
				definitions: Object.assign(getExtensionDefinitions(), definitions),
				errorMessage: "Configuration property may not work as folder configuration",
				additionalProperties: false,
				allowTrailingCommas: true,
				allowComments: true
			};
			let schemas = jsonRegistry.getSchemaContributions().schemas;
			if (hasOwnProperty$1(schemas, uri)) return schemas[uri];
		}
		parseConfigurationModel(filepath, filecontents) {
			if (!filepath || !fs$6.existsSync(filepath)) return new ConfigurationModel();
			let parser = new ConfigurationModelParser(filepath);
			let content = filecontents || fs$6.readFileSync(filepath, "utf8");
			let uri = URI.file(filepath).toString();
			parser.parse(content);
			if (!isFalsyOrEmpty(parser.errors)) {
				this._errors.set(uri, parser.errors);
				this._onError.fire({
					uri,
					diagnostics: parser.errors
				});
			} else {
				this._errors.delete(uri);
				this._onError.fire({
					uri,
					diagnostics: []
				});
			}
			return parser.configurationModel;
		}
		folderToConfigfile(folder) {
			if (sameFile(folder, os$5.homedir())) return void 0;
			let filepath = path$5.join(folder, ".vim", CONFIG_FILE_NAME);
			if (sameFile(filepath, this.userConfigFile)) return void 0;
			return filepath;
		}
		updateMemoryConfig(props) {
			let keys = Object.keys(props);
			if (!props || keys.length == 0) return;
			let memoryModel = this._configuration.memory.clone();
			let properties = configuration.getConfigurationProperties();
			keys.forEach((key) => {
				let val = props[key];
				if (val === void 0) memoryModel.removeValue(key);
				else if (properties[key] != null) memoryModel.setValue(key, val);
				else if (objectLiteral(val)) for (let k of Object.keys(val)) memoryModel.setValue(`${key}.${k}`, val[k]);
				else memoryModel.setValue(key, val);
			});
			this.changeConfiguration(4, memoryModel, void 0, keys);
		}
		/**
		* Add new folder config file.
		*/
		addFolderFile(configFilePath, fromCwd = false, resource) {
			let folder = normalizeFilePath(path$5.resolve(configFilePath, "../.."));
			if (this._configuration.hasFolder(folder) || !fs$6.existsSync(configFilePath)) return false;
			let configFile;
			try {
				configFile = fs$6.readFileSync(configFilePath, "utf8");
			} catch (_err) {
				return false;
			}
			this.watchFile(configFilePath, 3);
			let model = this.parseConfigurationModel(configFilePath, configFile);
			this._configuration.addFolderConfiguration(folder, model, resource);
			logger$48.info(`Add folder configuration from ${fromCwd ? "cwd" : "file"}:`, configFilePath);
			return true;
		}
		watchFile(filepath, target) {
			if (!fs$6.existsSync(filepath) || this._watchedFiles.has(filepath) || this.noWatch) return;
			this._watchedFiles.add(filepath);
			const folder = normalizeFilePath(path$5.resolve(filepath, "../.."));
			let disposable = watchFile(filepath, () => {
				let model = this.parseConfigurationModel(filepath);
				this.changeConfiguration(target, model, folder);
			});
			this.disposables.push(disposable);
		}
		/**
		* Update ConfigurationModel and fire event.
		*/
		changeConfiguration(target, model, folder, keys) {
			const listOnly = target === 0 && keys && keys.every((key) => key.startsWith("list.source"));
			let configuration = this._configuration;
			let previous = listOnly ? void 0 : configuration.toData();
			let change;
			if (target === 0) change = configuration.compareAndUpdateDefaultConfiguration(model, keys);
			else if (target === 1) change = configuration.compareAndUpdateUserConfiguration(model);
			else if (target === 2) change = configuration.compareAndUpdateWorkspaceConfiguration(model);
			else if (target === 3) change = configuration.compareAndUpdateFolderConfiguration(folder, model);
			else change = configuration.compareAndUpdateMemoryConfiguration(model);
			if (!change || change.keys.length == 0) return;
			if (target !== 2) this._initialConfiguration = this.getConfiguration(void 0, null);
			if (listOnly) return;
			let ev = new ConfigurationChangeEvent(change, previous, configuration);
			ev.source = target;
			this._onChange.fire(ev);
		}
		getDefaultResource() {
			let root = this._proxy?.root;
			if (!root) return void 0;
			return URI.file(root).toString();
		}
		/**
		* Get workspace configuration
		*/
		getConfiguration(section, scope) {
			let configuration = this._configuration;
			let overrides = scope ? scopeToOverrides(scope) : { resource: scope === null ? void 0 : this.getDefaultResource() };
			const config = Object.freeze(lookUp(configuration.getValue(void 0, overrides), section));
			const result = {
				has(key) {
					return typeof lookUp(config, key) !== "undefined";
				},
				get: (key, defaultValue) => {
					let result = lookUp(config, key);
					if (result == null) return defaultValue;
					return result;
				},
				update: (key, value, updateTarget = false) => {
					const resource = overrides.resource;
					let entry = section ? `${section}.${key}` : key;
					let target;
					if (typeof updateTarget === "boolean") target = updateTarget ? 1 : 3;
					else target = convertTarget(updateTarget);
					let folder;
					if (target === 3) {
						folder = this._configuration.resolveFolder(resource) ?? this.resolveWorkspaceFolderForResource(resource);
						if (!folder) {
							console.error(`Unable to locate workspace folder configuration for ${resource}`);
							logger$48.error(`Unable to locate workspace folder configuration`, resource, Error().stack);
							return;
						}
					}
					let model = this._configuration.getConfigurationModel(target, folder).clone();
					if (value === void 0) model.removeValue(entry);
					else model.setValue(entry, value);
					this.changeConfiguration(target, model, folder);
					let fsPath;
					if (target === 3) fsPath = this.folderToConfigfile(folder);
					else if (target === 1) fsPath = this.userConfigFile;
					return fsPath ? this._proxy?.modifyConfiguration(fsPath, entry, value) : Promise.resolve();
				},
				inspect: (key) => {
					key = section ? `${section}.${key}` : key;
					const config = this._configuration.inspect(key, overrides);
					return {
						key,
						defaultValue: config.defaultValue,
						globalValue: config.userValue,
						workspaceValue: config.workspaceValue,
						workspaceFolderValue: config.workspaceFolderValue
					};
				}
			};
			Object.defineProperty(result, "has", { enumerable: false });
			Object.defineProperty(result, "get", { enumerable: false });
			Object.defineProperty(result, "update", { enumerable: false });
			Object.defineProperty(result, "inspect", { enumerable: false });
			if (typeof config === "object") mixin(result, config, false);
			return deepFreeze(result);
		}
		/**
		* Resolve folder configuration from uri.
		*/
		locateFolderConfigution(uri) {
			let folder = this._configuration.resolveFolder(uri);
			if (folder) return true;
			let u = URI.parse(uri);
			if (u.scheme !== "file") return false;
			let dir = folder = findUp$1(".vim", u.fsPath);
			if (!dir) return false;
			folder = path$5.dirname(dir);
			let filepath = this.folderToConfigfile(folder);
			if (filepath) {
				this.addFolderFile(filepath, false, uri);
				return true;
			}
			return false;
		}
		/**
		* Resolve workspace folder config file path.
		*/
		resolveWorkspaceFolderForResource(resource) {
			if (this._proxy && typeof this._proxy.getWorkspaceFolder === "function") {
				let uri = this._proxy.getWorkspaceFolder(resource);
				if (!uri) return void 0;
				let fsPath = uri.fsPath;
				let configFilePath = this.folderToConfigfile(fsPath);
				if (configFilePath) {
					if (!fs$6.existsSync(configFilePath)) {
						fs$6.mkdirSync(path$5.dirname(configFilePath), { recursive: true });
						fs$6.writeFileSync(configFilePath, "{}", "utf8");
					}
					this.addFolderFile(configFilePath, false, resource);
					return fsPath;
				}
			}
		}
		/**
		* Reset configurations for test, not trigger configuration change event.
		*/
		reset() {
			this._errors.clear();
			let model = new ConfigurationModel();
			this._configuration.updateMemoryConfiguration(model);
			this._initialConfiguration = this.getConfiguration(void 0, null);
		}
		dispose() {
			this._onError.dispose();
			this._onChange.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/configuration/shape.ts
var logger$47, ConfigurationProxy;
var init_shape = __esmMin((() => {
	init_main$1();
	init_esm();
	init_logger$2();
	init_node();
	logger$47 = createLogger$1("configuration-shape");
	ConfigurationProxy = class {
		resolver;
		_test;
		constructor(resolver, _test = false) {
			this.resolver = resolver;
			this._test = _test;
		}
		get root() {
			return this.resolver.root;
		}
		async modifyConfiguration(fsPath, key, value) {
			if (this._test) return;
			logger$47.info(`modify configuration file: ${fsPath}`, key, value);
			let dir = path$5.dirname(fsPath);
			let formattingOptions = {
				tabSize: 2,
				insertSpaces: true
			};
			if (!fs$6.existsSync(dir)) fs$6.mkdirSync(dir, { recursive: true });
			let content = fs$6.readFileSync(fsPath, { flag: "a+" }).toString("utf8");
			content = content || "{}";
			let edits = modify(content, [key], value, { formattingOptions });
			content = applyEdits$1(content, edits);
			fs$6.writeFileSync(fsPath, content, { encoding: "utf8" });
		}
		getWorkspaceFolder(resource) {
			if (typeof this.resolver.getWorkspaceFolder === "function") {
				let workspaceFolder = this.resolver.getWorkspaceFolder(resource);
				if (workspaceFolder) return URI.parse(workspaceFolder.uri);
			}
		}
	};
}));
//#endregion
//#region src/core/autocmds.ts
function toAutocmdOption(item) {
	let { id, option } = item;
	let opt = { group: groupName };
	if (option.buffer) opt.buffer = option.buffer;
	if (option.pattern) opt.pattern = option.pattern;
	if (option.once) opt.once = true;
	if (option.nested) opt.nested = true;
	opt.command = `call coc#rpc#${option.request ? "request" : "notify"}('doAutocmd', [${id}${isFalsyOrEmpty(option.arglist) ? "" : ", " + option.arglist.join(", ")}])`;
	return opt;
}
/**
* Only used for user autocmd, which can't be used for nvim_create_autocmd
*/
function createCommand(id, event, autocmd) {
	let args = isFalsyOrEmpty(autocmd.arglist) ? "" : ", " + autocmd.arglist.join(", ");
	let method = autocmd.request ? "request" : "notify";
	let opt = "";
	if (autocmd.once) opt += " ++once";
	if (autocmd.nested) opt += " ++nested";
	return `autocmd ${groupName} ${event}${opt}  call coc#rpc#${method}('doAutocmd', [${id}${args}])`;
}
var logger$46, AutocmdItem, groupName, Autocmds;
var init_autocmds = __esmMin((() => {
	init_logger$2();
	init_array();
	init_extensionRegistry();
	init_lodash();
	init_protocol();
	logger$46 = createLogger$1("autocmds");
	AutocmdItem = class {
		id;
		option;
		_extensiionName;
		constructor(id, option) {
			this.id = id;
			this.option = option;
		}
		get extensiionName() {
			if (this._extensiionName) return this._extensiionName;
			this._extensiionName = parseExtensionName(this.option.stack);
			return this._extensiionName;
		}
	};
	groupName = "coc_dynamic_autocmd";
	Autocmds = class {
		autocmds = /* @__PURE__ */ new Map();
		nvim;
		id = 0;
		attach(nvim) {
			this.nvim = nvim;
		}
		async doAutocmd(id, args, timeout = 1e3) {
			let autocmd = this.autocmds.get(id);
			if (autocmd) {
				let option = autocmd.option;
				logger$46.trace(`Invoke autocmd from "${autocmd.extensiionName}"`, option);
				try {
					let tokenSource = new import_main$1.CancellationTokenSource();
					let promise = Promise.resolve(option.callback.apply(option.thisArg, [...args, tokenSource.token]));
					if (option.request) {
						let timer;
						let tp = new Promise((resolve) => {
							timer = setTimeout(() => {
								tokenSource.cancel();
								logger$46.error(`Autocmd timeout after ${timeout}ms`, omit$2(option, ["callback", "stack"]), autocmd.option.stack);
								resolve(void 0);
							}, timeout);
						});
						await Promise.race([tp, promise]);
						clearTimeout(timer);
						tokenSource.dispose();
					} else await promise;
				} catch (e) {
					logger$46.error(`Error on autocmd "${option.event}"`, omit$2(option, ["callback", "stack"]), e);
				}
			}
		}
		registerAutocmd(autocmd) {
			let id = ++this.id;
			let item = new AutocmdItem(id, autocmd);
			this.autocmds.set(id, item);
			this.createAutocmd(item);
			return import_main$1.Disposable.create(() => {
				this.autocmds.delete(id);
			});
		}
		createAutocmd(item) {
			let { option } = item;
			let event = Array.isArray(option.event) ? option.event.join(",") : option.event;
			if (/\buser\b/i.test(event)) {
				let cmd = createCommand(item.id, event, option);
				this.nvim.command(cmd, true);
			} else {
				let opt = toAutocmdOption(item);
				this.nvim.createAutocmd(Array.isArray(item.option.event) ? item.option.event : item.option.event.split(","), opt, true);
			}
		}
		removeExtensionAutocmds(extensiionName) {
			let { nvim, autocmds } = this;
			nvim.pauseNotification();
			nvim.command(`autocmd! ${groupName}`, true);
			let items = autocmds.values();
			for (const item of items) {
				if (item.extensiionName === extensiionName) {
					autocmds.delete(item.id);
					continue;
				}
				this.createAutocmd(item);
			}
			nvim.resumeNotification(false, true);
		}
		dispose() {
			this.autocmds.clear();
		}
	};
}));
//#endregion
//#region src/core/contentProvider.ts
function getAutocmdCommand(scheme) {
	return `autocmd! coc_dynamic_content BufReadCmd,FileReadCmd,SourceCmd ${scheme}:/* ${`call coc#rpc#request('CocAutocmd', ['BufReadCmd','${scheme}', expand('<afile>')]) | filetype detect`}`;
}
var ContentProvider;
var init_contentProvider = __esmMin((() => {
	init_esm();
	init_events();
	init_util$7();
	init_protocol();
	init_string$1();
	ContentProvider = class {
		documents;
		nvim;
		disposables = [];
		providers = /* @__PURE__ */ new Map();
		_onDidProviderChange = new import_main$1.Emitter();
		onDidProviderChange = this._onDidProviderChange.event;
		constructor(documents) {
			this.documents = documents;
		}
		attach(nvim) {
			this.nvim = nvim;
			events_default.on("BufReadCmd", this.onBufReadCmd, this, this.disposables);
		}
		get schemes() {
			return Array.from(this.providers.keys());
		}
		async onBufReadCmd(scheme, uri) {
			let provider = this.providers.get(scheme);
			if (!provider) return;
			let tokenSource = new import_main$1.CancellationTokenSource();
			let content = await Promise.resolve(provider.provideTextDocumentContent(URI.parse(uri), tokenSource.token));
			let buf = await this.nvim.buffer;
			await buf.setLines(toText(content).split(/\r?\n/), {
				start: 0,
				end: -1,
				strictIndexing: false
			});
			process.nextTick(() => {
				events_default.fire("BufCreate", [buf.id]);
			});
		}
		resetAutocmds() {
			let { nvim, schemes } = this;
			nvim.pauseNotification();
			nvim.command(`autocmd! coc_dynamic_content`, true);
			for (let scheme of schemes) nvim.command(getAutocmdCommand(scheme), true);
			nvim.resumeNotification(false, true);
		}
		registerTextDocumentContentProvider(scheme, provider) {
			this.providers.set(scheme, provider);
			this._onDidProviderChange.fire();
			let disposables = [];
			if (provider.onDidChange) provider.onDidChange(async (uri) => {
				let doc = this.documents.getDocument(uri.toString());
				if (!doc) return;
				let tokenSource = new import_main$1.CancellationTokenSource();
				let content = await Promise.resolve(provider.provideTextDocumentContent(uri, tokenSource.token));
				await doc.buffer.setLines(content.split(/\r?\n/), {
					start: 0,
					end: -1,
					strictIndexing: false
				});
			}, null, disposables);
			this.nvim.command(getAutocmdCommand(scheme), true);
			return import_main$1.Disposable.create(() => {
				this.providers.delete(scheme);
				disposeAll(disposables);
				this.resetAutocmds();
				this._onDidProviderChange.fire();
			});
		}
		dispose() {
			disposeAll(this.disposables);
			this._onDidProviderChange.dispose();
			this.providers.clear();
		}
	};
}));
//#endregion
//#region src/util/position.ts
function rangeInRange(r, range) {
	return positionInRange(r.start, range) === 0 && positionInRange(r.end, range) === 0;
}
function equalsRange(r, range) {
	if (!samePosition(r.start, range.start)) return false;
	return samePosition(r.end, range.end);
}
function samePosition(one, two) {
	return one.line === two.line && one.character === two.character;
}
function adjacentPosition(pos, range) {
	return samePosition(pos, range.start) || samePosition(pos, range.end);
}
/**
* A function that compares ranges, useful for sorting ranges
* It will first compare ranges on the startPosition and then on the endPosition
*/
function compareRangesUsingStarts(a, b) {
	const aStartLineNumber = a.start.line | 0;
	const bStartLineNumber = b.start.line | 0;
	if (aStartLineNumber === bStartLineNumber) {
		const aStartColumn = a.start.character | 0;
		const bStartColumn = b.start.character | 0;
		if (aStartColumn === bStartColumn) {
			const aEndLineNumber = a.end.line | 0;
			const bEndLineNumber = b.end.line | 0;
			if (aEndLineNumber === bEndLineNumber) return (a.end.character | 0) - (b.end.character | 0);
			return aEndLineNumber - bEndLineNumber;
		}
		return aStartColumn - bStartColumn;
	}
	return aStartLineNumber - bStartLineNumber;
}
/**
* Convert to well formed range
*/
function toValidRange(range, max) {
	let { start, end } = range;
	if (start.line > end.line || start.line === end.line && start.character > end.character) {
		let m = start;
		start = end;
		end = m;
	}
	start = Position.create(Math.max(0, start.line), Math.max(0, start.character));
	let endCharacter = Math.max(0, end.character);
	if (typeof max === "number" && endCharacter > max) endCharacter = max;
	end = Position.create(Math.max(0, end.line), endCharacter);
	return {
		start,
		end
	};
}
function rangeAdjacent(r, range) {
	if (comparePosition(r.end, range.start) == 0) return true;
	if (comparePosition(range.end, r.start) == 0) return true;
	return false;
}
/**
* Check if two ranges have overlap character.
*/
function rangeOverlap(r, range) {
	let { start, end } = r;
	if (comparePosition(end, range.start) <= 0) return false;
	if (comparePosition(start, range.end) >= 0) return false;
	return true;
}
/**
* Check if two ranges have overlap or nested
*/
function rangeIntersect(r, range) {
	if (positionInRange(r.start, range) == 0) return true;
	if (positionInRange(r.end, range) == 0) return true;
	if (rangeInRange(range, r)) return true;
	return false;
}
/**
* Adjust from start position
*/
function adjustRangePosition(range, position) {
	let { line, character } = position;
	let { start, end } = range;
	let endCharacter = end.line == start.line ? end.character + character : end.character;
	return Range.create(start.line + line, character + start.character, end.line + line, endCharacter);
}
function lineInRange(line, range) {
	let { start, end } = range;
	return line >= start.line && line <= end.line;
}
function emptyRange(range) {
	let { start, end } = range;
	return start.line == end.line && start.character == end.character;
}
function positionInRange(position, range) {
	let { start, end } = range;
	if (comparePosition(position, start) < 0) return -1;
	if (comparePosition(position, end) > 0) return 1;
	return 0;
}
function comparePosition(position, other) {
	if (position.line > other.line) return 1;
	if (other.line == position.line && position.character > other.character) return 1;
	if (other.line == position.line && position.character == other.character) return 0;
	return -1;
}
function getEnd(start, content) {
	const lines = content.split(/\r?\n/);
	const len = lines.length;
	const lastLine = lines[len - 1];
	const end = len == 1 ? start.character + content.length : lastLine.length;
	return Position.create(start.line + len - 1, end);
}
var init_position = __esmMin((() => {
	init_main$2();
}));
//#endregion
//#region src/util/diff.ts
function diffLines(oldLines, newLines, startLine) {
	let endOffset = 0;
	let startOffset = 0;
	let parts = oldLines.slice(startLine + 1);
	for (let i = 0; i < Math.min(parts.length, newLines.length); i++) if (parts[parts.length - 1 - i] == newLines[newLines.length - 1 - i]) endOffset = endOffset + 1;
	else break;
	for (let i = 0; i <= Math.min(startLine, newLines.length - 1 - endOffset); i++) if (oldLines[i] == newLines[i]) startOffset = startOffset + 1;
	else break;
	let replacement = newLines.slice(startOffset, newLines.length - endOffset);
	let end = oldLines.length - endOffset;
	if (end > startOffset && replacement.length) {
		let offset = 0;
		for (let i = 0; i < Math.min(replacement.length, end - startOffset); i++) if (replacement[i] == oldLines[startOffset + i]) offset = offset + 1;
		else break;
		if (offset) return {
			start: startOffset + offset,
			end,
			replacement: replacement.slice(offset)
		};
	}
	return {
		start: startOffset,
		end,
		replacement
	};
}
function patchLine(from, to, fill = " ") {
	if (from == to) return to;
	let idx = to.indexOf(from);
	if (idx !== -1) return fill.repeat(byteLength(to.substring(0, idx))) + from;
	let result = fastDiff(from, to);
	let str = "";
	for (let item of result) if (item[0] == fastDiff.DELETE) return to;
	else if (item[0] == fastDiff.INSERT) str = str + fill.repeat(byteLength(item[1]));
	else str = str + item[1];
	return str;
}
function getTextEdit(oldLines, newLines, cursor, insertMode) {
	let ol = oldLines.length;
	let nl = newLines.length;
	let n;
	if (cursor) n = nl > ol && insertMode && cursor.line > 0 ? cursor.line - 1 : cursor.line;
	else n = Math.min(ol, nl);
	let used = 0;
	for (let i = 0; i < n; i++) if (newLines[i] === oldLines[i]) used += 1;
	else break;
	if (ol == nl && used == ol) return void 0;
	let delta = nl - ol;
	let r = Math.min(ol - used, nl - used);
	let e = 0;
	for (let i = 0; i < r; i++) if (newLines[nl - i - 1] === oldLines[ol - i - 1]) e += 1;
	else break;
	let inserted = e == 0 ? newLines.slice(used) : newLines.slice(used, -e);
	if (delta == 0 && cursor && inserted.length == 1) {
		let newLine = newLines[used];
		let oldLine = oldLines[used];
		let nl = newLine.length;
		let ol = oldLine.length;
		if (nl === 0) return TextEdit.del(Range.create(used, 0, used, ol));
		if (ol === 0) return TextEdit.insert(Position.create(used, 0), newLine);
		let character = Math.min(cursor.character, nl);
		if (!insertMode && nl >= ol && character !== nl) character += 1;
		let r = 0;
		for (let i = 0; i < nl - character; i++) {
			let idx = ol - 1 - i;
			if (idx === -1) break;
			if (newLine[nl - 1 - i] === oldLine[idx]) r += 1;
			else break;
		}
		let l = 0;
		for (let i = 0; i < Math.min(ol - r, nl - r); i++) if (newLine[i] === oldLine[i]) l += 1;
		else break;
		let newText = r === 0 ? newLine.slice(l) : newLine.slice(l, -r);
		return TextEdit.replace(Range.create(used, l, used, ol - r), newText);
	}
	let text = inserted.length > 0 ? inserted.join("\n") + "\n" : "";
	if (text.length === 0 && used === ol - e) return void 0;
	let original = oldLines.slice(used, ol - e).join("\n") + "\n";
	return reduceReplaceEdit(TextEdit.replace(Range.create(used, 0, ol - e, 0), text), original, cursor);
}
function getCommonSuffixLen(a, b, max) {
	if (max === 0) return 0;
	let al = a.length;
	let bl = b.length;
	let n = 0;
	for (let i = 0; i < max; i++) if (a[al - 1 - i] === b[bl - 1 - i]) n++;
	else break;
	return n;
}
function getCommonPrefixLen(a, b, max) {
	if (max === 0) return 0;
	let n = 0;
	for (let i = 0; i < max; i++) if (a[i] === b[i]) n++;
	else break;
	return n;
}
function reduceReplaceEdit(edit, original, cursor) {
	let { newText, range } = edit;
	if (emptyRange(range) || newText === "") return edit;
	let endOffset;
	if (cursor) {
		let newEnd = getEnd(range.start, newText);
		if (positionInRange(cursor, Range.create(range.start, newEnd)) === 0) {
			endOffset = 0;
			let lc = newEnd.line - cursor.line + 1;
			let lines = newText.split("\n");
			let len = lines.length;
			for (let i = 0; i < lc; i++) {
				let idx = len - i - 1;
				if (i == lc - 1) {
					let s = idx === 0 ? range.start.character : 0;
					endOffset += lines[idx].slice(cursor.character - s).length;
				} else endOffset += lines[idx].length + 1;
			}
		}
	}
	let sl;
	let pl;
	let min = Math.min(original.length, newText.length);
	if (endOffset) {
		sl = getCommonSuffixLen(original, newText, endOffset);
		pl = getCommonPrefixLen(original, newText, min - sl);
	} else {
		pl = getCommonPrefixLen(original, newText, min);
		sl = getCommonSuffixLen(original, newText, min - pl);
	}
	let s = pl === 0 ? range.start : getEnd(range.start, original.slice(0, pl));
	let e = sl === 0 ? range.end : getEnd(range.start, original.slice(0, -sl));
	let text = newText.slice(pl, sl === 0 ? void 0 : -sl);
	return TextEdit.replace(Range.create(s, e), text);
}
var init_diff = __esmMin((() => {
	init_main$2();
	init_node();
	init_position();
	init_string$1();
}));
//#endregion
//#region src/util/textedit.ts
function getStartLine(edit) {
	let { start, end } = edit.range;
	if (edit.newText.endsWith("\n") && start.line == end.line && start.character == 0 && end.character == 0) return start.line - 1;
	return start.line;
}
function lineCountChange(edit) {
	let { newText } = edit;
	let range = getWellformedRange(edit.range);
	let n = range.end.line - range.start.line;
	return newText.split(/\r?\n/).length - n - 1;
}
function getWellformedRange(range) {
	const start = range.start;
	const end = range.end;
	if (start.line > end.line || start.line === end.line && start.character > end.character) return {
		start: end,
		end: start
	};
	return range;
}
function mergeSort(data, compare) {
	if (data.length <= 1) return data;
	const p = data.length / 2 | 0;
	const left = data.slice(0, p);
	const right = data.slice(p);
	mergeSort(left, compare);
	mergeSort(right, compare);
	let leftIdx = 0;
	let rightIdx = 0;
	let i = 0;
	while (leftIdx < left.length && rightIdx < right.length) if (compare(left[leftIdx], right[rightIdx]) <= 0) data[i++] = left[leftIdx++];
	else data[i++] = right[rightIdx++];
	while (leftIdx < left.length) data[i++] = left[leftIdx++];
	while (rightIdx < right.length) data[i++] = right[rightIdx++];
	return data;
}
function mergeSortEdits(edits) {
	return mergeSort(edits, (a, b) => {
		let diff = a.range.start.line - b.range.start.line;
		if (diff === 0) return a.range.start.character - b.range.start.character;
		return diff;
	});
}
function emptyWorkspaceEdit(edit) {
	let { changes, documentChanges } = edit;
	if (documentChanges && documentChanges.length) return false;
	if (changes && Object.keys(changes).length) return false;
	return true;
}
function getRangesFromEdit(uri, edit) {
	let { changes, documentChanges } = edit;
	if (changes) {
		let edits = changes[uri];
		return edits ? edits.map((e) => e.range) : void 0;
	} else if (Array.isArray(documentChanges)) {
		for (let c of documentChanges) if (TextDocumentEdit.is(c) && c.textDocument.uri == uri) return c.edits.map((e) => e.range);
	}
}
function getConfirmAnnotations(changes, changeAnnotations) {
	let keys = [];
	const add = (key) => {
		if (key && !keys.includes(key) && changeAnnotations[key]?.needsConfirmation) keys.push(key);
	};
	for (let change of changes) if (TextDocumentEdit.is(change)) change.edits.forEach((edit) => {
		add(edit["annotationId"]);
	});
	else add(change.annotationId);
	return keys;
}
function isDeniedEdit(edit, denied) {
	if (AnnotatedTextEdit.is(edit) && denied.includes(edit.annotationId)) return true;
	return false;
}
/**
* Create new changes with denied filtered
*/
function createFilteredChanges(documentChanges, denied) {
	let changes = [];
	documentChanges.forEach((change) => {
		if (TextDocumentEdit.is(change)) {
			let edits = change.edits.filter((edit) => {
				return !isDeniedEdit(edit, denied);
			});
			if (edits.length > 0) changes.push({
				textDocument: change.textDocument,
				edits
			});
		} else if (!denied.includes(change.annotationId)) changes.push(change);
	});
	return changes;
}
function getAnnotationKey(change) {
	let key;
	if (TextDocumentEdit.is(change)) {
		if (AnnotatedTextEdit.is(change.edits[0])) key = change.edits[0].annotationId;
	} else key = change.annotationId;
	return key;
}
function toDocumentChanges(edit) {
	if (edit.documentChanges) return edit.documentChanges;
	let changes = [];
	for (let [uri, edits] of Object.entries(toObject(edit.changes))) changes.push({
		textDocument: {
			uri,
			version: null
		},
		edits
	});
	return changes;
}
/**
* Filter unnecessary edits and fix edits.
*/
function filterSortEdits(textDocument, edits) {
	let res = [];
	let end = textDocument.end;
	let checkEnd = end.line > 0 && end.character == 0;
	let prevDelete;
	for (let i = 0; i < edits.length; i++) {
		let edit = edits[i];
		let { newText, range } = edit;
		let max = (textDocument.lines[range.end.line] ?? "").length;
		range = toValidRange(edit.range, max);
		if (prevDelete) {
			if (samePosition(prevDelete, range.start) && emptyRange(range) && newText.length > 0) {
				let last = res[res.length - 1];
				last.newText = newText;
				prevDelete = void 0;
				continue;
			}
			prevDelete = void 0;
		}
		if (newText.includes("\r")) newText = newText.replace(/\r\n/g, "\n");
		let d = comparePosition(range.end, end);
		if (d > 0) range.end = {
			line: end.line,
			character: end.character
		};
		if (textDocument.getText(range) !== newText) {
			if (d === 0 && checkEnd && !emptyRange(range) && newText.endsWith("\n")) {
				newText = newText.slice(0, -1);
				let text = textDocument.lines[end.line - 1];
				range.end = Position.create(end.line - 1, text.length);
			} else if (newText.length == 0) prevDelete = range.start;
			res.push({
				range,
				newText
			});
		}
	}
	return mergeSortEdits(res);
}
/**
* Apply valid & sorted edits
*/
function applyEdits(document, edits) {
	if (isFalsyOrEmpty(edits)) return void 0;
	if (edits.length == 1) {
		let { start, end } = edits[0].range;
		let { lines } = document;
		let sl = lines[start.line] ?? "";
		let el = lines[end.line] ?? "";
		let content = sl.substring(0, start.character) + edits[0].newText + el.substring(end.character);
		if (end.line >= lines.length && document.eol) {
			if (content == "") {
				const result = [...lines.slice(0, start.line)];
				return result.length === 0 ? [""] : result;
			}
			if (content.endsWith("\n")) content = content.slice(0, -1);
			return [...lines.slice(0, start.line), ...content.split("\n")];
		}
		return [
			...lines.slice(0, start.line),
			...content.split("\n"),
			...lines.slice(end.line + 1)
		];
	}
	let text = document.getText();
	let lastModifiedOffset = 0;
	const spans = [];
	for (const e of edits) {
		let startOffset = document.offsetAt(e.range.start);
		if (startOffset < lastModifiedOffset) throw new Error("Overlapping edit");
		else if (startOffset > lastModifiedOffset) spans.push(text.substring(lastModifiedOffset, startOffset));
		if (e.newText.length) spans.push(e.newText);
		lastModifiedOffset = document.offsetAt(e.range.end);
	}
	spans.push(text.substring(lastModifiedOffset));
	let result = spans.join("");
	if (result === text) return void 0;
	return contentToLines(result, document.eol);
}
function getRangeText(lines, range) {
	let result = [];
	const { start, end } = range;
	if (start.line === end.line) return toText(lines[start.line]).slice(start.character, end.character);
	for (let i = start.line; i <= end.line; i++) {
		let line = toText(lines[i]);
		let text = line;
		if (i === start.line) text = line.slice(start.character);
		else if (i === end.line) text = line.slice(0, end.character);
		result.push(text);
	}
	return result.join("\n");
}
function validEdit(edit) {
	let { range, newText } = edit;
	if (!newText.endsWith("\n")) return false;
	if (range.end.character !== 0) return false;
	return true;
}
function toTextChanges(lines, edits) {
	if (edits.length === 0) return [];
	for (let edit of edits) {
		if (edit.range.end.line > lines.length) return [];
		if (edit.range.end.line == lines.length) {
			if (!validEdit(edit)) return [];
			let line = lines.length - 1;
			let character = lines[line].length;
			if (emptyRange(edit.range)) {
				edit.range = Range.create(line, character, line, character);
				edit.newText = "\n" + edit.newText.slice(0, -1);
			} else {
				const start = edit.range.start;
				edit.range = Range.create(start, Position.create(line, character));
				edit.newText = edit.newText.slice(0, -1);
			}
		}
	}
	return edits.map((o) => {
		let edit = reduceTextEdit(o, getRangeText(lines, o.range));
		let { start, end } = edit.range;
		let sl = toText(lines[start.line]);
		let sc = byteIndex(sl, start.character);
		let ec = byteIndex(end.line == start.line ? sl : toText(lines[end.line]), end.character);
		let { newText } = edit;
		return [
			newText.length > 0 ? newText.split("\n") : [],
			start.line,
			sc,
			end.line,
			ec
		];
	});
}
function getChangedPosition(start, edit) {
	let { range, newText } = edit;
	if (comparePosition(range.end, start) <= 0) {
		let lines = newText.split("\n");
		let lineCount = lines.length - (range.end.line - range.start.line) - 1;
		let character = start.character;
		if (range.end.line == start.line) {
			let last = lines[lines.length - 1].length;
			if (lines.length > 1) character = last + character - range.end.character;
			else character = range.start.character + last + character - range.end.character;
		}
		return {
			line: lineCount,
			character: character - start.character
		};
	}
	return {
		line: 0,
		character: 0
	};
}
function getPosition(start, edit) {
	let { line, character } = start;
	let { range, newText } = edit;
	let { end } = range;
	let lines = newText.split("\n");
	let lineCount = lines.length - (end.line - range.start.line) - 1;
	let c = range.end.line - start.line;
	if (c > 0) return {
		line,
		character
	};
	if (c < 0) return {
		line: line + lineCount,
		character
	};
	if (lines.length > 1) {
		let last = lines[lines.length - 1].length;
		return {
			line: line + lineCount,
			character: last + character - end.character
		};
	}
	let d = range.start.character - range.end.character;
	return {
		line: line + lineCount,
		character: d + newText.length + character
	};
}
/**
* Get new position from sorted edits
*/
function getPositionFromEdits(start, edits) {
	let position = Position.create(start.line, start.character);
	let before = false;
	for (let i = edits.length - 1; i >= 0; i--) {
		let edit = edits[i];
		if (before) {
			position.line += lineCountChange(edit);
			continue;
		}
		if (comparePosition(edit.range.end, position) > 0) continue;
		if (edit.range.end.line == position.line) position = getPosition(position, edit);
		else {
			before = true;
			position.line += lineCountChange(edit);
		}
	}
	return position;
}
function getChangedLineCount(start, edits) {
	let total = 0;
	for (let edit of edits) if (comparePosition(getWellformedRange(edit.range).end, start) <= 0) total += lineCountChange(edit);
	return total;
}
/**
* Merge sorted edits to single textedit
*/
function mergeTextEdits(edits, oldLines, newLines) {
	let start = edits[0].range.start;
	let end = edits[edits.length - 1].range.end;
	let lr = oldLines.length - end.line;
	let cr = (oldLines[end.line] ?? "").length - end.character;
	let line = newLines.length - lr;
	let character = (newLines[line] ?? "").length - cr;
	let newText = getRangeText(newLines, Range.create(start, Position.create(line, character)));
	return TextEdit.replace(Range.create(start, end), newText);
}
function reduceTextEdit(edit, oldText) {
	if (oldText.length === 0) return edit;
	let { range, newText } = edit;
	let ol = oldText.length;
	let nl = newText.length;
	if (ol === 0 || nl === 0) return edit;
	let { start, end } = range;
	let bo = 0;
	for (let i = 1; i <= Math.min(nl, ol); i++) if (newText[i - 1] === oldText[i - 1]) bo = i;
	else break;
	let eo = 0;
	let t = Math.min(nl - bo, ol - bo);
	if (t > 0) for (let i = 1; i <= t; i++) if (newText[nl - i] === oldText[ol - i]) eo = i;
	else break;
	let text = eo == 0 ? newText.slice(bo) : newText.slice(bo, -eo);
	if (bo > 0) start = getEnd(start, newText.slice(0, bo));
	if (eo > 0) end = getEnd(range.start, oldText.slice(0, -eo));
	return TextEdit.replace(Range.create(start, end), text);
}
function getRevertEdit(oldLines, newLines, startLine) {
	if (equals(oldLines, newLines)) return void 0;
	let changed = diffLines(oldLines, newLines, startLine);
	let original = oldLines.slice(changed.start, changed.end);
	let range = Range.create(changed.start, 0, changed.start + changed.replacement.length, 0);
	return TextEdit.replace(range, original.join("\n") + (original.length > 0 ? "\n" : ""));
}
var init_textedit = __esmMin((() => {
	init_main$2();
	init_array();
	init_diff();
	init_object();
	init_position();
	init_string$1();
}));
//#endregion
//#region src/diagnostic/util.ts
function getMessageString(message) {
	return MarkupContent.is(message) ? message.value : message;
}
function formatDiagnostic(format, diagnostic) {
	let { source, code, severity, message } = diagnostic;
	let s = getSeverityName(severity)[0];
	const codeStr = code !== void 0 && code !== null && code !== "" ? " " + code : "";
	let msg = getMessageString(message);
	return format.replace("%source", source).replace("%code", codeStr).replace("%severity", s).replace("%message", () => msg);
}
function getSeverityName(severity) {
	switch (severity) {
		case DiagnosticSeverity.Warning: return "Warning";
		case DiagnosticSeverity.Information: return "Information";
		case DiagnosticSeverity.Hint: return "Hint";
		default: return "Error";
	}
}
function getSeverityType(severity) {
	switch (severity) {
		case DiagnosticSeverity.Warning: return "W";
		case DiagnosticSeverity.Information: return "I";
		case DiagnosticSeverity.Hint: return "I";
		default: return "E";
	}
}
function severityLevel(level) {
	if (level == null) return void 0;
	switch (level) {
		case "hint": return DiagnosticSeverity.Hint;
		case "information": return DiagnosticSeverity.Information;
		case "warning": return DiagnosticSeverity.Warning;
		case "error": return DiagnosticSeverity.Error;
		default: return DiagnosticSeverity.Hint;
	}
}
function getNameFromSeverity(severity) {
	switch (severity) {
		case DiagnosticSeverity.Error: return "CocError";
		case DiagnosticSeverity.Warning: return "CocWarning";
		case DiagnosticSeverity.Information: return "CocInfo";
		case DiagnosticSeverity.Hint: return "CocHint";
		default: return "CocError";
	}
}
function getLocationListItem(bufnr, diagnostic, lines) {
	let { start, end } = diagnostic.range;
	let owner = diagnostic.source || "coc.nvim";
	let msg = getMessageString(diagnostic.message).split("\n")[0];
	let type = getSeverityName(diagnostic.severity).slice(0, 1).toUpperCase();
	return {
		bufnr,
		lnum: start.line + 1,
		end_lnum: end.line + 1,
		col: Array.isArray(lines) ? byteIndex(lines[start.line] ?? "", start.character) + 1 : start.character + 1,
		end_col: Array.isArray(lines) ? byteIndex(lines[end.line] ?? "", end.character) + 1 : end.character + 1,
		text: `[${owner}${diagnostic.code ? " " + diagnostic.code : ""}] ${msg} [${type}]`,
		type
	};
}
/**
* Sort by severity and position
*/
function sortDiagnostics(a, b) {
	let sa = a.severity ?? 1;
	let sb = b.severity ?? 1;
	if (sa != sb) return sa - sb;
	let d = comparePosition(a.range.start, b.range.start);
	if (d != 0) return d;
	return a.source > b.source ? 1 : -1;
}
function getHighlightGroup$2(diagnostic) {
	let hlGroups = [];
	let tags = diagnostic.tags || [];
	if (tags.includes(DiagnosticTag.Deprecated)) hlGroups.push("CocDeprecatedHighlight");
	if (tags.includes(DiagnosticTag.Unnecessary)) hlGroups.push("CocUnusedHighlight");
	switch (diagnostic.severity) {
		case DiagnosticSeverity.Hint:
			hlGroups.push("CocHintHighlight");
			break;
		case DiagnosticSeverity.Information:
			hlGroups.push("CocInfoHighlight");
			break;
		case DiagnosticSeverity.Warning:
			hlGroups.push("CocWarningHighlight");
			break;
		case DiagnosticSeverity.Error:
			hlGroups.push("CocErrorHighlight");
			break;
	}
	return hlGroups;
}
function adjustDiagnostics(diagnostics, edit) {
	let res = [];
	let { range } = edit;
	for (let diag of diagnostics) {
		let r = diag.range;
		if (rangeOverlap(range, r)) continue;
		if (comparePosition(r.start, range.end) > 0) {
			let s = getPosition(r.start, edit);
			let e = getPosition(r.end, edit);
			if (s.line >= 0 && s.character >= 0 && e.line >= 0 && e.character >= 0) diag.range = Range.create(s, e);
		}
		res.push(diag);
	}
	return res;
}
var init_util$5 = __esmMin((() => {
	init_main$2();
	init_position();
	init_string$1();
	init_textedit();
}));
//#endregion
//#region src/diagnostic/buffer.ts
var signGroup, NAMESPACE$4, hlGroups, delay$1, aleMethod, virtualTextSrcId, floatFactory$2, DiagnosticBuffer;
var init_buffer$6 = __esmMin((() => {
	init_main$2();
	init_esm();
	init_events();
	init_util$7();
	init_ansiparse();
	init_array();
	init_errors();
	init_node();
	init_position();
	init_protocol();
	init_window();
	init_workspace$1();
	init_util$5();
	signGroup = "CocDiagnostic";
	NAMESPACE$4 = "diagnostic";
	hlGroups = [
		"CocErrorHighlight",
		"CocWarningHighlight",
		"CocInfoHighlight",
		"CocHintHighlight",
		"CocDeprecatedHighlight",
		"CocUnusedHighlight"
	];
	delay$1 = getConditionValue(100, 10);
	aleMethod = getConditionValue("ale#other_source#ShowResults", "MockAleResults");
	DiagnosticBuffer = class {
		nvim;
		doc;
		diagnosticsMap = /* @__PURE__ */ new Map();
		_disposed = false;
		_dirties = /* @__PURE__ */ new Set();
		_refreshing = false;
		_config;
		refreshHighlights;
		_onDidRefresh = new import_main$1.Emitter();
		onDidRefresh = this._onDidRefresh.event;
		constructor(nvim, doc) {
			this.nvim = nvim;
			this.doc = doc;
			this.loadConfiguration();
			let timer;
			let fn = () => {
				clearTimeout(timer);
				this._refreshing = true;
				timer = setTimeout(() => {
					this._refreshing = false;
					if (!this.config.enable || !this.config.autoRefresh || !this.dirty) return;
					if (this.doc.hasChanged) {
						if (!events_default.insertMode || this.config.refreshOnInsertMode) this.refreshHighlights();
						return;
					}
					this._refresh(true);
				}, delay$1);
			};
			fn.clear = () => {
				this._refreshing = false;
				clearTimeout(timer);
			};
			this.refreshHighlights = fn;
		}
		get config() {
			return this._config;
		}
		loadConfiguration() {
			let config = workspace_default.getConfiguration("diagnostic", this.doc);
			let changed = this._config && config.enable != this._config.enable;
			this._config = {
				enable: config.get("enable", true),
				floatConfig: config.get("floatConfig", {}),
				messageTarget: config.get("messageTarget", "float"),
				enableHighlightLineNumber: config.get("enableHighlightLineNumber", true),
				highlightLimit: config.get("highlightLimit", 1e3),
				highlightPriority: config.get("highlightPriority"),
				autoRefresh: config.get("autoRefresh", true),
				checkCurrentLine: config.get("checkCurrentLine", false),
				enableSign: workspace_default.env.sign && config.get("enableSign", true),
				locationlistUpdate: config.get("locationlistUpdate", true),
				enableMessage: config.get("enableMessage", "always"),
				virtualText: config.get("virtualText", false),
				virtualTextAlign: config.get("virtualTextAlign", "after"),
				virtualTextWinCol: config.get("virtualTextWinCol", null),
				virtualTextCurrentLineOnly: config.get("virtualTextCurrentLineOnly"),
				virtualTextPrefix: config.get("virtualTextPrefix", " "),
				virtualTextFormat: config.get("virtualTextFormat", "%message"),
				virtualTextLimitInOneLine: config.get("virtualTextLimitInOneLine", 999),
				virtualTextLineSeparator: config.get("virtualTextLineSeparator", " \\ "),
				virtualTextLines: config.get("virtualTextLines", 3),
				displayByAle: config.get("displayByAle", false),
				displayByVimDiagnostic: config.get("displayByVimDiagnostic", false),
				level: severityLevel(config.get("level", "hint")),
				locationlistLevel: severityLevel(config.get("locationlistLevel")),
				signLevel: severityLevel(config.get("signLevel")),
				virtualTextLevel: severityLevel(config.get("virtualTextLevel")),
				messageLevel: severityLevel(config.get("messageLevel")),
				signPriority: config.get("signPriority", 10),
				refreshOnInsertMode: config.get("refreshOnInsertMode", false),
				filetypeMap: config.get("filetypeMap", {}),
				showUnused: config.get("showUnused", true),
				showDeprecated: config.get("showDeprecated", true),
				format: config.get("format", "[%source%code] [%severity] %message"),
				showRelatedInformation: config.get("showRelatedInformation", true)
			};
			if (this._config.virtualText && !virtualTextSrcId) this.nvim.createNamespace("coc-diagnostic-virtualText").then((id) => {
				virtualTextSrcId = id;
			});
			if (changed) if (this.config.enable) this._refresh(false);
			else this.clear();
		}
		async setState(enable) {
			if (this._config.enable == enable) return;
			this._config.enable = enable;
			if (enable) await this._refresh(false);
			else this.clear();
		}
		get dirty() {
			return this._dirties.size > 0;
		}
		get bufnr() {
			return this.doc.bufnr;
		}
		get uri() {
			return this.doc.uri;
		}
		onChange(e) {
			let changes = e.contentChanges;
			if (changes.length > 0) {
				let edit = TextEdit.replace(changes[0].range, changes[0].text);
				for (let [collection, diagnostics] of this.diagnosticsMap.entries()) {
					let arr = adjustDiagnostics(diagnostics, edit);
					this.diagnosticsMap.set(collection, arr);
				}
				this._dirties = new Set(this.diagnosticsMap.keys());
			}
			if (!this.config.autoRefresh) return;
			this.refreshHighlights();
		}
		onTextChange() {
			this._dirties = new Set(this.diagnosticsMap.keys());
			this.refreshHighlights.clear();
		}
		get displayByAle() {
			return this._config.displayByAle;
		}
		get displayByVimDiagnostic() {
			return this.nvim.isVim === false && this._config.displayByVimDiagnostic;
		}
		clearHighlight(collection) {
			this.buffer.clearNamespace(NAMESPACE$4 + collection);
		}
		clearSigns(collection) {
			this.buffer.unplaceSign({ group: signGroup + collection });
		}
		get diagnostics() {
			let res = [];
			for (let diags of this.diagnosticsMap.values()) res.push(...diags);
			return res;
		}
		get buffer() {
			return this.nvim.createBuffer(this.bufnr);
		}
		refreshAle(collection, diagnostics) {
			let aleItems = diagnostics.map((o) => {
				let range = o.range;
				return {
					text: o.message,
					code: o.code,
					lnum: range.start.line + 1,
					col: range.start.character + 1,
					end_lnum: range.end.line + 1,
					end_col: range.end.character,
					type: getSeverityType(o.severity)
				};
			});
			this.nvim.call(aleMethod, [
				this.bufnr,
				"coc" + collection,
				aleItems
			], true);
		}
		/**
		* Update diagnostics when diagnostics change on collection.
		* @param {string} collection
		* @param {Diagnostic[]} diagnostics
		*/
		async update(collection, diagnostics) {
			let { diagnosticsMap } = this;
			let curr = diagnosticsMap.get(collection);
			if (!this._dirties.has(collection) && isFalsyOrEmpty(diagnostics) && isFalsyOrEmpty(curr)) return;
			diagnosticsMap.set(collection, diagnostics);
			this.checkFloat();
			if (!this.config.enable || diagnostics.length > 0 && this._refreshing) {
				this._dirties.add(collection);
				return;
			}
			let info = await this.getDiagnosticInfo(diagnostics.length === 0);
			if (!info || info.winid == -1) {
				this._dirties.add(collection);
				return;
			}
			if (this.diagnosticsMap.get(collection) !== diagnostics) {
				this._dirties.add(collection);
				return;
			}
			let map = /* @__PURE__ */ new Map();
			map.set(collection, diagnostics);
			this.refresh(map, info);
		}
		async checkFloat() {
			if (workspace_default.bufnr != this.bufnr || !floatFactory$2) return;
			let pos = await window_default.getCursorPosition();
			if (this.getDiagnosticsAtPosition(pos).length == 0) floatFactory$2.close();
		}
		/**
		* Reset all diagnostics of current buffer
		*/
		async reset(diagnostics) {
			this.refreshHighlights.clear();
			let { diagnosticsMap } = this;
			for (let key of diagnosticsMap.keys()) if (isFalsyOrEmpty(diagnostics[key])) diagnostics[key] = [];
			for (let [key, value] of Object.entries(diagnostics)) diagnosticsMap.set(key, value);
			this._dirties = new Set(diagnosticsMap.keys());
			await this._refresh(false);
		}
		async onCursorHold(lnum, col) {
			if (this.config.enableMessage !== "always") return;
			let pos = this.doc.getPosition(lnum, col);
			await this.echoMessage(true, pos);
		}
		/**
		* Echo diagnostic message under cursor.
		*/
		async echoMessage(truncate = false, position, target) {
			const config = this.config;
			if (!config.enable || config.enableMessage === "never" || this.displayByAle || this.displayByVimDiagnostic) return false;
			if (!target) target = config.messageTarget;
			let useFloat = target == "float";
			let diagnostics = this.getDiagnosticsAtPosition(position);
			if (config.messageLevel) diagnostics = diagnostics.filter((diagnostic) => {
				return diagnostic.severity && diagnostic.severity <= config.messageLevel;
			});
			if (useFloat) await this.showFloat(diagnostics);
			else {
				const lines = [];
				diagnostics.forEach((diagnostic) => {
					lines.push(formatDiagnostic(config.format, diagnostic));
				});
				if (lines.length) {
					await this.nvim.command("echo \"\"");
					await window_default.echoLines(lines, truncate);
				}
			}
			return true;
		}
		async showVirtualTextCurrentLine(lnum) {
			let { config } = this;
			if (!config.virtualTextCurrentLineOnly || events_default.insertMode && !config.refreshOnInsertMode) return false;
			if (!await this.isEnabled()) return false;
			this.showVirtualText(lnum);
			return true;
		}
		async showFloat(diagnostics, target = "float") {
			if (target !== "float") return false;
			if (!floatFactory$2) floatFactory$2 = window_default.createFloatFactory({
				modes: ["n"],
				autoHide: true
			});
			if (diagnostics.length == 0) {
				floatFactory$2.close();
				return false;
			}
			if (events_default.insertMode) return false;
			let config = this.config;
			let ft = "";
			let docs = [];
			if (Object.keys(config.filetypeMap).length > 0) {
				let filetype = this.doc.filetype;
				const defaultFiletype = config.filetypeMap["default"] || "";
				ft = config.filetypeMap[filetype] || (defaultFiletype == "bufferType" ? filetype : defaultFiletype);
			}
			diagnostics.forEach((diagnostic) => {
				let filetype = "Error";
				if (diagnostic.filetype) filetype = diagnostic.filetype;
				else if (ft === "") switch (diagnostic.severity) {
					case DiagnosticSeverity.Hint:
						filetype = "Hint";
						break;
					case DiagnosticSeverity.Warning:
						filetype = "Warning";
						break;
					case DiagnosticSeverity.Information:
						filetype = "Info";
						break;
				}
				else filetype = ft;
				let msg = diagnostic.message;
				let link = diagnostic.codeDescription?.href ?? "";
				if (config.showRelatedInformation && diagnostic.relatedInformation?.length) {
					msg = `${diagnostic.message}\n\nRelated information:\n`;
					for (const info of diagnostic.relatedInformation) {
						const fsPath = URI.parse(info.location.uri).fsPath;
						const basename = path$5.basename(fsPath);
						const line = info.location.range.start.line + 1;
						const column = info.location.range.start.character + 1;
						msg = `${msg}\n  * ${basename}#${line},${column}: ${info.message}`;
					}
					msg = msg + "\n\n";
				}
				docs.push({
					filetype,
					content: formatDiagnostic(config.format, {
						...diagnostic,
						message: msg
					})
				});
				if (link) docs.push({
					filetype: "txt",
					content: link
				});
			});
			await floatFactory$2.show(docs, this.config.floatConfig);
			return true;
		}
		/**
		* Get buffer info needed for refresh.
		*/
		async getDiagnosticInfo(force) {
			let { refreshOnInsertMode } = this._config;
			let { nvim, bufnr } = this;
			let checkInsert = !refreshOnInsertMode;
			if (force) checkInsert = false;
			else if (events_default.insertMode && !refreshOnInsertMode) return void 0;
			return await nvim.call("coc#util#diagnostic_info", [bufnr, checkInsert]).catch(onUnexpectedError);
		}
		/**
		* Refresh changed diagnostics to UI.
		*/
		refresh(diagnosticsMap, info) {
			let { nvim, displayByAle, displayByVimDiagnostic } = this;
			for (let collection of diagnosticsMap.keys()) this._dirties.delete(collection);
			if (displayByAle) {
				nvim.pauseNotification();
				for (let [collection, diagnostics] of diagnosticsMap.entries()) this.refreshAle(collection, diagnostics);
				nvim.resumeNotification(true, true);
			} else if (displayByVimDiagnostic) {
				nvim.pauseNotification();
				this.setDiagnosticInfo(true);
				nvim.resumeNotification(true, true);
			} else {
				let emptyCollections = [];
				nvim.pauseNotification();
				for (let [collection, diagnostics] of diagnosticsMap.entries()) {
					if (diagnostics.length == 0) emptyCollections.push(collection);
					this.addSigns(collection, diagnostics);
					this.updateHighlights(collection, diagnostics);
				}
				this.showVirtualText(info.lnum);
				this.updateLocationList(info.winid, info.locationlist);
				this.setDiagnosticInfo();
				nvim.resumeNotification(true, true);
				emptyCollections.forEach((name) => {
					this.diagnosticsMap.delete(name);
				});
			}
			this._onDidRefresh.fire(this.diagnostics);
		}
		updateLocationList(winid, title) {
			if (!this._config.locationlistUpdate || winid == -1 || title !== "Diagnostics of coc") return;
			let items = this.toLocationListItems(this.diagnostics);
			this.nvim.call("coc#ui#setloclist", [
				winid,
				items,
				"r",
				"Diagnostics of coc"
			], true);
		}
		toLocationListItems(diagnostics) {
			let { locationlistLevel } = this._config;
			let items = [];
			let lines = this.doc.textDocument.lines;
			diagnostics.sort(sortDiagnostics);
			for (let diagnostic of diagnostics) {
				if (locationlistLevel && diagnostic.severity && diagnostic.severity > locationlistLevel) continue;
				items.push(getLocationListItem(this.bufnr, diagnostic, lines));
			}
			return items;
		}
		addSigns(collection, diagnostics) {
			let { enableSign, signLevel } = this._config;
			if (!enableSign) return;
			let group = signGroup + collection;
			let signs = [];
			let signsMap = /* @__PURE__ */ new Map();
			for (let diagnostic of diagnostics) {
				let { range, severity } = diagnostic;
				if (!severity || signLevel && severity > signLevel) continue;
				let line = range.start.line;
				let exists = signsMap.get(line) || [];
				if (exists.includes(severity)) continue;
				exists.push(severity);
				signsMap.set(line, exists);
				let priority = this._config.signPriority + 4 - severity;
				signs.push({
					name: getNameFromSeverity(severity),
					lnum: line + 1,
					priority
				});
			}
			this.nvim.call("coc#ui#update_signs", [
				this.bufnr,
				group,
				signs
			], true);
		}
		setDiagnosticInfo(full = false) {
			let lnums = [
				0,
				0,
				0,
				0
			];
			let info = {
				error: 0,
				warning: 0,
				information: 0,
				hint: 0,
				lnums
			};
			let items = [];
			for (let diagnostics of this.diagnosticsMap.values()) for (let diagnostic of diagnostics) {
				let lnum = diagnostic.range.start.line + 1;
				switch (diagnostic.severity) {
					case DiagnosticSeverity.Warning:
						info.warning = info.warning + 1;
						lnums[1] = lnums[1] ? Math.min(lnums[1], lnum) : lnum;
						break;
					case DiagnosticSeverity.Information:
						info.information = info.information + 1;
						lnums[2] = lnums[2] ? Math.min(lnums[2], lnum) : lnum;
						break;
					case DiagnosticSeverity.Hint:
						info.hint = info.hint + 1;
						lnums[3] = lnums[3] ? Math.min(lnums[3], lnum) : lnum;
						break;
					default:
						lnums[0] = lnums[0] ? Math.min(lnums[0], lnum) : lnum;
						info.error = info.error + 1;
				}
				if (full) {
					let { start, end } = diagnostic.range;
					items.push({
						file: URI.parse(this.doc.uri).fsPath,
						lnum: start.line + 1,
						end_lnum: end.line + 1,
						col: start.character + 1,
						end_col: end.character + 1,
						code: diagnostic.code,
						source: diagnostic.source,
						message: getMessageString(diagnostic.message),
						severity: getSeverityName(diagnostic.severity),
						level: diagnostic.severity ?? 0,
						location: Location.create(this.doc.uri, diagnostic.range)
					});
				}
			}
			let buf = this.nvim.createBuffer(this.bufnr);
			buf.setVar("coc_diagnostic_info", info, true);
			buf.setVar("coc_diagnostic_map", items, true);
			this.nvim.call("coc#util#do_autocmd", ["CocDiagnosticChange"], true);
		}
		showVirtualText(lnum) {
			let { _config: config } = this;
			let { virtualText, virtualTextLevel } = config;
			if (!virtualText || lnum < 0) return;
			let { virtualTextPrefix, virtualTextLimitInOneLine, virtualTextCurrentLineOnly } = this._config;
			let { diagnostics, buffer } = this;
			if (virtualTextCurrentLineOnly) diagnostics = diagnostics.filter((d) => {
				let { start, end } = d.range;
				return start.line <= lnum - 1 && end.line >= lnum - 1;
			});
			diagnostics.sort(sortDiagnostics);
			buffer.clearNamespace(virtualTextSrcId);
			let map = /* @__PURE__ */ new Map();
			let opts = {
				text_align: config.virtualTextAlign,
				virt_text_win_col: config.virtualTextWinCol
			};
			for (let i = diagnostics.length - 1; i >= 0; i--) {
				let diagnostic = diagnostics[i];
				if (virtualTextLevel && diagnostic.severity && diagnostic.severity > virtualTextLevel) continue;
				let { line } = diagnostic.range.start;
				let highlight = getNameFromSeverity(diagnostic.severity) + "VirtualText";
				let msg = getMessageString(diagnostic.message).split(/\n/).map((l) => l.trim()).filter((l) => l.length > 0).slice(0, this._config.virtualTextLines).join(this._config.virtualTextLineSeparator);
				let arr = map.get(line) ?? [];
				const formattedDiagnostic = formatDiagnostic(this._config.virtualTextFormat, {
					...diagnostic,
					message: msg
				});
				arr.unshift([virtualTextPrefix + stripAnsiColoring(formattedDiagnostic), highlight]);
				map.set(line, arr);
			}
			for (let [line, blocks] of map.entries()) buffer.setVirtualText(virtualTextSrcId, line, blocks.slice(0, virtualTextLimitInOneLine), opts);
		}
		updateHighlights(collection, diagnostics) {
			if (!diagnostics.length) this.clearHighlight(collection);
			else {
				let items = this.getHighlightItems(diagnostics);
				let priority = this._config.highlightPriority;
				this.buffer.updateHighlights(NAMESPACE$4 + collection, items, { priority });
			}
		}
		/**
		* Refresh all diagnostics
		*/
		async _refresh(dirtyOnly) {
			let info = await this.getDiagnosticInfo(!dirtyOnly);
			if (!info || info.winid == -1 || !this.config.enable) return;
			let { _dirties } = this;
			if (dirtyOnly) {
				let map = /* @__PURE__ */ new Map();
				for (let [key, diagnostics] of this.diagnosticsMap.entries()) {
					if (!_dirties.has(key)) continue;
					map.set(key, diagnostics);
				}
				this.refresh(map, info);
			} else this.refresh(this.diagnosticsMap, info);
		}
		getHighlightItems(diagnostics) {
			let res = [];
			for (let i = 0; i < Math.min(this._config.highlightLimit, diagnostics.length); i++) {
				let diagnostic = diagnostics[i];
				let hlGroups = getHighlightGroup$2(diagnostic);
				for (const hlGroup of hlGroups) this.doc.addHighlights(res, hlGroup, diagnostic.range);
			}
			res.sort((a, b) => {
				if (a.lnum != b.lnum) return a.lnum - b.lnum;
				if (a.colStart != b.colStart) return a.colStart - b.colStart;
				return hlGroups.indexOf(b.hlGroup) - hlGroups.indexOf(a.hlGroup);
			});
			return res;
		}
		/**
		* Clear all diagnostics from UI.
		*/
		clear() {
			let { nvim } = this;
			let collections = Array.from(this.diagnosticsMap.keys());
			this.refreshHighlights.clear();
			this._dirties.clear();
			if (this.displayByAle) for (let collection of collections) this.nvim.call(aleMethod, [
				this.bufnr,
				collection,
				[]
			], true);
			else {
				nvim.pauseNotification();
				this.buffer.deleteVar("coc_diagnostic_info");
				this.buffer.deleteVar("coc_diagnostic_map");
				for (let collection of collections) {
					this.clearHighlight(collection);
					this.clearSigns(collection);
				}
				if (this._config.virtualText) this.buffer.clearNamespace(virtualTextSrcId);
				nvim.resumeNotification(true, true);
			}
		}
		/**
		* Get diagnostics at cursor position.
		*/
		getDiagnosticsAt(pos, checkCurrentLine) {
			let diagnostics = [];
			for (let diags of this.diagnosticsMap.values()) if (checkCurrentLine) diagnostics.push(...diags.filter((o) => lineInRange(pos.line, o.range)));
			else diagnostics.push(...diags.filter((o) => positionInRange(pos, o.range) == 0));
			diagnostics.sort(sortDiagnostics);
			return diagnostics;
		}
		getDiagnosticsAtPosition(pos) {
			let { config, doc } = this;
			let res = this.getDiagnosticsAt(pos, config.checkCurrentLine);
			if (config.checkCurrentLine || res.length) return res;
			let total = doc.getline(pos.line).length;
			if (pos.character + 1 == total) {
				res = this.getDiagnosticsAt(Position.create(pos.line, pos.character + 1), false);
				if (res.length) return res;
			}
			if (pos.line === doc.lineCount - 1 && pos.character == 0) {
				pos = Position.create(pos.line + 1, 0);
				res = this.getDiagnosticsAt(pos, true);
			}
			return res;
		}
		async isEnabled() {
			if (this._disposed || !this.config.enable) return false;
			return await this.nvim.createBuffer(this.bufnr).getVar("coc_diagnostic_disable") != 1;
		}
		dispose() {
			this.clear();
			this.diagnosticsMap.clear();
			this._onDidRefresh.dispose();
			this._disposed = true;
		}
	};
}));
//#endregion
//#region src/diagnostic/collection.ts
var HintTags, DiagnosticCollection;
var init_collection = __esmMin((() => {
	init_main$2();
	init_esm();
	init_array();
	init_protocol();
	init_workspace$1();
	HintTags = [DiagnosticTag.Deprecated, DiagnosticTag.Unnecessary];
	DiagnosticCollection = class {
		name;
		onDispose;
		diagnosticsMap = /* @__PURE__ */ new Map();
		_onDidDiagnosticsChange = new import_main$1.Emitter();
		onDidDiagnosticsChange = this._onDidDiagnosticsChange.event;
		constructor(name, onDispose) {
			this.name = name;
			this.onDispose = onDispose;
		}
		set(entries, diagnostics) {
			let diagnosticsPerFile = /* @__PURE__ */ new Map();
			if (!Array.isArray(entries)) {
				let doc = workspace_default.getDocument(entries);
				let uri = doc ? doc.uri : entries;
				diagnosticsPerFile.set(uri, diagnostics || []);
			} else for (let item of entries) {
				let [uri, diagnostics] = item;
				let doc = workspace_default.getDocument(uri);
				uri = doc ? doc.uri : uri;
				if (diagnostics == null) diagnostics = [];
				else diagnostics = (diagnosticsPerFile.get(uri) || []).concat(diagnostics);
				diagnosticsPerFile.set(uri, diagnostics);
			}
			for (let item of diagnosticsPerFile) {
				let [uri, diagnostics] = item;
				uri = URI.parse(uri).toString();
				diagnostics.forEach((o) => {
					o.range = o.range ?? Range.create(0, 0, 0, 0);
					o.message = o.message ?? "";
					o.source = o.source || this.name;
					if (!o.severity && Array.isArray(o.tags) && intersect(o.tags, HintTags)) o.severity = DiagnosticSeverity.Hint;
				});
				this.diagnosticsMap.set(uri, diagnostics);
				this._onDidDiagnosticsChange.fire(uri);
			}
		}
		delete(uri) {
			this.diagnosticsMap.delete(uri);
			this._onDidDiagnosticsChange.fire(uri);
		}
		clear() {
			let uris = Array.from(this.diagnosticsMap.keys());
			uris = uris.filter((uri) => this.diagnosticsMap.get(uri).length > 0);
			this.diagnosticsMap.clear();
			for (let uri of uris) this._onDidDiagnosticsChange.fire(uri);
		}
		forEach(callback, thisArg) {
			for (let uri of this.diagnosticsMap.keys()) {
				let diagnostics = this.diagnosticsMap.get(uri);
				callback.call(thisArg, uri, diagnostics, this);
			}
		}
		entries() {
			return this.diagnosticsMap.entries();
		}
		get(uri) {
			let arr = this.diagnosticsMap.get(uri);
			return arr == null ? [] : arr.slice();
		}
		has(uri) {
			return this.diagnosticsMap.has(uri);
		}
		dispose() {
			this.clear();
			if (this.onDispose) this.onDispose();
			this._onDidDiagnosticsChange.dispose();
		}
	};
}));
//#endregion
//#region src/diagnostic/manager.ts
var DiagnosticManager, manager_default$2;
var init_manager$4 = __esmMin((() => {
	init_main$2();
	init_esm();
	init_commands$2();
	init_events();
	init_util$7();
	init_array();
	init_constants();
	init_fs();
	init_position();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	init_buffer$6();
	init_collection();
	init_util$5();
	DiagnosticManager = class {
		_onDidRefresh = new import_main$1.Emitter();
		onDidRefresh = this._onDidRefresh.event;
		enabled = true;
		buffers;
		collections = [];
		disposables = [];
		messageTimer;
		init() {
			commands_default.register({
				id: "workspace.diagnosticRelated",
				execute: () => this.jumpRelated()
			}, false, "jump to related locations of current diagnostic.");
			this.defineSigns(workspace_default.initialConfiguration.get("diagnostic"));
			let globalValue = workspace_default.initialConfiguration.inspect("diagnostic.enable").globalValue;
			this.enabled = globalValue !== false;
			this.buffers = workspace_default.registerBufferSync((doc) => {
				let buf = new DiagnosticBuffer(this.nvim, doc);
				buf.onDidRefresh((diagnostics) => {
					this._onDidRefresh.fire({
						diagnostics,
						uri: buf.uri,
						bufnr: buf.bufnr
					});
				});
				let diagnostics = this.getDiagnostics(buf);
				if (Object.keys(diagnostics).length > 0 && buf.config.autoRefresh) buf.reset(diagnostics);
				return buf;
			});
			workspace_default.onDidChangeConfiguration((e) => {
				if (this.buffers && e.affectsConfiguration("diagnostic")) for (let item of this.buffers.items) item.loadConfiguration();
			}, null, this.disposables);
			let config = workspace_default.initialConfiguration.get("diagnostic");
			events_default.on("CursorMoved", (bufnr, cursor) => {
				if (this.messageTimer) clearTimeout(this.messageTimer);
				this.messageTimer = setTimeout(() => {
					let buf = this.buffers.getItem(bufnr);
					if (buf == null || buf.dirty) return;
					Promise.allSettled([buf.onCursorHold(cursor[0], cursor[1]), buf.showVirtualTextCurrentLine(cursor[0])]);
				}, config.messageDelay);
			}, null, this.disposables);
			events_default.on(["InsertEnter", "BufEnter"], () => {
				clearTimeout(this.messageTimer);
			}, null, this.disposables);
			events_default.on("InsertLeave", (bufnr) => {
				let buf = this.buffers.getItem(bufnr);
				if (!buf || buf.config.refreshOnInsertMode) return;
				for (let buf of this.buffers.items) buf.refreshHighlights();
			}, null, this.disposables);
			events_default.on("BufWinEnter", (bufnr) => {
				let buf = this.buffers.getItem(bufnr);
				if (buf) buf.refreshHighlights();
			}, null, this.disposables);
			this.checkConfigurationErrors();
			workspace_default.configurations.onError((ev) => {
				this.create("config").set(ev.uri, ev.diagnostics);
			}, null, this.disposables);
		}
		checkConfigurationErrors() {
			const errors = workspace_default.configurations.errors;
			if (!isFalsyOrEmpty(errors)) {
				const collection = this.create("config");
				for (let [uri, diagnostics] of errors.entries()) {
					let fsPath = URI.parse(uri).fsPath;
					window_default.showErrorMessage(`Error detected for config file ${fsPath}, please check diagnostics list.`);
					collection.set(uri, diagnostics);
				}
			}
		}
		defineSigns(config) {
			let { nvim } = this;
			nvim.pauseNotification();
			for (let kind of [
				"Error",
				"Warning",
				"Info",
				"Hint"
			]) {
				let cmd = `sign define Coc${kind} linehl=Coc${kind}Line`;
				let signText = config[kind.toLowerCase() + "Sign"];
				if (signText) cmd += ` texthl=Coc${kind}Sign text=${signText}`;
				if (!isVim && config.enableHighlightLineNumber) cmd += ` numhl=Coc${kind}Sign`;
				nvim.command(cmd, true);
			}
			nvim.resumeNotification(false, true);
		}
		getItem(bufnr) {
			return this.buffers.getItem(bufnr);
		}
		/**
		* Fill location list with diagnostics
		*/
		async setLocationlist(bufnr) {
			let doc = workspace_default.getAttachedDocument(bufnr);
			let buf = this.getItem(doc.bufnr);
			let diagnostics = [];
			for (let diags of Object.values(this.getDiagnostics(buf))) diagnostics.push(...diags);
			let items = buf.toLocationListItems(diagnostics);
			await this.nvim.call("coc#ui#setloclist", [
				0,
				items,
				" ",
				"Diagnostics of coc"
			]);
		}
		/**
		* Create collection by name
		*/
		create(name) {
			let collection = this.getCollectionByName(name);
			if (collection) return collection;
			collection = new DiagnosticCollection(name, () => {
				let idx = this.collections.findIndex((o) => o == collection);
				if (idx !== -1) this.collections.splice(idx, 1);
			});
			this.collections.push(collection);
			collection.onDidDiagnosticsChange((uri) => {
				let buf = this.buffers?.getItem(uri);
				if (buf && buf.config.autoRefresh) buf.update(name, this.getDiagnosticsByCollection(buf, collection));
			});
			return collection;
		}
		/**
		* Get diagnostics ranges from document
		*/
		getSortedRanges(uri, minLevel, severity) {
			let collections = this.getCollections(uri);
			let res = [];
			let level = severity ? severityLevel(severity) : 0;
			for (let collection of collections) {
				let diagnostics = collection.get(uri);
				if (level) diagnostics = diagnostics.filter((o) => o.severity == level);
				else if (minLevel && minLevel < DiagnosticSeverity.Hint) diagnostics = diagnostics.filter((o) => {
					return o.severity && o.severity > minLevel ? false : true;
				});
				let ranges = diagnostics.map((o) => o.range);
				res.push(...ranges);
			}
			res.sort((a, b) => {
				if (a.start.line != b.start.line) return a.start.line - b.start.line;
				return a.start.character - b.start.character;
			});
			return res;
		}
		/**
		* Get readonly diagnostics for a buffer
		*/
		getDiagnostics(buf) {
			let res = {};
			for (let collection of this.collections) {
				if (!collection.has(buf.uri)) continue;
				res[collection.name] = this.getDiagnosticsByCollection(buf, collection);
			}
			return res;
		}
		/**
		* Get filtered diagnostics by collection.
		*/
		getDiagnosticsByCollection(buf, collection) {
			let { level, showUnused, showDeprecated } = buf.config;
			let items = collection.get(buf.uri) ?? [];
			if (items.length) {
				items = items.filter((d) => {
					if (level && d.severity && d.severity > level) return false;
					if (!showUnused && d.tags?.includes(DiagnosticTag.Unnecessary)) return false;
					if (!showDeprecated && d.tags?.includes(DiagnosticTag.Deprecated)) return false;
					return true;
				});
				items.sort((a, b) => {
					return comparePosition(a.range.start, b.range.start);
				});
			}
			return items;
		}
		getDiagnosticsInRange(document, range) {
			let res = [];
			for (let collection of this.collections) for (let item of collection.get(document.uri) ?? []) if (rangeIntersect(item.range, range)) res.push(item);
			return res;
		}
		/**
		* Show diagnostics under cursor in preview window
		*/
		async preview() {
			let diagnostics = await this.getCurrentDiagnostics();
			if (diagnostics.length == 0) {
				this.nvim.command("pclose", true);
				return;
			}
			let lines = [];
			for (let diagnostic of diagnostics) {
				let { source, code, severity, message } = diagnostic;
				let s = getSeverityName(severity)[0];
				lines.push(`[${source}${code ? " " + code : ""}] [${s}]`);
				lines.push(...getMessageString(message).split(/\r?\n/));
				lines.push("");
			}
			this.nvim.call("coc#ui#preview_info", [lines, "txt"], true);
		}
		async prepareJump(severity) {
			let bufnr = await this.nvim.call("bufnr", ["%"]);
			let item = this.buffers.getItem(bufnr);
			if (!item) return;
			let ranges = this.getSortedRanges(item.uri, item.config.level, severity);
			if (isFalsyOrEmpty(ranges)) return;
			return {
				item,
				curpos: await window_default.getCursorPosition(),
				wrapscan: await this.nvim.getOption("wrapscan") != 0,
				ranges
			};
		}
		/**
		* Jump to previous diagnostic position
		*/
		async jumpPrevious(severity) {
			let result = await this.prepareJump(severity);
			if (!result) return;
			let { curpos, item, wrapscan, ranges } = result;
			let pos;
			for (let i = ranges.length - 1; i >= 0; i--) {
				let end = ranges[i].end;
				if (comparePosition(end, curpos) < 0) {
					pos = ranges[i].start;
					break;
				}
			}
			if (!pos && wrapscan) pos = ranges[ranges.length - 1].start;
			if (pos) {
				await window_default.moveTo(pos);
				await item.echoMessage(false, pos);
				await item.showVirtualTextCurrentLine(pos.line + 1);
				if (this.messageTimer) clearTimeout(this.messageTimer);
			} else window_default.showWarningMessage(`No more diagnostic before cursor position`);
		}
		/**
		* Jump to next diagnostic position
		*/
		async jumpNext(severity) {
			let result = await this.prepareJump(severity);
			if (!result) return;
			let { curpos, item, wrapscan, ranges } = result;
			let pos;
			for (let i = 0; i <= ranges.length - 1; i++) {
				let start = ranges[i].start;
				if (comparePosition(start, curpos) > 0) {
					let arr = await this.nvim.call("coc#util#valid_position", [start.line, start.character]);
					if ((arr[0] != start.line || arr[1] != start.character) && comparePosition(Position.create(arr[0], arr[1]), curpos) <= 0) continue;
					pos = Position.create(arr[0], arr[1]);
					break;
				}
			}
			if (!pos && wrapscan) pos = ranges[0].start;
			if (pos) {
				await window_default.moveTo(pos);
				await item.echoMessage(false, pos);
				await item.showVirtualTextCurrentLine(pos.line + 1);
				if (this.messageTimer) clearTimeout(this.messageTimer);
			} else window_default.showWarningMessage(`No more diagnostic after cursor position`);
		}
		/**
		* Get all sorted diagnostics
		*/
		async getDiagnosticList() {
			let res = [];
			let level = severityLevel(workspace_default.getConfiguration("diagnostic").get("level", "hint"));
			for (let collection of this.collections) for (let [uri, diagnostics] of collection.entries()) {
				if (diagnostics.length == 0) continue;
				let u = URI.parse(uri);
				let doc = workspace_default.getDocument(uri);
				let lines = doc && doc.attached ? doc.textDocument.lines : void 0;
				if (!lines && u.scheme === "file") try {
					const max = diagnostics.reduce((p, c) => {
						return Math.max(c.range.end.line, p);
					}, 0);
					lines = await readFileLines(u.fsPath, 0, max);
				} catch (e) {}
				for (let diagnostic of diagnostics) {
					if (diagnostic.severity && diagnostic.severity > level) continue;
					let { start, end } = diagnostic.range;
					let o = {
						file: u.fsPath,
						bufnr: doc ? doc.bufnr : void 0,
						lnum: start.line + 1,
						end_lnum: end.line + 1,
						col: Array.isArray(lines) ? byteIndex(lines[start.line] ?? "", start.character) + 1 : start.character + 1,
						end_col: Array.isArray(lines) ? byteIndex(lines[end.line] ?? "", end.character) + 1 : end.character + 1,
						code: diagnostic.code,
						source: diagnostic.source ?? collection.name,
						message: getMessageString(diagnostic.message),
						severity: getSeverityName(diagnostic.severity),
						level: diagnostic.severity ?? 0,
						location: Location.create(uri, diagnostic.range)
					};
					res.push(o);
				}
			}
			res.sort((a, b) => {
				if (a.level !== b.level) return a.level - b.level;
				if (a.file !== b.file) return a.file > b.file ? 1 : -1;
				else {
					if (a.lnum != b.lnum) return a.lnum - b.lnum;
					return a.col - b.col;
				}
			});
			return res;
		}
		async getBufferAndPosition() {
			let [bufnr, lnum, col] = await this.nvim.eval(`[bufnr("%"),line('.'),col('.')]`);
			let item = this.buffers.getItem(bufnr);
			if (!item) return;
			return [item, item.doc.getPosition(lnum, col)];
		}
		async getCurrentDiagnostics() {
			let res = await this.getBufferAndPosition();
			if (!res) return;
			return res[0].getDiagnosticsAtPosition(res[1]);
		}
		async echoCurrentMessage(target) {
			let res = await this.getBufferAndPosition();
			if (!res) return;
			let [item, position] = res;
			await item.echoMessage(false, position, target);
		}
		async jumpRelated() {
			let locations = await this.relatedInformation();
			if (locations.length == 1) await workspace_default.jumpTo(locations[0].uri, locations[0].range.start);
			else if (locations.length > 1) await workspace_default.showLocations(locations);
			else window_default.showWarningMessage("No related information found.");
		}
		async relatedInformation() {
			let diagnostic = (await this.getCurrentDiagnostics()).find((o) => o.relatedInformation != null);
			return diagnostic ? diagnostic.relatedInformation.map((o) => o.location) : [];
		}
		reset() {
			clearTimeout(this.messageTimer);
			this.buffers.reset();
			for (let collection of this.collections) collection.dispose();
			this.collections = [];
		}
		dispose() {
			clearTimeout(this.messageTimer);
			this.buffers.dispose();
			for (let collection of this.collections) collection.dispose();
			this.collections = [];
			disposeAll(this.disposables);
		}
		get nvim() {
			return workspace_default.nvim;
		}
		getCollectionByName(name) {
			return this.collections.find((o) => o.name == name);
		}
		getCollections(uri) {
			return this.collections.filter((c) => c.has(uri));
		}
		async toggleDiagnostic(enable) {
			this.enabled = enable == void 0 ? !this.enabled : enable != 0;
			await Promise.allSettled(this.buffers.items.map((buf) => {
				return buf.setState(this.enabled);
			}));
		}
		async toggleDiagnosticBuffer(bufnr, enable) {
			bufnr = bufnr ?? workspace_default.bufnr;
			let buf = this.buffers.getItem(bufnr);
			if (buf) {
				let isEnabled = enable == void 0 ? await buf.isEnabled() : enable == 0;
				await buf.doc.buffer.setVar("coc_diagnostic_disable", isEnabled ? 1 : 0);
				await buf.setState(!isEnabled);
			}
		}
		/**
		* Refresh diagnostics by uri or bufnr
		*/
		async refreshBuffer(uri) {
			let buf = this.buffers.getItem(uri);
			if (!buf) return false;
			await buf.reset(this.getDiagnostics(buf));
			return true;
		}
		/**
		* Force diagnostics refresh.
		*/
		async refresh(bufnr) {
			let items;
			if (!bufnr) items = this.buffers.items;
			else {
				let item = this.buffers.getItem(bufnr);
				items = item ? [item] : [];
			}
			for (let item of items) await this.refreshBuffer(item.uri);
		}
	};
	manager_default$2 = new DiagnosticManager();
}));
//#endregion
//#region node_modules/uuid/dist-node/rng.js
function rng() {
	return crypto.getRandomValues(rnds8);
}
var rnds8;
var init_rng = __esmMin((() => {
	rnds8 = new Uint8Array(16);
}));
//#endregion
//#region node_modules/uuid/dist-node/stringify.js
function unsafeStringify(arr, offset = 0) {
	return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
}
var byteToHex;
var init_stringify = __esmMin((() => {
	byteToHex = [];
	for (let i = 0; i < 256; ++i) byteToHex.push((i + 256).toString(16).slice(1));
}));
//#endregion
//#region node_modules/uuid/dist-node/v1.js
function v1(options, buf, offset) {
	let bytes;
	const isV6 = options?._v6 ?? false;
	if (options) {
		const optionsKeys = Object.keys(options);
		if (optionsKeys.length === 1 && optionsKeys[0] === "_v6") options = void 0;
	}
	if (options) bytes = v1Bytes(options.random ?? options.rng?.() ?? rng(), options.msecs, options.nsecs, options.clockseq, options.node, buf, offset);
	else {
		const now = Date.now();
		const rnds = rng();
		updateV1State(_state, now, rnds);
		bytes = v1Bytes(rnds, _state.msecs, _state.nsecs, isV6 ? void 0 : _state.clockseq, isV6 ? void 0 : _state.node, buf, offset);
	}
	return buf ?? unsafeStringify(bytes);
}
function updateV1State(state, now, rnds) {
	state.msecs ??= -Infinity;
	state.nsecs ??= 0;
	if (now === state.msecs) {
		state.nsecs++;
		if (state.nsecs >= 1e4) {
			state.node = void 0;
			state.nsecs = 0;
		}
	} else if (now > state.msecs) state.nsecs = 0;
	else if (now < state.msecs) state.node = void 0;
	if (!state.node) {
		state.node = rnds.slice(10, 16);
		state.node[0] |= 1;
		state.clockseq = (rnds[8] << 8 | rnds[9]) & 16383;
	}
	state.msecs = now;
	return state;
}
function v1Bytes(rnds, msecs, nsecs, clockseq, node, buf, offset = 0) {
	if (rnds.length < 16) throw new Error("Random bytes length must be >= 16");
	if (!buf) {
		buf = new Uint8Array(16);
		offset = 0;
	} else if (offset < 0 || offset + 16 > buf.length) throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
	msecs ??= Date.now();
	nsecs ??= 0;
	clockseq ??= (rnds[8] << 8 | rnds[9]) & 16383;
	node ??= rnds.slice(10, 16);
	msecs += 0xb1d069b5400;
	const tl = ((msecs & 268435455) * 1e4 + nsecs) % 4294967296;
	buf[offset++] = tl >>> 24 & 255;
	buf[offset++] = tl >>> 16 & 255;
	buf[offset++] = tl >>> 8 & 255;
	buf[offset++] = tl & 255;
	const tmh = msecs / 4294967296 * 1e4 & 268435455;
	buf[offset++] = tmh >>> 8 & 255;
	buf[offset++] = tmh & 255;
	buf[offset++] = tmh >>> 24 & 15 | 16;
	buf[offset++] = tmh >>> 16 & 255;
	buf[offset++] = clockseq >>> 8 | 128;
	buf[offset++] = clockseq & 255;
	for (let n = 0; n < 6; ++n) buf[offset++] = node[n];
	return buf;
}
var _state;
var init_v1 = __esmMin((() => {
	init_rng();
	init_stringify();
	_state = {};
}));
//#endregion
//#region node_modules/uuid/dist-node/v4.js
function v4(options, buf, offset) {
	if (!buf && !options && crypto.randomUUID) return crypto.randomUUID();
	return _v4(options, buf, offset);
}
function _v4(options, buf, offset) {
	options = options || {};
	const rnds = options.random ?? options.rng?.() ?? rng();
	if (rnds.length < 16) throw new Error("Random bytes length must be >= 16");
	rnds[6] = rnds[6] & 15 | 64;
	rnds[8] = rnds[8] & 63 | 128;
	if (buf) {
		offset = offset || 0;
		if (offset < 0 || offset + 16 > buf.length) throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);
		for (let i = 0; i < 16; ++i) buf[offset + i] = rnds[i];
		return buf;
	}
	return unsafeStringify(rnds);
}
var init_v4 = __esmMin((() => {
	init_rng();
	init_stringify();
}));
//#endregion
//#region node_modules/uuid/dist-node/index.js
var init_dist_node = __esmMin((() => {
	init_v1();
	init_v4();
}));
//#endregion
//#region src/provider/manager.ts
/**
* Add unique location
*/
function addLocation(arr, location) {
	if (Location.is(location)) {
		let { range, uri } = location;
		if (arr.find((o) => o.uri == uri && equals(o.range, range)) != null) return;
		arr.push(location);
	} else if (location && typeof location.targetUri === "string") {
		let { targetUri, targetSelectionRange, targetRange } = location;
		if (arr.find((o) => o.uri == targetUri && equals(o.range, targetSelectionRange)) != null) return;
		arr.push({
			uri: targetUri,
			range: targetSelectionRange,
			targetRange
		});
	}
}
var logger$45, Manager;
var init_manager$3 = __esmMin((() => {
	init_main$2();
	init_logger$2();
	init_errors();
	init_extensionRegistry();
	init_object();
	init_protocol();
	init_string$1();
	init_workspace$1();
	logger$45 = createLogger$1("provider-manager");
	Manager = class {
		providers = /* @__PURE__ */ new Set();
		hasProvider(document) {
			return this.getProvider(document) != null;
		}
		addProvider(item) {
			if (!item.provider.hasOwnProperty("__extensionName")) {
				Error.captureStackTrace(item);
				let name;
				Object.defineProperty(item.provider, "__extensionName", {
					get: () => {
						if (name) return name;
						name = parseExtensionName(toText(item["stack"]));
						return name;
					},
					enumerable: true
				});
			}
			this.providers.add(item);
			return import_main$1.Disposable.create(() => {
				this.providers.delete(item);
			});
		}
		handleResults(results, name, token) {
			let serverCancelError;
			results.forEach((res) => {
				if (res.status === "rejected") {
					if (!shouldIgnore(res.reason)) logger$45.error(`Provider error on ${name}:`, res.reason);
					if (token && !token.isCancellationRequested && isCancellationError(res.reason)) serverCancelError = res.reason;
				}
			});
			if (serverCancelError) throw serverCancelError;
		}
		getProvider(document) {
			let currScore = 0;
			let providerItem;
			for (let item of this.providers) {
				let { selector, priority } = item;
				let score = workspace_default.match(selector, document);
				if (score == 0) continue;
				if (typeof priority == "number" && priority > 0) score = score + priority;
				if (score < currScore) continue;
				currScore = score;
				providerItem = item;
			}
			return providerItem;
		}
		getProvideByExtension(document, extension) {
			for (let item of this.providers) if (item.provider["__extensionName"] === extension) return item;
			logger$45.warn(`User-specified formatter not found for ${document.languageId}:`, extension);
		}
		getFormatProvider(document) {
			const userChoice = workspace_default.getConfiguration("coc.preferences", document).get("formatterExtension");
			if (userChoice) {
				let provider = this.getProvideByExtension(document, userChoice);
				if (provider) return provider;
			}
			return this.getProvider(document);
		}
		getProviderById(id) {
			let item = Array.from(this.providers).find((o) => o.id == id);
			return item ? item.provider : null;
		}
		getProviders(document) {
			let items = Array.from(this.providers);
			items = items.filter((item) => workspace_default.match(item.selector, document) > 0);
			return items.sort((a, b) => workspace_default.match(b.selector, document) - workspace_default.match(a.selector, document));
		}
		addLocation(locations, location) {
			if (Array.isArray(location)) {
				for (let loc of location) if (Location.is(loc)) addLocation(locations, loc);
				else if (loc && typeof loc.targetUri === "string") addLocation(locations, loc);
			} else if (Location.is(location)) addLocation(locations, location);
		}
	};
}));
//#endregion
//#region src/provider/callHierarchyManager.ts
var CallHierarchyManager;
var init_callHierarchyManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	CallHierarchyManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async prepareCallHierarchy(document, position, token) {
			let item = this.getProvider(document);
			if (!item) return null;
			let { provider } = item;
			return await Promise.resolve(provider.prepareCallHierarchy(document, position, token));
		}
		async provideCallHierarchyOutgoingCalls(document, item, token) {
			let providerItem = this.getProvider(document);
			if (!providerItem) return null;
			let { provider } = providerItem;
			return await Promise.resolve(provider.provideCallHierarchyOutgoingCalls(item, token));
		}
		async provideCallHierarchyIncomingCalls(document, item, token) {
			let providerItem = this.getProvider(document);
			if (!providerItem) return null;
			let { provider } = providerItem;
			return await Promise.resolve(provider.provideCallHierarchyIncomingCalls(item, token));
		}
	};
}));
//#endregion
//#region src/provider/codeActionManager.ts
function codeActionContains(kinds, kind) {
	return kinds.some((k) => kind === k || kind.startsWith(k + "."));
}
function checkAction(only, action) {
	if (isFalsyOrEmpty(only)) return true;
	if (Command.is(action)) return false;
	return codeActionContains(only, action.kind);
}
var CodeActionManager;
var init_codeActionManager = __esmMin((() => {
	init_dist_node();
	init_main$2();
	init_array();
	init_is();
	init_lodash();
	init_manager$3();
	CodeActionManager = class extends Manager {
		register(selector, provider, clientId, codeActionKinds) {
			return this.addProvider({
				id: v4(),
				selector,
				provider,
				kinds: codeActionKinds,
				clientId
			});
		}
		async provideCodeActions(document, range, context, token) {
			let providers = this.getProviders(document);
			const only = isFalsyOrEmpty(context.only) ? void 0 : context.only;
			if (only) providers = providers.filter((p) => {
				if (Array.isArray(p.kinds) && !p.kinds.some((kind) => codeActionContains(only, kind))) return false;
				return true;
			});
			let res = [];
			const titles = [];
			let results = await Promise.allSettled(providers.map((item) => {
				let { provider, id } = item;
				let fn = async () => {
					let actions = await Promise.resolve(provider.provideCodeActions(document, range, context, token));
					let extensionName = provider["__extensionName"];
					if (isFalsyOrEmpty(actions)) return;
					for (let action of actions) {
						if (titles.includes(action.title) || !checkAction(only, action)) continue;
						if (Command.is(action)) {
							let codeAction = {
								title: action.title,
								command: action,
								providerId: id,
								extensionName
							};
							res.push(codeAction);
						} else res.push(Object.assign({ providerId: id }, action));
						titles.push(action.title);
					}
				};
				return fn();
			}));
			this.handleResults(results, "provideCodeActions");
			return res;
		}
		async resolveCodeAction(codeAction, token) {
			if (codeAction.edit != null || codeAction.providerId == null) return codeAction;
			let provider = this.getProviderById(codeAction.providerId);
			if (!provider || !func(provider.resolveCodeAction)) return codeAction;
			return await Promise.resolve(provider.resolveCodeAction(omit$2(codeAction, ["providerId"]), token)) ?? codeAction;
		}
	};
}));
//#endregion
//#region src/provider/codeLensManager.ts
var CodeLensManager$1;
var init_codeLensManager = __esmMin((() => {
	init_dist_node();
	init_lodash();
	init_manager$3();
	init_is();
	CodeLensManager$1 = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideCodeLenses(document, token) {
			let providers = this.getProviders(document);
			let codeLens = [];
			let results = await Promise.allSettled(providers.map((item) => {
				let { provider, id } = item;
				return Promise.resolve(provider.provideCodeLenses(document, token)).then((res) => {
					if (Array.isArray(res)) for (let item of res) codeLens.push(Object.assign({ source: id }, item));
				});
			}));
			this.handleResults(results, "provideCodeLenses");
			return codeLens;
		}
		async resolveCodeLens(codeLens, token) {
			if (isCommand(codeLens.command)) return codeLens;
			let provider = this.getProviderById(codeLens.source);
			if (!provider || typeof provider.resolveCodeLens != "function") return codeLens;
			let res = await Promise.resolve(provider.resolveCodeLens(omit$2(codeLens, ["source"]), token));
			Object.assign(codeLens, res);
			return codeLens;
		}
	};
}));
//#endregion
//#region src/provider/declarationManager.ts
var DeclarationManager;
var init_declarationManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	DeclarationManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideDeclaration(document, position, token) {
			const providers = this.getProviders(document);
			let locations = [];
			const results = await Promise.allSettled(providers.map((item) => {
				return Promise.resolve(item.provider.provideDeclaration(document, position, token)).then((location) => {
					this.addLocation(locations, location);
				});
			}));
			this.handleResults(results, "provideDeclaration");
			return locations;
		}
	};
}));
//#endregion
//#region src/provider/definitionManager.ts
var DefinitionManager;
var init_definitionManager = __esmMin((() => {
	init_dist_node();
	init_main$2();
	init_manager$3();
	DefinitionManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideDefinition(document, position, token) {
			const providers = this.getProviders(document);
			let locations = [];
			const results = await Promise.allSettled(providers.map((item) => {
				return Promise.resolve(item.provider.provideDefinition(document, position, token)).then((location) => {
					this.addLocation(locations, location);
				});
			}));
			this.handleResults(results, "provideDefinition");
			return locations;
		}
		async provideDefinitionLinks(document, position, token) {
			const providers = this.getProviders(document);
			let locations = [];
			const results = await Promise.allSettled(providers.map((item) => {
				return Promise.resolve(item.provider.provideDefinition(document, position, token)).then((location) => {
					if (Array.isArray(location)) location.forEach((loc) => {
						if (LocationLink.is(loc)) locations.push(loc);
					});
				});
			}));
			this.handleResults(results, "provideDefinition");
			return locations;
		}
	};
}));
//#endregion
//#region src/provider/documentColorManager.ts
var DocumentColorManager;
var init_documentColorManager = __esmMin((() => {
	init_dist_node();
	init_object();
	init_manager$3();
	DocumentColorManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideDocumentColors(document, token) {
			let items = this.getProviders(document);
			let colors = [];
			const results = await Promise.allSettled(items.map((item) => {
				let { id } = item;
				return Promise.resolve(item.provider.provideDocumentColors(document, token)).then((arr) => {
					let noCheck = colors.length == 0;
					if (Array.isArray(arr)) {
						for (let color of arr) if (noCheck || !colors.some((o) => equals(o.range, color.range))) colors.push(Object.assign({ source: id }, color));
					}
				});
			}));
			this.handleResults(results, "provideDocumentColors");
			return colors;
		}
		async provideColorPresentations(colorInformation, document, token) {
			let providers = this.getProviders(document);
			let { range, color } = colorInformation;
			for (let item of providers) {
				let res = await Promise.resolve(item.provider.provideColorPresentations(color, {
					document,
					range
				}, token));
				if (res) return res;
			}
			return null;
		}
	};
}));
//#endregion
//#region src/provider/documentHighlightManager.ts
var DocumentHighlightManager;
var init_documentHighlightManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	DocumentHighlightManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideDocumentHighlights(document, position, token) {
			let items = this.getProviders(document);
			let res = null;
			for (const item of items) try {
				res = await Promise.resolve(item.provider.provideDocumentHighlights(document, position, token));
				if (res != null) break;
			} catch (e) {
				this.handleResults([{
					status: "rejected",
					reason: e
				}], "provideDocumentHighlights");
			}
			return res;
		}
	};
}));
//#endregion
//#region src/provider/documentLinkManager.ts
function rangeToString(range) {
	return `${range.start.line},${range.start.character},${range.end.line},${range.end.character}`;
}
var DocumentLinkManager;
var init_documentLinkManager = __esmMin((() => {
	init_dist_node();
	init_lodash();
	init_manager$3();
	DocumentLinkManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideDocumentLinks(document, token) {
			let items = this.getProviders(document);
			if (items.length == 0) return null;
			const links = [];
			const seenRanges = /* @__PURE__ */ new Set();
			const results = await Promise.allSettled(items.map(async (item) => {
				let { id, provider } = item;
				const arr = await provider.provideDocumentLinks(document, token);
				if (Array.isArray(arr)) {
					let check = links.length > 0;
					arr.forEach((link) => {
						if (check) {
							const rangeString = rangeToString(link.range);
							if (!seenRanges.has(rangeString)) {
								seenRanges.add(rangeString);
								links.push(Object.assign({ source: id }, link));
							}
						} else {
							if (items.length > 1) seenRanges.add(rangeToString(link.range));
							links.push(Object.assign({ source: id }, link));
						}
					});
				}
			}));
			this.handleResults(results, "provideDocumentLinks");
			return links;
		}
		async resolveDocumentLink(link, token) {
			let provider = this.getProviderById(link.source);
			if (typeof provider.resolveDocumentLink === "function") {
				let resolved = await Promise.resolve(provider.resolveDocumentLink(omit$2(link, ["source"]), token));
				if (resolved) Object.assign(link, resolved);
			}
			return link;
		}
	};
}));
//#endregion
//#region src/provider/documentSymbolManager.ts
function asDocumentSymbolTree(infos) {
	infos = infos.slice().sort((a, b) => {
		return compareRangesUsingStarts(a.location.range, b.location.range);
	});
	const res = [];
	const parentStack = [];
	for (const info of infos) {
		const element = {
			name: toText(info.name),
			kind: info.kind,
			tags: toArray(info.tags),
			detail: "",
			range: info.location.range,
			selectionRange: info.location.range
		};
		if (info.deprecated) element.tags.push(SymbolTag.Deprecated);
		while (true) {
			if (parentStack.length === 0) {
				parentStack.push(element);
				res.push(element);
				break;
			}
			const parent = parentStack[parentStack.length - 1];
			if (rangeInRange(element.range, parent.range) && !equalsRange(parent.range, element.range)) {
				parent.children = toArray(parent.children);
				parent.children.push(element);
				parentStack.push(element);
				break;
			}
			parentStack.pop();
		}
	}
	return res;
}
var DocumentSymbolManager;
var init_documentSymbolManager = __esmMin((() => {
	init_dist_node();
	init_main$2();
	init_array();
	init_position();
	init_string$1();
	init_manager$3();
	DocumentSymbolManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		getMetaData(document) {
			let item = this.getProvider(document);
			if (!item) return null;
			return item.provider.meta ?? {};
		}
		async provideDocumentSymbols(document, token) {
			let item = this.getProvider(document);
			if (!item) return null;
			let symbols = [];
			let results = await Promise.allSettled([item].map((item) => {
				return Promise.resolve(item.provider.provideDocumentSymbols(document, token)).then((result) => {
					if (!token.isCancellationRequested && !isFalsyOrEmpty(result)) if (DocumentSymbol.is(result[0])) symbols = result;
					else symbols = asDocumentSymbolTree(result);
				});
			}));
			this.handleResults(results, "provideDocumentSymbols");
			return symbols;
		}
	};
}));
//#endregion
//#region src/provider/foldingRangeManager.ts
function getParent(line, sortedRanges) {
	for (let r of sortedRanges) if (line >= r.startLine) if (line <= r.endLine) return r;
	else continue;
	else break;
}
var FoldingRangeManager;
var init_foldingRangeManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	FoldingRangeManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are asked in
		* parallel and the results are merged.
		* If multiple folding ranges start at the same position, only the range of the first registered provider is used.
		* If a folding range overlaps with an other range that has a smaller position, it is also ignored.
		*/
		async provideFoldingRanges(document, context, token) {
			let items = this.getProviders(document);
			let ranges = [];
			let results = await Promise.allSettled(items.map((item) => {
				return Promise.resolve(item.provider.provideFoldingRanges(document, context, token)).then((res) => {
					if (Array.isArray(res) && res.length > 0) {
						if (ranges.length == 0) ranges.push(...res);
						else for (let r of res) {
							let sp = getParent(r.startLine, ranges);
							if (sp?.startLine === r.startLine) continue;
							if (sp === getParent(r.endLine, ranges)) ranges.push(r);
						}
						ranges.sort((a, b) => a.startLine - b.startLine);
					}
				});
			}));
			this.handleResults(results, "provideFoldingRanges");
			return ranges;
		}
	};
}));
//#endregion
//#region src/provider/formatManager.ts
var FormatManager;
var init_formatManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	FormatManager = class extends Manager {
		register(selector, provider, priority) {
			return this.addProvider({
				id: v4(),
				selector,
				priority,
				provider
			});
		}
		hasFormatProvider(document) {
			return this.getFormatProvider(document) != null;
		}
		async provideDocumentFormattingEdits(document, options, token) {
			let item = this.getFormatProvider(document);
			if (!item) return null;
			let { provider } = item;
			let res = await Promise.resolve(provider.provideDocumentFormattingEdits(document, options, token));
			if (Array.isArray(res)) Object.defineProperty(res, "__extensionName", { get: () => item.provider["__extensionName"] });
			return res;
		}
	};
}));
//#endregion
//#region src/provider/formatRangeManager.ts
var FormatRangeManager;
var init_formatRangeManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	FormatRangeManager = class extends Manager {
		register(selector, provider, priority) {
			return this.addProvider({
				id: v4(),
				selector,
				provider,
				priority
			});
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are sorted
		* by their {@link languages.match score} and the best-matching provider is used. Failure
		* of the selected provider will cause a failure of the whole operation.
		*/
		async provideDocumentRangeFormattingEdits(document, range, options, token) {
			let item = this.getFormatProvider(document);
			if (!item) return null;
			let { provider } = item;
			let res = await Promise.resolve(provider.provideDocumentRangeFormattingEdits(document, range, options, token));
			if (Array.isArray(res)) Object.defineProperty(res, "__extensionName", { get: () => item.provider["__extensionName"] });
			return res;
		}
	};
}));
//#endregion
//#region src/provider/hoverManager.ts
var HoverManager;
var init_hoverManager = __esmMin((() => {
	init_dist_node();
	init_is();
	init_object();
	init_manager$3();
	HoverManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideHover(document, position, token) {
			let items = this.getProviders(document);
			let hovers = [];
			let results = await Promise.allSettled(items.map((item) => {
				return Promise.resolve(item.provider.provideHover(document, position, token)).then((hover) => {
					if (!isHover(hover)) return;
					if (hovers.findIndex((o) => equals(o.contents, hover.contents)) == -1) hovers.push(hover);
				});
			}));
			this.handleResults(results, "provideHover");
			return hovers;
		}
	};
}));
//#endregion
//#region src/provider/implementationManager.ts
var ImplementationManager;
var init_implementationManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	ImplementationManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideImplementations(document, position, token) {
			const providers = this.getProviders(document);
			let locations = [];
			const results = await Promise.allSettled(providers.map((item) => {
				return Promise.resolve(item.provider.provideImplementation(document, position, token)).then((location) => {
					this.addLocation(locations, location);
				});
			}));
			this.handleResults(results, "provideImplementations");
			return locations;
		}
	};
}));
//#endregion
//#region src/provider/inlayHintManager.ts
function sameHint(one, other) {
	if (comparePosition(one.position, other.position) !== 0) return false;
	return getLabel(one) === getLabel(other);
}
function isInlayHint(obj) {
	if (!obj || !Position.is(obj.position) || obj.label == null) return false;
	if (typeof obj.label !== "string") return Array.isArray(obj.label) && obj.label.every((p) => typeof p.value === "string");
	return true;
}
function isValidInlayHint(hint, range) {
	if (hint.label.length === 0 || Array.isArray(hint.label) && hint.label.every((part) => part.value.length === 0)) {
		logger$44.warn("INVALID inlay hint, empty label", hint);
		return false;
	}
	if (!isInlayHint(hint)) {
		logger$44.warn("INVALID inlay hint", hint);
		return false;
	}
	if (range && positionInRange(hint.position, range) !== 0) return false;
	return true;
}
function getLabel(hint) {
	if (typeof hint.label === "string") return hint.label;
	return hint.label.map((o) => o.value).join("");
}
var logger$44, InlayHintManger;
var init_inlayHintManager = __esmMin((() => {
	init_dist_node();
	init_main$2();
	init_logger$2();
	init_position();
	init_manager$3();
	logger$44 = createLogger$1("inlayHintManger");
	InlayHintManger = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are asked in
		* parallel and the results are merged. A failing provider (rejected promise or exception) will
		* not cause a failure of the whole operation.
		*/
		async provideInlayHints(document, range, token) {
			let items = this.getProviders(document);
			let inlayHints = [];
			let results = await Promise.allSettled(items.map(async (item) => {
				let { id, provider } = item;
				let hints = await Promise.resolve(provider.provideInlayHints(document, range, token));
				if (!Array.isArray(hints) || token.isCancellationRequested) return;
				let noCheck = inlayHints.length == 0;
				for (let hint of hints) {
					if (!isValidInlayHint(hint, range)) continue;
					if (!noCheck && inlayHints.findIndex((o) => sameHint(o, hint)) != -1) continue;
					inlayHints.push({
						providerId: id,
						...hint
					});
				}
			}));
			this.handleResults(results, "provideInlayHints", token);
			return inlayHints;
		}
		async resolveInlayHint(hint, token) {
			let provider = this.getProviderById(hint.providerId);
			if (!provider || typeof provider.resolveInlayHint !== "function" || hint.resolved === true) return hint;
			let res = await Promise.resolve(provider.resolveInlayHint(hint, token));
			if (token.isCancellationRequested) return hint;
			return Object.assign(hint, res, { resolved: true });
		}
	};
}));
//#endregion
//#region src/provider/inlineCompletionItemManager.ts
var InlineCompletionItemManager;
var init_inlineCompletionItemManager = __esmMin((() => {
	init_dist_node();
	init_array();
	init_errors();
	init_lodash();
	init_manager$3();
	InlineCompletionItemManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		get isEmpty() {
			return this.providers.size === 0;
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are asked in
		* parallel and the results are merged. A failing provider (rejected promise or exception) will
		* not cause a failure of the whole operation.
		*/
		async provideInlineCompletionItems(document, position, context, token) {
			let providers = [];
			if (context.provider) {
				let item = this.getProvideByExtension(document, context.provider);
				if (item) providers = [item];
			} else providers = this.getProviders(document);
			const items = [];
			const promise = Promise.allSettled(providers.map((item) => {
				let provider = item.provider;
				return Promise.resolve(provider.provideInlineCompletionItems(document, position, omit$2(context, ["provider"]), token)).then((result) => {
					let list = Array.isArray(result) ? result : toArray(result?.items);
					for (let item of list) {
						Object.defineProperty(item, "provider", {
							get: () => provider["__extensionName"],
							enumerable: false
						});
						items.push(item);
					}
				});
			}));
			let disposable;
			await Promise.race([new Promise((resolve) => {
				disposable = token.onCancellationRequested(() => {
					resolve(void 0);
				});
			}), promise.then((results) => {
				if (!token.isCancellationRequested) this.handleResults(results, "provideInlineCompletionItems");
			})]).catch(onUnexpectedError);
			if (disposable) disposable.dispose();
			return items;
		}
	};
}));
//#endregion
//#region src/provider/inlineValueManager.ts
var InlineValueManager;
var init_inlineValueManager = __esmMin((() => {
	init_dist_node();
	init_object();
	init_manager$3();
	InlineValueManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are asked in
		* parallel and the results are merged. A failing provider (rejected promise or exception) will
		* not cause a failure of the whole operation.
		*/
		async provideInlineValues(document, viewPort, context, token) {
			const items = this.getProviders(document);
			const values = [];
			const results = await Promise.allSettled(items.map((item) => {
				return Promise.resolve(item.provider.provideInlineValues(document, viewPort, context, token)).then((arr) => {
					if (!Array.isArray(arr)) return;
					let noCheck = values.length === 0;
					for (let value of arr) if (noCheck || values.every((o) => !equals(o, value))) values.push(value);
				});
			}));
			this.handleResults(results, "provideInlineValues");
			return values;
		}
	};
}));
//#endregion
//#region src/provider/linkedEditingRangeManager.ts
var LinkedEditingRangeManager;
var init_linkedEditingRangeManager = __esmMin((() => {
	init_dist_node();
	init_logger$2();
	init_manager$3();
	createLogger$1("linkedEditingManager");
	LinkedEditingRangeManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are sorted
		* by their {@link workspace.match score} and the best-matching provider that has a result is used. Failure
		* of the selected provider will cause a failure of the whole operation.
		*/
		async provideLinkedEditingRanges(document, position, token) {
			let items = this.getProviders(document);
			for (let item of items) {
				let res = await Promise.resolve(item.provider.provideLinkedEditingRanges(document, position, token));
				if (res != null) return res;
			}
			return null;
		}
	};
}));
//#endregion
//#region src/provider/onTypeFormatManager.ts
var OnTypeFormatManager;
var init_onTypeFormatManager = __esmMin((() => {
	init_dist_node();
	init_workspace$1();
	init_manager$3();
	OnTypeFormatManager = class extends Manager {
		register(selector, provider, triggerCharacters) {
			return this.addProvider({
				id: v4(),
				selector,
				provider,
				triggerCharacters: triggerCharacters ?? []
			});
		}
		couldTrigger(document, triggerCharacter) {
			for (let o of this.providers) {
				let { triggerCharacters, selector } = o;
				if (workspace_default.match(selector, document) > 0 && triggerCharacters.includes(triggerCharacter)) return o.provider;
			}
			return null;
		}
		async onCharacterType(character, document, position, token) {
			let item = this.getProviders(document).find((o) => o.triggerCharacters.includes(character));
			if (!item) return null;
			let formatOpts = await workspace_default.getFormatOptions(document.uri);
			return await Promise.resolve(item.provider.provideOnTypeFormattingEdits(document, position, character, formatOpts, token));
		}
	};
}));
//#endregion
//#region src/provider/referenceManager.ts
var ReferenceManager;
var init_referenceManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	ReferenceManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideReferences(document, position, context, token) {
			const providers = this.getProviders(document);
			let locations = [];
			const results = await Promise.allSettled(providers.map((item) => {
				return Promise.resolve(item.provider.provideReferences(document, position, context, token)).then((location) => {
					this.addLocation(locations, location);
				});
			}));
			this.handleResults(results, "provideReferences");
			return locations;
		}
	};
}));
//#endregion
//#region src/provider/renameManager.ts
var RenameManager;
var init_renameManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	RenameManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are sorted
		* by their {@link workspace.match score} and asked in sequence. The first provider producing a result
		* defines the result of the whole operation.
		*/
		async provideRenameEdits(document, position, newName, token) {
			let items = this.getProviders(document);
			let edit = null;
			for (const item of items) {
				try {
					edit = await Promise.resolve(item.provider.provideRenameEdits(document, position, newName, token));
				} catch (e) {
					this.handleResults([{
						status: "rejected",
						reason: e
					}], "provideRenameEdits");
				}
				if (edit != null) break;
			}
			return edit;
		}
		async prepareRename(document, position, token) {
			let items = this.getProviders(document);
			items = items.filter((o) => typeof o.provider.prepareRename === "function");
			if (items.length === 0) return null;
			for (const item of items) {
				let res = await Promise.resolve(item.provider.prepareRename(document, position, token));
				if (res != null) return res;
			}
			return false;
		}
	};
}));
//#endregion
//#region src/provider/selectionRangeManager.ts
var SelectionRangeManager;
var init_selectionRangeManager = __esmMin((() => {
	init_dist_node();
	init_object();
	init_position();
	init_manager$3();
	SelectionRangeManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are asked in
		* parallel and the results are merged. A failing provider (rejected promise or exception) will
		* not cause a failure of the whole operation.
		*/
		async provideSelectionRanges(document, positions, token) {
			let items = this.getProviders(document);
			if (items.length === 0) return null;
			let selectionRangeResult = [];
			let results = await Promise.allSettled(items.map((item) => {
				return Promise.resolve(item.provider.provideSelectionRanges(document, positions, token)).then((ranges) => {
					if (Array.isArray(ranges) && ranges.length > 0) selectionRangeResult.push(ranges);
				});
			}));
			this.handleResults(results, "provideSelectionRanges");
			if (selectionRangeResult.length === 0) return null;
			let selectionRanges = selectionRangeResult[0];
			if (selectionRangeResult.length > 1) for (let i = 1; i <= selectionRangeResult.length - 1; i++) {
				let start = selectionRanges[0].range;
				let end = selectionRanges[selectionRanges.length - 1].range;
				let ranges = selectionRangeResult[i];
				let len = ranges.length;
				if (rangeInRange(end, ranges[0].range) && !equals(end, ranges[0].range)) selectionRanges.push(...ranges);
				else if (rangeInRange(ranges[len - 1].range, start) && !equals(ranges[len - 1].range, start)) selectionRanges.unshift(...ranges);
			}
			for (let i = 0; i < selectionRanges.length - 1; i++) {
				let r = selectionRanges[i];
				r.parent = selectionRanges[i + 1];
			}
			return selectionRanges;
		}
	};
}));
//#endregion
//#region src/provider/semanticTokensManager.ts
var SemanticTokensManager;
var init_semanticTokensManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	SemanticTokensManager = class extends Manager {
		register(selector, provider, legend) {
			return this.addProvider({
				id: v4(),
				selector,
				provider,
				legend
			});
		}
		getLegend(document) {
			const item = this.getProvider(document);
			if (!item) return;
			return item.legend;
		}
		hasSemanticTokensEdits(document) {
			let provider = this.getProvider(document)?.provider;
			if (!provider) return false;
			return typeof provider.provideDocumentSemanticTokensEdits === "function";
		}
		async provideDocumentSemanticTokens(document, token) {
			let provider = this.getProvider(document)?.provider;
			if (!provider || typeof provider.provideDocumentSemanticTokens !== "function") return null;
			return await Promise.resolve(provider.provideDocumentSemanticTokens(document, token));
		}
		async provideDocumentSemanticTokensEdits(document, previousResultId, token) {
			let item = this.getProvider(document);
			if (!item || typeof item.provider.provideDocumentSemanticTokensEdits !== "function") return null;
			return await Promise.resolve(item.provider.provideDocumentSemanticTokensEdits(document, previousResultId, token));
		}
	};
}));
//#endregion
//#region src/provider/semanticTokensRangeManager.ts
var SemanticTokensRangeManager;
var init_semanticTokensRangeManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	SemanticTokensRangeManager = class extends Manager {
		register(selector, provider, legend) {
			return this.addProvider({
				id: v4(),
				selector,
				legend,
				provider
			});
		}
		getLegend(document) {
			const item = this.getProvider(document);
			if (!item) return;
			return item.legend;
		}
		async provideDocumentRangeSemanticTokens(document, range, token) {
			let item = this.getProvider(document);
			if (!item) return null;
			let { provider } = item;
			return await Promise.resolve(provider.provideDocumentRangeSemanticTokens(document, range, token));
		}
	};
}));
//#endregion
//#region src/provider/signatureManager.ts
var SignatureManager;
var init_signatureManager = __esmMin((() => {
	init_dist_node();
	init_array();
	init_manager$3();
	SignatureManager = class extends Manager {
		register(selector, provider, triggerCharacters) {
			triggerCharacters = isFalsyOrEmpty(triggerCharacters) ? [] : triggerCharacters;
			let characters = triggerCharacters.reduce((p, c) => p.concat(c.length == 1 ? [c] : c.split(/\s*/g)), []);
			return this.addProvider({
				id: v4(),
				selector,
				provider,
				triggerCharacters: characters
			});
		}
		shouldTrigger(document, triggerCharacter) {
			let items = this.getProviders(document);
			if (items.length === 0) return false;
			for (let item of items) if (item.triggerCharacters.includes(triggerCharacter)) return true;
			return false;
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are sorted
		* by their {@link languages.match score} and called sequentially until a provider returns a
		* valid result.
		*/
		async provideSignatureHelp(document, position, token, context) {
			let items = this.getProviders(document);
			for (const item of items) {
				let res = await Promise.resolve(item.provider.provideSignatureHelp(document, position, token, context));
				if (res && res.signatures && res.signatures.length > 0) return res;
			}
			return null;
		}
	};
}));
//#endregion
//#region src/provider/typeDefinitionManager.ts
var TypeDefinitionManager;
var init_typeDefinitionManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	TypeDefinitionManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		async provideTypeDefinition(document, position, token) {
			const providers = this.getProviders(document);
			let locations = [];
			const results = await Promise.allSettled(providers.map((item) => {
				return Promise.resolve(item.provider.provideTypeDefinition(document, position, token)).then((location) => {
					this.addLocation(locations, location);
				});
			}));
			this.handleResults(results, "provideTypeDefinition");
			return locations;
		}
	};
}));
//#endregion
//#region src/provider/typeHierarchyManager.ts
var excludeKeys, TypeHierarchyManager;
var init_typeHierarchyManager = __esmMin((() => {
	init_dist_node();
	init_lodash();
	init_manager$3();
	excludeKeys = ["source"];
	TypeHierarchyManager = class extends Manager {
		register(selector, provider) {
			return this.addProvider({
				id: v4(),
				selector,
				provider
			});
		}
		/**
		* Multiple providers can be registered for a language. In that case providers are asked in
		* parallel and the results are merged. A failing provider (rejected promise or exception) will
		* not cause a failure of the whole operation.
		*/
		async prepareTypeHierarchy(document, position, token) {
			const items = this.getProviders(document);
			let hierarchyItems = [];
			let results = await Promise.allSettled(items.map((item) => {
				let { provider, id } = item;
				return (async () => {
					let arr = await Promise.resolve(provider.prepareTypeHierarchy(document, position, token));
					if (Array.isArray(arr)) {
						let noCheck = hierarchyItems.length === 0;
						arr.forEach((item) => {
							if (noCheck || hierarchyItems.every((o) => o.name !== item.name)) hierarchyItems.push(Object.assign({ source: id }, item));
						});
					}
				})();
			}));
			this.handleResults(results, "prepareTypeHierarchy");
			return hierarchyItems;
		}
		async provideTypeHierarchySupertypes(item, token) {
			let { source } = item;
			const provider = this.getProviderById(source);
			if (!provider) return [];
			return await Promise.resolve(provider.provideTypeHierarchySupertypes(omit$2(item, excludeKeys), token)).then((arr) => {
				if (Array.isArray(arr)) return arr.map((item) => {
					return Object.assign({ source }, item);
				});
				return [];
			});
		}
		async provideTypeHierarchySubtypes(item, token) {
			let { source } = item;
			const provider = this.getProviderById(source);
			if (!provider) return [];
			return await Promise.resolve(provider.provideTypeHierarchySubtypes(omit$2(item, excludeKeys), token)).then((arr) => {
				if (Array.isArray(arr)) return arr.map((item) => {
					return Object.assign({ source }, item);
				});
				return [];
			});
		}
	};
}));
//#endregion
//#region src/provider/workspaceSymbolsManager.ts
var WorkspaceSymbolManager;
var init_workspaceSymbolsManager = __esmMin((() => {
	init_dist_node();
	init_manager$3();
	WorkspaceSymbolManager = class extends Manager {
		register(provider) {
			return this.addProvider({
				id: v4(),
				selector: [{ language: "*" }],
				provider
			});
		}
		async provideWorkspaceSymbols(query, token) {
			let entries = Array.from(this.providers);
			let infos = [];
			let results = await Promise.allSettled(entries.map((o) => {
				let { id, provider } = o;
				return Promise.resolve(provider.provideWorkspaceSymbols(query, token)).then((list) => {
					if (Array.isArray(list)) infos.push(...list.map((item) => Object.assign({ source: id }, item)));
				});
			}));
			this.handleResults(results, "provideWorkspaceSymbols");
			return infos;
		}
		async resolveWorkspaceSymbol(symbolInfo, token) {
			let provider = this.getProviderById(symbolInfo.source);
			if (!provider || typeof provider.resolveWorkspaceSymbol !== "function") return symbolInfo;
			return provider.resolveWorkspaceSymbol(symbolInfo, token);
		}
		hasProvider() {
			return this.providers.size > 0;
		}
	};
}));
//#endregion
//#region node_modules/mimic-response/index.js
function mimicResponse(fromStream, toStream) {
	if (toStream._readableState.autoDestroy) throw new Error("The second stream must have the `autoDestroy` option set to `false`");
	const fromProperties = new Set([...Object.keys(fromStream), ...knownProperties]);
	const properties = {};
	for (const property of fromProperties) {
		if (property in toStream) continue;
		properties[property] = {
			get() {
				const value = fromStream[property];
				return typeof value === "function" ? value.bind(fromStream) : value;
			},
			set(value) {
				fromStream[property] = value;
			},
			enumerable: true,
			configurable: false
		};
	}
	Object.defineProperties(toStream, properties);
	fromStream.once("aborted", () => {
		toStream.destroy();
		toStream.emit("aborted");
	});
	fromStream.once("close", () => {
		if (fromStream.complete) if (toStream.readable) toStream.once("end", () => {
			toStream.emit("close");
		});
		else toStream.emit("close");
		else toStream.emit("close");
	});
	return toStream;
}
var knownProperties;
var init_mimic_response = __esmMin((() => {
	knownProperties = [
		"aborted",
		"complete",
		"headers",
		"httpVersion",
		"httpVersionMinor",
		"httpVersionMajor",
		"method",
		"rawHeaders",
		"rawTrailers",
		"setTimeout",
		"socket",
		"statusCode",
		"statusMessage",
		"trailers",
		"url"
	];
}));
//#endregion
//#region node_modules/decompress-response/index.js
function decompressResponse(response) {
	const contentEncoding = (response.headers["content-encoding"] || "").toLowerCase();
	const supportedEncodings = [
		"gzip",
		"deflate",
		"br"
	];
	if (supportsZstd) supportedEncodings.push("zstd");
	if (!supportedEncodings.includes(contentEncoding)) return response;
	let isEmpty = true;
	const headers = { ...response.headers };
	const finalStream = new node_stream.PassThrough({ autoDestroy: false });
	finalStream.once("error", () => {
		response.destroy();
	});
	function handleContentEncoding(data) {
		let decompressStream;
		if (contentEncoding === "zstd") decompressStream = node_zlib.default.createZstdDecompress();
		else if (contentEncoding === "br") decompressStream = node_zlib.default.createBrotliDecompress();
		else if (contentEncoding === "deflate" && data.length > 0 && (data[0] & 8) === 0) decompressStream = node_zlib.default.createInflateRaw();
		else decompressStream = node_zlib.default.createUnzip();
		decompressStream.once("error", (error) => {
			if (isEmpty && !response.readable) {
				finalStream.end();
				return;
			}
			finalStream.destroy(error);
		});
		checker.pipe(decompressStream).pipe(finalStream);
	}
	const checker = new node_stream.Transform({
		transform(data, _encoding, callback) {
			if (isEmpty === false) {
				callback(null, data);
				return;
			}
			isEmpty = false;
			handleContentEncoding(data);
			callback(null, data);
		},
		flush(callback) {
			if (isEmpty) finalStream.end();
			callback();
		}
	});
	delete headers["content-encoding"];
	delete headers["content-length"];
	finalStream.headers = headers;
	mimicResponse(response, finalStream);
	response.pipe(checker);
	return finalStream;
}
var supportsZstd;
var init_decompress_response = __esmMin((() => {
	init_mimic_response();
	supportsZstd = typeof node_zlib.default.createZstdDecompress === "function";
}));
//#endregion
//#region node_modules/ms/index.js
var require_ms = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/**
	* Helpers.
	*/
	var s = 1e3;
	var m = s * 60;
	var h = m * 60;
	var d = h * 24;
	var w = d * 7;
	var y = d * 365.25;
	/**
	* Parse or format the given `val`.
	*
	* Options:
	*
	*  - `long` verbose formatting [false]
	*
	* @param {String|Number} val
	* @param {Object} [options]
	* @throws {Error} throw an error if val is not a non-empty string or a number
	* @return {String|Number}
	* @api public
	*/
	module.exports = function(val, options) {
		options = options || {};
		var type = typeof val;
		if (type === "string" && val.length > 0) return parse(val);
		else if (type === "number" && isFinite(val)) return options.long ? fmtLong(val) : fmtShort(val);
		throw new Error("val is not a non-empty string or a valid number. val=" + JSON.stringify(val));
	};
	/**
	* Parse the given `str` and return milliseconds.
	*
	* @param {String} str
	* @return {Number}
	* @api private
	*/
	function parse(str) {
		str = String(str);
		if (str.length > 100) return;
		var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(str);
		if (!match) return;
		var n = parseFloat(match[1]);
		switch ((match[2] || "ms").toLowerCase()) {
			case "years":
			case "year":
			case "yrs":
			case "yr":
			case "y": return n * y;
			case "weeks":
			case "week":
			case "w": return n * w;
			case "days":
			case "day":
			case "d": return n * d;
			case "hours":
			case "hour":
			case "hrs":
			case "hr":
			case "h": return n * h;
			case "minutes":
			case "minute":
			case "mins":
			case "min":
			case "m": return n * m;
			case "seconds":
			case "second":
			case "secs":
			case "sec":
			case "s": return n * s;
			case "milliseconds":
			case "millisecond":
			case "msecs":
			case "msec":
			case "ms": return n;
			default: return;
		}
	}
	/**
	* Short format for `ms`.
	*
	* @param {Number} ms
	* @return {String}
	* @api private
	*/
	function fmtShort(ms) {
		var msAbs = Math.abs(ms);
		if (msAbs >= d) return Math.round(ms / d) + "d";
		if (msAbs >= h) return Math.round(ms / h) + "h";
		if (msAbs >= m) return Math.round(ms / m) + "m";
		if (msAbs >= s) return Math.round(ms / s) + "s";
		return ms + "ms";
	}
	/**
	* Long format for `ms`.
	*
	* @param {Number} ms
	* @return {String}
	* @api private
	*/
	function fmtLong(ms) {
		var msAbs = Math.abs(ms);
		if (msAbs >= d) return plural(ms, msAbs, d, "day");
		if (msAbs >= h) return plural(ms, msAbs, h, "hour");
		if (msAbs >= m) return plural(ms, msAbs, m, "minute");
		if (msAbs >= s) return plural(ms, msAbs, s, "second");
		return ms + " ms";
	}
	/**
	* Pluralization helper.
	*/
	function plural(ms, msAbs, n, name) {
		var isPlural = msAbs >= n * 1.5;
		return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
	}
}));
//#endregion
//#region node_modules/debug/src/common.js
var require_common = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/**
	* This is the common logic for both the Node.js and web browser
	* implementations of `debug()`.
	*/
	function setup(env) {
		createDebug.debug = createDebug;
		createDebug.default = createDebug;
		createDebug.coerce = coerce;
		createDebug.disable = disable;
		createDebug.enable = enable;
		createDebug.enabled = enabled;
		createDebug.humanize = require_ms();
		createDebug.destroy = destroy;
		Object.keys(env).forEach((key) => {
			createDebug[key] = env[key];
		});
		/**
		* The currently active debug mode names, and names to skip.
		*/
		createDebug.names = [];
		createDebug.skips = [];
		/**
		* Map of special "%n" handling functions, for the debug "format" argument.
		*
		* Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
		*/
		createDebug.formatters = {};
		/**
		* Selects a color for a debug namespace
		* @param {String} namespace The namespace string for the debug instance to be colored
		* @return {Number|String} An ANSI color code for the given namespace
		* @api private
		*/
		function selectColor(namespace) {
			let hash = 0;
			for (let i = 0; i < namespace.length; i++) {
				hash = (hash << 5) - hash + namespace.charCodeAt(i);
				hash |= 0;
			}
			return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
		}
		createDebug.selectColor = selectColor;
		/**
		* Create a debugger with the given `namespace`.
		*
		* @param {String} namespace
		* @return {Function}
		* @api public
		*/
		function createDebug(namespace) {
			let prevTime;
			let enableOverride = null;
			let namespacesCache;
			let enabledCache;
			function debug(...args) {
				if (!debug.enabled) return;
				const self = debug;
				const curr = Number(/* @__PURE__ */ new Date());
				self.diff = curr - (prevTime || curr);
				self.prev = prevTime;
				self.curr = curr;
				prevTime = curr;
				args[0] = createDebug.coerce(args[0]);
				if (typeof args[0] !== "string") args.unshift("%O");
				let index = 0;
				args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
					if (match === "%%") return "%";
					index++;
					const formatter = createDebug.formatters[format];
					if (typeof formatter === "function") {
						const val = args[index];
						match = formatter.call(self, val);
						args.splice(index, 1);
						index--;
					}
					return match;
				});
				createDebug.formatArgs.call(self, args);
				(self.log || createDebug.log).apply(self, args);
			}
			debug.namespace = namespace;
			debug.useColors = createDebug.useColors();
			debug.color = createDebug.selectColor(namespace);
			debug.extend = extend;
			debug.destroy = createDebug.destroy;
			Object.defineProperty(debug, "enabled", {
				enumerable: true,
				configurable: false,
				get: () => {
					if (enableOverride !== null) return enableOverride;
					if (namespacesCache !== createDebug.namespaces) {
						namespacesCache = createDebug.namespaces;
						enabledCache = createDebug.enabled(namespace);
					}
					return enabledCache;
				},
				set: (v) => {
					enableOverride = v;
				}
			});
			if (typeof createDebug.init === "function") createDebug.init(debug);
			return debug;
		}
		function extend(namespace, delimiter) {
			const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
			newDebug.log = this.log;
			return newDebug;
		}
		/**
		* Enables a debug mode by namespaces. This can include modes
		* separated by a colon and wildcards.
		*
		* @param {String} namespaces
		* @api public
		*/
		function enable(namespaces) {
			createDebug.save(namespaces);
			createDebug.namespaces = namespaces;
			createDebug.names = [];
			createDebug.skips = [];
			const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(/\s+/g, ",").split(",").filter(Boolean);
			for (const ns of split) if (ns[0] === "-") createDebug.skips.push(ns.slice(1));
			else createDebug.names.push(ns);
		}
		/**
		* Checks if the given string matches a namespace template, honoring
		* asterisks as wildcards.
		*
		* @param {String} search
		* @param {String} template
		* @return {Boolean}
		*/
		function matchesTemplate(search, template) {
			let searchIndex = 0;
			let templateIndex = 0;
			let starIndex = -1;
			let matchIndex = 0;
			while (searchIndex < search.length) if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) if (template[templateIndex] === "*") {
				starIndex = templateIndex;
				matchIndex = searchIndex;
				templateIndex++;
			} else {
				searchIndex++;
				templateIndex++;
			}
			else if (starIndex !== -1) {
				templateIndex = starIndex + 1;
				matchIndex++;
				searchIndex = matchIndex;
			} else return false;
			while (templateIndex < template.length && template[templateIndex] === "*") templateIndex++;
			return templateIndex === template.length;
		}
		/**
		* Disable debug output.
		*
		* @return {String} namespaces
		* @api public
		*/
		function disable() {
			const namespaces = [...createDebug.names, ...createDebug.skips.map((namespace) => "-" + namespace)].join(",");
			createDebug.enable("");
			return namespaces;
		}
		/**
		* Returns true if the given mode name is enabled, false otherwise.
		*
		* @param {String} name
		* @return {Boolean}
		* @api public
		*/
		function enabled(name) {
			for (const skip of createDebug.skips) if (matchesTemplate(name, skip)) return false;
			for (const ns of createDebug.names) if (matchesTemplate(name, ns)) return true;
			return false;
		}
		/**
		* Coerce `val`.
		*
		* @param {Mixed} val
		* @return {Mixed}
		* @api private
		*/
		function coerce(val) {
			if (val instanceof Error) return val.stack || val.message;
			return val;
		}
		/**
		* XXX DO NOT USE. This is a temporary stub function.
		* XXX It WILL be removed in the next major release.
		*/
		function destroy() {
			console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
		}
		createDebug.enable(createDebug.load());
		return createDebug;
	}
	module.exports = setup;
}));
//#endregion
//#region node_modules/debug/src/browser.js
var require_browser = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/**
	* This is the web browser implementation of `debug()`.
	*/
	exports.formatArgs = formatArgs;
	exports.save = save;
	exports.load = load;
	exports.useColors = useColors;
	exports.storage = localstorage();
	exports.destroy = (() => {
		let warned = false;
		return () => {
			if (!warned) {
				warned = true;
				console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
			}
		};
	})();
	/**
	* Colors.
	*/
	exports.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"
	];
	/**
	* Currently only WebKit-based Web Inspectors, Firefox >= v31,
	* and the Firebug extension (any Firefox version) are known
	* to support "%c" CSS customizations.
	*
	* TODO: add a `localStorage` variable to explicitly enable/disable colors
	*/
	function useColors() {
		if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) return true;
		if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) return false;
		let m;
		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 && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
	}
	/**
	* Colorize log arguments if enabled.
	*
	* @api public
	*/
	function formatArgs(args) {
		args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module.exports.humanize(this.diff);
		if (!this.useColors) return;
		const c = "color: " + this.color;
		args.splice(1, 0, c, "color: inherit");
		let index = 0;
		let lastC = 0;
		args[0].replace(/%[a-zA-Z%]/g, (match) => {
			if (match === "%%") return;
			index++;
			if (match === "%c") lastC = index;
		});
		args.splice(lastC, 0, c);
	}
	/**
	* Invokes `console.debug()` when available.
	* No-op when `console.debug` is not a "function".
	* If `console.debug` is not available, falls back
	* to `console.log`.
	*
	* @api public
	*/
	exports.log = console.debug || console.log || (() => {});
	/**
	* Save `namespaces`.
	*
	* @param {String} namespaces
	* @api private
	*/
	function save(namespaces) {
		try {
			if (namespaces) exports.storage.setItem("debug", namespaces);
			else exports.storage.removeItem("debug");
		} catch (error) {}
	}
	/**
	* Load `namespaces`.
	*
	* @return {String} returns the previously persisted debug modes
	* @api private
	*/
	function load() {
		let r;
		try {
			r = exports.storage.getItem("debug") || exports.storage.getItem("DEBUG");
		} catch (error) {}
		if (!r && typeof process !== "undefined" && "env" in process) r = process.env.DEBUG;
		return r;
	}
	/**
	* Localstorage attempts to return the localstorage.
	*
	* This is necessary because safari throws
	* when a user disables cookies/localstorage
	* and you attempt to access it.
	*
	* @return {LocalStorage}
	* @api private
	*/
	function localstorage() {
		try {
			return localStorage;
		} catch (error) {}
	}
	module.exports = require_common()(exports);
	const { formatters } = module.exports;
	/**
	* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
	*/
	formatters.j = function(v) {
		try {
			return JSON.stringify(v);
		} catch (error) {
			return "[UnexpectedJSONParseError]: " + error.message;
		}
	};
}));
//#endregion
//#region node_modules/has-flag/index.js
var require_has_flag = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = (flag, argv = process.argv) => {
		const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
		const position = argv.indexOf(prefix + flag);
		const terminatorPosition = argv.indexOf("--");
		return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
	};
}));
//#endregion
//#region node_modules/supports-color/index.js
var require_supports_color = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	const os$2 = require("os");
	const tty$1 = require("tty");
	const hasFlag = require_has_flag();
	const { env } = process;
	let forceColor;
	if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) forceColor = 0;
	else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) forceColor = 1;
	if ("FORCE_COLOR" in env) if (env.FORCE_COLOR === "true") forceColor = 1;
	else if (env.FORCE_COLOR === "false") forceColor = 0;
	else forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
	function translateLevel(level) {
		if (level === 0) return false;
		return {
			level,
			hasBasic: true,
			has256: level >= 2,
			has16m: level >= 3
		};
	}
	function supportsColor(haveStream, streamIsTTY) {
		if (forceColor === 0) return 0;
		if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) return 3;
		if (hasFlag("color=256")) return 2;
		if (haveStream && !streamIsTTY && forceColor === void 0) return 0;
		const min = forceColor || 0;
		if (env.TERM === "dumb") return min;
		if (process.platform === "win32") {
			const osRelease = os$2.release().split(".");
			if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) return Number(osRelease[2]) >= 14931 ? 3 : 2;
			return 1;
		}
		if ("CI" in env) {
			if ([
				"TRAVIS",
				"CIRCLECI",
				"APPVEYOR",
				"GITLAB_CI",
				"GITHUB_ACTIONS",
				"BUILDKITE"
			].some((sign) => sign in env) || env.CI_NAME === "codeship") return 1;
			return min;
		}
		if ("TEAMCITY_VERSION" in env) return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
		if (env.COLORTERM === "truecolor") return 3;
		if ("TERM_PROGRAM" in env) {
			const version = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
			switch (env.TERM_PROGRAM) {
				case "iTerm.app": return version >= 3 ? 3 : 2;
				case "Apple_Terminal": return 2;
			}
		}
		if (/-256(color)?$/i.test(env.TERM)) return 2;
		if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) return 1;
		if ("COLORTERM" in env) return 1;
		return min;
	}
	function getSupportLevel(stream) {
		return translateLevel(supportsColor(stream, stream && stream.isTTY));
	}
	module.exports = {
		supportsColor: getSupportLevel,
		stdout: translateLevel(supportsColor(true, tty$1.isatty(1))),
		stderr: translateLevel(supportsColor(true, tty$1.isatty(2)))
	};
}));
//#endregion
//#region node_modules/debug/src/node.js
var require_node = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/**
	* Module dependencies.
	*/
	const tty = require("tty");
	const util$7 = require("util");
	/**
	* This is the Node.js implementation of `debug()`.
	*/
	exports.init = init;
	exports.log = log;
	exports.formatArgs = formatArgs;
	exports.save = save;
	exports.load = load;
	exports.useColors = useColors;
	exports.destroy = util$7.deprecate(() => {}, "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
	/**
	* Colors.
	*/
	exports.colors = [
		6,
		2,
		3,
		4,
		5,
		1
	];
	try {
		const supportsColor = require_supports_color();
		if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) exports.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 (error) {}
	/**
	* Build up the default `inspectOpts` object from the environment variables.
	*
	*   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
	*/
	exports.inspectOpts = Object.keys(process.env).filter((key) => {
		return /^debug_/i.test(key);
	}).reduce((obj, key) => {
		const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {
			return k.toUpperCase();
		});
		let val = process.env[key];
		if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
		else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
		else if (val === "null") val = null;
		else val = Number(val);
		obj[prop] = val;
		return obj;
	}, {});
	/**
	* Is stdout a TTY? Colored output is enabled when `true`.
	*/
	function useColors() {
		return "colors" in exports.inspectOpts ? Boolean(exports.inspectOpts.colors) : tty.isatty(process.stderr.fd);
	}
	/**
	* Adds ANSI color escape codes if enabled.
	*
	* @api public
	*/
	function formatArgs(args) {
		const { namespace: name, useColors } = this;
		if (useColors) {
			const c = this.color;
			const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
			const prefix = `  ${colorCode};1m${name} \u001B[0m`;
			args[0] = prefix + args[0].split("\n").join("\n" + prefix);
			args.push(colorCode + "m+" + module.exports.humanize(this.diff) + "\x1B[0m");
		} else args[0] = getDate() + name + " " + args[0];
	}
	function getDate() {
		if (exports.inspectOpts.hideDate) return "";
		return (/* @__PURE__ */ new Date()).toISOString() + " ";
	}
	/**
	* Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.
	*/
	function log(...args) {
		return process.stderr.write(util$7.formatWithOptions(exports.inspectOpts, ...args) + "\n");
	}
	/**
	* Save `namespaces`.
	*
	* @param {String} namespaces
	* @api private
	*/
	function save(namespaces) {
		if (namespaces) process.env.DEBUG = namespaces;
		else delete process.env.DEBUG;
	}
	/**
	* Load `namespaces`.
	*
	* @return {String} returns the previously persisted debug modes
	* @api private
	*/
	function load() {
		return process.env.DEBUG;
	}
	/**
	* Init logic for `debug` instances.
	*
	* Create a new `inspectOpts` object in case `useColors` is set
	* differently for a particular `debug` instance.
	*/
	function init(debug) {
		debug.inspectOpts = {};
		const keys = Object.keys(exports.inspectOpts);
		for (let i = 0; i < keys.length; i++) debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
	}
	module.exports = require_common()(exports);
	const { formatters } = module.exports;
	/**
	* Map %o to `util.inspect()`, all on a single line.
	*/
	formatters.o = function(v) {
		this.inspectOpts.colors = this.useColors;
		return util$7.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
	};
	/**
	* Map %O to `util.inspect()`, allowing multiple lines if needed.
	*/
	formatters.O = function(v) {
		this.inspectOpts.colors = this.useColors;
		return util$7.inspect(v, this.inspectOpts);
	};
}));
//#endregion
//#region node_modules/debug/src/index.js
var require_src$1 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/**
	* Detect Electron renderer / nwjs process, which is node, but we should
	* treat as a browser.
	*/
	if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) module.exports = require_browser();
	else module.exports = require_node();
}));
//#endregion
//#region node_modules/follow-redirects/debug.js
var require_debug = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var debug;
	module.exports = function() {
		if (!debug) {
			try {
				debug = require_src$1()("follow-redirects");
			} catch (error) {}
			if (typeof debug !== "function") debug = function() {};
		}
		debug.apply(null, arguments);
	};
}));
//#endregion
//#region node_modules/follow-redirects/index.js
var require_follow_redirects = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var url$1 = require("url");
	var URL = url$1.URL;
	var http$2 = require("http");
	var https$2 = require("https");
	var Writable = require("stream").Writable;
	var assert$2 = require("assert");
	var debug = require_debug();
	// istanbul ignore next
	(function detectUnsupportedEnvironment() {
		var looksLikeNode = typeof process !== "undefined";
		var looksLikeBrowser = typeof window !== "undefined" && typeof document !== "undefined";
		var looksLikeV8 = isFunction(Error.captureStackTrace);
		if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) console.warn("The follow-redirects package should be excluded from browser builds.");
	})();
	var useNativeURL = false;
	try {
		assert$2(new URL(""));
	} catch (error) {
		useNativeURL = error.code === "ERR_INVALID_URL";
	}
	var sensitiveHeaders = [
		"Authorization",
		"Proxy-Authorization",
		"Cookie"
	];
	var preservedUrlFields = [
		"auth",
		"host",
		"hostname",
		"href",
		"path",
		"pathname",
		"port",
		"protocol",
		"query",
		"search",
		"hash"
	];
	var events = [
		"abort",
		"aborted",
		"connect",
		"error",
		"socket",
		"timeout"
	];
	var eventHandlers = Object.create(null);
	events.forEach(function(event) {
		eventHandlers[event] = function(arg1, arg2, arg3) {
			this._redirectable.emit(event, arg1, arg2, arg3);
		};
	});
	var InvalidUrlError = createErrorType("ERR_INVALID_URL", "Invalid URL", TypeError);
	var RedirectionError = createErrorType("ERR_FR_REDIRECTION_FAILURE", "Redirected request failed");
	var TooManyRedirectsError = createErrorType("ERR_FR_TOO_MANY_REDIRECTS", "Maximum number of redirects exceeded", RedirectionError);
	var MaxBodyLengthExceededError = createErrorType("ERR_FR_MAX_BODY_LENGTH_EXCEEDED", "Request body larger than maxBodyLength limit");
	var WriteAfterEndError = createErrorType("ERR_STREAM_WRITE_AFTER_END", "write after end");
	// istanbul ignore next
	var destroy = Writable.prototype.destroy || noop;
	function RedirectableRequest(options, responseCallback) {
		Writable.call(this);
		this._sanitizeOptions(options);
		this._options = options;
		this._ended = false;
		this._ending = false;
		this._redirectCount = 0;
		this._redirects = [];
		this._requestBodyLength = 0;
		this._requestBodyBuffers = [];
		if (responseCallback) this.on("response", responseCallback);
		var self = this;
		this._onNativeResponse = function(response) {
			try {
				self._processResponse(response);
			} catch (cause) {
				self.emit("error", cause instanceof RedirectionError ? cause : new RedirectionError({ cause }));
			}
		};
		this._headerFilter = new RegExp("^(?:" + sensitiveHeaders.concat(options.sensitiveHeaders).map(escapeRegex).join("|") + ")$", "i");
		this._performRequest();
	}
	RedirectableRequest.prototype = Object.create(Writable.prototype);
	RedirectableRequest.prototype.abort = function() {
		destroyRequest(this._currentRequest);
		this._currentRequest.abort();
		this.emit("abort");
	};
	RedirectableRequest.prototype.destroy = function(error) {
		destroyRequest(this._currentRequest, error);
		destroy.call(this, error);
		return this;
	};
	RedirectableRequest.prototype.write = function(data, encoding, callback) {
		if (this._ending) throw new WriteAfterEndError();
		if (!isString(data) && !isBuffer(data)) throw new TypeError("data should be a string, Buffer or Uint8Array");
		if (isFunction(encoding)) {
			callback = encoding;
			encoding = null;
		}
		if (data.length === 0) {
			if (callback) callback();
			return;
		}
		if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {
			this._requestBodyLength += data.length;
			this._requestBodyBuffers.push({
				data,
				encoding
			});
			this._currentRequest.write(data, encoding, callback);
		} else {
			this.emit("error", new MaxBodyLengthExceededError());
			this.abort();
		}
	};
	RedirectableRequest.prototype.end = function(data, encoding, callback) {
		if (isFunction(data)) {
			callback = data;
			data = encoding = null;
		} else if (isFunction(encoding)) {
			callback = encoding;
			encoding = null;
		}
		if (!data) {
			this._ended = this._ending = true;
			this._currentRequest.end(null, null, callback);
		} else {
			var self = this;
			var currentRequest = this._currentRequest;
			this.write(data, encoding, function() {
				self._ended = true;
				currentRequest.end(null, null, callback);
			});
			this._ending = true;
		}
	};
	RedirectableRequest.prototype.setHeader = function(name, value) {
		this._options.headers[name] = value;
		this._currentRequest.setHeader(name, value);
	};
	RedirectableRequest.prototype.removeHeader = function(name) {
		delete this._options.headers[name];
		this._currentRequest.removeHeader(name);
	};
	RedirectableRequest.prototype.setTimeout = function(msecs, callback) {
		var self = this;
		function destroyOnTimeout(socket) {
			socket.setTimeout(msecs);
			socket.removeListener("timeout", socket.destroy);
			socket.addListener("timeout", socket.destroy);
		}
		function startTimer(socket) {
			if (self._timeout) clearTimeout(self._timeout);
			self._timeout = setTimeout(function() {
				self.emit("timeout");
				clearTimer();
			}, msecs);
			destroyOnTimeout(socket);
		}
		function clearTimer() {
			if (self._timeout) {
				clearTimeout(self._timeout);
				self._timeout = null;
			}
			self.removeListener("abort", clearTimer);
			self.removeListener("error", clearTimer);
			self.removeListener("response", clearTimer);
			self.removeListener("close", clearTimer);
			if (callback) self.removeListener("timeout", callback);
			if (!self.socket) self._currentRequest.removeListener("socket", startTimer);
		}
		if (callback) this.on("timeout", callback);
		if (this.socket) startTimer(this.socket);
		else this._currentRequest.once("socket", startTimer);
		this.on("socket", destroyOnTimeout);
		this.on("abort", clearTimer);
		this.on("error", clearTimer);
		this.on("response", clearTimer);
		this.on("close", clearTimer);
		return this;
	};
	[
		"flushHeaders",
		"getHeader",
		"setNoDelay",
		"setSocketKeepAlive"
	].forEach(function(method) {
		RedirectableRequest.prototype[method] = function(a, b) {
			return this._currentRequest[method](a, b);
		};
	});
	[
		"aborted",
		"connection",
		"socket"
	].forEach(function(property) {
		Object.defineProperty(RedirectableRequest.prototype, property, { get: function() {
			return this._currentRequest[property];
		} });
	});
	RedirectableRequest.prototype._sanitizeOptions = function(options) {
		if (!options.headers) options.headers = {};
		if (!isArray(options.sensitiveHeaders)) options.sensitiveHeaders = [];
		if (options.host) {
			if (!options.hostname) options.hostname = options.host;
			delete options.host;
		}
		if (!options.pathname && options.path) {
			var searchPos = options.path.indexOf("?");
			if (searchPos < 0) options.pathname = options.path;
			else {
				options.pathname = options.path.substring(0, searchPos);
				options.search = options.path.substring(searchPos);
			}
		}
	};
	RedirectableRequest.prototype._performRequest = function() {
		var protocol = this._options.protocol;
		var nativeProtocol = this._options.nativeProtocols[protocol];
		if (!nativeProtocol) throw new TypeError("Unsupported protocol " + protocol);
		if (this._options.agents) {
			var scheme = protocol.slice(0, -1);
			this._options.agent = this._options.agents[scheme];
		}
		var request = this._currentRequest = nativeProtocol.request(this._options, this._onNativeResponse);
		request._redirectable = this;
		for (var event of events) request.on(event, eventHandlers[event]);
		this._currentUrl = /^\//.test(this._options.path) ? url$1.format(this._options) : this._options.path;
		if (this._isRedirect) {
			var i = 0;
			var self = this;
			var buffers = this._requestBodyBuffers;
			(function writeNext(error) {
				// istanbul ignore else
				if (request === self._currentRequest) {
					// istanbul ignore if
					if (error) self.emit("error", error);
					else if (i < buffers.length) {
						var buffer = buffers[i++];
						// istanbul ignore else
						if (!request.finished) request.write(buffer.data, buffer.encoding, writeNext);
					} else if (self._ended) request.end();
				}
			})();
		}
	};
	RedirectableRequest.prototype._processResponse = function(response) {
		var statusCode = response.statusCode;
		if (this._options.trackRedirects) this._redirects.push({
			url: this._currentUrl,
			headers: response.headers,
			statusCode
		});
		var location = response.headers.location;
		if (!location || this._options.followRedirects === false || statusCode < 300 || statusCode >= 400) {
			response.responseUrl = this._currentUrl;
			response.redirects = this._redirects;
			this.emit("response", response);
			this._requestBodyBuffers = [];
			return;
		}
		destroyRequest(this._currentRequest);
		response.destroy();
		if (++this._redirectCount > this._options.maxRedirects) throw new TooManyRedirectsError();
		var requestHeaders;
		var beforeRedirect = this._options.beforeRedirect;
		if (beforeRedirect) requestHeaders = Object.assign({ Host: response.req.getHeader("host") }, this._options.headers);
		var method = this._options.method;
		if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || statusCode === 303 && !/^(?:GET|HEAD)$/.test(this._options.method)) {
			this._options.method = "GET";
			this._requestBodyBuffers = [];
			removeMatchingHeaders(/^content-/i, this._options.headers);
		}
		var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);
		var currentUrlParts = parseUrl(this._currentUrl);
		var currentHost = currentHostHeader || currentUrlParts.host;
		var currentUrl = /^\w+:/.test(location) ? this._currentUrl : url$1.format(Object.assign(currentUrlParts, { host: currentHost }));
		var redirectUrl = resolveUrl(location, currentUrl);
		debug("redirecting to", redirectUrl.href);
		this._isRedirect = true;
		spreadUrlObject(redirectUrl, this._options);
		if (redirectUrl.protocol !== currentUrlParts.protocol && redirectUrl.protocol !== "https:" || redirectUrl.host !== currentHost && !isSubdomain(redirectUrl.host, currentHost)) removeMatchingHeaders(this._headerFilter, this._options.headers);
		if (isFunction(beforeRedirect)) {
			var responseDetails = {
				headers: response.headers,
				statusCode
			};
			var requestDetails = {
				url: currentUrl,
				method,
				headers: requestHeaders
			};
			beforeRedirect(this._options, responseDetails, requestDetails);
			this._sanitizeOptions(this._options);
		}
		this._performRequest();
	};
	function wrap(protocols) {
		var exports$1 = {
			maxRedirects: 21,
			maxBodyLength: 10 * 1024 * 1024
		};
		var nativeProtocols = {};
		Object.keys(protocols).forEach(function(scheme) {
			var protocol = scheme + ":";
			var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];
			var wrappedProtocol = exports$1[scheme] = Object.create(nativeProtocol);
			function request(input, options, callback) {
				if (isURL(input)) input = spreadUrlObject(input);
				else if (isString(input)) input = spreadUrlObject(parseUrl(input));
				else {
					callback = options;
					options = validateUrl(input);
					input = { protocol };
				}
				if (isFunction(options)) {
					callback = options;
					options = null;
				}
				options = Object.assign({
					maxRedirects: exports$1.maxRedirects,
					maxBodyLength: exports$1.maxBodyLength
				}, input, options);
				options.nativeProtocols = nativeProtocols;
				if (!isString(options.host) && !isString(options.hostname)) options.hostname = "::1";
				assert$2.equal(options.protocol, protocol, "protocol mismatch");
				debug("options", options);
				return new RedirectableRequest(options, callback);
			}
			function get(input, options, callback) {
				var wrappedRequest = wrappedProtocol.request(input, options, callback);
				wrappedRequest.end();
				return wrappedRequest;
			}
			Object.defineProperties(wrappedProtocol, {
				request: {
					value: request,
					configurable: true,
					enumerable: true,
					writable: true
				},
				get: {
					value: get,
					configurable: true,
					enumerable: true,
					writable: true
				}
			});
		});
		return exports$1;
	}
	function noop() {}
	function parseUrl(input) {
		var parsed;
		// istanbul ignore else
		if (useNativeURL) parsed = new URL(input);
		else {
			parsed = validateUrl(url$1.parse(input));
			if (!isString(parsed.protocol)) throw new InvalidUrlError({ input });
		}
		return parsed;
	}
	function resolveUrl(relative, base) {
		// istanbul ignore next
		return useNativeURL ? new URL(relative, base) : parseUrl(url$1.resolve(base, relative));
	}
	function validateUrl(input) {
		if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) throw new InvalidUrlError({ input: input.href || input });
		if (/^\[/.test(input.host) && !/^\[[:0-9a-f]+\](:\d+)?$/i.test(input.host)) throw new InvalidUrlError({ input: input.href || input });
		return input;
	}
	function spreadUrlObject(urlObject, target) {
		var spread = target || {};
		for (var key of preservedUrlFields) spread[key] = urlObject[key];
		if (spread.hostname.startsWith("[")) spread.hostname = spread.hostname.slice(1, -1);
		if (spread.port !== "") spread.port = Number(spread.port);
		spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;
		return spread;
	}
	function removeMatchingHeaders(regex, headers) {
		var lastValue;
		for (var header in headers) if (regex.test(header)) {
			lastValue = headers[header];
			delete headers[header];
		}
		return lastValue === null || typeof lastValue === "undefined" ? void 0 : String(lastValue).trim();
	}
	function createErrorType(code, message, baseClass) {
		function CustomError(properties) {
			// istanbul ignore else
			if (isFunction(Error.captureStackTrace)) Error.captureStackTrace(this, this.constructor);
			Object.assign(this, properties || {});
			this.code = code;
			this.message = this.cause ? message + ": " + this.cause.message : message;
		}
		CustomError.prototype = new (baseClass || Error)();
		Object.defineProperties(CustomError.prototype, {
			constructor: {
				value: CustomError,
				enumerable: false
			},
			name: {
				value: "Error [" + code + "]",
				enumerable: false
			}
		});
		return CustomError;
	}
	function destroyRequest(request, error) {
		for (var event of events) request.removeListener(event, eventHandlers[event]);
		request.on("error", noop);
		request.destroy(error);
	}
	function isSubdomain(subdomain, domain) {
		assert$2(isString(subdomain) && isString(domain));
		var dot = subdomain.length - domain.length - 1;
		return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain);
	}
	function isArray(value) {
		return value instanceof Array;
	}
	function isString(value) {
		return typeof value === "string" || value instanceof String;
	}
	function isFunction(value) {
		return typeof value === "function";
	}
	function isBuffer(value) {
		return typeof value === "object" && "length" in value;
	}
	function isURL(value) {
		return URL && value instanceof URL;
	}
	function escapeRegex(regex) {
		return regex.replace(/[\]\\/()*+?.$]/g, "\\$&");
	}
	module.exports = wrap({
		http: http$2,
		https: https$2
	});
	module.exports.wrap = wrap;
}));
//#endregion
//#region node_modules/agent-base/dist/helpers.js
var init_helpers = __esmMin((() => {}));
//#endregion
//#region node_modules/agent-base/dist/index.js
var INTERNAL, Agent;
var init_dist$2 = __esmMin((() => {
	init_helpers();
	INTERNAL = Symbol("AgentBaseInternalState");
	Agent = class extends http.Agent {
		constructor(opts) {
			super(opts);
			this[INTERNAL] = {};
		}
		/**
		* Determine whether this is an `http` or `https` request.
		*/
		isSecureEndpoint(options) {
			if (options) {
				if (typeof options.secureEndpoint === "boolean") return options.secureEndpoint;
				if (typeof options.protocol === "string") return options.protocol === "https:";
			}
			const { stack } = /* @__PURE__ */ new Error();
			if (typeof stack !== "string") return false;
			return stack.split("\n").some((l) => l.indexOf("(https.js:") !== -1 || l.indexOf("node:https:") !== -1);
		}
		incrementSockets(name) {
			if (this.maxSockets === Infinity && this.maxTotalSockets === Infinity) return null;
			if (!this.sockets[name]) this.sockets[name] = [];
			const fakeSocket = new net.Socket({ writable: false });
			this.sockets[name].push(fakeSocket);
			this.totalSocketCount++;
			return fakeSocket;
		}
		decrementSockets(name, socket) {
			if (!this.sockets[name] || socket === null) return;
			const sockets = this.sockets[name];
			const index = sockets.indexOf(socket);
			if (index !== -1) {
				sockets.splice(index, 1);
				this.totalSocketCount--;
				if (sockets.length === 0) delete this.sockets[name];
			}
		}
		getName(options) {
			if (this.isSecureEndpoint(options)) return https.Agent.prototype.getName.call(this, options);
			return super.getName(options);
		}
		createSocket(req, options, cb) {
			const connectOpts = {
				...options,
				secureEndpoint: this.isSecureEndpoint(options)
			};
			const name = this.getName(connectOpts);
			const fakeSocket = this.incrementSockets(name);
			Promise.resolve().then(() => this.connect(req, connectOpts)).then((socket) => {
				this.decrementSockets(name, fakeSocket);
				if (typeof socket.addRequest === "function") try {
					return socket.addRequest(req, connectOpts);
				} catch (err) {
					return cb(err);
				}
				this[INTERNAL].currentSocket = socket;
				super.createSocket(req, options, cb);
			}, (err) => {
				this.decrementSockets(name, fakeSocket);
				cb(err);
			});
		}
		createConnection() {
			const socket = this[INTERNAL].currentSocket;
			this[INTERNAL].currentSocket = void 0;
			if (!socket) throw new Error("No socket was returned in the `connect()` function");
			return socket;
		}
		get defaultPort() {
			return this[INTERNAL].defaultPort ?? (this.protocol === "https:" ? 443 : 80);
		}
		set defaultPort(v) {
			if (this[INTERNAL]) this[INTERNAL].defaultPort = v;
		}
		get protocol() {
			return this[INTERNAL].protocol ?? (this.isSecureEndpoint() ? "https:" : "http:");
		}
		set protocol(v) {
			if (this[INTERNAL]) this[INTERNAL].protocol = v;
		}
	};
}));
//#endregion
//#region node_modules/http-proxy-agent/dist/index.js
function omit$1(obj, ...keys) {
	const ret = {};
	let key;
	for (key in obj) if (!keys.includes(key)) ret[key] = obj[key];
	return ret;
}
var import_src$2, debug$2, HttpProxyAgent;
var init_dist$1 = __esmMin((() => {
	import_src$2 = /* @__PURE__ */ __toESM(require_src$1(), 1);
	init_dist$2();
	debug$2 = (0, import_src$2.default)("http-proxy-agent");
	HttpProxyAgent = class extends Agent {
		constructor(proxy, opts) {
			super(opts);
			this.proxy = typeof proxy === "string" ? new url.URL(proxy) : proxy;
			this.proxyHeaders = opts?.headers ?? {};
			debug$2("Creating new HttpProxyAgent instance: %o", this.proxy.href);
			const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, "");
			const port = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === "https:" ? 443 : 80;
			this.connectOpts = {
				...opts ? omit$1(opts, "headers") : null,
				host,
				port
			};
		}
		addRequest(req, opts) {
			req._header = null;
			this.setRequestProps(req, opts);
			super.addRequest(req, opts);
		}
		setRequestProps(req, opts) {
			const { proxy } = this;
			const base = `${opts.secureEndpoint ? "https:" : "http:"}//${req.getHeader("host") || "localhost"}`;
			const url$2 = new url.URL(req.path, base);
			if (opts.port !== 80) url$2.port = String(opts.port);
			req.path = String(url$2);
			const headers = typeof this.proxyHeaders === "function" ? this.proxyHeaders() : { ...this.proxyHeaders };
			if (proxy.username || proxy.password) {
				const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;
				headers["Proxy-Authorization"] = `Basic ${Buffer.from(auth).toString("base64")}`;
			}
			if (!headers["Proxy-Connection"]) headers["Proxy-Connection"] = this.keepAlive ? "Keep-Alive" : "close";
			for (const name of Object.keys(headers)) {
				const value = headers[name];
				if (value) req.setHeader(name, value);
			}
		}
		async connect(req, opts) {
			req._header = null;
			if (!req.path.includes("://")) this.setRequestProps(req, opts);
			let first;
			let endOfHeaders;
			debug$2("Regenerating stored HTTP header string for request");
			req._implicitHeader();
			if (req.outputData && req.outputData.length > 0) {
				debug$2("Patching connection write() output buffer with updated header");
				first = req.outputData[0].data;
				endOfHeaders = first.indexOf("\r\n\r\n") + 4;
				req.outputData[0].data = req._header + first.substring(endOfHeaders);
				debug$2("Output buffer: %o", req.outputData[0].data);
			}
			let socket;
			if (this.proxy.protocol === "https:") {
				debug$2("Creating `tls.Socket`: %o", this.connectOpts);
				socket = tls.connect(this.connectOpts);
			} else {
				debug$2("Creating `net.Socket`: %o", this.connectOpts);
				socket = net.connect(this.connectOpts);
			}
			await (0, events.once)(socket, "connect");
			return socket;
		}
	};
	HttpProxyAgent.protocols = ["http", "https"];
}));
//#endregion
//#region node_modules/https-proxy-agent/dist/parse-proxy-response.js
function parseProxyResponse(socket) {
	return new Promise((resolve, reject) => {
		let buffersLength = 0;
		const buffers = [];
		function read() {
			const b = socket.read();
			if (b) ondata(b);
			else socket.once("readable", read);
		}
		function cleanup() {
			socket.removeListener("end", onend);
			socket.removeListener("error", onerror);
			socket.removeListener("readable", read);
		}
		function onend() {
			cleanup();
			debug$1("onend");
			reject(/* @__PURE__ */ new Error("Proxy connection ended before receiving CONNECT response"));
		}
		function onerror(err) {
			cleanup();
			debug$1("onerror %o", err);
			reject(err);
		}
		function ondata(b) {
			buffers.push(b);
			buffersLength += b.length;
			const buffered = Buffer.concat(buffers, buffersLength);
			const endOfHeaders = buffered.indexOf("\r\n\r\n");
			if (endOfHeaders === -1) {
				debug$1("have not received end of HTTP headers yet...");
				read();
				return;
			}
			const headerParts = buffered.slice(0, endOfHeaders).toString("ascii").split("\r\n");
			const firstLine = headerParts.shift();
			if (!firstLine) {
				socket.destroy();
				return reject(/* @__PURE__ */ new Error("No header received from proxy CONNECT response"));
			}
			const firstLineParts = firstLine.split(" ");
			const statusCode = +firstLineParts[1];
			const statusText = firstLineParts.slice(2).join(" ");
			const headers = {};
			for (const header of headerParts) {
				if (!header) continue;
				const firstColon = header.indexOf(":");
				if (firstColon === -1) {
					socket.destroy();
					return reject(/* @__PURE__ */ new Error(`Invalid header from proxy CONNECT response: "${header}"`));
				}
				const key = header.slice(0, firstColon).toLowerCase();
				const value = header.slice(firstColon + 1).trimStart();
				const current = headers[key];
				if (typeof current === "string") headers[key] = [current, value];
				else if (Array.isArray(current)) current.push(value);
				else headers[key] = value;
			}
			debug$1("got proxy server response: %o %o", firstLine, headers);
			cleanup();
			resolve({
				connect: {
					statusCode,
					statusText,
					headers
				},
				buffered
			});
		}
		socket.on("error", onerror);
		socket.on("end", onend);
		read();
	});
}
var import_src$1, debug$1;
var init_parse_proxy_response = __esmMin((() => {
	import_src$1 = /* @__PURE__ */ __toESM(require_src$1(), 1);
	debug$1 = (0, import_src$1.default)("https-proxy-agent:parse-proxy-response");
}));
//#endregion
//#region node_modules/https-proxy-agent/dist/index.js
function resume(socket) {
	socket.resume();
}
function omit(obj, ...keys) {
	const ret = {};
	let key;
	for (key in obj) if (!keys.includes(key)) ret[key] = obj[key];
	return ret;
}
var import_src, debug, setServernameFromNonIpHost, HttpsProxyAgent;
var init_dist = __esmMin((() => {
	import_src = /* @__PURE__ */ __toESM(require_src$1(), 1);
	init_dist$2();
	init_parse_proxy_response();
	debug = (0, import_src.default)("https-proxy-agent");
	setServernameFromNonIpHost = (options) => {
		if (options.servername === void 0 && options.host && !net.isIP(options.host)) return {
			...options,
			servername: options.host
		};
		return options;
	};
	HttpsProxyAgent = class extends Agent {
		constructor(proxy, opts) {
			super(opts);
			this.options = { path: void 0 };
			this.proxy = typeof proxy === "string" ? new url.URL(proxy) : proxy;
			this.proxyHeaders = opts?.headers ?? {};
			debug("Creating new HttpsProxyAgent instance: %o", this.proxy.href);
			const host = (this.proxy.hostname || this.proxy.host).replace(/^\[|\]$/g, "");
			const port = this.proxy.port ? parseInt(this.proxy.port, 10) : this.proxy.protocol === "https:" ? 443 : 80;
			this.connectOpts = {
				ALPNProtocols: ["http/1.1"],
				...opts ? omit(opts, "headers") : null,
				host,
				port
			};
		}
		/**
		* Called when the node-core HTTP client library is creating a
		* new HTTP request.
		*/
		async connect(req, opts) {
			const { proxy } = this;
			if (!opts.host) throw new TypeError("No \"host\" provided");
			let socket;
			if (proxy.protocol === "https:") {
				debug("Creating `tls.Socket`: %o", this.connectOpts);
				socket = tls.connect(setServernameFromNonIpHost(this.connectOpts));
			} else {
				debug("Creating `net.Socket`: %o", this.connectOpts);
				socket = net.connect(this.connectOpts);
			}
			const headers = typeof this.proxyHeaders === "function" ? this.proxyHeaders() : { ...this.proxyHeaders };
			const host = net.isIPv6(opts.host) ? `[${opts.host}]` : opts.host;
			let payload = `CONNECT ${host}:${opts.port} HTTP/1.1\r\n`;
			if (proxy.username || proxy.password) {
				const auth = `${decodeURIComponent(proxy.username)}:${decodeURIComponent(proxy.password)}`;
				headers["Proxy-Authorization"] = `Basic ${Buffer.from(auth).toString("base64")}`;
			}
			headers.Host = `${host}:${opts.port}`;
			if (!headers["Proxy-Connection"]) headers["Proxy-Connection"] = this.keepAlive ? "Keep-Alive" : "close";
			for (const name of Object.keys(headers)) payload += `${name}: ${headers[name]}\r\n`;
			const proxyResponsePromise = parseProxyResponse(socket);
			socket.write(`${payload}\r\n`);
			const { connect, buffered } = await proxyResponsePromise;
			req.emit("proxyConnect", connect);
			this.emit("proxyConnect", connect, req);
			if (connect.statusCode === 200) {
				req.once("socket", resume);
				if (opts.secureEndpoint) {
					debug("Upgrading socket connection to TLS");
					return tls.connect({
						...omit(setServernameFromNonIpHost(opts), "host", "path", "port"),
						socket
					});
				}
				return socket;
			}
			socket.destroy();
			const fakeSocket = new net.Socket({ writable: false });
			fakeSocket.readable = true;
			req.once("socket", (s) => {
				debug("Replaying proxy buffer for failed request");
				(0, assert.default)(s.listenerCount("data") > 0);
				s.push(buffered);
				s.push(null);
			});
			return fakeSocket;
		}
	};
	HttpsProxyAgent.protocols = ["http", "https"];
}));
//#endregion
//#region src/model/fetch.ts
function getRequestModule(url) {
	return url.protocol === "https:" ? import_follow_redirects.https : import_follow_redirects.http;
}
function getText(data) {
	if (typeof data === "string" || Buffer.isBuffer(data)) return data;
	return JSON.stringify(data);
}
function toURL(urlInput) {
	if (urlInput instanceof URL) return urlInput;
	let url = new URL(urlInput);
	if (!["https:", "http:"].includes(url.protocol)) throw new Error(`Not valid protocol with ${urlInput}, should be http: or https:`);
	return url;
}
function toPort(port, protocol) {
	if (port) {
		port = typeof port === "number" ? port : parseInt(port, 10);
		if (!isNaN(port)) return port;
	}
	return protocol.startsWith("https") ? 443 : 80;
}
function getDataType(data) {
	if (data === null) return "null";
	if (data === void 0) return "undefined";
	if (typeof data == "string") return "string";
	if (Buffer.isBuffer(data)) return "buffer";
	if (Array.isArray(data) || objectLiteral(data)) return "object";
	return "unknown";
}
function getSystemProxyURI(endpoint, env = process.env) {
	let noProxy = env.NO_PROXY ?? env.no_proxy;
	if (noProxy === "*") return null;
	if (noProxy) {
		const hostname = endpoint.hostname.replace(/^\.*/, ".").toLowerCase();
		const port = toPort(endpoint.port, endpoint.protocol).toString();
		const noProxyList = noProxy.split(",");
		for (let i = 0, len = noProxyList.length; i < len; i++) {
			let noProxyItem = noProxyList[i].trim().toLowerCase();
			if (noProxyItem.includes(":")) {
				let noProxyItemParts = noProxyItem.split(":", 2);
				let noProxyHost = noProxyItemParts[0].replace(/^\.*/, ".");
				if (port == noProxyItemParts[1] && hostname.endsWith(noProxyHost)) return null;
			} else {
				noProxyItem = noProxyItem.replace(/^\.*/, ".");
				if (hostname.endsWith(noProxyItem)) return null;
			}
		}
	}
	let proxyUri;
	if (endpoint.protocol === "http:") proxyUri = env.HTTP_PROXY || env.http_proxy || null;
	else proxyUri = env.HTTPS_PROXY || env.https_proxy || env.HTTP_PROXY || env.http_proxy || null;
	return proxyUri;
}
function getAgent(endpoint, options) {
	let proxy = options.proxy || getSystemProxyURI(endpoint);
	if (proxy) {
		let proxyURL;
		try {
			proxyURL = new URL(proxy);
			if (!/^https?:$/.test(proxyURL.protocol)) return null;
		} catch (e) {
			return null;
		}
		let rejectUnauthorized = typeof options.proxyStrictSSL === "boolean" ? options.proxyStrictSSL : true;
		logger$43.info(`Using proxy ${proxy} from ${options.proxy ? "configuration" : "system environment"} for ${endpoint.hostname}:`);
		const agentOptions = { rejectUnauthorized };
		return endpoint.protocol === "http:" ? new HttpProxyAgent(proxyURL, agentOptions) : new HttpsProxyAgent(proxyURL, agentOptions);
	}
	return null;
}
function resolveRequestOptions(url, options) {
	let config = workspace_default.getConfiguration("http", null);
	let dataType = getDataType(options.data);
	let proxyOptions = {
		proxy: config.get("proxy", ""),
		proxyStrictSSL: config.get("proxyStrictSSL", true),
		proxyAuthorization: config.get("proxyAuthorization", null),
		proxyCA: config.get("proxyCA", null)
	};
	if (options.query && !url.search) url.search = `?${new URLSearchParams(options.query).toString()}`;
	let agent = getAgent(url, proxyOptions);
	let opts = {
		method: options.method ?? "GET",
		hostname: url.hostname,
		port: toPort(url.port, url.protocol),
		path: url.pathname + url.search,
		agent,
		rejectUnauthorized: proxyOptions.proxyStrictSSL,
		maxRedirects: 3,
		headers: {
			"User-Agent": "Mozilla/5.0 (X11; Linux x86_64)",
			"Accept-Encoding": "gzip, deflate",
			...options.headers ?? {}
		}
	};
	if (dataType == "object") opts.headers["Content-Type"] = "application/json";
	else if (dataType == "string") opts.headers["Content-Type"] = "text/plain";
	if (proxyOptions.proxyAuthorization) opts.headers["Proxy-Authorization"] = proxyOptions.proxyAuthorization;
	if (proxyOptions.proxyCA) opts.ca = fs$6.readFileSync(proxyOptions.proxyCA);
	if (options.user) opts.auth = options.user + ":" + toText(options.password);
	if (url.username) opts.auth = url.username + ":" + toText(url.password);
	if (options.timeout) opts.timeout = options.timeout;
	if (options.buffer) opts.buffer = true;
	return opts;
}
function request(url, data, opts, token, obj = {}) {
	let mod = getRequestModule(url);
	return new Promise((resolve, reject) => {
		if (token) {
			let disposable = token.onCancellationRequested(() => {
				disposable.dispose();
				req.destroy(new CancellationError());
			});
		}
		let timer;
		const req = mod.request(opts, (res) => {
			let readable = res;
			if (res.statusCode >= 200 && res.statusCode < 300 || res.statusCode === 1223) {
				let headers = res.headers;
				let chunks = [];
				let contentType = toText(headers["content-type"]);
				readable = decompressResponse(res);
				readable.on("data", (chunk) => {
					chunks.push(chunk);
				});
				readable.on("end", () => {
					clearTimeout(timer);
					let buf = Buffer.concat(chunks);
					if (!opts.buffer && (contentType.startsWith("application/json") || contentType.startsWith("text/"))) {
						let ms = contentType.match(/charset=(\S+)/);
						let encoding = ms ? ms[1] : "utf8";
						let rawData = buf.toString(encoding);
						if (!contentType.includes("application/json")) resolve(rawData);
						else try {
							resolve(JSON.parse(rawData));
						} catch (e) {
							reject(/* @__PURE__ */ new Error(`Parse response error: ${e}`));
						}
					} else resolve(buf);
				});
				readable.on("error", (err) => {
					reject(/* @__PURE__ */ new Error(`Connection error to ${url}: ${err.message}`));
				});
			} else reject(/* @__PURE__ */ new Error(`Bad response from ${url}: ${res.statusCode}`));
		});
		obj.req = req;
		req.on("error", (e) => {
			if (e["code"] == "ECONNRESET") timer = setTimeout(() => {
				reject(e);
			}, timeout);
			else reject(e);
		});
		req.on("timeout", () => {
			req.destroy(/* @__PURE__ */ new Error(`Request timeout after ${opts.timeout}ms`));
		});
		if (data) req.write(getText(data));
		if (opts.timeout) req.setTimeout(opts.timeout);
		req.end();
	});
}
/**
* Send request to server for response, supports:
*
* - Send json data and parse json response.
* - Throw error for failed response statusCode.
* - Timeout support (no timeout by default).
* - Send buffer (as data) and receive data (as response).
* - Proxy support from user configuration & environment.
* - Redirect support, limited to 3.
* - Support of gzip & deflate response content.
*/
function fetch(urlInput, options = {}, token) {
	let url = toURL(urlInput);
	let opts = resolveRequestOptions(url, options);
	return request(url, options.data, opts, token).catch((err) => {
		logger$43.error(`Fetch error for ${url}:`, opts, err);
		if (opts.agent && opts.agent.proxy) {
			let { proxy } = opts.agent;
			throw new Error(`Request failed using proxy ${proxy.host}: ${err.message}`);
		} else throw err;
	});
}
var import_follow_redirects, logger$43, timeout;
var init_fetch = __esmMin((() => {
	init_decompress_response();
	import_follow_redirects = require_follow_redirects();
	init_dist$1();
	init_dist();
	init_logger$2();
	init_util$7();
	init_errors();
	init_is();
	init_node();
	init_string$1();
	init_workspace$1();
	logger$43 = createLogger$1("model-fetch");
	timeout = getConditionValue(500, 50);
}));
//#endregion
//#region node_modules/content-disposition/index.js
/*!
* content-disposition
* Copyright(c) 2014-2017 Douglas Christopher Wilson
* MIT Licensed
*/
var require_content_disposition = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/**
	* Module exports.
	* @public
	*/
	module.exports = contentDisposition;
	module.exports.parse = parse;
	/**
	* TextDecoder instance for UTF-8 decoding when decodeURIComponent fails due to invalid byte sequences.
	* @type {TextDecoder}
	* @private
	*/
	const utf8Decoder = new TextDecoder("utf-8");
	/**
	* RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%")
	* @private
	*/
	var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g;
	/**
	* RegExp to match non-latin1 characters.
	* @private
	*/
	var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g;
	/**
	* RegExp to match quoted-pair in RFC 2616
	*
	* quoted-pair = "\" CHAR
	* CHAR        = <any US-ASCII character (octets 0 - 127)>
	* @private
	*/
	var QESC_REGEXP = /\\([\u0000-\u007f])/g;
	/**
	* RegExp to match chars that must be quoted-pair in RFC 2616
	* @private
	*/
	var QUOTE_REGEXP = /([\\"])/g;
	/**
	* RegExp for various RFC 2616 grammar
	*
	* parameter     = token "=" ( token | quoted-string )
	* token         = 1*<any CHAR except CTLs or separators>
	* separators    = "(" | ")" | "<" | ">" | "@"
	*               | "," | ";" | ":" | "\" | <">
	*               | "/" | "[" | "]" | "?" | "="
	*               | "{" | "}" | SP | HT
	* quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
	* qdtext        = <any TEXT except <">>
	* quoted-pair   = "\" CHAR
	* CHAR          = <any US-ASCII character (octets 0 - 127)>
	* TEXT          = <any OCTET except CTLs, but including LWS>
	* LWS           = [CRLF] 1*( SP | HT )
	* CRLF          = CR LF
	* CR            = <US-ASCII CR, carriage return (13)>
	* LF            = <US-ASCII LF, linefeed (10)>
	* SP            = <US-ASCII SP, space (32)>
	* HT            = <US-ASCII HT, horizontal-tab (9)>
	* CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
	* OCTET         = <any 8-bit sequence of data>
	* @private
	*/
	var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g;
	var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/;
	var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/;
	/**
	* RegExp for various RFC 5987 grammar
	*
	* ext-value     = charset  "'" [ language ] "'" value-chars
	* charset       = "UTF-8" / "ISO-8859-1" / mime-charset
	* mime-charset  = 1*mime-charsetc
	* mime-charsetc = ALPHA / DIGIT
	*               / "!" / "#" / "$" / "%" / "&"
	*               / "+" / "-" / "^" / "_" / "`"
	*               / "{" / "}" / "~"
	* language      = ( 2*3ALPHA [ extlang ] )
	*               / 4ALPHA
	*               / 5*8ALPHA
	* extlang       = *3( "-" 3ALPHA )
	* value-chars   = *( pct-encoded / attr-char )
	* pct-encoded   = "%" HEXDIG HEXDIG
	* attr-char     = ALPHA / DIGIT
	*               / "!" / "#" / "$" / "&" / "+" / "-" / "."
	*               / "^" / "_" / "`" / "|" / "~"
	* @private
	*/
	var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/;
	/**
	* RegExp for various RFC 6266 grammar
	*
	* disposition-type = "inline" | "attachment" | disp-ext-type
	* disp-ext-type    = token
	* disposition-parm = filename-parm | disp-ext-parm
	* filename-parm    = "filename" "=" value
	*                  | "filename*" "=" ext-value
	* disp-ext-parm    = token "=" value
	*                  | ext-token "=" ext-value
	* ext-token        = <the characters in token, followed by "*">
	* @private
	*/
	var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/;
	/**
	* Create an attachment Content-Disposition header.
	*
	* @param {string} [filename]
	* @param {object} [options]
	* @param {string} [options.type=attachment]
	* @param {string|boolean} [options.fallback=true]
	* @return {string}
	* @public
	*/
	function contentDisposition(filename, options) {
		var opts = options || {};
		return format(new ContentDisposition(opts.type || "attachment", createparams(filename, opts.fallback)));
	}
	/**
	* Create parameters object from filename and fallback.
	*
	* @param {string} [filename]
	* @param {string|boolean} [fallback=true]
	* @return {object}
	* @private
	*/
	function createparams(filename, fallback) {
		if (filename === void 0) return;
		var params = {};
		if (typeof filename !== "string") throw new TypeError("filename must be a string");
		if (fallback === void 0) fallback = true;
		if (typeof fallback !== "string" && typeof fallback !== "boolean") throw new TypeError("fallback must be a string or boolean");
		if (typeof fallback === "string" && NON_LATIN1_REGEXP.test(fallback)) throw new TypeError("fallback must be ISO-8859-1 string");
		var name = basename(filename);
		var isQuotedString = TEXT_REGEXP.test(name);
		var fallbackName = typeof fallback !== "string" ? fallback && getlatin1(name) : basename(fallback);
		var hasFallback = typeof fallbackName === "string" && fallbackName !== name;
		if (hasFallback || !isQuotedString || hasHexEscape(name)) params["filename*"] = name;
		if (isQuotedString || hasFallback) params.filename = hasFallback ? fallbackName : name;
		return params;
	}
	/**
	* Format object to Content-Disposition header.
	*
	* @param {object} obj
	* @param {string} obj.type
	* @param {object} [obj.parameters]
	* @return {string}
	* @private
	*/
	function format(obj) {
		var parameters = obj.parameters;
		var type = obj.type;
		if (!type || typeof type !== "string" || !TOKEN_REGEXP.test(type)) throw new TypeError("invalid type");
		var string = String(type).toLowerCase();
		if (parameters && typeof parameters === "object") {
			var param;
			var params = Object.keys(parameters).sort();
			for (var i = 0; i < params.length; i++) {
				param = params[i];
				var val = param.slice(-1) === "*" ? ustring(parameters[param]) : qstring(parameters[param]);
				string += "; " + param + "=" + val;
			}
		}
		return string;
	}
	/**
	* Decode a RFC 5987 field value (gracefully).
	*
	* @param {string} str
	* @return {string}
	* @private
	*/
	function decodefield(str) {
		const match = EXT_VALUE_REGEXP.exec(str);
		if (!match) throw new TypeError("invalid extended field value");
		const charset = match[1].toLowerCase();
		const encoded = match[2];
		switch (charset) {
			case "iso-8859-1": return getlatin1(decodeHexEscapes(encoded));
			case "utf-8":
			case "utf8": try {
				return decodeURIComponent(encoded);
			} catch {
				const binary = decodeHexEscapes(encoded);
				const bytes = new Uint8Array(binary.length);
				for (let idx = 0; idx < binary.length; idx++) bytes[idx] = binary.charCodeAt(idx);
				return utf8Decoder.decode(bytes);
			}
		}
		throw new TypeError("unsupported charset in extended field");
	}
	/**
	* Get ISO-8859-1 version of string.
	*
	* @param {string} val
	* @return {string}
	* @private
	*/
	function getlatin1(val) {
		return String(val).replace(NON_LATIN1_REGEXP, "?");
	}
	/**
	* Parse Content-Disposition header string.
	*
	* @param {string} string
	* @return {object}
	* @public
	*/
	function parse(string) {
		if (!string || typeof string !== "string") throw new TypeError("argument string is required");
		var match = DISPOSITION_TYPE_REGEXP.exec(string);
		if (!match) throw new TypeError("invalid type format");
		var index = match[0].length;
		var type = match[1].toLowerCase();
		var key;
		var names = [];
		var params = {};
		var value;
		index = PARAM_REGEXP.lastIndex = match[0].slice(-1) === ";" ? index - 1 : index;
		while (match = PARAM_REGEXP.exec(string)) {
			if (match.index !== index) throw new TypeError("invalid parameter format");
			index += match[0].length;
			key = match[1].toLowerCase();
			value = match[2];
			if (names.indexOf(key) !== -1) throw new TypeError("invalid duplicate parameter");
			names.push(key);
			if (key.indexOf("*") + 1 === key.length) {
				key = key.slice(0, -1);
				value = decodefield(value);
				params[key] = value;
				continue;
			}
			if (typeof params[key] === "string") continue;
			if (value[0] === "\"") value = value.slice(1, -1).replace(QESC_REGEXP, "$1");
			params[key] = value;
		}
		if (index !== -1 && index !== string.length) throw new TypeError("invalid parameter format");
		return new ContentDisposition(type, params);
	}
	/**
	* Percent encode a single character.
	*
	* @param {string} char
	* @return {string}
	* @private
	*/
	function pencode(char) {
		return "%" + String(char).charCodeAt(0).toString(16).toUpperCase();
	}
	/**
	* Quote a string for HTTP.
	*
	* @param {string} val
	* @return {string}
	* @private
	*/
	function qstring(val) {
		return "\"" + String(val).replace(QUOTE_REGEXP, "\\$1") + "\"";
	}
	/**
	* Encode a Unicode string for HTTP (RFC 5987).
	*
	* @param {string} val
	* @return {string}
	* @private
	*/
	function ustring(val) {
		return "UTF-8''" + encodeURIComponent(String(val)).replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode);
	}
	/**
	* Class for parsed Content-Disposition header for v8 optimization
	*
	* @public
	* @param {string} type
	* @param {object} parameters
	* @constructor
	*/
	function ContentDisposition(type, parameters) {
		this.type = type;
		this.parameters = parameters;
	}
	/**
	* Return the last portion of a path
	*
	* @param {string} path
	* @returns {string}
	*/
	function basename(path) {
		const normalized = path.replaceAll("\\", "/");
		let end = normalized.length;
		while (end > 0 && normalized[end - 1] === "/") end--;
		if (end === 0) return "";
		let start = end - 1;
		while (start >= 0 && normalized[start] !== "/") start--;
		return normalized.slice(start + 1, end);
	}
	/**
	* Check if a character is a hex digit [0-9A-Fa-f]
	*
	* @param {string} char
	* @return {boolean}
	* @private
	*/
	function isHexDigit(char) {
		const code = char.charCodeAt(0);
		return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;
	}
	/**
	* Check if a string contains percent encoding escapes.
	*
	* @param {string} str
	* @return {boolean}
	* @private
	*/
	function hasHexEscape(str) {
		const maxIndex = str.length - 3;
		let lastIndex = -1;
		while ((lastIndex = str.indexOf("%", lastIndex + 1)) !== -1 && lastIndex <= maxIndex) if (isHexDigit(str[lastIndex + 1]) && isHexDigit(str[lastIndex + 2])) return true;
		return false;
	}
	/**
	* Decode hex escapes in a string (e.g., %20 -> space)
	*
	* @param {string} str
	* @return {string}
	* @private
	*/
	function decodeHexEscapes(str) {
		const firstEscape = str.indexOf("%");
		if (firstEscape === -1) return str;
		let result = str.slice(0, firstEscape);
		for (let idx = firstEscape; idx < str.length; idx++) if (str[idx] === "%" && idx + 2 < str.length && isHexDigit(str[idx + 1]) && isHexDigit(str[idx + 2])) {
			result += String.fromCharCode(Number.parseInt(str[idx + 1] + str[idx + 2], 16));
			idx += 2;
		} else result += str[idx];
		return result;
	}
}));
//#endregion
//#region node_modules/tar/dist/commonjs/index.min.js
var require_index_min = /* @__PURE__ */ __commonJSMin(((exports) => {
	var d = (s, e) => () => (e || s((e = { exports: {} }).exports, e), e.exports);
	var We = d((F) => {
		"use strict";
		var Ro = F && F.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(F, "__esModule", { value: !0 });
		F.Minipass = F.isWritable = F.isReadable = F.isStream = void 0;
		var Br = typeof process == "object" && process ? process : {
			stdout: null,
			stderr: null
		}, is = require("node:events"), jr = Ro(require("node:stream")), vo = require("node:string_decoder"), To = (s) => !!s && typeof s == "object" && (s instanceof Zt || s instanceof jr.default || (0, F.isReadable)(s) || (0, F.isWritable)(s));
		F.isStream = To;
		var Do = (s) => !!s && typeof s == "object" && s instanceof is.EventEmitter && typeof s.pipe == "function" && s.pipe !== jr.default.Writable.prototype.pipe;
		F.isReadable = Do;
		var Po = (s) => !!s && typeof s == "object" && s instanceof is.EventEmitter && typeof s.write == "function" && typeof s.end == "function";
		F.isWritable = Po;
		var le = Symbol("EOF"), ue = Symbol("maybeEmitEnd"), _e = Symbol("emittedEnd"), xt = Symbol("emittingEnd"), dt = Symbol("emittedError"), jt = Symbol("closed"), zr = Symbol("read"), Ut = Symbol("flush"), kr = Symbol("flushChunk"), K = Symbol("encoding"), Ue = Symbol("decoder"), O = Symbol("flowing"), mt = Symbol("paused"), qe = Symbol("resume"), R = Symbol("buffer"), I = Symbol("pipes"), v = Symbol("bufferLength"), $i = Symbol("bufferPush"), qt = Symbol("bufferShift"), N = Symbol("objectMode"), y = Symbol("destroyed"), Xi = Symbol("error"), Qi = Symbol("emitData"), xr = Symbol("emitEnd"), Ji = Symbol("emitEnd2"), J = Symbol("async"), es = Symbol("abort"), Wt = Symbol("aborted"), pt = Symbol("signal"), Ne = Symbol("dataListeners"), x = Symbol("discarded"), _t = (s) => Promise.resolve().then(s), No = (s) => s(), Mo = (s) => s === "end" || s === "finish" || s === "prefinish", Lo = (s) => s instanceof ArrayBuffer || !!s && typeof s == "object" && s.constructor && s.constructor.name === "ArrayBuffer" && s.byteLength >= 0, Ao = (s) => !Buffer.isBuffer(s) && ArrayBuffer.isView(s), Ht = class {
			src;
			dest;
			opts;
			ondrain;
			constructor(e, t, i) {
				this.src = e, this.dest = t, this.opts = i, this.ondrain = () => e[qe](), this.dest.on("drain", this.ondrain);
			}
			unpipe() {
				this.dest.removeListener("drain", this.ondrain);
			}
			proxyErrors(e) {}
			end() {
				this.unpipe(), this.opts.end && this.dest.end();
			}
		}, ts = class extends Ht {
			unpipe() {
				this.src.removeListener("error", this.proxyErrors), super.unpipe();
			}
			constructor(e, t, i) {
				super(e, t, i), this.proxyErrors = (r) => this.dest.emit("error", r), e.on("error", this.proxyErrors);
			}
		}, Io = (s) => !!s.objectMode, Fo = (s) => !s.objectMode && !!s.encoding && s.encoding !== "buffer", Zt = class extends is.EventEmitter {
			[O] = !1;
			[mt] = !1;
			[I] = [];
			[R] = [];
			[N];
			[K];
			[J];
			[Ue];
			[le] = !1;
			[_e] = !1;
			[xt] = !1;
			[jt] = !1;
			[dt] = null;
			[v] = 0;
			[y] = !1;
			[pt];
			[Wt] = !1;
			[Ne] = 0;
			[x] = !1;
			writable = !0;
			readable = !0;
			constructor(...e) {
				let t = e[0] || {};
				if (super(), t.objectMode && typeof t.encoding == "string") throw new TypeError("Encoding and objectMode may not be used together");
				Io(t) ? (this[N] = !0, this[K] = null) : Fo(t) ? (this[K] = t.encoding, this[N] = !1) : (this[N] = !1, this[K] = null), this[J] = !!t.async, this[Ue] = this[K] ? new vo.StringDecoder(this[K]) : null, t && t.debugExposeBuffer === !0 && Object.defineProperty(this, "buffer", { get: () => this[R] }), t && t.debugExposePipes === !0 && Object.defineProperty(this, "pipes", { get: () => this[I] });
				let { signal: i } = t;
				i && (this[pt] = i, i.aborted ? this[es]() : i.addEventListener("abort", () => this[es]()));
			}
			get bufferLength() {
				return this[v];
			}
			get encoding() {
				return this[K];
			}
			set encoding(e) {
				throw new Error("Encoding must be set at instantiation time");
			}
			setEncoding(e) {
				throw new Error("Encoding must be set at instantiation time");
			}
			get objectMode() {
				return this[N];
			}
			set objectMode(e) {
				throw new Error("objectMode must be set at instantiation time");
			}
			get async() {
				return this[J];
			}
			set async(e) {
				this[J] = this[J] || !!e;
			}
			[es]() {
				this[Wt] = !0, this.emit("abort", this[pt]?.reason), this.destroy(this[pt]?.reason);
			}
			get aborted() {
				return this[Wt];
			}
			set aborted(e) {}
			write(e, t, i) {
				if (this[Wt]) return !1;
				if (this[le]) throw new Error("write after end");
				if (this[y]) return this.emit("error", Object.assign(/* @__PURE__ */ new Error("Cannot call write after a stream was destroyed"), { code: "ERR_STREAM_DESTROYED" })), !0;
				typeof t == "function" && (i = t, t = "utf8"), t || (t = "utf8");
				let r = this[J] ? _t : No;
				if (!this[N] && !Buffer.isBuffer(e)) {
					if (Ao(e)) e = Buffer.from(e.buffer, e.byteOffset, e.byteLength);
					else if (Lo(e)) e = Buffer.from(e);
					else if (typeof e != "string") throw new Error("Non-contiguous data written to non-objectMode stream");
				}
				return this[N] ? (this[O] && this[v] !== 0 && this[Ut](!0), this[O] ? this.emit("data", e) : this[$i](e), this[v] !== 0 && this.emit("readable"), i && r(i), this[O]) : e.length ? (typeof e == "string" && !(t === this[K] && !this[Ue]?.lastNeed) && (e = Buffer.from(e, t)), Buffer.isBuffer(e) && this[K] && (e = this[Ue].write(e)), this[O] && this[v] !== 0 && this[Ut](!0), this[O] ? this.emit("data", e) : this[$i](e), this[v] !== 0 && this.emit("readable"), i && r(i), this[O]) : (this[v] !== 0 && this.emit("readable"), i && r(i), this[O]);
			}
			read(e) {
				if (this[y]) return null;
				if (this[x] = !1, this[v] === 0 || e === 0 || e && e > this[v]) return this[ue](), null;
				this[N] && (e = null), this[R].length > 1 && !this[N] && (this[R] = [this[K] ? this[R].join("") : Buffer.concat(this[R], this[v])]);
				let t = this[zr](e || null, this[R][0]);
				return this[ue](), t;
			}
			[zr](e, t) {
				if (this[N]) this[qt]();
				else {
					let i = t;
					e === i.length || e === null ? this[qt]() : typeof i == "string" ? (this[R][0] = i.slice(e), t = i.slice(0, e), this[v] -= e) : (this[R][0] = i.subarray(e), t = i.subarray(0, e), this[v] -= e);
				}
				return this.emit("data", t), !this[R].length && !this[le] && this.emit("drain"), t;
			}
			end(e, t, i) {
				return typeof e == "function" && (i = e, e = void 0), typeof t == "function" && (i = t, t = "utf8"), e !== void 0 && this.write(e, t), i && this.once("end", i), this[le] = !0, this.writable = !1, (this[O] || !this[mt]) && this[ue](), this;
			}
			[qe]() {
				this[y] || (!this[Ne] && !this[I].length && (this[x] = !0), this[mt] = !1, this[O] = !0, this.emit("resume"), this[R].length ? this[Ut]() : this[le] ? this[ue]() : this.emit("drain"));
			}
			resume() {
				return this[qe]();
			}
			pause() {
				this[O] = !1, this[mt] = !0, this[x] = !1;
			}
			get destroyed() {
				return this[y];
			}
			get flowing() {
				return this[O];
			}
			get paused() {
				return this[mt];
			}
			[$i](e) {
				this[N] ? this[v] += 1 : this[v] += e.length, this[R].push(e);
			}
			[qt]() {
				return this[N] ? this[v] -= 1 : this[v] -= this[R][0].length, this[R].shift();
			}
			[Ut](e = !1) {
				do				;
while (this[kr](this[qt]()) && this[R].length);
				!e && !this[R].length && !this[le] && this.emit("drain");
			}
			[kr](e) {
				return this.emit("data", e), this[O];
			}
			pipe(e, t) {
				if (this[y]) return e;
				this[x] = !1;
				let i = this[_e];
				return t = t || {}, e === Br.stdout || e === Br.stderr ? t.end = !1 : t.end = t.end !== !1, t.proxyErrors = !!t.proxyErrors, i ? t.end && e.end() : (this[I].push(t.proxyErrors ? new ts(this, e, t) : new Ht(this, e, t)), this[J] ? _t(() => this[qe]()) : this[qe]()), e;
			}
			unpipe(e) {
				let t = this[I].find((i) => i.dest === e);
				t && (this[I].length === 1 ? (this[O] && this[Ne] === 0 && (this[O] = !1), this[I] = []) : this[I].splice(this[I].indexOf(t), 1), t.unpipe());
			}
			addListener(e, t) {
				return this.on(e, t);
			}
			on(e, t) {
				let i = super.on(e, t);
				if (e === "data") this[x] = !1, this[Ne]++, !this[I].length && !this[O] && this[qe]();
				else if (e === "readable" && this[v] !== 0) super.emit("readable");
				else if (Mo(e) && this[_e]) super.emit(e), this.removeAllListeners(e);
				else if (e === "error" && this[dt]) {
					let r = t;
					this[J] ? _t(() => r.call(this, this[dt])) : r.call(this, this[dt]);
				}
				return i;
			}
			removeListener(e, t) {
				return this.off(e, t);
			}
			off(e, t) {
				let i = super.off(e, t);
				return e === "data" && (this[Ne] = this.listeners("data").length, this[Ne] === 0 && !this[x] && !this[I].length && (this[O] = !1)), i;
			}
			removeAllListeners(e) {
				let t = super.removeAllListeners(e);
				return (e === "data" || e === void 0) && (this[Ne] = 0, !this[x] && !this[I].length && (this[O] = !1)), t;
			}
			get emittedEnd() {
				return this[_e];
			}
			[ue]() {
				!this[xt] && !this[_e] && !this[y] && this[R].length === 0 && this[le] && (this[xt] = !0, this.emit("end"), this.emit("prefinish"), this.emit("finish"), this[jt] && this.emit("close"), this[xt] = !1);
			}
			emit(e, ...t) {
				let i = t[0];
				if (e !== "error" && e !== "close" && e !== y && this[y]) return !1;
				if (e === "data") return !this[N] && !i ? !1 : this[J] ? (_t(() => this[Qi](i)), !0) : this[Qi](i);
				if (e === "end") return this[xr]();
				if (e === "close") {
					if (this[jt] = !0, !this[_e] && !this[y]) return !1;
					let n = super.emit("close");
					return this.removeAllListeners("close"), n;
				} else if (e === "error") {
					this[dt] = i, super.emit(Xi, i);
					let n = !this[pt] || this.listeners("error").length ? super.emit("error", i) : !1;
					return this[ue](), n;
				} else if (e === "resume") {
					let n = super.emit("resume");
					return this[ue](), n;
				} else if (e === "finish" || e === "prefinish") {
					let n = super.emit(e);
					return this.removeAllListeners(e), n;
				}
				let r = super.emit(e, ...t);
				return this[ue](), r;
			}
			[Qi](e) {
				for (let i of this[I]) i.dest.write(e) === !1 && this.pause();
				let t = this[x] ? !1 : super.emit("data", e);
				return this[ue](), t;
			}
			[xr]() {
				return this[_e] ? !1 : (this[_e] = !0, this.readable = !1, this[J] ? (_t(() => this[Ji]()), !0) : this[Ji]());
			}
			[Ji]() {
				if (this[Ue]) {
					let t = this[Ue].end();
					if (t) {
						for (let i of this[I]) i.dest.write(t);
						this[x] || super.emit("data", t);
					}
				}
				for (let t of this[I]) t.end();
				let e = super.emit("end");
				return this.removeAllListeners("end"), e;
			}
			async collect() {
				let e = Object.assign([], { dataLength: 0 });
				this[N] || (e.dataLength = 0);
				let t = this.promise();
				return this.on("data", (i) => {
					e.push(i), this[N] || (e.dataLength += i.length);
				}), await t, e;
			}
			async concat() {
				if (this[N]) throw new Error("cannot concat in objectMode");
				let e = await this.collect();
				return this[K] ? e.join("") : Buffer.concat(e, e.dataLength);
			}
			async promise() {
				return new Promise((e, t) => {
					this.on(y, () => t(/* @__PURE__ */ new Error("stream destroyed"))), this.on("error", (i) => t(i)), this.on("end", () => e());
				});
			}
			[Symbol.asyncIterator]() {
				this[x] = !1;
				let e = !1, t = async () => (this.pause(), e = !0, {
					value: void 0,
					done: !0
				});
				return {
					next: () => {
						if (e) return t();
						let r = this.read();
						if (r !== null) return Promise.resolve({
							done: !1,
							value: r
						});
						if (this[le]) return t();
						let n, o, h = (c) => {
							this.off("data", a), this.off("end", l), this.off(y, u), t(), o(c);
						}, a = (c) => {
							this.off("error", h), this.off("end", l), this.off(y, u), this.pause(), n({
								value: c,
								done: !!this[le]
							});
						}, l = () => {
							this.off("error", h), this.off("data", a), this.off(y, u), t(), n({
								done: !0,
								value: void 0
							});
						}, u = () => h(/* @__PURE__ */ new Error("stream destroyed"));
						return new Promise((c, E) => {
							o = E, n = c, this.once(y, u), this.once("error", h), this.once("end", l), this.once("data", a);
						});
					},
					throw: t,
					return: t,
					[Symbol.asyncIterator]() {
						return this;
					},
					[Symbol.asyncDispose]: async () => {}
				};
			}
			[Symbol.iterator]() {
				this[x] = !1;
				let e = !1, t = () => (this.pause(), this.off(Xi, t), this.off(y, t), this.off("end", t), e = !0, {
					done: !0,
					value: void 0
				}), i = () => {
					if (e) return t();
					let r = this.read();
					return r === null ? t() : {
						done: !1,
						value: r
					};
				};
				return this.once("end", t), this.once(Xi, t), this.once(y, t), {
					next: i,
					throw: t,
					return: t,
					[Symbol.iterator]() {
						return this;
					},
					[Symbol.dispose]: () => {}
				};
			}
			destroy(e) {
				if (this[y]) return e ? this.emit("error", e) : this.emit(y), this;
				this[y] = !0, this[x] = !0, this[R].length = 0, this[v] = 0;
				let t = this;
				return typeof t.close == "function" && !this[jt] && t.close(), e ? this.emit("error", e) : this.emit(y), this;
			}
			static get isStream() {
				return F.isStream;
			}
		};
		F.Minipass = Zt;
	});
	var Ke = d((W) => {
		"use strict";
		var Ur = W && W.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(W, "__esModule", { value: !0 });
		W.WriteStreamSync = W.WriteStream = W.ReadStreamSync = W.ReadStream = void 0;
		var Co = Ur(require("events")), z = Ur(require("fs")), Bo = We(), zo = z.default.writev, ye = Symbol("_autoClose"), $ = Symbol("_close"), wt = Symbol("_ended"), p = Symbol("_fd"), ss = Symbol("_finished"), fe = Symbol("_flags"), rs = Symbol("_flush"), hs = Symbol("_handleChunk"), ls = Symbol("_makeBuf"), Et = Symbol("_mode"), Gt = Symbol("_needDrain"), Ge = Symbol("_onerror"), Ye = Symbol("_onopen"), ns = Symbol("_onread"), He = Symbol("_onwrite"), Ee = Symbol("_open"), V = Symbol("_path"), we = Symbol("_pos"), ee = Symbol("_queue"), Ze = Symbol("_read"), os = Symbol("_readSize"), ce = Symbol("_reading"), yt = Symbol("_remain"), as = Symbol("_size"), Yt = Symbol("_write"), Me = Symbol("_writing"), Kt = Symbol("_defaultFlag"), Le = Symbol("_errored"), Vt = class extends Bo.Minipass {
			[Le] = !1;
			[p];
			[V];
			[os];
			[ce] = !1;
			[as];
			[yt];
			[ye];
			constructor(e, t) {
				if (t = t || {}, super(t), this.readable = !0, this.writable = !1, typeof e != "string") throw new TypeError("path must be a string");
				this[Le] = !1, this[p] = typeof t.fd == "number" ? t.fd : void 0, this[V] = e, this[os] = t.readSize || 16 * 1024 * 1024, this[ce] = !1, this[as] = typeof t.size == "number" ? t.size : Infinity, this[yt] = this[as], this[ye] = typeof t.autoClose == "boolean" ? t.autoClose : !0, typeof this[p] == "number" ? this[Ze]() : this[Ee]();
			}
			get fd() {
				return this[p];
			}
			get path() {
				return this[V];
			}
			write() {
				throw new TypeError("this is a readable stream");
			}
			end() {
				throw new TypeError("this is a readable stream");
			}
			[Ee]() {
				z.default.open(this[V], "r", (e, t) => this[Ye](e, t));
			}
			[Ye](e, t) {
				e ? this[Ge](e) : (this[p] = t, this.emit("open", t), this[Ze]());
			}
			[ls]() {
				return Buffer.allocUnsafe(Math.min(this[os], this[yt]));
			}
			[Ze]() {
				if (!this[ce]) {
					this[ce] = !0;
					let e = this[ls]();
					if (e.length === 0) return process.nextTick(() => this[ns](null, 0, e));
					z.default.read(this[p], e, 0, e.length, null, (t, i, r) => this[ns](t, i, r));
				}
			}
			[ns](e, t, i) {
				this[ce] = !1, e ? this[Ge](e) : this[hs](t, i) && this[Ze]();
			}
			[$]() {
				if (this[ye] && typeof this[p] == "number") {
					let e = this[p];
					this[p] = void 0, z.default.close(e, (t) => t ? this.emit("error", t) : this.emit("close"));
				}
			}
			[Ge](e) {
				this[ce] = !0, this[$](), this.emit("error", e);
			}
			[hs](e, t) {
				let i = !1;
				return this[yt] -= e, e > 0 && (i = super.write(e < t.length ? t.subarray(0, e) : t)), (e === 0 || this[yt] <= 0) && (i = !1, this[$](), super.end()), i;
			}
			emit(e, ...t) {
				switch (e) {
					case "prefinish":
					case "finish": return !1;
					case "drain": return typeof this[p] == "number" && this[Ze](), !1;
					case "error": return this[Le] ? !1 : (this[Le] = !0, super.emit(e, ...t));
					default: return super.emit(e, ...t);
				}
			}
		};
		W.ReadStream = Vt;
		var us = class extends Vt {
			[Ee]() {
				let e = !0;
				try {
					this[Ye](null, z.default.openSync(this[V], "r")), e = !1;
				} finally {
					e && this[$]();
				}
			}
			[Ze]() {
				let e = !0;
				try {
					if (!this[ce]) {
						this[ce] = !0;
						do {
							let t = this[ls](), i = t.length === 0 ? 0 : z.default.readSync(this[p], t, 0, t.length, null);
							if (!this[hs](i, t)) break;
						} while (!0);
						this[ce] = !1;
					}
					e = !1;
				} finally {
					e && this[$]();
				}
			}
			[$]() {
				if (this[ye] && typeof this[p] == "number") {
					let e = this[p];
					this[p] = void 0, z.default.closeSync(e), this.emit("close");
				}
			}
		};
		W.ReadStreamSync = us;
		var $t = class extends Co.default {
			readable = !1;
			writable = !0;
			[Le] = !1;
			[Me] = !1;
			[wt] = !1;
			[ee] = [];
			[Gt] = !1;
			[V];
			[Et];
			[ye];
			[p];
			[Kt];
			[fe];
			[ss] = !1;
			[we];
			constructor(e, t) {
				t = t || {}, super(t), this[V] = e, this[p] = typeof t.fd == "number" ? t.fd : void 0, this[Et] = t.mode === void 0 ? 438 : t.mode, this[we] = typeof t.start == "number" ? t.start : void 0, this[ye] = typeof t.autoClose == "boolean" ? t.autoClose : !0;
				let i = this[we] !== void 0 ? "r+" : "w";
				this[Kt] = t.flags === void 0, this[fe] = t.flags === void 0 ? i : t.flags, this[p] === void 0 && this[Ee]();
			}
			emit(e, ...t) {
				if (e === "error") {
					if (this[Le]) return !1;
					this[Le] = !0;
				}
				return super.emit(e, ...t);
			}
			get fd() {
				return this[p];
			}
			get path() {
				return this[V];
			}
			[Ge](e) {
				this[$](), this[Me] = !0, this.emit("error", e);
			}
			[Ee]() {
				z.default.open(this[V], this[fe], this[Et], (e, t) => this[Ye](e, t));
			}
			[Ye](e, t) {
				this[Kt] && this[fe] === "r+" && e && e.code === "ENOENT" ? (this[fe] = "w", this[Ee]()) : e ? this[Ge](e) : (this[p] = t, this.emit("open", t), this[Me] || this[rs]());
			}
			end(e, t) {
				return e && this.write(e, t), this[wt] = !0, !this[Me] && !this[ee].length && typeof this[p] == "number" && this[He](null, 0), this;
			}
			write(e, t) {
				return typeof e == "string" && (e = Buffer.from(e, t)), this[wt] ? (this.emit("error", /* @__PURE__ */ new Error("write() after end()")), !1) : this[p] === void 0 || this[Me] || this[ee].length ? (this[ee].push(e), this[Gt] = !0, !1) : (this[Me] = !0, this[Yt](e), !0);
			}
			[Yt](e) {
				z.default.write(this[p], e, 0, e.length, this[we], (t, i) => this[He](t, i));
			}
			[He](e, t) {
				e ? this[Ge](e) : (this[we] !== void 0 && typeof t == "number" && (this[we] += t), this[ee].length ? this[rs]() : (this[Me] = !1, this[wt] && !this[ss] ? (this[ss] = !0, this[$](), this.emit("finish")) : this[Gt] && (this[Gt] = !1, this.emit("drain"))));
			}
			[rs]() {
				if (this[ee].length === 0) this[wt] && this[He](null, 0);
				else if (this[ee].length === 1) this[Yt](this[ee].pop());
				else {
					let e = this[ee];
					this[ee] = [], zo(this[p], e, this[we], (t, i) => this[He](t, i));
				}
			}
			[$]() {
				if (this[ye] && typeof this[p] == "number") {
					let e = this[p];
					this[p] = void 0, z.default.close(e, (t) => t ? this.emit("error", t) : this.emit("close"));
				}
			}
		};
		W.WriteStream = $t;
		var cs = class extends $t {
			[Ee]() {
				let e;
				if (this[Kt] && this[fe] === "r+") try {
					e = z.default.openSync(this[V], this[fe], this[Et]);
				} catch (t) {
					if (t?.code === "ENOENT") return this[fe] = "w", this[Ee]();
					throw t;
				}
				else e = z.default.openSync(this[V], this[fe], this[Et]);
				this[Ye](null, e);
			}
			[$]() {
				if (this[ye] && typeof this[p] == "number") {
					let e = this[p];
					this[p] = void 0, z.default.closeSync(e), this.emit("close");
				}
			}
			[Yt](e) {
				let t = !0;
				try {
					this[He](null, z.default.writeSync(this[p], e, 0, e.length, this[we])), t = !1;
				} finally {
					if (t) try {
						this[$]();
					} catch {}
				}
			}
		};
		W.WriteStreamSync = cs;
	});
	var Xt = d((b) => {
		"use strict";
		Object.defineProperty(b, "__esModule", { value: !0 });
		b.dealias = b.isNoFile = b.isFile = b.isAsync = b.isSync = b.isAsyncNoFile = b.isSyncNoFile = b.isAsyncFile = b.isSyncFile = void 0;
		var ko = new Map([
			["C", "cwd"],
			["f", "file"],
			["z", "gzip"],
			["P", "preservePaths"],
			["U", "unlink"],
			["strip-components", "strip"],
			["stripComponents", "strip"],
			["keep-newer", "newer"],
			["keepNewer", "newer"],
			["keep-newer-files", "newer"],
			["keepNewerFiles", "newer"],
			["k", "keep"],
			["keep-existing", "keep"],
			["keepExisting", "keep"],
			["m", "noMtime"],
			["no-mtime", "noMtime"],
			["p", "preserveOwner"],
			["L", "follow"],
			["h", "follow"],
			["onentry", "onReadEntry"]
		]), xo = (s) => !!s.sync && !!s.file;
		b.isSyncFile = xo;
		var jo = (s) => !s.sync && !!s.file;
		b.isAsyncFile = jo;
		var Uo = (s) => !!s.sync && !s.file;
		b.isSyncNoFile = Uo;
		var qo = (s) => !s.sync && !s.file;
		b.isAsyncNoFile = qo;
		var Wo = (s) => !!s.sync;
		b.isSync = Wo;
		var Ho = (s) => !s.sync;
		b.isAsync = Ho;
		var Zo = (s) => !!s.file;
		b.isFile = Zo;
		var Go = (s) => !s.file;
		b.isNoFile = Go;
		var Yo = (s) => {
			return ko.get(s) || s;
		}, Ko = (s = {}) => {
			if (!s) return {};
			let e = {};
			for (let [t, i] of Object.entries(s)) {
				let r = Yo(t);
				e[r] = i;
			}
			return e.chmod === void 0 && e.noChmod === !1 && (e.chmod = !0), delete e.noChmod, e;
		};
		b.dealias = Ko;
	});
	var Ve = d((Qt) => {
		"use strict";
		Object.defineProperty(Qt, "__esModule", { value: !0 });
		Qt.makeCommand = void 0;
		var bt = Xt(), Vo = (s, e, t, i, r) => Object.assign((n = [], o, h) => {
			Array.isArray(n) && (o = n, n = {}), typeof o == "function" && (h = o, o = void 0), o = o ? Array.from(o) : [];
			let a = (0, bt.dealias)(n);
			if (r?.(a, o), (0, bt.isSyncFile)(a)) {
				if (typeof h == "function") throw new TypeError("callback not supported for sync tar functions");
				return s(a, o);
			} else if ((0, bt.isAsyncFile)(a)) {
				let l = e(a, o);
				return h ? l.then(() => h(), h) : l;
			} else if ((0, bt.isSyncNoFile)(a)) {
				if (typeof h == "function") throw new TypeError("callback not supported for sync tar functions");
				return t(a, o);
			} else if ((0, bt.isAsyncNoFile)(a)) {
				if (typeof h == "function") throw new TypeError("callback only supported with file option");
				return i(a, o);
			}
			throw new Error("impossible options??");
		}, {
			syncFile: s,
			asyncFile: e,
			syncNoFile: t,
			asyncNoFile: i,
			validate: r
		});
		Qt.makeCommand = Vo;
	});
	var fs$3 = d(($e) => {
		"use strict";
		var $o = $e && $e.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty($e, "__esModule", { value: !0 });
		$e.constants = void 0;
		var Qo = $o(require("zlib")).default.constants || { ZLIB_VERNUM: 4736 };
		$e.constants = Object.freeze(Object.assign(Object.create(null), {
			Z_NO_FLUSH: 0,
			Z_PARTIAL_FLUSH: 1,
			Z_SYNC_FLUSH: 2,
			Z_FULL_FLUSH: 3,
			Z_FINISH: 4,
			Z_BLOCK: 5,
			Z_OK: 0,
			Z_STREAM_END: 1,
			Z_NEED_DICT: 2,
			Z_ERRNO: -1,
			Z_STREAM_ERROR: -2,
			Z_DATA_ERROR: -3,
			Z_MEM_ERROR: -4,
			Z_BUF_ERROR: -5,
			Z_VERSION_ERROR: -6,
			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,
			DEFLATE: 1,
			INFLATE: 2,
			GZIP: 3,
			GUNZIP: 4,
			DEFLATERAW: 5,
			INFLATERAW: 6,
			UNZIP: 7,
			BROTLI_DECODE: 8,
			BROTLI_ENCODE: 9,
			Z_MIN_WINDOWBITS: 8,
			Z_MAX_WINDOWBITS: 15,
			Z_DEFAULT_WINDOWBITS: 15,
			Z_MIN_CHUNK: 64,
			Z_MAX_CHUNK: Infinity,
			Z_DEFAULT_CHUNK: 16384,
			Z_MIN_MEMLEVEL: 1,
			Z_MAX_MEMLEVEL: 9,
			Z_DEFAULT_MEMLEVEL: 8,
			Z_MIN_LEVEL: -1,
			Z_MAX_LEVEL: 9,
			Z_DEFAULT_LEVEL: -1,
			BROTLI_OPERATION_PROCESS: 0,
			BROTLI_OPERATION_FLUSH: 1,
			BROTLI_OPERATION_FINISH: 2,
			BROTLI_OPERATION_EMIT_METADATA: 3,
			BROTLI_MODE_GENERIC: 0,
			BROTLI_MODE_TEXT: 1,
			BROTLI_MODE_FONT: 2,
			BROTLI_DEFAULT_MODE: 0,
			BROTLI_MIN_QUALITY: 0,
			BROTLI_MAX_QUALITY: 11,
			BROTLI_DEFAULT_QUALITY: 11,
			BROTLI_MIN_WINDOW_BITS: 10,
			BROTLI_MAX_WINDOW_BITS: 24,
			BROTLI_LARGE_MAX_WINDOW_BITS: 30,
			BROTLI_DEFAULT_WINDOW: 22,
			BROTLI_MIN_INPUT_BLOCK_BITS: 16,
			BROTLI_MAX_INPUT_BLOCK_BITS: 24,
			BROTLI_PARAM_MODE: 0,
			BROTLI_PARAM_QUALITY: 1,
			BROTLI_PARAM_LGWIN: 2,
			BROTLI_PARAM_LGBLOCK: 3,
			BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,
			BROTLI_PARAM_SIZE_HINT: 5,
			BROTLI_PARAM_LARGE_WINDOW: 6,
			BROTLI_PARAM_NPOSTFIX: 7,
			BROTLI_PARAM_NDIRECT: 8,
			BROTLI_DECODER_RESULT_ERROR: 0,
			BROTLI_DECODER_RESULT_SUCCESS: 1,
			BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,
			BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,
			BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,
			BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,
			BROTLI_DECODER_NO_ERROR: 0,
			BROTLI_DECODER_SUCCESS: 1,
			BROTLI_DECODER_NEEDS_MORE_INPUT: 2,
			BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,
			BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,
			BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,
			BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,
			BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,
			BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,
			BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,
			BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,
			BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,
			BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,
			BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,
			BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,
			BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,
			BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,
			BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,
			BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,
			BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,
			BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,
			BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,
			BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,
			BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,
			BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,
			BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,
			BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,
			BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,
			BROTLI_DECODER_ERROR_UNREACHABLE: -31
		}, Qo));
	});
	var Ds = d((f) => {
		"use strict";
		var Jo = f && f.__createBinding || (Object.create ? (function(s, e, t, i) {
			i === void 0 && (i = t);
			var r = Object.getOwnPropertyDescriptor(e, t);
			(!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = {
				enumerable: !0,
				get: function() {
					return e[t];
				}
			}), Object.defineProperty(s, i, r);
		}) : (function(s, e, t, i) {
			i === void 0 && (i = t), s[i] = e[t];
		})), ea = f && f.__setModuleDefault || (Object.create ? (function(s, e) {
			Object.defineProperty(s, "default", {
				enumerable: !0,
				value: e
			});
		}) : function(s, e) {
			s.default = e;
		}), ta = f && f.__importStar || (function() {
			var s = function(e) {
				return s = Object.getOwnPropertyNames || function(t) {
					var i = [];
					for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
					return i;
				}, s(e);
			};
			return function(e) {
				if (e && e.__esModule) return e;
				var t = {};
				if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && Jo(t, e, i[r]);
				return ea(t, e), t;
			};
		})(), ia = f && f.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(f, "__esModule", { value: !0 });
		f.ZstdDecompress = f.ZstdCompress = f.BrotliDecompress = f.BrotliCompress = f.Unzip = f.InflateRaw = f.DeflateRaw = f.Gunzip = f.Gzip = f.Inflate = f.Deflate = f.Zlib = f.ZlibError = f.constants = void 0;
		var ps = ia(require("assert")), Ae = require("buffer"), sa = We(), qr = ta(require("zlib")), te = fs$3(), ra = fs$3();
		Object.defineProperty(f, "constants", {
			enumerable: !0,
			get: function() {
				return ra.constants;
			}
		});
		var na = Ae.Buffer.concat, Wr = Object.getOwnPropertyDescriptor(Ae.Buffer, "concat"), oa = (s) => s, ds = Wr?.writable === !0 || Wr?.set !== void 0 ? (s) => {
			Ae.Buffer.concat = s ? oa : na;
		} : (s) => {}, Ie = Symbol("_superWrite"), Fe = class extends Error {
			code;
			errno;
			constructor(e, t) {
				super("zlib: " + e.message, { cause: e }), this.code = e.code, this.errno = e.errno, this.code || (this.code = "ZLIB_ERROR"), this.message = "zlib: " + e.message, Error.captureStackTrace(this, t ?? this.constructor);
			}
			get name() {
				return "ZlibError";
			}
		};
		f.ZlibError = Fe;
		var ms = Symbol("flushFlag"), St = class extends sa.Minipass {
			#e = !1;
			#i = !1;
			#s;
			#n;
			#r;
			#t;
			#o;
			get sawError() {
				return this.#e;
			}
			get handle() {
				return this.#t;
			}
			get flushFlag() {
				return this.#s;
			}
			constructor(e, t) {
				if (!e || typeof e != "object") throw new TypeError("invalid options for ZlibBase constructor");
				if (super(e), this.#s = e.flush ?? 0, this.#n = e.finishFlush ?? 0, this.#r = e.fullFlushFlag ?? 0, typeof qr[t] != "function") throw new TypeError("Compression method not supported: " + t);
				try {
					this.#t = new qr[t](e);
				} catch (i) {
					throw new Fe(i, this.constructor);
				}
				this.#o = (i) => {
					this.#e || (this.#e = !0, this.close(), this.emit("error", i));
				}, this.#t?.on("error", (i) => this.#o(new Fe(i))), this.once("end", () => this.close);
			}
			close() {
				this.#t && (this.#t.close(), this.#t = void 0, this.emit("close"));
			}
			reset() {
				if (!this.#e) return (0, ps.default)(this.#t, "zlib binding closed"), this.#t.reset?.();
			}
			flush(e) {
				this.ended || (typeof e != "number" && (e = this.#r), this.write(Object.assign(Ae.Buffer.alloc(0), { [ms]: e })));
			}
			end(e, t, i) {
				return typeof e == "function" && (i = e, t = void 0, e = void 0), typeof t == "function" && (i = t, t = void 0), e && (t ? this.write(e, t) : this.write(e)), this.flush(this.#n), this.#i = !0, super.end(i);
			}
			get ended() {
				return this.#i;
			}
			[Ie](e) {
				return super.write(e);
			}
			write(e, t, i) {
				if (typeof t == "function" && (i = t, t = "utf8"), typeof e == "string" && (e = Ae.Buffer.from(e, t)), this.#e) return;
				(0, ps.default)(this.#t, "zlib binding closed");
				let r = this.#t._handle, n = r.close;
				r.close = () => {};
				let o = this.#t.close;
				this.#t.close = () => {}, ds(!0);
				let h;
				try {
					let l = typeof e[ms] == "number" ? e[ms] : this.#s;
					h = this.#t._processChunk(e, l), ds(!1);
				} catch (l) {
					ds(!1), this.#o(new Fe(l, this.write));
				} finally {
					this.#t && (this.#t._handle = r, r.close = n, this.#t.close = o, this.#t.removeAllListeners("error"));
				}
				this.#t && this.#t.on("error", (l) => this.#o(new Fe(l, this.write)));
				let a;
				if (h) if (Array.isArray(h) && h.length > 0) {
					let l = h[0];
					a = this[Ie](Ae.Buffer.from(l));
					for (let u = 1; u < h.length; u++) a = this[Ie](h[u]);
				} else a = this[Ie](Ae.Buffer.from(h));
				return i && i(), a;
			}
		}, ie = class extends St {
			#e;
			#i;
			constructor(e, t) {
				e = e || {}, e.flush = e.flush || te.constants.Z_NO_FLUSH, e.finishFlush = e.finishFlush || te.constants.Z_FINISH, e.fullFlushFlag = te.constants.Z_FULL_FLUSH, super(e, t), this.#e = e.level, this.#i = e.strategy;
			}
			params(e, t) {
				if (!this.sawError) {
					if (!this.handle) throw new Error("cannot switch params when binding is closed");
					if (!this.handle.params) throw new Error("not supported in this implementation");
					if (this.#e !== e || this.#i !== t) {
						this.flush(te.constants.Z_SYNC_FLUSH), (0, ps.default)(this.handle, "zlib binding closed");
						let i = this.handle.flush;
						this.handle.flush = (r, n) => {
							typeof r == "function" && (n = r, r = this.flushFlag), this.flush(r), n?.();
						};
						try {
							this.handle.params(e, t);
						} finally {
							this.handle.flush = i;
						}
						this.handle && (this.#e = e, this.#i = t);
					}
				}
			}
		};
		f.Zlib = ie;
		var _s = class extends ie {
			constructor(e) {
				super(e, "Deflate");
			}
		};
		f.Deflate = _s;
		var ws = class extends ie {
			constructor(e) {
				super(e, "Inflate");
			}
		};
		f.Inflate = ws;
		var ys = class extends ie {
			#e;
			constructor(e) {
				super(e, "Gzip"), this.#e = e && !!e.portable;
			}
			[Ie](e) {
				return this.#e ? (this.#e = !1, e[9] = 255, super[Ie](e)) : super[Ie](e);
			}
		};
		f.Gzip = ys;
		var Es = class extends ie {
			constructor(e) {
				super(e, "Gunzip");
			}
		};
		f.Gunzip = Es;
		var bs = class extends ie {
			constructor(e) {
				super(e, "DeflateRaw");
			}
		};
		f.DeflateRaw = bs;
		var Ss = class extends ie {
			constructor(e) {
				super(e, "InflateRaw");
			}
		};
		f.InflateRaw = Ss;
		var gs = class extends ie {
			constructor(e) {
				super(e, "Unzip");
			}
		};
		f.Unzip = gs;
		var Jt = class extends St {
			constructor(e, t) {
				e = e || {}, e.flush = e.flush || te.constants.BROTLI_OPERATION_PROCESS, e.finishFlush = e.finishFlush || te.constants.BROTLI_OPERATION_FINISH, e.fullFlushFlag = te.constants.BROTLI_OPERATION_FLUSH, super(e, t);
			}
		}, Os = class extends Jt {
			constructor(e) {
				super(e, "BrotliCompress");
			}
		};
		f.BrotliCompress = Os;
		var Rs = class extends Jt {
			constructor(e) {
				super(e, "BrotliDecompress");
			}
		};
		f.BrotliDecompress = Rs;
		var ei = class extends St {
			constructor(e, t) {
				e = e || {}, e.flush = e.flush || te.constants.ZSTD_e_continue, e.finishFlush = e.finishFlush || te.constants.ZSTD_e_end, e.fullFlushFlag = te.constants.ZSTD_e_flush, super(e, t);
			}
		}, vs = class extends ei {
			constructor(e) {
				super(e, "ZstdCompress");
			}
		};
		f.ZstdCompress = vs;
		var Ts = class extends ei {
			constructor(e) {
				super(e, "ZstdDecompress");
			}
		};
		f.ZstdDecompress = Ts;
	});
	var Gr = d((Xe) => {
		"use strict";
		Object.defineProperty(Xe, "__esModule", { value: !0 });
		Xe.parse = Xe.encode = void 0;
		var aa = (s, e) => {
			if (Number.isSafeInteger(s)) s < 0 ? la(s, e) : ha(s, e);
			else throw Error("cannot encode number outside of javascript safe integer range");
			return e;
		};
		Xe.encode = aa;
		var ha = (s, e) => {
			e[0] = 128;
			for (var t = e.length; t > 1; t--) e[t - 1] = s & 255, s = Math.floor(s / 256);
		}, la = (s, e) => {
			e[0] = 255;
			var t = !1;
			s = s * -1;
			for (var i = e.length; i > 1; i--) {
				var r = s & 255;
				s = Math.floor(s / 256), t ? e[i - 1] = Hr(r) : r === 0 ? e[i - 1] = 0 : (t = !0, e[i - 1] = Zr(r));
			}
		}, ua = (s) => {
			let e = s[0], t = e === 128 ? fa(s.subarray(1, s.length)) : e === 255 ? ca(s) : null;
			if (t === null) throw Error("invalid base256 encoding");
			if (!Number.isSafeInteger(t)) throw Error("parsed number outside of javascript safe integer range");
			return t;
		};
		Xe.parse = ua;
		var ca = (s) => {
			for (var e = s.length, t = 0, i = !1, r = e - 1; r > -1; r--) {
				var n = Number(s[r]), o;
				i ? o = Hr(n) : n === 0 ? o = n : (i = !0, o = Zr(n)), o !== 0 && (t -= o * Math.pow(256, e - r - 1));
			}
			return t;
		}, fa = (s) => {
			for (var e = s.length, t = 0, i = e - 1; i > -1; i--) {
				var r = Number(s[i]);
				r !== 0 && (t += r * Math.pow(256, e - i - 1));
			}
			return t;
		}, Hr = (s) => (255 ^ s) & 255, Zr = (s) => (255 ^ s) + 1 & 255;
	});
	var Ps = d((C) => {
		"use strict";
		Object.defineProperty(C, "__esModule", { value: !0 });
		C.code = C.name = C.normalFsTypes = C.isName = C.isCode = void 0;
		var da = (s) => C.name.has(s);
		C.isCode = da;
		var ma = (s) => C.code.has(s);
		C.isName = ma;
		C.normalFsTypes = new Set([
			"0",
			"",
			"1",
			"2",
			"3",
			"4",
			"5",
			"6",
			"7",
			"D"
		]);
		C.name = new Map([
			["0", "File"],
			["", "OldFile"],
			["1", "Link"],
			["2", "SymbolicLink"],
			["3", "CharacterDevice"],
			["4", "BlockDevice"],
			["5", "Directory"],
			["6", "FIFO"],
			["7", "ContiguousFile"],
			["g", "GlobalExtendedHeader"],
			["x", "ExtendedHeader"],
			["A", "SolarisACL"],
			["D", "GNUDumpDir"],
			["I", "Inode"],
			["K", "NextFileHasLongLinkpath"],
			["L", "NextFileHasLongPath"],
			["M", "ContinuationFile"],
			["N", "OldGnuLongPath"],
			["S", "SparseFile"],
			["V", "TapeVolumeHeader"],
			["X", "OldExtendedHeader"]
		]);
		C.code = new Map(Array.from(C.name).map((s) => [s[1], s[0]]));
	});
	var et = d((se) => {
		"use strict";
		var pa = se && se.__createBinding || (Object.create ? (function(s, e, t, i) {
			i === void 0 && (i = t);
			var r = Object.getOwnPropertyDescriptor(e, t);
			(!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = {
				enumerable: !0,
				get: function() {
					return e[t];
				}
			}), Object.defineProperty(s, i, r);
		}) : (function(s, e, t, i) {
			i === void 0 && (i = t), s[i] = e[t];
		})), _a = se && se.__setModuleDefault || (Object.create ? (function(s, e) {
			Object.defineProperty(s, "default", {
				enumerable: !0,
				value: e
			});
		}) : function(s, e) {
			s.default = e;
		}), Yr = se && se.__importStar || (function() {
			var s = function(e) {
				return s = Object.getOwnPropertyNames || function(t) {
					var i = [];
					for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
					return i;
				}, s(e);
			};
			return function(e) {
				if (e && e.__esModule) return e;
				var t = {};
				if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && pa(t, e, i[r]);
				return _a(t, e), t;
			};
		})();
		Object.defineProperty(se, "__esModule", { value: !0 });
		se.Header = void 0;
		var Qe = require("node:path"), Kr = Yr(Gr()), Je = Yr(Ps()), Ls = class {
			cksumValid = !1;
			needPax = !1;
			nullBlock = !1;
			block;
			path;
			mode;
			uid;
			gid;
			size;
			cksum;
			#e = "Unsupported";
			linkpath;
			uname;
			gname;
			devmaj = 0;
			devmin = 0;
			atime;
			ctime;
			mtime;
			charset;
			comment;
			constructor(e, t = 0, i, r) {
				Buffer.isBuffer(e) ? this.decode(e, t || 0, i, r) : e && this.#i(e);
			}
			decode(e, t, i, r) {
				if (t || (t = 0), !e || !(e.length >= t + 512)) throw new Error("need 512 bytes for header");
				let n = Ce(e, t + 156, 1), o = Je.normalFsTypes.has(n), h = o ? i : void 0, a = o ? r : void 0;
				if (this.path = h?.path ?? Ce(e, t, 100), this.mode = h?.mode ?? a?.mode ?? be(e, t + 100, 8), this.uid = h?.uid ?? a?.uid ?? be(e, t + 108, 8), this.gid = h?.gid ?? a?.gid ?? be(e, t + 116, 8), this.size = h?.size ?? a?.size ?? be(e, t + 124, 12), this.mtime = h?.mtime ?? a?.mtime ?? Ns(e, t + 136, 12), this.cksum = be(e, t + 148, 12), a && this.#i(a, !0), h && this.#i(h), Je.isCode(n) && (this.#e = n || "0"), this.#e === "0" && this.path.slice(-1) === "/" && (this.#e = "5"), this.#e === "5" && (this.size = 0), this.linkpath = Ce(e, t + 157, 100), e.subarray(t + 257, t + 265).toString() === "ustar\x0000") if (this.uname = h?.uname ?? a?.uname ?? Ce(e, t + 265, 32), this.gname = h?.gname ?? a?.gname ?? Ce(e, t + 297, 32), this.devmaj = h?.devmaj ?? a?.devmaj ?? be(e, t + 329, 8) ?? 0, this.devmin = h?.devmin ?? a?.devmin ?? be(e, t + 337, 8) ?? 0, e[t + 475] !== 0) {
					let u = Ce(e, t + 345, 155);
					this.path = u + "/" + this.path;
				} else {
					let u = Ce(e, t + 345, 130);
					u && (this.path = u + "/" + this.path), this.atime = i?.atime ?? r?.atime ?? Ns(e, t + 476, 12), this.ctime = i?.ctime ?? r?.ctime ?? Ns(e, t + 488, 12);
				}
				let l = 256;
				for (let u = t; u < t + 148; u++) l += e[u];
				for (let u = t + 156; u < t + 512; u++) l += e[u];
				this.cksumValid = l === this.cksum, this.cksum === void 0 && l === 256 && (this.nullBlock = !0);
			}
			#i(e, t = !1) {
				Object.assign(this, Object.fromEntries(Object.entries(e).filter(([i, r]) => !(r == null || i === "path" && t || i === "linkpath" && t || i === "global"))));
			}
			encode(e, t = 0) {
				if (e || (e = this.block = Buffer.alloc(512)), this.#e === "Unsupported" && (this.#e = "0"), !(e.length >= t + 512)) throw new Error("need 512 bytes for header");
				let i = this.ctime || this.atime ? 130 : 155, r = wa(this.path || "", i), n = r[0], o = r[1];
				this.needPax = !!r[2], this.needPax = Be(e, t, 100, n) || this.needPax, this.needPax = Se(e, t + 100, 8, this.mode) || this.needPax, this.needPax = Se(e, t + 108, 8, this.uid) || this.needPax, this.needPax = Se(e, t + 116, 8, this.gid) || this.needPax, this.needPax = Se(e, t + 124, 12, this.size) || this.needPax, this.needPax = Ms(e, t + 136, 12, this.mtime) || this.needPax, e[t + 156] = Number(this.#e.codePointAt(0)), this.needPax = Be(e, t + 157, 100, this.linkpath) || this.needPax, e.write("ustar\x0000", t + 257, 8), this.needPax = Be(e, t + 265, 32, this.uname) || this.needPax, this.needPax = Be(e, t + 297, 32, this.gname) || this.needPax, this.needPax = Se(e, t + 329, 8, this.devmaj) || this.needPax, this.needPax = Se(e, t + 337, 8, this.devmin) || this.needPax, this.needPax = Be(e, t + 345, i, o) || this.needPax, e[t + 475] !== 0 ? this.needPax = Be(e, t + 345, 155, o) || this.needPax : (this.needPax = Be(e, t + 345, 130, o) || this.needPax, this.needPax = Ms(e, t + 476, 12, this.atime) || this.needPax, this.needPax = Ms(e, t + 488, 12, this.ctime) || this.needPax);
				let h = 256;
				for (let a = t; a < t + 148; a++) h += e[a];
				for (let a = t + 156; a < t + 512; a++) h += e[a];
				return this.cksum = h, Se(e, t + 148, 8, this.cksum), this.cksumValid = !0, this.needPax;
			}
			get type() {
				return this.#e === "Unsupported" ? this.#e : Je.name.get(this.#e);
			}
			get typeKey() {
				return this.#e;
			}
			set type(e) {
				let t = String(Je.code.get(e));
				if (Je.isCode(t) || t === "Unsupported") this.#e = t;
				else if (Je.isCode(e)) this.#e = e;
				else throw new TypeError("invalid entry type: " + e);
			}
		};
		se.Header = Ls;
		var wa = (s, e) => {
			let i = s, r = "", n, o = Qe.posix.parse(s).root || ".";
			if (Buffer.byteLength(i) < 100) n = [
				i,
				r,
				!1
			];
			else {
				r = Qe.posix.dirname(i), i = Qe.posix.basename(i);
				do
					Buffer.byteLength(i) <= 100 && Buffer.byteLength(r) <= e ? n = [
						i,
						r,
						!1
					] : Buffer.byteLength(i) > 100 && Buffer.byteLength(r) <= e ? n = [
						i.slice(0, 99),
						r,
						!0
					] : (i = Qe.posix.join(Qe.posix.basename(r), i), r = Qe.posix.dirname(r));
				while (r !== o && n === void 0);
				n || (n = [
					s.slice(0, 99),
					"",
					!0
				]);
			}
			return n;
		}, Ce = (s, e, t) => s.subarray(e, e + t).toString("utf8").replace(/\0.*/, ""), Ns = (s, e, t) => ya(be(s, e, t)), ya = (s) => s === void 0 ? void 0 : /* @__PURE__ */ new Date(s * 1e3), be = (s, e, t) => Number(s[e]) & 128 ? Kr.parse(s.subarray(e, e + t)) : ba(s, e, t), Ea = (s) => isNaN(s) ? void 0 : s, ba = (s, e, t) => Ea(parseInt(s.subarray(e, e + t).toString("utf8").replace(/\0.*$/, "").trim(), 8)), Sa = {
			12: 8589934591,
			8: 2097151
		}, Se = (s, e, t, i) => i === void 0 ? !1 : i > Sa[t] || i < 0 ? (Kr.encode(i, s.subarray(e, e + t)), !0) : (ga(s, e, t, i), !1), ga = (s, e, t, i) => s.write(Oa(i, t), e, t, "ascii"), Oa = (s, e) => Ra(Math.floor(s).toString(8), e), Ra = (s, e) => (s.length === e - 1 ? s : new Array(e - s.length - 1).join("0") + s + " ") + "\0", Ms = (s, e, t, i) => i === void 0 ? !1 : Se(s, e, t, i.getTime() / 1e3), va = new Array(156).join("\0"), Be = (s, e, t, i) => i === void 0 ? !1 : (s.write(i + va, e, t, "utf8"), i.length !== Buffer.byteLength(i) || i.length > t);
	});
	var ii = d((ti) => {
		"use strict";
		Object.defineProperty(ti, "__esModule", { value: !0 });
		ti.Pax = void 0;
		var Ta = require("node:path"), Da = et();
		ti.Pax = class s {
			atime;
			mtime;
			ctime;
			charset;
			comment;
			gid;
			uid;
			gname;
			uname;
			linkpath;
			dev;
			ino;
			nlink;
			path;
			size;
			mode;
			global;
			constructor(e, t = !1) {
				this.atime = e.atime, this.charset = e.charset, this.comment = e.comment, this.ctime = e.ctime, this.dev = e.dev, this.gid = e.gid, this.global = t, this.gname = e.gname, this.ino = e.ino, this.linkpath = e.linkpath, this.mtime = e.mtime, this.nlink = e.nlink, this.path = e.path, this.size = e.size, this.uid = e.uid, this.uname = e.uname;
			}
			encode() {
				let e = this.encodeBody();
				if (e === "") return Buffer.allocUnsafe(0);
				let t = Buffer.byteLength(e), i = 512 * Math.ceil(1 + t / 512), r = Buffer.allocUnsafe(i);
				for (let n = 0; n < 512; n++) r[n] = 0;
				new Da.Header({
					path: ("PaxHeader/" + (0, Ta.basename)(this.path ?? "")).slice(0, 99),
					mode: this.mode || 420,
					uid: this.uid,
					gid: this.gid,
					size: t,
					mtime: this.mtime,
					type: this.global ? "GlobalExtendedHeader" : "ExtendedHeader",
					linkpath: "",
					uname: this.uname || "",
					gname: this.gname || "",
					devmaj: 0,
					devmin: 0,
					atime: this.atime,
					ctime: this.ctime
				}).encode(r), r.write(e, 512, t, "utf8");
				for (let n = t + 512; n < r.length; n++) r[n] = 0;
				return r;
			}
			encodeBody() {
				return this.encodeField("path") + this.encodeField("ctime") + this.encodeField("atime") + this.encodeField("dev") + this.encodeField("ino") + this.encodeField("nlink") + this.encodeField("charset") + this.encodeField("comment") + this.encodeField("gid") + this.encodeField("gname") + this.encodeField("linkpath") + this.encodeField("mtime") + this.encodeField("size") + this.encodeField("uid") + this.encodeField("uname");
			}
			encodeField(e) {
				if (this[e] === void 0) return "";
				let t = this[e], i = t instanceof Date ? t.getTime() / 1e3 : t, r = " " + (e === "dev" || e === "ino" || e === "nlink" ? "SCHILY." : "") + e + "=" + i + `
`, n = Buffer.byteLength(r), o = Math.floor(Math.log(n) / Math.log(10)) + 1;
				return n + o >= Math.pow(10, o) && (o += 1), o + n + r;
			}
			static parse(e, t, i = !1) {
				return new s(Pa(Na(e), t), i);
			}
		};
		var Pa = (s, e) => e ? Object.assign({}, e, s) : s, Na = (s) => s.replace(/\n$/, "").split(`
`).reduce(Ma, Object.create(null)), Ma = (s, e) => {
			let t = parseInt(e, 10);
			if (t !== Buffer.byteLength(e) + 1) return s;
			e = e.slice((t + " ").length);
			let i = e.split("="), r = i.shift();
			if (!r) return s;
			let n = r.replace(/^SCHILY\.(dev|ino|nlink)/, "$1"), o = i.join("=");
			return s[n] = /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(n) ? /* @__PURE__ */ new Date(Number(o) * 1e3) : /^[0-9]+$/.test(o) ? +o : o, s;
		};
	});
	var tt = d((si) => {
		"use strict";
		Object.defineProperty(si, "__esModule", { value: !0 });
		si.normalizeWindowsPath = void 0;
		si.normalizeWindowsPath = (process.env.TESTING_TAR_FAKE_PLATFORM || process.platform) !== "win32" ? (s) => s : (s) => s && s.replaceAll(/\\/g, "/");
	});
	var Fs = d((ni) => {
		"use strict";
		Object.defineProperty(ni, "__esModule", { value: !0 });
		ni.ReadEntry = void 0;
		var Aa = We(), ri = tt(), Is = class extends Aa.Minipass {
			extended;
			globalExtended;
			header;
			startBlockSize;
			blockRemain;
			remain;
			type;
			meta = !1;
			ignore = !1;
			path;
			mode;
			uid;
			gid;
			uname;
			gname;
			size = 0;
			mtime;
			atime;
			ctime;
			linkpath;
			dev;
			ino;
			nlink;
			invalid = !1;
			absolute;
			unsupported = !1;
			constructor(e, t, i) {
				switch (super({}), this.pause(), this.extended = t, this.globalExtended = i, this.header = e, this.remain = e.size ?? 0, this.startBlockSize = 512 * Math.ceil(this.remain / 512), this.blockRemain = this.startBlockSize, this.type = e.type, this.type) {
					case "File":
					case "OldFile":
					case "Link":
					case "SymbolicLink":
					case "CharacterDevice":
					case "BlockDevice":
					case "Directory":
					case "FIFO":
					case "ContiguousFile":
					case "GNUDumpDir": break;
					case "NextFileHasLongLinkpath":
					case "NextFileHasLongPath":
					case "OldGnuLongPath":
					case "GlobalExtendedHeader":
					case "ExtendedHeader":
					case "OldExtendedHeader":
						this.meta = !0;
						break;
					default: this.ignore = !0;
				}
				if (!e.path) throw new Error("no path provided for tar.ReadEntry");
				this.path = (0, ri.normalizeWindowsPath)(e.path), this.mode = e.mode, this.mode && (this.mode = this.mode & 4095), this.uid = e.uid, this.gid = e.gid, this.uname = e.uname, this.gname = e.gname, this.size = this.remain, this.mtime = e.mtime, this.atime = e.atime, this.ctime = e.ctime, this.linkpath = e.linkpath ? (0, ri.normalizeWindowsPath)(e.linkpath) : void 0, this.uname = e.uname, this.gname = e.gname, t && this.#e(t), i && this.#e(i, !0);
			}
			write(e) {
				let t = e.length;
				if (t > this.blockRemain) throw new Error("writing more to entry than is appropriate");
				let i = this.remain, r = this.blockRemain;
				return this.remain = Math.max(0, i - t), this.blockRemain = Math.max(0, r - t), this.ignore ? !0 : i >= t ? super.write(e) : super.write(e.subarray(0, i));
			}
			#e(e, t = !1) {
				e.path && (e.path = (0, ri.normalizeWindowsPath)(e.path)), e.linkpath && (e.linkpath = (0, ri.normalizeWindowsPath)(e.linkpath)), Object.assign(this, Object.fromEntries(Object.entries(e).filter(([i, r]) => !(r == null || i === "path" && t))));
			}
		};
		ni.ReadEntry = Is;
	});
	var ai = d((oi) => {
		"use strict";
		Object.defineProperty(oi, "__esModule", { value: !0 });
		oi.warnMethod = void 0;
		var Ia = (s, e, t, i = {}) => {
			s.file && (i.file = s.file), s.cwd && (i.cwd = s.cwd), i.code = t instanceof Error && t.code || e, i.tarCode = e, !s.strict && i.recoverable !== !1 ? (t instanceof Error && (i = Object.assign(t, i), t = t.message), s.emit("warn", e, t, i)) : t instanceof Error ? s.emit("error", Object.assign(t, i)) : s.emit("error", Object.assign(/* @__PURE__ */ new Error(`${e}: ${t}`), i));
		};
		oi.warnMethod = Ia;
	});
	var pi = d((mi) => {
		"use strict";
		Object.defineProperty(mi, "__esModule", { value: !0 });
		mi.Parser = void 0;
		var Fa = require("events"), Cs = Ds(), Vr = et(), $r = ii(), Ca = Fs(), Ba = ai(), za = 1024 * 1024, js = Buffer.from([31, 139]), Us = Buffer.from([
			40,
			181,
			47,
			253
		]), ka = Math.max(js.length, Us.length), H = Symbol("state"), ze = Symbol("writeEntry"), de = Symbol("readEntry"), Bs = Symbol("nextEntry"), Xr = Symbol("processEntry"), re = Symbol("extendedHeader"), gt = Symbol("globalExtendedHeader"), ge = Symbol("meta"), Qr = Symbol("emitMeta"), _ = Symbol("buffer"), me = Symbol("queue"), Oe = Symbol("ended"), zs = Symbol("emittedEnd"), ke = Symbol("emit"), S = Symbol("unzip"), hi = Symbol("consumeChunk"), li = Symbol("consumeChunkSub"), ks = Symbol("consumeBody"), Jr = Symbol("consumeMeta"), en = Symbol("consumeHeader"), Ot = Symbol("consuming"), xs = Symbol("bufferConcat"), ui = Symbol("maybeEnd"), it = Symbol("writing"), Re = Symbol("aborted"), ci = Symbol("onDone"), xe = Symbol("sawValidEntry"), fi = Symbol("sawNullBlock"), di = Symbol("sawEOF"), tn = Symbol("closeStream"), xa = () => !0, qs = class extends Fa.EventEmitter {
			file;
			strict;
			maxMetaEntrySize;
			filter;
			brotli;
			zstd;
			writable = !0;
			readable = !1;
			[me] = [];
			[_];
			[de];
			[ze];
			[H] = "begin";
			[ge] = "";
			[re];
			[gt];
			[Oe] = !1;
			[S];
			[Re] = !1;
			[xe];
			[fi] = !1;
			[di] = !1;
			[it] = !1;
			[Ot] = !1;
			[zs] = !1;
			constructor(e = {}) {
				super(), this.file = e.file || "", this.on(ci, () => {
					(this[H] === "begin" || this[xe] === !1) && this.warn("TAR_BAD_ARCHIVE", "Unrecognized archive format");
				}), e.ondone ? this.on(ci, e.ondone) : this.on(ci, () => {
					this.emit("prefinish"), this.emit("finish"), this.emit("end");
				}), this.strict = !!e.strict, this.maxMetaEntrySize = e.maxMetaEntrySize || za, this.filter = typeof e.filter == "function" ? e.filter : xa;
				let t = e.file && (e.file.endsWith(".tar.br") || e.file.endsWith(".tbr"));
				this.brotli = !(e.gzip || e.zstd) && e.brotli !== void 0 ? e.brotli : t ? void 0 : !1;
				let i = e.file && (e.file.endsWith(".tar.zst") || e.file.endsWith(".tzst"));
				this.zstd = !(e.gzip || e.brotli) && e.zstd !== void 0 ? e.zstd : i ? !0 : void 0, this.on("end", () => this[tn]()), typeof e.onwarn == "function" && this.on("warn", e.onwarn), typeof e.onReadEntry == "function" && this.on("entry", e.onReadEntry);
			}
			warn(e, t, i = {}) {
				(0, Ba.warnMethod)(this, e, t, i);
			}
			[en](e, t) {
				this[xe] === void 0 && (this[xe] = !1);
				let i;
				try {
					i = new Vr.Header(e, t, this[re], this[gt]);
				} catch (r) {
					return this.warn("TAR_ENTRY_INVALID", r);
				}
				if (i.nullBlock) this[fi] ? (this[di] = !0, this[H] === "begin" && (this[H] = "header"), this[ke]("eof")) : (this[fi] = !0, this[ke]("nullBlock"));
				else if (this[fi] = !1, !i.cksumValid) this.warn("TAR_ENTRY_INVALID", "checksum failure", { header: i });
				else if (!i.path) this.warn("TAR_ENTRY_INVALID", "path is required", { header: i });
				else {
					let r = i.type;
					if (/^(Symbolic)?Link$/.test(r) && !i.linkpath) this.warn("TAR_ENTRY_INVALID", "linkpath required", { header: i });
					else if (!/^(Symbolic)?Link$/.test(r) && !/^(Global)?ExtendedHeader$/.test(r) && i.linkpath) this.warn("TAR_ENTRY_INVALID", "linkpath forbidden", { header: i });
					else {
						let n = this[ze] = new Ca.ReadEntry(i, this[re], this[gt]);
						if (!this[xe]) if (n.remain) {
							let o = () => {
								n.invalid || (this[xe] = !0);
							};
							n.on("end", o);
						} else this[xe] = !0;
						n.meta ? n.size > this.maxMetaEntrySize ? (n.ignore = !0, this[ke]("ignoredEntry", n), this[H] = "ignore", n.resume()) : n.size > 0 && (this[ge] = "", n.on("data", (o) => this[ge] += o), this[H] = "meta") : (this[re] = void 0, n.ignore = n.ignore || !this.filter(n.path, n), n.ignore ? (this[ke]("ignoredEntry", n), this[H] = n.remain ? "ignore" : "header", n.resume()) : (n.remain ? this[H] = "body" : (this[H] = "header", n.end()), this[de] ? this[me].push(n) : (this[me].push(n), this[Bs]())));
					}
				}
			}
			[tn]() {
				queueMicrotask(() => this.emit("close"));
			}
			[Xr](e) {
				let t = !0;
				if (!e) this[de] = void 0, t = !1;
				else if (Array.isArray(e)) {
					let [i, ...r] = e;
					this.emit(i, ...r);
				} else this[de] = e, this.emit("entry", e), e.emittedEnd || (e.on("end", () => this[Bs]()), t = !1);
				return t;
			}
			[Bs]() {
				do				;
while (this[Xr](this[me].shift()));
				if (this[me].length === 0) {
					let e = this[de];
					!e || e.flowing || e.size === e.remain ? this[it] || this.emit("drain") : e.once("drain", () => this.emit("drain"));
				}
			}
			[ks](e, t) {
				let i = this[ze];
				if (!i) throw new Error("attempt to consume body without entry??");
				let r = i.blockRemain ?? 0, n = r >= e.length && t === 0 ? e : e.subarray(t, t + r);
				return i.write(n), i.blockRemain || (this[H] = "header", this[ze] = void 0, i.end()), n.length;
			}
			[Jr](e, t) {
				let i = this[ze], r = this[ks](e, t);
				return !this[ze] && i && this[Qr](i), r;
			}
			[ke](e, t, i) {
				this[me].length === 0 && !this[de] ? this.emit(e, t, i) : this[me].push([
					e,
					t,
					i
				]);
			}
			[Qr](e) {
				switch (this[ke]("meta", this[ge]), e.type) {
					case "ExtendedHeader":
					case "OldExtendedHeader":
						this[re] = $r.Pax.parse(this[ge], this[re], !1);
						break;
					case "GlobalExtendedHeader":
						this[gt] = $r.Pax.parse(this[ge], this[gt], !0);
						break;
					case "NextFileHasLongPath":
					case "OldGnuLongPath": {
						let t = this[re] ?? Object.create(null);
						this[re] = t, t.path = this[ge].replace(/\0.*/, "");
						break;
					}
					case "NextFileHasLongLinkpath": {
						let t = this[re] || Object.create(null);
						this[re] = t, t.linkpath = this[ge].replace(/\0.*/, "");
						break;
					}
					default: throw new Error("unknown meta: " + e.type);
				}
			}
			abort(e) {
				this[Re] = !0, this.emit("abort", e), this.warn("TAR_ABORT", e, { recoverable: !1 });
			}
			write(e, t, i) {
				if (typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, typeof t == "string" ? t : "utf8")), this[Re]) return i?.(), !1;
				if ((this[S] === void 0 || this.brotli === void 0 && this[S] === !1) && e) {
					if (this[_] && (e = Buffer.concat([this[_], e]), this[_] = void 0), e.length < ka) return this[_] = e, i?.(), !0;
					for (let a = 0; this[S] === void 0 && a < js.length; a++) e[a] !== js[a] && (this[S] = !1);
					let o = !1;
					if (this[S] === !1 && this.zstd !== !1) {
						o = !0;
						for (let a = 0; a < Us.length; a++) if (e[a] !== Us[a]) {
							o = !1;
							break;
						}
					}
					let h = this.brotli === void 0 && !o;
					if (this[S] === !1 && h) if (e.length < 512) if (this[Oe]) this.brotli = !0;
					else return this[_] = e, i?.(), !0;
					else try {
						new Vr.Header(e.subarray(0, 512)), this.brotli = !1;
					} catch {
						this.brotli = !0;
					}
					if (this[S] === void 0 || this[S] === !1 && (this.brotli || o)) {
						let a = this[Oe];
						this[Oe] = !1, this[S] = this[S] === void 0 ? new Cs.Unzip({}) : o ? new Cs.ZstdDecompress({}) : new Cs.BrotliDecompress({}), this[S].on("data", (u) => this[hi](u)), this[S].on("error", (u) => this.abort(u)), this[S].on("end", () => {
							this[Oe] = !0, this[hi]();
						}), this[it] = !0;
						let l = !!this[S][a ? "end" : "write"](e);
						return this[it] = !1, i?.(), l;
					}
				}
				this[it] = !0, this[S] ? this[S].write(e) : this[hi](e), this[it] = !1;
				let n = this[me].length > 0 ? !1 : this[de] ? this[de].flowing : !0;
				return !n && this[me].length === 0 && this[de]?.once("drain", () => this.emit("drain")), i?.(), n;
			}
			[xs](e) {
				e && !this[Re] && (this[_] = this[_] ? Buffer.concat([this[_], e]) : e);
			}
			[ui]() {
				if (this[Oe] && !this[zs] && !this[Re] && !this[Ot]) {
					this[zs] = !0;
					let e = this[ze];
					if (e && e.blockRemain) {
						let t = this[_] ? this[_].length : 0;
						this.warn("TAR_BAD_ARCHIVE", `Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`, { entry: e }), this[_] && e.write(this[_]), e.end();
					}
					this[ke](ci);
				}
			}
			[hi](e) {
				if (this[Ot] && e) this[xs](e);
				else if (!e && !this[_]) this[ui]();
				else if (e) {
					if (this[Ot] = !0, this[_]) {
						this[xs](e);
						let t = this[_];
						this[_] = void 0, this[li](t);
					} else this[li](e);
					for (; this[_] && this[_]?.length >= 512 && !this[Re] && !this[di];) {
						let t = this[_];
						this[_] = void 0, this[li](t);
					}
					this[Ot] = !1;
				}
				(!this[_] || this[Oe]) && this[ui]();
			}
			[li](e) {
				let t = 0, i = e.length;
				for (; t + 512 <= i && !this[Re] && !this[di];) switch (this[H]) {
					case "begin":
					case "header":
						this[en](e, t), t += 512;
						break;
					case "ignore":
					case "body":
						t += this[ks](e, t);
						break;
					case "meta":
						t += this[Jr](e, t);
						break;
					default: throw new Error("invalid state: " + this[H]);
				}
				t < i && (this[_] = this[_] ? Buffer.concat([e.subarray(t), this[_]]) : e.subarray(t));
			}
			end(e, t, i) {
				return typeof e == "function" && (i = e, t = void 0, e = void 0), typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, t)), i && this.once("finish", i), this[Re] || (this[S] ? (e && this[S].write(e), this[S].end()) : (this[Oe] = !0, (this.brotli === void 0 || this.zstd === void 0) && (e = e || Buffer.alloc(0)), e && this.write(e), this[ui]())), this;
			}
		};
		mi.Parser = qs;
	});
	var wi = d((_i) => {
		"use strict";
		Object.defineProperty(_i, "__esModule", { value: !0 });
		_i.stripTrailingSlashes = void 0;
		var ja = (s) => {
			let e = s.length - 1, t = -1;
			for (; e > -1 && s.charAt(e) === "/";) t = e, e--;
			return t === -1 ? s : s.slice(0, t);
		};
		_i.stripTrailingSlashes = ja;
	});
	var rt = d((B) => {
		"use strict";
		var Ua = B && B.__createBinding || (Object.create ? (function(s, e, t, i) {
			i === void 0 && (i = t);
			var r = Object.getOwnPropertyDescriptor(e, t);
			(!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = {
				enumerable: !0,
				get: function() {
					return e[t];
				}
			}), Object.defineProperty(s, i, r);
		}) : (function(s, e, t, i) {
			i === void 0 && (i = t), s[i] = e[t];
		})), qa = B && B.__setModuleDefault || (Object.create ? (function(s, e) {
			Object.defineProperty(s, "default", {
				enumerable: !0,
				value: e
			});
		}) : function(s, e) {
			s.default = e;
		}), Wa = B && B.__importStar || (function() {
			var s = function(e) {
				return s = Object.getOwnPropertyNames || function(t) {
					var i = [];
					for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
					return i;
				}, s(e);
			};
			return function(e) {
				if (e && e.__esModule) return e;
				var t = {};
				if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && Ua(t, e, i[r]);
				return qa(t, e), t;
			};
		})(), Ha = B && B.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(B, "__esModule", { value: !0 });
		B.list = B.filesFilter = void 0;
		var Za = Wa(Ke()), st = Ha(require("node:fs")), sn = require("path"), Ga = Ve(), yi = pi(), Ws = wi(), Ya = (s) => {
			let e = s.onReadEntry;
			s.onReadEntry = e ? (t) => {
				e(t), t.resume();
			} : (t) => t.resume();
		}, Ka = (s, e) => {
			let t = new Map(e.map((n) => [(0, Ws.stripTrailingSlashes)(n), !0])), i = s.filter, r = (n, o = "") => {
				let h = o || (0, sn.parse)(n).root || ".", a;
				if (n === h) a = !1;
				else {
					let l = t.get(n);
					a = l !== void 0 ? l : r((0, sn.dirname)(n), h);
				}
				return t.set(n, a), a;
			};
			s.filter = i ? (n, o) => i(n, o) && r((0, Ws.stripTrailingSlashes)(n)) : (n) => r((0, Ws.stripTrailingSlashes)(n));
		};
		B.filesFilter = Ka;
		var Va = (s) => {
			let e = new yi.Parser(s), t = s.file, i;
			try {
				i = st.default.openSync(t, "r");
				let r = st.default.fstatSync(i), n = s.maxReadSize || 16 * 1024 * 1024;
				if (r.size < n) {
					let o = Buffer.allocUnsafe(r.size), h = st.default.readSync(i, o, 0, r.size, 0);
					e.end(h === o.byteLength ? o : o.subarray(0, h));
				} else {
					let o = 0, h = Buffer.allocUnsafe(n);
					for (; o < r.size;) {
						let a = st.default.readSync(i, h, 0, n, o);
						if (a === 0) break;
						o += a, e.write(h.subarray(0, a));
					}
					e.end();
				}
			} finally {
				if (typeof i == "number") try {
					st.default.closeSync(i);
				} catch {}
			}
		}, $a = (s, e) => {
			let t = new yi.Parser(s), i = s.maxReadSize || 16 * 1024 * 1024, r = s.file;
			return new Promise((o, h) => {
				t.on("error", h), t.on("end", o), st.default.stat(r, (a, l) => {
					if (a) h(a);
					else {
						let u = new Za.ReadStream(r, {
							readSize: i,
							size: l.size
						});
						u.on("error", h), u.pipe(t);
					}
				});
			});
		};
		B.list = (0, Ga.makeCommand)(Va, $a, (s) => new yi.Parser(s), (s) => new yi.Parser(s), (s, e) => {
			e?.length && (0, B.filesFilter)(s, e), s.noResume || Ya(s);
		});
	});
	var rn = d((Ei) => {
		"use strict";
		Object.defineProperty(Ei, "__esModule", { value: !0 });
		Ei.modeFix = void 0;
		var Xa = (s, e, t) => (s &= 4095, t && (s = (s | 384) & -19), e && (s & 256 && (s |= 64), s & 32 && (s |= 8), s & 4 && (s |= 1)), s);
		Ei.modeFix = Xa;
	});
	var Hs = d((bi) => {
		"use strict";
		Object.defineProperty(bi, "__esModule", { value: !0 });
		bi.stripAbsolutePath = void 0;
		var { isAbsolute: Ja, parse: nn } = require("node:path").win32, eh = (s) => {
			let e = "", t = nn(s);
			for (; Ja(s) || t.root;) {
				let i = s.charAt(0) === "/" && s.slice(0, 4) !== "//?/" ? "/" : t.root;
				s = s.slice(i.length), e += i, t = nn(s);
			}
			return [e, s];
		};
		bi.stripAbsolutePath = eh;
	});
	var Gs = d((nt) => {
		"use strict";
		Object.defineProperty(nt, "__esModule", { value: !0 });
		nt.decode = nt.encode = void 0;
		var Si = [
			"|",
			"<",
			">",
			"?",
			":"
		], Zs = Si.map((s) => String.fromCodePoint(61440 + Number(s.codePointAt(0)))), th = new Map(Si.map((s, e) => [s, Zs[e]])), ih = new Map(Zs.map((s, e) => [s, Si[e]])), sh = (s) => Si.reduce((e, t) => e.split(t).join(th.get(t)), s);
		nt.encode = sh;
		var rh = (s) => Zs.reduce((e, t) => e.split(t).join(ih.get(t)), s);
		nt.decode = rh;
	});
	var sr = d((M) => {
		"use strict";
		var nh = M && M.__createBinding || (Object.create ? (function(s, e, t, i) {
			i === void 0 && (i = t);
			var r = Object.getOwnPropertyDescriptor(e, t);
			(!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = {
				enumerable: !0,
				get: function() {
					return e[t];
				}
			}), Object.defineProperty(s, i, r);
		}) : (function(s, e, t, i) {
			i === void 0 && (i = t), s[i] = e[t];
		})), oh = M && M.__setModuleDefault || (Object.create ? (function(s, e) {
			Object.defineProperty(s, "default", {
				enumerable: !0,
				value: e
			});
		}) : function(s, e) {
			s.default = e;
		}), ah = M && M.__importStar || (function() {
			var s = function(e) {
				return s = Object.getOwnPropertyNames || function(t) {
					var i = [];
					for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
					return i;
				}, s(e);
			};
			return function(e) {
				if (e && e.__esModule) return e;
				var t = {};
				if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && nh(t, e, i[r]);
				return oh(t, e), t;
			};
		})(), cn = M && M.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(M, "__esModule", { value: !0 });
		M.WriteEntryTar = M.WriteEntrySync = M.WriteEntry = void 0;
		var oe = cn(require("fs")), fn = We(), on = cn(require("path")), dn = et(), mn = rn(), ne = tt(), pn = Xt(), _n = ii(), wn = Hs(), hh = wi(), yn = ai(), lh = ah(Gs()), En = (s, e) => e ? (s = (0, ne.normalizeWindowsPath)(s).replace(/^\.(\/|$)/, ""), (0, hh.stripTrailingSlashes)(e) + "/" + s) : (0, ne.normalizeWindowsPath)(s), uh = 16 * 1024 * 1024, an = Symbol("process"), hn = Symbol("file"), ln = Symbol("directory"), Ks = Symbol("symlink"), un = Symbol("hardlink"), Rt = Symbol("header"), gi = Symbol("read"), Vs = Symbol("lstat"), Oi = Symbol("onlstat"), $s = Symbol("onread"), Xs = Symbol("onreadlink"), Qs = Symbol("openfile"), Js = Symbol("onopenfile"), ve = Symbol("close"), Ri = Symbol("mode"), er = Symbol("awaitDrain"), Ys = Symbol("ondrain"), ae = Symbol("prefix"), vi = class extends fn.Minipass {
			path;
			portable;
			myuid = process.getuid && process.getuid() || 0;
			myuser = process.env.USER || "";
			maxReadSize;
			linkCache;
			statCache;
			preservePaths;
			cwd;
			strict;
			mtime;
			noPax;
			noMtime;
			prefix;
			fd;
			blockLen = 0;
			blockRemain = 0;
			buf;
			pos = 0;
			remain = 0;
			length = 0;
			offset = 0;
			win32;
			absolute;
			header;
			type;
			linkpath;
			stat;
			onWriteEntry;
			#e = !1;
			constructor(e, t = {}) {
				let i = (0, pn.dealias)(t);
				super(), this.path = (0, ne.normalizeWindowsPath)(e), this.portable = !!i.portable, this.maxReadSize = i.maxReadSize || uh, this.linkCache = i.linkCache || /* @__PURE__ */ new Map(), this.statCache = i.statCache || /* @__PURE__ */ new Map(), this.preservePaths = !!i.preservePaths, this.cwd = (0, ne.normalizeWindowsPath)(i.cwd || process.cwd()), this.strict = !!i.strict, this.noPax = !!i.noPax, this.noMtime = !!i.noMtime, this.mtime = i.mtime, this.prefix = i.prefix ? (0, ne.normalizeWindowsPath)(i.prefix) : void 0, this.onWriteEntry = i.onWriteEntry, typeof i.onwarn == "function" && this.on("warn", i.onwarn);
				let r = !1;
				if (!this.preservePaths) {
					let [o, h] = (0, wn.stripAbsolutePath)(this.path);
					o && typeof h == "string" && (this.path = h, r = o);
				}
				this.win32 = !!i.win32 || process.platform === "win32", this.win32 && (this.path = lh.decode(this.path.replaceAll(/\\/g, "/")), e = e.replaceAll(/\\/g, "/")), this.absolute = (0, ne.normalizeWindowsPath)(i.absolute || on.default.resolve(this.cwd, e)), this.path === "" && (this.path = "./"), r && this.warn("TAR_ENTRY_INFO", `stripping ${r} from absolute path`, {
					entry: this,
					path: r + this.path
				});
				let n = this.statCache.get(this.absolute);
				n ? this[Oi](n) : this[Vs]();
			}
			warn(e, t, i = {}) {
				return (0, yn.warnMethod)(this, e, t, i);
			}
			emit(e, ...t) {
				return e === "error" && (this.#e = !0), super.emit(e, ...t);
			}
			[Vs]() {
				oe.default.lstat(this.absolute, (e, t) => {
					if (e) return this.emit("error", e);
					this[Oi](t);
				});
			}
			[Oi](e) {
				this.statCache.set(this.absolute, e), this.stat = e, e.isFile() || (e.size = 0), this.type = ch(e), this.emit("stat", e), this[an]();
			}
			[an]() {
				switch (this.type) {
					case "File": return this[hn]();
					case "Directory": return this[ln]();
					case "SymbolicLink": return this[Ks]();
					default: return this.end();
				}
			}
			[Ri](e) {
				return (0, mn.modeFix)(e, this.type === "Directory", this.portable);
			}
			[ae](e) {
				return En(e, this.prefix);
			}
			[Rt]() {
				if (!this.stat) throw new Error("cannot write header before stat");
				this.type === "Directory" && this.portable && (this.noMtime = !0), this.onWriteEntry?.(this), this.header = new dn.Header({
					path: this[ae](this.path),
					linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[ae](this.linkpath) : this.linkpath,
					mode: this[Ri](this.stat.mode),
					uid: this.portable ? void 0 : this.stat.uid,
					gid: this.portable ? void 0 : this.stat.gid,
					size: this.stat.size,
					mtime: this.noMtime ? void 0 : this.mtime || this.stat.mtime,
					type: this.type === "Unsupported" ? void 0 : this.type,
					uname: this.portable ? void 0 : this.stat.uid === this.myuid ? this.myuser : "",
					atime: this.portable ? void 0 : this.stat.atime,
					ctime: this.portable ? void 0 : this.stat.ctime
				}), this.header.encode() && !this.noPax && super.write(new _n.Pax({
					atime: this.portable ? void 0 : this.header.atime,
					ctime: this.portable ? void 0 : this.header.ctime,
					gid: this.portable ? void 0 : this.header.gid,
					mtime: this.noMtime ? void 0 : this.mtime || this.header.mtime,
					path: this[ae](this.path),
					linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[ae](this.linkpath) : this.linkpath,
					size: this.header.size,
					uid: this.portable ? void 0 : this.header.uid,
					uname: this.portable ? void 0 : this.header.uname,
					dev: this.portable ? void 0 : this.stat.dev,
					ino: this.portable ? void 0 : this.stat.ino,
					nlink: this.portable ? void 0 : this.stat.nlink
				}).encode());
				let e = this.header?.block;
				if (!e) throw new Error("failed to encode header");
				super.write(e);
			}
			[ln]() {
				if (!this.stat) throw new Error("cannot create directory entry without stat");
				this.path.slice(-1) !== "/" && (this.path += "/"), this.stat.size = 0, this[Rt](), this.end();
			}
			[Ks]() {
				oe.default.readlink(this.absolute, (e, t) => {
					if (e) return this.emit("error", e);
					this[Xs](t);
				});
			}
			[Xs](e) {
				this.linkpath = (0, ne.normalizeWindowsPath)(e), this[Rt](), this.end();
			}
			[un](e) {
				if (!this.stat) throw new Error("cannot create link entry without stat");
				this.type = "Link", this.linkpath = (0, ne.normalizeWindowsPath)(on.default.relative(this.cwd, e)), this.stat.size = 0, this[Rt](), this.end();
			}
			[hn]() {
				if (!this.stat) throw new Error("cannot create file entry without stat");
				if (this.stat.nlink > 1) {
					let e = `${this.stat.dev}:${this.stat.ino}`, t = this.linkCache.get(e);
					if (t?.indexOf(this.cwd) === 0) return this[un](t);
					this.linkCache.set(e, this.absolute);
				}
				if (this[Rt](), this.stat.size === 0) return this.end();
				this[Qs]();
			}
			[Qs]() {
				oe.default.open(this.absolute, "r", (e, t) => {
					if (e) return this.emit("error", e);
					this[Js](t);
				});
			}
			[Js](e) {
				if (this.fd = e, this.#e) return this[ve]();
				if (!this.stat) throw new Error("should stat before calling onopenfile");
				this.blockLen = 512 * Math.ceil(this.stat.size / 512), this.blockRemain = this.blockLen;
				let t = Math.min(this.blockLen, this.maxReadSize);
				this.buf = Buffer.allocUnsafe(t), this.offset = 0, this.pos = 0, this.remain = this.stat.size, this.length = this.buf.length, this[gi]();
			}
			[gi]() {
				let { fd: e, buf: t, offset: i, length: r, pos: n } = this;
				if (e === void 0 || t === void 0) throw new Error("cannot read file without first opening");
				oe.default.read(e, t, i, r, n, (o, h) => {
					if (o) return this[ve](() => this.emit("error", o));
					this[$s](h);
				});
			}
			[ve](e = () => {}) {
				this.fd !== void 0 && oe.default.close(this.fd, e);
			}
			[$s](e) {
				if (e <= 0 && this.remain > 0) {
					let r = Object.assign(/* @__PURE__ */ new Error("encountered unexpected EOF"), {
						path: this.absolute,
						syscall: "read",
						code: "EOF"
					});
					return this[ve](() => this.emit("error", r));
				}
				if (e > this.remain) {
					let r = Object.assign(/* @__PURE__ */ new Error("did not encounter expected EOF"), {
						path: this.absolute,
						syscall: "read",
						code: "EOF"
					});
					return this[ve](() => this.emit("error", r));
				}
				if (!this.buf) throw new Error("should have created buffer prior to reading");
				if (e === this.remain) for (let r = e; r < this.length && e < this.blockRemain; r++) this.buf[r + this.offset] = 0, e++, this.remain++;
				let t = this.offset === 0 && e === this.buf.length ? this.buf : this.buf.subarray(this.offset, this.offset + e);
				this.write(t) ? this[Ys]() : this[er](() => this[Ys]());
			}
			[er](e) {
				this.once("drain", e);
			}
			write(e, t, i) {
				if (typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, typeof t == "string" ? t : "utf8")), this.blockRemain < e.length) {
					let r = Object.assign(/* @__PURE__ */ new Error("writing more data than expected"), { path: this.absolute });
					return this.emit("error", r);
				}
				return this.remain -= e.length, this.blockRemain -= e.length, this.pos += e.length, this.offset += e.length, super.write(e, null, i);
			}
			[Ys]() {
				if (!this.remain) return this.blockRemain && super.write(Buffer.alloc(this.blockRemain)), this[ve]((e) => e ? this.emit("error", e) : this.end());
				if (!this.buf) throw new Error("buffer lost somehow in ONDRAIN");
				this.offset >= this.length && (this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length)), this.offset = 0), this.length = this.buf.length - this.offset, this[gi]();
			}
		};
		M.WriteEntry = vi;
		var tr = class extends vi {
			sync = !0;
			[Vs]() {
				this[Oi](oe.default.lstatSync(this.absolute));
			}
			[Ks]() {
				this[Xs](oe.default.readlinkSync(this.absolute));
			}
			[Qs]() {
				this[Js](oe.default.openSync(this.absolute, "r"));
			}
			[gi]() {
				let e = !0;
				try {
					let { fd: t, buf: i, offset: r, length: n, pos: o } = this;
					if (t === void 0 || i === void 0) throw new Error("fd and buf must be set in READ method");
					let h = oe.default.readSync(t, i, r, n, o);
					this[$s](h), e = !1;
				} finally {
					if (e) try {
						this[ve](() => {});
					} catch {}
				}
			}
			[er](e) {
				e();
			}
			[ve](e = () => {}) {
				this.fd !== void 0 && oe.default.closeSync(this.fd), e();
			}
		};
		M.WriteEntrySync = tr;
		var ir = class extends fn.Minipass {
			blockLen = 0;
			blockRemain = 0;
			buf = 0;
			pos = 0;
			remain = 0;
			length = 0;
			preservePaths;
			portable;
			strict;
			noPax;
			noMtime;
			readEntry;
			type;
			prefix;
			path;
			mode;
			uid;
			gid;
			uname;
			gname;
			header;
			mtime;
			atime;
			ctime;
			linkpath;
			size;
			onWriteEntry;
			warn(e, t, i = {}) {
				return (0, yn.warnMethod)(this, e, t, i);
			}
			constructor(e, t = {}) {
				let i = (0, pn.dealias)(t);
				super(), this.preservePaths = !!i.preservePaths, this.portable = !!i.portable, this.strict = !!i.strict, this.noPax = !!i.noPax, this.noMtime = !!i.noMtime, this.onWriteEntry = i.onWriteEntry, this.readEntry = e;
				let { type: r } = e;
				if (r === "Unsupported") throw new Error("writing entry that should be ignored");
				this.type = r, this.type === "Directory" && this.portable && (this.noMtime = !0), this.prefix = i.prefix, this.path = (0, ne.normalizeWindowsPath)(e.path), this.mode = e.mode !== void 0 ? this[Ri](e.mode) : void 0, this.uid = this.portable ? void 0 : e.uid, this.gid = this.portable ? void 0 : e.gid, this.uname = this.portable ? void 0 : e.uname, this.gname = this.portable ? void 0 : e.gname, this.size = e.size, this.mtime = this.noMtime ? void 0 : i.mtime || e.mtime, this.atime = this.portable ? void 0 : e.atime, this.ctime = this.portable ? void 0 : e.ctime, this.linkpath = e.linkpath !== void 0 ? (0, ne.normalizeWindowsPath)(e.linkpath) : void 0, typeof i.onwarn == "function" && this.on("warn", i.onwarn);
				let n = !1;
				if (!this.preservePaths) {
					let [h, a] = (0, wn.stripAbsolutePath)(this.path);
					h && typeof a == "string" && (this.path = a, n = h);
				}
				this.remain = e.size, this.blockRemain = e.startBlockSize, this.onWriteEntry?.(this), this.header = new dn.Header({
					path: this[ae](this.path),
					linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[ae](this.linkpath) : this.linkpath,
					mode: this.mode,
					uid: this.portable ? void 0 : this.uid,
					gid: this.portable ? void 0 : this.gid,
					size: this.size,
					mtime: this.noMtime ? void 0 : this.mtime,
					type: this.type,
					uname: this.portable ? void 0 : this.uname,
					atime: this.portable ? void 0 : this.atime,
					ctime: this.portable ? void 0 : this.ctime
				}), n && this.warn("TAR_ENTRY_INFO", `stripping ${n} from absolute path`, {
					entry: this,
					path: n + this.path
				}), this.header.encode() && !this.noPax && super.write(new _n.Pax({
					atime: this.portable ? void 0 : this.atime,
					ctime: this.portable ? void 0 : this.ctime,
					gid: this.portable ? void 0 : this.gid,
					mtime: this.noMtime ? void 0 : this.mtime,
					path: this[ae](this.path),
					linkpath: this.type === "Link" && this.linkpath !== void 0 ? this[ae](this.linkpath) : this.linkpath,
					size: this.size,
					uid: this.portable ? void 0 : this.uid,
					uname: this.portable ? void 0 : this.uname,
					dev: this.portable ? void 0 : this.readEntry.dev,
					ino: this.portable ? void 0 : this.readEntry.ino,
					nlink: this.portable ? void 0 : this.readEntry.nlink
				}).encode());
				let o = this.header?.block;
				if (!o) throw new Error("failed to encode header");
				super.write(o), e.pipe(this);
			}
			[ae](e) {
				return En(e, this.prefix);
			}
			[Ri](e) {
				return (0, mn.modeFix)(e, this.type === "Directory", this.portable);
			}
			write(e, t, i) {
				typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, typeof t == "string" ? t : "utf8"));
				let r = e.length;
				if (r > this.blockRemain) throw new Error("writing more to entry than is appropriate");
				return this.blockRemain -= r, super.write(e, i);
			}
			end(e, t, i) {
				return this.blockRemain && super.write(Buffer.alloc(this.blockRemain)), typeof e == "function" && (i = e, t = void 0, e = void 0), typeof t == "function" && (i = t, t = void 0), typeof e == "string" && (e = Buffer.from(e, t ?? "utf8")), i && this.once("finish", i), e ? super.end(e, i) : super.end(i), this;
			}
		};
		M.WriteEntryTar = ir;
		var ch = (s) => s.isFile() ? "File" : s.isDirectory() ? "Directory" : s.isSymbolicLink() ? "SymbolicLink" : "Unsupported";
	});
	var bn = d((at) => {
		"use strict";
		Object.defineProperty(at, "__esModule", { value: !0 });
		at.Node = at.Yallist = void 0;
		at.Yallist = class s {
			tail;
			head;
			length = 0;
			static create(e = []) {
				return new s(e);
			}
			constructor(e = []) {
				for (let t of e) this.push(t);
			}
			*[Symbol.iterator]() {
				for (let e = this.head; e; e = e.next) yield e.value;
			}
			removeNode(e) {
				if (e.list !== this) throw new Error("removing node which does not belong to this list");
				let t = e.next, i = e.prev;
				return t && (t.prev = i), i && (i.next = t), e === this.head && (this.head = t), e === this.tail && (this.tail = i), this.length--, e.next = void 0, e.prev = void 0, e.list = void 0, t;
			}
			unshiftNode(e) {
				if (e === this.head) return;
				e.list && e.list.removeNode(e);
				let t = this.head;
				e.list = this, e.next = t, t && (t.prev = e), this.head = e, this.tail || (this.tail = e), this.length++;
			}
			pushNode(e) {
				if (e === this.tail) return;
				e.list && e.list.removeNode(e);
				let t = this.tail;
				e.list = this, e.prev = t, t && (t.next = e), this.tail = e, this.head || (this.head = e), this.length++;
			}
			push(...e) {
				for (let t = 0, i = e.length; t < i; t++) dh(this, e[t]);
				return this.length;
			}
			unshift(...e) {
				for (var t = 0, i = e.length; t < i; t++) mh(this, e[t]);
				return this.length;
			}
			pop() {
				if (!this.tail) return;
				let e = this.tail.value, t = this.tail;
				return this.tail = this.tail.prev, this.tail ? this.tail.next = void 0 : this.head = void 0, t.list = void 0, this.length--, e;
			}
			shift() {
				if (!this.head) return;
				let e = this.head.value, t = this.head;
				return this.head = this.head.next, this.head ? this.head.prev = void 0 : this.tail = void 0, t.list = void 0, this.length--, e;
			}
			forEach(e, t) {
				t = t || this;
				for (let i = this.head, r = 0; i; r++) e.call(t, i.value, r, this), i = i.next;
			}
			forEachReverse(e, t) {
				t = t || this;
				for (let i = this.tail, r = this.length - 1; i; r--) e.call(t, i.value, r, this), i = i.prev;
			}
			get(e) {
				let t = 0, i = this.head;
				for (; i && t < e; t++) i = i.next;
				if (t === e && i) return i.value;
			}
			getReverse(e) {
				let t = 0, i = this.tail;
				for (; i && t < e; t++) i = i.prev;
				if (t === e && i) return i.value;
			}
			map(e, t) {
				t = t || this;
				let i = new s();
				for (let r = this.head; r;) i.push(e.call(t, r.value, this)), r = r.next;
				return i;
			}
			mapReverse(e, t) {
				t = t || this;
				var i = new s();
				for (let r = this.tail; r;) i.push(e.call(t, r.value, this)), r = r.prev;
				return i;
			}
			reduce(e, t) {
				let i, r = this.head;
				if (arguments.length > 1) i = t;
				else if (this.head) r = this.head.next, i = this.head.value;
				else throw new TypeError("Reduce of empty list with no initial value");
				for (var n = 0; r; n++) i = e(i, r.value, n), r = r.next;
				return i;
			}
			reduceReverse(e, t) {
				let i, r = this.tail;
				if (arguments.length > 1) i = t;
				else if (this.tail) r = this.tail.prev, i = this.tail.value;
				else throw new TypeError("Reduce of empty list with no initial value");
				for (let n = this.length - 1; r; n--) i = e(i, r.value, n), r = r.prev;
				return i;
			}
			toArray() {
				let e = new Array(this.length);
				for (let t = 0, i = this.head; i; t++) e[t] = i.value, i = i.next;
				return e;
			}
			toArrayReverse() {
				let e = new Array(this.length);
				for (let t = 0, i = this.tail; i; t++) e[t] = i.value, i = i.prev;
				return e;
			}
			slice(e = 0, t = this.length) {
				t < 0 && (t += this.length), e < 0 && (e += this.length);
				let i = new s();
				if (t < e || t < 0) return i;
				e < 0 && (e = 0), t > this.length && (t = this.length);
				let r = this.head, n = 0;
				for (n = 0; r && n < e; n++) r = r.next;
				for (; r && n < t; n++, r = r.next) i.push(r.value);
				return i;
			}
			sliceReverse(e = 0, t = this.length) {
				t < 0 && (t += this.length), e < 0 && (e += this.length);
				let i = new s();
				if (t < e || t < 0) return i;
				e < 0 && (e = 0), t > this.length && (t = this.length);
				let r = this.length, n = this.tail;
				for (; n && r > t; r--) n = n.prev;
				for (; n && r > e; r--, n = n.prev) i.push(n.value);
				return i;
			}
			splice(e, t = 0, ...i) {
				e > this.length && (e = this.length - 1), e < 0 && (e = this.length + e);
				let r = this.head;
				for (let o = 0; r && o < e; o++) r = r.next;
				let n = [];
				for (let o = 0; r && o < t; o++) n.push(r.value), r = this.removeNode(r);
				r ? r !== this.tail && (r = r.prev) : r = this.tail;
				for (let o of i) r = fh(this, r, o);
				return n;
			}
			reverse() {
				let e = this.head, t = this.tail;
				for (let i = e; i; i = i.prev) {
					let r = i.prev;
					i.prev = i.next, i.next = r;
				}
				return this.head = t, this.tail = e, this;
			}
		};
		function fh(s, e, t) {
			let n = new ot(t, e, e ? e.next : s.head, s);
			return n.next === void 0 && (s.tail = n), n.prev === void 0 && (s.head = n), s.length++, n;
		}
		function dh(s, e) {
			s.tail = new ot(e, s.tail, void 0, s), s.head || (s.head = s.tail), s.length++;
		}
		function mh(s, e) {
			s.head = new ot(e, void 0, s.head, s), s.tail || (s.tail = s.head), s.length++;
		}
		var ot = class {
			list;
			next;
			prev;
			value;
			constructor(e, t, i, r) {
				this.list = r, this.value = e, t ? (t.next = this, this.prev = t) : this.prev = void 0, i ? (i.prev = this, this.next = i) : this.next = void 0;
			}
		};
		at.Node = ot;
	});
	var Fi = d((L) => {
		"use strict";
		var ph = L && L.__createBinding || (Object.create ? (function(s, e, t, i) {
			i === void 0 && (i = t);
			var r = Object.getOwnPropertyDescriptor(e, t);
			(!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = {
				enumerable: !0,
				get: function() {
					return e[t];
				}
			}), Object.defineProperty(s, i, r);
		}) : (function(s, e, t, i) {
			i === void 0 && (i = t), s[i] = e[t];
		})), _h = L && L.__setModuleDefault || (Object.create ? (function(s, e) {
			Object.defineProperty(s, "default", {
				enumerable: !0,
				value: e
			});
		}) : function(s, e) {
			s.default = e;
		}), wh = L && L.__importStar || (function() {
			var s = function(e) {
				return s = Object.getOwnPropertyNames || function(t) {
					var i = [];
					for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
					return i;
				}, s(e);
			};
			return function(e) {
				if (e && e.__esModule) return e;
				var t = {};
				if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && ph(t, e, i[r]);
				return _h(t, e), t;
			};
		})(), vn = L && L.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(L, "__esModule", { value: !0 });
		L.PackSync = L.Pack = L.PackJob = void 0;
		var Ai = vn(require("fs")), ur = sr(), Pt = class {
			path;
			absolute;
			entry;
			stat;
			readdir;
			pending = !1;
			pendingLink = !1;
			ignore = !1;
			piped = !1;
			constructor(e, t) {
				this.path = e || "./", this.absolute = t;
			}
		};
		L.PackJob = Pt;
		var yh = We(), nr = wh(Ds()), Eh = bn(), bh = ai(), Sn = Buffer.alloc(1024), Di = Symbol("onStat"), vt = Symbol("ended"), X = Symbol("queue"), Tt = Symbol("pendingLinks"), Te = Symbol("current"), je = Symbol("process"), Dt = Symbol("processing"), Ti = Symbol("processJob"), Q = Symbol("jobs"), or = Symbol("jobDone"), Pi = Symbol("addFSEntry"), gn = Symbol("addTarEntry"), cr = Symbol("stat"), fr = Symbol("readdir"), Ni = Symbol("onreaddir"), Mi = Symbol("pipe"), On = Symbol("entry"), ar = Symbol("entryOpt"), Li = Symbol("writeEntryClass"), Tn = Symbol("write"), hr = Symbol("ondrain"), Rn = vn(require("path")), lr = tt(), Ii = class extends yh.Minipass {
			sync = !1;
			opt;
			cwd;
			maxReadSize;
			preservePaths;
			strict;
			noPax;
			prefix;
			linkCache;
			statCache;
			file;
			portable;
			zip;
			readdirCache;
			noDirRecurse;
			follow;
			noMtime;
			mtime;
			filter;
			jobs;
			[Li];
			onWriteEntry;
			[X];
			[Tt] = /* @__PURE__ */ new Map();
			[Q] = 0;
			[Dt] = !1;
			[vt] = !1;
			constructor(e = {}) {
				if (super(), this.opt = e, this.file = e.file || "", this.cwd = e.cwd || process.cwd(), this.maxReadSize = e.maxReadSize, this.preservePaths = !!e.preservePaths, this.strict = !!e.strict, this.noPax = !!e.noPax, this.prefix = (0, lr.normalizeWindowsPath)(e.prefix || ""), this.linkCache = e.linkCache || /* @__PURE__ */ new Map(), this.statCache = e.statCache || /* @__PURE__ */ new Map(), this.readdirCache = e.readdirCache || /* @__PURE__ */ new Map(), this.onWriteEntry = e.onWriteEntry, this[Li] = ur.WriteEntry, typeof e.onwarn == "function" && this.on("warn", e.onwarn), this.portable = !!e.portable, e.gzip || e.brotli || e.zstd) {
					if ((e.gzip ? 1 : 0) + (e.brotli ? 1 : 0) + (e.zstd ? 1 : 0) > 1) throw new TypeError("gzip, brotli, zstd are mutually exclusive");
					if (e.gzip && (typeof e.gzip != "object" && (e.gzip = {}), this.portable && (e.gzip.portable = !0), this.zip = new nr.Gzip(e.gzip)), e.brotli && (typeof e.brotli != "object" && (e.brotli = {}), this.zip = new nr.BrotliCompress(e.brotli)), e.zstd && (typeof e.zstd != "object" && (e.zstd = {}), this.zip = new nr.ZstdCompress(e.zstd)), !this.zip) throw new Error("impossible");
					let t = this.zip;
					t.on("data", (i) => super.write(i)), t.on("end", () => super.end()), t.on("drain", () => this[hr]()), this.on("resume", () => t.resume());
				} else this.on("drain", this[hr]);
				this.noDirRecurse = !!e.noDirRecurse, this.follow = !!e.follow, this.noMtime = !!e.noMtime, e.mtime && (this.mtime = e.mtime), this.filter = typeof e.filter == "function" ? e.filter : () => !0, this[X] = new Eh.Yallist(), this[Q] = 0, this.jobs = Number(e.jobs) || 4, this[Dt] = !1, this[vt] = !1;
			}
			[Tn](e) {
				return super.write(e);
			}
			add(e) {
				return this.write(e), this;
			}
			end(e, t, i) {
				return typeof e == "function" && (i = e, e = void 0), typeof t == "function" && (i = t, t = void 0), e && this.add(e), this[vt] = !0, this[je](), i && i(), this;
			}
			write(e) {
				if (this[vt]) throw new Error("write after end");
				return typeof e == "string" ? this[Pi](e) : this[gn](e), this.flowing;
			}
			[gn](e) {
				let t = (0, lr.normalizeWindowsPath)(Rn.default.resolve(this.cwd, e.path));
				if (!this.filter(e.path, e)) e.resume();
				else {
					let i = new Pt(e.path, t);
					i.entry = new ur.WriteEntryTar(e, this[ar](i)), i.entry.on("end", () => this[or](i)), this[Q] += 1, this[X].push(i);
				}
				this[je]();
			}
			[Pi](e) {
				let t = (0, lr.normalizeWindowsPath)(Rn.default.resolve(this.cwd, e));
				this[X].push(new Pt(e, t)), this[je]();
			}
			[cr](e) {
				e.pending = !0, this[Q] += 1;
				let t = this.follow ? "stat" : "lstat";
				Ai.default[t](e.absolute, (i, r) => {
					e.pending = !1, this[Q] -= 1, i ? this.emit("error", i) : this[Di](e, r);
				});
			}
			[Di](e, t) {
				if (this.statCache.set(e.absolute, t), e.stat = t, !this.filter(e.path, t)) e.ignore = !0;
				else if (t.isFile() && t.nlink > 1 && !this.linkCache.get(`${t.dev}:${t.ino}`) && !this.sync) if (e === this[Te]) this[Ti](e);
				else {
					let i = `${t.dev}:${t.ino}`, r = this[Tt].get(i);
					r ? r.push(e) : this[Tt].set(i, [e]), e.pendingLink = !0, e.pending = !0;
				}
				this[je]();
			}
			[fr](e) {
				e.pending = !0, this[Q] += 1, Ai.default.readdir(e.absolute, (t, i) => {
					if (e.pending = !1, this[Q] -= 1, t) return this.emit("error", t);
					this[Ni](e, i);
				});
			}
			[Ni](e, t) {
				this.readdirCache.set(e.absolute, t), e.readdir = t, this[je]();
			}
			[je]() {
				if (!this[Dt]) {
					this[Dt] = !0;
					for (let e = this[X].head; e && this[Q] < this.jobs; e = e.next) if (this[Ti](e.value), e.value.ignore) {
						let t = e.next;
						this[X].removeNode(e), e.next = t;
					}
					this[Dt] = !1, this[vt] && this[X].length === 0 && this[Q] === 0 && (this.zip ? this.zip.end(Sn) : (super.write(Sn), super.end()));
				}
			}
			get [Te]() {
				return this[X] && this[X].head && this[X].head.value;
			}
			[or](e) {
				this[X].shift(), this[Q] -= 1;
				let { stat: t } = e;
				if (t && t.isFile() && t.nlink > 1) {
					let i = `${t.dev}:${t.ino}`, r = this[Tt].get(i);
					if (r) {
						this[Tt].delete(i);
						for (let n of r) n.pending = !1, this[Ti](n);
					}
				}
				this[je]();
			}
			[Ti](e) {
				if (e.pending && e.pendingLink && e === this[Te] && (e.pending = !1, e.pendingLink = !1), !e.pending) {
					if (e.entry) {
						e === this[Te] && !e.piped && this[Mi](e);
						return;
					}
					if (!e.stat) {
						let t = this.statCache.get(e.absolute);
						t ? this[Di](e, t) : this[cr](e);
					}
					if (e.stat && !e.ignore) {
						if (!this.noDirRecurse && e.stat.isDirectory() && !e.readdir) {
							let t = this.readdirCache.get(e.absolute);
							if (t ? this[Ni](e, t) : this[fr](e), !e.readdir) return;
						}
						if (e.entry = this[On](e), !e.entry) {
							e.ignore = !0;
							return;
						}
						e === this[Te] && !e.piped && this[Mi](e);
					}
				}
			}
			[ar](e) {
				return {
					onwarn: (t, i, r) => this.warn(t, i, r),
					noPax: this.noPax,
					cwd: this.cwd,
					absolute: e.absolute,
					preservePaths: this.preservePaths,
					maxReadSize: this.maxReadSize,
					strict: this.strict,
					portable: this.portable,
					linkCache: this.linkCache,
					statCache: this.statCache,
					noMtime: this.noMtime,
					mtime: this.mtime,
					prefix: this.prefix,
					onWriteEntry: this.onWriteEntry
				};
			}
			[On](e) {
				this[Q] += 1;
				try {
					return new this[Li](e.path, this[ar](e)).on("end", () => this[or](e)).on("error", (i) => this.emit("error", i));
				} catch (t) {
					this.emit("error", t);
				}
			}
			[hr]() {
				this[Te] && this[Te].entry && this[Te].entry.resume();
			}
			[Mi](e) {
				e.piped = !0, e.readdir && e.readdir.forEach((r) => {
					let n = e.path, o = n === "./" ? "" : n.replace(/\/*$/, "/");
					this[Pi](o + r);
				});
				let t = e.entry, i = this.zip;
				if (!t) throw new Error("cannot pipe without source");
				i ? t.on("data", (r) => {
					i.write(r) || t.pause();
				}) : t.on("data", (r) => {
					super.write(r) || t.pause();
				});
			}
			pause() {
				return this.zip && this.zip.pause(), super.pause();
			}
			warn(e, t, i = {}) {
				(0, bh.warnMethod)(this, e, t, i);
			}
		};
		L.Pack = Ii;
		var dr = class extends Ii {
			sync = !0;
			constructor(e) {
				super(e), this[Li] = ur.WriteEntrySync;
			}
			pause() {}
			resume() {}
			[cr](e) {
				let t = this.follow ? "statSync" : "lstatSync";
				this[Di](e, Ai.default[t](e.absolute));
			}
			[fr](e) {
				this[Ni](e, Ai.default.readdirSync(e.absolute));
			}
			[Mi](e) {
				let t = e.entry, i = this.zip;
				if (e.readdir && e.readdir.forEach((r) => {
					let n = e.path, o = n === "./" ? "" : n.replace(/\/*$/, "/");
					this[Pi](o + r);
				}), !t) throw new Error("Cannot pipe without source");
				i ? t.on("data", (r) => {
					i.write(r);
				}) : t.on("data", (r) => {
					super[Tn](r);
				});
			}
		};
		L.PackSync = dr;
	});
	var mr = d((ht) => {
		"use strict";
		var Sh = ht && ht.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(ht, "__esModule", { value: !0 });
		ht.create = void 0;
		var Dn = Ke(), Pn = Sh(require("node:path")), Nn = rt(), gh = Ve(), Ci = Fi(), Oh = (s, e) => {
			let t = new Ci.PackSync(s), i = new Dn.WriteStreamSync(s.file, { mode: s.mode || 438 });
			t.pipe(i), Mn(t, e);
		}, Rh = (s, e) => {
			let t = new Ci.Pack(s), i = new Dn.WriteStream(s.file, { mode: s.mode || 438 });
			t.pipe(i);
			let r = new Promise((n, o) => {
				i.on("error", o), i.on("close", n), t.on("error", o);
			});
			return Ln(t, e).catch((n) => t.emit("error", n)), r;
		}, Mn = (s, e) => {
			e.forEach((t) => {
				t.charAt(0) === "@" ? (0, Nn.list)({
					file: Pn.default.resolve(s.cwd, t.slice(1)),
					sync: !0,
					noResume: !0,
					onReadEntry: (i) => s.add(i)
				}) : s.add(t);
			}), s.end();
		}, Ln = async (s, e) => {
			for (let t of e) t.charAt(0) === "@" ? await (0, Nn.list)({
				file: Pn.default.resolve(String(s.cwd), t.slice(1)),
				noResume: !0,
				onReadEntry: (i) => {
					s.add(i);
				}
			}) : s.add(t);
			s.end();
		}, vh = (s, e) => {
			let t = new Ci.PackSync(s);
			return Mn(t, e), t;
		}, Th = (s, e) => {
			let t = new Ci.Pack(s);
			return Ln(t, e).catch((i) => t.emit("error", i)), t;
		};
		ht.create = (0, gh.makeCommand)(Oh, Rh, vh, Th, (s, e) => {
			if (!e?.length) throw new TypeError("no paths specified to add to archive");
		});
	});
	var jn = d((lt) => {
		"use strict";
		var Dh = lt && lt.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(lt, "__esModule", { value: !0 });
		lt.getWriteFlag = void 0;
		var Fn = Dh(require("fs")), Cn = (process.env.__FAKE_PLATFORM__ || process.platform) === "win32", { O_CREAT: Bn, O_NOFOLLOW: An, O_TRUNC: zn, O_WRONLY: kn } = Fn.default.constants, xn = Number(process.env.__FAKE_FS_O_FILENAME__) || Fn.default.constants.UV_FS_O_FILEMAP || 0, Nh = Cn && !!xn, Mh = 512 * 1024, Lh = xn | zn | Bn | kn, In = !Cn && typeof An == "number" ? An | zn | Bn | kn : null;
		lt.getWriteFlag = In !== null ? () => In : Nh ? (s) => s < Mh ? Lh : "w" : () => "w";
	});
	var qn = d((he) => {
		"use strict";
		var Un = he && he.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(he, "__esModule", { value: !0 });
		he.chownrSync = he.chownr = void 0;
		var zi = Un(require("node:fs")), Nt = Un(require("node:path")), pr = (s, e, t) => {
			try {
				return zi.default.lchownSync(s, e, t);
			} catch (i) {
				if (i?.code !== "ENOENT") throw i;
			}
		}, Bi = (s, e, t, i) => {
			zi.default.lchown(s, e, t, (r) => {
				i(r && r?.code !== "ENOENT" ? r : null);
			});
		}, Ah = (s, e, t, i, r) => {
			if (e.isDirectory()) (0, he.chownr)(Nt.default.resolve(s, e.name), t, i, (n) => {
				if (n) return r(n);
				Bi(Nt.default.resolve(s, e.name), t, i, r);
			});
			else Bi(Nt.default.resolve(s, e.name), t, i, r);
		}, Ih = (s, e, t, i) => {
			zi.default.readdir(s, { withFileTypes: !0 }, (r, n) => {
				if (r) {
					if (r.code === "ENOENT") return i();
					if (r.code !== "ENOTDIR" && r.code !== "ENOTSUP") return i(r);
				}
				if (r || !n.length) return Bi(s, e, t, i);
				let o = n.length, h = null, a = (l) => {
					if (!h) {
						if (l) return i(h = l);
						if (--o === 0) return Bi(s, e, t, i);
					}
				};
				for (let l of n) Ah(s, l, e, t, a);
			});
		};
		he.chownr = Ih;
		var Fh = (s, e, t, i) => {
			e.isDirectory() && (0, he.chownrSync)(Nt.default.resolve(s, e.name), t, i), pr(Nt.default.resolve(s, e.name), t, i);
		}, Ch = (s, e, t) => {
			let i;
			try {
				i = zi.default.readdirSync(s, { withFileTypes: !0 });
			} catch (r) {
				let n = r;
				if (n?.code === "ENOENT") return;
				if (n?.code === "ENOTDIR" || n?.code === "ENOTSUP") return pr(s, e, t);
				throw n;
			}
			for (let r of i) Fh(s, r, e, t);
			return pr(s, e, t);
		};
		he.chownrSync = Ch;
	});
	var Wn = d((ki) => {
		"use strict";
		Object.defineProperty(ki, "__esModule", { value: !0 });
		ki.CwdError = void 0;
		var _r = class extends Error {
			path;
			code;
			syscall = "chdir";
			constructor(e, t) {
				super(`${t}: Cannot cd into '${e}'`), this.path = e, this.code = t;
			}
			get name() {
				return "CwdError";
			}
		};
		ki.CwdError = _r;
	});
	var yr = d((xi) => {
		"use strict";
		Object.defineProperty(xi, "__esModule", { value: !0 });
		xi.SymlinkError = void 0;
		var wr = class extends Error {
			path;
			symlink;
			syscall = "symlink";
			code = "TAR_SYMLINK_ERROR";
			constructor(e, t) {
				super("TAR_SYMLINK_ERROR: Cannot extract through symbolic link"), this.symlink = e, this.path = t;
			}
			get name() {
				return "SymlinkError";
			}
		};
		xi.SymlinkError = wr;
	});
	var Kn = d((De) => {
		"use strict";
		var br = De && De.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(De, "__esModule", { value: !0 });
		De.mkdirSync = De.mkdir = void 0;
		var Hn = qn(), j = br(require("node:fs")), Bh = br(require("node:fs/promises")), ji = br(require("node:path")), Zn = Wn(), pe = tt(), Gn = yr(), zh = (s, e) => {
			j.default.stat(s, (t, i) => {
				(t || !i.isDirectory()) && (t = new Zn.CwdError(s, t?.code || "ENOTDIR")), e(t);
			});
		}, kh = (s, e, t) => {
			s = (0, pe.normalizeWindowsPath)(s);
			let i = e.umask ?? 18, r = e.mode | 448, n = (r & i) !== 0, o = e.uid, h = e.gid, a = typeof o == "number" && typeof h == "number" && (o !== e.processUid || h !== e.processGid), l = e.preserve, u = e.unlink, c = (0, pe.normalizeWindowsPath)(e.cwd), E = (w, P) => {
				w ? t(w) : P && a ? (0, Hn.chownr)(P, o, h, (kt) => E(kt)) : n ? j.default.chmod(s, r, t) : t();
			};
			if (s === c) return zh(s, E);
			if (l) return Bh.default.mkdir(s, {
				mode: r,
				recursive: !0
			}).then((w) => E(null, w ?? void 0), E);
			Er(c, (0, pe.normalizeWindowsPath)(ji.default.relative(c, s)).split("/"), r, u, c, void 0, E);
		};
		De.mkdir = kh;
		var Er = (s, e, t, i, r, n, o) => {
			if (e.length === 0) return o(null, n);
			let h = e.shift(), a = (0, pe.normalizeWindowsPath)(ji.default.resolve(s + "/" + h));
			j.default.mkdir(a, t, Yn(a, e, t, i, r, n, o));
		}, Yn = (s, e, t, i, r, n, o) => (h) => {
			h ? j.default.lstat(s, (a, l) => {
				if (a) a.path = a.path && (0, pe.normalizeWindowsPath)(a.path), o(a);
				else if (l.isDirectory()) Er(s, e, t, i, r, n, o);
				else if (i) j.default.unlink(s, (u) => {
					if (u) return o(u);
					j.default.mkdir(s, t, Yn(s, e, t, i, r, n, o));
				});
				else {
					if (l.isSymbolicLink()) return o(new Gn.SymlinkError(s, s + "/" + e.join("/")));
					o(h);
				}
			}) : (n = n || s, Er(s, e, t, i, r, n, o));
		}, xh = (s) => {
			let e = !1, t;
			try {
				e = j.default.statSync(s).isDirectory();
			} catch (i) {
				t = i?.code;
			} finally {
				if (!e) throw new Zn.CwdError(s, t ?? "ENOTDIR");
			}
		}, jh = (s, e) => {
			s = (0, pe.normalizeWindowsPath)(s);
			let t = e.umask ?? 18, i = e.mode | 448, r = (i & t) !== 0, n = e.uid, o = e.gid, h = typeof n == "number" && typeof o == "number" && (n !== e.processUid || o !== e.processGid), a = e.preserve, l = e.unlink, u = (0, pe.normalizeWindowsPath)(e.cwd), c = (w) => {
				w && h && (0, Hn.chownrSync)(w, n, o), r && j.default.chmodSync(s, i);
			};
			if (s === u) return xh(u), c();
			if (a) return c(j.default.mkdirSync(s, {
				mode: i,
				recursive: !0
			}) ?? void 0);
			let D = (0, pe.normalizeWindowsPath)(ji.default.relative(u, s)).split("/"), A;
			for (let w = D.shift(), P = u; w && (P += "/" + w); w = D.shift()) {
				P = (0, pe.normalizeWindowsPath)(ji.default.resolve(P));
				try {
					j.default.mkdirSync(P, i), A = A || P;
				} catch {
					let kt = j.default.lstatSync(P);
					if (kt.isDirectory()) continue;
					if (l) {
						j.default.unlinkSync(P), j.default.mkdirSync(P, i), A = A || P;
						continue;
					} else if (kt.isSymbolicLink()) return new Gn.SymlinkError(P, P + "/" + D.join("/"));
				}
			}
			return c(A);
		};
		De.mkdirSync = jh;
	});
	var $n = d((Ui) => {
		"use strict";
		Object.defineProperty(Ui, "__esModule", { value: !0 });
		Ui.normalizeUnicode = void 0;
		var Sr = Object.create(null), Vn = 1e4, ut = /* @__PURE__ */ new Set(), Uh = (s) => {
			ut.has(s) ? ut.delete(s) : Sr[s] = s.normalize("NFD").toLocaleLowerCase("en").toLocaleUpperCase("en"), ut.add(s);
			let e = Sr[s], t = ut.size - Vn;
			if (t > Vn / 10) {
				for (let i of ut) if (ut.delete(i), delete Sr[i], --t <= 0) break;
			}
			return e;
		};
		Ui.normalizeUnicode = Uh;
	});
	var Qn = d((qi) => {
		"use strict";
		Object.defineProperty(qi, "__esModule", { value: !0 });
		qi.PathReservations = void 0;
		var Xn = require("node:path"), qh = $n(), Wh = wi(), Zh = (process.env.TESTING_TAR_FAKE_PLATFORM || process.platform) === "win32", Gh = (s) => s.split("/").slice(0, -1).reduce((t, i) => {
			let r = t.at(-1);
			return r !== void 0 && (i = (0, Xn.join)(r, i)), t.push(i || "/"), t;
		}, []), gr = class {
			#e = /* @__PURE__ */ new Map();
			#i = /* @__PURE__ */ new Map();
			#s = /* @__PURE__ */ new Set();
			reserve(e, t) {
				e = Zh ? ["win32 parallelization disabled"] : e.map((r) => (0, Wh.stripTrailingSlashes)((0, Xn.join)((0, qh.normalizeUnicode)(r))));
				let i = new Set(e.map((r) => Gh(r)).reduce((r, n) => r.concat(n)));
				this.#i.set(t, {
					dirs: i,
					paths: e
				});
				for (let r of e) {
					let n = this.#e.get(r);
					n ? n.push(t) : this.#e.set(r, [t]);
				}
				for (let r of i) {
					let n = this.#e.get(r);
					if (!n) this.#e.set(r, [new Set([t])]);
					else {
						let o = n.at(-1);
						o instanceof Set ? o.add(t) : n.push(new Set([t]));
					}
				}
				return this.#r(t);
			}
			#n(e) {
				let t = this.#i.get(e);
				if (!t) throw new Error("function does not have any path reservations");
				return {
					paths: t.paths.map((i) => this.#e.get(i)),
					dirs: [...t.dirs].map((i) => this.#e.get(i))
				};
			}
			check(e) {
				let { paths: t, dirs: i } = this.#n(e);
				return t.every((r) => r && r[0] === e) && i.every((r) => r && r[0] instanceof Set && r[0].has(e));
			}
			#r(e) {
				return this.#s.has(e) || !this.check(e) ? !1 : (this.#s.add(e), e(() => this.#t(e)), !0);
			}
			#t(e) {
				if (!this.#s.has(e)) return !1;
				let t = this.#i.get(e);
				if (!t) throw new Error("invalid reservation");
				let { paths: i, dirs: r } = t, n = /* @__PURE__ */ new Set();
				for (let o of i) {
					let h = this.#e.get(o);
					if (!h || h?.[0] !== e) continue;
					let a = h[1];
					if (!a) {
						this.#e.delete(o);
						continue;
					}
					if (h.shift(), typeof a == "function") n.add(a);
					else for (let l of a) n.add(l);
				}
				for (let o of r) {
					let h = this.#e.get(o), a = h?.[0];
					if (!(!h || !(a instanceof Set))) if (a.size === 1 && h.length === 1) {
						this.#e.delete(o);
						continue;
					} else if (a.size === 1) {
						h.shift();
						let l = h[0];
						typeof l == "function" && n.add(l);
					} else a.delete(e);
				}
				return this.#s.delete(e), n.forEach((o) => this.#r(o)), !0;
			}
		};
		qi.PathReservations = gr;
	});
	var Jn = d((Wi) => {
		"use strict";
		Object.defineProperty(Wi, "__esModule", { value: !0 });
		Wi.umask = void 0;
		var Yh = () => process.umask();
		Wi.umask = Yh;
	});
	var Ir = d((k) => {
		"use strict";
		var Kh = k && k.__createBinding || (Object.create ? (function(s, e, t, i) {
			i === void 0 && (i = t);
			var r = Object.getOwnPropertyDescriptor(e, t);
			(!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = {
				enumerable: !0,
				get: function() {
					return e[t];
				}
			}), Object.defineProperty(s, i, r);
		}) : (function(s, e, t, i) {
			i === void 0 && (i = t), s[i] = e[t];
		})), Vh = k && k.__setModuleDefault || (Object.create ? (function(s, e) {
			Object.defineProperty(s, "default", {
				enumerable: !0,
				value: e
			});
		}) : function(s, e) {
			s.default = e;
		}), lo = k && k.__importStar || (function() {
			var s = function(e) {
				return s = Object.getOwnPropertyNames || function(t) {
					var i = [];
					for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
					return i;
				}, s(e);
			};
			return function(e) {
				if (e && e.__esModule) return e;
				var t = {};
				if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && Kh(t, e, i[r]);
				return Vh(t, e), t;
			};
		})(), Ar = k && k.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(k, "__esModule", { value: !0 });
		k.UnpackSync = k.Unpack = void 0;
		var $h = lo(Ke()), Xh = Ar(require("node:assert")), uo = require("node:crypto"), m = Ar(require("node:fs")), g = Ar(require("node:path")), co = jn(), fo = Kn(), U = tt(), Qh = pi(), Jh = Hs(), eo = lo(Gs()), el = Qn(), mo = yr(), tl = Jn(), to = Symbol("onEntry"), Tr = Symbol("checkFs"), io = Symbol("checkFs2"), Dr = Symbol("isReusable"), Z = Symbol("makeFs"), Pr = Symbol("file"), Nr = Symbol("directory"), Zi = Symbol("link"), so = Symbol("symlink"), ro = Symbol("hardlink"), Lt = Symbol("ensureNoSymlink"), no = Symbol("unsupported"), oo = Symbol("checkPath"), Or = Symbol("stripAbsolutePath"), Pe = Symbol("mkdir"), T = Symbol("onError"), Hi = Symbol("pending"), ao = Symbol("pend"), ct = Symbol("unpend"), Rr = Symbol("ended"), vr = Symbol("maybeClose"), Mr = Symbol("skip"), At = Symbol("doChown"), It = Symbol("uid"), Ft = Symbol("gid"), Ct = Symbol("checkedCwd"), Bt = (process.env.TESTING_TAR_FAKE_PLATFORM || process.platform) === "win32", sl = 1024, rl = (s, e) => {
			if (!Bt) return m.default.unlink(s, e);
			let t = s + ".DELETE." + (0, uo.randomBytes)(16).toString("hex");
			m.default.rename(s, t, (i) => {
				if (i) return e(i);
				m.default.unlink(t, e);
			});
		}, nl = (s) => {
			if (!Bt) return m.default.unlinkSync(s);
			let e = s + ".DELETE." + (0, uo.randomBytes)(16).toString("hex");
			m.default.renameSync(s, e), m.default.unlinkSync(e);
		}, ho = (s, e, t) => s !== void 0 && s === s >>> 0 ? s : e !== void 0 && e === e >>> 0 ? e : t, Gi = class extends Qh.Parser {
			[Rr] = !1;
			[Ct] = !1;
			[Hi] = 0;
			reservations = new el.PathReservations();
			transform;
			writable = !0;
			readable = !1;
			uid;
			gid;
			setOwner;
			preserveOwner;
			processGid;
			processUid;
			maxDepth;
			forceChown;
			win32;
			newer;
			keep;
			noMtime;
			preservePaths;
			unlink;
			cwd;
			strip;
			processUmask;
			umask;
			dmode;
			fmode;
			chmod;
			constructor(e = {}) {
				if (e.ondone = () => {
					this[Rr] = !0, this[vr]();
				}, super(e), this.transform = e.transform, this.chmod = !!e.chmod, typeof e.uid == "number" || typeof e.gid == "number") {
					if (typeof e.uid != "number" || typeof e.gid != "number") throw new TypeError("cannot set owner without number uid and gid");
					if (e.preserveOwner) throw new TypeError("cannot preserve owner in archive and also set owner explicitly");
					this.uid = e.uid, this.gid = e.gid, this.setOwner = !0;
				} else this.uid = void 0, this.gid = void 0, this.setOwner = !1;
				this.preserveOwner = e.preserveOwner === void 0 && typeof e.uid != "number" ? !!(process.getuid && process.getuid() === 0) : !!e.preserveOwner, this.processUid = (this.preserveOwner || this.setOwner) && process.getuid ? process.getuid() : void 0, this.processGid = (this.preserveOwner || this.setOwner) && process.getgid ? process.getgid() : void 0, this.maxDepth = typeof e.maxDepth == "number" ? e.maxDepth : sl, this.forceChown = e.forceChown === !0, this.win32 = !!e.win32 || Bt, this.newer = !!e.newer, this.keep = !!e.keep, this.noMtime = !!e.noMtime, this.preservePaths = !!e.preservePaths, this.unlink = !!e.unlink, this.cwd = (0, U.normalizeWindowsPath)(g.default.resolve(e.cwd || process.cwd())), this.strip = Number(e.strip) || 0, this.processUmask = this.chmod ? typeof e.processUmask == "number" ? e.processUmask : (0, tl.umask)() : 0, this.umask = typeof e.umask == "number" ? e.umask : this.processUmask, this.dmode = e.dmode || 511 & ~this.umask, this.fmode = e.fmode || 438 & ~this.umask, this.on("entry", (t) => this[to](t));
			}
			warn(e, t, i = {}) {
				return (e === "TAR_BAD_ARCHIVE" || e === "TAR_ABORT") && (i.recoverable = !1), super.warn(e, t, i);
			}
			[vr]() {
				this[Rr] && this[Hi] === 0 && (this.emit("prefinish"), this.emit("finish"), this.emit("end"));
			}
			[Or](e, t) {
				let i = e[t], { type: r } = e;
				if (!i || this.preservePaths) return !0;
				let [n, o] = (0, Jh.stripAbsolutePath)(i), h = o.replaceAll(/\\/g, "/").split("/");
				if (h.includes("..") || Bt && /^[a-z]:\.\.$/i.test(h[0] ?? "")) {
					if (t === "path" || r === "Link") return this.warn("TAR_ENTRY_ERROR", `${t} contains '..'`, {
						entry: e,
						[t]: i
					}), !1;
					let a = g.default.posix.dirname(e.path), l = g.default.posix.normalize(g.default.posix.join(a, h.join("/")));
					if (l.startsWith("../") || l === "..") return this.warn("TAR_ENTRY_ERROR", `${t} escapes extraction directory`, {
						entry: e,
						[t]: i
					}), !1;
				}
				return n && (e[t] = String(o), this.warn("TAR_ENTRY_INFO", `stripping ${n} from absolute ${t}`, {
					entry: e,
					[t]: i
				})), !0;
			}
			[oo](e) {
				let t = (0, U.normalizeWindowsPath)(e.path), i = t.split("/");
				if (this.strip) {
					if (i.length < this.strip) return !1;
					if (e.type === "Link") {
						let r = (0, U.normalizeWindowsPath)(String(e.linkpath)).split("/");
						if (r.length >= this.strip) e.linkpath = r.slice(this.strip).join("/");
						else return !1;
					}
					i.splice(0, this.strip), e.path = i.join("/");
				}
				if (isFinite(this.maxDepth) && i.length > this.maxDepth) return this.warn("TAR_ENTRY_ERROR", "path excessively deep", {
					entry: e,
					path: t,
					depth: i.length,
					maxDepth: this.maxDepth
				}), !1;
				if (!this[Or](e, "path") || !this[Or](e, "linkpath")) return !1;
				if (e.absolute = g.default.isAbsolute(e.path) ? (0, U.normalizeWindowsPath)(g.default.resolve(e.path)) : (0, U.normalizeWindowsPath)(g.default.resolve(this.cwd, e.path)), !this.preservePaths && typeof e.absolute == "string" && e.absolute.indexOf(this.cwd + "/") !== 0 && e.absolute !== this.cwd) return this.warn("TAR_ENTRY_ERROR", "path escaped extraction target", {
					entry: e,
					path: (0, U.normalizeWindowsPath)(e.path),
					resolvedPath: e.absolute,
					cwd: this.cwd
				}), !1;
				if (e.absolute === this.cwd && e.type !== "Directory" && e.type !== "GNUDumpDir") return !1;
				if (this.win32) {
					let { root: r } = g.default.win32.parse(String(e.absolute));
					e.absolute = r + eo.encode(String(e.absolute).slice(r.length));
					let { root: n } = g.default.win32.parse(e.path);
					e.path = n + eo.encode(e.path.slice(n.length));
				}
				return !0;
			}
			[to](e) {
				if (!this[oo](e)) return e.resume();
				switch (Xh.default.equal(typeof e.absolute, "string"), e.type) {
					case "Directory":
					case "GNUDumpDir": e.mode && (e.mode = e.mode | 448);
					case "File":
					case "OldFile":
					case "ContiguousFile":
					case "Link":
					case "SymbolicLink": return this[Tr](e);
					default: return this[no](e);
				}
			}
			[T](e, t) {
				e.name === "CwdError" ? this.emit("error", e) : (this.warn("TAR_ENTRY_ERROR", e, { entry: t }), this[ct](), t.resume());
			}
			[Pe](e, t, i) {
				(0, fo.mkdir)((0, U.normalizeWindowsPath)(e), {
					uid: this.uid,
					gid: this.gid,
					processUid: this.processUid,
					processGid: this.processGid,
					umask: this.processUmask,
					preserve: this.preservePaths,
					unlink: this.unlink,
					cwd: this.cwd,
					mode: t
				}, i);
			}
			[At](e) {
				return this.forceChown || this.preserveOwner && (typeof e.uid == "number" && e.uid !== this.processUid || typeof e.gid == "number" && e.gid !== this.processGid) || typeof this.uid == "number" && this.uid !== this.processUid || typeof this.gid == "number" && this.gid !== this.processGid;
			}
			[It](e) {
				return ho(this.uid, e.uid, this.processUid);
			}
			[Ft](e) {
				return ho(this.gid, e.gid, this.processGid);
			}
			[Pr](e, t) {
				let i = typeof e.mode == "number" ? e.mode & 4095 : this.fmode, r = new $h.WriteStream(String(e.absolute), {
					flags: (0, co.getWriteFlag)(e.size),
					mode: i,
					autoClose: !1
				});
				r.on("error", (a) => {
					r.fd && m.default.close(r.fd, () => {}), r.write = () => !0, this[T](a, e), t();
				});
				let n = 1, o = (a) => {
					if (a) {
						r.fd && m.default.close(r.fd, () => {}), this[T](a, e), t();
						return;
					}
					--n === 0 && r.fd !== void 0 && m.default.close(r.fd, (l) => {
						l ? this[T](l, e) : this[ct](), t();
					});
				};
				r.on("finish", () => {
					let a = String(e.absolute), l = r.fd;
					if (typeof l == "number" && e.mtime && !this.noMtime) {
						n++;
						let u = e.atime || /* @__PURE__ */ new Date(), c = e.mtime;
						m.default.futimes(l, u, c, (E) => E ? m.default.utimes(a, u, c, (D) => o(D && E)) : o());
					}
					if (typeof l == "number" && this[At](e)) {
						n++;
						let u = this[It](e), c = this[Ft](e);
						typeof u == "number" && typeof c == "number" && m.default.fchown(l, u, c, (E) => E ? m.default.chown(a, u, c, (D) => o(D && E)) : o());
					}
					o();
				});
				let h = this.transform && this.transform(e) || e;
				h !== e && (h.on("error", (a) => {
					this[T](a, e), t();
				}), e.pipe(h)), h.pipe(r);
			}
			[Nr](e, t) {
				let i = typeof e.mode == "number" ? e.mode & 4095 : this.dmode;
				this[Pe](String(e.absolute), i, (r) => {
					if (r) {
						this[T](r, e), t();
						return;
					}
					let n = 1, o = () => {
						--n === 0 && (t(), this[ct](), e.resume());
					};
					e.mtime && !this.noMtime && (n++, m.default.utimes(String(e.absolute), e.atime || /* @__PURE__ */ new Date(), e.mtime, o)), this[At](e) && (n++, m.default.chown(String(e.absolute), Number(this[It](e)), Number(this[Ft](e)), o)), o();
				});
			}
			[no](e) {
				e.unsupported = !0, this.warn("TAR_ENTRY_UNSUPPORTED", `unsupported entry type: ${e.type}`, { entry: e }), e.resume();
			}
			[so](e, t) {
				let i = (0, U.normalizeWindowsPath)(g.default.relative(this.cwd, g.default.resolve(g.default.dirname(String(e.absolute)), String(e.linkpath)))).split("/");
				this[Lt](e, this.cwd, i, () => this[Zi](e, String(e.linkpath), "symlink", t), (r) => {
					this[T](r, e), t();
				});
			}
			[ro](e, t) {
				let i = (0, U.normalizeWindowsPath)(g.default.resolve(this.cwd, String(e.linkpath))), r = (0, U.normalizeWindowsPath)(String(e.linkpath)).split("/");
				this[Lt](e, this.cwd, r, () => this[Zi](e, i, "link", t), (n) => {
					this[T](n, e), t();
				});
			}
			[Lt](e, t, i, r, n) {
				let o = i.shift();
				if (this.preservePaths || o === void 0) return r();
				let h = g.default.resolve(t, o);
				m.default.lstat(h, (a, l) => {
					if (a) return r();
					if (l?.isSymbolicLink()) return n(new mo.SymlinkError(h, g.default.resolve(h, i.join("/"))));
					this[Lt](e, h, i, r, n);
				});
			}
			[ao]() {
				this[Hi]++;
			}
			[ct]() {
				this[Hi]--, this[vr]();
			}
			[Mr](e) {
				this[ct](), e.resume();
			}
			[Dr](e, t) {
				return e.type === "File" && !this.unlink && t.isFile() && t.nlink <= 1 && !Bt;
			}
			[Tr](e) {
				this[ao]();
				let t = [e.path];
				e.linkpath && t.push(e.linkpath), this.reservations.reserve(t, (i) => this[io](e, i));
			}
			[io](e, t) {
				let i = (h) => {
					t(h);
				}, r = () => {
					this[Pe](this.cwd, this.dmode, (h) => {
						if (h) {
							this[T](h, e), i();
							return;
						}
						this[Ct] = !0, n();
					});
				}, n = () => {
					if (e.absolute !== this.cwd) {
						let h = (0, U.normalizeWindowsPath)(g.default.dirname(String(e.absolute)));
						if (h !== this.cwd) return this[Pe](h, this.dmode, (a) => {
							if (a) {
								this[T](a, e), i();
								return;
							}
							o();
						});
					}
					o();
				}, o = () => {
					m.default.lstat(String(e.absolute), (h, a) => {
						if (a && (this.keep || this.newer && a.mtime > (e.mtime ?? a.mtime))) {
							this[Mr](e), i();
							return;
						}
						if (h || this[Dr](e, a)) return this[Z](null, e, i);
						if (a.isDirectory()) {
							if (e.type === "Directory") {
								let l = this.chmod && e.mode && (a.mode & 4095) !== e.mode, u = (c) => this[Z](c ?? null, e, i);
								return l ? m.default.chmod(String(e.absolute), Number(e.mode), u) : u();
							}
							if (e.absolute !== this.cwd) return m.default.rmdir(String(e.absolute), (l) => this[Z](l ?? null, e, i));
						}
						if (e.absolute === this.cwd) return this[Z](null, e, i);
						rl(String(e.absolute), (l) => this[Z](l ?? null, e, i));
					});
				};
				this[Ct] ? n() : r();
			}
			[Z](e, t, i) {
				if (e) {
					this[T](e, t), i();
					return;
				}
				switch (t.type) {
					case "File":
					case "OldFile":
					case "ContiguousFile": return this[Pr](t, i);
					case "Link": return this[ro](t, i);
					case "SymbolicLink": return this[so](t, i);
					case "Directory":
					case "GNUDumpDir": return this[Nr](t, i);
				}
			}
			[Zi](e, t, i, r) {
				m.default[i](t, String(e.absolute), (n) => {
					n ? this[T](n, e) : (this[ct](), e.resume()), r();
				});
			}
		};
		k.Unpack = Gi;
		var Mt = (s) => {
			try {
				return [null, s()];
			} catch (e) {
				return [e, null];
			}
		}, Lr = class extends Gi {
			sync = !0;
			[Z](e, t) {
				return super[Z](e, t, () => {});
			}
			[Tr](e) {
				if (!this[Ct]) {
					let n = this[Pe](this.cwd, this.dmode);
					if (n) return this[T](n, e);
					this[Ct] = !0;
				}
				if (e.absolute !== this.cwd) {
					let n = (0, U.normalizeWindowsPath)(g.default.dirname(String(e.absolute)));
					if (n !== this.cwd) {
						let o = this[Pe](n, this.dmode);
						if (o) return this[T](o, e);
					}
				}
				let [t, i] = Mt(() => m.default.lstatSync(String(e.absolute)));
				if (i && (this.keep || this.newer && i.mtime > (e.mtime ?? i.mtime))) return this[Mr](e);
				if (t || this[Dr](e, i)) return this[Z](null, e);
				if (i.isDirectory()) {
					if (e.type === "Directory") {
						let [h] = this.chmod && e.mode && (i.mode & 4095) !== e.mode ? Mt(() => {
							m.default.chmodSync(String(e.absolute), Number(e.mode));
						}) : [];
						return this[Z](h, e);
					}
					let [n] = Mt(() => m.default.rmdirSync(String(e.absolute)));
					this[Z](n, e);
				}
				let [r] = e.absolute === this.cwd ? [] : Mt(() => nl(String(e.absolute)));
				this[Z](r, e);
			}
			[Pr](e, t) {
				let i = typeof e.mode == "number" ? e.mode & 4095 : this.fmode, r = (h) => {
					let a;
					try {
						m.default.closeSync(n);
					} catch (l) {
						a = l;
					}
					(h || a) && this[T](h || a, e), t();
				}, n;
				try {
					n = m.default.openSync(String(e.absolute), (0, co.getWriteFlag)(e.size), i);
				} catch (h) {
					return r(h);
				}
				let o = this.transform && this.transform(e) || e;
				o !== e && (o.on("error", (h) => this[T](h, e)), e.pipe(o)), o.on("data", (h) => {
					try {
						m.default.writeSync(n, h, 0, h.length);
					} catch (a) {
						r(a);
					}
				}), o.on("end", () => {
					let h = null;
					if (e.mtime && !this.noMtime) {
						let a = e.atime || /* @__PURE__ */ new Date(), l = e.mtime;
						try {
							m.default.futimesSync(n, a, l);
						} catch (u) {
							try {
								m.default.utimesSync(String(e.absolute), a, l);
							} catch {
								h = u;
							}
						}
					}
					if (this[At](e)) {
						let a = this[It](e), l = this[Ft](e);
						try {
							m.default.fchownSync(n, Number(a), Number(l));
						} catch (u) {
							try {
								m.default.chownSync(String(e.absolute), Number(a), Number(l));
							} catch {
								h = h || u;
							}
						}
					}
					r(h);
				});
			}
			[Nr](e, t) {
				let i = typeof e.mode == "number" ? e.mode & 4095 : this.dmode, r = this[Pe](String(e.absolute), i);
				if (r) {
					this[T](r, e), t();
					return;
				}
				if (e.mtime && !this.noMtime) try {
					m.default.utimesSync(String(e.absolute), e.atime || /* @__PURE__ */ new Date(), e.mtime);
				} catch {}
				if (this[At](e)) try {
					m.default.chownSync(String(e.absolute), Number(this[It](e)), Number(this[Ft](e)));
				} catch {}
				t(), e.resume();
			}
			[Pe](e, t) {
				try {
					return (0, fo.mkdirSync)((0, U.normalizeWindowsPath)(e), {
						uid: this.uid,
						gid: this.gid,
						processUid: this.processUid,
						processGid: this.processGid,
						umask: this.processUmask,
						preserve: this.preservePaths,
						unlink: this.unlink,
						cwd: this.cwd,
						mode: t
					});
				} catch (i) {
					return i;
				}
			}
			[Lt](e, t, i, r, n) {
				if (this.preservePaths || i.length === 0) return r();
				let o = t;
				for (let h of i) {
					o = g.default.resolve(o, h);
					let [a, l] = Mt(() => m.default.lstatSync(o));
					if (a) return r();
					if (l.isSymbolicLink()) return n(new mo.SymlinkError(o, g.default.resolve(t, i.join("/"))));
				}
				r();
			}
			[Zi](e, t, i, r) {
				let n = `${i}Sync`;
				try {
					m.default[n](t, String(e.absolute)), r(), e.resume();
				} catch (o) {
					return this[T](o, e);
				}
			}
		};
		k.UnpackSync = Lr;
	});
	var Fr = d((G) => {
		"use strict";
		var ol = G && G.__createBinding || (Object.create ? (function(s, e, t, i) {
			i === void 0 && (i = t);
			var r = Object.getOwnPropertyDescriptor(e, t);
			(!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = {
				enumerable: !0,
				get: function() {
					return e[t];
				}
			}), Object.defineProperty(s, i, r);
		}) : (function(s, e, t, i) {
			i === void 0 && (i = t), s[i] = e[t];
		})), al = G && G.__setModuleDefault || (Object.create ? (function(s, e) {
			Object.defineProperty(s, "default", {
				enumerable: !0,
				value: e
			});
		}) : function(s, e) {
			s.default = e;
		}), hl = G && G.__importStar || (function() {
			var s = function(e) {
				return s = Object.getOwnPropertyNames || function(t) {
					var i = [];
					for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
					return i;
				}, s(e);
			};
			return function(e) {
				if (e && e.__esModule) return e;
				var t = {};
				if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && ol(t, e, i[r]);
				return al(t, e), t;
			};
		})(), ll = G && G.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(G, "__esModule", { value: !0 });
		G.extract = void 0;
		var po = hl(Ke()), _o = ll(require("node:fs")), ul = rt(), cl = Ve(), Yi = Ir(), fl = (s) => {
			let e = new Yi.UnpackSync(s), t = s.file, i = _o.default.statSync(t), r = s.maxReadSize || 16 * 1024 * 1024;
			new po.ReadStreamSync(t, {
				readSize: r,
				size: i.size
			}).pipe(e);
		}, dl = (s, e) => {
			let t = new Yi.Unpack(s), i = s.maxReadSize || 16 * 1024 * 1024, r = s.file;
			return new Promise((o, h) => {
				t.on("error", h), t.on("close", o), _o.default.stat(r, (a, l) => {
					if (a) h(a);
					else {
						let u = new po.ReadStream(r, {
							readSize: i,
							size: l.size
						});
						u.on("error", h), u.pipe(t);
					}
				});
			});
		};
		G.extract = (0, cl.makeCommand)(fl, dl, (s) => new Yi.UnpackSync(s), (s) => new Yi.Unpack(s), (s, e) => {
			e?.length && (0, ul.filesFilter)(s, e);
		});
	});
	var Ki = d((ft) => {
		"use strict";
		var wo = ft && ft.__importDefault || function(s) {
			return s && s.__esModule ? s : { default: s };
		};
		Object.defineProperty(ft, "__esModule", { value: !0 });
		ft.replace = void 0;
		var yo = Ke(), q = wo(require("node:fs")), Eo = wo(require("node:path")), bo = et(), So = rt(), ml = Ve(), pl = Xt(), go = Fi(), _l = (s, e) => {
			let t = new go.PackSync(s), i = !0, r, n;
			try {
				try {
					r = q.default.openSync(s.file, "r+");
				} catch (a) {
					if (a?.code === "ENOENT") r = q.default.openSync(s.file, "w+");
					else throw a;
				}
				let o = q.default.fstatSync(r), h = Buffer.alloc(512);
				e: for (n = 0; n < o.size; n += 512) {
					for (let u = 0, c = 0; u < 512; u += c) {
						if (c = q.default.readSync(r, h, u, h.length - u, n + u), n === 0 && h[0] === 31 && h[1] === 139) throw new Error("cannot append to compressed archives");
						if (!c) break e;
					}
					let a = new bo.Header(h);
					if (!a.cksumValid) break;
					let l = 512 * Math.ceil((a.size || 0) / 512);
					if (n + l + 512 > o.size) break;
					n += l, s.mtimeCache && a.mtime && s.mtimeCache.set(String(a.path), a.mtime);
				}
				i = !1, wl(s, t, n, r, e);
			} finally {
				if (i) try {
					q.default.closeSync(r);
				} catch {}
			}
		}, wl = (s, e, t, i, r) => {
			let n = new yo.WriteStreamSync(s.file, {
				fd: i,
				start: t
			});
			e.pipe(n), El(e, r);
		}, yl = (s, e) => {
			e = Array.from(e);
			let t = new go.Pack(s), i = (n, o, h) => {
				let a = (D, A) => {
					D ? q.default.close(n, (w) => h(D)) : h(null, A);
				}, l = 0;
				if (o === 0) return a(null, 0);
				let u = 0, c = Buffer.alloc(512), E = (D, A) => {
					if (D || A === void 0) return a(D);
					if (u += A, u < 512 && A) return q.default.read(n, c, u, c.length - u, l + u, E);
					if (l === 0 && c[0] === 31 && c[1] === 139) return a(/* @__PURE__ */ new Error("cannot append to compressed archives"));
					if (u < 512) return a(null, l);
					let w = new bo.Header(c);
					if (!w.cksumValid) return a(null, l);
					let P = 512 * Math.ceil((w.size ?? 0) / 512);
					if (l + P + 512 > o || (l += P + 512, l >= o)) return a(null, l);
					s.mtimeCache && w.mtime && s.mtimeCache.set(String(w.path), w.mtime), u = 0, q.default.read(n, c, 0, 512, l, E);
				};
				q.default.read(n, c, 0, 512, l, E);
			};
			return new Promise((n, o) => {
				t.on("error", o);
				let h = "r+", a = (l, u) => {
					if (l && l.code === "ENOENT" && h === "r+") return h = "w+", q.default.open(s.file, h, a);
					if (l || !u) return o(l);
					q.default.fstat(u, (c, E) => {
						if (c) return q.default.close(u, () => o(c));
						i(u, E.size, (D, A) => {
							if (D) return o(D);
							let w = new yo.WriteStream(s.file, {
								fd: u,
								start: A
							});
							t.pipe(w), w.on("error", o), w.on("close", n), bl(t, e);
						});
					});
				};
				q.default.open(s.file, h, a);
			});
		}, El = (s, e) => {
			e.forEach((t) => {
				t.charAt(0) === "@" ? (0, So.list)({
					file: Eo.default.resolve(s.cwd, t.slice(1)),
					sync: !0,
					noResume: !0,
					onReadEntry: (i) => s.add(i)
				}) : s.add(t);
			}), s.end();
		}, bl = async (s, e) => {
			for (let t of e) t.charAt(0) === "@" ? await (0, So.list)({
				file: Eo.default.resolve(String(s.cwd), t.slice(1)),
				noResume: !0,
				onReadEntry: (i) => s.add(i)
			}) : s.add(t);
			s.end();
		};
		ft.replace = (0, ml.makeCommand)(_l, yl, () => {
			throw new TypeError("file is required");
		}, () => {
			throw new TypeError("file is required");
		}, (s, e) => {
			if (!(0, pl.isFile)(s)) throw new TypeError("file is required");
			if (s.gzip || s.brotli || s.zstd || s.file.endsWith(".br") || s.file.endsWith(".tbr")) throw new TypeError("cannot append to compressed archives");
			if (!e?.length) throw new TypeError("no paths specified to add/replace");
		});
	});
	var Cr = d((Vi) => {
		"use strict";
		Object.defineProperty(Vi, "__esModule", { value: !0 });
		Vi.update = void 0;
		var Sl = Ve(), zt = Ki();
		Vi.update = (0, Sl.makeCommand)(zt.replace.syncFile, zt.replace.asyncFile, zt.replace.syncNoFile, zt.replace.asyncNoFile, (s, e = []) => {
			zt.replace.validate?.(s, e), gl(s);
		});
		var gl = (s) => {
			let e = s.filter;
			s.mtimeCache || (s.mtimeCache = /* @__PURE__ */ new Map()), s.filter = e ? (t, i) => e(t, i) && !((s.mtimeCache?.get(t) ?? i.mtime ?? 0) > (i.mtime ?? 0)) : (t, i) => !((s.mtimeCache?.get(t) ?? i.mtime ?? 0) > (i.mtime ?? 0));
		};
	});
	var Oo = exports && exports.__createBinding || (Object.create ? (function(s, e, t, i) {
		i === void 0 && (i = t);
		var r = Object.getOwnPropertyDescriptor(e, t);
		(!r || ("get" in r ? !e.__esModule : r.writable || r.configurable)) && (r = {
			enumerable: !0,
			get: function() {
				return e[t];
			}
		}), Object.defineProperty(s, i, r);
	}) : (function(s, e, t, i) {
		i === void 0 && (i = t), s[i] = e[t];
	})), Ol = exports && exports.__setModuleDefault || (Object.create ? (function(s, e) {
		Object.defineProperty(s, "default", {
			enumerable: !0,
			value: e
		});
	}) : function(s, e) {
		s.default = e;
	}), Y = exports && exports.__exportStar || function(s, e) {
		for (var t in s) t !== "default" && !Object.prototype.hasOwnProperty.call(e, t) && Oo(e, s, t);
	}, Rl = exports && exports.__importStar || (function() {
		var s = function(e) {
			return s = Object.getOwnPropertyNames || function(t) {
				var i = [];
				for (var r in t) Object.prototype.hasOwnProperty.call(t, r) && (i[i.length] = r);
				return i;
			}, s(e);
		};
		return function(e) {
			if (e && e.__esModule) return e;
			var t = {};
			if (e != null) for (var i = s(e), r = 0; r < i.length; r++) i[r] !== "default" && Oo(t, e, i[r]);
			return Ol(t, e), t;
		};
	})();
	Object.defineProperty(exports, "__esModule", { value: !0 });
	exports.u = exports.types = exports.r = exports.t = exports.x = exports.c = void 0;
	Y(mr(), exports);
	var vl = mr();
	Object.defineProperty(exports, "c", {
		enumerable: !0,
		get: function() {
			return vl.create;
		}
	});
	Y(Fr(), exports);
	var Tl = Fr();
	Object.defineProperty(exports, "x", {
		enumerable: !0,
		get: function() {
			return Tl.extract;
		}
	});
	Y(et(), exports);
	Y(rt(), exports);
	var Dl = rt();
	Object.defineProperty(exports, "t", {
		enumerable: !0,
		get: function() {
			return Dl.list;
		}
	});
	Y(Fi(), exports);
	Y(pi(), exports);
	Y(ii(), exports);
	Y(Fs(), exports);
	Y(Ki(), exports);
	var Pl = Ki();
	Object.defineProperty(exports, "r", {
		enumerable: !0,
		get: function() {
			return Pl.replace;
		}
	});
	exports.types = Rl(Ps());
	Y(Ir(), exports);
	Y(Cr(), exports);
	var Nl = Cr();
	Object.defineProperty(exports, "u", {
		enumerable: !0,
		get: function() {
			return Nl.update;
		}
	});
	Y(sr(), exports);
}));
//#endregion
//#region node_modules/traverse/index.js
var require_traverse = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = Traverse;
	function Traverse(obj) {
		if (!(this instanceof Traverse)) return new Traverse(obj);
		this.value = obj;
	}
	Traverse.prototype.get = function(ps) {
		var node = this.value;
		for (var i = 0; i < ps.length; i++) {
			var key = ps[i];
			if (!Object.hasOwnProperty.call(node, key)) {
				node = void 0;
				break;
			}
			node = node[key];
		}
		return node;
	};
	Traverse.prototype.set = function(ps, value) {
		var node = this.value;
		for (var i = 0; i < ps.length - 1; i++) {
			var key = ps[i];
			if (!Object.hasOwnProperty.call(node, key)) node[key] = {};
			node = node[key];
		}
		node[ps[i]] = value;
		return value;
	};
	Traverse.prototype.map = function(cb) {
		return walk(this.value, cb, true);
	};
	Traverse.prototype.forEach = function(cb) {
		this.value = walk(this.value, cb, false);
		return this.value;
	};
	Traverse.prototype.reduce = function(cb, init) {
		var skip = arguments.length === 1;
		var acc = skip ? this.value : init;
		this.forEach(function(x) {
			if (!this.isRoot || !skip) acc = cb.call(this, acc, x);
		});
		return acc;
	};
	Traverse.prototype.deepEqual = function(obj) {
		if (arguments.length !== 1) throw new Error("deepEqual requires exactly one object to compare against");
		var equal = true;
		var node = obj;
		this.forEach(function(y) {
			var notEqual = (function() {
				equal = false;
			}).bind(this);
			if (!this.isRoot) {
				if (typeof node !== "object") return notEqual();
				node = node[this.key];
			}
			var x = node;
			this.post(function() {
				node = x;
			});
			var toS = function(o) {
				return Object.prototype.toString.call(o);
			};
			if (this.circular) {
				if (Traverse(obj).get(this.circular.path) !== x) notEqual();
			} else if (typeof x !== typeof y) notEqual();
			else if (x === null || y === null || x === void 0 || y === void 0) {
				if (x !== y) notEqual();
			} else if (x.__proto__ !== y.__proto__) notEqual();
			else if (x === y) {} else if (typeof x === "function") {
				if (x instanceof RegExp) {
					if (x.toString() != y.toString()) notEqual();
				} else if (x !== y) notEqual();
			} else if (typeof x === "object") if (toS(y) === "[object Arguments]" || toS(x) === "[object Arguments]") {
				if (toS(x) !== toS(y)) notEqual();
			} else if (x instanceof Date || y instanceof Date) {
				if (!(x instanceof Date) || !(y instanceof Date) || x.getTime() !== y.getTime()) notEqual();
			} else {
				var kx = Object.keys(x);
				var ky = Object.keys(y);
				if (kx.length !== ky.length) return notEqual();
				for (var i = 0; i < kx.length; i++) {
					var k = kx[i];
					if (!Object.hasOwnProperty.call(y, k)) notEqual();
				}
			}
		});
		return equal;
	};
	Traverse.prototype.paths = function() {
		var acc = [];
		this.forEach(function(x) {
			acc.push(this.path);
		});
		return acc;
	};
	Traverse.prototype.nodes = function() {
		var acc = [];
		this.forEach(function(x) {
			acc.push(this.node);
		});
		return acc;
	};
	Traverse.prototype.clone = function() {
		var parents = [], nodes = [];
		return (function clone(src) {
			for (var i = 0; i < parents.length; i++) if (parents[i] === src) return nodes[i];
			if (typeof src === "object" && src !== null) {
				var dst = copy(src);
				parents.push(src);
				nodes.push(dst);
				Object.keys(src).forEach(function(key) {
					dst[key] = clone(src[key]);
				});
				parents.pop();
				nodes.pop();
				return dst;
			} else return src;
		})(this.value);
	};
	function walk(root, cb, immutable) {
		var path = [];
		var parents = [];
		var alive = true;
		return (function walker(node_) {
			var node = immutable ? copy(node_) : node_;
			var modifiers = {};
			var state = {
				node,
				node_,
				path: [].concat(path),
				parent: parents.slice(-1)[0],
				key: path.slice(-1)[0],
				isRoot: path.length === 0,
				level: path.length,
				circular: null,
				update: function(x) {
					if (!state.isRoot) state.parent.node[state.key] = x;
					state.node = x;
				},
				"delete": function() {
					delete state.parent.node[state.key];
				},
				remove: function() {
					if (Array.isArray(state.parent.node)) state.parent.node.splice(state.key, 1);
					else delete state.parent.node[state.key];
				},
				before: function(f) {
					modifiers.before = f;
				},
				after: function(f) {
					modifiers.after = f;
				},
				pre: function(f) {
					modifiers.pre = f;
				},
				post: function(f) {
					modifiers.post = f;
				},
				stop: function() {
					alive = false;
				}
			};
			if (!alive) return state;
			if (typeof node === "object" && node !== null) {
				state.isLeaf = Object.keys(node).length == 0;
				for (var i = 0; i < parents.length; i++) if (parents[i].node_ === node_) {
					state.circular = parents[i];
					break;
				}
			} else state.isLeaf = true;
			state.notLeaf = !state.isLeaf;
			state.notRoot = !state.isRoot;
			var ret = cb.call(state, state.node);
			if (ret !== void 0 && state.update) state.update(ret);
			if (modifiers.before) modifiers.before.call(state, state.node);
			if (typeof state.node == "object" && state.node !== null && !state.circular) {
				parents.push(state);
				var keys = Object.keys(state.node);
				keys.forEach(function(key, i) {
					path.push(key);
					if (modifiers.pre) modifiers.pre.call(state, state.node[key], key);
					var child = walker(state.node[key]);
					if (immutable && Object.hasOwnProperty.call(state.node, key)) state.node[key] = child.node;
					child.isLast = i == keys.length - 1;
					child.isFirst = i == 0;
					if (modifiers.post) modifiers.post.call(state, child);
					path.pop();
				});
				parents.pop();
			}
			if (modifiers.after) modifiers.after.call(state, state.node);
			return state;
		})(root).node;
	}
	Object.keys(Traverse.prototype).forEach(function(key) {
		Traverse[key] = function(obj) {
			var args = [].slice.call(arguments, 1);
			var t = Traverse(obj);
			return t[key].apply(t, args);
		};
	});
	function copy(src) {
		if (typeof src === "object" && src !== null) {
			var dst;
			if (Array.isArray(src)) dst = [];
			else if (src instanceof Date) dst = new Date(src);
			else if (src instanceof Boolean) dst = new Boolean(src);
			else if (src instanceof Number) dst = new Number(src);
			else if (src instanceof String) dst = new String(src);
			else dst = Object.create(Object.getPrototypeOf(src));
			Object.keys(src).forEach(function(key) {
				dst[key] = src[key];
			});
			return dst;
		} else return src;
	}
}));
//#endregion
//#region node_modules/chainsaw/index.js
var require_chainsaw = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var Traverse = require_traverse();
	var EventEmitter$4 = require("events").EventEmitter;
	module.exports = Chainsaw;
	function Chainsaw(builder) {
		var saw = Chainsaw.saw(builder, {});
		var r = builder.call(saw.handlers, saw);
		if (r !== void 0) saw.handlers = r;
		saw.record();
		return saw.chain();
	}
	Chainsaw.light = function ChainsawLight(builder) {
		var saw = Chainsaw.saw(builder, {});
		var r = builder.call(saw.handlers, saw);
		if (r !== void 0) saw.handlers = r;
		return saw.chain();
	};
	Chainsaw.saw = function(builder, handlers) {
		var saw = new EventEmitter$4();
		saw.handlers = handlers;
		saw.actions = [];
		saw.chain = function() {
			var ch = Traverse(saw.handlers).map(function(node) {
				if (this.isRoot) return node;
				var ps = this.path;
				if (typeof node === "function") this.update(function() {
					saw.actions.push({
						path: ps,
						args: [].slice.call(arguments)
					});
					return ch;
				});
			});
			process.nextTick(function() {
				saw.emit("begin");
				saw.next();
			});
			return ch;
		};
		saw.pop = function() {
			return saw.actions.shift();
		};
		saw.next = function() {
			var action = saw.pop();
			if (!action) saw.emit("end");
			else if (!action.trap) {
				var node = saw.handlers;
				action.path.forEach(function(key) {
					node = node[key];
				});
				node.apply(saw.handlers, action.args);
			}
		};
		saw.nest = function(cb) {
			var args = [].slice.call(arguments, 1);
			var autonext = true;
			if (typeof cb === "boolean") {
				var autonext = cb;
				cb = args.shift();
			}
			var s = Chainsaw.saw(builder, {});
			var r = builder.call(s.handlers, s);
			if (r !== void 0) s.handlers = r;
			if ("undefined" !== typeof saw.step) s.record();
			cb.apply(s.chain(), args);
			if (autonext !== false) s.on("end", saw.next);
		};
		saw.record = function() {
			upgradeChainsaw(saw);
		};
		[
			"trap",
			"down",
			"jump"
		].forEach(function(method) {
			saw[method] = function() {
				throw new Error("To use the trap, down and jump features, please call record() first to start recording actions.");
			};
		});
		return saw;
	};
	function upgradeChainsaw(saw) {
		saw.step = 0;
		saw.pop = function() {
			return saw.actions[saw.step++];
		};
		saw.trap = function(name, cb) {
			var ps = Array.isArray(name) ? name : [name];
			saw.actions.push({
				path: ps,
				step: saw.step,
				cb,
				trap: true
			});
		};
		saw.down = function(name) {
			var ps = (Array.isArray(name) ? name : [name]).join("/");
			var i = saw.actions.slice(saw.step).map(function(x) {
				if (x.trap && x.step <= saw.step) return false;
				return x.path.join("/") == ps;
			}).indexOf(true);
			if (i >= 0) saw.step += i;
			else saw.step = saw.actions.length;
			var act = saw.actions[saw.step - 1];
			if (act && act.trap) {
				saw.step = act.step;
				act.cb();
			} else saw.next();
		};
		saw.jump = function(step) {
			saw.step = step;
			saw.next();
		};
	}
}));
//#endregion
//#region node_modules/buffers/index.js
var require_buffers = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = Buffers;
	function Buffers(bufs) {
		if (!(this instanceof Buffers)) return new Buffers(bufs);
		this.buffers = bufs || [];
		this.length = this.buffers.reduce(function(size, buf) {
			return size + buf.length;
		}, 0);
	}
	Buffers.prototype.push = function() {
		for (var i = 0; i < arguments.length; i++) if (!Buffer.isBuffer(arguments[i])) throw new TypeError("Tried to push a non-buffer");
		for (var i = 0; i < arguments.length; i++) {
			var buf = arguments[i];
			this.buffers.push(buf);
			this.length += buf.length;
		}
		return this.length;
	};
	Buffers.prototype.unshift = function() {
		for (var i = 0; i < arguments.length; i++) if (!Buffer.isBuffer(arguments[i])) throw new TypeError("Tried to unshift a non-buffer");
		for (var i = 0; i < arguments.length; i++) {
			var buf = arguments[i];
			this.buffers.unshift(buf);
			this.length += buf.length;
		}
		return this.length;
	};
	Buffers.prototype.copy = function(dst, dStart, start, end) {
		return this.slice(start, end).copy(dst, dStart, 0, end - start);
	};
	Buffers.prototype.splice = function(i, howMany) {
		var buffers = this.buffers;
		var index = i >= 0 ? i : this.length - i;
		var reps = [].slice.call(arguments, 2);
		if (howMany === void 0) howMany = this.length - index;
		else if (howMany > this.length - index) howMany = this.length - index;
		for (var i = 0; i < reps.length; i++) this.length += reps[i].length;
		var removed = new Buffers();
		var startBytes = 0;
		for (var ii = 0; ii < buffers.length && startBytes + buffers[ii].length < index; ii++) startBytes += buffers[ii].length;
		if (index - startBytes > 0) {
			var start = index - startBytes;
			if (start + howMany < buffers[ii].length) {
				removed.push(buffers[ii].slice(start, start + howMany));
				var orig = buffers[ii];
				var buf0 = new Buffer(start);
				for (var i = 0; i < start; i++) buf0[i] = orig[i];
				var buf1 = new Buffer(orig.length - start - howMany);
				for (var i = start + howMany; i < orig.length; i++) buf1[i - howMany - start] = orig[i];
				if (reps.length > 0) {
					var reps_ = reps.slice();
					reps_.unshift(buf0);
					reps_.push(buf1);
					buffers.splice.apply(buffers, [ii, 1].concat(reps_));
					ii += reps_.length;
					reps = [];
				} else {
					buffers.splice(ii, 1, buf0, buf1);
					ii += 2;
				}
			} else {
				removed.push(buffers[ii].slice(start));
				buffers[ii] = buffers[ii].slice(0, start);
				ii++;
			}
		}
		if (reps.length > 0) {
			buffers.splice.apply(buffers, [ii, 0].concat(reps));
			ii += reps.length;
		}
		while (removed.length < howMany) {
			var buf = buffers[ii];
			var len = buf.length;
			var take = Math.min(len, howMany - removed.length);
			if (take === len) {
				removed.push(buf);
				buffers.splice(ii, 1);
			} else {
				removed.push(buf.slice(0, take));
				buffers[ii] = buffers[ii].slice(take);
			}
		}
		this.length -= removed.length;
		return removed;
	};
	Buffers.prototype.slice = function(i, j) {
		var buffers = this.buffers;
		if (j === void 0) j = this.length;
		if (i === void 0) i = 0;
		if (j > this.length) j = this.length;
		var startBytes = 0;
		for (var si = 0; si < buffers.length && startBytes + buffers[si].length <= i; si++) startBytes += buffers[si].length;
		var target = new Buffer(j - i);
		var ti = 0;
		for (var ii = si; ti < j - i && ii < buffers.length; ii++) {
			var len = buffers[ii].length;
			var start = ti === 0 ? i - startBytes : 0;
			var end = ti + len >= j - i ? Math.min(start + (j - i) - ti, len) : len;
			buffers[ii].copy(target, ti, start, end);
			ti += end - start;
		}
		return target;
	};
	Buffers.prototype.pos = function(i) {
		if (i < 0 || i >= this.length) throw new Error("oob");
		var l = i, bi = 0, bu = null;
		for (;;) {
			bu = this.buffers[bi];
			if (l < bu.length) return {
				buf: bi,
				offset: l
			};
			else l -= bu.length;
			bi++;
		}
	};
	Buffers.prototype.get = function get(i) {
		var pos = this.pos(i);
		return this.buffers[pos.buf].get(pos.offset);
	};
	Buffers.prototype.set = function set(i, b) {
		var pos = this.pos(i);
		return this.buffers[pos.buf].set(pos.offset, b);
	};
	Buffers.prototype.indexOf = function(needle, offset) {
		if ("string" === typeof needle) needle = new Buffer(needle);
		else if (needle instanceof Buffer) {} else throw new Error("Invalid type for a search string");
		if (!needle.length) return 0;
		if (!this.length) return -1;
		var i = 0, j = 0, match = 0, mstart, pos = 0;
		if (offset) {
			var p = this.pos(offset);
			i = p.buf;
			j = p.offset;
			pos = offset;
		}
		for (;;) {
			while (j >= this.buffers[i].length) {
				j = 0;
				i++;
				if (i >= this.buffers.length) return -1;
			}
			if (this.buffers[i][j] == needle[match]) {
				if (match == 0) mstart = {
					i,
					j,
					pos
				};
				match++;
				if (match == needle.length) return mstart.pos;
			} else if (match != 0) {
				i = mstart.i;
				j = mstart.j;
				pos = mstart.pos;
				match = 0;
			}
			j++;
			pos++;
		}
	};
	Buffers.prototype.toBuffer = function() {
		return this.slice();
	};
	Buffers.prototype.toString = function(encoding, start, end) {
		return this.slice(start, end).toString(encoding);
	};
}));
//#endregion
//#region node_modules/binary/lib/vars.js
var require_vars = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	module.exports = function(store) {
		function getset(name, value) {
			var node = vars.store;
			var keys = name.split(".");
			keys.slice(0, -1).forEach(function(k) {
				if (node[k] === void 0) node[k] = {};
				node = node[k];
			});
			var key = keys[keys.length - 1];
			if (arguments.length == 1) return node[key];
			else return node[key] = value;
		}
		var vars = {
			get: function(name) {
				return getset(name);
			},
			set: function(name, value) {
				return getset(name, value);
			},
			store: store || {}
		};
		return vars;
	};
}));
//#endregion
//#region node_modules/binary/index.js
var require_binary = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var Chainsaw = require_chainsaw();
	var EventEmitter$3 = require("events").EventEmitter;
	var Buffers = require_buffers();
	var Vars = require_vars();
	var Stream = require("stream").Stream;
	exports = module.exports = function(bufOrEm, eventName) {
		if (Buffer.isBuffer(bufOrEm)) return exports.parse(bufOrEm);
		var s = exports.stream();
		if (bufOrEm && bufOrEm.pipe) bufOrEm.pipe(s);
		else if (bufOrEm) {
			bufOrEm.on(eventName || "data", function(buf) {
				s.write(buf);
			});
			bufOrEm.on("end", function() {
				s.end();
			});
		}
		return s;
	};
	exports.stream = function(input) {
		if (input) return exports.apply(null, arguments);
		var pending = null;
		function getBytes(bytes, cb, skip) {
			pending = {
				bytes,
				skip,
				cb: function(buf) {
					pending = null;
					cb(buf);
				}
			};
			dispatch();
		}
		var offset = null;
		function dispatch() {
			if (!pending) {
				if (caughtEnd) done = true;
				return;
			}
			if (typeof pending === "function") pending();
			else {
				var bytes = offset + pending.bytes;
				if (buffers.length >= bytes) {
					var buf;
					if (offset == null) {
						buf = buffers.splice(0, bytes);
						if (!pending.skip) buf = buf.slice();
					} else {
						if (!pending.skip) buf = buffers.slice(offset, bytes);
						offset = bytes;
					}
					if (pending.skip) pending.cb();
					else pending.cb(buf);
				}
			}
		}
		function builder(saw) {
			function next() {
				if (!done) saw.next();
			}
			var self = words(function(bytes, cb) {
				return function(name) {
					getBytes(bytes, function(buf) {
						vars.set(name, cb(buf));
						next();
					});
				};
			});
			self.tap = function(cb) {
				saw.nest(cb, vars.store);
			};
			self.into = function(key, cb) {
				if (!vars.get(key)) vars.set(key, {});
				var parent = vars;
				vars = Vars(parent.get(key));
				saw.nest(function() {
					cb.apply(this, arguments);
					this.tap(function() {
						vars = parent;
					});
				}, vars.store);
			};
			self.flush = function() {
				vars.store = {};
				next();
			};
			self.loop = function(cb) {
				var end = false;
				saw.nest(false, function loop() {
					this.vars = vars.store;
					cb.call(this, function() {
						end = true;
						next();
					}, vars.store);
					this.tap(function() {
						if (end) saw.next();
						else loop.call(this);
					}.bind(this));
				}, vars.store);
			};
			self.buffer = function(name, bytes) {
				if (typeof bytes === "string") bytes = vars.get(bytes);
				getBytes(bytes, function(buf) {
					vars.set(name, buf);
					next();
				});
			};
			self.skip = function(bytes) {
				if (typeof bytes === "string") bytes = vars.get(bytes);
				getBytes(bytes, function() {
					next();
				});
			};
			self.scan = function find(name, search) {
				if (typeof search === "string") search = new Buffer(search);
				else if (!Buffer.isBuffer(search)) throw new Error("search must be a Buffer or a string");
				var taken = 0;
				pending = function() {
					var pos = buffers.indexOf(search, offset + taken);
					var i = pos - offset - taken;
					if (pos !== -1) {
						pending = null;
						if (offset != null) {
							vars.set(name, buffers.slice(offset, offset + taken + i));
							offset += taken + i + search.length;
						} else {
							vars.set(name, buffers.slice(0, taken + i));
							buffers.splice(0, taken + i + search.length);
						}
						next();
						dispatch();
					} else i = Math.max(buffers.length - search.length - offset - taken, 0);
					taken += i;
				};
				dispatch();
			};
			self.peek = function(cb) {
				offset = 0;
				saw.nest(function() {
					cb.call(this, vars.store);
					this.tap(function() {
						offset = null;
					});
				});
			};
			return self;
		}
		var stream = Chainsaw.light(builder);
		stream.writable = true;
		var buffers = Buffers();
		stream.write = function(buf) {
			buffers.push(buf);
			dispatch();
		};
		var vars = Vars();
		var done = false, caughtEnd = false;
		stream.end = function() {
			caughtEnd = true;
		};
		stream.pipe = Stream.prototype.pipe;
		Object.getOwnPropertyNames(EventEmitter$3.prototype).forEach(function(name) {
			stream[name] = EventEmitter$3.prototype[name];
		});
		return stream;
	};
	exports.parse = function parse(buffer) {
		var self = words(function(bytes, cb) {
			return function(name) {
				if (offset + bytes <= buffer.length) {
					var buf = buffer.slice(offset, offset + bytes);
					offset += bytes;
					vars.set(name, cb(buf));
				} else vars.set(name, null);
				return self;
			};
		});
		var offset = 0;
		var vars = Vars();
		self.vars = vars.store;
		self.tap = function(cb) {
			cb.call(self, vars.store);
			return self;
		};
		self.into = function(key, cb) {
			if (!vars.get(key)) vars.set(key, {});
			var parent = vars;
			vars = Vars(parent.get(key));
			cb.call(self, vars.store);
			vars = parent;
			return self;
		};
		self.loop = function(cb) {
			var end = false;
			var ender = function() {
				end = true;
			};
			while (end === false) cb.call(self, ender, vars.store);
			return self;
		};
		self.buffer = function(name, size) {
			if (typeof size === "string") size = vars.get(size);
			var buf = buffer.slice(offset, Math.min(buffer.length, offset + size));
			offset += size;
			vars.set(name, buf);
			return self;
		};
		self.skip = function(bytes) {
			if (typeof bytes === "string") bytes = vars.get(bytes);
			offset += bytes;
			return self;
		};
		self.scan = function(name, search) {
			if (typeof search === "string") search = new Buffer(search);
			else if (!Buffer.isBuffer(search)) throw new Error("search must be a Buffer or a string");
			vars.set(name, null);
			for (var i = 0; i + offset <= buffer.length - search.length + 1; i++) {
				for (var j = 0; j < search.length && buffer[offset + i + j] === search[j]; j++);
				if (j === search.length) break;
			}
			vars.set(name, buffer.slice(offset, offset + i));
			offset += i + search.length;
			return self;
		};
		self.peek = function(cb) {
			var was = offset;
			cb.call(self, vars.store);
			offset = was;
			return self;
		};
		self.flush = function() {
			vars.store = {};
			return self;
		};
		self.eof = function() {
			return offset >= buffer.length;
		};
		return self;
	};
	function decodeLEu(bytes) {
		var acc = 0;
		for (var i = 0; i < bytes.length; i++) acc += Math.pow(256, i) * bytes[i];
		return acc;
	}
	function decodeBEu(bytes) {
		var acc = 0;
		for (var i = 0; i < bytes.length; i++) acc += Math.pow(256, bytes.length - i - 1) * bytes[i];
		return acc;
	}
	function decodeBEs(bytes) {
		var val = decodeBEu(bytes);
		if ((bytes[0] & 128) == 128) val -= Math.pow(256, bytes.length);
		return val;
	}
	function decodeLEs(bytes) {
		var val = decodeLEu(bytes);
		if ((bytes[bytes.length - 1] & 128) == 128) val -= Math.pow(256, bytes.length);
		return val;
	}
	function words(decode) {
		var self = {};
		[
			1,
			2,
			4,
			8
		].forEach(function(bytes) {
			var bits = bytes * 8;
			self["word" + bits + "le"] = self["word" + bits + "lu"] = decode(bytes, decodeLEu);
			self["word" + bits + "ls"] = decode(bytes, decodeLEs);
			self["word" + bits + "be"] = self["word" + bits + "bu"] = decode(bytes, decodeBEu);
			self["word" + bits + "bs"] = decode(bytes, decodeBEs);
		});
		self.word8 = self.word8u = self.word8be;
		self.word8s = self.word8bs;
		return self;
	}
}));
//#endregion
//#region node_modules/unzip-stream/lib/matcher-stream.js
var require_matcher_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var Transform$3 = require("stream").Transform;
	var util$6 = require("util");
	function MatcherStream(patternDesc, matchFn) {
		if (!(this instanceof MatcherStream)) return new MatcherStream();
		Transform$3.call(this);
		var p = typeof patternDesc === "object" ? patternDesc.pattern : patternDesc;
		this.pattern = Buffer.isBuffer(p) ? p : Buffer.from(p);
		this.requiredLength = this.pattern.length;
		if (patternDesc.requiredExtraSize) this.requiredLength += patternDesc.requiredExtraSize;
		this.data = new Buffer("");
		this.bytesSoFar = 0;
		this.matchFn = matchFn;
	}
	util$6.inherits(MatcherStream, Transform$3);
	MatcherStream.prototype.checkDataChunk = function(ignoreMatchZero) {
		if (!(this.data.length >= this.requiredLength)) return;
		var matchIndex = this.data.indexOf(this.pattern, ignoreMatchZero ? 1 : 0);
		if (matchIndex >= 0 && matchIndex + this.requiredLength > this.data.length) {
			if (matchIndex > 0) {
				var packet = this.data.slice(0, matchIndex);
				this.push(packet);
				this.bytesSoFar += matchIndex;
				this.data = this.data.slice(matchIndex);
			}
			return;
		}
		if (matchIndex === -1) {
			var packetLen = this.data.length - this.requiredLength + 1;
			var packet = this.data.slice(0, packetLen);
			this.push(packet);
			this.bytesSoFar += packetLen;
			this.data = this.data.slice(packetLen);
			return;
		}
		if (matchIndex > 0) {
			var packet = this.data.slice(0, matchIndex);
			this.data = this.data.slice(matchIndex);
			this.push(packet);
			this.bytesSoFar += matchIndex;
		}
		if (this.matchFn ? this.matchFn(this.data, this.bytesSoFar) : true) {
			this.data = new Buffer("");
			return;
		}
		return true;
	};
	MatcherStream.prototype._transform = function(chunk, encoding, cb) {
		this.data = Buffer.concat([this.data, chunk]);
		var firstIteration = true;
		while (this.checkDataChunk(!firstIteration)) firstIteration = false;
		cb();
	};
	MatcherStream.prototype._flush = function(cb) {
		if (this.data.length > 0) {
			var firstIteration = true;
			while (this.checkDataChunk(!firstIteration)) firstIteration = false;
		}
		if (this.data.length > 0) {
			this.push(this.data);
			this.data = null;
		}
		cb();
	};
	module.exports = MatcherStream;
}));
//#endregion
//#region node_modules/unzip-stream/lib/entry.js
var require_entry = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var stream$1 = require("stream");
	var inherits = require("util").inherits;
	function Entry() {
		if (!(this instanceof Entry)) return new Entry();
		stream$1.PassThrough.call(this);
		this.path = null;
		this.type = null;
		this.isDirectory = false;
	}
	inherits(Entry, stream$1.PassThrough);
	Entry.prototype.autodrain = function() {
		return this.pipe(new stream$1.Transform({ transform: function(d, e, cb) {
			cb();
		} }));
	};
	module.exports = Entry;
}));
//#endregion
//#region node_modules/unzip-stream/lib/unzip-stream.js
var require_unzip_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var binary = require_binary();
	var stream = require("stream");
	var util$5 = require("util");
	var zlib = require("zlib");
	var MatcherStream = require_matcher_stream();
	var Entry = require_entry();
	const states = {
		STREAM_START: 0,
		START: 1,
		LOCAL_FILE_HEADER: 2,
		LOCAL_FILE_HEADER_SUFFIX: 3,
		FILE_DATA: 4,
		FILE_DATA_END: 5,
		DATA_DESCRIPTOR: 6,
		CENTRAL_DIRECTORY_FILE_HEADER: 7,
		CENTRAL_DIRECTORY_FILE_HEADER_SUFFIX: 8,
		CDIR64_END: 9,
		CDIR64_END_DATA_SECTOR: 10,
		CDIR64_LOCATOR: 11,
		CENTRAL_DIRECTORY_END: 12,
		CENTRAL_DIRECTORY_END_COMMENT: 13,
		TRAILING_JUNK: 14,
		ERROR: 99
	};
	const FOUR_GIGS = 4294967296;
	const SIG_LOCAL_FILE_HEADER = 67324752;
	const SIG_DATA_DESCRIPTOR = 134695760;
	const SIG_CDIR_RECORD = 33639248;
	const SIG_CDIR64_RECORD_END = 101075792;
	const SIG_CDIR64_LOCATOR_END = 117853008;
	const SIG_CDIR_RECORD_END = 101010256;
	function UnzipStream(options) {
		if (!(this instanceof UnzipStream)) return new UnzipStream(options);
		stream.Transform.call(this);
		this.options = options || {};
		this.data = new Buffer("");
		this.state = states.STREAM_START;
		this.skippedBytes = 0;
		this.parsedEntity = null;
		this.outStreamInfo = {};
	}
	util$5.inherits(UnzipStream, stream.Transform);
	UnzipStream.prototype.processDataChunk = function(chunk) {
		var requiredLength;
		switch (this.state) {
			case states.STREAM_START:
			case states.START:
				requiredLength = 4;
				break;
			case states.LOCAL_FILE_HEADER:
				requiredLength = 26;
				break;
			case states.LOCAL_FILE_HEADER_SUFFIX:
				requiredLength = this.parsedEntity.fileNameLength + this.parsedEntity.extraFieldLength;
				break;
			case states.DATA_DESCRIPTOR:
				requiredLength = 12;
				break;
			case states.CENTRAL_DIRECTORY_FILE_HEADER:
				requiredLength = 42;
				break;
			case states.CENTRAL_DIRECTORY_FILE_HEADER_SUFFIX:
				requiredLength = this.parsedEntity.fileNameLength + this.parsedEntity.extraFieldLength + this.parsedEntity.fileCommentLength;
				break;
			case states.CDIR64_END:
				requiredLength = 52;
				break;
			case states.CDIR64_END_DATA_SECTOR:
				requiredLength = this.parsedEntity.centralDirectoryRecordSize - 44;
				break;
			case states.CDIR64_LOCATOR:
				requiredLength = 16;
				break;
			case states.CENTRAL_DIRECTORY_END:
				requiredLength = 18;
				break;
			case states.CENTRAL_DIRECTORY_END_COMMENT:
				requiredLength = this.parsedEntity.commentLength;
				break;
			case states.FILE_DATA: return 0;
			case states.FILE_DATA_END: return 0;
			case states.TRAILING_JUNK:
				if (this.options.debug) console.log("found", chunk.length, "bytes of TRAILING_JUNK");
				return chunk.length;
			default: return chunk.length;
		}
		if (chunk.length < requiredLength) return 0;
		switch (this.state) {
			case states.STREAM_START:
			case states.START:
				var signature = chunk.readUInt32LE(0);
				switch (signature) {
					case SIG_LOCAL_FILE_HEADER:
						this.state = states.LOCAL_FILE_HEADER;
						break;
					case SIG_CDIR_RECORD:
						this.state = states.CENTRAL_DIRECTORY_FILE_HEADER;
						break;
					case SIG_CDIR64_RECORD_END:
						this.state = states.CDIR64_END;
						break;
					case SIG_CDIR64_LOCATOR_END:
						this.state = states.CDIR64_LOCATOR;
						break;
					case SIG_CDIR_RECORD_END:
						this.state = states.CENTRAL_DIRECTORY_END;
						break;
					default:
						var isStreamStart = this.state === states.STREAM_START;
						if (!isStreamStart && (signature & 65535) !== 19280 && this.skippedBytes < 26) {
							var remaining = signature;
							var toSkip = 4;
							for (var i = 1; i < 4 && remaining !== 0; i++) {
								remaining = remaining >>> 8;
								if ((remaining & 255) === 80) {
									toSkip = i;
									break;
								}
							}
							this.skippedBytes += toSkip;
							if (this.options.debug) console.log("Skipped", this.skippedBytes, "bytes");
							return toSkip;
						}
						this.state = states.ERROR;
						var errMsg = isStreamStart ? "Not a valid zip file" : "Invalid signature in zip file";
						if (this.options.debug) {
							var sig = chunk.readUInt32LE(0);
							var asString;
							try {
								asString = chunk.slice(0, 4).toString();
							} catch (e) {}
							console.log("Unexpected signature in zip file: 0x" + sig.toString(16), "\"" + asString + "\", skipped", this.skippedBytes, "bytes");
						}
						this.emit("error", new Error(errMsg));
						return chunk.length;
				}
				this.skippedBytes = 0;
				return requiredLength;
			case states.LOCAL_FILE_HEADER:
				this.parsedEntity = this._readFile(chunk);
				this.state = states.LOCAL_FILE_HEADER_SUFFIX;
				return requiredLength;
			case states.LOCAL_FILE_HEADER_SUFFIX:
				var entry = new Entry();
				var isUtf8 = (this.parsedEntity.flags & 2048) !== 0;
				entry.path = this._decodeString(chunk.slice(0, this.parsedEntity.fileNameLength), isUtf8);
				var extraDataBuffer = chunk.slice(this.parsedEntity.fileNameLength, this.parsedEntity.fileNameLength + this.parsedEntity.extraFieldLength);
				var extra = this._readExtraFields(extraDataBuffer);
				if (extra && extra.parsed) {
					if (extra.parsed.path && !isUtf8) entry.path = extra.parsed.path;
					if (Number.isFinite(extra.parsed.uncompressedSize) && this.parsedEntity.uncompressedSize === FOUR_GIGS - 1) this.parsedEntity.uncompressedSize = extra.parsed.uncompressedSize;
					if (Number.isFinite(extra.parsed.compressedSize) && this.parsedEntity.compressedSize === FOUR_GIGS - 1) this.parsedEntity.compressedSize = extra.parsed.compressedSize;
				}
				this.parsedEntity.extra = extra.parsed || {};
				if (this.options.debug) {
					const debugObj = Object.assign({}, this.parsedEntity, {
						path: entry.path,
						flags: "0x" + this.parsedEntity.flags.toString(16),
						extraFields: extra && extra.debug
					});
					console.log("decoded LOCAL_FILE_HEADER:", JSON.stringify(debugObj, null, 2));
				}
				this._prepareOutStream(this.parsedEntity, entry);
				this.emit("entry", entry);
				this.state = states.FILE_DATA;
				return requiredLength;
			case states.CENTRAL_DIRECTORY_FILE_HEADER:
				this.parsedEntity = this._readCentralDirectoryEntry(chunk);
				this.state = states.CENTRAL_DIRECTORY_FILE_HEADER_SUFFIX;
				return requiredLength;
			case states.CENTRAL_DIRECTORY_FILE_HEADER_SUFFIX:
				var isUtf8 = (this.parsedEntity.flags & 2048) !== 0;
				var path = this._decodeString(chunk.slice(0, this.parsedEntity.fileNameLength), isUtf8);
				var extraDataBuffer = chunk.slice(this.parsedEntity.fileNameLength, this.parsedEntity.fileNameLength + this.parsedEntity.extraFieldLength);
				var extra = this._readExtraFields(extraDataBuffer);
				if (extra && extra.parsed && extra.parsed.path && !isUtf8) path = extra.parsed.path;
				this.parsedEntity.extra = extra.parsed;
				var isUnix = (this.parsedEntity.versionMadeBy & 65280) >> 8 === 3;
				var unixAttrs, isSymlink;
				if (isUnix) {
					unixAttrs = this.parsedEntity.externalFileAttributes >>> 16;
					isSymlink = (unixAttrs >>> 12 & 10) === 10;
				}
				if (this.options.debug) {
					const debugObj = Object.assign({}, this.parsedEntity, {
						path,
						flags: "0x" + this.parsedEntity.flags.toString(16),
						unixAttrs: unixAttrs && "0" + unixAttrs.toString(8),
						isSymlink,
						extraFields: extra.debug
					});
					console.log("decoded CENTRAL_DIRECTORY_FILE_HEADER:", JSON.stringify(debugObj, null, 2));
				}
				this.state = states.START;
				return requiredLength;
			case states.CDIR64_END:
				this.parsedEntity = this._readEndOfCentralDirectory64(chunk);
				if (this.options.debug) console.log("decoded CDIR64_END_RECORD:", this.parsedEntity);
				this.state = states.CDIR64_END_DATA_SECTOR;
				return requiredLength;
			case states.CDIR64_END_DATA_SECTOR:
				this.state = states.START;
				return requiredLength;
			case states.CDIR64_LOCATOR:
				this.state = states.START;
				return requiredLength;
			case states.CENTRAL_DIRECTORY_END:
				this.parsedEntity = this._readEndOfCentralDirectory(chunk);
				if (this.options.debug) console.log("decoded CENTRAL_DIRECTORY_END:", this.parsedEntity);
				this.state = states.CENTRAL_DIRECTORY_END_COMMENT;
				return requiredLength;
			case states.CENTRAL_DIRECTORY_END_COMMENT:
				if (this.options.debug) console.log("decoded CENTRAL_DIRECTORY_END_COMMENT:", chunk.slice(0, requiredLength).toString());
				this.state = states.TRAILING_JUNK;
				return requiredLength;
			case states.ERROR: return chunk.length;
			default:
				console.log("didn't handle state #", this.state, "discarding");
				return chunk.length;
		}
	};
	UnzipStream.prototype._prepareOutStream = function(vars, entry) {
		var self = this;
		var isDirectory = vars.uncompressedSize === 0 && /[\/\\]$/.test(entry.path);
		entry.path = entry.path.replace(/(?<=^|[/\\]+)[.][.]+(?=[/\\]+|$)/g, ".");
		entry.type = isDirectory ? "Directory" : "File";
		entry.isDirectory = isDirectory;
		var fileSizeKnown = !(vars.flags & 8);
		if (fileSizeKnown) entry.size = vars.uncompressedSize;
		var isVersionSupported = vars.versionsNeededToExtract <= 45;
		this.outStreamInfo = {
			stream: null,
			limit: fileSizeKnown ? vars.compressedSize : -1,
			written: 0
		};
		if (!fileSizeKnown) {
			var pattern = new Buffer(4);
			pattern.writeUInt32LE(SIG_DATA_DESCRIPTOR, 0);
			var zip64Mode = vars.extra.zip64Mode;
			var matcherStream = new MatcherStream({
				pattern,
				requiredExtraSize: zip64Mode ? 20 : 12
			}, function(matchedChunk, sizeSoFar) {
				var vars = self._readDataDescriptor(matchedChunk, zip64Mode);
				var compressedSizeMatches = vars.compressedSize === sizeSoFar;
				if (!zip64Mode && !compressedSizeMatches && sizeSoFar >= FOUR_GIGS) {
					var overflown = sizeSoFar - FOUR_GIGS;
					while (overflown >= 0) {
						compressedSizeMatches = vars.compressedSize === overflown;
						if (compressedSizeMatches) break;
						overflown -= FOUR_GIGS;
					}
				}
				if (!compressedSizeMatches) return;
				self.state = states.FILE_DATA_END;
				var sliceOffset = zip64Mode ? 24 : 16;
				if (self.data.length > 0) self.data = Buffer.concat([matchedChunk.slice(sliceOffset), self.data]);
				else self.data = matchedChunk.slice(sliceOffset);
				return true;
			});
			this.outStreamInfo.stream = matcherStream;
		} else this.outStreamInfo.stream = new stream.PassThrough();
		var isEncrypted = vars.flags & 1 || vars.flags & 64;
		if (isEncrypted || !isVersionSupported) {
			var message = isEncrypted ? "Encrypted files are not supported!" : "Zip version " + Math.floor(vars.versionsNeededToExtract / 10) + "." + vars.versionsNeededToExtract % 10 + " is not supported";
			entry.skip = true;
			setImmediate(() => {
				self.emit("error", new Error(message));
			});
			this.outStreamInfo.stream.pipe(new Entry().autodrain());
			return;
		}
		if (vars.compressionMethod > 0) {
			var inflater = zlib.createInflateRaw();
			inflater.on("error", function(err) {
				self.state = states.ERROR;
				self.emit("error", err);
			});
			this.outStreamInfo.stream.pipe(inflater).pipe(entry);
		} else this.outStreamInfo.stream.pipe(entry);
		if (this._drainAllEntries) entry.autodrain();
	};
	UnzipStream.prototype._readFile = function(data) {
		return binary.parse(data).word16lu("versionsNeededToExtract").word16lu("flags").word16lu("compressionMethod").word16lu("lastModifiedTime").word16lu("lastModifiedDate").word32lu("crc32").word32lu("compressedSize").word32lu("uncompressedSize").word16lu("fileNameLength").word16lu("extraFieldLength").vars;
	};
	UnzipStream.prototype._readExtraFields = function(data) {
		var extra = {};
		var result = { parsed: extra };
		if (this.options.debug) result.debug = [];
		var index = 0;
		while (index < data.length) {
			var vars = binary.parse(data).skip(index).word16lu("extraId").word16lu("extraSize").vars;
			index += 4;
			var fieldType = void 0;
			switch (vars.extraId) {
				case 1:
					fieldType = "Zip64 extended information extra field";
					var z64vars = binary.parse(data.slice(index, index + vars.extraSize)).word64lu("uncompressedSize").word64lu("compressedSize").word64lu("offsetToLocalHeader").word32lu("diskStartNumber").vars;
					if (z64vars.uncompressedSize !== null) extra.uncompressedSize = z64vars.uncompressedSize;
					if (z64vars.compressedSize !== null) extra.compressedSize = z64vars.compressedSize;
					extra.zip64Mode = true;
					break;
				case 10:
					fieldType = "NTFS extra field";
					break;
				case 21589:
					fieldType = "extended timestamp";
					var timestampFields = data.readUInt8(index);
					var offset = 1;
					if (vars.extraSize >= offset + 4 && timestampFields & 1) {
						extra.mtime = /* @__PURE__ */ new Date(data.readUInt32LE(index + offset) * 1e3);
						offset += 4;
					}
					if (vars.extraSize >= offset + 4 && timestampFields & 2) {
						extra.atime = /* @__PURE__ */ new Date(data.readUInt32LE(index + offset) * 1e3);
						offset += 4;
					}
					if (vars.extraSize >= offset + 4 && timestampFields & 4) extra.ctime = /* @__PURE__ */ new Date(data.readUInt32LE(index + offset) * 1e3);
					break;
				case 28789:
					fieldType = "Info-ZIP Unicode Path Extra Field";
					if (data.readUInt8(index) === 1) {
						var offset = 1;
						data.readUInt32LE(index + offset);
						offset += 4;
						extra.path = data.slice(index + offset).toString();
					}
					break;
				case 13:
				case 22613:
					fieldType = vars.extraId === 13 ? "PKWARE Unix" : "Info-ZIP UNIX (type 1)";
					var offset = 0;
					if (vars.extraSize >= 8) {
						var atime = /* @__PURE__ */ new Date(data.readUInt32LE(index + offset) * 1e3);
						offset += 4;
						var mtime = /* @__PURE__ */ new Date(data.readUInt32LE(index + offset) * 1e3);
						offset += 4;
						extra.atime = atime;
						extra.mtime = mtime;
						if (vars.extraSize >= 12) {
							var uid = data.readUInt16LE(index + offset);
							offset += 2;
							var gid = data.readUInt16LE(index + offset);
							offset += 2;
							extra.uid = uid;
							extra.gid = gid;
						}
					}
					break;
				case 30805:
					fieldType = "Info-ZIP UNIX (type 2)";
					var offset = 0;
					if (vars.extraSize >= 4) {
						var uid = data.readUInt16LE(index + offset);
						offset += 2;
						var gid = data.readUInt16LE(index + offset);
						offset += 2;
						extra.uid = uid;
						extra.gid = gid;
					}
					break;
				case 30837:
					fieldType = "Info-ZIP New Unix";
					var offset = 0;
					var extraVer = data.readUInt8(index);
					offset += 1;
					if (extraVer === 1) {
						var uidSize = data.readUInt8(index + offset);
						offset += 1;
						if (uidSize <= 6) extra.uid = data.readUIntLE(index + offset, uidSize);
						offset += uidSize;
						var gidSize = data.readUInt8(index + offset);
						offset += 1;
						if (gidSize <= 6) extra.gid = data.readUIntLE(index + offset, gidSize);
					}
					break;
				case 30062:
					fieldType = "ASi Unix";
					var offset = 0;
					if (vars.extraSize >= 14) {
						data.readUInt32LE(index + offset);
						offset += 4;
						var mode = data.readUInt16LE(index + offset);
						offset += 2;
						data.readUInt32LE(index + offset);
						offset += 4;
						var uid = data.readUInt16LE(index + offset);
						offset += 2;
						var gid = data.readUInt16LE(index + offset);
						offset += 2;
						extra.mode = mode;
						extra.uid = uid;
						extra.gid = gid;
						if (vars.extraSize > 14) {
							var start = index + offset;
							var end = index + vars.extraSize - 14;
							extra.symlink = this._decodeString(data.slice(start, end));
						}
					}
					break;
			}
			if (this.options.debug) result.debug.push({
				extraId: "0x" + vars.extraId.toString(16),
				description: fieldType,
				data: data.slice(index, index + vars.extraSize).inspect()
			});
			index += vars.extraSize;
		}
		return result;
	};
	UnzipStream.prototype._readDataDescriptor = function(data, zip64Mode) {
		if (zip64Mode) {
			var vars = binary.parse(data).word32lu("dataDescriptorSignature").word32lu("crc32").word64lu("compressedSize").word64lu("uncompressedSize").vars;
			return vars;
		}
		var vars = binary.parse(data).word32lu("dataDescriptorSignature").word32lu("crc32").word32lu("compressedSize").word32lu("uncompressedSize").vars;
		return vars;
	};
	UnzipStream.prototype._readCentralDirectoryEntry = function(data) {
		return binary.parse(data).word16lu("versionMadeBy").word16lu("versionsNeededToExtract").word16lu("flags").word16lu("compressionMethod").word16lu("lastModifiedTime").word16lu("lastModifiedDate").word32lu("crc32").word32lu("compressedSize").word32lu("uncompressedSize").word16lu("fileNameLength").word16lu("extraFieldLength").word16lu("fileCommentLength").word16lu("diskNumber").word16lu("internalFileAttributes").word32lu("externalFileAttributes").word32lu("offsetToLocalFileHeader").vars;
	};
	UnzipStream.prototype._readEndOfCentralDirectory64 = function(data) {
		return binary.parse(data).word64lu("centralDirectoryRecordSize").word16lu("versionMadeBy").word16lu("versionsNeededToExtract").word32lu("diskNumber").word32lu("diskNumberWithCentralDirectoryStart").word64lu("centralDirectoryEntries").word64lu("totalCentralDirectoryEntries").word64lu("sizeOfCentralDirectory").word64lu("offsetToStartOfCentralDirectory").vars;
	};
	UnzipStream.prototype._readEndOfCentralDirectory = function(data) {
		return binary.parse(data).word16lu("diskNumber").word16lu("diskStart").word16lu("centralDirectoryEntries").word16lu("totalCentralDirectoryEntries").word32lu("sizeOfCentralDirectory").word32lu("offsetToStartOfCentralDirectory").word16lu("commentLength").vars;
	};
	const cp437 = "\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñÑªº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ";
	UnzipStream.prototype._decodeString = function(buffer, isUtf8) {
		if (isUtf8) return buffer.toString("utf8");
		if (this.options.decodeString) return this.options.decodeString(buffer);
		let result = "";
		for (var i = 0; i < buffer.length; i++) result += cp437[buffer[i]];
		return result;
	};
	UnzipStream.prototype._parseOrOutput = function(encoding, cb) {
		var consume;
		while ((consume = this.processDataChunk(this.data)) > 0) {
			this.data = this.data.slice(consume);
			if (this.data.length === 0) break;
		}
		if (this.state === states.FILE_DATA) {
			if (this.outStreamInfo.limit >= 0) {
				var remaining = this.outStreamInfo.limit - this.outStreamInfo.written;
				var packet;
				if (remaining < this.data.length) {
					packet = this.data.slice(0, remaining);
					this.data = this.data.slice(remaining);
				} else {
					packet = this.data;
					this.data = new Buffer("");
				}
				this.outStreamInfo.written += packet.length;
				if (this.outStreamInfo.limit === this.outStreamInfo.written) {
					this.state = states.START;
					this.outStreamInfo.stream.end(packet, encoding, cb);
				} else this.outStreamInfo.stream.write(packet, encoding, cb);
			} else {
				var packet = this.data;
				this.data = new Buffer("");
				this.outStreamInfo.written += packet.length;
				var outputStream = this.outStreamInfo.stream;
				outputStream.write(packet, encoding, () => {
					if (this.state === states.FILE_DATA_END) {
						this.state = states.START;
						return outputStream.end(cb);
					}
					cb();
				});
			}
			return;
		}
		cb();
	};
	UnzipStream.prototype.drainAll = function() {
		this._drainAllEntries = true;
	};
	UnzipStream.prototype._transform = function(chunk, encoding, cb) {
		var self = this;
		if (self.data.length > 0) self.data = Buffer.concat([self.data, chunk]);
		else self.data = chunk;
		var startDataLength = self.data.length;
		var done = function() {
			if (self.data.length > 0 && self.data.length < startDataLength) {
				startDataLength = self.data.length;
				self._parseOrOutput(encoding, done);
				return;
			}
			cb();
		};
		self._parseOrOutput(encoding, done);
	};
	UnzipStream.prototype._flush = function(cb) {
		var self = this;
		if (self.data.length > 0) {
			self._parseOrOutput("buffer", function() {
				if (self.data.length > 0) return setImmediate(function() {
					self._flush(cb);
				});
				cb();
			});
			return;
		}
		if (self.state === states.FILE_DATA) return cb(/* @__PURE__ */ new Error("Stream finished in an invalid state, uncompression failed"));
		setImmediate(cb);
	};
	module.exports = UnzipStream;
}));
//#endregion
//#region node_modules/unzip-stream/lib/parser-stream.js
var require_parser_stream = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var Transform$2 = require("stream").Transform;
	var util$4 = require("util");
	var UnzipStream = require_unzip_stream();
	function ParserStream(opts) {
		if (!(this instanceof ParserStream)) return new ParserStream(opts);
		Transform$2.call(this, { readableObjectMode: true });
		this.opts = opts || {};
		this.unzipStream = new UnzipStream(this.opts);
		var self = this;
		this.unzipStream.on("entry", function(entry) {
			self.push(entry);
		});
		this.unzipStream.on("error", function(error) {
			self.emit("error", error);
		});
	}
	util$4.inherits(ParserStream, Transform$2);
	ParserStream.prototype._transform = function(chunk, encoding, cb) {
		this.unzipStream.write(chunk, encoding, cb);
	};
	ParserStream.prototype._flush = function(cb) {
		var self = this;
		this.unzipStream.end(function() {
			process.nextTick(function() {
				self.emit("close");
			});
			cb();
		});
	};
	ParserStream.prototype.on = function(eventName, fn) {
		if (eventName === "entry") return Transform$2.prototype.on.call(this, "data", fn);
		return Transform$2.prototype.on.call(this, eventName, fn);
	};
	ParserStream.prototype.drainAll = function() {
		this.unzipStream.drainAll();
		return this.pipe(new Transform$2({
			objectMode: true,
			transform: function(d, e, cb) {
				cb();
			}
		}));
	};
	module.exports = ParserStream;
}));
//#endregion
//#region node_modules/mkdirp/index.js
var require_mkdirp = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var path$2 = require("path");
	var fs$2 = require("fs");
	var _0777 = parseInt("0777", 8);
	module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;
	function mkdirP(p, opts, f, made) {
		if (typeof opts === "function") {
			f = opts;
			opts = {};
		} else if (!opts || typeof opts !== "object") opts = { mode: opts };
		var mode = opts.mode;
		var xfs = opts.fs || fs$2;
		if (mode === void 0) mode = _0777;
		if (!made) made = null;
		var cb = f || function() {};
		p = path$2.resolve(p);
		xfs.mkdir(p, mode, function(er) {
			if (!er) {
				made = made || p;
				return cb(null, made);
			}
			switch (er.code) {
				case "ENOENT":
					/* istanbul ignore if */
					if (path$2.dirname(p) === p) return cb(er);
					mkdirP(path$2.dirname(p), opts, function(er, made) {
						/* istanbul ignore if */
						if (er) cb(er, made);
						else mkdirP(p, opts, cb, made);
					});
					break;
				default:
					xfs.stat(p, function(er2, stat) {
						if (er2 || !stat.isDirectory()) cb(er, made);
						else cb(null, made);
					});
					break;
			}
		});
	}
	mkdirP.sync = function sync(p, opts, made) {
		if (!opts || typeof opts !== "object") opts = { mode: opts };
		var mode = opts.mode;
		var xfs = opts.fs || fs$2;
		if (mode === void 0) mode = _0777;
		if (!made) made = null;
		p = path$2.resolve(p);
		try {
			xfs.mkdirSync(p, mode);
			made = made || p;
		} catch (err0) {
			switch (err0.code) {
				case "ENOENT":
					made = sync(path$2.dirname(p), opts, made);
					sync(p, opts, made);
					break;
				default:
					var stat;
					try {
						stat = xfs.statSync(p);
					} catch (err1) 					/* istanbul ignore next */ {
						throw err0;
					}
					/* istanbul ignore if */
					if (!stat.isDirectory()) throw err0;
					break;
			}
		}
		return made;
	};
}));
//#endregion
//#region node_modules/unzip-stream/lib/extract.js
var require_extract = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var fs$1 = require("fs");
	var path$1 = require("path");
	var util$3 = require("util");
	var mkdirp = require_mkdirp();
	var Transform$1 = require("stream").Transform;
	var UnzipStream = require_unzip_stream();
	function Extract(opts) {
		if (!(this instanceof Extract)) return new Extract(opts);
		Transform$1.call(this);
		this.opts = opts || {};
		this.unzipStream = new UnzipStream(this.opts);
		this.unfinishedEntries = 0;
		this.afterFlushWait = false;
		this.createdDirectories = {};
		var self = this;
		this.unzipStream.on("entry", this._processEntry.bind(this));
		this.unzipStream.on("error", function(error) {
			self.emit("error", error);
		});
	}
	util$3.inherits(Extract, Transform$1);
	Extract.prototype._transform = function(chunk, encoding, cb) {
		this.unzipStream.write(chunk, encoding, cb);
	};
	Extract.prototype._flush = function(cb) {
		var self = this;
		var allDone = function() {
			process.nextTick(function() {
				self.emit("close");
			});
			cb();
		};
		this.unzipStream.end(function() {
			if (self.unfinishedEntries > 0) {
				self.afterFlushWait = true;
				return self.on("await-finished", allDone);
			}
			allDone();
		});
	};
	Extract.prototype._processEntry = function(entry) {
		var self = this;
		var destPath = path$1.join(this.opts.path, entry.path);
		var directory = entry.isDirectory ? destPath : path$1.dirname(destPath);
		this.unfinishedEntries++;
		var writeFileFn = function() {
			var pipedStream = fs$1.createWriteStream(destPath);
			pipedStream.on("close", function() {
				self.unfinishedEntries--;
				self._notifyAwaiter();
			});
			pipedStream.on("error", function(error) {
				self.emit("error", error);
			});
			entry.pipe(pipedStream);
		};
		if (this.createdDirectories[directory] || directory === ".") return writeFileFn();
		mkdirp(directory, function(err) {
			if (err) return self.emit("error", err);
			self.createdDirectories[directory] = true;
			if (entry.isDirectory) {
				self.unfinishedEntries--;
				self._notifyAwaiter();
				return;
			}
			writeFileFn();
		});
	};
	Extract.prototype._notifyAwaiter = function() {
		if (this.afterFlushWait && this.unfinishedEntries === 0) {
			this.emit("await-finished");
			this.afterFlushWait = false;
		}
	};
	module.exports = Extract;
}));
//#endregion
//#region node_modules/unzip-stream/unzip.js
var require_unzip = /* @__PURE__ */ __commonJSMin(((exports) => {
	exports.Parse = require_parser_stream();
	exports.Extract = require_extract();
}));
//#endregion
//#region src/model/download.ts
function getEtag(headers) {
	let header = headers["etag"];
	if (typeof header !== "string") return void 0;
	header = header.replace(/^W\//, "");
	if (!header.startsWith("\"") || !header.endsWith("\"")) return void 0;
	return header.slice(1, -1);
}
function getExtname(dispositionHeader) {
	let filename = require_content_disposition().parse(dispositionHeader).parameters.filename;
	if (filename) return path$5.extname(filename);
}
/**
* Download file from url, with optional untar/unzip support.
* @param {string} url
* @param {DownloadOptions} options contains dest folder and optional onProgress callback
*/
function download(urlInput, options, token, obj = {}) {
	let url = toURL(urlInput);
	let { etagAlgorithm } = options;
	let { dest, onProgress, extract } = options;
	if (!dest || !path$5.isAbsolute(dest)) throw new Error(`Invalid dest path: ${dest}`);
	if (!fs$6.existsSync(dest)) fs$6.mkdirSync(dest, { recursive: true });
	else {
		let stat = fs$6.statSync(dest);
		if (stat && !stat.isDirectory()) throw new Error(`${dest} exists, but not directory!`);
	}
	let mod = getRequestModule(url);
	let opts = resolveRequestOptions(url, options);
	if (!opts.agent && options.agent) opts.agent = options.agent;
	let extname = path$5.extname(url.pathname);
	return new Promise((resolve, reject) => {
		if (token) {
			let disposable = token.onCancellationRequested(() => {
				disposable.dispose();
				req.destroy(/* @__PURE__ */ new Error("request aborted"));
			});
		}
		let timer;
		const req = mod.request(opts, (res) => {
			if (res.statusCode >= 200 && res.statusCode < 300 || res.statusCode === 1223) {
				let headers = res.headers;
				let dispositionHeader = headers["content-disposition"];
				let etag = getEtag(headers);
				let checkEtag = etag && typeof etagAlgorithm === "string";
				if (!extname && dispositionHeader) extname = getExtname(dispositionHeader);
				if (extract === true) if (extname === ".zip" || headers["content-type"] == "application/zip") extract = "unzip";
				else if (extname == ".tgz") extract = "untar";
				else {
					reject(/* @__PURE__ */ new Error(`Unable to detect extract method for ${url}`));
					return;
				}
				let total = Number(headers["content-length"]);
				let hasTotal = !isNaN(total);
				let cur = 0;
				res.on("error", (err) => {
					reject(/* @__PURE__ */ new Error(`Unable to connect ${url}: ${err.message}`));
				});
				let hash = checkEtag ? crypto$1.createHash(etagAlgorithm) : void 0;
				res.on("data", (chunk) => {
					cur += chunk.length;
					if (hash) hash.update(chunk);
					if (hasTotal) {
						let percent = (cur / total * 100).toFixed(1);
						if (typeof onProgress === "function") onProgress(percent);
						else logger$42.info(`Download ${url} progress ${percent}%`);
					}
				});
				res.on("end", () => {
					clearTimeout(timer);
					timer = void 0;
					logger$42.info("Download completed:", url);
				});
				let stream;
				if (extract === "untar") {
					const tar = require_index_min();
					stream = res.pipe(tar.x({
						strip: options.strip ?? 1,
						C: dest
					}));
				} else if (extract === "unzip") {
					const unzip = require_unzip();
					stream = res.pipe(unzip.Extract({ path: dest }));
				} else {
					dest = path$5.join(dest, `${v1()}${extname}`);
					stream = res.pipe(fs$6.createWriteStream(dest));
				}
				stream.on("finish", () => {
					if (hash) {
						if (hash.digest("hex") !== etag) {
							reject(/* @__PURE__ */ new Error(`Etag check failed by ${etagAlgorithm}, content not match.`));
							return;
						}
					}
					logger$42.info(`Downloaded ${url} => ${dest}`);
					setTimeout(() => {
						resolve(dest);
					}, 100);
				});
				stream.on("error", reject);
			} else reject(/* @__PURE__ */ new Error(`Invalid response from ${url}: ${res.statusCode}`));
		});
		obj.req = req;
		req.on("error", (e) => {
			if (e["code"] == "ECONNRESET") timer = setTimeout(() => {
				reject(e);
			}, timeout);
			else {
				clearTimeout(timer);
				if (opts.agent && opts.agent.proxy) {
					reject(/* @__PURE__ */ new Error(`Request failed using proxy ${opts.agent.proxy.host}: ${e.message}`));
					return;
				}
				reject(e);
			}
		});
		req.on("timeout", () => {
			req.destroy(/* @__PURE__ */ new Error(`request timeout after ${options.timeout}ms`));
		});
		if (typeof options.timeout === "number" && options.timeout) req.setTimeout(options.timeout);
		req.end();
	});
}
var logger$42;
var init_download = __esmMin((() => {
	init_dist_node();
	init_logger$2();
	init_node();
	init_fetch();
	logger$42 = createLogger$1("model-download");
}));
//#endregion
//#region src/extension/installer.ts
function registryUrl(home = os$5.homedir()) {
	let res;
	let filepath = path$5.join(home, ".npmrc");
	if (fs$6.existsSync(filepath)) try {
		let content = fs$6.readFileSync(filepath, "utf8");
		let uri;
		for (let line of content.split(/\r?\n/)) {
			if (line.startsWith("#")) continue;
			let ms = line.match(/^(.*?)=(.*)$/);
			if (ms && ms[1] === "coc.nvim:registry") uri = ms[2];
		}
		if (uri) res = new URL(uri);
	} catch (e) {
		logger$41.debug("Error on parse .npmrc:", e);
	}
	return res ?? new URL("https://registry.npmjs.org");
}
function isNpmCommand(exePath) {
	let name = path$5.basename(exePath);
	return name === "npm" || name === "npm.CMD";
}
function isYarn(exePath) {
	let name = path$5.basename(exePath);
	return [
		"yarn",
		"yarn.CMD",
		"yarnpkg",
		"yarnpkg.CMD"
	].includes(name);
}
function isPnpm(exePath) {
	let name = path$5.basename(exePath);
	return name === "pnpm" || name === "pnpm.CMD";
}
function isSymbolicLink(folder) {
	if (fs$6.existsSync(folder)) {
		if (fs$6.lstatSync(folder).isSymbolicLink()) return true;
	}
	return false;
}
function getDependencies(obj) {
	return Object.keys(obj.dependencies ?? {}).filter((id) => !local_dependencies.includes(id));
}
function getExtensionDependencies(obj) {
	if (obj.extensionDependencies?.length > 0) return [...new Set(obj.extensionDependencies)];
	return [];
}
var logger$41, local_dependencies, Installer;
var init_installer = __esmMin((() => {
	init_dist_node();
	init_logger$2();
	init_download();
	init_fetch();
	init_fs();
	init_node();
	init_string$1();
	init_workspace$1();
	logger$41 = createLogger$1("extension-installer");
	local_dependencies = [
		"coc.nvim",
		"esbuild",
		"webpack",
		"@types/node"
	];
	Installer = class Installer extends events.EventEmitter {
		root;
		npm;
		def;
		name;
		url;
		version;
		constructor(root, npm, def) {
			super();
			this.root = root;
			this.npm = npm;
			this.def = def;
			if (/^https?:/.test(def)) this.url = def;
			else {
				let ms = def.match(/(.+)@([^/]+)$/);
				if (ms) {
					this.name = ms[1];
					this.version = ms[2];
				} else this.name = def;
			}
		}
		get info() {
			return {
				name: this.name,
				version: this.version
			};
		}
		async getInfo() {
			if (this.url) return await this.getInfoFromUri();
			let registry = registryUrl();
			this.log(`Get info from ${registry}`);
			let buffer = await this.fetch(new URL(this.name, registry), {
				timeout: 1e4,
				buffer: true
			});
			let res = JSON.parse(buffer.toString());
			if (!this.version) this.version = res["dist-tags"]["latest"];
			let obj = res["versions"][this.version];
			if (!obj) throw new Error(`${this.def} doesn't exists in ${registry}.`);
			let requiredVersion = obj["engines"] && obj["engines"]["coc"];
			if (!requiredVersion) throw new Error(`${this.def} is not a valid coc extension, "engines" field with coc property required.`);
			return {
				"dist.tarball": obj["dist"]["tarball"],
				"engines.coc": requiredVersion,
				version: obj["version"],
				name: res.name
			};
		}
		async getInfoFromUri() {
			let { url } = this;
			if (!url.startsWith("https://github.com")) throw new Error(`"${url}" is not supported, coc.nvim support github.com only`);
			url = url.replace(/\/$/, "");
			let branch = "master";
			if (url.includes("@")) {
				let idx = url.indexOf("@");
				branch = url.substring(idx + 1);
				url = url.substring(0, idx);
			}
			let fileUrl = url.replace("github.com", "raw.githubusercontent.com") + `/${branch}/package.json`;
			this.log(`Get info from ${fileUrl}`);
			let content = await this.fetch(fileUrl, { timeout: 1e4 });
			let obj = typeof content == "string" ? JSON.parse(content) : content;
			this.name = obj.name;
			return {
				"dist.tarball": `${url}/archive/${branch}.tar.gz`,
				"engines.coc": obj["engines"] ? obj["engines"]["coc"] : null,
				name: obj.name,
				version: obj.version
			};
		}
		log(msg, isProgress = false) {
			this.emit("message", msg, isProgress);
		}
		async install() {
			this.log(`Using npm from: ${this.npm}`);
			let info = await this.getInfo();
			logger$41.info(`Fetched info of ${this.def}`, info);
			let { name, version } = info;
			let required = toText(info["engines.coc"]).replace(/^\^/, ">=");
			if (required && !semver.satisfies(workspace_default.version, required)) throw new Error(`${name} ${info.version} requires coc.nvim >= ${required}, please update coc.nvim.`);
			return {
				name,
				updated: await this.doInstall(info, /* @__PURE__ */ new Set()),
				version,
				url: this.url,
				folder: path$5.join(this.root, info.name)
			};
		}
		async update(url) {
			if (url) this.url = url;
			let version;
			if (this.name) {
				let folder = path$5.join(this.root, this.name);
				if (isSymbolicLink(folder)) {
					this.log(`Skipped update for symbol link`);
					return;
				}
				version = loadJson$1(path$5.join(folder, "package.json")).version;
			}
			this.log(`Using npm from: ${this.npm}`);
			let info = await this.getInfo();
			if (version && info.version && semver.gte(version, info.version)) {
				this.log(`Current version ${version} is up to date.`);
				return;
			}
			let required = info["engines.coc"] ? info["engines.coc"].replace(/^\^/, ">=") : "";
			if (required && !semver.satisfies(workspace_default.version, required)) throw new Error(`${info.version} requires coc.nvim ${required}, please update coc.nvim.`);
			if (!await this.doInstall(info, /* @__PURE__ */ new Set())) return;
			let jsonFile = path$5.join(this.root, info.name, "package.json");
			this.log(`Updated to v${info.version}`);
			return path$5.dirname(jsonFile);
		}
		getInstallArguments(exePath, url) {
			let env = "production";
			let args = ["install", "--ignore-scripts"];
			if (url && url.startsWith("https://github.com")) {
				args = ["install"];
				env = "development";
			} else {
				if (isNpmCommand(exePath)) {
					args.push("--no-package-lock");
					args.push("--omit=dev");
					args.push("--legacy-peer-deps");
					args.push("--no-global");
				}
				if (isYarn(exePath)) {
					args.push("--no-lockfile");
					args.push("--production");
					args.push("--ignore-engines");
				}
				if (isPnpm(exePath)) {
					args.push("--no-lockfile");
					args.push("--production");
					args.push("--config.strict-peer-dependencies=false");
				}
			}
			return {
				env,
				args
			};
		}
		readLines(key, stream) {
			readline.createInterface({ input: stream }).on("line", (line) => {
				this.log(`${key} ${line}`, true);
			});
		}
		installDependencies(folder, dependencies) {
			if (dependencies.length == 0) return Promise.resolve();
			return new Promise((resolve, reject) => {
				let { env, args } = this.getInstallArguments(this.npm, this.url);
				this.log(`Installing dependencies by: ${this.npm} ${args.join(" ")}.`);
				const cmd = process.platform === "win32" && this.npm.includes(" ") ? `"${this.npm}"` : this.npm;
				const child = child_process$1.spawn(cmd, args, {
					cwd: folder,
					shell: process.platform === "win32",
					env: Object.assign(process.env, { NODE_ENV: env })
				});
				this.readLines("[npm stdout]", child.stdout);
				this.readLines("[npm stderr]", child.stderr);
				child.stderr.setEncoding("utf8");
				child.stdout.setEncoding("utf8");
				child.on("error", reject);
				child.on("exit", (code) => {
					if (code) {
						reject(/* @__PURE__ */ new Error(`${this.npm} install exited with ${code}`));
						return;
					}
					resolve();
				});
			});
		}
		async doInstall(info, installing = /* @__PURE__ */ new Set()) {
			let dest = path$5.join(this.root, info.name);
			if (isSymbolicLink(dest)) return false;
			if (installing.has(info.name)) {
				this.log(`Skipping circular dependency: ${info.name}`);
				return false;
			}
			installing.add(info.name);
			let key = info.name.replace(/\//g, "_");
			let downloadFolder = path$5.join(this.root, `${key}-${v4()}`);
			let url = info["dist.tarball"];
			this.log(`Downloading from ${url}`);
			let etagAlgorithm = url.startsWith("https://registry.npmjs.org") ? "md5" : void 0;
			let obj;
			try {
				await this.download(url, {
					dest: downloadFolder,
					etagAlgorithm,
					extract: "untar",
					onProgress: (p) => this.log(`Download progress ${p}%`, true)
				});
				this.log(`Extension download at ${downloadFolder}`);
				obj = loadJson$1(path$5.join(downloadFolder, "package.json"));
				await this.installDependencies(downloadFolder, getDependencies(obj));
			} catch (e) {
				fs$6.rmSync(downloadFolder, {
					recursive: true,
					force: true
				});
				throw e;
			}
			this.log(`Download extension ${info.name}@${info.version} at ${downloadFolder}`);
			fs$6.mkdirSync(path$5.dirname(dest), { recursive: true });
			if (fs$6.existsSync(dest)) fs$6.rmSync(dest, {
				force: true,
				recursive: true
			});
			fs$6.renameSync(downloadFolder, dest);
			this.log(`Move extension ${info.name}@${info.version} to ${dest}`);
			const extensionDependencies = getExtensionDependencies(obj);
			if (extensionDependencies.length > 0) {
				this.log(`Installing extension dependencies: ${extensionDependencies.join(", ")}`);
				for (const dependency of extensionDependencies) {
					const installer = new Installer(this.root, this.npm, dependency);
					installer.on("message", (msg, isProgress) => {
						this.log(msg, isProgress);
					});
					await installer.doInstall(await installer.getInfo(), installing);
				}
			}
			return true;
		}
		async download(url, options) {
			return await download(url, options);
		}
		async fetch(url, options = {}) {
			return await fetch(url, options);
		}
	};
}));
//#endregion
//#region src/model/memos.ts
var Memos;
var init_memos = __esmMin((() => {
	init_fs();
	init_node();
	init_object();
	Memos = class {
		filepath;
		constructor(filepath) {
			this.filepath = filepath;
			if (!fs$6.existsSync(filepath)) fs$6.writeFileSync(filepath, "{}", "utf8");
		}
		merge(filepath) {
			if (!fs$6.existsSync(filepath)) return;
			let obj = loadJson$1(filepath);
			let current = loadJson$1(this.filepath);
			Object.assign(current, obj);
			writeJson(this.filepath, current);
			fs$6.unlinkSync(filepath);
		}
		fetchContent(id, key) {
			let obj = loadJson$1(this.filepath)[id];
			if (!obj) return void 0;
			return obj[key];
		}
		async update(id, key, value) {
			let { filepath } = this;
			let current = loadJson$1(filepath);
			current[id] = current[id] || {};
			if (value !== void 0) current[id][key] = deepClone(value);
			else delete current[id][key];
			writeJson(filepath, current);
		}
		createMemento(id) {
			return {
				get: (key, defaultValue) => {
					let res = this.fetchContent(id, key);
					return res === void 0 ? defaultValue : res;
				},
				update: async (key, value) => {
					await this.update(id, key, value);
				}
			};
		}
	};
}));
//#endregion
//#region src/list/commandTask.ts
var spawn$1, logger$40, CommandTask;
var init_commandTask = __esmMin((() => {
	init_logger$2();
	init_util$7();
	init_node();
	init_workspace$1();
	spawn$1 = child_process$1.spawn;
	logger$40 = createLogger$1("list-commandTask");
	CommandTask = class extends events.EventEmitter {
		opt;
		disposables = [];
		constructor(opt) {
			super();
			this.opt = opt;
			this.start();
		}
		start() {
			let { cmd, args, cwd, onLine } = this.opt;
			let proc = spawn$1(cmd, args, {
				cwd: cwd || workspace_default.cwd,
				windowsHide: true,
				shell: process.platform === "win32"
			});
			this.disposables.push({ dispose: () => {
				proc.kill();
			} });
			proc.on("error", (e) => {
				this.emit("error", e.message);
			});
			proc.stderr.on("data", (chunk) => {
				logger$40.error(`[${cmd} Error]`, chunk.toString("utf8"));
			});
			const rl = readline.createInterface(proc.stdout);
			rl.on("line", (line) => {
				let res = onLine(line);
				if (res) this.emit("data", res);
			});
			rl.on("close", () => {
				this.emit("end");
			});
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/list/configuration.ts
var validKeys, ListConfiguration, configuration_default;
var init_configuration$1 = __esmMin((() => {
	init_window();
	init_workspace$1();
	validKeys = [
		"<esc>",
		"<space>",
		"<tab>",
		"<s-tab>",
		"<bs>",
		"<right>",
		"<left>",
		"<up>",
		"<down>",
		"<home>",
		"<end>",
		"<cr>",
		"<FocusGained>",
		"<FocusLost>",
		"<ScrollWheelUp>",
		"<ScrollWheelDown>",
		"<LeftMouse>",
		"<LeftDrag>",
		"<LeftRelease>",
		"<2-LeftMouse>",
		"<C-space>",
		"<C-_>",
		"<C-a>",
		"<C-b>",
		"<C-c>",
		"<C-d>",
		"<C-e>",
		"<C-f>",
		"<C-g>",
		"<C-h>",
		"<C-i>",
		"<C-j>",
		"<C-k>",
		"<C-l>",
		"<C-m>",
		"<C-n>",
		"<C-o>",
		"<C-p>",
		"<C-q>",
		"<C-r>",
		"<C-s>",
		"<C-t>",
		"<C-u>",
		"<C-v>",
		"<C-w>",
		"<C-x>",
		"<C-y>",
		"<C-z>",
		"<A-a>",
		"<A-b>",
		"<A-c>",
		"<A-d>",
		"<A-e>",
		"<A-f>",
		"<A-g>",
		"<A-h>",
		"<A-i>",
		"<A-j>",
		"<A-k>",
		"<A-l>",
		"<A-m>",
		"<A-n>",
		"<A-o>",
		"<A-p>",
		"<A-q>",
		"<A-r>",
		"<A-s>",
		"<A-t>",
		"<A-u>",
		"<A-v>",
		"<A-w>",
		"<A-x>",
		"<A-y>",
		"<A-z>",
		"<A-bs>"
	];
	ListConfiguration = class {
		get debounceTime() {
			return this.get("interactiveDebounceTime", 100);
		}
		get extendedSearchMode() {
			return this.get("extendedSearchMode", true);
		}
		get smartcase() {
			return this.get("smartCase", false);
		}
		get signOffset() {
			return this.get("signOffset", 900);
		}
		get(key, defaultValue) {
			return workspace_default.initialConfiguration.get("list." + key, defaultValue);
		}
		get previousKey() {
			return this.fixKey(this.get("previousKeymap", "<C-j>"));
		}
		get nextKey() {
			return this.fixKey(this.get("nextKeymap", "<C-k>"));
		}
		fixKey(key) {
			if (validKeys.includes(key)) return key;
			let find = validKeys.find((s) => s.toLowerCase() == key.toLowerCase());
			if (find) return find;
			window_default.showErrorMessage(`Configured key "${key}" not supported.`);
			return null;
		}
	};
	configuration_default = new ListConfiguration();
}));
//#endregion
//#region src/list/basic.ts
function toVimFiletype(filetype) {
	switch (filetype) {
		case "latex": return "tex";
		default: return filetype;
	}
}
var BasicList;
var init_basic = __esmMin((() => {
	init_main$2();
	init_esm();
	init_util$7();
	init_fs();
	init_position();
	init_string$1();
	init_workspace$1();
	init_commandTask();
	init_configuration$1();
	BasicList = class {
		name;
		defaultAction = "open";
		actions = [];
		options = [];
		disposables = [];
		nvim;
		optionMap;
		config;
		constructor() {
			this.nvim = workspace_default.nvim;
			this.config = configuration_default;
		}
		get alignColumns() {
			return configuration_default.get("alignColumns", false);
		}
		get floatPreview() {
			return configuration_default.get("floatPreview", false);
		}
		get hlGroup() {
			return configuration_default.get("previewHighlightGroup", "Search");
		}
		get previewHeight() {
			return configuration_default.get("maxPreviewHeight", 12);
		}
		get splitRight() {
			return configuration_default.get("previewSplitRight", false);
		}
		get toplineStyle() {
			return configuration_default.get("previewToplineStyle", "offset");
		}
		get toplineOffset() {
			return configuration_default.get("previewToplineOffset", 3);
		}
		parseArguments(args) {
			if (!this.optionMap) {
				this.optionMap = /* @__PURE__ */ new Map();
				for (let opt of this.options) {
					let parts = opt.name.split(/,\s*/g).map((s) => s.replace(/\s+.*/g, ""));
					let name = opt.key ? opt.key : parts[parts.length - 1].replace(/^-+/, "");
					for (let p of parts) this.optionMap.set(p, {
						name,
						hasValue: opt.hasValue
					});
				}
			}
			let res = {};
			for (let i = 0; i < args.length; i++) {
				let arg = args[i];
				let def = this.optionMap.get(arg);
				if (!def) continue;
				let value = true;
				if (def.hasValue) {
					value = toText(args[i + 1]);
					i = i + 1;
				}
				res[def.name] = value;
			}
			return res;
		}
		/**
		* Get configuration of current list
		*/
		getConfig() {
			return workspace_default.getConfiguration(`list.source.${this.name}`);
		}
		addAction(name, fn, options) {
			this.createAction(Object.assign({
				name,
				execute: fn
			}, options || {}));
		}
		addMultipleAction(name, fn, options) {
			this.createAction(Object.assign({
				name,
				multiple: true,
				execute: fn
			}, options || {}));
		}
		createCommandTask(opt) {
			return new CommandTask(opt);
		}
		addLocationActions() {
			this.createAction({
				name: "preview",
				execute: async (item, context) => {
					let loc = await this.convertLocation(item.location);
					await this.previewLocation(loc, context);
				}
			});
			let { nvim } = this;
			this.createAction({
				name: "quickfix",
				multiple: true,
				execute: async (items) => {
					let quickfixItems = await Promise.all(items.map((item) => this.convertLocation(item.location).then((loc) => workspace_default.getQuickfixItem(loc))));
					await nvim.call("setqflist", [quickfixItems]);
					let openCommand = await nvim.getVar("coc_quickfix_open_command");
					nvim.command(typeof openCommand === "string" ? openCommand : "copen", true);
				}
			});
			for (let name of [
				"open",
				"tabe",
				"drop",
				"vsplit",
				"split"
			]) this.createAction({
				name,
				execute: async (item, context) => {
					await this.jumpTo(item.location, name == "open" ? null : name, context);
				},
				tabPersist: name === "open"
			});
		}
		async convertLocation(location) {
			if (typeof location == "string") return Location.create(location, Range.create(0, 0, 0, 0));
			if (Location.is(location)) return location;
			let u = URI.parse(location.uri);
			if (u.scheme != "file") return Location.create(location.uri, Range.create(0, 0, 0, 0));
			return await lineToLocation(u.fsPath, location.line, location.text);
		}
		async jumpTo(location, command, context) {
			if (command == null && context && context.options.position === "tab") command = "tabe";
			if (typeof location == "string") {
				await workspace_default.jumpTo(location, null, command);
				return;
			}
			let { range, uri } = await this.convertLocation(location);
			let position = range.start;
			if (position.line == 0 && position.character == 0 && comparePosition(position, range.end) == 0) position = null;
			await workspace_default.jumpTo(uri, position, command);
		}
		createAction(action) {
			let { name } = action;
			let idx = this.actions.findIndex((o) => o.name == name);
			if (idx !== -1) this.actions.splice(idx, 1);
			this.actions.push(action);
		}
		async previewLocation(location, context) {
			let { uri, range } = location;
			let doc = workspace_default.getDocument(location.uri);
			let u = URI.parse(uri);
			let lines = await workspace_default.documentsManager.getLines(uri);
			let config = {
				bufnr: doc ? doc.bufnr : void 0,
				winid: context.window.id,
				range: emptyRange(range) ? null : range,
				lnum: range.start.line + 1,
				name: u.scheme == "file" ? u.fsPath : uri,
				filetype: toVimFiletype(doc ? doc.languageId : workspace_default.documentsManager.getLanguageId(u.fsPath)),
				position: context.options.position,
				maxHeight: this.previewHeight,
				splitRight: this.splitRight,
				hlGroup: this.hlGroup,
				scheme: u.scheme,
				toplineStyle: this.toplineStyle,
				toplineOffset: this.toplineOffset,
				targetRange: location.targetRange
			};
			await this.openPreview(lines, config);
		}
		async preview(options, context) {
			let { bufname, filetype, range, lines, lnum } = options;
			let config = {
				winid: context.window.id,
				lnum: range ? range.start.line + 1 : lnum || 1,
				filetype,
				position: context.options.position,
				maxHeight: this.previewHeight,
				splitRight: this.splitRight,
				hlGroup: this.hlGroup,
				toplineStyle: this.toplineStyle,
				toplineOffset: this.toplineOffset
			};
			if (bufname) config.name = bufname;
			if (range) config.range = range;
			await this.openPreview(lines, config);
		}
		async openPreview(lines, config) {
			let { nvim } = this;
			if (this.floatPreview && config.position !== "tab") await nvim.call("coc#list#float_preview", [lines, config]);
			else await nvim.call("coc#list#preview", [lines, config]);
			nvim.command("redraw", true);
		}
		doHighlight() {}
		dispose() {
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/util/fuzzy.ts
function getCharCodes(str) {
	let len = str.length;
	let res = new Uint16Array(len);
	for (let i = 0, l = len; i < l; i++) res[i] = str.charCodeAt(i);
	return res;
}
function caseMatch(input, code, ignorecase = false) {
	if (input === code) return true;
	if (code < 128) {
		if (input >= 97 && input <= 122 && code + 32 === input) return true;
		if (ignorecase) {
			if (input <= 90 && input + 32 === code) return true;
			if (toLower(input) === code) return true;
		}
	} else {
		let lower = toLower(code);
		if (lower === input || ignorecase && toLower(input) === lower) return true;
	}
	return false;
}
function toLower(code) {
	return String.fromCharCode(code).toLowerCase().charCodeAt(0);
}
function fuzzyMatch(needle, text, ignorecase = false) {
	let totalCount = needle.length;
	let tl = text.length;
	if (totalCount > tl) return false;
	let i = 0;
	let curr = needle[0];
	for (let j = 0; j < tl; j++) {
		let code = text.charCodeAt(j);
		if (caseMatch(curr, code, ignorecase)) {
			i = i + 1;
			curr = needle[i];
			if (i === totalCount) return true;
			continue;
		}
		if (tl - j - 1 < totalCount - i) break;
	}
	return false;
}
var init_fuzzy = __esmMin((() => {
	init_constants();
}));
//#endregion
//#region src/list/db.ts
var logger$39, DB_PATH, DataBase, db_default;
var init_db$1 = __esmMin((() => {
	init_node();
	init_logger$2();
	init_string$1();
	init_constants();
	logger$39 = createLogger$1("list-db");
	DB_PATH = path$5.join(dataHome, "list_history.dat");
	DataBase = class {
		folders = [];
		names = [];
		items = [];
		_changed = false;
		constructor() {
			try {
				this.load();
			} catch (e) {
				logger$39.error(`Error on load db`, e);
			}
		}
		get currItems() {
			return this.items;
		}
		getHistory(name, folder) {
			let nameIndex = this.names.indexOf(name);
			let folderIndex = this.folders.indexOf(folder);
			if (nameIndex == -1 || folderIndex == -1) return [];
			return this.items.reduce((p, c) => {
				if (c[1] == nameIndex && c[2] == folderIndex) p.push(c[0]);
				return p;
			}, []);
		}
		addItem(name, text, folder) {
			let { folders, names } = this;
			if (byteLength(text) > 255) text = byteSlice(text, 0, 255);
			if (!folders.includes(folder)) folders.push(folder);
			if (!names.includes(name)) names.push(name);
			let nameIndex = names.indexOf(name);
			let folderIndex = folders.indexOf(folder);
			let idx = this.items.findIndex((o) => o[0] == text && o[1] == nameIndex && o[2] == folderIndex);
			if (idx != -1) this.items.splice(idx, 1);
			this.items.push([
				text,
				nameIndex,
				folderIndex
			]);
			this._changed = true;
		}
		save() {
			let { folders, items, names } = this;
			if (!this._changed) return;
			let bufs = folders.reduce((p, folder) => {
				p.push(Buffer.from(folder, "utf8"), Buffer.alloc(1));
				return p;
			}, []);
			let folderBuf = Buffer.concat(bufs);
			bufs = names.reduce((p, name) => {
				p.push(Buffer.from(name, "utf8"), Buffer.alloc(1));
				return p;
			}, []);
			let nameBuf = Buffer.concat(bufs);
			let buf = Buffer.allocUnsafe(9);
			buf.writeUInt8(2, 0);
			buf.writeUInt32BE(folderBuf.byteLength, 1);
			buf.writeUInt32BE(nameBuf.byteLength, 5);
			bufs = items.reduce((p, item) => {
				let b = Buffer.from(item[0], "utf8");
				p.push(Buffer.from([b.byteLength]), b, Buffer.from([item[1], item[2]]));
				return p;
			}, []);
			let resultBuf = Buffer.concat([
				buf,
				folderBuf,
				nameBuf,
				...bufs
			]);
			fs$6.writeFileSync(DB_PATH, resultBuf);
			this._changed = false;
		}
		load() {
			if (!fs$6.existsSync(DB_PATH)) return;
			let buffer = fs$6.readFileSync(DB_PATH);
			let folder_length = buffer.readUInt32BE(1);
			let name_length = buffer.readUInt32BE(5);
			let folderBuf = buffer.slice(9, 9 + folder_length);
			let start = 0;
			let folders = [];
			let names = [];
			for (let i = 0; i < folderBuf.byteLength; i++) if (folderBuf[i] === 0) {
				let text = folderBuf.slice(start, i).toString("utf8");
				folders.push(text);
				start = i + 1;
			}
			let offset = 9 + folder_length;
			let nameBuf = buffer.slice(offset, offset + name_length);
			start = 0;
			for (let i = 0; i < nameBuf.byteLength; i++) if (nameBuf[i] === 0) {
				let text = nameBuf.slice(start, i).toString("utf8");
				names.push(text);
				start = i + 1;
			}
			let itemsBuf = buffer.slice(offset + name_length);
			start = 0;
			let total = itemsBuf.byteLength;
			while (start < total) {
				let len = itemsBuf.readUInt8(start);
				let end = start + 1 + len;
				let text = itemsBuf.slice(start + 1, end).toString("utf8");
				this.items.push([
					text,
					itemsBuf.readUInt8(end),
					itemsBuf.readUInt8(end + 1)
				]);
				start = end + 2;
			}
			this.names = names;
			this.folders = folders;
		}
	};
	db_default = new DataBase();
}));
//#endregion
//#region src/list/history.ts
var logger$38, InputHistory;
var init_history = __esmMin((() => {
	init_node();
	init_logger$2();
	init_array();
	init_fuzzy();
	init_db$1();
	init_string$1();
	logger$38 = createLogger$1("list-history");
	InputHistory = class {
		prompt;
		name;
		db;
		cwd;
		_index = -1;
		_filtered = [];
		historyInput;
		constructor(prompt, name, db, cwd) {
			this.prompt = prompt;
			this.name = name;
			this.db = db;
			this.cwd = cwd;
		}
		get loaded() {
			return this.db.getHistory(this.name, this.cwd);
		}
		get filtered() {
			return this._filtered;
		}
		get index() {
			return this._index;
		}
		static migrate(folder) {
			try {
				let files = fs$6.readdirSync(folder);
				files = files.filter((f) => f.startsWith("list-") && f.endsWith("-history.json") && fs$6.statSync(path$5.join(folder, f)).isFile());
				if (files.length === 0) return;
				let db = new DataBase();
				for (let file of files) {
					let name = file.match(/^list-(.*)-history.json$/)[1];
					let content = fs$6.readFileSync(path$5.join(folder, file), "utf8");
					let obj = JSON.parse(content);
					for (let [key, texts] of Object.entries(obj)) {
						let folder = Buffer.from(key, "base64").toString("utf8");
						if (Array.isArray(texts)) texts.forEach((text) => {
							db.addItem(name, text, folder);
						});
					}
				}
				files.forEach((f) => {
					fs$6.unlinkSync(path$5.join(folder, f));
				});
				db.save();
			} catch (e) {
				logger$38.error(`Error on migrate history:`, e);
			}
		}
		get curr() {
			return this._index == -1 || this._filtered == null ? null : this._filtered[this._index];
		}
		filter() {
			let { input } = this.prompt;
			if (input === this.curr) return;
			this.historyInput = "";
			if (input.length > 0) {
				let codes = getCharCodes(input);
				this._filtered = this.loaded.filter((s) => fuzzyMatch(codes, s));
			} else this._filtered = this.loaded;
			this._index = -1;
		}
		add() {
			let { db, prompt, cwd } = this;
			let { input } = prompt;
			if (!input || input.length < 2 || input == this.historyInput) return;
			db.addItem(this.name, input, cwd);
		}
		previous() {
			let { _filtered, _index } = this;
			if (isFalsyOrEmpty(_filtered)) return;
			if (_index <= 0) this._index = _filtered.length - 1;
			else this._index = _index - 1;
			this.historyInput = this.prompt.input = toText(_filtered[this._index]);
		}
		next() {
			let { _filtered, _index } = this;
			if (isFalsyOrEmpty(_filtered)) return;
			if (_index == _filtered.length - 1) this._index = 0;
			else this._index = _index + 1;
			this.historyInput = this.prompt.input = toText(_filtered[this._index]);
		}
	};
}));
//#endregion
//#region src/list/mappings.ts
var Mappings;
var init_mappings = __esmMin((() => {
	init_window();
	init_configuration$1();
	Mappings = class {
		manager;
		nvim;
		insertMappings = /* @__PURE__ */ new Map();
		normalMappings = /* @__PURE__ */ new Map();
		userInsertMappings = /* @__PURE__ */ new Map();
		userNormalMappings = /* @__PURE__ */ new Map();
		actions = /* @__PURE__ */ new Map();
		constructor(manager, nvim) {
			this.manager = manager;
			this.nvim = nvim;
			let { prompt } = manager;
			this.addAction("do:switch", async () => {
				await manager.switchMatcher();
			});
			this.addAction("do:selectall", async () => {
				await manager.session?.ui.selectAll();
			});
			this.addAction("do:help", async () => {
				await manager.session?.showHelp();
			});
			this.addAction("do:refresh", async () => {
				await manager.session?.reloadItems();
			});
			this.addAction("do:exit", async () => {
				await manager.cancel();
			});
			this.addAction("do:stop", () => {
				manager.stop();
			});
			this.addAction("do:cancel", async () => {
				await manager.cancel(false);
			});
			this.addAction("do:toggle", async () => {
				await manager.session?.ui.toggleSelection();
			});
			this.addAction("do:jumpback", () => {
				manager.session?.jumpBack();
			});
			this.addAction("do:previous", async () => {
				await this.navigate(true);
			});
			this.addAction("do:next", async () => {
				await this.navigate(false);
			});
			this.addAction("do:defaultaction", async () => {
				await manager.doAction();
			});
			this.addAction("do:chooseaction", async () => {
				await manager.chooseAction();
			});
			this.addAction("do:togglemode", () => {
				manager.toggleMode();
			});
			this.addAction("do:previewtoggle", async () => {
				await manager.togglePreview();
			});
			this.addAction("do:previewup", () => {
				this.scrollPreview("up");
			});
			this.addAction("do:previewdown", () => {
				this.scrollPreview("down");
			});
			this.addAction("do:command", async () => {
				await manager.cancel(false);
				await nvim.eval("feedkeys(\":\")");
			});
			this.addAction("prompt:previous", () => {
				manager.session?.history.previous();
			});
			this.addAction("prompt:next", () => {
				manager.session?.history.next();
			});
			this.addAction("prompt:start", () => {
				prompt.moveToStart();
			});
			this.addAction("prompt:end", () => {
				prompt.moveToEnd();
			});
			this.addAction("prompt:left", () => {
				prompt.moveLeft();
			});
			this.addAction("prompt:right", () => {
				prompt.moveRight();
			});
			this.addAction("prompt:leftword", () => {
				prompt.moveLeftWord();
			});
			this.addAction("prompt:rightword", () => {
				prompt.moveRightWord();
			});
			this.addAction("prompt:deleteforward", () => {
				prompt.onBackspace();
			});
			this.addAction("prompt:deletebackward", () => {
				prompt.removeNext();
			});
			this.addAction("prompt:removetail", () => {
				prompt.removeTail();
			});
			this.addAction("prompt:removeahead", () => {
				prompt.removeAhead();
			});
			this.addAction("prompt:removeword", () => {
				prompt.removeWord();
			});
			this.addAction("prompt:insertregister", () => {
				prompt.insertRegister();
			});
			this.addAction("prompt:paste", async () => {
				await prompt.paste();
			});
			this.addAction("eval", async (expr) => {
				await prompt.eval(expr);
			});
			this.addAction("command", async (expr) => {
				await manager.command(expr);
			});
			this.addAction("action", async (expr) => {
				await manager.doAction(expr);
			});
			this.addAction("feedkeys", async (expr) => {
				await manager.feedkeys(expr);
			});
			this.addAction("feedkeys!", async (expr) => {
				await manager.feedkeys(expr, false);
			});
			this.addAction("normal", async (expr) => {
				await manager.normal(expr, false);
			});
			this.addAction("normal!", async (expr) => {
				await manager.normal(expr, true);
			});
			this.addAction("call", async (expr) => {
				await manager.call(expr);
			});
			this.addAction("expr", async (expr) => {
				let name = await manager.call(expr);
				await manager.doAction(name);
			});
			this.addKeyMapping("insert", "<C-s>", "do:switch");
			this.addKeyMapping("insert", "<C-n>", "prompt:next");
			this.addKeyMapping("insert", "<C-p>", "prompt:previous");
			this.addKeyMapping("insert", "<C-v>", "prompt:paste");
			this.addKeyMapping("insert", ["<C-m>", "<cr>"], "do:defaultaction");
			this.addKeyMapping("insert", [
				"<tab>",
				"<C-i>",
				"	"
			], "do:chooseaction");
			this.addKeyMapping("insert", "<C-o>", "do:togglemode");
			this.addKeyMapping("insert", "<C-c>", "do:stop");
			this.addKeyMapping("insert", "<C-l>", "do:refresh");
			this.addKeyMapping("insert", "<left>", "prompt:left");
			this.addKeyMapping("insert", "<right>", "prompt:right");
			this.addKeyMapping("insert", ["<end>", "<C-e>"], "prompt:end");
			this.addKeyMapping("insert", ["<home>", "<C-a>"], "prompt:start");
			this.addKeyMapping("insert", [
				"<C-h>",
				"<bs>",
				"<backspace>"
			], "prompt:deleteforward");
			this.addKeyMapping("insert", "<C-w>", "prompt:removeword");
			this.addKeyMapping("insert", "<C-u>", "prompt:removeahead");
			this.addKeyMapping("insert", "<C-r>", "prompt:insertregister");
			this.addKeyMapping("normal", "t", "action:tabe");
			this.addKeyMapping("normal", "s", "action:split");
			this.addKeyMapping("normal", "r", "action:refactor");
			this.addKeyMapping("normal", "d", "action:drop");
			this.addKeyMapping("normal", [
				"<cr>",
				"<C-m>",
				"\r"
			], "do:defaultaction");
			this.addKeyMapping("normal", "<C-a>", "do:selectall");
			this.addKeyMapping("normal", " ", "do:toggle");
			this.addKeyMapping("normal", "p", "do:previewtoggle");
			this.addKeyMapping("normal", [
				"<tab>",
				"	",
				"<C-i>"
			], "do:chooseaction");
			this.addKeyMapping("normal", "<C-c>", "do:stop");
			this.addKeyMapping("normal", "<C-l>", "do:refresh");
			this.addKeyMapping("normal", "<C-o>", "do:jumpback");
			this.addKeyMapping("normal", "<C-e>", "do:previewdown");
			this.addKeyMapping("normal", "<C-y>", "do:previewup");
			this.addKeyMapping("normal", [
				"i",
				"I",
				"o",
				"O",
				"a",
				"A"
			], "do:togglemode");
			this.addKeyMapping("normal", "?", "do:help");
			this.addKeyMapping("normal", ":", "do:command");
			this.createMappings();
		}
		createMappings() {
			let insertMappings = configuration_default.get("insertMappings", {});
			this.userInsertMappings = this.fixUserMappings(insertMappings, "list.insertMappings");
			let normalMappings = configuration_default.get("normalMappings", {});
			this.userNormalMappings = this.fixUserMappings(normalMappings, "list.normalMappings");
		}
		hasUserMapping(mode, key) {
			return (mode == "insert" ? this.userInsertMappings : this.userNormalMappings).has(key);
		}
		isValidAction(action) {
			if (this.actions.has(action)) return true;
			let [key, expr] = action.split(":", 2);
			if (!expr || !this.actions.has(key)) return false;
			return true;
		}
		fixUserMappings(mappings, entry) {
			let res = /* @__PURE__ */ new Map();
			for (let [key, value] of Object.entries(mappings)) {
				if (!this.isValidAction(value)) {
					window_default.showWarningMessage(`Invalid configuration - unable to support action "${value}" in "${entry}"`);
					continue;
				}
				if (key.length == 1) res.set(key, value);
				else if (key.startsWith("<") && key.endsWith(">")) if (key.toLowerCase() == "<space>") res.set(" ", value);
				else if (key.toLowerCase() == "<backspace>") res.set("<bs>", value);
				else if (validKeys.includes(key)) res.set(key, value);
				else {
					let find = false;
					for (let i = 0; i < validKeys.length; i++) if (validKeys[i].toLowerCase() == key.toLowerCase()) {
						find = true;
						res.set(validKeys[i], value);
						break;
					}
					if (!find) window_default.showWarningMessage(`Invalid configuration - unable to recognize "${key}" in "${entry}"`);
				}
				else window_default.showWarningMessage(`Invalid configuration - unable to recognize key "${key}" in "${entry}"`);
			}
			return res;
		}
		async navigate(up) {
			let ui = this.manager.session?.ui;
			if (!ui) return false;
			await ui.moveCursor(up ? -1 : 1);
			return true;
		}
		async doInsertKeymap(key) {
			if (key === configuration_default.nextKey) return await this.navigate(false);
			if (key === configuration_default.previousKey) return await this.navigate(true);
			let expr = this.userInsertMappings.get(key);
			if (expr) {
				let fn = this.getAction(expr);
				await Promise.resolve(fn());
				return true;
			}
			if (this.insertMappings.has(key)) {
				let fn = this.insertMappings.get(key);
				await Promise.resolve(fn());
				return true;
			}
			return false;
		}
		async doNormalKeymap(key) {
			let expr = this.userNormalMappings.get(key);
			if (expr) {
				let fn = this.getAction(expr);
				await Promise.resolve(fn());
				return true;
			}
			if (this.normalMappings.has(key)) {
				let fn = this.normalMappings.get(key);
				await Promise.resolve(fn());
				return true;
			}
			return false;
		}
		addKeyMapping(mode, key, action) {
			let mappings = mode == "insert" ? this.insertMappings : this.normalMappings;
			let fn = this.getAction(action);
			if (Array.isArray(key)) for (let k of key) mappings.set(k, fn);
			else mappings.set(key, fn);
		}
		addAction(key, fn) {
			this.actions.set(key, fn);
		}
		getAction(action) {
			if (this.actions.has(action)) return () => {
				return this.doAction(action);
			};
			let [key, expr] = action.split(":", 2);
			if (!expr || !this.actions.has(key)) throw new Error(`Invalid action ${action}`);
			return () => {
				return this.doAction(key, expr);
			};
		}
		async doAction(key, expr) {
			let fn = this.actions.get(key);
			if (!fn) throw new Error(`Action ${key} doesn't exist`);
			await Promise.resolve(fn(expr));
		}
		scrollPreview(dir) {
			const floatPreview = configuration_default.get("floatPreview", false);
			let { nvim } = this;
			nvim.pauseNotification();
			nvim.call("coc#list#scroll_preview", [dir, floatPreview], true);
			nvim.command("redraw", true);
			nvim.resumeNotification(false, true);
		}
	};
}));
//#endregion
//#region src/list/prompt.ts
function getLastWordRemovedText(text) {
	let res = text;
	res = res.trimEnd();
	if (res === "") return res;
	const last = getUnicodeClass(res[res.length - 1]);
	while (res !== "" && getUnicodeClass(res[res.length - 1]) === last) res = res.slice(0, res.length - 1);
	return res;
}
var Prompt;
var init_prompt = __esmMin((() => {
	init_protocol();
	init_string$1();
	init_configuration$1();
	Prompt = class {
		nvim;
		cursorIndex = 0;
		_input = "";
		_matcher;
		_mode = "insert";
		interactive = false;
		requestInput = false;
		_onDidChangeInput = new import_main$1.Emitter();
		onDidChangeInput = this._onDidChangeInput.event;
		constructor(nvim) {
			this.nvim = nvim;
		}
		get input() {
			return this._input;
		}
		set input(str) {
			if (this._input == str) return;
			this.cursorIndex = str.length;
			this._input = str;
			this.drawPrompt();
			this._onDidChangeInput.fire(this._input);
		}
		get mode() {
			return this._mode;
		}
		set mode(val) {
			if (val == this._mode) return;
			this._mode = val;
			this.drawPrompt();
		}
		set matcher(val) {
			this._matcher = val;
			this.drawPrompt();
		}
		start(opts) {
			if (opts) {
				this.interactive = opts.interactive;
				this.cursorIndex = opts.input.length;
				this._input = opts.input;
				this._mode = opts.mode;
				this._matcher = opts.interactive ? "" : opts.matcher;
			}
			this.nvim.call("coc#prompt#start_prompt", ["list"], true);
			this.drawPrompt();
		}
		cancel() {
			let { nvim } = this;
			nvim.call("coc#prompt#stop_prompt", ["list"], true);
		}
		reset() {
			this._input = "";
			this.cursorIndex = 0;
		}
		drawPrompt() {
			let indicator = configuration_default.get("indicator", ">");
			let { cursorIndex, interactive, input, _matcher } = this;
			let cmds = ["echo \"\""];
			if (this.mode == "insert") {
				if (interactive) cmds.push(`echohl MoreMsg | echon 'INTERACTIVE ' | echohl None`);
				else if (_matcher) cmds.push(`echohl MoreMsg | echon '${_matcher.toUpperCase()} ' | echohl None`);
				cmds.push(`echohl Special | echon '${indicator} ' | echohl None`);
				if (cursorIndex == input.length) {
					cmds.push(`echon '${input.replace(/'/g, "''")}'`);
					cmds.push(`echohl Cursor | echon ' ' | echohl None`);
				} else {
					let pre = input.slice(0, cursorIndex);
					if (pre) cmds.push(`echon '${pre.replace(/'/g, "''")}'`);
					cmds.push(`echohl Cursor | echon '${input[cursorIndex].replace(/'/, "''")}' | echohl None`);
					let post = input.slice(cursorIndex + 1);
					cmds.push(`echon '${post.replace(/'/g, "''")}'`);
				}
			} else cmds.push(`echohl MoreMsg | echo "" | echohl None`);
			cmds.push("redraw");
			let cmd = cmds.join("|");
			this.nvim.command(cmd, true);
		}
		moveLeft() {
			if (this.cursorIndex == 0) return;
			this.cursorIndex = this.cursorIndex - 1;
			this.drawPrompt();
		}
		moveRight() {
			if (this.cursorIndex == this._input.length) return;
			this.cursorIndex = this.cursorIndex + 1;
			this.drawPrompt();
		}
		moveLeftWord() {
			let { cursorIndex, input } = this;
			if (cursorIndex == 0) return;
			let pre = input.slice(0, cursorIndex);
			let remain = getLastWordRemovedText(pre);
			this.cursorIndex = cursorIndex - (pre.length - remain.length);
			this.drawPrompt();
			this._onDidChangeInput.fire(this._input);
		}
		moveRightWord() {
			let { cursorIndex, input } = this;
			if (cursorIndex == input.length) return;
			let post = input.slice(cursorIndex);
			let nextWord = post.match(/[\w$]+ */).at(0) ?? post;
			this.cursorIndex = cursorIndex + nextWord.length;
			this.drawPrompt();
			this._onDidChangeInput.fire(this._input);
		}
		moveToEnd() {
			if (this.cursorIndex == this._input.length) return;
			this.cursorIndex = this._input.length;
			this.drawPrompt();
		}
		moveToStart() {
			if (this.cursorIndex == 0) return;
			this.cursorIndex = 0;
			this.drawPrompt();
		}
		onBackspace() {
			let { cursorIndex, input } = this;
			if (cursorIndex == 0) return;
			let pre = input.slice(0, cursorIndex);
			let post = input.slice(cursorIndex);
			this.cursorIndex = cursorIndex - 1;
			this._input = `${pre.slice(0, pre.length - 1)}${post}`;
			this.drawPrompt();
			this._onDidChangeInput.fire(this._input);
		}
		removeNext() {
			let { cursorIndex, input } = this;
			if (cursorIndex == input.length) return;
			let pre = input.slice(0, cursorIndex);
			let post = input.slice(cursorIndex + 1);
			this._input = `${pre}${post}`;
			this.drawPrompt();
			this._onDidChangeInput.fire(this._input);
		}
		removeWord() {
			let { cursorIndex, input } = this;
			if (cursorIndex == 0) return;
			let pre = input.slice(0, cursorIndex);
			let post = input.slice(cursorIndex);
			let remain = getLastWordRemovedText(pre);
			this.cursorIndex = cursorIndex - (pre.length - remain.length);
			this._input = `${remain}${post}`;
			this.drawPrompt();
			this._onDidChangeInput.fire(this._input);
		}
		removeTail() {
			let { cursorIndex, input } = this;
			if (cursorIndex == input.length) return;
			let pre = input.slice(0, cursorIndex);
			this._input = pre;
			this.drawPrompt();
			this._onDidChangeInput.fire(this._input);
		}
		removeAhead() {
			let { cursorIndex, input } = this;
			if (cursorIndex == 0) return;
			let post = input.slice(cursorIndex);
			this.cursorIndex = 0;
			this._input = post;
			this.drawPrompt();
			this._onDidChangeInput.fire(this._input);
		}
		async acceptCharacter(ch) {
			if (this.requestInput) {
				this.requestInput = false;
				if (/^[0-9a-z"%#*+/:\-.]$/.test(ch)) {
					let text = await this.nvim.call("getreg", ch);
					text = text.replace(/\n/g, " ");
					this.addText(text);
				}
			} else this.addText(ch);
		}
		insertRegister() {
			this.requestInput = true;
		}
		async paste() {
			let text = await this.nvim.eval("@*");
			text = text.replace(/\n/g, "");
			if (!text) return;
			this.addText(text);
		}
		async eval(expression) {
			let text = await this.nvim.call("eval", [expression]);
			text = text.replace(/\n/g, "");
			this.addText(text);
		}
		addText(text) {
			let { cursorIndex, input } = this;
			this.cursorIndex = cursorIndex + text.length;
			let pre = input.slice(0, cursorIndex);
			let post = input.slice(cursorIndex);
			this._input = `${pre}${text}${post}`;
			this.drawPrompt();
			this._onDidChangeInput.fire(this._input);
		}
	};
}));
//#endregion
//#region src/model/highlighter.ts
var Highlighter;
var init_highlighter = __esmMin((() => {
	init_ansiparse();
	init_string$1();
	Highlighter = class {
		lines = [];
		_highlights = [];
		addLine(line, hlGroup) {
			if (line.includes("\n")) {
				for (let content of line.split(/\r?\n/)) this.addLine(content, hlGroup);
				return;
			}
			if (hlGroup) this._highlights.push({
				lnum: this.lines.length,
				colStart: line.match(/^\s*/)[0].length,
				colEnd: byteLength(line),
				hlGroup
			});
			if (line.includes("\x1B")) {
				let res = parseAnsiHighlights(line);
				for (let hl of res.highlights) {
					let { span, hlGroup } = hl;
					this._highlights.push({
						lnum: this.lines.length,
						colStart: span[0],
						colEnd: span[1],
						hlGroup
					});
				}
				this.lines.push(res.line);
			} else this.lines.push(line);
		}
		addLines(lines) {
			this.lines.push(...lines);
		}
		/**
		* Add texts to new Lines
		*/
		addTexts(items) {
			let len = this.lines.length;
			let text = "";
			for (let item of items) {
				let colStart = byteLength(text);
				if (item.hlGroup) this._highlights.push({
					lnum: len,
					colStart,
					colEnd: colStart + byteLength(item.text),
					hlGroup: item.hlGroup
				});
				text += item.text;
			}
			this.lines.push(text);
		}
		addText(text, hlGroup) {
			if (!text) return;
			let { lines } = this;
			let pre = lines[lines.length - 1] || "";
			if (text.includes("\n")) {
				let parts = text.split("\n");
				this.addText(parts[0], hlGroup);
				for (let line of parts.slice(1)) this.addLine(line, hlGroup);
				return;
			}
			if (hlGroup) {
				let colStart = byteLength(pre);
				this._highlights.push({
					lnum: lines.length ? lines.length - 1 : 0,
					colStart,
					colEnd: colStart + byteLength(text),
					hlGroup
				});
			}
			if (lines.length) lines[lines.length - 1] = `${pre}${text}`;
			else lines.push(text);
		}
		get length() {
			return this.lines.length;
		}
		getline(line) {
			return this.lines[line] || "";
		}
		get highlights() {
			return this._highlights;
		}
		get content() {
			return this.lines.join("\n");
		}
		render(buffer, start = 0, end = -1) {
			buffer.setLines(this.lines, {
				start,
				end,
				strictIndexing: false
			}, true);
			for (let item of this._highlights) buffer.addHighlight({
				hlGroup: item.hlGroup,
				colStart: item.colStart,
				colEnd: item.colEnd,
				line: start + item.lnum,
				srcId: -1
			});
		}
	};
}));
//#endregion
//#region src/util/sequence.ts
var Sequence;
var init_sequence = __esmMin((() => {
	Sequence = class {
		_busy = false;
		_fns = [];
		_resolves = [];
		run(fn) {
			if (!this._busy) {
				this._busy = true;
				fn().finally(() => {
					this.next();
				});
			} else this._fns.push(fn);
		}
		waitFinish() {
			if (!this._busy) return Promise.resolve();
			return new Promise((resolve) => {
				this._resolves.push(resolve);
			});
		}
		next() {
			let fn = this._fns.shift();
			if (!fn) this.finish();
			else fn().finally(() => {
				this.next();
			});
		}
		finish() {
			this._busy = false;
			let fn;
			while ((fn = this._resolves.pop()) != null) fn();
		}
		cancel() {
			this._fns = [];
			this.finish();
		}
	};
}));
//#endregion
//#region src/list/ui.ts
var debounceTime$9, ListUI;
var init_ui$1 = __esmMin((() => {
	init_events();
	init_util$7();
	init_array();
	init_node();
	init_protocol();
	init_sequence();
	init_string$1();
	init_workspace$1();
	init_configuration$1();
	debounceTime$9 = getConditionValue(100, 20);
	ListUI = class {
		nvim;
		name;
		listOptions;
		window;
		height;
		tabnr;
		newTab = false;
		reversed = false;
		buffer;
		currIndex = 0;
		items = [];
		disposables = [];
		selected = /* @__PURE__ */ new Set();
		mouseDown;
		sequence = new Sequence();
		_onDidChangeLine = new import_main$1.Emitter();
		_onDidOpen = new import_main$1.Emitter();
		_onDidClose = new import_main$1.Emitter();
		_onDidLineChange = new import_main$1.Emitter();
		_onDoubleClick = new import_main$1.Emitter();
		onDidChangeLine = this._onDidChangeLine.event;
		onDidLineChange = this._onDidLineChange.event;
		onDidOpen = this._onDidOpen.event;
		onDidClose = this._onDidClose.event;
		onDidDoubleClick = this._onDoubleClick.event;
		constructor(nvim, name, listOptions) {
			this.nvim = nvim;
			this.name = name;
			this.listOptions = listOptions;
			this.newTab = listOptions.position == "tab";
			this.reversed = listOptions.reverse === true;
			events_default.on("BufWinLeave", async (bufnr) => {
				if (bufnr != this.bufnr || this.window == null) return;
				this.window = null;
				this._onDidClose.fire(bufnr);
			}, null, this.disposables);
			events_default.on("WinClosed", (winid) => {
				if (this.winid == winid) {
					let { bufnr } = this;
					this.window = null;
					this.buffer = null;
					this._onDidClose.fire(bufnr);
				}
			}, null, this.disposables);
			events_default.on("CursorMoved", async (bufnr, cursor) => {
				if (bufnr != this.bufnr) return;
				let idx = this.lnumToIndex(cursor[0]);
				this.onLineChange(idx);
			}, null, this.disposables);
			let debounced = debounce(async (bufnr) => {
				if (bufnr != this.bufnr) return;
				let [winid, start, end] = await nvim.eval("[win_getid(),line(\"w0\"),line(\"w$\")]");
				if (end < 300 || winid != this.winid) return;
				let h = end - start + 1;
				let s = this.lnumToIndex(start);
				let e = this.lnumToIndex(start + h * 2);
				nvim.pauseNotification();
				this.doHighlight(s, e);
				nvim.command("redraw", true);
				nvim.resumeNotification(false, true);
			}, debounceTime$9);
			this.disposables.push({ dispose: () => {
				debounced.clear();
			} });
			events_default.on("CursorMoved", debounced, null, this.disposables);
		}
		onDidChangeItems(ev) {
			if (!ev.append) this.clearSelection();
			this.sequence.run(async () => {
				let { items, reload, append, finished, sorted } = ev;
				if (this.shouldSort && !sorted) {
					items = append ? this.items.concat(items) : items;
					reload = append == true;
					append = false;
					items.sort((a, b) => {
						if (a.score != b.score) return b.score - a.score;
						if (a.sortText > b.sortText) return 1;
						return -1;
					});
				}
				if (append) await this.appendItems(items);
				else await this.drawItems(items, finished, reload);
			});
		}
		lnumToIndex(lnum) {
			let { reversed, length } = this;
			if (!reversed) return lnum - 1;
			return Math.max(0, length - lnum);
		}
		indexToLnum(index) {
			let { reversed, length } = this;
			if (!reversed) return Math.min(index + 1, length);
			return Math.max(Math.min(length, length - index), 1);
		}
		get bufnr() {
			return this.buffer?.id;
		}
		get winid() {
			return this.window?.id;
		}
		get limitLines() {
			return configuration_default.get("limitLines", Infinity);
		}
		onLineChange(index) {
			if (this.currIndex == index) return;
			this.currIndex = index;
			this._onDidChangeLine.fire(index);
		}
		get index() {
			return this.currIndex;
		}
		getItem(index) {
			return this.items[index];
		}
		get item() {
			let { window } = this;
			if (!window) return Promise.resolve(null);
			return window.cursor.then((cursor) => {
				this.currIndex = this.lnumToIndex(cursor[0]);
				return this.items[this.currIndex];
			});
		}
		async echoMessage(item) {
			let { items } = this;
			let msg = `[${items.indexOf(item) + 1}/${items.length}] ${toText(item.label)}`;
			this.nvim.callTimer("coc#ui#echo_lines", [[msg]], true);
		}
		updateItem(item, index) {
			if (!this.buffer || index >= this.length) return;
			let { nvim } = this;
			let lnum = this.indexToLnum(index);
			nvim.pauseNotification();
			this.buffer.setOption("modifiable", true, true);
			nvim.call("setbufline", [
				this.bufnr,
				lnum,
				item.label
			], true);
			this.doHighlight(index, index + 1);
			this.buffer.setOption("modifiable", false, true);
			nvim.resumeNotification(true, true);
		}
		async getItems() {
			if (this.length == 0 || !this.window) return [];
			let mode = await this.nvim.call("mode");
			if (mode == "v" || mode == "V") {
				let [start, end] = await this.getSelectedRange();
				let res = [];
				for (let i = start; i <= end; i++) {
					let idx = this.lnumToIndex(i);
					let item = this.items[idx];
					if (item) res.push(item);
				}
				return res;
			}
			let { selectedItems } = this;
			if (selectedItems.length) return selectedItems;
			return toArray(await this.item);
		}
		async onMouse(event) {
			let { nvim, window } = this;
			if (!window) return;
			let [winid, lnum, col] = await nvim.eval(`[v:mouse_winid,v:mouse_lnum,v:mouse_col]`);
			if (event == "mouseDown") {
				this.mouseDown = {
					winid,
					lnum,
					col,
					current: winid == window.id
				};
				return;
			}
			let current = winid == window.id;
			if (current && event == "doubleClick") {
				this.setCursor(lnum);
				this._onDoubleClick.fire();
			}
			if (current && event == "mouseDrag") {
				if (!this.mouseDown) return;
				await this.selectLines(this.mouseDown.lnum, lnum);
			} else if (current && event == "mouseUp") {
				if (!this.mouseDown) return;
				if (this.mouseDown.lnum == lnum) {
					this.setCursor(lnum);
					nvim.command("redraw", true);
				} else await this.selectLines(this.mouseDown.lnum, lnum);
			} else if (!current && event == "mouseUp") {
				nvim.pauseNotification();
				nvim.call("win_gotoid", winid, true);
				nvim.call("cursor", [lnum, col], true);
				nvim.command("redraw", true);
				nvim.resumeNotification(false, true);
			}
		}
		async resume() {
			let { items, selected, nvim } = this;
			await this.drawItems(items, true, true);
			if (!selected.size || !this.buffer) return;
			nvim.pauseNotification();
			for (let lnum of selected) this.buffer.placeSign({
				lnum,
				id: configuration_default.signOffset + lnum,
				name: "CocSelected",
				group: "coc-list"
			});
			nvim.command("redraw", true);
			nvim.resumeNotification(false, true);
		}
		async toggleSelection() {
			let { nvim, reversed } = this;
			await nvim.call("win_gotoid", [this.winid]);
			let lnum = await nvim.call("line", ".");
			let mode = await nvim.call("mode");
			if (mode == "v" || mode == "V") {
				let [start, end] = await this.getSelectedRange();
				if (start > end) [start, end] = [end, start];
				for (let i = start; i <= end; i++) this.toggleLine(i);
				this.setCursor(end);
				nvim.command("redraw", true);
				await nvim.resumeNotification();
				return;
			}
			nvim.pauseNotification();
			this.toggleLine(lnum);
			this.setCursor(reversed ? lnum - 1 : lnum + 1);
			nvim.command("redraw", true);
			await nvim.resumeNotification();
		}
		toggleLine(lnum) {
			let { selected, buffer } = this;
			let exists = selected.has(lnum);
			const signOffset = configuration_default.signOffset;
			if (!exists) {
				selected.add(lnum);
				buffer.placeSign({
					lnum,
					id: signOffset + lnum,
					name: "CocSelected",
					group: "coc-list"
				});
			} else {
				selected.delete(lnum);
				buffer.unplaceSign({
					id: signOffset + lnum,
					group: "coc-list"
				});
			}
		}
		async selectLines(start, end) {
			let { nvim, buffer, length } = this;
			const signOffset = configuration_default.signOffset;
			this.clearSelection();
			let { selected } = this;
			nvim.pauseNotification();
			if (start > end) [start, end] = [end, start];
			for (let i = start; i <= end; i++) {
				if (i > length) break;
				selected.add(i);
				buffer.placeSign({
					lnum: i,
					id: signOffset + i,
					name: "CocSelected",
					group: "coc-list"
				});
			}
			this.setCursor(end);
			nvim.command("redraw", true);
			await nvim.resumeNotification();
		}
		async selectAll() {
			let { length } = this;
			if (length > 0) await this.selectLines(1, length);
		}
		clearSelection() {
			let { selected, buffer } = this;
			if (buffer && selected.size > 0) {
				buffer.unplaceSign({ group: "coc-list" });
				this.selected.clear();
			}
		}
		get ready() {
			if (this.window) return Promise.resolve();
			return new Promise((resolve) => {
				let disposable = this.onDidLineChange(() => {
					disposable.dispose();
					resolve();
				});
			});
		}
		getHeight(len, finished) {
			let { listOptions } = this;
			if (typeof listOptions.height === "number") return listOptions.height;
			let height = configuration_default.get("height", 10);
			if (finished && !listOptions.interactive && listOptions.input.length == 0) height = Math.min(len, height);
			return Math.max(1, height);
		}
		async drawItems(items, finished, reload = false) {
			const { nvim, name, listOptions } = this;
			this.items = items.length > this.limitLines ? items.slice(0, this.limitLines) : items;
			if (!this.window) {
				let height = this.getHeight(items.length, finished);
				let { position, numberSelect } = listOptions;
				let [bufnr, winid, tabnr] = await nvim.call("coc#list#create", [
					position,
					height,
					name,
					numberSelect
				]);
				this.tabnr = tabnr;
				this.height = height;
				this.buffer = nvim.createBuffer(bufnr);
				let win = this.window = nvim.createWindow(winid);
				let statusSegments = configuration_default.get("statusLineSegments");
				if (statusSegments) win.setOption("statusline", statusSegments.join(" "), true);
				this._onDidOpen.fire(this.bufnr);
			}
			const lines = [];
			let selectIndex = 0;
			this.items.forEach((item, idx) => {
				lines.push(item.label);
				if (!reload && selectIndex == 0 && item.preselect) selectIndex = idx;
			});
			let newIndex = reload ? this.currIndex : selectIndex;
			this.setLines(lines, 0, newIndex);
			this._onDidLineChange.fire();
		}
		async appendItems(items) {
			if (!this.window || items.length === 0) return;
			let curr = this.items.length;
			let remain = this.limitLines - curr;
			if (remain > 0) {
				let append = remain < items.length ? items.slice(0, remain) : items;
				this.items = this.items.concat(append);
				this.setLines(append.map((item) => item.label), append.length, this.currIndex);
			}
		}
		get shouldSort() {
			let { matcher, interactive } = this.listOptions;
			if (interactive || matcher !== "fuzzy") return false;
			return true;
		}
		setLines(lines, append, index) {
			let { nvim, buffer, window, reversed, newTab } = this;
			if (!buffer || !window) return;
			nvim.pauseNotification();
			if (!append) {
				nvim.call("coc#compat#clear_matches", [window.id], true);
				if (!lines.length) {
					lines = ["No results, press ? on normal mode to get help."];
					nvim.call("coc#compat#matchaddpos", [
						"Comment",
						[[1]],
						99,
						window.id
					], true);
				}
			}
			buffer.setOption("modifiable", true, true);
			if (reversed) {
				let replacement = lines.reverse();
				if (append) nvim.call("appendbufline", [
					buffer.id,
					0,
					replacement
				], true);
				else buffer.setLines(replacement, {
					start: 0,
					end: -1,
					strictIndexing: false
				}, true);
			} else buffer.setLines(lines, {
				start: append ? -1 : 0,
				end: -1,
				strictIndexing: false
			}, true);
			buffer.setOption("modifiable", false, true);
			if (reversed && !newTab) {
				let maxHeight = configuration_default.get("height", 10);
				nvim.call("coc#window#set_height", [window.id, Math.max(Math.min(maxHeight, this.length), 1)], true);
			}
			if (index > this.items.length - 1) index = 0;
			if (index == 0) if (append == 0) this.doHighlight(0, 299);
			else {
				let s = this.length - append - 1;
				if (s < 300) this.doHighlight(s, Math.min(299, this.length - 1));
			}
			else {
				let height = newTab ? workspace_default.env.lines : this.height;
				this.doHighlight(Math.max(0, index - height), Math.min(index + height + 1, this.length - 1));
			}
			if (!append) {
				this.currIndex = index;
				let lnum = this.indexToLnum(index);
				window.setCursor([lnum, 0], true);
				nvim.call("coc#list#select", [buffer.id, lnum], true);
			}
			if (reversed) nvim.command("normal! zb", true);
			nvim.command("redraws", true);
			nvim.resumeNotification(true, true);
		}
		restoreWindow() {
			if (this.newTab) return;
			let { winid, height } = this;
			if (winid && height) this.nvim.call("coc#window#set_height", [winid, height], true);
		}
		get length() {
			return this.items.length;
		}
		get selectedItems() {
			let { selected, items } = this;
			let res = [];
			for (let i of selected) {
				let idx = this.lnumToIndex(i);
				if (items[i - 1]) res.push(items[idx]);
			}
			return res;
		}
		doHighlight(start, end) {
			let { items, reversed, length, buffer } = this;
			const highlightItems = [];
			const iterate = (i) => {
				let lnum = this.indexToLnum(i) - 1;
				let { ansiHighlights } = items[i];
				if (ansiHighlights) for (let hi of ansiHighlights) {
					let { span, hlGroup } = hi;
					highlightItems.push({
						hlGroup,
						lnum,
						colStart: span[0],
						colEnd: span[1]
					});
				}
			};
			if (reversed) for (let i = Math.min(end, length - 1); i >= start; i--) iterate(i);
			else for (let i = start; i <= Math.min(end, length - 1); i++) iterate(i);
			start = this.indexToLnum(start) - 1;
			end = this.indexToLnum(end) - 1;
			if (start > end) [start, end] = [end, start];
			if (!buffer || highlightItems.length == 0) return;
			buffer.updateHighlights("list", highlightItems, {
				start,
				end: end + 1,
				priority: 99
			});
		}
		setCursor(lnum, col = 0, index) {
			let { items } = this;
			if (lnum > (items.length == 0 ? 1 : items.length)) return;
			index = index == null ? this.lnumToIndex(lnum) : index;
			this.onLineChange(index);
			this.window?.setCursor([lnum, col], true);
			this.nvim.call("coc#list#select", [this.bufnr, lnum], true);
		}
		async setIndex(index) {
			if (index < 0 || index >= this.items.length) return;
			let { nvim } = this;
			let lnum = this.indexToLnum(index);
			nvim.pauseNotification();
			this.setCursor(lnum, 0, index);
			nvim.command("redraw", true);
			await nvim.resumeNotification(false);
		}
		async moveCursor(delta) {
			let { index, reversed } = this;
			await this.setIndex(reversed ? index - delta : index + delta);
		}
		async getSelectedRange() {
			let { nvim } = this;
			await nvim.call("coc#prompt#stop_prompt", ["list"]);
			await nvim.eval("feedkeys(\"\\<esc>\", \"in\")");
			let [, start] = await nvim.call("getpos", "'<");
			let [, end] = await nvim.call("getpos", "'>");
			this.nvim.call("coc#prompt#start_prompt", ["list"], true);
			return [start, end];
		}
		cancel() {
			this.sequence.cancel();
		}
		reset() {
			this.cancel();
			if (this.window) {
				this.window = null;
				this.buffer = null;
				this.tabnr = void 0;
			}
		}
		dispose() {
			disposeAll(this.disposables);
			this.nvim.call("coc#window#close", [defaultValue(this.winid, -1)], true);
			this.reset();
			this.items = [];
			this._onDidChangeLine.dispose();
			this._onDidOpen.dispose();
			this._onDidClose.dispose();
			this._onDidLineChange.dispose();
			this._onDoubleClick.dispose();
		}
	};
}));
//#endregion
//#region src/util/async.ts
function waitImmediate() {
	return new Promise((resolve) => {
		setImmediate(() => {
			resolve(void 0);
		});
	});
}
async function runSequence(funcs, token) {
	for (const fn of funcs) {
		if (token.isCancellationRequested) break;
		await fn();
	}
}
async function forEach(items, func, token, options) {
	if (items.length === 0) return;
	const timer = new Timer(options?.yieldAfter);
	function runBatch(start) {
		timer.start();
		for (let i = start; i < items.length; i++) {
			func(items[i]);
			if (timer.shouldYield()) {
				if (options?.yieldCallback) options.yieldCallback();
				return i + 1;
			}
		}
		return -1;
	}
	let index = runBatch(0);
	while (index !== -1) {
		await waitImmediate();
		if (token !== void 0 && token.isCancellationRequested) break;
		index = runBatch(index);
	}
}
async function filter(items, isValid, onFilter, token) {
	if (items.length === 0) return;
	const timer = new Timer();
	const len = items.length;
	function convertBatch(start) {
		const result = [];
		timer.start();
		for (let i = start; i < len; i++) {
			let item = items[i];
			let res = isValid(item);
			if (res === true) result.push(item);
			else if (res) result.push(Object.assign({}, item, res));
			if (timer.shouldYield()) {
				let done = i === len - 1;
				onFilter(result, done);
				return done ? -1 : i + 1;
			}
		}
		onFilter(result, true);
		return -1;
	}
	let index = convertBatch(0);
	while (index !== -1) {
		await waitImmediate();
		if (token != null && token.isCancellationRequested) break;
		index = convertBatch(index);
	}
}
var defaultYieldTimeout, Timer;
var init_async$1 = __esmMin((() => {
	defaultYieldTimeout = 15;
	Timer = class {
		yieldAfter;
		startTime;
		counter;
		total;
		counterInterval;
		constructor(yieldAfter = defaultYieldTimeout) {
			this.yieldAfter = Math.max(yieldAfter, defaultYieldTimeout);
			this.startTime = Date.now();
			this.counter = 0;
			this.total = 0;
			this.counterInterval = 1;
		}
		start() {
			this.startTime = Date.now();
		}
		shouldYield() {
			if (++this.counter >= this.counterInterval) {
				const timeTaken = Date.now() - this.startTime;
				const timeLeft = Math.max(0, this.yieldAfter - timeTaken);
				this.total += this.counter;
				this.counter = 0;
				if (timeTaken >= this.yieldAfter || timeLeft <= 1) {
					this.counterInterval = 1;
					this.total = 0;
					return true;
				} else switch (timeTaken) {
					case 0:
					case 1:
						this.counterInterval = this.total * 2;
						break;
				}
			}
			return false;
		}
	};
}));
//#endregion
//#region src/list/worker.ts
function getFilterLabel(item) {
	return item.filterText != null ? patchLine(item.filterText, item.label) : item.label;
}
function toInputs(input, extendedSearchMode) {
	return extendedSearchMode ? parseInput(input) : [input];
}
function convertItemLabel(item) {
	let { label, converted } = item;
	if (converted) return item;
	if (label.includes("\n")) label = item.label = label.replace(/\r?\n.*/gm, "");
	if (label.includes(controlCode$1)) {
		let { line, highlights } = parseAnsiHighlights(label);
		item.label = line;
		if (!Array.isArray(item.ansiHighlights)) item.ansiHighlights = highlights;
	}
	item.converted = true;
	return item;
}
function indexOf(label, input, smartcase, ignorecase) {
	if (smartcase) return smartcaseIndex(input, label);
	return ignorecase ? label.toLowerCase().indexOf(input.toLowerCase()) : label.indexOf(input);
}
/**
* `a\ b` => [`a b`]
* `a b` =>  ['a', 'b']
*/
function parseInput(input) {
	let res = [];
	let startIdx = 0;
	let currIdx = 0;
	let prev = "";
	for (; currIdx < input.length; currIdx++) {
		let ch = input[currIdx];
		if (WHITE_SPACE_CHARS.includes(ch.charCodeAt(0))) {
			if (prev && prev != "\\" && startIdx != currIdx) {
				res.push(input.slice(startIdx, currIdx));
				startIdx = currIdx + 1;
			}
		}
		prev = ch;
	}
	if (startIdx != input.length) res.push(input.slice(startIdx, input.length));
	return res.map((s) => s.replace(/\\\s/g, " ").trim()).filter((s) => s.length > 0);
}
var logger$37, controlCode$1, WHITE_SPACE_CHARS, SEARCH_HL_GROUP, Worker;
var init_worker = __esmMin((() => {
	init_logger$2();
	init_util$7();
	init_ansiparse();
	init_array();
	init_async$1();
	init_diff();
	init_fuzzy();
	init_mutex();
	init_protocol();
	init_string$1();
	init_workspace$1();
	init_configuration$1();
	logger$37 = createLogger$1("list-worker");
	controlCode$1 = "\x1B";
	WHITE_SPACE_CHARS = [32, 9];
	SEARCH_HL_GROUP = "CocListSearch";
	Worker = class {
		list;
		prompt;
		listOptions;
		_loading = false;
		_finished = false;
		mutex = new Mutex();
		filteredCount;
		totalItems = [];
		tokenSource;
		filterTokenSource;
		_onDidChangeItems = new import_main$1.Emitter();
		_onDidChangeLoading = new import_main$1.Emitter();
		fuzzyMatch;
		onDidChangeItems = this._onDidChangeItems.event;
		onDidChangeLoading = this._onDidChangeLoading.event;
		constructor(list, prompt, listOptions) {
			this.list = list;
			this.prompt = prompt;
			this.listOptions = listOptions;
			this.fuzzyMatch = workspace_default.createFuzzyMatch();
		}
		set loading(loading) {
			if (this._loading == loading) return;
			this._loading = loading;
			this._onDidChangeLoading.fire(loading);
		}
		get isLoading() {
			return this._loading;
		}
		async loadItems(context, reload = false) {
			this.cancelFilter();
			this.filteredCount = 0;
			this._finished = false;
			let { list, listOptions } = this;
			this.loading = true;
			let { interactive } = listOptions;
			this.tokenSource = new import_main$1.CancellationTokenSource();
			let token = this.tokenSource.token;
			let items = await list.loadItems(context, token);
			if (token.isCancellationRequested) return;
			items = items ?? [];
			if (Array.isArray(items)) {
				this.tokenSource = null;
				this.totalItems = items;
				this.loading = false;
				this._finished = true;
				let filtered;
				if (!interactive) {
					this.filterTokenSource = new import_main$1.CancellationTokenSource();
					await this.mutex.use(async () => {
						await this.filterItems(items, { reload }, token);
					});
				} else {
					filtered = this.convertToHighlightItems(items);
					this._onDidChangeItems.fire({
						sorted: true,
						items: filtered,
						reload,
						finished: true
					});
				}
			} else {
				let task = items;
				let totalItems = this.totalItems = [];
				let taken = 0;
				let currInput = context.input;
				this.filterTokenSource = new import_main$1.CancellationTokenSource();
				let _onData = async (finished) => {
					await this.mutex.use(async () => {
						if (this.input != currInput) {
							currInput = this.input;
							taken = defaultValue(this.filteredCount, 0);
						}
						if (taken >= totalItems.length) return;
						let append = taken > 0;
						let remain = totalItems.slice(taken);
						taken = totalItems.length;
						if (!interactive) {
							let tokenSource = this.filterTokenSource;
							await this.filterItems(remain, {
								append,
								reload
							}, tokenSource.token);
						} else {
							let items = this.convertToHighlightItems(remain);
							this._onDidChangeItems.fire({
								items,
								append,
								reload,
								sorted: true,
								finished
							});
						}
					});
				};
				let interval = setInterval(async () => {
					await _onData();
				}, 50);
				task.on("data", (item) => {
					totalItems.push(item);
				});
				let onEnd = async () => {
					if (task == null) return;
					clearInterval(interval);
					this.tokenSource = null;
					task = null;
					this.loading = false;
					this._finished = true;
					disposable.dispose();
					if (token.isCancellationRequested) return;
					if (totalItems.length == 0) {
						this._onDidChangeItems.fire({
							items: [],
							append: false,
							sorted: true,
							reload,
							finished: true
						});
						return;
					}
					await _onData(true);
				};
				let disposable = token.onCancellationRequested(() => {
					this.mutex.reset();
					task?.dispose();
					onEnd();
				});
				let toDispose = task;
				task.on("error", async (error) => {
					if (task == null) return;
					task = null;
					toDispose.dispose();
					this.tokenSource = null;
					this.loading = false;
					disposable.dispose();
					clearInterval(interval);
					workspace_default.nvim.call("coc#prompt#stop_prompt", ["list"], true);
					workspace_default.nvim.echoError(`Task error: ${error.toString()}`);
					logger$37.error("List task error:", error);
				});
				task.on("end", onEnd);
			}
		}
		async drawItems() {
			let { totalItems } = this;
			if (totalItems.length === 0) return;
			this.cancelFilter();
			let tokenSource = this.filterTokenSource = new import_main$1.CancellationTokenSource();
			let token = tokenSource.token;
			await this.mutex.use(async () => {
				if (token.isCancellationRequested) return;
				let { totalItems } = this;
				this.filteredCount = totalItems.length;
				await this.filterItems(totalItems, {}, tokenSource.token);
			});
		}
		cancelFilter() {
			if (this.filterTokenSource) {
				this.filterTokenSource.cancel();
				this.filterTokenSource = null;
			}
		}
		stop() {
			this.cancelFilter();
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = null;
			}
			this.loading = false;
		}
		get length() {
			return this.totalItems.length;
		}
		get input() {
			return this.prompt.input;
		}
		/**
		* Add highlights for interactive list
		*/
		convertToHighlightItems(items) {
			let input = toText(this.input);
			if (input.length > 0) this.fuzzyMatch.setPattern(input);
			let res = items.map((item) => {
				convertItemLabel(item);
				if (input.length > 0 && item.filterText !== "") {
					let filterLabel = getFilterLabel(item);
					let results = this.fuzzyMatch.matchHighlights(filterLabel, SEARCH_HL_GROUP);
					item.ansiHighlights = Array.isArray(item.ansiHighlights) ? item.ansiHighlights.filter((o) => o.hlGroup !== SEARCH_HL_GROUP) : [];
					if (results) item.ansiHighlights.push(...results.highlights);
				}
				return item;
			});
			this.fuzzyMatch.free();
			return res;
		}
		async filterItemsByInclude(input, items, token, onFilter) {
			let { ignorecase } = this.listOptions;
			const smartcase = configuration_default.smartcase;
			let inputs = toInputs(input, configuration_default.extendedSearchMode);
			if (ignorecase) inputs = inputs.map((s) => s.toLowerCase());
			await filter(items, (item) => {
				convertItemLabel(item);
				let spans = [];
				let filterLabel = getFilterLabel(item);
				let byteIndex = bytes(filterLabel);
				let curr = 0;
				item.ansiHighlights = toArray(item.ansiHighlights).filter((o) => o.hlGroup !== SEARCH_HL_GROUP);
				for (let input of inputs) {
					let idx = indexOf(filterLabel.slice(curr), input, smartcase, ignorecase);
					if (idx === -1) break;
					let end = idx + curr + input.length;
					spans.push([byteIndex(idx + curr), byteIndex(end)]);
					curr = end;
				}
				if (spans.length !== inputs.length) return false;
				item.ansiHighlights.push(...spans.map((s) => {
					return {
						span: s,
						hlGroup: SEARCH_HL_GROUP
					};
				}));
				return true;
			}, onFilter, token);
		}
		async filterItemsByRegex(input, items, token, onFilter) {
			let { ignorecase } = this.listOptions;
			let flags = ignorecase ? "iu" : "u";
			let inputs = toInputs(input, configuration_default.extendedSearchMode);
			let regexes = inputs.reduce((p, c) => {
				try {
					p.push(new RegExp(c, flags));
				} catch (e) {}
				return p;
			}, []);
			await filter(items, (item) => {
				convertItemLabel(item);
				item.ansiHighlights = toArray(item.ansiHighlights).filter((o) => o.hlGroup !== SEARCH_HL_GROUP);
				let spans = [];
				let filterLabel = getFilterLabel(item);
				let byteIndex = bytes(filterLabel);
				let curr = 0;
				for (let regex of regexes) {
					let ms = filterLabel.slice(curr).match(regex);
					if (ms == null) break;
					let end = ms.index + curr + ms[0].length;
					spans.push([byteIndex(ms.index + curr), byteIndex(end)]);
					curr = end;
				}
				if (spans.length !== inputs.length) return false;
				item.ansiHighlights.push(...spans.map((s) => {
					return {
						span: s,
						hlGroup: SEARCH_HL_GROUP
					};
				}));
				return true;
			}, onFilter, token);
		}
		async filterItemsByFuzzyMatch(input, items, token, onFilter) {
			let { extendedSearchMode, smartcase } = configuration_default;
			let { sort } = this.listOptions;
			let idx = 0;
			this.fuzzyMatch.setPattern(input, !extendedSearchMode);
			let codes = getCharCodes(input);
			if (extendedSearchMode) codes = codes.filter((c) => !WHITE_SPACE_CHARS.includes(c));
			await filter(items, (item) => {
				convertItemLabel(item);
				let filterLabel = getFilterLabel(item);
				let match = this.fuzzyMatch.matchHighlights(filterLabel, SEARCH_HL_GROUP);
				if (!match || smartcase && !fuzzyMatch(codes, filterLabel)) return false;
				let ansiHighlights = Array.isArray(item.ansiHighlights) ? item.ansiHighlights.filter((o) => o.hlGroup != SEARCH_HL_GROUP) : [];
				ansiHighlights.push(...match.highlights);
				return {
					sortText: typeof item.sortText === "string" ? item.sortText : String.fromCharCode(idx),
					score: match.score,
					ansiHighlights
				};
			}, (items, done) => {
				onFilter(items, done, sort);
			}, token);
		}
		async filterItems(arr, opts, token) {
			let { input } = this;
			if (input.length === 0) {
				let items = arr.map((item) => {
					return convertItemLabel(item);
				});
				this._onDidChangeItems.fire({
					items,
					sorted: true,
					finished: this._finished,
					...opts
				});
				return;
			}
			let called = false;
			let itemsToSort = [];
			const onFilter = (items, done, sort) => {
				let finished = done && this._finished;
				if (token.isCancellationRequested || !finished && items.length == 0) return;
				if (sort) {
					itemsToSort.push(...items);
					if (done) this._onDidChangeItems.fire({
						items: itemsToSort,
						append: false,
						sorted: false,
						reload: opts.reload,
						finished
					});
				} else {
					let append = opts.append === true || called;
					called = true;
					this._onDidChangeItems.fire({
						items,
						append,
						sorted: true,
						reload: opts.reload,
						finished
					});
				}
			};
			switch (this.listOptions.matcher) {
				case "strict":
					await this.filterItemsByInclude(input, arr, token, onFilter);
					break;
				case "regex":
					await this.filterItemsByRegex(input, arr, token, onFilter);
					break;
				default: await this.filterItemsByFuzzyMatch(input, arr, token, onFilter);
			}
		}
		dispose() {
			this.stop();
		}
	};
}));
//#endregion
//#region src/list/session.ts
var frames$1, debounceTime$8, ListSession;
var init_session$2 = __esmMin((() => {
	init_highlighter();
	init_util$7();
	init_node();
	init_protocol();
	init_window();
	init_workspace$1();
	init_configuration$1();
	init_db$1();
	init_history();
	init_ui$1();
	init_worker();
	frames$1 = [
		"⠋",
		"⠙",
		"⠹",
		"⠸",
		"⠼",
		"⠴",
		"⠦",
		"⠧",
		"⠇",
		"⠏"
	];
	debounceTime$8 = getConditionValue(50, 1);
	ListSession = class {
		nvim;
		prompt;
		list;
		listOptions;
		listArgs;
		history;
		ui;
		worker;
		cwd;
		loadingFrame = "";
		timer;
		hidden = false;
		disposables = [];
		savedHeight;
		targetWinid;
		targetBufnr;
		/**
		* Original list arguments.
		*/
		args = [];
		constructor(nvim, prompt, list, listOptions, listArgs) {
			this.nvim = nvim;
			this.prompt = prompt;
			this.list = list;
			this.listOptions = listOptions;
			this.listArgs = listArgs;
			this.ui = new ListUI(nvim, list.name, listOptions);
			this.history = new InputHistory(prompt, list.name, db_default, workspace_default.cwd);
			this.worker = new Worker(list, prompt, listOptions);
			let debouncedChangeLine = debounce(async () => {
				let [previewing, currwin, lnum] = await nvim.eval("[coc#list#has_preview(),win_getid(),line(\".\")]");
				if (previewing && currwin == this.winid) {
					let idx = this.ui.lnumToIndex(lnum);
					await this.doPreview(idx);
				}
			}, debounceTime$8);
			this.disposables.push({ dispose: () => {
				debouncedChangeLine.clear();
			} });
			this.ui.onDidChangeLine(debouncedChangeLine, null, this.disposables);
			this.ui.onDidChangeLine(this.resolveItem, this, this.disposables);
			this.ui.onDidLineChange(this.resolveItem, this, this.disposables);
			let debounced = debounce(async () => {
				this.updateStatus();
				let { autoPreview } = this.listOptions;
				if (!autoPreview) {
					let [previewing, mode] = await nvim.eval("[coc#list#has_preview(),mode()]");
					if (mode != "n" || !previewing) return;
				}
				await this.doAction("preview");
			}, 50);
			this.disposables.push({ dispose: () => {
				debounced.clear();
			} });
			this.ui.onDidLineChange(debounced, null, this.disposables);
			this.ui.onDidOpen(async () => {
				if (typeof this.list.doHighlight == "function") this.list.doHighlight();
				if (this.listOptions.first) await this.doAction();
			}, null, this.disposables);
			this.ui.onDidClose(this.hide, this, this.disposables);
			this.ui.onDidDoubleClick(this.doAction, this, this.disposables);
			this.worker.onDidChangeItems((ev) => {
				if (this.hidden) return;
				this.ui.onDidChangeItems(ev);
			}, null, this.disposables);
			let start = 0;
			let timer;
			let interval;
			this.disposables.push(import_main$1.Disposable.create(() => {
				clearTimeout(timer);
				clearInterval(interval);
			}));
			this.worker.onDidChangeLoading((loading) => {
				if (this.hidden) return;
				if (timer) clearTimeout(timer);
				if (loading) {
					start = Date.now();
					if (interval) clearInterval(interval);
					interval = setInterval(() => {
						let idx = Math.floor((Date.now() - start) % 1e3 / 100);
						this.loadingFrame = frames$1[idx];
						this.updateStatus();
					}, 100);
				} else timer = setTimeout(() => {
					this.loadingFrame = "";
					if (interval) clearInterval(interval);
					interval = null;
					this.updateStatus();
				}, Math.max(0, 200 - (Date.now() - start)));
			}, null, this.disposables);
		}
		async start(args) {
			this.args = args;
			this.cwd = workspace_default.cwd;
			this.hidden = false;
			let { listArgs } = this;
			let res = await this.nvim.eval(`[win_getid(),bufnr("%"),${workspace_default.isVim ? "winheight(\"%\")" : "nvim_win_get_height(0)"}]`);
			this.listArgs = listArgs;
			this.history.filter();
			this.targetWinid = res[0];
			this.targetBufnr = res[1];
			this.savedHeight = res[2];
			await this.worker.loadItems(this.context);
		}
		async reloadItems() {
			if (!this.ui.winid) return;
			await this.worker.loadItems(this.context, true);
		}
		async call(fname) {
			await this.nvim.call("coc#prompt#stop_prompt", ["list"]);
			let targets = await this.ui.getItems();
			let context = {
				name: this.name,
				args: this.listArgs,
				input: this.prompt.input,
				winid: this.targetWinid,
				bufnr: this.targetBufnr,
				targets
			};
			let res = await this.nvim.call(fname, [context]);
			this.prompt.start();
			return res;
		}
		async chooseAction() {
			let { nvim, defaultAction } = this;
			let { actions } = this.list;
			let names = actions.map((o) => o.name);
			let idx = names.indexOf(defaultAction.name);
			if (idx != -1) {
				names.splice(idx, 1);
				names.unshift(defaultAction.name);
			}
			let shortcuts = /* @__PURE__ */ new Set();
			let choices = [];
			let invalids = [];
			let menuAction = workspace_default.env.dialog && configuration_default.get("menuAction", false);
			for (let name of names) {
				let i = 0;
				for (let ch of name) {
					if (!shortcuts.has(ch)) {
						shortcuts.add(ch);
						choices.push(`${name.slice(0, i)}&${name.slice(i)}`);
						break;
					}
					i++;
				}
				if (i == name.length) invalids.push(name);
			}
			if (invalids.length && !menuAction) names = names.filter((s) => !invalids.includes(s));
			let n;
			if (menuAction) {
				nvim.call("coc#prompt#stop_prompt", ["list"], true);
				n = await window_default.showMenuPicker(names, {
					title: "Choose action",
					shortcuts: true
				});
				n = n + 1;
				this.prompt.start();
			} else {
				await nvim.call("coc#prompt#stop_prompt", ["list"]);
				n = await nvim.call("confirm", ["Choose action:", choices.join("\n")]);
				await wait(10);
				this.prompt.start();
			}
			if (n) await this.doAction(names[n - 1]);
		}
		async doAction(name) {
			let { list } = this;
			let action;
			if (name != null) {
				action = list.actions.find((o) => o.name == name);
				if (!action) {
					window_default.showErrorMessage(`Action ${name} not found`);
					return;
				}
			} else action = this.defaultAction;
			let items;
			if (name == "preview") {
				let item = await this.ui.item;
				items = item ? [item] : [];
			} else items = await this.ui.getItems();
			if (items.length) await this.doItemAction(items, action);
		}
		async doPreview(index) {
			let item = this.ui.getItem(index);
			let action = this.list.actions.find((o) => o.name == "preview");
			if (!item || !action) return;
			await this.doItemAction([item], action);
		}
		async first() {
			await this.doDefaultAction(0);
		}
		async last() {
			await this.doDefaultAction(this.ui.length - 1);
		}
		async previous() {
			await this.doDefaultAction(this.ui.index - 1);
		}
		async next() {
			await this.doDefaultAction(this.ui.index + 1);
		}
		async doDefaultAction(index) {
			let { ui } = this;
			let item = ui.getItem(index);
			if (!item) return;
			await this.ui.setIndex(index);
			await this.doItemAction([item], this.defaultAction);
			await ui.echoMessage(item);
		}
		/**
		* list name
		*/
		get name() {
			return this.list.name;
		}
		/**
		* Window id used by list.
		* @returns {number | undefined}
		*/
		get winid() {
			return this.ui.winid;
		}
		get length() {
			return this.ui.length;
		}
		get defaultAction() {
			let { defaultAction, actions, name } = this.list;
			let config = workspace_default.getConfiguration(`list.source.${name}`);
			let action;
			if (config.defaultAction) action = actions.find((o) => o.name == config.defaultAction);
			if (!action) action = actions.find((o) => o.name == defaultAction);
			if (!action) action = actions[0];
			if (!action) throw new Error(`default action "${defaultAction}" not found`);
			return action;
		}
		async hide(notify = false, isVim = workspace_default.isVim) {
			if (this.hidden) return;
			let { nvim, timer, targetWinid, context } = this;
			let { winid } = this.ui;
			if (timer) clearTimeout(timer);
			this.worker.stop();
			this.history.add();
			this.ui.reset();
			db_default.save();
			this.hidden = true;
			nvim.pauseNotification();
			if (!isVim) nvim.call("coc#prompt#stop_prompt", ["list"], true);
			if (winid) nvim.call("coc#list#close", [
				winid,
				context.options.position,
				targetWinid,
				this.savedHeight
			], true);
			if (notify) return nvim.resumeNotification(true, true);
			await nvim.resumeNotification(false);
			if (isVim) {
				await wait(10);
				nvim.call("coc#prompt#stop_prompt", ["list"], true);
				nvim.redrawVim();
			}
		}
		toggleMode() {
			let mode = this.prompt.mode == "normal" ? "insert" : "normal";
			this.prompt.mode = mode;
			this.listOptions.mode = mode;
			this.updateStatus();
		}
		stop() {
			this.worker.stop();
		}
		async resolveItem() {
			let index = this.ui.index;
			let item = this.ui.getItem(index);
			if (!item || item.resolved) return;
			let { list } = this;
			if (typeof list.resolveItem === "function") {
				let label = item.label;
				let resolved = await Promise.resolve(list.resolveItem(item));
				if (resolved && index == this.ui.index) {
					Object.assign(item, resolved, { resolved: true });
					if (label == resolved.label) return;
					this.ui.updateItem(item, index);
				}
			}
		}
		async showHelp() {
			await this.hide();
			let { list, nvim } = this;
			nvim.pauseNotification();
			nvim.command(`tabe +setl\\ previewwindow [LIST HELP]`, true);
			nvim.command("setl nobuflisted noswapfile buftype=nofile bufhidden=wipe", true);
			await nvim.resumeNotification();
			let hasOptions = list.options && list.options.length;
			let buf = await nvim.buffer;
			let highlighter = new Highlighter();
			highlighter.addLine("NAME", "Label");
			highlighter.addLine(`  ${list.name} - ${list.description || ""}\n`);
			highlighter.addLine("SYNOPSIS", "Label");
			highlighter.addLine(`  :CocList [LIST OPTIONS] ${list.name}${hasOptions ? " [ARGUMENTS]" : ""}\n`);
			if (list.detail) {
				highlighter.addLine("DESCRIPTION", "Label");
				let lines = list.detail.split("\n").map((s) => "  " + s);
				highlighter.addLine(lines.join("\n") + "\n");
			}
			if (hasOptions) {
				highlighter.addLine("ARGUMENTS", "Label");
				highlighter.addLine("");
				for (let opt of list.options) {
					highlighter.addLine(opt.name, "Special");
					highlighter.addLine(`  ${opt.description}`);
					highlighter.addLine("");
				}
				highlighter.addLine("");
			}
			let config = workspace_default.getConfiguration(`list.source.${list.name}`);
			if (Object.keys(config).length) {
				highlighter.addLine("CONFIGURATIONS", "Label");
				highlighter.addLine("");
				for (let key of Object.keys(config)) {
					let val = config[key];
					let name = `list.source.${list.name}.${key}`;
					let description = defaultValue(workspace_default.configurations.getDescription(name), key);
					highlighter.addLine(`  "${name}"`, "MoreMsg");
					highlighter.addText(` - ${description} current value: `);
					highlighter.addText(JSON.stringify(val), "Special");
				}
				highlighter.addLine("");
			}
			highlighter.addLine("ACTIONS", "Label");
			highlighter.addLine(`  ${list.actions.map((o) => o.name).join(", ")}`);
			highlighter.addLine("");
			highlighter.addLine(`see ':h coc-list-options' for available list options.`, "Comment");
			nvim.pauseNotification();
			highlighter.render(buf, 0, -1);
			nvim.command("setl nomod", true);
			nvim.command("setl nomodifiable", true);
			nvim.command("normal! gg", true);
			nvim.command("nnoremap <buffer> q :bd!<CR>", true);
			await nvim.resumeNotification();
		}
		async switchMatcher() {
			let { matcher, interactive } = this.listOptions;
			if (interactive) return;
			const list = [
				"fuzzy",
				"strict",
				"regex"
			];
			let idx = list.indexOf(matcher) + 1;
			if (idx >= list.length) idx = 0;
			this.listOptions.matcher = list[idx];
			this.prompt.matcher = list[idx];
			await this.worker.drawItems();
		}
		updateStatus() {
			let { ui, list, nvim } = this;
			if (!ui.bufnr) return;
			let buf = nvim.createBuffer(ui.bufnr);
			let status = {
				mode: this.prompt.mode.toUpperCase(),
				args: this.args.join(" "),
				name: list.name,
				cwd: this.cwd,
				loading: this.loadingFrame,
				total: this.worker.length
			};
			buf.setVar("list_status", status, true);
			nvim.command("redraws", true);
		}
		get context() {
			let { winid } = this.ui;
			return {
				options: this.listOptions,
				args: this.listArgs,
				input: this.prompt.input,
				cwd: workspace_default.cwd,
				window: this.window,
				buffer: this.buffer,
				listWindow: winid ? this.nvim.createWindow(winid) : void 0
			};
		}
		get window() {
			return this.targetWinid ? this.nvim.createWindow(this.targetWinid) : void 0;
		}
		get buffer() {
			return this.targetBufnr ? this.nvim.createBuffer(this.targetBufnr) : void 0;
		}
		onMouseEvent(key) {
			switch (key) {
				case "<LeftMouse>": return this.ui.onMouse("mouseDown");
				case "<LeftDrag>": return this.ui.onMouse("mouseDrag");
				case "<LeftRelease>": return this.ui.onMouse("mouseUp");
				case "<2-LeftMouse>": return this.ui.onMouse("doubleClick");
			}
		}
		async doNumberSelect(ch) {
			if (!this.listOptions.numberSelect) return false;
			let code = ch.charCodeAt(0);
			if (code >= 48 && code <= 57) {
				let n = Number(ch);
				if (n == 0) n = 10;
				if (this.ui.length >= n) {
					this.nvim.pauseNotification();
					this.ui.setCursor(n);
					await this.nvim.resumeNotification();
					await this.doAction();
					return true;
				}
			}
			return false;
		}
		jumpBack() {
			let { targetWinid, nvim } = this;
			if (targetWinid) {
				nvim.pauseNotification();
				nvim.call("coc#prompt#stop_prompt", ["list"], true);
				this.nvim.call("win_gotoid", [targetWinid], true);
				nvim.resumeNotification(false, true);
			}
		}
		async resume() {
			if (this.winid) await this.hide();
			let res = await this.nvim.eval(`[win_getid(),bufnr("%"),${workspace_default.isVim ? "winheight(\"%\")" : "nvim_win_get_height(0)"}]`);
			this.hidden = false;
			this.targetWinid = res[0];
			this.targetBufnr = res[1];
			this.savedHeight = res[2];
			this.prompt.start();
			await this.ui.resume();
			if (this.listOptions.autoPreview) await this.doAction("preview");
		}
		async doItemAction(items, action) {
			let { noQuit, position } = this.listOptions;
			let { nvim } = this;
			let persistAction = action.persist === true || action.name == "preview";
			if (position === "tab" && action.tabPersist) persistAction = true;
			let persist = this.winid && (persistAction || noQuit);
			if (persist) {
				if (!persistAction) {
					nvim.pauseNotification();
					nvim.call("coc#prompt#stop_prompt", ["list"], true);
					nvim.call("win_gotoid", [this.context.window.id], true);
					await nvim.resumeNotification();
				}
			} else await this.hide();
			if (action.multiple) await Promise.resolve(action.execute(items, this.context));
			else if (action.parallel) await Promise.all(items.map((item) => Promise.resolve(action.execute(item, this.context))));
			else for (let item of items) await Promise.resolve(action.execute(item, this.context));
			if (persist) this.ui.restoreWindow();
			if (action.reload && persist) await this.reloadItems();
			else if (persist) this.nvim.command("redraw", true);
		}
		onInputChange() {
			if (this.timer) clearTimeout(this.timer);
			this.ui.cancel();
			this.history.filter();
			this.listOptions.input = this.prompt.input;
			if (this.listOptions.interactive) {
				this.worker.stop();
				this.timer = setTimeout(async () => {
					await this.worker.loadItems(this.context);
				}, configuration_default.debounceTime);
			} else this.worker.drawItems();
		}
		dispose() {
			this.hide(true);
			disposeAll(this.disposables);
			this.worker.dispose();
			this.ui.dispose();
		}
	};
}));
//#endregion
//#region src/list/formatting.ts
function fixWidth(str, width) {
	if (str.length > width) return str.slice(0, width - 1) + ".";
	return str + " ".repeat(width - str.length);
}
function formatUri(uri, cwd) {
	if (!uri.startsWith("file:")) return uri;
	let filepath = URI.parse(uri).fsPath;
	return isParentFolder(cwd, filepath) ? path$5.relative(cwd, filepath) : filepath;
}
function formatListItems(align, list) {
	if (list.length === 0) return [];
	let processedList = [];
	if (align) {
		const maxWidths = Array(Math.max(...list.map((item) => item.label.length))).fill(0);
		for (let item of list) for (let i = 0; i < item.label.length; i++) maxWidths[i] = Math.max(maxWidths[i], (item.label[i] ?? "").length);
		processedList = list.map((item) => ({
			...item,
			label: item.label.map((element, idx) => (element ?? "").padEnd(maxWidths[idx])).join("	")
		}));
	} else processedList = list.map((item) => ({
		...item,
		label: item.label.join("	")
	}));
	return processedList;
}
function formatPath(format, pathToFormat) {
	if (format === "hidden") return "";
	else if (format === "full") return pathToFormat;
	else if (format === "short") {
		const segments = pathToFormat.split(path$5.sep);
		if (segments.length < 2) return pathToFormat;
		return [...segments.slice(0, segments.length - 2).filter((seg) => seg.length > 0).map((seg) => seg[0]), segments[segments.length - 1]].join(path$5.sep);
	} else {
		const segments = pathToFormat.split(path$5.sep);
		return toText(segments[segments.length - 1]);
	}
}
var init_formatting$1 = __esmMin((() => {
	init_node();
	init_esm();
	init_fs();
	init_string$1();
}));
//#endregion
//#region src/list/source/commands.ts
function score(list, key) {
	let idx = list.indexOf(key);
	return idx == -1 ? -1 : list.length - idx;
}
var extensionRegistry$2, CommandsList;
var init_commands$1 = __esmMin((() => {
	init_commands$2();
	init_extensionRegistry();
	init_registry$1();
	init_workspace$1();
	init_basic();
	init_formatting$1();
	init_string$1();
	extensionRegistry$2 = Registry.as(Extensions$3.ExtensionContribution);
	CommandsList = class extends BasicList {
		defaultAction = "run";
		description = "registered commands of coc.nvim";
		name = "commands";
		mru;
		constructor() {
			super();
			this.mru = workspace_default.createMru("commands");
			this.addAction("run", async (item) => {
				await commands_default.fireCommand(item.data.cmd);
			});
			this.addAction("append", async (item) => {
				let { cmd } = item.data;
				await workspace_default.nvim.feedKeys(`:CocCommand ${cmd} `, "n", false);
			});
		}
		async loadItems(_context) {
			let items = [];
			let mruList = await this.mru.load();
			let ids = /* @__PURE__ */ new Set();
			for (const obj of extensionRegistry$2.onCommands.concat(commands_default.commandList)) {
				let { id, title } = obj;
				if (ids.has(id)) continue;
				ids.add(id);
				let desc = toText(title);
				items.push({
					label: [id, desc],
					filterText: id + " " + desc,
					data: {
						cmd: id,
						score: score(mruList, id)
					}
				});
			}
			items.sort((a, b) => b.data.score - a.data.score);
			return formatListItems(this.alignColumns, items);
		}
		doHighlight() {
			let { nvim } = this;
			nvim.pauseNotification();
			nvim.command("syntax match CocCommandsTitle /\\t.*$/ contained containedin=CocCommandsLine", true);
			nvim.command("highlight default link CocCommandsTitle Comment", true);
			nvim.resumeNotification(false, true);
		}
	};
}));
//#endregion
//#region src/list/source/location.ts
var LocationList;
var init_location = __esmMin((() => {
	init_main$2();
	init_esm();
	init_commands$2();
	init_array();
	init_fs();
	init_node();
	init_string$1();
	init_basic();
	LocationList = class extends BasicList {
		defaultAction = "open";
		description = "show locations saved by g:coc_jump_locations variable";
		name = "location";
		constructor() {
			super();
			this.createAction({
				name: "refactor",
				multiple: true,
				execute: async (items) => {
					let locations = items.map((o) => o.location);
					await commands_default.executeCommand("editor.action.showRefactor", locations);
				}
			});
			this.addLocationActions();
		}
		formatFilepath(file) {
			if (typeof global.formatFilepath === "function") return global.formatFilepath(file) + "";
			return file;
		}
		async loadItems(context, _token) {
			let locs = await this.nvim.getVar("coc_jump_locations");
			locs = toArray(locs);
			let bufnr = context.buffer.id;
			let ignoreFilepath = locs.every((o) => o.bufnr == bufnr);
			return locs.map((loc) => {
				let filename = ignoreFilepath ? "" : loc.filename;
				if (filename.length > 0 && path$5.isAbsolute(filename)) filename = isParentFolder(context.cwd, filename) ? path$5.relative(context.cwd, filename) : filename;
				return this.createItem(filename, loc);
			});
		}
		createItem(filename, loc) {
			let uri = loc.uri ?? URI.file(loc.filename).toString();
			let label = "";
			const ansiHighlights = [];
			let start = 0;
			filename = this.formatFilepath(filename);
			if (filename.length > 0) {
				label = filename + " ";
				ansiHighlights.push({
					span: [start, start + byteLength(filename)],
					hlGroup: "Directory"
				});
			}
			start = byteLength(label);
			let lnum = loc.lnum ?? loc.range.start.line + 1;
			let col = loc.col ?? byteLength(loc.text.slice(0, loc.range.start.character)) + 1;
			let position = `|${loc.type ? loc.type + " " : ""}${lnum} Col ${col}|`;
			label += position;
			ansiHighlights.push({
				span: [start, start + byteLength(position)],
				hlGroup: "LineNr"
			});
			if (loc.type) {
				let hl = loc.type.toLowerCase() === "error" ? "Error" : "WarningMsg";
				ansiHighlights.push({
					span: [start + 1, start + byteLength(loc.type)],
					hlGroup: hl
				});
			}
			if (loc.range && loc.range.start.line == loc.range.end.line) {
				let len = byteLength(label) + 1;
				let start = len + byteLength(loc.text.slice(0, loc.range.start.character));
				let end = len + byteLength(loc.text.slice(0, loc.range.end.character));
				ansiHighlights.push({
					span: [start, end],
					hlGroup: "Search"
				});
			}
			label += " " + loc.text;
			let filterText = `${filename}${loc.text.trim()}`;
			let location;
			if (loc.range) location = Location.create(uri, loc.range);
			else {
				let start = Position.create(loc.lnum - 1, loc.col - 1);
				let end = Position.create((loc.end_lnum ?? loc.lnum) - 1, (loc.end_col ?? loc.col) - 1);
				location = Location.create(uri, Range.create(start, end));
			}
			location.targetRange = loc.targetRange ? loc.targetRange : Range.create(lnum - 1, 0, lnum - 1, 99);
			return {
				label,
				location,
				filterText,
				ansiHighlights
			};
		}
	};
}));
//#endregion
//#region src/list/source/diagnostics.ts
function convertToLabel(item, cwd, includeCode, pathFormat = "full") {
	const formattedPath = formatPath(pathFormat, isParentFolder(cwd, item.file) ? path$5.relative(cwd, item.file) : item.file);
	const formattedPosition = pathFormat !== "hidden" ? [`${formattedPath}:${item.lnum}`] : [];
	const source = includeCode ? `[${item.source} ${defaultValue(item.code, "")}]` : item.source;
	return [
		...formattedPosition,
		source,
		item.severity,
		item.message
	];
}
var DiagnosticsList;
var init_diagnostics = __esmMin((() => {
	init_esm();
	init_manager$4();
	init_util$5();
	init_util$7();
	init_fs();
	init_node();
	init_workspace$1();
	init_formatting$1();
	init_location();
	DiagnosticsList = class extends LocationList {
		defaultAction = "open";
		description = "diagnostics of current workspace";
		name = "diagnostics";
		options = [
			{
				name: "--buffer",
				hasValue: false,
				description: "list diagnostics of current buffer only"
			},
			{
				name: "--workspace-folder",
				hasValue: false,
				description: "list diagnostics of current workspace folder only"
			},
			{
				name: "-l, -level LEVEL",
				hasValue: true,
				description: "filter diagnostics by diagnostic level, could be \"error\", \"warning\" and \"information\""
			}
		];
		constructor(manager, event = true) {
			super();
			if (event) manager_default$2.onDidRefresh(async () => {
				let session = manager.getSession("diagnostics");
				if (session) await session.reloadItems();
			}, null, this.disposables);
		}
		async filterDiagnostics(parsedArgs) {
			let list = await manager_default$2.getDiagnosticList();
			if (parsedArgs["workspace-folder"]) {
				const folder = workspace_default.getWorkspaceFolder(workspace_default.root);
				if (folder) {
					const normalized = URI.parse(folder.uri);
					list = list.filter((item) => isParentFolder(normalized.fsPath, item.file));
				}
			} else if (parsedArgs.buffer) {
				const doc = await workspace_default.document;
				const normalized = URI.parse(doc.uri);
				list = list.filter((item) => item.file === normalized.fsPath);
			}
			if (typeof parsedArgs.level === "string") {
				let level = severityLevel(parsedArgs.level);
				list = list.filter((item) => item.level <= level);
			}
			return list;
		}
		async loadItems(context) {
			let { cwd, args } = context;
			const parsedArgs = this.parseArguments(args);
			let list = await this.filterDiagnostics(parsedArgs);
			const config = this.getConfig();
			const includeCode = config.get("includeCode", true);
			const pathFormat = config.get("pathFormat", "full");
			const unformatted = list.map((item) => {
				return {
					label: convertToLabel(item, cwd, includeCode, pathFormat),
					location: item.location
				};
			});
			return formatListItems(this.alignColumns, unformatted);
		}
		doHighlight() {
			let { nvim } = this;
			nvim.pauseNotification();
			nvim.command("syntax match CocDiagnosticsFile /\\v^\\s*\\S+/ contained containedin=CocDiagnosticsLine", true);
			nvim.command("syntax match CocDiagnosticsError /\\tError\\s*\\t/ contained containedin=CocDiagnosticsLine", true);
			nvim.command("syntax match CocDiagnosticsWarning /\\tWarning\\s*\\t/ contained containedin=CocDiagnosticsLine", true);
			nvim.command("syntax match CocDiagnosticsInfo /\\tInformation\\s*\\t/ contained containedin=CocDiagnosticsLine", true);
			nvim.command("syntax match CocDiagnosticsHint /\\tHint\\s*\\t/ contained containedin=CocDiagnosticsLine", true);
			nvim.command("highlight default link CocDiagnosticsFile Comment", true);
			nvim.command("highlight default link CocDiagnosticsError CocErrorSign", true);
			nvim.command("highlight default link CocDiagnosticsWarning CocWarningSign", true);
			nvim.command("highlight default link CocDiagnosticsInfo CocInfoSign", true);
			nvim.command("highlight default link CocDiagnosticsHint CocHintSign", true);
			nvim.resumeNotification(false, true);
		}
	};
}));
//#endregion
//#region src/list/source/extensions.ts
function sortExtensionItem(a, b) {
	if (a.data.priority != b.data.priority) return b.data.priority - a.data.priority;
	return b.data.id > a.data.id ? 1 : -1;
}
function getExtensionPrefix(state) {
	let prefix = "+";
	if (state == "disabled") prefix = "-";
	else if (state == "activated") prefix = "*";
	else if (state == "unknown") prefix = "?";
	return prefix;
}
function getExtensionPriority(stat) {
	switch (stat) {
		case "unknown": return 2;
		case "activated": return 1;
		case "disabled": return -1;
		default: return 0;
	}
}
var delay, ExtensionList;
var init_extensions = __esmMin((() => {
	init_esm();
	init_extension();
	init_util$7();
	init_node();
	init_workspace$1();
	init_basic();
	init_formatting$1();
	delay = getConditionValue(50, 0);
	ExtensionList = class extends BasicList {
		manager;
		defaultAction = "toggle";
		description = "manage coc extensions";
		name = "extensions";
		constructor(manager) {
			super();
			this.manager = manager;
			this.addAction("toggle", async (item) => {
				let { id, state } = item.data;
				if (state == "disabled") return;
				if (state == "activated") await this.manager.deactivate(id);
				else await this.manager.activate(id);
				await wait(delay);
			}, {
				persist: true,
				reload: true,
				parallel: true
			});
			this.addAction("configuration", async (item) => {
				let { root } = item.data;
				let jsonFile = path$5.join(root, "package.json");
				if (fs$6.existsSync(jsonFile)) {
					let idx = fs$6.readFileSync(jsonFile, "utf8").split(/\r?\n/).findIndex((s) => s.includes("\"contributes\""));
					await workspace_default.jumpTo(URI.file(jsonFile), {
						line: idx == -1 ? 0 : idx,
						character: 0
					});
				}
			});
			this.addAction("open", async (item) => {
				let { root } = item.data;
				workspace_default.nvim.call("coc#ui#open_url", [root], true);
			});
			this.addAction("disable", async (item) => {
				let { id, state } = item.data;
				if (state !== "disabled") await this.manager.toggleExtension(id);
			}, {
				persist: true,
				reload: true,
				parallel: true
			});
			this.addAction("enable", async (item) => {
				let { id, state } = item.data;
				if (state == "disabled") await this.manager.toggleExtension(id);
			}, {
				persist: true,
				reload: true,
				parallel: true
			});
			this.addAction("lock", async (item) => {
				let { id } = item.data;
				this.manager.states.setLocked(id, true);
			}, {
				persist: true,
				reload: true
			});
			this.addAction("help", async (item) => {
				let { root } = item.data;
				let file = fs$6.readdirSync(root, { encoding: "utf8" }).find((f) => /^readme/i.test(f));
				if (file) await workspace_default.jumpTo(URI.file(path$5.join(root, file)));
			});
			this.addAction("reload", async (item) => {
				let { id } = item.data;
				await this.manager.reloadExtension(id);
			}, {
				persist: true,
				reload: true
			});
			this.addMultipleAction("uninstall", async (items) => {
				let ids = [];
				for (let item of items) {
					if (item.data.isLocal) continue;
					ids.push(item.data.id);
				}
				await this.manager.uninstallExtensions(ids);
			});
		}
		async loadItems() {
			let items = [];
			let list = await extension_default.getExtensionStates();
			for (let stat of list) {
				let prefix = getExtensionPrefix(stat.state);
				let root = fs$6.realpathSync(stat.root);
				let locked = stat.isLocked;
				items.push({
					label: [
						`${prefix} ${stat.id}${locked ? " " : ""}`,
						...stat.isLocal ? ["[RTP]"] : [],
						stat.version,
						root.replace(os$5.homedir(), "~")
					],
					filterText: stat.id,
					data: {
						id: stat.id,
						root,
						state: stat.state,
						isLocal: stat.isLocal,
						priority: getExtensionPriority(stat.state)
					}
				});
			}
			items.sort(sortExtensionItem);
			return formatListItems(this.alignColumns, items);
		}
		doHighlight() {
			let { nvim } = this;
			nvim.pauseNotification();
			nvim.command("syntax match CocExtensionsActivated /\\v^\\*/ contained containedin=CocExtensionsLine", true);
			nvim.command("syntax match CocExtensionsLoaded /\\v^\\+/ contained containedin=CocExtensionsLine", true);
			nvim.command("syntax match CocExtensionsDisabled /\\v^-/ contained containedin=CocExtensionsLine", true);
			nvim.command("syntax match CocExtensionsName /\\v%3c\\S+/ contained containedin=CocExtensionsLine", true);
			nvim.command("syntax match CocExtensionsRoot /\\v\\t[^\\t]*$/ contained containedin=CocExtensionsLine", true);
			nvim.command("syntax match CocExtensionsLocal /\\v\\[RTP\\]/ contained containedin=CocExtensionsLine", true);
			nvim.command("highlight default link CocExtensionsActivated Special", true);
			nvim.command("highlight default link CocExtensionsLoaded Normal", true);
			nvim.command("highlight default link CocExtensionsDisabled Comment", true);
			nvim.command("highlight default link CocExtensionsName String", true);
			nvim.command("highlight default link CocExtensionsLocal MoreMsg", true);
			nvim.command("highlight default link CocExtensionsRoot Comment", true);
			nvim.resumeNotification(false, true);
		}
	};
}));
//#endregion
//#region src/list/source/folders.ts
var FoldList;
var init_folders = __esmMin((() => {
	init_esm();
	init_fs();
	init_window();
	init_workspace$1();
	init_basic();
	FoldList = class extends BasicList {
		defaultAction = "edit";
		description = "list of current workspace folders";
		name = "folders";
		constructor() {
			super();
			this.addAction("edit", async (item) => {
				let newPath = await this.nvim.call("input", [
					"Folder: ",
					item.label,
					"dir"
				]);
				if (!isDirectory(newPath)) {
					window_default.showWarningMessage(`invalid path: ${newPath}`);
					return;
				}
				workspace_default.workspaceFolderControl.renameWorkspaceFolder(item.label, newPath);
			});
			this.addAction("delete", async (item) => {
				workspace_default.workspaceFolderControl.removeWorkspaceFolder(item.label);
			}, {
				reload: true,
				persist: true
			});
			this.addAction("newfile", async (item, context) => {
				let file = await window_default.requestInput("File name", item.label + "/");
				if (!file) return;
				await workspace_default.createFile(file, {
					overwrite: false,
					ignoreIfExists: true
				});
				await this.jumpTo(URI.file(file).toString(), null, context);
			});
		}
		async loadItems() {
			return workspace_default.folderPaths.map((p) => ({ label: p }));
		}
	};
}));
//#endregion
//#region src/list/source/links.ts
var LinksList;
var init_links$1 = __esmMin((() => {
	init_main$2();
	init_languages();
	init_workspace$1();
	init_basic();
	init_formatting$1();
	LinksList = class extends BasicList {
		defaultAction = "open";
		description = "links of current buffer";
		name = "links";
		constructor() {
			super();
			this.addAction("open", async (item) => {
				let { target } = item.data;
				await workspace_default.openResource(target);
			});
			this.addAction("jump", async (item) => {
				let { location } = item.data;
				await workspace_default.jumpTo(location.uri, location.range.start);
			});
		}
		async loadItems(context, token) {
			let buf = await context.window.buffer;
			let doc = workspace_default.getAttachedDocument(buf.id);
			let items = [];
			let links = await languages_default.getDocumentLinks(doc.textDocument, token);
			if (links == null) throw new Error("Links provider not found.");
			for (let link of links) {
				link = link.target ? link : await languages_default.resolveDocumentLink(link, token);
				if (link.target) items.push({
					label: formatUri(link.target, workspace_default.cwd),
					data: {
						target: link.target,
						location: Location.create(doc.uri, link.range)
					}
				});
			}
			return items;
		}
	};
}));
//#endregion
//#region src/list/source/lists.ts
function mruScore(list, key) {
	let idx = list.indexOf(key);
	return idx == -1 ? -1 : list.length - idx;
}
var ListsList;
var init_lists = __esmMin((() => {
	init_mru();
	init_string$1();
	init_basic();
	init_formatting$1();
	ListsList = class extends BasicList {
		listMap;
		name = "lists";
		defaultAction = "open";
		description = "registered lists of coc.nvim";
		mru = new Mru("lists");
		constructor(listMap) {
			super();
			this.listMap = listMap;
			this.addAction("open", async (item) => {
				let { name } = item.data;
				await this.mru.add(name);
				setTimeout(() => {
					this.nvim.command(`CocList ${name}`, true);
				}, 50);
			});
		}
		async loadItems(_context) {
			let items = [];
			let mruList = await this.mru.load();
			for (let list of this.listMap.values()) {
				if (list.name == "lists") continue;
				items.push({
					label: [list.name, toText(list.description)],
					data: {
						name: list.name,
						interactive: list.interactive,
						score: mruScore(mruList, list.name)
					}
				});
			}
			items.sort((a, b) => b.data.score - a.data.score);
			return formatListItems(this.alignColumns, items);
		}
		doHighlight() {
			let { nvim } = this;
			nvim.pauseNotification();
			nvim.command("syntax match CocListsDesc /\\t.*$/ contained containedin=CocListsLine", true);
			nvim.command("highlight default link CocListsDesc Comment", true);
			nvim.resumeNotification(false, true);
		}
	};
}));
//#endregion
//#region src/list/source/notifications.ts
var NotificationsList;
var init_notifications = __esmMin((() => {
	init_window();
	init_basic();
	NotificationsList = class extends BasicList {
		defaultAction = "clear";
		description = "notifications history";
		name = "notifications";
		constructor() {
			super();
			this.addAction("clear", async () => {
				window_default.notifications.clearHistory();
			});
		}
		async loadItems() {
			return window_default.notifications.history.map((item) => {
				return {
					label: `${item.time} ${item.kind.toUpperCase().padEnd(7)} ${item.message}`,
					filterText: item.message
				};
			});
		}
		doHighlight() {
			let { nvim } = this;
			nvim.pauseNotification();
			nvim.command("syntax match CocNotificationTime /\\v^\\s*\\S+/ contained containedin=CocNotificationsLine", true);
			nvim.command("syntax match CocNotificationInfo /\\<INFO\\>/ contained containedin=CocNotificationsLine", true);
			nvim.command("syntax match CocNotificationError /\\<ERROR\\>/ contained containedin=CocNotificationsLine", true);
			nvim.command("syntax match CocNotificationWarning /\\<WARNING\\>/ contained containedin=CocNotificationsLine", true);
			nvim.command("highlight default link CocNotificationTime Comment", true);
			nvim.command("highlight default link CocNotificationInfo CocInfoSign", true);
			nvim.command("highlight default link CocNotificationError CocErrorSign", true);
			nvim.command("highlight default link CocNotificationWarning CocWarningSign", true);
			nvim.resumeNotification(false, true);
		}
	};
}));
//#endregion
//#region src/util/convert.ts
function convertFormatOptions(opts) {
	let obj = {
		tabSize: opts.tabsize,
		insertSpaces: opts.expandtab == 1
	};
	if (opts.insertFinalNewline) obj.insertFinalNewline = true;
	if (opts.trimTrailingWhitespace) obj.trimTrailingWhitespace = true;
	if (opts.trimFinalNewlines) obj.trimFinalNewlines = true;
	return obj;
}
function getSymbolKind(kind) {
	switch (kind) {
		case SymbolKind.File: return "File";
		case SymbolKind.Module: return "Module";
		case SymbolKind.Namespace: return "Namespace";
		case SymbolKind.Package: return "Package";
		case SymbolKind.Class: return "Class";
		case SymbolKind.Method: return "Method";
		case SymbolKind.Property: return "Property";
		case SymbolKind.Field: return "Field";
		case SymbolKind.Constructor: return "Constructor";
		case SymbolKind.Enum: return "Enum";
		case SymbolKind.Interface: return "Interface";
		case SymbolKind.Function: return "Function";
		case SymbolKind.Variable: return "Variable";
		case SymbolKind.Constant: return "Constant";
		case SymbolKind.String: return "String";
		case SymbolKind.Number: return "Number";
		case SymbolKind.Boolean: return "Boolean";
		case SymbolKind.Array: return "Array";
		case SymbolKind.Object: return "Object";
		case SymbolKind.Key: return "Key";
		case SymbolKind.Null: return "Null";
		case SymbolKind.EnumMember: return "EnumMember";
		case SymbolKind.Struct: return "Struct";
		case SymbolKind.Event: return "Event";
		case SymbolKind.Operator: return "Operator";
		case SymbolKind.TypeParameter: return "TypeParameter";
		default: return "Unknown";
	}
}
var init_convert = __esmMin((() => {
	init_main$2();
}));
//#endregion
//#region src/list/source/outline.ts
function symbolsToListItems(symbols, uri, filterKind) {
	let items = [];
	const addSymbols = (symbols, level = 0) => {
		symbols.sort((a, b) => {
			return compareRangesUsingStarts(a.selectionRange, b.selectionRange);
		});
		for (let s of symbols) {
			let kind = getSymbolKind(s.kind);
			let location = Location.create(uri, s.selectionRange);
			items.push({
				label: [
					`${"| ".repeat(level)}${s.name}`,
					`[${kind}]`,
					`${s.range.start.line + 1}`
				],
				filterText: getFilterText(s, filterKind),
				location,
				data: { kind }
			});
			if (!isFalsyOrEmpty(s.children)) addSymbols(s.children, level + 1);
		}
	};
	addSymbols(symbols);
	if (filterKind) items = items.filter((o) => o.data.kind.toLowerCase().indexOf(filterKind) == 0);
	return items;
}
function getFilterText(s, kind) {
	if (typeof kind === "string" && kind.length > 0) return s.name;
	return `${s.name}${getSymbolKind(s.kind)}`;
}
async function loadCtagsSymbols(document, nvim, token) {
	if (!which.sync("ctags", { nothrow: true })) return [];
	let uri = URI.parse(document.uri);
	let extname = path$5.extname(uri.fsPath);
	let content = "";
	let tempname = await nvim.call("tempname");
	let filepath = `${tempname}.${extname}`;
	let cwd = path$5.dirname(tempname);
	let escaped = await nvim.call("fnameescape", filepath);
	await writeFile(escaped, document.getDocumentContent());
	try {
		content = await runCommand(`ctags -f - --excmd=number --language-force=${document.filetype} ${escaped}`, { cwd }, token);
	} catch (e) {}
	if (!content.trim().length) content = await runCommand(`ctags -f - --excmd=number ${escaped}`, { cwd }, token);
	content = content.trim();
	if (!content) return [];
	return contentToItems(content, document);
}
function contentToItems(content, document) {
	let lines = content.split(/\r?\n/);
	let items = [];
	for (let line of lines) {
		let parts = line.split("	");
		if (parts.length < 4) continue;
		let lnum = Number(parts[2].replace(/;"$/, ""));
		let idx = document.getline(lnum - 1).indexOf(parts[0]);
		let start = idx == -1 ? 0 : idx;
		let range = Range.create(lnum - 1, start, lnum - 1, start + parts[0].length);
		items.push({
			label: `${parts[0]} [${parts[3]}] ${lnum}`,
			filterText: parts[0],
			location: Location.create(document.uri, range),
			data: { line: lnum }
		});
	}
	items.sort((a, b) => a.data.line - b.data.line);
	return items;
}
var Outline;
var init_outline$1 = __esmMin((() => {
	init_main$2();
	init_esm();
	init_languages();
	init_array();
	init_convert();
	init_fs();
	init_node();
	init_position();
	init_processes();
	init_workspace$1();
	init_formatting$1();
	init_location();
	Outline = class extends LocationList {
		description = "symbols of current document";
		name = "outline";
		options = [{
			name: "-k, -kind KIND",
			hasValue: true,
			description: "filter symbol by kind"
		}];
		async loadItems(context, token) {
			let document = workspace_default.getAttachedDocument(context.buffer.id);
			let ctagsFiletypes = this.getConfig().get("ctagsFiletypes", []);
			let symbols;
			let args = this.parseArguments(context.args);
			let filterKind = args.kind ? args.kind.toString().toLowerCase() : null;
			if (!ctagsFiletypes.includes(document.filetype)) symbols = await languages_default.getDocumentSymbol(document.textDocument, token);
			if (token.isCancellationRequested) return [];
			if (!symbols) return await loadCtagsSymbols(document, this.nvim, token);
			if (isFalsyOrEmpty(symbols)) return [];
			let items = symbolsToListItems(symbols, document.uri, filterKind);
			return formatListItems(this.alignColumns, items);
		}
		doHighlight() {
			let { nvim } = this;
			nvim.pauseNotification();
			nvim.command("syntax match CocOutlineName /\\v\\s?[^\\t]+\\s/ contained containedin=CocOutlineLine", true);
			nvim.command("syntax match CocOutlineIndentLine /\\v\\|/ contained containedin=CocOutlineLine,CocOutlineName", true);
			nvim.command("syntax match CocOutlineKind /\\[\\w\\+\\]/ contained containedin=CocOutlineLine", true);
			nvim.command("syntax match CocOutlineLine /\\d\\+$/ contained containedin=CocOutlineLine", true);
			nvim.command("highlight default link CocOutlineName Normal", true);
			nvim.command("highlight default link CocOutlineIndentLine Comment", true);
			nvim.command("highlight default link CocOutlineKind Typedef", true);
			nvim.command("highlight default link CocOutlineLine Comment", true);
			nvim.resumeNotification(false, true);
		}
	};
}));
//#endregion
//#region src/language-client/utils/uuid.ts
function generateUuid() {
	return v4();
}
var init_uuid = __esmMin((() => {
	init_dist_node();
}));
//#endregion
//#region src/language-client/features.ts
function ensure(target, key) {
	if (target[key] === void 0) target[key] = {};
	return target[key];
}
var LSPCancellationError, BaseFeature, StaticFeature, DynamicFeature, DynamicDocumentFeature, TextDocumentEventFeature, TextDocumentLanguageFeature;
var init_features = __esmMin((() => {
	init_errors();
	init_is();
	init_protocol();
	init_workspace$1();
	init_uuid();
	init_util$7();
	LSPCancellationError = class extends CancellationError {
		data;
		constructor(data) {
			super();
			this.data = data;
		}
	};
	BaseFeature = class {
		_client;
		constructor(client) {
			this._client = client;
		}
		sendRequest(type, params, token, defaultValue) {
			return this._client.sendRequest(type, params, token).then(((res) => {
				return token.isCancellationRequested || res == null ? defaultValue ?? null : res;
			}), (error) => {
				return this._client.handleFailedRequest(type, token, error, defaultValue ?? null);
			});
		}
	};
	(function(_StaticFeature) {
		function is(value) {
			return value !== void 0 && value !== null && func(value.fillClientCapabilities) && func(value.initialize) && func(value.dispose) && (value.fillInitializeParams === void 0 || func(value.fillInitializeParams)) && value.registrationType === void 0;
		}
		_StaticFeature.is = is;
	})(StaticFeature || (StaticFeature = {}));
	(function(_DynamicFeature) {
		function is(value) {
			const candidate = value;
			return candidate !== void 0 && candidate !== null && func(candidate.fillClientCapabilities) && func(candidate.initialize) && func(candidate.dispose) && (candidate.fillInitializeParams === void 0 || func(candidate.fillInitializeParams)) && func(candidate.register) && func(candidate.unregister) && candidate.registrationType !== void 0;
		}
		_DynamicFeature.is = is;
	})(DynamicFeature || (DynamicFeature = {}));
	DynamicDocumentFeature = class extends BaseFeature {
		constructor(client) {
			super(client);
		}
		/**
		* Returns the state the feature is in.
		*/
		getState() {
			const selectors = this.getDocumentSelectors();
			let count = 0;
			for (const selector of selectors) {
				count++;
				for (const document of workspace_default.textDocuments) if (workspace_default.match(selector, document) > 0) return {
					kind: "document",
					id: this.registrationType.method,
					registrations: true,
					matches: true
				};
			}
			const registrations = count > 0;
			return {
				kind: "document",
				id: this.registrationType.method,
				registrations,
				matches: false
			};
		}
		sendWithMiddleware(fn, key, ...params) {
			const middleware = this._client.middleware;
			return middleware[key] ? middleware[key](...params, fn) : fn(...params);
		}
	};
	TextDocumentEventFeature = class extends DynamicDocumentFeature {
		_event;
		_type;
		_middleware;
		_createParams;
		_selectorFilter;
		_listener;
		_selectors;
		_onNotificationSent;
		static textDocumentFilter(selectors, textDocument) {
			for (const selector of selectors) if (workspace_default.match(selector, textDocument) > 0) return true;
			return false;
		}
		constructor(client, event, type, middleware, createParams, selectorFilter) {
			super(client);
			this._event = event;
			this._type = type;
			this._middleware = middleware;
			this._createParams = createParams;
			this._selectorFilter = selectorFilter;
			this._selectors = /* @__PURE__ */ new Map();
			this._onNotificationSent = new import_main$1.Emitter();
		}
		getDocumentSelectors() {
			return this._selectors.values();
		}
		register(data) {
			if (!data.registerOptions.documentSelector) return;
			if (!this._listener) this._listener = this._event((data) => {
				this.callback(data).catch((error) => {
					this._client.error(`Sending document notification ${this._type.method} failed.`, error);
				});
			});
			this._selectors.set(data.id, data.registerOptions.documentSelector);
		}
		async callback(data) {
			if (!this.matches(data)) return;
			return await this.sendNotification(data);
		}
		async sendNotification(data) {
			const doSend = async (data) => {
				const params = this._createParams(data);
				await this._client.sendNotification(this._type, params);
				this.notificationSent(data, this._type, params);
			};
			return this.sendWithMiddleware(doSend, this._middleware, data);
		}
		matches(data) {
			return !this._selectorFilter || this._selectorFilter(this._selectors.values(), data);
		}
		get onNotificationSent() {
			return this._onNotificationSent.event;
		}
		notificationSent(data, type, params) {
			this._onNotificationSent.fire({
				original: data,
				type,
				params
			});
		}
		unregister(id) {
			this._selectors.delete(id);
		}
		dispose() {
			this._selectors.clear();
			this._onNotificationSent.dispose();
			this._onNotificationSent = new import_main$1.Emitter();
			if (this._listener) {
				this._listener.dispose();
				this._listener = void 0;
			}
		}
		getProvider(document) {
			for (const selector of this.getDocumentSelectors()) if (workspace_default.match(selector, document) > 0) return { send: (data) => {
				return this.callback(data);
			} };
		}
	};
	TextDocumentLanguageFeature = class extends DynamicDocumentFeature {
		_registrationType;
		_registrations;
		constructor(client, registrationType) {
			super(client);
			this._registrationType = registrationType;
			this._registrations = /* @__PURE__ */ new Map();
		}
		*getDocumentSelectors() {
			for (const registration of this._registrations.values()) {
				const selector = registration.data.registerOptions.documentSelector;
				if (selector != null) yield selector;
			}
		}
		get registrationType() {
			return this._registrationType;
		}
		get registrationLength() {
			return this._registrations.size;
		}
		register(data) {
			if (!data.registerOptions.documentSelector) return;
			let registration = this.registerLanguageProvider(data.registerOptions, data.id);
			this._registrations.set(data.id, {
				disposable: registration[0],
				data,
				provider: registration[1]
			});
		}
		unregister(id) {
			let registration = this._registrations.get(id);
			if (registration !== void 0) {
				this._registrations.delete(id);
				registration.disposable.dispose();
			}
		}
		dispose() {
			this._registrations.forEach((value) => {
				value.disposable.dispose();
			});
			this._registrations.clear();
		}
		getRegistration(documentSelector, capability) {
			if (!capability) return [void 0, void 0];
			else if (import_main$1.TextDocumentRegistrationOptions.is(capability)) {
				const id = import_main$1.StaticRegistrationOptions.hasId(capability) ? capability.id : generateUuid();
				const selector = defaultValue(capability.documentSelector, documentSelector);
				return [id, Object.assign({}, capability, { documentSelector: selector })];
			} else if (boolean(capability) && capability === true || import_main$1.WorkDoneProgressOptions.is(capability)) {
				const options = capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector });
				return [generateUuid(), options];
			}
			return [void 0, void 0];
		}
		getRegistrationOptions(documentSelector, capability) {
			if (!documentSelector || !capability) return;
			return boolean(capability) && capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector });
		}
		getProvider(textDocument) {
			for (const registration of this._registrations.values()) {
				let selector = registration.data.registerOptions.documentSelector;
				if (selector !== null && workspace_default.match(selector, textDocument) > 0) return registration.provider;
			}
		}
		getAllProviders() {
			const result = [];
			for (const item of this._registrations.values()) result.push(item.provider);
			return result;
		}
	};
}));
//#endregion
//#region src/language-client/callHierarchy.ts
var CallHierarchyFeature;
var init_callHierarchy$1 = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	CallHierarchyFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.CallHierarchyPrepareRequest.type);
		}
		fillClientCapabilities(cap) {
			const capability = ensure(ensure(cap, "textDocument"), "callHierarchy");
			capability.dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			const [id, options] = this.getRegistration(documentSelector, capabilities.callHierarchyProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = {
				prepareCallHierarchy: (document, position, token) => {
					const client = this._client;
					const prepareCallHierarchy = (document, position, token) => {
						const params = client.code2ProtocolConverter.asTextDocumentPositionParams(document, position);
						return this.sendRequest(import_main$1.CallHierarchyPrepareRequest.type, params, token);
					};
					const middleware = client.middleware;
					return middleware.prepareCallHierarchy ? middleware.prepareCallHierarchy(document, position, token, prepareCallHierarchy) : prepareCallHierarchy(document, position, token);
				},
				provideCallHierarchyIncomingCalls: (item, token) => {
					const client = this._client;
					const provideCallHierarchyIncomingCalls = (item, token) => {
						return this.sendRequest(import_main$1.CallHierarchyIncomingCallsRequest.type, { item }, token);
					};
					const middleware = client.middleware;
					return middleware.provideCallHierarchyIncomingCalls ? middleware.provideCallHierarchyIncomingCalls(item, token, provideCallHierarchyIncomingCalls) : provideCallHierarchyIncomingCalls(item, token);
				},
				provideCallHierarchyOutgoingCalls: (item, token) => {
					const client = this._client;
					const provideCallHierarchyOutgoingCalls = (item, token) => {
						return this.sendRequest(import_main$1.CallHierarchyOutgoingCallsRequest.type, { item }, token);
					};
					const middleware = client.middleware;
					return middleware.provideCallHierarchyOutgoingCalls ? middleware.provideCallHierarchyOutgoingCalls(item, token, provideCallHierarchyOutgoingCalls) : provideCallHierarchyOutgoingCalls(item, token);
				}
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerCallHierarchyProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/codeAction.ts
var CodeActionFeature;
var init_codeAction = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	CodeActionFeature = class extends TextDocumentLanguageFeature {
		disposables = [];
		constructor(client) {
			super(client, import_main$1.CodeActionRequest.type);
		}
		fillClientCapabilities(capabilities) {
			const cap = ensure(ensure(capabilities, "textDocument"), "codeAction");
			cap.dynamicRegistration = true;
			cap.isPreferredSupport = true;
			cap.disabledSupport = true;
			cap.dataSupport = true;
			cap.honorsChangeAnnotations = false;
			cap.resolveSupport = { properties: ["edit"] };
			cap.codeActionLiteralSupport = { codeActionKind: { valueSet: [
				CodeActionKind.Empty,
				CodeActionKind.QuickFix,
				CodeActionKind.Refactor,
				CodeActionKind.RefactorExtract,
				CodeActionKind.RefactorInline,
				CodeActionKind.RefactorRewrite,
				CodeActionKind.Source,
				CodeActionKind.SourceOrganizeImports
			] } };
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.codeActionProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const registerCommand = (id) => {
				const client = this._client;
				const executeCommand = (command, args) => {
					const params = {
						command,
						arguments: args
					};
					return client.sendRequest(import_main$1.ExecuteCommandRequest.type, params);
				};
				this.disposables.push(commands_default.registerCommand(id, (...args) => {
					return this.sendWithMiddleware(executeCommand, "executeCommand", id, args);
				}, null, true));
			};
			const provider = {
				provideCodeActions: (document, range, context, token) => {
					const client = this._client;
					const _provideCodeActions = (document, range, context, token) => {
						const params = {
							textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
							range,
							context
						};
						return this.sendRequest(import_main$1.CodeActionRequest.type, params, token).then((values) => {
							if (!values) return void 0;
							values.forEach((val) => {
								let cmd = Command.is(val) ? val.command : val.command?.command;
								if (cmd && !commands_default.has(cmd)) registerCommand(cmd);
							});
							return values;
						});
					};
					const middleware = client.middleware;
					return middleware.provideCodeActions ? middleware.provideCodeActions(document, range, context, token, _provideCodeActions) : _provideCodeActions(document, range, context, token);
				},
				resolveCodeAction: options.resolveProvider ? (item, token) => {
					const middleware = this._client.middleware;
					const resolveCodeAction = (item, token) => {
						return this.sendRequest(import_main$1.CodeActionResolveRequest.type, item, token, item);
					};
					return middleware.resolveCodeAction ? middleware.resolveCodeAction(item, token, resolveCodeAction) : resolveCodeAction(item, token);
				} : void 0
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerCodeActionProvider(options.documentSelector, provider, this._client.id, options.codeActionKinds), provider];
		}
		dispose() {
			this.disposables.forEach((o) => {
				o.dispose();
			});
			this.disposables = [];
			super.dispose();
		}
	};
}));
//#endregion
//#region src/language-client/codeLens.ts
var CodeLensFeature;
var init_codeLens = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	CodeLensFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.CodeLensRequest.type);
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "codeLens").dynamicRegistration = true;
			ensure(ensure(capabilities, "workspace"), "codeLens").refreshSupport = true;
		}
		initialize(capabilities, documentSelector) {
			this._client.onRequest(import_main$1.CodeLensRefreshRequest.type, async () => {
				for (const provider of this.getAllProviders()) provider.onDidChangeCodeLensEmitter.fire();
			});
			const options = this.getRegistrationOptions(documentSelector, capabilities.codeLensProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const emitter = new import_main$1.Emitter();
			const provider = {
				onDidChangeCodeLenses: emitter.event,
				provideCodeLenses: (document, token) => {
					const client = this._client;
					const provideCodeLenses = (document, token) => {
						return this.sendRequest(import_main$1.CodeLensRequest.type, client.code2ProtocolConverter.asCodeLensParams(document), token);
					};
					const middleware = client.middleware;
					return middleware.provideCodeLenses ? middleware.provideCodeLenses(document, token, provideCodeLenses) : provideCodeLenses(document, token);
				},
				resolveCodeLens: options.resolveProvider ? (codeLens, token) => {
					const client = this._client;
					const resolveCodeLens = (codeLens, token) => {
						return this.sendRequest(import_main$1.CodeLensResolveRequest.type, codeLens, token, codeLens);
					};
					const middleware = client.middleware;
					return middleware.resolveCodeLens ? middleware.resolveCodeLens(codeLens, token, resolveCodeLens) : resolveCodeLens(codeLens, token);
				} : void 0
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerCodeLensProvider(options.documentSelector, provider), {
				provider,
				onDidChangeCodeLensEmitter: emitter
			}];
		}
	};
}));
//#endregion
//#region src/language-client/colorProvider.ts
var ColorProviderFeature;
var init_colorProvider = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	ColorProviderFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DocumentColorRequest.type);
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "colorProvider").dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			let [id, options] = this.getRegistration(documentSelector, capabilities.colorProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = {
				provideColorPresentations: (color, context, token) => {
					const client = this._client;
					const provideColorPresentations = (color, context, token) => {
						const requestParams = {
							color,
							textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(context.document),
							range: context.range
						};
						return this.sendRequest(import_main$1.ColorPresentationRequest.type, requestParams, token);
					};
					const middleware = client.middleware;
					return middleware.provideColorPresentations ? middleware.provideColorPresentations(color, context, token, provideColorPresentations) : provideColorPresentations(color, context, token);
				},
				provideDocumentColors: (document, token) => {
					const client = this._client;
					const provideDocumentColors = (document, token) => {
						const requestParams = { textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document) };
						return this.sendRequest(import_main$1.DocumentColorRequest.type, requestParams, token);
					};
					const middleware = client.middleware;
					return middleware.provideDocumentColors ? middleware.provideDocumentColors(document, token, provideDocumentColors) : provideDocumentColors(document, token);
				}
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerDocumentColorProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/completion.ts
var SupportedCompletionItemKinds, CompletionItemFeature;
var init_completion$1 = __esmMin((() => {
	init_main$2();
	init_languages();
	init_protocol();
	init_workspace$1();
	init_features();
	init_uuid();
	SupportedCompletionItemKinds = [
		CompletionItemKind.Text,
		CompletionItemKind.Method,
		CompletionItemKind.Function,
		CompletionItemKind.Constructor,
		CompletionItemKind.Field,
		CompletionItemKind.Variable,
		CompletionItemKind.Class,
		CompletionItemKind.Interface,
		CompletionItemKind.Module,
		CompletionItemKind.Property,
		CompletionItemKind.Unit,
		CompletionItemKind.Value,
		CompletionItemKind.Enum,
		CompletionItemKind.Keyword,
		CompletionItemKind.Snippet,
		CompletionItemKind.Color,
		CompletionItemKind.File,
		CompletionItemKind.Reference,
		CompletionItemKind.Folder,
		CompletionItemKind.EnumMember,
		CompletionItemKind.Constant,
		CompletionItemKind.Struct,
		CompletionItemKind.Event,
		CompletionItemKind.Operator,
		CompletionItemKind.TypeParameter
	];
	CompletionItemFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.CompletionRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let snippetSupport = this._client.clientOptions.disableSnippetCompletion !== true && workspace_default.getConfiguration("suggest").get("snippetsSupport", true);
			let completion = ensure(ensure(capabilities, "textDocument"), "completion");
			completion.dynamicRegistration = true;
			completion.contextSupport = true;
			completion.completionItem = {
				snippetSupport,
				commitCharactersSupport: true,
				documentationFormat: this._client.supportedMarkupKind,
				deprecatedSupport: true,
				preselectSupport: true,
				insertReplaceSupport: true,
				tagSupport: { valueSet: [CompletionItemTag.Deprecated] },
				resolveSupport: { properties: [
					"documentation",
					"detail",
					"additionalTextEdits"
				] },
				labelDetailsSupport: true,
				insertTextModeSupport: { valueSet: [InsertTextMode.asIs, InsertTextMode.adjustIndentation] }
			};
			completion.completionItemKind = { valueSet: SupportedCompletionItemKinds };
			completion.insertTextMode = InsertTextMode.adjustIndentation;
			completion.completionList = { itemDefaults: [
				"commitCharacters",
				"editRange",
				"insertTextFormat",
				"insertTextMode"
			] };
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.completionProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options, id) {
			let triggerCharacters = options.triggerCharacters || [];
			let allCommitCharacters = options.allCommitCharacters || [];
			const provider = {
				provideCompletionItems: (document, position, token, context) => {
					const middleware = this._client.middleware;
					const provideCompletionItems = (document, position, context, token) => {
						return this.sendRequest(import_main$1.CompletionRequest.type, this._client.code2ProtocolConverter.asCompletionParams(document, position, context), token, []);
					};
					return middleware.provideCompletionItem ? middleware.provideCompletionItem(document, position, context, token, provideCompletionItems) : provideCompletionItems(document, position, context, token);
				},
				resolveCompletionItem: options.resolveProvider ? (item, token) => {
					const middleware = this._client.middleware;
					const resolveCompletionItem = (item, token) => {
						return this.sendRequest(import_main$1.CompletionResolveRequest.type, item, token, item);
					};
					return middleware.resolveCompletionItem ? middleware.resolveCompletionItem(item, token, resolveCompletionItem) : resolveCompletionItem(item, token);
				} : void 0
			};
			this._client.attachExtensionName(provider);
			let name = this._client.id + (this.registrationLength == 0 ? "" : "-" + id);
			return [languages_default.registerCompletionItemProvider(name, "LS", options.documentSelector, provider, triggerCharacters, options.priority, allCommitCharacters), provider];
		}
	};
}));
//#endregion
//#region src/language-client/configuration.ts
var PullConfigurationFeature, SyncConfigurationFeature;
var init_configuration = __esmMin((() => {
	init_util$6();
	init_util$7();
	init_is();
	init_protocol();
	init_workspace$1();
	init_features();
	init_uuid();
	PullConfigurationFeature = class {
		_client;
		constructor(_client) {
			this._client = _client;
		}
		get method() {
			return import_main$1.ConfigurationRequest.method;
		}
		fillClientCapabilities(capabilities) {
			ensure(capabilities, "workspace").configuration = true;
		}
		getState() {
			return { kind: "static" };
		}
		initialize() {
			let client = this._client;
			let { configuredSection } = client;
			client.onRequest(import_main$1.ConfigurationRequest.type, (params, token) => {
				let configuration = (params) => {
					let result = [];
					for (let item of params.items) {
						let section = configuredSection ? configuredSection + (item.section ? `.${item.section}` : "") : item.section;
						result.push(this.getConfiguration(item.scopeUri, section));
					}
					return result;
				};
				let middleware = client.middleware.workspace;
				return middleware?.configuration ? middleware.configuration(params, token, configuration) : configuration(params, token);
			});
		}
		getConfiguration(resource, section) {
			let result = null;
			if (section) {
				let index = section.lastIndexOf(".");
				if (index === -1) result = toJSONObject(workspace_default.getConfiguration(void 0, resource).get(section));
				else result = toJSONObject(mergeConfigProperties(workspace_default.getConfiguration(section.substring(0, index), resource)))[section.substring(index + 1)];
			} else {
				let config = workspace_default.getConfiguration(section, resource);
				result = {};
				for (let key of Object.keys(config)) if (config.has(key)) result[key] = toJSONObject(config.get(key));
			}
			return result ?? null;
		}
		dispose() {}
	};
	SyncConfigurationFeature = class SyncConfigurationFeature {
		_client;
		_listeners = /* @__PURE__ */ new Map();
		configuredUID;
		constructor(_client) {
			this._client = _client;
		}
		getState() {
			return {
				kind: "workspace",
				id: this.registrationType.method,
				registrations: this._listeners.size > 0
			};
		}
		get registrationType() {
			return import_main$1.DidChangeConfigurationNotification.type;
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "workspace"), "didChangeConfiguration").dynamicRegistration = true;
		}
		initialize() {
			let section = defaultValue(this._client.clientOptions.synchronize, {}).configurationSection;
			if (section !== void 0) {
				let id = this.configuredUID = generateUuid();
				this.register({
					id,
					registerOptions: { section }
				});
			}
		}
		register(data) {
			if (this._client.configuredSection && data.id !== this.configuredUID) return;
			let { section } = data.registerOptions;
			let disposable = workspace_default.onDidChangeConfiguration((event) => {
				this.onDidChangeConfiguration(section, event);
			});
			this._listeners.set(data.id, disposable);
			if (section !== void 0) this.onDidChangeConfiguration(section, void 0);
		}
		unregister(id) {
			let disposable = this._listeners.get(id);
			if (disposable) {
				this._listeners.delete(id);
				disposable.dispose();
			}
		}
		dispose() {
			for (let disposable of this._listeners.values()) disposable.dispose();
			this._listeners.clear();
		}
		onDidChangeConfiguration(configurationSection, event) {
			let { configuredSection } = this._client;
			let sections;
			if (string(configurationSection)) sections = [configurationSection];
			else sections = configurationSection;
			if (sections != null && event != null) {
				if (!sections.map((s) => s.startsWith("languageserver.") ? "languageserver" : s).some((section) => event.affectsConfiguration(section))) return;
			}
			let didChangeConfiguration = (sections) => {
				if (sections == null) return this._client.sendNotification(import_main$1.DidChangeConfigurationNotification.type, { settings: null });
				let workspaceFolder = this._client.clientOptions.workspaceFolder;
				let settings = configuredSection ? SyncConfigurationFeature.getConfiguredSettings(configuredSection, workspaceFolder) : SyncConfigurationFeature.extractSettingsInformation(sections, workspaceFolder);
				return this._client.sendNotification(import_main$1.DidChangeConfigurationNotification.type, { settings });
			};
			let middleware = this._client.middleware.workspace?.didChangeConfiguration;
			(middleware ? Promise.resolve(middleware(sections, didChangeConfiguration)) : didChangeConfiguration(sections)).catch((error) => {
				this._client.error(`Sending notification ${import_main$1.DidChangeConfigurationNotification.type.method} failed`, error);
			});
		}
		static getConfiguredSettings(key, workspaceFolder) {
			return mergeConfigProperties(toJSONObject(workspace_default.getConfiguration(key.slice(0, -9), workspaceFolder).get("settings", {})));
		}
		static extractSettingsInformation(keys, workspaceFolder) {
			function ensurePath(config, path) {
				let current = config;
				for (let i = 0; i < path.length - 1; i++) {
					let obj = current[path[i]];
					if (!obj) {
						obj = Object.create(null);
						current[path[i]] = obj;
					}
					current = obj;
				}
				return current;
			}
			let result = Object.create(null);
			for (let i = 0; i < keys.length; i++) {
				let key = keys[i];
				let index = key.indexOf(".");
				let config;
				if (index >= 0) config = workspace_default.getConfiguration(key.substring(0, index), workspaceFolder).get(key.substring(index + 1));
				else config = workspace_default.getConfiguration(key, workspaceFolder);
				let path = keys[i].split(".");
				ensurePath(result, path)[path[path.length - 1]] = config;
			}
			return result;
		}
	};
}));
//#endregion
//#region src/language-client/declaration.ts
var DeclarationFeature;
var init_declaration = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	DeclarationFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DeclarationRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let declarationSupport = ensure(ensure(capabilities, "textDocument"), "declaration");
			declarationSupport.dynamicRegistration = true;
			declarationSupport.linkSupport = true;
		}
		initialize(capabilities, documentSelector) {
			const [id, options] = this.getRegistration(documentSelector, capabilities.declarationProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideDeclaration: (document, position, token) => {
				const client = this._client;
				const provideDeclaration = (document, position, token) => this.sendRequest(import_main$1.DeclarationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token);
				const middleware = client.middleware;
				return middleware.provideDeclaration ? middleware.provideDeclaration(document, position, token, provideDeclaration) : provideDeclaration(document, position, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerDeclarationProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/definition.ts
var DefinitionFeature;
var init_definition = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	DefinitionFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DefinitionRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let definitionSupport = ensure(ensure(capabilities, "textDocument"), "definition");
			definitionSupport.dynamicRegistration = true;
			definitionSupport.linkSupport = true;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.definitionProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideDefinition: (document, position, token) => {
				const client = this._client;
				const provideDefinition = (document, position, token) => {
					return this.sendRequest(import_main$1.DefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token);
				};
				const middleware = client.middleware;
				return middleware.provideDefinition ? middleware.provideDefinition(document, position, token, provideDefinition) : provideDefinition(document, position, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerDefinitionProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/util/map.ts
var Touch, LinkedMap, LRUCache;
var init_map = __esmMin((() => {
	(function(_Touch) {
		_Touch.None = 0;
		_Touch.AsOld = _Touch.First = 1;
		_Touch.AsNew = _Touch.Last = 2;
	})(Touch || (Touch = {}));
	LinkedMap = class {
		[Symbol.toStringTag] = "LinkedMap";
		_map;
		_head;
		_tail;
		_size;
		_state;
		constructor() {
			this._map = /* @__PURE__ */ new Map();
			this._head = void 0;
			this._tail = void 0;
			this._size = 0;
			this._state = 0;
		}
		clear() {
			this._map.clear();
			this._head = void 0;
			this._tail = void 0;
			this._size = 0;
			this._state++;
		}
		isEmpty() {
			return !this._head && !this._tail;
		}
		get size() {
			return this._size;
		}
		get first() {
			return this._head?.value;
		}
		get last() {
			return this._tail?.value;
		}
		before(key) {
			const item = this._map.get(key);
			return item ? item.previous?.value : void 0;
		}
		after(key) {
			const item = this._map.get(key);
			return item ? item.next?.value : void 0;
		}
		has(key) {
			return this._map.has(key);
		}
		get(key, touch = Touch.None) {
			const item = this._map.get(key);
			if (!item) return;
			if (touch !== Touch.None) this.touch(item, touch);
			return item.value;
		}
		set(key, value, touch = Touch.None) {
			let item = this._map.get(key);
			if (item) {
				item.value = value;
				if (touch !== Touch.None) this.touch(item, touch);
			} else {
				item = {
					key,
					value,
					next: void 0,
					previous: void 0
				};
				switch (touch) {
					case Touch.None:
						this.addItemLast(item);
						break;
					case Touch.First:
						this.addItemFirst(item);
						break;
					case Touch.Last:
						this.addItemLast(item);
						break;
					default:
						this.addItemLast(item);
						break;
				}
				this._map.set(key, item);
				this._size++;
			}
			return this;
		}
		delete(key) {
			return !!this.remove(key);
		}
		remove(key) {
			const item = this._map.get(key);
			if (!item) return;
			this._map.delete(key);
			this.removeItem(item);
			this._size--;
			return item.value;
		}
		shift() {
			if (!this._head && !this._tail) return;
			const item = this._head;
			this._map.delete(item.key);
			this.removeItem(item);
			this._size--;
			return item.value;
		}
		forEach(callbackfn, thisArg) {
			const state = this._state;
			let current = this._head;
			while (current) {
				if (thisArg) callbackfn.bind(thisArg)(current.value, current.key, this);
				else callbackfn(current.value, current.key, this);
				if (this._state !== state) throw new Error(`LinkedMap got modified during iteration.`);
				current = current.next;
			}
		}
		keys() {
			const state = this._state;
			let current = this._head;
			const iterator = {
				[Symbol.iterator]: () => {
					return iterator;
				},
				[Symbol.dispose]: () => {},
				next: () => {
					if (this._state !== state) throw new Error(`LinkedMap got modified during iteration.`);
					if (current) {
						const result = {
							value: current.key,
							done: false
						};
						current = current.next;
						return result;
					} else return {
						value: void 0,
						done: true
					};
				}
			};
			return iterator;
		}
		values() {
			const state = this._state;
			let current = this._head;
			const iterator = {
				[Symbol.iterator]: () => {
					return iterator;
				},
				[Symbol.dispose]: () => {},
				next: () => {
					if (this._state !== state) throw new Error(`LinkedMap got modified during iteration.`);
					if (current) {
						const result = {
							value: current.value,
							done: false
						};
						current = current.next;
						return result;
					} else return {
						value: void 0,
						done: true
					};
				}
			};
			return iterator;
		}
		entries() {
			const state = this._state;
			let current = this._head;
			const iterator = {
				[Symbol.iterator]: () => {
					return iterator;
				},
				[Symbol.dispose]: () => {},
				next: () => {
					if (this._state !== state) throw new Error(`LinkedMap got modified during iteration.`);
					if (current) {
						const result = {
							value: [current.key, current.value],
							done: false
						};
						current = current.next;
						return result;
					} else return {
						value: void 0,
						done: true
					};
				}
			};
			return iterator;
		}
		[Symbol.iterator]() {
			return this.entries();
		}
		trimOld(newSize) {
			if (newSize >= this.size) return;
			if (newSize === 0) {
				this.clear();
				return;
			}
			let current = this._head;
			let currentSize = this.size;
			while (current && currentSize > newSize) {
				this._map.delete(current.key);
				current = current.next;
				currentSize--;
			}
			this._head = current;
			this._size = currentSize;
			if (current) current.previous = void 0;
			this._state++;
		}
		addItemFirst(item) {
			if (!this._head && !this._tail) this._tail = item;
			else {
				item.next = this._head;
				this._head.previous = item;
			}
			this._head = item;
			this._state++;
		}
		addItemLast(item) {
			if (!this._head && !this._tail) this._head = item;
			else {
				item.previous = this._tail;
				this._tail.next = item;
			}
			this._tail = item;
			this._state++;
		}
		removeItem(item) {
			if (item === this._head && item === this._tail) {
				this._head = void 0;
				this._tail = void 0;
			} else if (item === this._head) {
				item.next.previous = void 0;
				this._head = item.next;
			} else if (item === this._tail) {
				item.previous.next = void 0;
				this._tail = item.previous;
			} else {
				const next = item.next;
				const previous = item.previous;
				next.previous = previous;
				previous.next = next;
			}
			item.next = void 0;
			item.previous = void 0;
			this._state++;
		}
		touch(item, touch) {
			if (touch !== Touch.First && touch !== Touch.Last) return;
			if (touch === Touch.First) {
				if (item === this._head) return;
				const next = item.next;
				const previous = item.previous;
				if (item === this._tail) {
					previous.next = void 0;
					this._tail = previous;
				} else {
					next.previous = previous;
					previous.next = next;
				}
				item.previous = void 0;
				item.next = this._head;
				this._head.previous = item;
				this._head = item;
				this._state++;
			} else if (touch === Touch.Last) {
				if (item === this._tail) return;
				const next = item.next;
				const previous = item.previous;
				if (item === this._head) {
					next.previous = void 0;
					this._head = next;
				} else {
					next.previous = previous;
					previous.next = next;
				}
				item.next = void 0;
				item.previous = this._tail;
				this._tail.next = item;
				this._tail = item;
				this._state++;
			}
		}
		toJSON() {
			const data = [];
			this.forEach((value, key) => {
				data.push([key, value]);
			});
			return data;
		}
		fromJSON(data) {
			this.clear();
			for (const [key, value] of data) this.set(key, value);
		}
	};
	LRUCache = class extends LinkedMap {
		_limit;
		_ratio;
		constructor(limit, ratio = 1) {
			super();
			this._limit = limit;
			this._ratio = Math.min(Math.max(0, ratio), 1);
		}
		get limit() {
			return this._limit;
		}
		set limit(limit) {
			this._limit = limit;
			this.checkTrim();
		}
		get ratio() {
			return this._ratio;
		}
		set ratio(ratio) {
			this._ratio = Math.min(Math.max(0, ratio), 1);
			this.checkTrim();
		}
		get(key, touch = Touch.AsNew) {
			return super.get(key, touch);
		}
		peek(key) {
			return super.get(key, Touch.None);
		}
		set(key, value) {
			super.set(key, value, Touch.Last);
			this.checkTrim();
			return this;
		}
		checkTrim() {
			if (this.size > this._limit) this.trimOld(Math.round(this._limit * this._ratio));
		}
	};
}));
//#endregion
//#region src/language-client/diagnostic.ts
var DiagnosticPullMode, DocumentOrUri, workspacePullDebounce, DocumentPullStateTracker, DiagnosticRequestor, timeoutDebounce, BackgroundScheduler, DiagnosticFeatureProviderImpl, DiagnosticFeature;
var init_diagnostic = __esmMin((() => {
	init_dist_node();
	init_main$2();
	init_esm();
	init_languages();
	init_util$7();
	init_errors();
	init_map();
	init_node();
	init_protocol();
	init_window();
	init_workspace$1();
	init_features();
	DiagnosticPullMode = /* @__PURE__ */ function(DiagnosticPullMode) {
		DiagnosticPullMode["onType"] = "onType";
		DiagnosticPullMode["onSave"] = "onSave";
		DiagnosticPullMode["onFocus"] = "onFocus";
		return DiagnosticPullMode;
	}({});
	(function(_DocumentOrUri) {
		function asKey(document) {
			return document instanceof URI ? document.toString() : document.uri;
		}
		_DocumentOrUri.asKey = asKey;
	})(DocumentOrUri || (DocumentOrUri = {}));
	workspacePullDebounce = getConditionValue(3e3, 10);
	DocumentPullStateTracker = class {
		documentPullStates;
		workspacePullStates;
		constructor() {
			this.documentPullStates = /* @__PURE__ */ new Map();
			this.workspacePullStates = /* @__PURE__ */ new Map();
		}
		track(kind, document, arg1) {
			const states = kind === 1 ? this.documentPullStates : this.workspacePullStates;
			const [key, uri, version] = document instanceof URI ? [
				document.toString(),
				document,
				arg1
			] : [
				document.uri.toString(),
				URI.parse(document.uri),
				document.version
			];
			let state = states.get(key);
			if (state === void 0) {
				state = {
					document: uri,
					pulledVersion: version,
					resultId: void 0
				};
				states.set(key, state);
			}
			return state;
		}
		update(kind, document, arg1, arg2) {
			const states = kind === 1 ? this.documentPullStates : this.workspacePullStates;
			const [key, uri, version, resultId] = document instanceof URI ? [
				document.toString(),
				document,
				arg1,
				arg2
			] : [
				document.uri,
				URI.parse(document.uri),
				document.version,
				arg1
			];
			let state = states.get(key);
			if (state === void 0) {
				state = {
					document: uri,
					pulledVersion: version,
					resultId
				};
				states.set(key, state);
			} else {
				state.pulledVersion = version;
				state.resultId = resultId;
			}
		}
		unTrack(kind, document) {
			const key = DocumentOrUri.asKey(document);
			(kind === 1 ? this.documentPullStates : this.workspacePullStates).delete(key);
		}
		tracks(kind, document) {
			const key = DocumentOrUri.asKey(document);
			return (kind === 1 ? this.documentPullStates : this.workspacePullStates).has(key);
		}
		trackingDocuments() {
			return Array.from(this.documentPullStates.keys());
		}
		tracksSameVersion(kind, document) {
			const key = document.uri.toString();
			const state = (kind === 1 ? this.documentPullStates : this.workspacePullStates).get(key);
			return state !== void 0 && state.pulledVersion === document.version;
		}
		getResultId(kind, document) {
			const key = DocumentOrUri.asKey(document);
			return (kind === 1 ? this.documentPullStates : this.workspacePullStates).get(key)?.resultId;
		}
		getAllResultIds() {
			const result = [];
			for (let [uri, value] of this.workspacePullStates) {
				if (this.documentPullStates.has(uri)) value = this.documentPullStates.get(uri);
				if (value.resultId !== void 0) result.push({
					uri,
					value: value.resultId
				});
			}
			return result;
		}
	};
	DiagnosticRequestor = class extends BaseFeature {
		isDisposed;
		enableWorkspace;
		client;
		options;
		onDidChangeDiagnosticsEmitter;
		provider;
		diagnostics;
		openRequests;
		documentStates;
		workspaceErrorCounter;
		workspaceCancellation;
		workspaceTimeout;
		constructor(client, options) {
			super(client);
			this.client = client;
			this.options = options;
			this.enableWorkspace = options.workspaceDiagnostics && this.client.clientOptions.diagnosticPullOptions?.workspace !== false;
			this.isDisposed = false;
			this.onDidChangeDiagnosticsEmitter = new import_main$1.Emitter();
			this.provider = this.createProvider();
			this.diagnostics = languages_default.createDiagnosticCollection(`${client.id}:pull:${defaultValue(options.identifier, client.id)}`);
			this.openRequests = /* @__PURE__ */ new Map();
			this.documentStates = new DocumentPullStateTracker();
			this.workspaceErrorCounter = 0;
		}
		knows(kind, document) {
			return this.documentStates.tracks(kind, document) || this.openRequests.has(DocumentOrUri.asKey(document));
		}
		knowsSameVersion(kind, document) {
			const requestState = this.openRequests.get(document.uri.toString());
			if (requestState === void 0) return this.documentStates.tracksSameVersion(kind, document);
			if (requestState.state === "reschedule") return true;
			if (requestState.state === "drop") return false;
			return requestState.version === document.version;
		}
		forget(kind, document) {
			this.documentStates.unTrack(kind, document);
		}
		pull(document, cb) {
			if (this.isDisposed) return;
			const uri = DocumentOrUri.asKey(document);
			this.pullAsync(document).then(() => {
				if (cb) cb();
			}, (error) => {
				this.client.error(`Document pull failed for text document ${uri.toString()}`, error, false);
			});
		}
		async pullAsync(document, version) {
			if (this.isDisposed) return;
			const isUri = document instanceof URI;
			const key = DocumentOrUri.asKey(document);
			version = isUri ? version : document.version;
			const currentRequestState = this.openRequests.get(key);
			const documentState = isUri ? this.documentStates.track(1, document, version) : this.documentStates.track(1, document);
			if (currentRequestState === void 0) {
				const tokenSource = new import_main$1.CancellationTokenSource();
				this.openRequests.set(key, {
					state: "open",
					document,
					version,
					tokenSource
				});
				let report;
				let afterState;
				try {
					report = await this.provider.provideDiagnostics(document, documentState.resultId, tokenSource.token) ?? {
						kind: import_main$1.DocumentDiagnosticReportKind.Full,
						items: []
					};
				} catch (error) {
					if (error instanceof LSPCancellationError && import_main$1.DiagnosticServerCancellationData.is(error.data) && error.data.retriggerRequest === false) afterState = {
						state: "drop",
						document
					};
					if (afterState === void 0 && error instanceof CancellationError) afterState = {
						state: "reschedule",
						document
					};
					else throw error;
				}
				afterState = afterState ?? this.openRequests.get(key);
				if (afterState === void 0) {
					this.client.error(`Lost request state in diagnostic pull model. Clearing diagnostics for ${key}`);
					this.diagnostics.delete(key);
					return;
				}
				this.openRequests.delete(key);
				if (!workspace_default.tabs.isVisible(document)) {
					this.documentStates.unTrack(1, document);
					return;
				}
				if (afterState.state === "drop") return;
				if (report !== void 0) {
					if (report.kind === import_main$1.DocumentDiagnosticReportKind.Full) this.diagnostics.set(key, report.items);
					documentState.pulledVersion = version;
					documentState.resultId = report.resultId;
				}
				if (afterState.state === "reschedule") this.pull(document);
			} else if (currentRequestState.state === "open") {
				currentRequestState.tokenSource.cancel();
				this.openRequests.set(key, {
					state: "reschedule",
					document: currentRequestState.document
				});
			} else if (currentRequestState.state === "drop") this.openRequests.set(key, {
				state: "reschedule",
				document: currentRequestState.document
			});
		}
		forgetDocument(document) {
			if (this.isDisposed) return;
			const key = DocumentOrUri.asKey(document);
			const request = this.openRequests.get(key);
			if (this.options.workspaceDiagnostics && key !== "untitled") {
				if (request !== void 0) this.openRequests.set(key, {
					state: "reschedule",
					document
				});
				else this.pull(document, () => {
					this.forget(1, document);
				});
				this.forget(2, document);
			} else {
				if (request !== void 0) {
					if (request.state === "open") request.tokenSource.cancel();
					this.openRequests.set(key, {
						state: "drop",
						document
					});
				}
				this.diagnostics.delete(key);
				this.forget(1, document);
			}
		}
		pullWorkspace() {
			if (!this.enableWorkspace) return;
			this.pullWorkspaceAsync().then(() => {
				this.workspaceTimeout = (0, import_main$1.RAL)().timer.setTimeout(() => {
					this.pullWorkspace();
				}, workspacePullDebounce);
			}, (error) => {
				if (!(error instanceof LSPCancellationError) && !import_main$1.DiagnosticServerCancellationData.is(error.data)) {
					this.client.error(`Workspace diagnostic pull failed.`, error);
					this.workspaceErrorCounter++;
				}
				if (this.workspaceErrorCounter <= 5) this.workspaceTimeout = (0, import_main$1.RAL)().timer.setTimeout(() => {
					this.pullWorkspace();
				}, workspacePullDebounce);
			});
		}
		async pullWorkspaceAsync() {
			if (!this.provider.provideWorkspaceDiagnostics) return;
			if (this.workspaceCancellation !== void 0) {
				this.workspaceCancellation.cancel();
				this.workspaceCancellation = void 0;
			}
			this.workspaceCancellation = new import_main$1.CancellationTokenSource();
			const previousResultIds = this.documentStates.getAllResultIds();
			await this.provider.provideWorkspaceDiagnostics(previousResultIds, this.workspaceCancellation.token, (chunk) => {
				if (!chunk || this.isDisposed) return;
				for (const item of chunk.items) {
					if (item.kind === import_main$1.DocumentDiagnosticReportKind.Full) {
						if (!this.documentStates.tracks(1, URI.parse(item.uri))) this.diagnostics.set(item.uri.toString(), item.items);
					}
					this.documentStates.update(2, URI.parse(item.uri), item.version ?? void 0, item.resultId);
				}
			});
		}
		createProvider() {
			const provider = {
				onDidChangeDiagnostics: this.onDidChangeDiagnosticsEmitter.event,
				provideDiagnostics: (document, previousResultId, token) => {
					const middleware = this.client.middleware;
					const client = this._client;
					const provideDiagnostics = (document, previousResultId, token) => {
						const uri = client.code2ProtocolConverter.asUri(document instanceof URI ? document : URI.parse(document.uri));
						const params = {
							identifier: this.options.identifier,
							textDocument: { uri },
							previousResultId
						};
						return this.sendRequest(import_main$1.DocumentDiagnosticRequest.type, params, token, {
							kind: import_main$1.DocumentDiagnosticReportKind.Full,
							items: []
						}).then(async (result) => {
							if (result === void 0 || result === null || this.isDisposed) return {
								kind: import_main$1.DocumentDiagnosticReportKind.Full,
								items: []
							};
							if (middleware.handleDiagnostics && result.kind == import_main$1.DocumentDiagnosticReportKind.Full) middleware.handleDiagnostics(uri, result.items, (_, diagnostics) => {
								result.items = diagnostics;
							});
							return result;
						});
					};
					return middleware.provideDiagnostics ? middleware.provideDiagnostics(document, previousResultId, token, provideDiagnostics) : provideDiagnostics(document, previousResultId, token);
				}
			};
			if (this.options.workspaceDiagnostics) provider.provideWorkspaceDiagnostics = (resultIds, token, resultReporter) => {
				const provideWorkspaceDiagnostics = (resultIds, token, resultReporter) => {
					const partialResultToken = v4();
					const disposable = this.client.onProgress(import_main$1.WorkspaceDiagnosticRequest.partialResult, partialResultToken, (partialResult) => {
						if (partialResult == void 0) {
							resultReporter(null);
							return;
						}
						resultReporter(partialResult);
					});
					const params = {
						identifier: this.options.identifier,
						previousResultIds: resultIds,
						partialResultToken
					};
					return this.sendRequest(import_main$1.WorkspaceDiagnosticRequest.type, params, token, { items: [] }).then(async (result) => {
						resultReporter(result);
						return { items: [] };
					}).finally(() => {
						disposable.dispose();
					});
				};
				const middleware = this.client.middleware;
				return middleware.provideWorkspaceDiagnostics ? middleware.provideWorkspaceDiagnostics(resultIds, token, resultReporter, provideWorkspaceDiagnostics) : provideWorkspaceDiagnostics(resultIds, token, resultReporter);
			};
			return provider;
		}
		dispose() {
			this.isDisposed = true;
			this.workspaceCancellation?.cancel();
			this.workspaceTimeout?.dispose();
			for (const request of this.openRequests.values()) if (request.state === "open") request.tokenSource.cancel();
			this.openRequests.clear();
		}
	};
	timeoutDebounce = getConditionValue(500, 10);
	BackgroundScheduler = class {
		client;
		diagnosticRequestor;
		lastDocumentToPull;
		documents;
		timeoutHandle;
		isDisposed;
		constructor(client, diagnosticRequestor) {
			this.client = client;
			this.diagnosticRequestor = diagnosticRequestor;
			this.documents = new LinkedMap();
			this.isDisposed = false;
		}
		add(document) {
			if (this.isDisposed === true) return;
			const key = document.uri;
			if (this.documents.has(key)) return;
			this.documents.set(key, document, Touch.AsNew);
			this.lastDocumentToPull = document;
		}
		remove(document) {
			const key = DocumentOrUri.asKey(document);
			this.documents.delete(key);
			if (this.documents.size === 0) {
				this.stop();
				return;
			}
			if (key === this.lastDocumentToPullKey()) {
				const before = this.documents.before(key);
				if (before === void 0) this.stop();
				else this.lastDocumentToPull = before;
			}
		}
		trigger() {
			this.lastDocumentToPull = this.documents.last;
			this.runLoop();
		}
		runLoop() {
			if (this.isDisposed === true) return;
			if (this.documents.size === 0) {
				this.stop();
				return;
			}
			if (this.lastDocumentToPull === void 0) return;
			if (this.timeoutHandle !== void 0) return;
			this.timeoutHandle = (0, import_main$1.RAL)().timer.setTimeout(() => {
				const document = this.documents.first;
				if (document === void 0) return;
				const key = DocumentOrUri.asKey(document);
				this.diagnosticRequestor.pullAsync(document).catch((error) => {
					this.client.error(`Document pull failed for text document ${key}`, error, false);
				}).finally(() => {
					this.timeoutHandle = void 0;
					this.documents.set(key, document, Touch.Last);
					if (key !== this.lastDocumentToPullKey()) this.runLoop();
				});
			}, timeoutDebounce);
		}
		dispose() {
			this.stop();
			this.documents.clear();
			this.lastDocumentToPull = void 0;
		}
		stop() {
			this.timeoutHandle?.dispose();
			this.timeoutHandle = void 0;
			this.lastDocumentToPull = void 0;
		}
		lastDocumentToPullKey() {
			return this.lastDocumentToPull !== void 0 ? DocumentOrUri.asKey(this.lastDocumentToPull) : void 0;
		}
	};
	DiagnosticFeatureProviderImpl = class {
		disposable;
		diagnosticRequestor;
		activeTextDocument;
		backgroundScheduler;
		constructor(client, options) {
			const diagnosticPullOptions = Object.assign({
				onChange: false,
				onSave: false,
				onFocus: false
			}, client.clientOptions.diagnosticPullOptions);
			const selector = options.documentSelector ?? [];
			const disposables = [];
			const ignored = diagnosticPullOptions.ignored ?? [];
			const matches = (document) => {
				if (diagnosticPullOptions.match !== void 0) return diagnosticPullOptions.match(selector, URI.parse(document.uri));
				if (workspace_default.match(selector, document) <= 0 || !workspace_default.tabs.isVisible(document)) return false;
				if (ignored.length > 0 && ignored.some((p) => minimatch(URI.parse(document.uri).fsPath, p, { dot: true }))) return false;
				return true;
			};
			const isActiveDocument = (document) => {
				return document.uri === this.activeTextDocument?.uri;
			};
			const considerDocument = (textDocument, mode) => {
				return (diagnosticPullOptions.filter === void 0 || !diagnosticPullOptions.filter(textDocument, mode)) && this.diagnosticRequestor.knows(1, textDocument);
			};
			this.diagnosticRequestor = new DiagnosticRequestor(client, options);
			this.backgroundScheduler = new BackgroundScheduler(client, this.diagnosticRequestor);
			const addToBackgroundIfNeeded = (document) => {
				if (!matches(document) || !options.interFileDependencies || isActiveDocument(document) || diagnosticPullOptions.onChange === false) return;
				this.backgroundScheduler.add(document);
			};
			this.activeTextDocument = window_default.activeTextEditor?.document.textDocument;
			disposables.push(window_default.onDidChangeActiveTextEditor((editor) => {
				const oldActive = this.activeTextDocument;
				this.activeTextDocument = editor?.document.textDocument;
				if (oldActive !== void 0) addToBackgroundIfNeeded(oldActive);
				if (this.activeTextDocument !== void 0) {
					this.backgroundScheduler.remove(this.activeTextDocument);
					if (diagnosticPullOptions.onFocus === true && matches(this.activeTextDocument) && considerDocument(this.activeTextDocument, "onFocus")) this.diagnosticRequestor.pull(this.activeTextDocument);
				}
			}));
			const openFeature = client.getFeature(import_main$1.DidOpenTextDocumentNotification.method);
			disposables.push(openFeature.onNotificationSent((event) => {
				const textDocument = event.original;
				if (this.diagnosticRequestor.knowsSameVersion(1, textDocument)) return;
				if (matches(textDocument)) this.diagnosticRequestor.pull(textDocument, () => {
					addToBackgroundIfNeeded(textDocument);
				});
			}));
			disposables.push(workspace_default.tabs.onOpen((opened) => {
				for (const resource of opened) {
					if (this.diagnosticRequestor.knows(1, resource)) continue;
					const uriStr = resource.toString();
					let textDocument = workspace_default.getDocument(uriStr).textDocument;
					if (textDocument !== void 0 && matches(textDocument)) this.diagnosticRequestor.pull(textDocument, () => {
						addToBackgroundIfNeeded(textDocument);
					});
				}
			}));
			for (const textDocument of workspace_default.textDocuments) if (matches(textDocument)) this.diagnosticRequestor.pull(textDocument, () => {
				addToBackgroundIfNeeded(textDocument);
			});
			if (diagnosticPullOptions.onChange === true) {
				const changeFeature = client.getFeature(import_main$1.DidChangeTextDocumentNotification.method);
				disposables.push(changeFeature.onNotificationSent(async (event) => {
					const textDocument = workspace_default.getDocument(event.original.bufnr).textDocument;
					if (considerDocument(textDocument, "onType")) this.diagnosticRequestor.pull(textDocument, () => {
						this.backgroundScheduler.trigger();
					});
				}));
			}
			if (diagnosticPullOptions.onSave === true) {
				const saveFeature = client.getFeature(import_main$1.DidSaveTextDocumentNotification.method);
				disposables.push(saveFeature.onNotificationSent((event) => {
					const textDocument = event.original;
					if (considerDocument(textDocument, "onSave")) this.diagnosticRequestor.pull(event.original);
				}));
			}
			const closeFeature = client.getFeature(import_main$1.DidCloseTextDocumentNotification.method);
			disposables.push(closeFeature.onNotificationSent((event) => {
				this.cleanUpDocument(event.original);
			}));
			disposables.push(workspace_default.tabs.onClose((closed) => {
				for (const document of closed) this.cleanUpDocument(document);
			}));
			this.diagnosticRequestor.onDidChangeDiagnosticsEmitter.event(() => {
				for (const textDocument of workspace_default.textDocuments) if (matches(textDocument)) this.diagnosticRequestor.pull(textDocument);
			});
			if (options.workspaceDiagnostics === true && options.identifier !== "da348dc5-c30a-4515-9d98-31ff3be38d14") this.diagnosticRequestor.pullWorkspace();
			this.disposable = import_main$1.Disposable.create(() => [
				...disposables,
				this.backgroundScheduler,
				this.diagnosticRequestor
			].forEach((d) => d.dispose()));
		}
		get onDidChangeDiagnosticsEmitter() {
			return this.diagnosticRequestor.onDidChangeDiagnosticsEmitter;
		}
		get diagnostics() {
			return this.diagnosticRequestor.provider;
		}
		knows(kind, textDocument) {
			return this.diagnosticRequestor.knows(kind, textDocument);
		}
		forget(document) {
			this.cleanUpDocument(document);
		}
		cleanUpDocument(document) {
			this.backgroundScheduler.remove(document);
			if (this.diagnosticRequestor.knows(1, document)) this.diagnosticRequestor.forgetDocument(document);
		}
	};
	DiagnosticFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DocumentDiagnosticRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let capability = ensure(ensure(capabilities, "textDocument"), "diagnostic");
			capability.relatedInformation = true;
			capability.tagSupport = { valueSet: [DiagnosticTag.Unnecessary, DiagnosticTag.Deprecated] };
			capability.codeDescriptionSupport = true;
			capability.dataSupport = true;
			capability.dynamicRegistration = true;
			capability.relatedDocumentSupport = true;
			ensure(ensure(capabilities, "workspace"), "diagnostics").refreshSupport = true;
		}
		initialize(capabilities, documentSelector) {
			this._client.onRequest(import_main$1.DiagnosticRefreshRequest.type, async () => {
				for (const provider of this.getAllProviders()) provider.onDidChangeDiagnosticsEmitter.fire();
			});
			let [id, options] = this.getRegistration(documentSelector, capabilities.diagnosticProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = new DiagnosticFeatureProviderImpl(this._client, options);
			return [provider.disposable, provider];
		}
		refresh() {
			for (const provider of this.getAllProviders()) provider.onDidChangeDiagnosticsEmitter.fire();
		}
	};
}));
//#endregion
//#region src/language-client/documentHighlight.ts
var DocumentHighlightFeature;
var init_documentHighlight = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	DocumentHighlightFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DocumentHighlightRequest.type);
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "documentHighlight").dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.documentHighlightProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideDocumentHighlights: (document, position, token) => {
				const client = this._client;
				const _provideDocumentHighlights = (document, position, token) => {
					return this.sendRequest(import_main$1.DocumentHighlightRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token);
				};
				const middleware = client.middleware;
				return middleware.provideDocumentHighlights ? middleware.provideDocumentHighlights(document, position, token, _provideDocumentHighlights) : _provideDocumentHighlights(document, position, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerDocumentHighlightProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/documentLink.ts
var DocumentLinkFeature;
var init_documentLink = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	DocumentLinkFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DocumentLinkRequest.type);
		}
		fillClientCapabilities(capabilities) {
			const documentLinkCapabilities = ensure(ensure(capabilities, "textDocument"), "documentLink");
			documentLinkCapabilities.dynamicRegistration = true;
			documentLinkCapabilities.tooltipSupport = true;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.documentLinkProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = {
				provideDocumentLinks: (document, token) => {
					const client = this._client;
					const provideDocumentLinks = (document, token) => {
						return this.sendRequest(import_main$1.DocumentLinkRequest.type, client.code2ProtocolConverter.asDocumentLinkParams(document), token);
					};
					const middleware = client.middleware;
					return middleware.provideDocumentLinks ? middleware.provideDocumentLinks(document, token, provideDocumentLinks) : provideDocumentLinks(document, token);
				},
				resolveDocumentLink: options.resolveProvider ? (link, token) => {
					const client = this._client;
					let resolveDocumentLink = (link, token) => {
						return this.sendRequest(import_main$1.DocumentLinkResolveRequest.type, link, token, link);
					};
					const middleware = client.middleware;
					return middleware.resolveDocumentLink ? middleware.resolveDocumentLink(link, token, resolveDocumentLink) : resolveDocumentLink(link, token);
				} : void 0
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerDocumentLinkProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/documentSymbol.ts
var SupportedSymbolKinds, SupportedSymbolTags, DocumentSymbolFeature;
var init_documentSymbol = __esmMin((() => {
	init_main$2();
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	SupportedSymbolKinds = [
		SymbolKind.File,
		SymbolKind.Module,
		SymbolKind.Namespace,
		SymbolKind.Package,
		SymbolKind.Class,
		SymbolKind.Method,
		SymbolKind.Property,
		SymbolKind.Field,
		SymbolKind.Constructor,
		SymbolKind.Enum,
		SymbolKind.Interface,
		SymbolKind.Function,
		SymbolKind.Variable,
		SymbolKind.Constant,
		SymbolKind.String,
		SymbolKind.Number,
		SymbolKind.Boolean,
		SymbolKind.Array,
		SymbolKind.Object,
		SymbolKind.Key,
		SymbolKind.Null,
		SymbolKind.EnumMember,
		SymbolKind.Struct,
		SymbolKind.Event,
		SymbolKind.Operator,
		SymbolKind.TypeParameter
	];
	SupportedSymbolTags = [SymbolTag.Deprecated];
	DocumentSymbolFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DocumentSymbolRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let symbolCapabilities = ensure(ensure(capabilities, "textDocument"), "documentSymbol");
			symbolCapabilities.dynamicRegistration = true;
			symbolCapabilities.symbolKind = { valueSet: SupportedSymbolKinds };
			symbolCapabilities.hierarchicalDocumentSymbolSupport = true;
			symbolCapabilities.tagSupport = { valueSet: SupportedSymbolTags };
			symbolCapabilities.labelSupport = true;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.documentSymbolProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = {
				meta: options.label ? { label: options.label } : void 0,
				provideDocumentSymbols: (document, token) => {
					const client = this._client;
					const _provideDocumentSymbols = (document, token) => {
						return this.sendRequest(import_main$1.DocumentSymbolRequest.type, client.code2ProtocolConverter.asDocumentSymbolParams(document), token);
					};
					const middleware = client.middleware;
					return middleware.provideDocumentSymbols ? middleware.provideDocumentSymbols(document, token, _provideDocumentSymbols) : _provideDocumentSymbols(document, token);
				}
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerDocumentSymbolProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/executeCommand.ts
var ExecuteCommandFeature;
var init_executeCommand = __esmMin((() => {
	init_commands$2();
	init_protocol();
	init_features();
	init_uuid();
	ExecuteCommandFeature = class extends BaseFeature {
		_commands = /* @__PURE__ */ new Map();
		constructor(client) {
			super(client);
		}
		getState() {
			return {
				kind: "workspace",
				id: this.registrationType.method,
				registrations: this._commands.size > 0
			};
		}
		get registrationType() {
			return import_main$1.ExecuteCommandRequest.type;
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "workspace"), "executeCommand").dynamicRegistration = true;
		}
		initialize(capabilities) {
			if (!capabilities.executeCommandProvider) return;
			this.register({
				id: generateUuid(),
				registerOptions: Object.assign({}, capabilities.executeCommandProvider)
			});
		}
		register(data) {
			const client = this._client;
			const middleware = client.middleware;
			const executeCommand = (command, args) => {
				const params = {
					command,
					arguments: args
				};
				return client.sendRequest(import_main$1.ExecuteCommandRequest.type, params, import_main$1.CancellationToken.None).then(void 0, (error) => {
					client.handleFailedRequest(import_main$1.ExecuteCommandRequest.type, void 0, error, void 0);
				});
			};
			if (data.registerOptions.commands) {
				let disposables = [];
				for (const command of data.registerOptions.commands) disposables.push(commands_default.registerCommand(command, (...args) => {
					return middleware.executeCommand ? middleware.executeCommand(command, args, executeCommand) : executeCommand(command, args);
				}, null, true));
				this._commands.set(data.id, disposables);
			}
		}
		unregister(id) {
			let disposables = this._commands.get(id);
			if (disposables) {
				this._commands.delete(id);
				disposables.forEach((disposable) => disposable.dispose());
			}
		}
		dispose() {
			this._commands.forEach((value) => {
				value.forEach((disposable) => disposable.dispose());
			});
			this._commands.clear();
		}
	};
}));
//#endregion
//#region src/language-client/fileOperations.ts
function access$1(target, key) {
	return target[key];
}
function assign(target, key, value) {
	target[key] = value;
}
var FileOperationFeature, NotificationFileOperationFeature, DidCreateFilesFeature, DidRenameFilesFeature, DidDeleteFilesFeature, RequestFileOperationFeature, WillCreateFilesFeature, WillRenameFilesFeature, WillDeleteFilesFeature;
var init_fileOperations = __esmMin((() => {
	init_util$7();
	init_fs();
	init_node();
	init_protocol();
	init_workspace$1();
	init_features();
	init_uuid();
	FileOperationFeature = class FileOperationFeature extends BaseFeature {
		_event;
		_registrationType;
		_clientCapability;
		_serverCapability;
		_listener;
		_filters = /* @__PURE__ */ new Map();
		constructor(client, event, registrationType, clientCapability, serverCapability) {
			super(client);
			this._event = event;
			this._registrationType = registrationType;
			this._clientCapability = clientCapability;
			this._serverCapability = serverCapability;
		}
		getState() {
			return {
				kind: "workspace",
				id: this._registrationType.method,
				registrations: this._filters.size > 0
			};
		}
		get registrationType() {
			return this._registrationType;
		}
		fillClientCapabilities(capabilities) {
			const value = ensure(ensure(capabilities, "workspace"), "fileOperations");
			assign(value, "dynamicRegistration", true);
			assign(value, this._clientCapability, true);
		}
		initialize(capabilities) {
			const options = capabilities.workspace?.fileOperations;
			const capability = options !== void 0 ? access$1(options, this._serverCapability) : void 0;
			if (capability?.filters !== void 0) try {
				this.register({
					id: generateUuid(),
					registerOptions: { filters: capability.filters }
				});
			} catch (e) {
				this._client.warn(`Ignoring invalid glob pattern for ${this._serverCapability} registration: ${e}`);
			}
		}
		register(data) {
			if (!this._listener) this._listener = this._event(this.send, this);
			const minimatchFilter = data.registerOptions.filters.map((filter) => {
				const matcher = new minimatch.Minimatch(filter.pattern.glob, FileOperationFeature.asMinimatchOptions(filter.pattern.options));
				if (!matcher.makeRe()) throw new Error(`Invalid pattern ${filter.pattern.glob}!`);
				return {
					scheme: filter.scheme,
					matcher,
					kind: filter.pattern.matches
				};
			});
			this._filters.set(data.id, minimatchFilter);
		}
		sendWithMiddleware(fn, key, ...params) {
			const middleware = defaultValue(defaultValue(this._client.middleware, {}).workspace, {});
			return middleware[key] ? middleware[key](...params, fn) : fn(...params);
		}
		unregister(id) {
			this._filters.delete(id);
		}
		dispose() {
			this._filters.clear();
			if (this._listener) {
				this._listener.dispose();
				this._listener = void 0;
			}
		}
		async filter(event, prop) {
			const fileMatches = await Promise.all(event.files.map(async (item) => {
				const uri = prop(item);
				const path = uri.fsPath.replace(/\\/g, "/");
				for (const filters of this._filters.values()) for (const filter of filters) {
					if (filter.scheme !== void 0 && filter.scheme !== uri.scheme) continue;
					if (filter.matcher.match(path)) {
						if (filter.kind === void 0) return true;
						const fileType = await getFileType(uri.fsPath);
						if (fileType === void 0) {
							this._client.error(`Failed to determine file type for ${uri.toString()}.`);
							return true;
						}
						if (fileType === 1 && filter.kind === import_main$1.FileOperationPatternKind.file || fileType === 2 && filter.kind === import_main$1.FileOperationPatternKind.folder) return true;
					} else if (filter.kind === import_main$1.FileOperationPatternKind.folder) {
						if (await getFileType(uri.fsPath) === 2 && filter.matcher.match(`${path}/`)) return true;
					}
				}
				return false;
			}));
			const files = event.files.filter((_, index) => fileMatches[index]);
			return {
				...event,
				files
			};
		}
		static asMinimatchOptions(options) {
			if (options === void 0) return;
			if (options.ignoreCase === true) return { nocase: true };
		}
	};
	NotificationFileOperationFeature = class extends FileOperationFeature {
		_notificationType;
		_accessUri;
		_createParams;
		constructor(client, event, notificationType, clientCapability, serverCapability, accessUri, createParams) {
			super(client, event, notificationType, clientCapability, serverCapability);
			this._notificationType = notificationType;
			this._accessUri = accessUri;
			this._createParams = createParams;
		}
		async send(originalEvent) {
			const filteredEvent = await this.filter(originalEvent, this._accessUri);
			if (filteredEvent.files.length) {
				const next = async (event) => {
					return this._client.sendNotification(this._notificationType, this._createParams(event));
				};
				let promise = this.doSend(filteredEvent, next);
				if (promise) await promise.catch((e) => {
					this._client.error(`Sending notification ${this.registrationType.method} failed`, e);
				});
			}
		}
	};
	DidCreateFilesFeature = class extends NotificationFileOperationFeature {
		constructor(client) {
			super(client, workspace_default.onDidCreateFiles, import_main$1.DidCreateFilesNotification.type, "didCreate", "didCreate", (i) => i, client.code2ProtocolConverter.asDidCreateFilesParams);
		}
		doSend(event, next) {
			return this.sendWithMiddleware(next, "didCreateFiles", event);
		}
	};
	DidRenameFilesFeature = class extends NotificationFileOperationFeature {
		constructor(client) {
			super(client, workspace_default.onDidRenameFiles, import_main$1.DidRenameFilesNotification.type, "didRename", "didRename", (i) => i.oldUri, client.code2ProtocolConverter.asDidRenameFilesParams);
		}
		doSend(event, next) {
			return this.sendWithMiddleware(next, "didRenameFiles", event);
		}
	};
	DidDeleteFilesFeature = class extends NotificationFileOperationFeature {
		constructor(client) {
			super(client, workspace_default.onDidDeleteFiles, import_main$1.DidDeleteFilesNotification.type, "didDelete", "didDelete", (i) => i, client.code2ProtocolConverter.asDidDeleteFilesParams);
		}
		doSend(event, next) {
			return this.sendWithMiddleware(next, "didDeleteFiles", event);
		}
	};
	RequestFileOperationFeature = class extends FileOperationFeature {
		_requestType;
		_accessUri;
		_createParams;
		constructor(client, event, requestType, clientCapability, serverCapability, accessUri, createParams) {
			super(client, event, requestType, clientCapability, serverCapability);
			this._requestType = requestType;
			this._accessUri = accessUri;
			this._createParams = createParams;
		}
		async send(originalEvent) {
			const waitUntil = this.waitUntil(originalEvent);
			originalEvent.waitUntil(waitUntil);
		}
		async waitUntil(originalEvent) {
			const filteredEvent = await this.filter(originalEvent, this._accessUri);
			if (filteredEvent.files.length) {
				const next = (event) => {
					return this.sendRequest(this._requestType, this._createParams(event), import_main$1.CancellationToken.None);
				};
				return this.doSend(filteredEvent, next);
			} else return;
		}
	};
	WillCreateFilesFeature = class extends RequestFileOperationFeature {
		constructor(client) {
			super(client, workspace_default.onWillCreateFiles, import_main$1.WillCreateFilesRequest.type, "willCreate", "willCreate", (i) => i, client.code2ProtocolConverter.asWillCreateFilesParams);
		}
		doSend(event, next) {
			return this.sendWithMiddleware(next, "willCreateFiles", event);
		}
	};
	WillRenameFilesFeature = class extends RequestFileOperationFeature {
		constructor(client) {
			super(client, workspace_default.onWillRenameFiles, import_main$1.WillRenameFilesRequest.type, "willRename", "willRename", (i) => i.oldUri, client.code2ProtocolConverter.asWillRenameFilesParams);
		}
		doSend(event, next) {
			return this.sendWithMiddleware(next, "willRenameFiles", event);
		}
	};
	WillDeleteFilesFeature = class extends RequestFileOperationFeature {
		constructor(client) {
			super(client, workspace_default.onWillDeleteFiles, import_main$1.WillDeleteFilesRequest.type, "willDelete", "willDelete", (i) => i, client.code2ProtocolConverter.asWillDeleteFilesParams);
		}
		doSend(event, next) {
			return this.sendWithMiddleware(next, "willDeleteFiles", event);
		}
	};
}));
//#endregion
//#region src/model/relativePattern.ts
var RelativePattern$1;
var init_relativePattern = __esmMin((() => {
	init_esm();
	init_errors();
	RelativePattern$1 = class {
		pattern;
		baseUri;
		constructor(base, pattern) {
			if (typeof base !== "string") {
				if (!base || !URI.isUri(base) && typeof base.uri !== "string") throw illegalArgument("base");
			}
			if (typeof pattern !== "string") throw illegalArgument("pattern");
			if (typeof base === "string") this.baseUri = URI.file(base);
			else if (URI.isUri(base)) this.baseUri = base;
			else this.baseUri = URI.parse(base.uri);
			this.pattern = pattern;
		}
		toJSON() {
			return {
				pattern: this.pattern,
				baseUri: this.baseUri.toJSON()
			};
		}
	};
}));
//#endregion
//#region src/language-client/fileSystemWatcher.ts
function asRelativePattern(rp) {
	let { baseUri, pattern } = rp;
	if (typeof baseUri === "string") return new RelativePattern$1(URI.parse(baseUri), pattern);
	return new RelativePattern$1(baseUri, pattern);
}
var FileSystemWatcherFeature;
var init_fileSystemWatcher$1 = __esmMin((() => {
	init_esm();
	init_relativePattern();
	init_util$7();
	init_is();
	init_protocol();
	init_workspace$1();
	init_features();
	init_uuid();
	FileSystemWatcherFeature = class {
		_watchers = /* @__PURE__ */ new Map();
		_fileEventsMap = /* @__PURE__ */ new Map();
		_client;
		_notifyFileEvent;
		constructor(client, notifyFileEvent) {
			this._client = client;
			this._notifyFileEvent = notifyFileEvent;
			this._watchers = /* @__PURE__ */ new Map();
		}
		getState() {
			return {
				kind: "workspace",
				id: this.registrationType.method,
				registrations: this._watchers.size > 0
			};
		}
		get registrationType() {
			return import_main$1.DidChangeWatchedFilesNotification.type;
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "workspace"), "didChangeWatchedFiles").dynamicRegistration = true;
			ensure(ensure(capabilities, "workspace"), "didChangeWatchedFiles").relativePatternSupport = true;
		}
		initialize(_capabilities, _documentSelector) {
			let fileEvents = defaultValue(this._client.clientOptions.synchronize, {}).fileEvents;
			if (!fileEvents) return;
			let watchers = Array.isArray(fileEvents) ? fileEvents : [fileEvents];
			let disposables = [];
			for (let fileSystemWatcher of watchers) {
				disposables.push(fileSystemWatcher);
				this.hookListeners(fileSystemWatcher, !fileSystemWatcher.ignoreCreateEvents, !fileSystemWatcher.ignoreChangeEvents, !fileSystemWatcher.ignoreDeleteEvents, disposables);
			}
			this._watchers.set(generateUuid(), disposables);
		}
		register(data) {
			if (!Array.isArray(data.registerOptions.watchers)) return;
			let disposables = [];
			for (let watcher of data.registerOptions.watchers) {
				let globPattern;
				if (string(watcher.globPattern)) globPattern = watcher.globPattern;
				else if (import_main$1.RelativePattern.is(watcher.globPattern)) globPattern = asRelativePattern(watcher.globPattern);
				else continue;
				let watchCreate = true;
				let watchChange = true;
				let watchDelete = true;
				if (watcher.kind != null) {
					watchCreate = (watcher.kind & import_main$1.WatchKind.Create) !== 0;
					watchChange = (watcher.kind & import_main$1.WatchKind.Change) !== 0;
					watchDelete = (watcher.kind & import_main$1.WatchKind.Delete) !== 0;
				}
				let fileSystemWatcher = workspace_default.createFileSystemWatcher(globPattern, !watchCreate, !watchChange, !watchDelete);
				this.hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, disposables);
				disposables.push(fileSystemWatcher);
			}
			this._watchers.set(data.id, disposables);
		}
		hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, listeners) {
			const client = this._client;
			if (watchCreate) fileSystemWatcher.onDidCreate((resource) => this._notifyFileEvent({
				uri: client.code2ProtocolConverter.asUri(resource),
				type: import_main$1.FileChangeType.Created
			}), null, listeners);
			if (watchChange) fileSystemWatcher.onDidChange((resource) => this._notifyFileEvent({
				uri: client.code2ProtocolConverter.asUri(resource),
				type: import_main$1.FileChangeType.Changed
			}), null, listeners);
			if (watchDelete) fileSystemWatcher.onDidDelete((resource) => this._notifyFileEvent({
				uri: client.code2ProtocolConverter.asUri(resource),
				type: import_main$1.FileChangeType.Deleted
			}), null, listeners);
		}
		unregister(id) {
			let disposables = this._watchers.get(id);
			if (disposables) {
				this._watchers.delete(id);
				disposeAll(disposables);
			}
		}
		dispose() {
			this._fileEventsMap.clear();
			this._watchers.forEach((disposables) => {
				disposeAll(disposables);
			});
			this._watchers.clear();
		}
	};
}));
//#endregion
//#region src/language-client/foldingRange.ts
var import_api$3, FoldingRangeFeature;
var init_foldingRange = __esmMin((() => {
	import_api$3 = require_api();
	init_languages();
	init_protocol();
	init_features();
	FoldingRangeFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.FoldingRangeRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let capability = ensure(ensure(capabilities, "textDocument"), "foldingRange");
			capability.dynamicRegistration = true;
			capability.rangeLimit = 5e3;
			capability.lineFoldingOnly = true;
			capability.foldingRangeKind = { valueSet: [
				import_main$1.FoldingRangeKind.Comment,
				import_main$1.FoldingRangeKind.Imports,
				import_main$1.FoldingRangeKind.Region
			] };
			capability.foldingRange = { collapsedText: false };
			ensure(ensure(capabilities, "workspace"), "foldingRange").refreshSupport = true;
		}
		initialize(capabilities, documentSelector) {
			this._client.onRequest(import_api$3.FoldingRangeRefreshRequest.type, async () => {
				for (const provider of this.getAllProviders()) provider.onDidChangeFoldingRange.fire();
			});
			const [id, options] = this.getRegistration(documentSelector, capabilities.foldingRangeProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const eventEmitter = new import_api$3.Emitter();
			const provider = {
				onDidChangeFoldingRanges: eventEmitter.event,
				provideFoldingRanges: (document, context, token) => {
					const client = this._client;
					const provideFoldingRanges = (document, _, token) => {
						const requestParams = { textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document) };
						return this.sendRequest(import_main$1.FoldingRangeRequest.type, requestParams, token);
					};
					const middleware = client.middleware;
					return middleware.provideFoldingRanges ? middleware.provideFoldingRanges(document, context, token, provideFoldingRanges) : provideFoldingRanges(document, context, token);
				}
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerFoldingRangeProvider(options.documentSelector, provider), {
				provider,
				onDidChangeFoldingRange: eventEmitter
			}];
		}
	};
}));
//#endregion
//#region src/language-client/formatting.ts
var DocumentFormattingFeature, DocumentRangeFormattingFeature, DocumentOnTypeFormattingFeature;
var init_formatting = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	DocumentFormattingFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DocumentFormattingRequest.type);
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "formatting").dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.documentFormattingProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideDocumentFormattingEdits: (document, options, token) => {
				const client = this._client;
				const provideDocumentFormattingEdits = (document, options, token) => {
					const params = {
						textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
						options
					};
					return this.sendRequest(import_main$1.DocumentFormattingRequest.type, params, token);
				};
				const middleware = client.middleware;
				return middleware.provideDocumentFormattingEdits ? middleware.provideDocumentFormattingEdits(document, options, token, provideDocumentFormattingEdits) : provideDocumentFormattingEdits(document, options, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerDocumentFormatProvider(options.documentSelector, provider, this._client.clientOptions.formatterPriority), provider];
		}
	};
	DocumentRangeFormattingFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DocumentRangeFormattingRequest.type);
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "rangeFormatting").dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.documentRangeFormattingProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideDocumentRangeFormattingEdits: (document, range, options, token) => {
				const client = this._client;
				const provideDocumentRangeFormattingEdits = (document, range, options, token) => {
					const params = {
						textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
						range,
						options
					};
					return this.sendRequest(import_main$1.DocumentRangeFormattingRequest.type, params, token);
				};
				const middleware = client.middleware;
				return middleware.provideDocumentRangeFormattingEdits ? middleware.provideDocumentRangeFormattingEdits(document, range, options, token, provideDocumentRangeFormattingEdits) : provideDocumentRangeFormattingEdits(document, range, options, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerDocumentRangeFormatProvider(options.documentSelector, provider, this._client.clientOptions.formatterPriority), provider];
		}
	};
	DocumentOnTypeFormattingFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.DocumentOnTypeFormattingRequest.type);
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "onTypeFormatting").dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.documentOnTypeFormattingProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideOnTypeFormattingEdits: (document, position, ch, options, token) => {
				const client = this._client;
				const provideOnTypeFormattingEdits = (document, position, ch, options, token) => {
					const params = {
						textDocument: client.code2ProtocolConverter.asVersionedTextDocumentIdentifier(document),
						position,
						ch,
						options
					};
					return this.sendRequest(import_main$1.DocumentOnTypeFormattingRequest.type, params, token);
				};
				const middleware = client.middleware;
				return middleware.provideOnTypeFormattingEdits ? middleware.provideOnTypeFormattingEdits(document, position, ch, options, token, provideOnTypeFormattingEdits) : provideOnTypeFormattingEdits(document, position, ch, options, token);
			} };
			this._client.attachExtensionName(provider);
			const moreTriggerCharacter = options.moreTriggerCharacter || [];
			const characters = [options.firstTriggerCharacter, ...moreTriggerCharacter];
			return [languages_default.registerOnTypeFormattingEditProvider(options.documentSelector, provider, characters), provider];
		}
	};
}));
//#endregion
//#region src/language-client/hover.ts
var HoverFeature;
var init_hover$1 = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	HoverFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.HoverRequest.type);
		}
		fillClientCapabilities(capabilities) {
			const hoverCapability = ensure(ensure(capabilities, "textDocument"), "hover");
			hoverCapability.dynamicRegistration = true;
			hoverCapability.contentFormat = this._client.supportedMarkupKind;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.hoverProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideHover: (document, position, token) => {
				const client = this._client;
				const provideHover = (document, position, token) => {
					return this.sendRequest(import_main$1.HoverRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token);
				};
				const middleware = client.middleware;
				return middleware.provideHover ? middleware.provideHover(document, position, token, provideHover) : provideHover(document, position, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerHoverProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/implementation.ts
var ImplementationFeature;
var init_implementation = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	ImplementationFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.ImplementationRequest.type);
		}
		fillClientCapabilities(capabilities) {
			const implementationSupport = ensure(ensure(capabilities, "textDocument"), "implementation");
			implementationSupport.dynamicRegistration = true;
			implementationSupport.linkSupport = true;
		}
		initialize(capabilities, documentSelector) {
			const [id, options] = this.getRegistration(documentSelector, capabilities.implementationProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideImplementation: (document, position, token) => {
				const client = this._client;
				const provideImplementation = (document, position, token) => this.sendRequest(import_main$1.ImplementationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token);
				const middleware = client.middleware;
				return middleware.provideImplementation ? middleware.provideImplementation(document, position, token, provideImplementation) : provideImplementation(document, position, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerImplementationProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/inlayHint.ts
var InlayHintsFeature;
var init_inlayHint$1 = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	InlayHintsFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.InlayHintRequest.type);
		}
		fillClientCapabilities(capabilities) {
			const inlayHint = ensure(ensure(capabilities, "textDocument"), "inlayHint");
			inlayHint.dynamicRegistration = true;
			inlayHint.resolveSupport = { properties: [
				"tooltip",
				"textEdits",
				"label.tooltip",
				"label.location",
				"label.command"
			] };
			ensure(ensure(capabilities, "workspace"), "inlayHint").refreshSupport = true;
		}
		initialize(capabilities, documentSelector) {
			this._client.onRequest(import_main$1.InlayHintRefreshRequest.type, async () => {
				for (const provider of this.getAllProviders()) provider.onDidChangeInlayHints.fire();
			});
			const [id, options] = this.getRegistration(documentSelector, capabilities.inlayHintProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const eventEmitter = new import_main$1.Emitter();
			const provider = {
				onDidChangeInlayHints: eventEmitter.event,
				provideInlayHints: (document, range, token) => {
					const client = this._client;
					const provideInlayHints = (document, range, token) => {
						const requestParams = {
							textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
							range
						};
						return this.sendRequest(import_main$1.InlayHintRequest.type, requestParams, token, null);
					};
					const middleware = client.middleware;
					return middleware.provideInlayHints ? middleware.provideInlayHints(document, range, token, provideInlayHints) : provideInlayHints(document, range, token);
				}
			};
			provider.resolveInlayHint = options.resolveProvider === true ? (hint, token) => {
				const resolveInlayHint = (item, token) => {
					return this.sendRequest(import_main$1.InlayHintResolveRequest.type, item, token);
				};
				return this.sendWithMiddleware(resolveInlayHint, "resolveInlayHint", hint, token);
			} : void 0;
			const selector = options.documentSelector;
			this._client.attachExtensionName(provider);
			return [languages_default.registerInlayHintsProvider(selector, provider), {
				provider,
				onDidChangeInlayHints: eventEmitter
			}];
		}
	};
}));
//#endregion
//#region src/language-client/inlineCompletion.ts
var import_api$2, InlineCompletionItemFeature;
var init_inlineCompletion = __esmMin((() => {
	import_api$2 = require_api();
	init_languages();
	init_features();
	init_uuid();
	InlineCompletionItemFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_api$2.InlineCompletionRequest.type);
		}
		fillClientCapabilities(capabilities) {
			const inlineCompletion = ensure(ensure(capabilities, "textDocument"), "inlineCompletion");
			inlineCompletion.dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.inlineCompletionProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideInlineCompletionItems: (document, position, context, token) => {
				const provideInlineCompletionItems = (document, position, context, token) => {
					const params = {
						textDocument: { uri: document.uri },
						position,
						context
					};
					return this.sendRequest(import_api$2.InlineCompletionRequest.type, params, token, null);
				};
				const middleware = this._client.middleware;
				return middleware.provideInlineCompletionItems ? middleware.provideInlineCompletionItems(document, position, context, token, provideInlineCompletionItems) : provideInlineCompletionItems(document, position, context, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerInlineCompletionItemProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/inlineValue.ts
var InlineValueFeature;
var init_inlineValue = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	InlineValueFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.InlineValueRequest.type);
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "inlineValue").dynamicRegistration = true;
			ensure(ensure(capabilities, "workspace"), "inlineValue").refreshSupport = true;
		}
		initialize(capabilities, documentSelector) {
			this._client.onRequest(import_main$1.InlineValueRefreshRequest.type, async () => {
				for (const provider of this.getAllProviders()) provider.onDidChangeInlineValues.fire();
			});
			const [id, options] = this.getRegistration(documentSelector, capabilities.inlineValueProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const eventEmitter = new import_main$1.Emitter();
			const provider = {
				onDidChangeInlineValues: eventEmitter.event,
				provideInlineValues: (document, viewPort, context, token) => {
					const client = this._client;
					const provideInlineValues = (document, range, context, token) => {
						const requestParams = {
							textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
							range,
							context
						};
						return this.sendRequest(import_main$1.InlineValueRequest.type, requestParams, token);
					};
					const middleware = client.middleware;
					return middleware.provideInlineValues ? middleware.provideInlineValues(document, viewPort, context, token, provideInlineValues) : provideInlineValues(document, viewPort, context, token);
				}
			};
			this._client.attachExtensionName(provider);
			const selector = options.documentSelector;
			return [languages_default.registerInlineValuesProvider(selector, provider), {
				provider,
				onDidChangeInlineValues: eventEmitter
			}];
		}
	};
}));
//#endregion
//#region src/language-client/linkedEditingRange.ts
var LinkedEditingFeature;
var init_linkedEditingRange = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	LinkedEditingFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.LinkedEditingRangeRequest.type);
		}
		fillClientCapabilities(capabilities) {
			const linkedEditingSupport = ensure(ensure(capabilities, "textDocument"), "linkedEditingRange");
			linkedEditingSupport.dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			let [id, options] = this.getRegistration(documentSelector, capabilities.linkedEditingRangeProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideLinkedEditingRanges: (document, position, token) => {
				const client = this._client;
				const provideLinkedEditing = (document, position, token) => {
					const params = client.code2ProtocolConverter.asTextDocumentPositionParams(document, position);
					return this.sendRequest(import_main$1.LinkedEditingRangeRequest.type, params, token);
				};
				const middleware = client.middleware;
				return middleware.provideLinkedEditingRange ? middleware.provideLinkedEditingRange(document, position, token, provideLinkedEditing) : provideLinkedEditing(document, position, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerLinkedEditingRangeProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/progressPart.ts
function validPercent(n) {
	if (typeof n !== "number") return false;
	return n >= 0 && n <= 100;
}
var ProgressPart;
var init_progressPart = __esmMin((() => {
	init_util$7();
	init_protocol();
	init_window();
	ProgressPart = class {
		client;
		token;
		disposables = [];
		_cancelled = false;
		_percent = 0;
		_started = false;
		progress;
		_resolve;
		_reject;
		constructor(client, token, done) {
			this.client = client;
			this.token = token;
			this.disposables.push(client.onProgress(import_main$1.WorkDoneProgress.type, this.token, (value) => {
				switch (value.kind) {
					case "begin":
						this.begin(value);
						break;
					case "report":
						this.report(value);
						break;
					case "end":
						this.done(value.message);
						if (done) done(this);
						break;
				}
			}));
		}
		begin(params) {
			if (this._started || this._cancelled) return false;
			this._started = true;
			window_default.withProgress({
				source: `language-client-${this.client.id}`,
				cancellable: params.cancellable,
				title: params.title
			}, (progress, token) => {
				this.progress = progress;
				this.report(params);
				if (this._cancelled) return Promise.resolve();
				this.disposables.push(token.onCancellationRequested(() => {
					this.client.sendNotification(import_main$1.WorkDoneProgressCancelNotification.type, { token: this.token });
					this.cancel();
				}));
				return new Promise((resolve, reject) => {
					this._resolve = resolve;
					this._reject = reject;
				});
			});
			return true;
		}
		report(params) {
			if (this.progress) {
				let msg = {};
				if (params.message) msg.message = params.message;
				if (validPercent(params.percentage)) {
					msg.increment = Math.round(params.percentage) - this._percent;
					this._percent = Math.round(params.percentage);
				}
				if (Object.keys(msg).length > 0) this.progress.report(msg);
			}
		}
		cancel() {
			if (this._cancelled) return;
			this.cleanUp();
			if (this._reject !== void 0) {
				this._reject();
				this._resolve = void 0;
				this._reject = void 0;
			}
		}
		done(message) {
			if (this.progress) {
				let msg = {};
				if (message) msg.message = message;
				if (typeof this._percent === "number" && this._percent > 0) msg.increment = 100 - this._percent;
				this.progress.report(msg);
			}
			this.cleanUp();
			if (this._resolve) {
				this._resolve();
				this._resolve = void 0;
				this._reject = void 0;
			}
		}
		cleanUp() {
			this._cancelled = true;
			this.progress = void 0;
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/language-client/progress.ts
var ProgressFeature;
var init_progress = __esmMin((() => {
	init_protocol();
	init_features();
	init_progressPart();
	ProgressFeature = class {
		_client;
		activeParts = /* @__PURE__ */ new Set();
		constructor(_client) {
			this._client = _client;
		}
		get method() {
			return import_main$1.WorkDoneProgressCreateRequest.method;
		}
		fillInitializeParams(_params) {}
		fillClientCapabilities(capabilities) {
			ensure(capabilities, "window").workDoneProgress = true;
		}
		getState() {
			return {
				kind: "window",
				id: import_main$1.WorkDoneProgressCreateRequest.method,
				registrations: this.activeParts.size > 0
			};
		}
		initialize() {
			let client = this._client;
			const deleteHandler = (part) => {
				this.activeParts.delete(part);
			};
			const createHandler = (params) => {
				this.activeParts.add(new ProgressPart(this._client, params.token, deleteHandler));
			};
			client.onRequest(import_main$1.WorkDoneProgressCreateRequest.type, createHandler);
		}
		dispose() {
			for (const part of this.activeParts) part.done();
			this.activeParts.clear();
		}
	};
}));
//#endregion
//#region src/language-client/reference.ts
var ReferencesFeature;
var init_reference = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	ReferencesFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.ReferencesRequest.type);
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "references").dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.referencesProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideReferences: (document, position, options, token) => {
				const client = this._client;
				const _providerReferences = (document, position, options, token) => {
					return this.sendRequest(import_main$1.ReferencesRequest.type, client.code2ProtocolConverter.asReferenceParams(document, position, options), token);
				};
				const middleware = client.middleware;
				return middleware.provideReferences ? middleware.provideReferences(document, position, options, token, _providerReferences) : _providerReferences(document, position, options, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerReferencesProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/rename.ts
var RenameFeature;
var init_rename$1 = __esmMin((() => {
	init_main$2();
	init_languages();
	init_is();
	init_protocol();
	init_features();
	init_uuid();
	RenameFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.RenameRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let rename = ensure(ensure(capabilities, "textDocument"), "rename");
			rename.dynamicRegistration = true;
			rename.prepareSupport = true;
			rename.honorsChangeAnnotations = true;
			rename.prepareSupportDefaultBehavior = import_main$1.PrepareSupportDefaultBehavior.Identifier;
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.renameProvider);
			if (!options) return;
			if (boolean(capabilities.renameProvider)) options.prepareProvider = false;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = {
				provideRenameEdits: (document, position, newName, token) => {
					const client = this._client;
					const provideRenameEdits = (document, position, newName, token) => {
						const params = {
							textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
							position,
							newName
						};
						return this.sendRequest(import_main$1.RenameRequest.type, params, token);
					};
					const middleware = client.middleware;
					return middleware.provideRenameEdits ? middleware.provideRenameEdits(document, position, newName, token, provideRenameEdits) : provideRenameEdits(document, position, newName, token);
				},
				prepareRename: options.prepareProvider ? (document, position, token) => {
					const client = this._client;
					const prepareRename = (document, position, token) => {
						const params = {
							textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
							position
						};
						return this.sendRequest(import_main$1.PrepareRenameRequest.type, params, token).then((result) => {
							if (!result) return null;
							if (Range.is(result)) return result;
							else if (this.isDefaultBehavior(result)) return result.defaultBehavior === true ? null : Promise.reject(/* @__PURE__ */ new Error(`The element can't be renamed.`));
							else if (result && Range.is(result.range)) return {
								range: result.range,
								placeholder: result.placeholder
							};
						});
					};
					const middleware = client.middleware;
					return middleware.prepareRename ? middleware.prepareRename(document, position, token, prepareRename) : prepareRename(document, position, token);
				} : void 0
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerRenameProvider(options.documentSelector, provider), provider];
		}
		isDefaultBehavior(value) {
			const candidate = value;
			return candidate && boolean(candidate.defaultBehavior);
		}
	};
}));
//#endregion
//#region src/language-client/selectionRange.ts
var SelectionRangeFeature;
var init_selectionRange$1 = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	SelectionRangeFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.SelectionRangeRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let capability = ensure(ensure(capabilities, "textDocument"), "selectionRange");
			capability.dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			let [id, options] = this.getRegistration(documentSelector, capabilities.selectionRangeProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideSelectionRanges: (document, positions, token) => {
				const client = this._client;
				const provideSelectionRanges = (document, positions, token) => {
					const requestParams = {
						textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
						positions
					};
					return this.sendRequest(import_main$1.SelectionRangeRequest.type, requestParams, token);
				};
				const middleware = client.middleware;
				return middleware.provideSelectionRanges ? middleware.provideSelectionRanges(document, positions, token, provideSelectionRanges) : provideSelectionRanges(document, positions, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerSelectionRangeProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/semanticTokens.ts
var SemanticTokensFeature;
var init_semanticTokens$1 = __esmMin((() => {
	init_main$2();
	init_languages();
	init_is();
	init_protocol();
	init_features();
	SemanticTokensFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.SemanticTokensRegistrationType.type);
		}
		fillClientCapabilities(capabilities) {
			const capability = ensure(ensure(capabilities, "textDocument"), "semanticTokens");
			capability.dynamicRegistration = true;
			capability.tokenTypes = [
				SemanticTokenTypes.namespace,
				SemanticTokenTypes.type,
				SemanticTokenTypes.class,
				SemanticTokenTypes.enum,
				SemanticTokenTypes.interface,
				SemanticTokenTypes.struct,
				SemanticTokenTypes.typeParameter,
				SemanticTokenTypes.parameter,
				SemanticTokenTypes.variable,
				SemanticTokenTypes.property,
				SemanticTokenTypes.enumMember,
				SemanticTokenTypes.event,
				SemanticTokenTypes.function,
				SemanticTokenTypes.method,
				SemanticTokenTypes.macro,
				SemanticTokenTypes.keyword,
				SemanticTokenTypes.modifier,
				SemanticTokenTypes.comment,
				SemanticTokenTypes.string,
				SemanticTokenTypes.number,
				SemanticTokenTypes.regexp,
				SemanticTokenTypes.decorator,
				SemanticTokenTypes.label,
				SemanticTokenTypes.operator
			];
			capability.tokenModifiers = [
				SemanticTokenModifiers.declaration,
				SemanticTokenModifiers.definition,
				SemanticTokenModifiers.readonly,
				SemanticTokenModifiers.static,
				SemanticTokenModifiers.deprecated,
				SemanticTokenModifiers.abstract,
				SemanticTokenModifiers.async,
				SemanticTokenModifiers.modification,
				SemanticTokenModifiers.documentation,
				SemanticTokenModifiers.defaultLibrary
			];
			capability.formats = [import_main$1.TokenFormat.Relative];
			capability.requests = {
				range: true,
				full: { delta: true }
			};
			capability.multilineTokenSupport = false;
			capability.overlappingTokenSupport = false;
			capability.serverCancelSupport = true;
			capability.augmentsSyntaxTokens = true;
			ensure(ensure(capabilities, "workspace"), "semanticTokens").refreshSupport = true;
		}
		initialize(capabilities, documentSelector) {
			this._client.onRequest(import_main$1.SemanticTokensRefreshRequest.type, async () => {
				for (const provider of this.getAllProviders()) provider.onDidChangeSemanticTokensEmitter.fire();
			});
			const [id, options] = this.getRegistration(documentSelector, capabilities.semanticTokensProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const fullProvider = boolean(options.full) ? options.full : options.full !== void 0;
			const hasEditProvider = options.full !== void 0 && typeof options.full !== "boolean" && options.full.delta === true;
			const eventEmitter = new import_main$1.Emitter();
			const documentProvider = fullProvider ? {
				onDidChangeSemanticTokens: eventEmitter.event,
				provideDocumentSemanticTokens: (document, token) => {
					const client = this._client;
					const middleware = client.middleware;
					const provideDocumentSemanticTokens = (document, token) => {
						const params = { textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document) };
						return this.sendRequest(import_main$1.SemanticTokensRequest.type, params, token);
					};
					return middleware.provideDocumentSemanticTokens ? middleware.provideDocumentSemanticTokens(document, token, provideDocumentSemanticTokens) : provideDocumentSemanticTokens(document, token);
				},
				provideDocumentSemanticTokensEdits: hasEditProvider ? (document, previousResultId, token) => {
					const client = this._client;
					const middleware = client.middleware;
					const provideDocumentSemanticTokensEdits = (document, previousResultId, token) => {
						const params = {
							textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
							previousResultId
						};
						return this.sendRequest(import_main$1.SemanticTokensDeltaRequest.type, params, token);
					};
					return middleware.provideDocumentSemanticTokensEdits ? middleware.provideDocumentSemanticTokensEdits(document, previousResultId, token, provideDocumentSemanticTokensEdits) : provideDocumentSemanticTokensEdits(document, previousResultId, token);
				} : void 0
			} : void 0;
			const rangeProvider = options.range === true ? { provideDocumentRangeSemanticTokens: (document, range, token) => {
				const client = this._client;
				const middleware = client.middleware;
				const provideDocumentRangeSemanticTokens = (document, range, token) => {
					const params = {
						textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
						range
					};
					return this.sendRequest(import_main$1.SemanticTokensRangeRequest.type, params, token);
				};
				return middleware.provideDocumentRangeSemanticTokens ? middleware.provideDocumentRangeSemanticTokens(document, range, token, provideDocumentRangeSemanticTokens) : provideDocumentRangeSemanticTokens(document, range, token);
			} } : void 0;
			const disposables = [];
			if (documentProvider !== void 0) {
				this._client.attachExtensionName(documentProvider);
				disposables.push(languages_default.registerDocumentSemanticTokensProvider(options.documentSelector, documentProvider, options.legend));
			}
			if (rangeProvider !== void 0) {
				this._client.attachExtensionName(rangeProvider);
				disposables.push(languages_default.registerDocumentRangeSemanticTokensProvider(options.documentSelector, rangeProvider, options.legend));
			}
			return [import_main$1.Disposable.create(() => disposables.forEach((item) => item.dispose())), {
				range: rangeProvider,
				full: documentProvider,
				onDidChangeSemanticTokensEmitter: eventEmitter
			}];
		}
	};
}));
//#endregion
//#region src/language-client/signatureHelp.ts
var SignatureHelpFeature;
var init_signatureHelp = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	init_uuid();
	SignatureHelpFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.SignatureHelpRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let config = ensure(ensure(capabilities, "textDocument"), "signatureHelp");
			config.dynamicRegistration = true;
			config.contextSupport = true;
			config.signatureInformation = {
				documentationFormat: this._client.supportedMarkupKind,
				activeParameterSupport: true,
				parameterInformation: { labelOffsetSupport: true }
			};
		}
		initialize(capabilities, documentSelector) {
			const options = this.getRegistrationOptions(documentSelector, capabilities.signatureHelpProvider);
			if (!options) return;
			this.register({
				id: generateUuid(),
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideSignatureHelp: (document, position, token, context) => {
				const client = this._client;
				const providerSignatureHelp = (document, position, context, token) => {
					return this.sendRequest(import_main$1.SignatureHelpRequest.type, client.code2ProtocolConverter.asSignatureHelpParams(document, position, context), token);
				};
				const middleware = client.middleware;
				return middleware.provideSignatureHelp ? middleware.provideSignatureHelp(document, position, context, token, providerSignatureHelp) : providerSignatureHelp(document, position, context, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerSignatureHelpProvider(options.documentSelector, provider, options.triggerCharacters), provider];
		}
	};
}));
//#endregion
//#region src/language-client/textDocumentContent.ts
var import_api$1, TextDocumentContentFeature;
var init_textDocumentContent = __esmMin((() => {
	import_api$1 = require_api();
	init_esm();
	init_util$7();
	init_array();
	init_workspace$1();
	init_features();
	init_uuid();
	TextDocumentContentFeature = class {
		_client;
		_registrations = /* @__PURE__ */ new Map();
		constructor(client) {
			this._client = client;
		}
		getState() {
			const registrations = this._registrations.size > 0;
			return {
				kind: "workspace",
				id: import_api$1.TextDocumentContentRequest.method,
				registrations
			};
		}
		get registrationType() {
			return import_api$1.TextDocumentContentRequest.type;
		}
		getProviders() {
			const result = [];
			for (const registration of this._registrations.values()) result.push(...registration.providers);
			return result;
		}
		fillClientCapabilities(capabilities) {
			const textDocumentContent = ensure(ensure(capabilities, "workspace"), "textDocumentContent");
			textDocumentContent.dynamicRegistration = true;
		}
		initialize(capabilities) {
			this._client.onRequest(import_api$1.TextDocumentContentRefreshRequest.type, async (params) => {
				const uri = URI.parse(params.uri);
				for (const registrations of this._registrations.values()) for (const provider of registrations.providers) if (provider.scheme === uri.scheme) provider.onDidChangeEmitter.fire(uri);
			});
			const capability = defaultValue(defaultValue(capabilities, {}).workspace, {}).textDocumentContent;
			if (capability) {
				const id = import_api$1.StaticRegistrationOptions.hasId(capability) ? capability.id : generateUuid();
				this.register({
					id,
					registerOptions: capability
				});
			}
		}
		register(data) {
			const registrations = [];
			const disposables = [];
			for (const scheme of toArray(data.registerOptions.schemes)) {
				const [disposable, registration] = this.registerTextDocumentContentProvider(scheme);
				disposables.push(disposable);
				registrations.push(registration);
			}
			this._registrations.set(data.id, {
				disposable: import_api$1.Disposable.create(() => {
					disposeAll(disposables);
				}),
				providers: registrations
			});
		}
		registerTextDocumentContentProvider(scheme) {
			const eventEmitter = new import_api$1.Emitter();
			const provider = {
				onDidChange: eventEmitter.event,
				provideTextDocumentContent: (uri, token) => {
					const client = this._client;
					const provideTextDocumentContent = (uri, token) => {
						const params = { uri: uri.toString() };
						return client.sendRequest(import_api$1.TextDocumentContentRequest.type, params, token).then((result) => {
							return result?.text;
						}, (error) => {
							return client.handleFailedRequest(import_api$1.TextDocumentContentRequest.type, token, error, null);
						});
					};
					const middleware = client.middleware;
					return middleware.provideTextDocumentContent ? middleware.provideTextDocumentContent(uri, token, provideTextDocumentContent) : provideTextDocumentContent(uri, token);
				}
			};
			return [workspace_default.registerTextDocumentContentProvider(scheme, provider), {
				scheme,
				onDidChangeEmitter: eventEmitter,
				provider
			}];
		}
		unregister(id) {
			const registration = this._registrations.get(id);
			if (registration !== void 0) {
				this._registrations.delete(id);
				registration.disposable.dispose();
			}
		}
		dispose() {
			this._registrations.forEach((value) => {
				value.disposable.dispose();
			});
			this._registrations.clear();
		}
	};
}));
//#endregion
//#region src/language-client/textSynchronization.ts
var DidOpenTextDocumentFeature, DidCloseTextDocumentFeature, DidChangeTextDocumentFeature, WillSaveFeature, WillSaveWaitUntilFeature, DidSaveTextDocumentFeature;
var init_textSynchronization = __esmMin((() => {
	init_util$7();
	init_protocol();
	init_workspace$1();
	init_features();
	init_uuid();
	DidOpenTextDocumentFeature = class extends TextDocumentEventFeature {
		_syncedDocuments;
		_pendingOpenNotifications;
		_delayOpen;
		_pendingOpenListeners;
		constructor(client, syncedDocuments) {
			super(client, workspace_default.onDidOpenTextDocument, import_main$1.DidOpenTextDocumentNotification.type, "didOpen", (textDocument) => client.code2ProtocolConverter.asOpenTextDocumentParams(textDocument), TextDocumentEventFeature.textDocumentFilter);
			this._syncedDocuments = syncedDocuments;
			this._pendingOpenNotifications = /* @__PURE__ */ new Map();
			this._delayOpen = defaultValue(defaultValue(client.clientOptions.textSynchronization, {}).delayOpenNotifications, false);
		}
		async callback(document) {
			if (!this._delayOpen) return super.callback(document);
			else {
				if (!this.matches(document)) return;
				if (workspace_default.tabs.isVisible(document)) return super.callback(document);
				else this._pendingOpenNotifications.set(document.uri.toString(), document);
			}
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
		}
		get openDocuments() {
			return this._syncedDocuments.values();
		}
		initialize(capabilities, documentSelector) {
			let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
			if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) this.register({
				id: generateUuid(),
				registerOptions: { documentSelector }
			});
		}
		get registrationType() {
			return import_main$1.DidOpenTextDocumentNotification.type;
		}
		register(data) {
			super.register(data);
			if (!data.registerOptions.documentSelector) return;
			const onError = (error) => {
				this._client.error(`Sending document notification ${this._type.method} failed`, error);
			};
			workspace_default.textDocuments.forEach((textDocument) => {
				let uri = textDocument.uri;
				if (!this._syncedDocuments.has(uri)) this.callback(textDocument).catch(onError);
			});
			if (this._delayOpen && this._pendingOpenListeners === void 0) {
				this._pendingOpenListeners = [];
				const tabsModel = workspace_default.tabs;
				this._pendingOpenListeners.push(tabsModel.onClose((closed) => {
					for (const uri of closed) this._pendingOpenNotifications.delete(uri.toString());
				}));
				this._pendingOpenListeners.push(tabsModel.onOpen((opened) => {
					for (const uri of opened) {
						const document = this._pendingOpenNotifications.get(uri.toString());
						if (document !== void 0) {
							super.callback(document).catch(onError);
							this._pendingOpenNotifications.delete(uri.toString());
						}
					}
				}));
				this._pendingOpenListeners.push(workspace_default.onDidCloseTextDocument((document) => {
					this._pendingOpenNotifications.delete(document.uri);
				}));
			}
		}
		/**
		* Sends any pending open notifications unless they are for the document
		* being closed.
		* @param closingDocument The document being closed.
		* @returns Whether a pending open notification was dropped because it was for the closing document.
		*/
		async sendPendingOpenNotifications(closingDocument) {
			if (!this._delayOpen) return;
			const notifications = Array.from(this._pendingOpenNotifications.values());
			this._pendingOpenNotifications.clear();
			let didDropOpenNotification = false;
			for (const notification of notifications) {
				if (closingDocument !== void 0 && notification.uri.toString() === closingDocument) {
					didDropOpenNotification = true;
					continue;
				}
				await super.callback(notification);
			}
			return didDropOpenNotification;
		}
		notificationSent(textDocument, type, params) {
			super.notificationSent(textDocument, type, params);
			this._syncedDocuments.set(textDocument.uri.toString(), textDocument);
		}
		dispose() {
			this._pendingOpenNotifications.clear();
			disposeAll(this._pendingOpenListeners ?? []);
			this._pendingOpenListeners = void 0;
			super.dispose();
		}
	};
	DidCloseTextDocumentFeature = class extends TextDocumentEventFeature {
		_syncedDocuments;
		constructor(client, _syncedDocuments) {
			super(client, workspace_default.onDidCloseTextDocument, import_main$1.DidCloseTextDocumentNotification.type, "didClose", (textDocument) => client.code2ProtocolConverter.asCloseTextDocumentParams(textDocument), TextDocumentEventFeature.textDocumentFilter);
			this._syncedDocuments = _syncedDocuments;
		}
		get registrationType() {
			return import_main$1.DidCloseTextDocumentNotification.type;
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
			if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) this.register({
				id: generateUuid(),
				registerOptions: { documentSelector }
			});
		}
		notificationSent(textDocument, type, params) {
			super.notificationSent(textDocument, type, params);
			this._syncedDocuments.delete(textDocument.uri.toString());
		}
		unregister(id) {
			let selector = this._selectors.get(id);
			if (!selector) return;
			super.unregister(id);
			let selectors = this._selectors.values();
			this._syncedDocuments.forEach((textDocument) => {
				if (workspace_default.match(selector, textDocument) > 0 && !this._selectorFilter(selectors, textDocument)) this.sendNotification(textDocument).catch((error) => {
					this._client.error(`Sending document notification ${this._type.method} failed`, error);
				});
			});
		}
	};
	DidChangeTextDocumentFeature = class extends DynamicDocumentFeature {
		_listener;
		_changeData;
		_onNotificationSent;
		constructor(client) {
			super(client);
			this._changeData = /* @__PURE__ */ new Map();
			this._onNotificationSent = new import_main$1.Emitter();
		}
		*getDocumentSelectors() {
			for (const data of this._changeData.values()) yield data.documentSelector;
		}
		get registrationType() {
			return import_main$1.DidChangeTextDocumentNotification.type;
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
			if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.change !== void 0 && textDocumentSyncOptions.change !== import_main$1.TextDocumentSyncKind.None) this.register({
				id: generateUuid(),
				registerOptions: Object.assign({}, { documentSelector }, { syncKind: textDocumentSyncOptions.change })
			});
		}
		register(data) {
			if (!data.registerOptions.documentSelector) return;
			if (!this._listener) this._listener = workspace_default.onDidChangeTextDocument(this.callback, this);
			this._changeData.set(data.id, {
				documentSelector: data.registerOptions.documentSelector,
				syncKind: data.registerOptions.syncKind
			});
		}
		callback(event) {
			if (event.contentChanges.length === 0) return;
			const promises = [];
			for (const changeData of this._changeData.values()) if (workspace_default.match(changeData.documentSelector, event.document) > 0) {
				let middleware = this._client.middleware;
				let didChange;
				const client = this._client;
				if (changeData.syncKind === import_main$1.TextDocumentSyncKind.Incremental) didChange = async (event) => {
					const params = client.code2ProtocolConverter.asChangeTextDocumentParams(event);
					await this._client.sendNotification(import_main$1.DidChangeTextDocumentNotification.type, params);
					this.notificationSent(event, import_main$1.DidChangeTextDocumentNotification.type, params);
				};
				else if (changeData.syncKind === import_main$1.TextDocumentSyncKind.Full) didChange = async (event) => {
					const params = client.code2ProtocolConverter.asFullChangeTextDocumentParams(event.document);
					await this._client.sendNotification(import_main$1.DidChangeTextDocumentNotification.type, params);
					this.notificationSent(event, import_main$1.DidChangeTextDocumentNotification.type, params);
				};
				if (didChange) promises.push(middleware.didChange ? middleware.didChange(event, didChange) : didChange(event));
			}
			return Promise.all(promises).then(void 0, (error) => {
				this._client.error(`Sending document notification ${import_main$1.DidChangeTextDocumentNotification.type.method} failed`, error);
			});
		}
		get onNotificationSent() {
			return this._onNotificationSent.event;
		}
		notificationSent(changeEvent, type, params) {
			this._onNotificationSent.fire({
				original: changeEvent,
				type,
				params
			});
		}
		unregister(id) {
			this._changeData.delete(id);
		}
		dispose() {
			this._changeData.clear();
			if (this._listener) {
				this._listener.dispose();
				this._listener = void 0;
			}
		}
		getProvider(document) {
			for (const changeData of this._changeData.values()) if (workspace_default.match(changeData.documentSelector, document) > 0) return { send: (event) => {
				return this.callback(event);
			} };
		}
	};
	WillSaveFeature = class extends TextDocumentEventFeature {
		constructor(client) {
			super(client, workspace_default.onWillSaveTextDocument, import_main$1.WillSaveTextDocumentNotification.type, "willSave", (willSaveEvent) => client.code2ProtocolConverter.asWillSaveTextDocumentParams(willSaveEvent), (selectors, willSaveEvent) => TextDocumentEventFeature.textDocumentFilter(selectors, willSaveEvent.document));
		}
		get registrationType() {
			return import_main$1.WillSaveTextDocumentNotification.type;
		}
		fillClientCapabilities(capabilities) {
			let value = ensure(ensure(capabilities, "textDocument"), "synchronization");
			value.willSave = true;
		}
		initialize(capabilities, documentSelector) {
			let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
			if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSave) this.register({
				id: generateUuid(),
				registerOptions: { documentSelector }
			});
		}
	};
	WillSaveWaitUntilFeature = class extends DynamicDocumentFeature {
		_listener;
		_selectors;
		constructor(client) {
			super(client);
			this._selectors = /* @__PURE__ */ new Map();
		}
		getDocumentSelectors() {
			return this._selectors.values();
		}
		get registrationType() {
			return import_main$1.WillSaveTextDocumentWaitUntilRequest.type;
		}
		fillClientCapabilities(capabilities) {
			let value = ensure(ensure(capabilities, "textDocument"), "synchronization");
			value.willSaveWaitUntil = true;
		}
		initialize(capabilities, documentSelector) {
			let textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
			if (documentSelector && documentSelector.length > 0 && textDocumentSyncOptions && textDocumentSyncOptions.willSaveWaitUntil) this.register({
				id: generateUuid(),
				registerOptions: { documentSelector }
			});
		}
		register(data) {
			if (data.registerOptions.documentSelector) {
				if (!this._listener) this._listener = workspace_default.onWillSaveTextDocument(this.callback, this);
				this._selectors.set(data.id, data.registerOptions.documentSelector);
			}
		}
		callback(event) {
			if (TextDocumentEventFeature.textDocumentFilter(this._selectors.values(), event.document)) {
				const client = this._client;
				let middleware = this._client.middleware;
				let willSaveWaitUntil = (event) => {
					return this.sendRequest(import_main$1.WillSaveTextDocumentWaitUntilRequest.type, client.code2ProtocolConverter.asWillSaveTextDocumentParams(event), import_main$1.CancellationToken.None);
				};
				event.waitUntil(middleware.willSaveWaitUntil ? middleware.willSaveWaitUntil(event, willSaveWaitUntil) : willSaveWaitUntil(event));
			}
		}
		unregister(id) {
			this._selectors.delete(id);
			if (this._selectors.size === 0 && this._listener) {
				this._listener.dispose();
				this._listener = void 0;
			}
		}
		dispose() {
			this._selectors.clear();
			if (this._listener) {
				this._listener.dispose();
				this._listener = void 0;
			}
		}
	};
	DidSaveTextDocumentFeature = class extends TextDocumentEventFeature {
		_includeText;
		constructor(client) {
			super(client, workspace_default.onDidSaveTextDocument, import_main$1.DidSaveTextDocumentNotification.type, "didSave", (textDocument) => client.code2ProtocolConverter.asSaveTextDocumentParams(textDocument, this._includeText), TextDocumentEventFeature.textDocumentFilter);
			this._includeText = false;
		}
		get registrationType() {
			return import_main$1.DidSaveTextDocumentNotification.type;
		}
		fillClientCapabilities(capabilities) {
			ensure(ensure(capabilities, "textDocument"), "synchronization").didSave = true;
		}
		initialize(capabilities, documentSelector) {
			const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
			if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.save) {
				const saveOptions = typeof textDocumentSyncOptions.save === "boolean" ? { includeText: false } : { includeText: !!textDocumentSyncOptions.save.includeText };
				this.register({
					id: generateUuid(),
					registerOptions: Object.assign({}, { documentSelector }, saveOptions)
				});
			}
		}
		register(data) {
			this._includeText = !!data.registerOptions.includeText;
			super.register(data);
		}
	};
}));
//#endregion
//#region src/language-client/typeDefinition.ts
var TypeDefinitionFeature;
var init_typeDefinition = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	TypeDefinitionFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.TypeDefinitionRequest.type);
		}
		fillClientCapabilities(capabilities) {
			const typeDefinitionSupport = ensure(ensure(capabilities, "textDocument"), "typeDefinition");
			typeDefinitionSupport.dynamicRegistration = true;
			typeDefinitionSupport.linkSupport = true;
		}
		initialize(capabilities, documentSelector) {
			const [id, options] = this.getRegistration(documentSelector, capabilities.typeDefinitionProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const provider = { provideTypeDefinition: (document, position, token) => {
				const client = this._client;
				const provideTypeDefinition = (document, position, token) => this.sendRequest(import_main$1.TypeDefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document, position), token);
				const middleware = client.middleware;
				return middleware.provideTypeDefinition ? middleware.provideTypeDefinition(document, position, token, provideTypeDefinition) : provideTypeDefinition(document, position, token);
			} };
			this._client.attachExtensionName(provider);
			return [languages_default.registerTypeDefinitionProvider(options.documentSelector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/typeHierarchy.ts
var TypeHierarchyFeature;
var init_typeHierarchy$1 = __esmMin((() => {
	init_languages();
	init_protocol();
	init_features();
	TypeHierarchyFeature = class extends TextDocumentLanguageFeature {
		constructor(client) {
			super(client, import_main$1.TypeHierarchyPrepareRequest.type);
		}
		fillClientCapabilities(capabilities) {
			const capability = ensure(ensure(capabilities, "textDocument"), "typeHierarchy");
			capability.dynamicRegistration = true;
		}
		initialize(capabilities, documentSelector) {
			const [id, options] = this.getRegistration(documentSelector, capabilities.typeHierarchyProvider);
			if (!id || !options) return;
			this.register({
				id,
				registerOptions: options
			});
		}
		registerLanguageProvider(options) {
			const client = this._client;
			const selector = options.documentSelector;
			const provider = {
				prepareTypeHierarchy: (document, position, token) => {
					const prepareTypeHierarchy = (document, position, token) => {
						const params = client.code2ProtocolConverter.asTextDocumentPositionParams(document, position);
						return this.sendRequest(import_main$1.TypeHierarchyPrepareRequest.type, params, token);
					};
					const middleware = client.middleware;
					return middleware.prepareTypeHierarchy ? middleware.prepareTypeHierarchy(document, position, token, prepareTypeHierarchy) : prepareTypeHierarchy(document, position, token);
				},
				provideTypeHierarchySupertypes: (item, token) => {
					const provideTypeHierarchySupertypes = (item, token) => {
						return this.sendRequest(import_main$1.TypeHierarchySupertypesRequest.type, { item }, token);
					};
					const middleware = client.middleware;
					return middleware.provideTypeHierarchySupertypes ? middleware.provideTypeHierarchySupertypes(item, token, provideTypeHierarchySupertypes) : provideTypeHierarchySupertypes(item, token);
				},
				provideTypeHierarchySubtypes: (item, token) => {
					const provideTypeHierarchySubtypes = (item, token) => {
						return this.sendRequest(import_main$1.TypeHierarchySubtypesRequest.type, { item }, token);
					};
					const middleware = client.middleware;
					return middleware.provideTypeHierarchySubtypes ? middleware.provideTypeHierarchySubtypes(item, token, provideTypeHierarchySubtypes) : provideTypeHierarchySubtypes(item, token);
				}
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerTypeHierarchyProvider(selector, provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/utils/index.ts
function isValidRequestType(type) {
	if (typeof type == "string") return true;
	for (let clz of requestTypes) if (type instanceof clz) return true;
	return false;
}
function isValidNotificationType(type) {
	if (typeof type == "string") return true;
	for (let clz of notificationTypes) if (type instanceof clz) return true;
	return false;
}
function getLocale() {
	const lang = process.env.LANG;
	if (!lang) return "en";
	return lang.split(".")[0];
}
function toMethod(type) {
	return string(type) ? type : type.method;
}
function currentTimeStamp() {
	return (/* @__PURE__ */ new Date()).toLocaleTimeString();
}
function getTracePrefix(data) {
	if (data.isLSPMessage && data.type) return `[LSP - ${currentTimeStamp()}] `;
	return `[Trace - ${currentTimeStamp()}] `;
}
function getParameterStructures(kind) {
	switch (kind) {
		case "auto": return import_main.ParameterStructures.auto;
		case "byPosition": return import_main.ParameterStructures.byPosition;
		case "byName": return import_main.ParameterStructures.byName;
		default: return import_main.ParameterStructures.auto;
	}
}
function fixRequestType(type, params) {
	if (isValidRequestType(type)) return type;
	switch (typeof type.numberOfParams === "number" ? type.numberOfParams : params.length) {
		case 0: return new import_main.RequestType0(type.method);
		case 1:
			if (type["parameterStructures"] != null) return new import_main.RequestType1(type.method, getParameterStructures(type["parameterStructures"].toString()));
			return new import_main.RequestType1(type.method);
		case 2: return new import_main.RequestType2(type.method);
		case 3: return new import_main.RequestType3(type.method);
		case 4: return new import_main.RequestType4(type.method);
		case 5: return new import_main.RequestType5(type.method);
		case 6: return new import_main.RequestType6(type.method);
		case 7: return new import_main.RequestType7(type.method);
		case 8: return new import_main.RequestType8(type.method);
		case 9: return new import_main.RequestType9(type.method);
		default: return new import_main.RequestType(type.method);
	}
}
function fixNotificationType(type, params) {
	if (isValidNotificationType(type)) return type;
	switch (typeof type.numberOfParams === "number" ? type.numberOfParams : params.length) {
		case 0: return new import_main.NotificationType0(type.method);
		case 1:
			if (type["parameterStructures"] != null) return new import_main.NotificationType1(type.method, getParameterStructures(type["parameterStructures"].toString()));
			return new import_main.NotificationType1(type.method);
		case 2: return new import_main.NotificationType2(type.method);
		case 3: return new import_main.NotificationType3(type.method);
		case 4: return new import_main.NotificationType4(type.method);
		case 5: return new import_main.NotificationType5(type.method);
		case 6: return new import_main.NotificationType6(type.method);
		case 7: return new import_main.NotificationType7(type.method);
		case 8: return new import_main.NotificationType8(type.method);
		case 9: return new import_main.NotificationType9(type.method);
		default: return new import_main.NotificationType(type.method);
	}
}
function data2String(data, color = false) {
	if (data instanceof import_main$1.ResponseError) {
		const responseError = data;
		return `  Message: ${responseError.message}\n  Code: ${responseError.code} ${responseError.data ? "\n" + responseError.data.toString() : ""}`;
	}
	if (data instanceof Error) {
		if (string(data.stack)) return data.stack;
		return data.message;
	}
	if (string(data)) return data;
	return (0, util.inspect)(data, false, null, color);
}
function createClientPipeTransport(pipeName, encoding = "utf-8") {
	let connectResolve;
	const connected = new Promise((resolve, _reject) => {
		connectResolve = resolve;
	});
	return new Promise((resolve, reject) => {
		const server = net$2.createServer((socket) => {
			server.close();
			connectResolve([new import_main.SocketMessageReader(socket, encoding), new import_main.SocketMessageWriter(socket, encoding)]);
		});
		server.on("error", reject);
		server.listen(pipeName, () => {
			server.removeListener("error", reject);
			resolve({
				onConnected: () => {
					return connected;
				},
				dispose: () => {
					server.close();
				}
			});
		});
	});
}
function createClientSocketTransport(port, encoding = "utf-8") {
	let connectResolve;
	const connected = new Promise((resolve, _reject) => {
		connectResolve = resolve;
	});
	return new Promise((resolve, reject) => {
		const server = net$2.createServer((socket) => {
			server.close();
			connectResolve([new import_main.SocketMessageReader(socket, encoding), new import_main.SocketMessageWriter(socket, encoding)]);
		});
		server.on("error", reject);
		server.listen(port, "127.0.0.1", () => {
			server.removeListener("error", reject);
			resolve({
				onConnected: () => {
					return connected;
				},
				dispose: () => {
					server.close();
				}
			});
		});
	});
}
var import_main, requestTypes, notificationTypes;
var init_utils = __esmMin((() => {
	import_main = require_main();
	init_is();
	init_node();
	init_protocol();
	requestTypes = [import_main.RequestType, import_main.RequestType0];
	notificationTypes = [import_main.NotificationType, import_main.NotificationType0];
}));
//#endregion
//#region src/language-client/utils/async.ts
var Delayer;
var init_async = __esmMin((() => {
	init_protocol();
	Delayer = class {
		defaultDelay;
		timeout;
		completionPromise;
		onSuccess;
		task;
		constructor(defaultDelay) {
			this.defaultDelay = defaultDelay;
			this.timeout = void 0;
			this.completionPromise = void 0;
			this.onSuccess = void 0;
			this.task = void 0;
		}
		trigger(task, delay = this.defaultDelay) {
			this.task = task;
			if (delay >= 0) this.cancelTimeout();
			if (!this.completionPromise) this.completionPromise = new Promise((resolve) => {
				this.onSuccess = resolve;
			}).then(() => {
				this.completionPromise = void 0;
				this.onSuccess = void 0;
				let result = this.task();
				this.task = void 0;
				return result;
			});
			if (delay >= 0 || this.timeout === void 0) this.timeout = (0, import_main$1.RAL)().timer.setTimeout(() => {
				this.timeout = void 0;
				this.onSuccess(void 0);
			}, delay >= 0 ? delay : this.defaultDelay);
			return this.completionPromise;
		}
		forceDelivery() {
			if (!this.completionPromise) return;
			this.cancelTimeout();
			let result = this.task();
			this.completionPromise = void 0;
			this.onSuccess = void 0;
			this.task = void 0;
			return result;
		}
		isTriggered() {
			return this.timeout !== void 0;
		}
		cancel() {
			this.cancelTimeout();
			this.completionPromise = void 0;
		}
		dispose() {
			this.cancelTimeout();
		}
		cancelTimeout() {
			if (this.timeout !== void 0) {
				this.timeout.dispose();
				this.timeout = void 0;
			}
		}
	};
}));
//#endregion
//#region src/language-client/utils/codeConverter.ts
function createConverter(uriConverter) {
	uriConverter = uriConverter || ((value) => value.toString());
	function asUri(value) {
		if (URI.isUri(value)) return uriConverter(value);
		else return uriConverter(URI.parse(value));
	}
	function asTextDocumentItem(textDocument) {
		return {
			uri: asUri(textDocument.uri),
			languageId: textDocument.languageId,
			version: textDocument.version,
			text: textDocument.getText()
		};
	}
	function asTextDocumentIdentifier(textDocument) {
		return { uri: asUri(textDocument.uri) };
	}
	function asVersionedTextDocumentIdentifier(textDocument) {
		return {
			uri: asUri(textDocument.uri),
			version: textDocument.version
		};
	}
	function asOpenTextDocumentParams(textDocument) {
		return { textDocument: asTextDocumentItem(textDocument) };
	}
	function asChangeTextDocumentParams(event) {
		let { textDocument, contentChanges } = event;
		return {
			textDocument: {
				uri: asUri(textDocument.uri),
				version: textDocument.version
			},
			contentChanges: contentChanges.slice()
		};
	}
	function asFullChangeTextDocumentParams(textDocument) {
		return {
			textDocument: asVersionedTextDocumentIdentifier(textDocument),
			contentChanges: [{ text: textDocument.getText() }]
		};
	}
	function asCloseTextDocumentParams(textDocument) {
		return { textDocument: asTextDocumentIdentifier(textDocument) };
	}
	function asSaveTextDocumentParams(textDocument, includeText = false) {
		let result = { textDocument: asVersionedTextDocumentIdentifier(textDocument) };
		if (includeText) result.text = textDocument.getText();
		return result;
	}
	function asWillSaveTextDocumentParams(event) {
		return {
			textDocument: asTextDocumentIdentifier(event.document),
			reason: event.reason
		};
	}
	function asDidCreateFilesParams(event) {
		return { files: event.files.map((file) => ({ uri: asUri(file) })) };
	}
	function asDidRenameFilesParams(event) {
		return { files: event.files.map((file) => ({
			oldUri: asUri(file.oldUri),
			newUri: asUri(file.newUri)
		})) };
	}
	function asDidDeleteFilesParams(event) {
		return { files: event.files.map((file) => ({ uri: asUri(file) })) };
	}
	function asWillCreateFilesParams(event) {
		return { files: event.files.map((file) => ({ uri: asUri(file) })) };
	}
	function asWillRenameFilesParams(event) {
		return { files: event.files.map((file) => ({
			oldUri: asUri(file.oldUri),
			newUri: asUri(file.newUri)
		})) };
	}
	function asWillDeleteFilesParams(event) {
		return { files: event.files.map((file) => ({ uri: asUri(file) })) };
	}
	function asTextDocumentPositionParams(textDocument, position) {
		return {
			textDocument: asTextDocumentIdentifier(textDocument),
			position
		};
	}
	function asCompletionParams(textDocument, position, context) {
		return {
			textDocument: asTextDocumentIdentifier(textDocument),
			position,
			context: omit$2(context, ["option"])
		};
	}
	function asSignatureHelpParams(textDocument, position, context) {
		return {
			textDocument: asTextDocumentIdentifier(textDocument),
			position,
			context
		};
	}
	function asReferenceParams(textDocument, position, options) {
		return {
			textDocument: asTextDocumentIdentifier(textDocument),
			position,
			context: { includeDeclaration: options.includeDeclaration }
		};
	}
	function asDocumentSymbolParams(textDocument) {
		return { textDocument: asTextDocumentIdentifier(textDocument) };
	}
	function asCodeLensParams(textDocument) {
		return { textDocument: asTextDocumentIdentifier(textDocument) };
	}
	function asDocumentLinkParams(textDocument) {
		return { textDocument: asTextDocumentIdentifier(textDocument) };
	}
	return {
		asUri,
		asTextDocumentItem,
		asTextDocumentIdentifier,
		asVersionedTextDocumentIdentifier,
		asOpenTextDocumentParams,
		asChangeTextDocumentParams,
		asFullChangeTextDocumentParams,
		asCloseTextDocumentParams,
		asSaveTextDocumentParams,
		asWillSaveTextDocumentParams,
		asDidCreateFilesParams,
		asDidRenameFilesParams,
		asDidDeleteFilesParams,
		asWillCreateFilesParams,
		asWillRenameFilesParams,
		asWillDeleteFilesParams,
		asTextDocumentPositionParams,
		asCompletionParams,
		asSignatureHelpParams,
		asReferenceParams,
		asDocumentSymbolParams,
		asCodeLensParams,
		asDocumentLinkParams
	};
}
var init_codeConverter = __esmMin((() => {
	init_esm();
	init_lodash();
}));
//#endregion
//#region src/language-client/utils/errorHandler.ts
function toCloseHandlerResult(result) {
	if (typeof result === "number") return { action: result };
	return result;
}
var CloseAction, ErrorAction, DefaultErrorHandler;
var init_errorHandler = __esmMin((() => {
	CloseAction = /* @__PURE__ */ function(CloseAction) {
		/**
		* Don't restart the server. The connection stays closed.
		*/
		CloseAction[CloseAction["DoNotRestart"] = 1] = "DoNotRestart";
		/**
		* Restart the server.
		*/
		CloseAction[CloseAction["Restart"] = 2] = "Restart";
		return CloseAction;
	}({});
	ErrorAction = /* @__PURE__ */ function(ErrorAction) {
		/**
		* Continue running the server.
		*/
		ErrorAction[ErrorAction["Continue"] = 1] = "Continue";
		/**
		* Shutdown the server.
		*/
		ErrorAction[ErrorAction["Shutdown"] = 2] = "Shutdown";
		return ErrorAction;
	}({});
	DefaultErrorHandler = class {
		name;
		maxRestartCount;
		outputChannel;
		restarts;
		milliseconds = 180 * 1e3;
		constructor(name, maxRestartCount, outputChannel) {
			this.name = name;
			this.maxRestartCount = maxRestartCount;
			this.outputChannel = outputChannel;
			this.restarts = [];
		}
		error(_error, _message, count) {
			if (count && count <= 3) return { action: 1 };
			return { action: 2 };
		}
		closed() {
			this.restarts.push(Date.now());
			if (this.restarts.length < this.maxRestartCount) return { action: 2 };
			else if (this.restarts[this.restarts.length - 1] - this.restarts[0] <= this.milliseconds) {
				if (this.outputChannel) this.outputChannel.appendLine(`The server crashed ${this.maxRestartCount + 1} times in the last 3 minutes. The server will not be restarted.`);
				return {
					action: 1,
					message: `The "${this.name}" server crashed ${this.maxRestartCount + 1} times in the last 3 minutes. The server will not be restarted.`
				};
			} else {
				this.restarts.shift();
				return { action: 2 };
			}
		}
	};
}));
//#endregion
//#region src/language-client/utils/logger.ts
var logger$36, ConsoleLogger, NullLogger;
var init_logger = __esmMin((() => {
	init_logger$2();
	logger$36 = createLogger$1("language-client");
	ConsoleLogger = class {
		error(message) {
			logger$36.error(message);
		}
		warn(message) {
			logger$36.warn(message);
		}
		info(message) {
			logger$36.info(message);
		}
		log(message) {
			logger$36.log(message);
		}
	};
	NullLogger = class {
		error(_message) {}
		warn(_message) {}
		info(_message) {}
		log(_message) {}
	};
}));
//#endregion
//#region src/language-client/workspaceFolders.ts
function access(target, key) {
	if (target === void 0) return;
	return target[key];
}
function arrayDiff(left, right) {
	return left.filter((element) => !right.includes(element));
}
var WorkspaceFoldersFeature;
var init_workspaceFolders = __esmMin((() => {
	init_esm();
	init_util$7();
	init_array();
	init_fs();
	init_protocol();
	init_workspace$1();
	init_uuid();
	WorkspaceFoldersFeature = class {
		_client;
		_listeners = /* @__PURE__ */ new Map();
		_initialFolders;
		constructor(_client) {
			this._client = _client;
		}
		getState() {
			return {
				kind: "workspace",
				id: this.registrationType.method,
				registrations: this._listeners.size > 0
			};
		}
		get registrationType() {
			return import_main$1.DidChangeWorkspaceFoldersNotification.type;
		}
		getValidWorkspaceFolders() {
			let { workspaceFolders } = workspace_default;
			let ignoredRootPaths = this._client.clientOptions.ignoredRootPaths;
			let arr = isFalsyOrEmpty(ignoredRootPaths) ? workspaceFolders.slice(0) : workspaceFolders.filter((o) => {
				let fsPath = URI.parse(o.uri).fsPath;
				return ignoredRootPaths.every((p) => !sameFile(p, fsPath));
			});
			return arr.length > 0 ? arr : void 0;
		}
		fillInitializeParams(params) {
			const folders = this.getValidWorkspaceFolders();
			this.initializeWithFolders(folders);
			if (folders == null) params.workspaceFolders = null;
			else params.workspaceFolders = folders.map((folder) => this.asProtocol(folder));
		}
		initializeWithFolders(currentWorkspaceFolders) {
			this._initialFolders = currentWorkspaceFolders;
		}
		fillClientCapabilities(capabilities) {
			capabilities.workspace = defaultValue(capabilities.workspace, {});
			capabilities.workspace.workspaceFolders = true;
		}
		initialize(capabilities) {
			let client = this._client;
			client.onRequest(import_main$1.WorkspaceFoldersRequest.type, (token) => {
				let workspaceFolders = () => {
					let folders = this.getValidWorkspaceFolders();
					if (folders == null) return null;
					return folders.map((folder) => this.asProtocol(folder));
				};
				const middleware = client.middleware.workspace;
				return middleware && middleware.workspaceFolders ? middleware.workspaceFolders(token, workspaceFolders) : workspaceFolders(token);
			});
			const value = access(access(access(capabilities, "workspace"), "workspaceFolders"), "changeNotifications");
			let id;
			if (typeof value === "string") id = value;
			else if (value) id = generateUuid();
			if (id) this.register({
				id,
				registerOptions: void 0
			});
		}
		sendInitialEvent(currentWorkspaceFolders) {
			let promise;
			if (this._initialFolders && currentWorkspaceFolders) {
				const removed = arrayDiff(this._initialFolders, currentWorkspaceFolders);
				const added = arrayDiff(currentWorkspaceFolders, this._initialFolders);
				if (added.length > 0 || removed.length > 0) promise = this.doSendEvent(added, removed);
			} else if (this._initialFolders) promise = this.doSendEvent([], this._initialFolders);
			else if (currentWorkspaceFolders) promise = this.doSendEvent(currentWorkspaceFolders, []);
			if (promise) promise.catch(this.onNotificationError.bind(this));
		}
		onNotificationError(error) {
			this._client.error(`Sending notification ${import_main$1.DidChangeWorkspaceFoldersNotification.type.method} failed`, error);
		}
		doSendEvent(addedFolders, removedFolders) {
			let params = { event: {
				added: addedFolders.map((folder) => this.asProtocol(folder)),
				removed: removedFolders.map((folder) => this.asProtocol(folder))
			} };
			return this._client.sendNotification(import_main$1.DidChangeWorkspaceFoldersNotification.type, params);
		}
		register(data) {
			let id = data.id;
			let client = this._client;
			if (this._listeners.size == 0) {
				let disposable = workspace_default.onDidChangeWorkspaceFolders((event) => {
					let didChangeWorkspaceFolders = (e) => {
						return this.doSendEvent(e.added, e.removed);
					};
					let middleware = client.middleware.workspace;
					const promise = middleware && middleware.didChangeWorkspaceFolders ? middleware.didChangeWorkspaceFolders(event, didChangeWorkspaceFolders) : didChangeWorkspaceFolders(event);
					if (promise) promise.catch(this.onNotificationError.bind(this));
				});
				this._listeners.set(id, disposable);
				let workspaceFolders = this.getValidWorkspaceFolders();
				this.sendInitialEvent(workspaceFolders);
			}
		}
		unregister(id) {
			const disposable = this._listeners.get(id);
			if (disposable === void 0) return;
			this._listeners.delete(id);
			disposable.dispose();
		}
		dispose() {
			for (let disposable of this._listeners.values()) disposable.dispose();
			this._listeners.clear();
		}
		asProtocol(workspaceFolder) {
			return {
				uri: this._client.code2ProtocolConverter.asUri(URI.parse(workspaceFolder.uri)),
				name: workspaceFolder.name
			};
		}
	};
}));
//#endregion
//#region src/language-client/workspaceSymbol.ts
var WorkspaceFeature, WorkspaceSymbolFeature;
var init_workspaceSymbol = __esmMin((() => {
	init_languages();
	init_protocol();
	init_documentSymbol();
	init_features();
	init_uuid();
	WorkspaceFeature = class extends BaseFeature {
		_registrationType;
		_registrations = /* @__PURE__ */ new Map();
		constructor(_client, _registrationType) {
			super(_client);
			this._registrationType = _registrationType;
		}
		getState() {
			const registrations = this._registrations.size > 0;
			return {
				kind: "workspace",
				id: this._registrationType.method,
				registrations
			};
		}
		get registrationType() {
			return this._registrationType;
		}
		register(data) {
			const registration = this.registerLanguageProvider(data.registerOptions);
			this._registrations.set(data.id, {
				disposable: registration[0],
				provider: registration[1]
			});
		}
		unregister(id) {
			const registration = this._registrations.get(id);
			if (registration) {
				this._registrations.delete(id);
				registration.disposable.dispose();
			}
		}
		dispose() {
			this._registrations.forEach((value) => {
				value.disposable.dispose();
			});
			this._registrations.clear();
		}
		getProviders() {
			const result = [];
			for (const registration of this._registrations.values()) result.push(registration.provider);
			return result;
		}
	};
	WorkspaceSymbolFeature = class extends WorkspaceFeature {
		constructor(client) {
			super(client, import_main$1.WorkspaceSymbolRequest.type);
		}
		fillClientCapabilities(capabilities) {
			let symbolCapabilities = ensure(ensure(capabilities, "workspace"), "symbol");
			symbolCapabilities.dynamicRegistration = true;
			symbolCapabilities.symbolKind = { valueSet: SupportedSymbolKinds };
			symbolCapabilities.tagSupport = { valueSet: SupportedSymbolTags };
			symbolCapabilities.resolveSupport = { properties: ["location.range"] };
		}
		initialize(capabilities) {
			if (!capabilities.workspaceSymbolProvider) return;
			this.register({
				id: generateUuid(),
				registerOptions: capabilities.workspaceSymbolProvider === true ? { workDoneProgress: false } : capabilities.workspaceSymbolProvider
			});
		}
		registerLanguageProvider(options) {
			const provider = {
				provideWorkspaceSymbols: (query, token) => {
					const client = this._client;
					const provideWorkspaceSymbols = (query, token) => {
						return this.sendRequest(import_main$1.WorkspaceSymbolRequest.type, { query }, token);
					};
					const middleware = client.middleware;
					return middleware.provideWorkspaceSymbols ? middleware.provideWorkspaceSymbols(query, token, provideWorkspaceSymbols) : provideWorkspaceSymbols(query, token);
				},
				resolveWorkspaceSymbol: options.resolveProvider === true ? (item, token) => {
					const client = this._client;
					const resolveWorkspaceSymbol = (item, token) => {
						return this.sendRequest(import_main$1.WorkspaceSymbolResolveRequest.type, item, token);
					};
					const middleware = client.middleware;
					return middleware.resolveWorkspaceSymbol ? middleware.resolveWorkspaceSymbol(item, token, resolveWorkspaceSymbol) : resolveWorkspaceSymbol(item, token);
				} : void 0
			};
			this._client.attachExtensionName(provider);
			return [languages_default.registerWorkspaceSymbolProvider(provider), provider];
		}
	};
}));
//#endregion
//#region src/language-client/client.ts
function createConnection(input, output, errorHandler, closeHandler, options) {
	let connection = (0, import_main$1.createProtocolConnection)(input, output, new ConsoleLogger(), options);
	connection.onError((data) => {
		errorHandler(data[0], data[1], data[2]);
	});
	connection.onClose(closeHandler);
	return {
		id: "",
		listen: () => connection.listen(),
		hasPendingResponse: connection.hasPendingResponse,
		sendRequest: connection.sendRequest,
		onRequest: connection.onRequest,
		sendNotification: connection.sendNotification,
		onNotification: connection.onNotification,
		onProgress: connection.onProgress,
		sendProgress: connection.sendProgress,
		trace: (value, tracer, traceOptions) => {
			return connection.trace(value, tracer, traceOptions);
		},
		initialize: (params) => {
			return connection.sendRequest(import_main$1.InitializeRequest.type, params);
		},
		shutdown: () => {
			return connection.sendRequest(import_main$1.ShutdownRequest.type, void 0);
		},
		exit: () => {
			return connection.sendNotification(import_main$1.ExitNotification.type);
		},
		end: () => connection.end(),
		dispose: () => connection.dispose()
	};
}
var import_api, logger$35, redOpen, redClose, RevealOutputChannelOn, State, ClientState, MessageTransports, delayTime, BaseLanguageClient, ProposedFeatures;
var init_client = __esmMin((() => {
	import_api = require_api();
	init_main$2();
	init_esm();
	init_languages();
	init_logger$2();
	init_util$7();
	init_array();
	init_errors();
	init_extensionRegistry();
	init_fs();
	init_is();
	init_node();
	init_position();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	init_callHierarchy$1();
	init_codeAction();
	init_codeLens();
	init_colorProvider();
	init_completion$1();
	init_configuration();
	init_declaration();
	init_definition();
	init_diagnostic();
	init_documentHighlight();
	init_documentLink();
	init_documentSymbol();
	init_executeCommand();
	init_features();
	init_fileOperations();
	init_fileSystemWatcher$1();
	init_foldingRange();
	init_formatting();
	init_hover$1();
	init_implementation();
	init_inlayHint$1();
	init_inlineCompletion();
	init_inlineValue();
	init_linkedEditingRange();
	init_progress();
	init_progressPart();
	init_reference();
	init_rename$1();
	init_selectionRange$1();
	init_semanticTokens$1();
	init_signatureHelp();
	init_textDocumentContent();
	init_textSynchronization();
	init_typeDefinition();
	init_typeHierarchy$1();
	init_utils();
	init_async();
	init_codeConverter();
	init_errorHandler();
	init_logger();
	init_uuid();
	init_workspaceFolders();
	init_workspaceSymbol();
	logger$35 = createLogger$1("language-client-client");
	redOpen = "\x1B[31m";
	redClose = "\x1B[39m";
	RevealOutputChannelOn = /* @__PURE__ */ function(RevealOutputChannelOn) {
		RevealOutputChannelOn[RevealOutputChannelOn["Debug"] = 0] = "Debug";
		RevealOutputChannelOn[RevealOutputChannelOn["Info"] = 1] = "Info";
		RevealOutputChannelOn[RevealOutputChannelOn["Warn"] = 2] = "Warn";
		RevealOutputChannelOn[RevealOutputChannelOn["Error"] = 3] = "Error";
		RevealOutputChannelOn[RevealOutputChannelOn["Never"] = 4] = "Never";
		return RevealOutputChannelOn;
	}({});
	State = /* @__PURE__ */ function(State) {
		State[State["Stopped"] = 1] = "Stopped";
		State[State["Running"] = 2] = "Running";
		State[State["Starting"] = 3] = "Starting";
		State[State["StartFailed"] = 4] = "StartFailed";
		return State;
	}({});
	ClientState = /* @__PURE__ */ function(ClientState) {
		ClientState[ClientState["Initial"] = 0] = "Initial";
		ClientState[ClientState["Starting"] = 1] = "Starting";
		ClientState[ClientState["StartFailed"] = 2] = "StartFailed";
		ClientState[ClientState["Running"] = 3] = "Running";
		ClientState[ClientState["Stopping"] = 4] = "Stopping";
		ClientState[ClientState["Stopped"] = 5] = "Stopped";
		return ClientState;
	}({});
	(function(_MessageTransports) {
		function is(value) {
			return value && import_main$1.MessageReader.is(value.reader) && import_main$1.MessageWriter.is(value.writer);
		}
		_MessageTransports.is = is;
	})(MessageTransports || (MessageTransports = {}));
	delayTime = getConditionValue(250, 10);
	BaseLanguageClient = class BaseLanguageClient {
		_rootPath;
		_consoleDebug = false;
		__extensionName;
		_id;
		_name;
		_clientOptions;
		_state;
		_onStart;
		_onStop;
		_connection;
		_initializeResult;
		_outputChannel;
		_traceOutputChannel;
		_capabilities;
		_disposed;
		_ignoredRegistrations;
		_listeners;
		_notificationHandlers;
		_notificationDisposables;
		_pendingNotificationHandlers;
		_requestHandlers;
		_requestDisposables;
		_pendingRequestHandlers;
		_progressHandlers;
		_pendingProgressHandlers;
		_progressDisposables;
		_fileEvents;
		_fileEventDelayer;
		_diagnostics;
		_syncedDocuments;
		_traceFormat;
		_trace;
		_tracer;
		_stateChangeEmitter;
		_c2p;
		_didOpenTextDocumentFeature;
		constructor(id, name, clientOptions) {
			this._id = id;
			this._name = name;
			if (clientOptions.outputChannel) this._outputChannel = clientOptions.outputChannel;
			else this._outputChannel = void 0;
			this._traceOutputChannel = clientOptions.traceOutputChannel;
			this._clientOptions = this.resolveClientOptions(clientOptions);
			this.$state = 0;
			this._connection = void 0;
			this._initializeResult = void 0;
			this._listeners = [];
			this._diagnostics = void 0;
			this._notificationHandlers = /* @__PURE__ */ new Map();
			this._pendingNotificationHandlers = /* @__PURE__ */ new Map();
			this._notificationDisposables = /* @__PURE__ */ new Map();
			this._requestHandlers = /* @__PURE__ */ new Map();
			this._pendingRequestHandlers = /* @__PURE__ */ new Map();
			this._requestDisposables = /* @__PURE__ */ new Map();
			this._progressHandlers = /* @__PURE__ */ new Map();
			this._pendingProgressHandlers = /* @__PURE__ */ new Map();
			this._progressDisposables = /* @__PURE__ */ new Map();
			this._fileEvents = [];
			this._fileEventDelayer = new Delayer(delayTime);
			this._ignoredRegistrations = /* @__PURE__ */ new Set();
			this._onStop = void 0;
			this._stateChangeEmitter = new import_main$1.Emitter();
			this._trace = import_main$1.Trace.Off;
			this._tracer = { log: (messageOrDataObject, data) => {
				if (string(messageOrDataObject)) this.traceMessage(messageOrDataObject, data);
				else this.traceObject(messageOrDataObject);
			} };
			this._c2p = createConverter(clientOptions.uriConverter ? clientOptions.uriConverter.code2Protocol : void 0);
			this._syncedDocuments = /* @__PURE__ */ new Map();
			this.registerBuiltinFeatures();
			Error.captureStackTrace(this);
		}
		switchConsole() {
			this._consoleDebug = !this._consoleDebug;
			this.changeTrace(import_main$1.Trace.Verbose, import_main$1.TraceFormat.Text);
		}
		resolveClientOptions(clientOptions) {
			const markdown = {
				isTrusted: false,
				supportHtml: false
			};
			if (clientOptions.markdown != null) {
				markdown.isTrusted = clientOptions.markdown.isTrusted === true;
				markdown.supportHtml = clientOptions.markdown.supportHtml === true;
			}
			let disableSnippetCompletion = clientOptions.disableSnippetCompletion;
			let disableMarkdown = clientOptions.disableMarkdown;
			if (disableMarkdown === void 0) disableMarkdown = workspace_default.initialConfiguration.get("coc.preferences.enableMarkdown") === false;
			const pullConfig = workspace_default.getConfiguration("pullDiagnostic", clientOptions.workspaceFolder);
			let pullOption = clientOptions.diagnosticPullOptions ?? {};
			if (pullOption.onChange === void 0) pullOption.onChange = pullConfig.get("onChange");
			if (pullOption.onSave === void 0) pullOption.onSave = pullConfig.get("onSave");
			if (pullOption.workspace === void 0) pullOption.workspace = pullConfig.get("workspace");
			pullOption.ignored = pullConfig.get("ignored", []).concat(pullOption.ignored ?? []);
			let disabledFeatures = clientOptions.disabledFeatures ?? [];
			for (let key of [
				"disableCompletion",
				"disableWorkspaceFolders",
				"disableDiagnostics"
			]) if (typeof clientOptions[key] === "boolean") {
				let stack = "\n" + Error().stack.split("\n").slice(2, 4).join("\n");
				logger$35.warn(`${key} in the client options is deprecated. use disabledFeatures instead.`, stack);
				if (clientOptions[key] === true) {
					let s = key.slice(7);
					disabledFeatures.push(s[0].toLowerCase() + s.slice(1));
				}
			}
			return {
				disabledFeatures,
				disableMarkdown,
				disableSnippetCompletion,
				diagnosticPullOptions: pullOption,
				rootPatterns: defaultValue(clientOptions.rootPatterns, []),
				requireRootPattern: clientOptions.requireRootPattern,
				disableDynamicRegister: clientOptions.disableDynamicRegister,
				formatterPriority: defaultValue(clientOptions.formatterPriority, 0),
				ignoredRootPaths: defaultValue(clientOptions.ignoredRootPaths, []),
				documentSelector: defaultValue(clientOptions.documentSelector, []),
				synchronize: defaultValue(clientOptions.synchronize, {}),
				diagnosticCollectionName: clientOptions.diagnosticCollectionName,
				outputChannelName: defaultValue(clientOptions.outputChannelName, this._id),
				revealOutputChannelOn: defaultValue(clientOptions.revealOutputChannelOn, 4),
				stdioEncoding: defaultValue(clientOptions.stdioEncoding, "utf8"),
				initializationOptions: clientOptions.initializationOptions,
				initializationFailedHandler: clientOptions.initializationFailedHandler,
				progressOnInitialization: clientOptions.progressOnInitialization === true,
				errorHandler: clientOptions.errorHandler ?? this.createDefaultErrorHandler(clientOptions.connectionOptions?.maxRestartCount),
				middleware: defaultValue(clientOptions.middleware, {}),
				workspaceFolder: clientOptions.workspaceFolder,
				connectionOptions: clientOptions.connectionOptions,
				uriConverter: clientOptions.uriConverter,
				textSynchronization: this.createTextSynchronizationOptions(clientOptions.textSynchronization),
				markdown
			};
		}
		createTextSynchronizationOptions(options) {
			if (options && typeof options.delayOpenNotifications === "boolean") return { delayOpenNotifications: options.delayOpenNotifications };
			return { delayOpenNotifications: false };
		}
		get supportedMarkupKind() {
			if (!this.clientOptions.disableMarkdown) return [MarkupKind.Markdown, MarkupKind.PlainText];
			return [MarkupKind.PlainText];
		}
		get state() {
			return this.getPublicState();
		}
		get $state() {
			return this._state;
		}
		set $state(value) {
			let oldState = this.getPublicState();
			this._state = value;
			let newState = this.getPublicState();
			if (newState !== oldState) this._stateChangeEmitter.fire({
				oldState,
				newState
			});
		}
		get id() {
			return this._id;
		}
		get name() {
			return this._name;
		}
		get middleware() {
			return this._clientOptions.middleware;
		}
		get code2ProtocolConverter() {
			return this._c2p;
		}
		getPublicState() {
			switch (this.$state) {
				case 1: return 3;
				case 3: return 2;
				case 2: return 4;
				default: return 1;
			}
		}
		get initializeResult() {
			return this._initializeResult;
		}
		async sendRequest(type, ...params) {
			if (this.$state === 2 || this.$state === 4 || this.$state === 5) return Promise.reject(new import_main$1.ResponseError(import_main$1.ErrorCodes.ConnectionInactive, `Client is not running`));
			const connection = await this.$start();
			await this._didOpenTextDocumentFeature.sendPendingOpenNotifications();
			let param;
			let token;
			if (params.length === 1) if (import_api.CancellationToken.is(params[0])) token = params[0];
			else param = params[0];
			else if (params.length === 2) {
				param = params[0];
				token = params[1];
			}
			if (token !== void 0 && token.isCancellationRequested) return Promise.reject(new import_main$1.ResponseError(import_main$1.LSPErrorCodes.RequestCancelled, "Request got cancelled"));
			type = fixRequestType(type, params);
			const _sendRequest = this._clientOptions.middleware.sendRequest;
			if (_sendRequest !== void 0) return _sendRequest(type, param, token, (type, param, token) => {
				const params = [];
				if (param !== void 0) params.push(param);
				if (token !== void 0) params.push(token);
				return connection.sendRequest(type, ...params);
			});
			else return connection.sendRequest(type, ...params);
		}
		onRequest(type, handler) {
			const method = toMethod(type);
			this._requestHandlers.set(method, handler);
			const connection = this.activeConnection();
			let disposable;
			if (connection !== void 0) {
				this._requestDisposables.set(method, connection.onRequest(type, handler));
				disposable = { dispose: () => {
					const disposable = this._requestDisposables.get(method);
					if (disposable !== void 0) {
						disposable.dispose();
						this._requestDisposables.delete(method);
					}
				} };
			} else {
				this._pendingRequestHandlers.set(method, handler);
				disposable = { dispose: () => {
					this._pendingRequestHandlers.delete(method);
					const disposable = this._requestDisposables.get(method);
					if (disposable !== void 0) {
						disposable.dispose();
						this._requestDisposables.delete(method);
					}
				} };
			}
			return { dispose: () => {
				this._requestHandlers.delete(method);
				disposable.dispose();
			} };
		}
		async sendNotification(type, params) {
			if (this.$state === 2 || this.$state === 4 || this.$state === 5) {
				this.error(`Client is not running when send notification`, type);
				return;
			}
			try {
				let documentToClose;
				if (typeof type !== "string" && type.method === import_api.DidCloseTextDocumentNotification.method) documentToClose = params.textDocument.uri;
				const connection = await this.$start();
				if (await this._didOpenTextDocumentFeature.sendPendingOpenNotifications(documentToClose)) return;
				type = fixNotificationType(type, params == null ? [] : [params]);
				const _sendNotification = this._clientOptions.middleware.sendNotification;
				return await Promise.resolve(_sendNotification ? _sendNotification(type, connection.sendNotification.bind(connection), params) : connection.sendNotification(type, params));
			} catch (error) {
				this.error(`Sending notification ${toMethod(type)} failed.`, error);
				if ([4, 5].includes(this._state)) return;
				throw error;
			}
		}
		onNotification(type, handler) {
			const method = toMethod(type);
			this._notificationHandlers.set(method, handler);
			const connection = this.activeConnection();
			let disposable;
			if (connection !== void 0) {
				this._notificationDisposables.set(method, connection.onNotification(type, handler));
				disposable = { dispose: () => {
					const disposable = this._notificationDisposables.get(method);
					if (disposable !== void 0) {
						disposable.dispose();
						this._notificationDisposables.delete(method);
					}
				} };
			} else {
				this._pendingNotificationHandlers.set(method, handler);
				disposable = { dispose: () => {
					this._pendingNotificationHandlers.delete(method);
					const disposable = this._notificationDisposables.get(method);
					if (disposable !== void 0) {
						disposable.dispose();
						this._notificationDisposables.delete(method);
					}
				} };
			}
			return { dispose: () => {
				this._notificationHandlers.delete(method);
				disposable.dispose();
			} };
		}
		onProgress(type, token, handler) {
			this._progressHandlers.set(token, {
				type,
				handler
			});
			const connection = this.activeConnection();
			let disposable;
			const handleWorkDoneProgress = this._clientOptions.middleware.handleWorkDoneProgress;
			const realHandler = import_main$1.WorkDoneProgress.is(type) && handleWorkDoneProgress !== void 0 ? (params) => {
				handleWorkDoneProgress(token, params, () => handler(params));
			} : handler;
			if (connection !== void 0) {
				this._progressDisposables.set(token, connection.onProgress(type, token, realHandler));
				disposable = { dispose: () => {
					const disposable = this._progressDisposables.get(token);
					if (disposable !== void 0) {
						disposable.dispose();
						this._progressDisposables.delete(token);
					}
				} };
			} else {
				this._pendingProgressHandlers.set(token, {
					type,
					handler
				});
				disposable = { dispose: () => {
					this._pendingProgressHandlers.delete(token);
					const disposable = this._progressDisposables.get(token);
					if (disposable !== void 0) {
						disposable.dispose();
						this._progressDisposables.delete(token);
					}
				} };
			}
			return { dispose: () => {
				this._progressHandlers.delete(token);
				disposable.dispose();
			} };
		}
		async sendProgress(type, token, value) {
			if (this.$state === 2 || this.$state === 4 || this.$state === 5) return Promise.reject(new import_main$1.ResponseError(import_main$1.ErrorCodes.ConnectionInactive, `Client is not running`));
			try {
				await (await this.$start()).sendProgress(type, token, value);
			} catch (error) {
				this.error(`Sending progress for token ${token} failed.`, error);
				throw error;
			}
		}
		/**
		* languageserver.xxx.settings or undefined
		*/
		get configuredSection() {
			let section = defaultValue(this._clientOptions.synchronize, {}).configurationSection;
			return typeof section === "string" && section.startsWith("languageserver.") ? section : void 0;
		}
		get clientOptions() {
			return this._clientOptions;
		}
		get onDidChangeState() {
			return this._stateChangeEmitter.event;
		}
		get outputChannel() {
			if (!this._outputChannel) {
				let { outputChannelName } = this._clientOptions;
				this._outputChannel = window_default.createOutputChannel(defaultValue(outputChannelName, this._name));
			}
			return this._outputChannel;
		}
		get traceOutputChannel() {
			return this._traceOutputChannel ? this._traceOutputChannel : this.outputChannel;
		}
		get diagnostics() {
			return this._diagnostics;
		}
		createDefaultErrorHandler(maxRestartCount) {
			return new DefaultErrorHandler(this._id, maxRestartCount ?? 4, this._outputChannel);
		}
		set trace(value) {
			this.changeTrace(value, this._traceFormat);
		}
		consoleMessage(message, error = false) {
			if (this._consoleDebug) error ? console.error(redOpen + message + redClose) : console.log(message);
		}
		debug(message, data, showNotification = true) {
			this.logOutputMessage(import_main$1.MessageType.Debug, 0, "Debug", message, data, showNotification);
		}
		info(message, data, showNotification = true) {
			this.logOutputMessage(import_main$1.MessageType.Info, 1, "Info", message, data, showNotification);
		}
		warn(message, data, showNotification = true) {
			this.logOutputMessage(import_main$1.MessageType.Warning, 2, "Warn", message, data, showNotification);
		}
		error(message, data, showNotification = true) {
			this.logOutputMessage(import_main$1.MessageType.Error, 3, "Error", message, data, showNotification);
		}
		logOutputMessage(type, reveal, name, message, data, showNotification) {
			const msg = `[${name.padEnd(5)} - ${currentTimeStamp()}] ${this.getLogMessage(message, data)}`;
			this.outputChannel.appendLine(msg);
			this.consoleMessage(msg, type === import_main$1.MessageType.Error);
			if (showNotification === "force" || showNotification && this._clientOptions.revealOutputChannelOn <= reveal) this.showNotificationMessage(type, message, data);
		}
		traceObject(data) {
			this.traceOutputChannel.appendLine(`${getTracePrefix(data)}${data2String(data)}`);
		}
		traceMessage(message, data) {
			const msg = `[Trace - ${currentTimeStamp()}] ${this.getLogMessage(message, data)}`;
			this.traceOutputChannel.appendLine(msg);
			this.consoleMessage(msg);
		}
		getLogMessage(message, data) {
			return data != null ? `${message}\n${data2String(data)}` : message;
		}
		showNotificationMessage(type, message, data) {
			message = message ?? "A request has failed. See the output for more information.";
			if (data) message += "\n" + data2String(data);
			getConditionValue(type === import_main$1.MessageType.Error ? window_default.showErrorMessage.bind(window_default) : type === import_main$1.MessageType.Warning ? window_default.showWarningMessage.bind(window_default) : window_default.showInformationMessage.bind(window_default), (_, _obj) => Promise.resolve(global.__showOutput))(message, { title: "Go to output" }).then((selection) => {
				if (selection !== void 0) this.outputChannel.show(true);
			}, onUnexpectedError);
		}
		needsStart() {
			return this.$state === 0 || this.$state === 4 || this.$state === 5;
		}
		needsStop() {
			return this.$state === 1 || this.$state === 3;
		}
		activeConnection() {
			return this.$state === 3 && this._connection !== void 0 ? this._connection : void 0;
		}
		get hasPendingResponse() {
			return this._connection?.hasPendingResponse();
		}
		onReady() {
			if (this._onStart) return this._onStart;
			return new Promise((resolve) => {
				let disposable = this.onDidChangeState((e) => {
					if (e.newState === 2) {
						disposable.dispose();
						resolve();
					}
				});
			});
		}
		get started() {
			return this.$state != 0;
		}
		isRunning() {
			return this.$state === 3;
		}
		async _start() {
			if (this._disposed === "disposing" || this._disposed === "disposed") throw new Error(`Client got disposed and can't be restarted.`);
			if (this.$state === 4) throw new Error(`Client is currently stopping. Can only restart a full stopped client`);
			if (this._onStart !== void 0) return this._onStart;
			this._rootPath = this.resolveRootPath();
			const [promise, resolve, reject] = this.createOnStartPromise();
			this._onStart = promise;
			if (this._diagnostics === void 0) {
				let opts = this._clientOptions;
				let name = opts.diagnosticCollectionName ? opts.diagnosticCollectionName : this._id;
				if (!opts.disabledFeatures.includes("diagnostics")) this._diagnostics = languages_default.createDiagnosticCollection(name);
			}
			for (const [method, handler] of this._notificationHandlers) if (!this._pendingNotificationHandlers.has(method)) this._pendingNotificationHandlers.set(method, handler);
			for (const [method, handler] of this._requestHandlers) if (!this._pendingRequestHandlers.has(method)) this._pendingRequestHandlers.set(method, handler);
			for (const [token, data] of this._progressHandlers) if (!this._pendingProgressHandlers.has(token)) this._pendingProgressHandlers.set(token, data);
			this.$state = 1;
			try {
				const connection = await this.createConnection();
				this.handleConnectionEvents(connection);
				connection.listen();
				await this.initialize(connection);
				resolve();
			} catch (error) {
				this.$state = 2;
				this.error(`${this._name} client: couldn't create connection to server.`, error, "force");
				reject(error);
			}
			return this._onStart;
		}
		start() {
			let p = this._start();
			p.dispose = () => {
				if (this.needsStop()) this.stop();
			};
			return p;
		}
		async $start() {
			if (this.$state === 2) throw new Error(`Previous start failed. Can't restart server.`);
			await this._start();
			const connection = this.activeConnection();
			if (connection === void 0) throw new Error(`Starting server failed`);
			return connection;
		}
		handleConnectionEvents(connection) {
			connection.onNotification(import_main$1.LogMessageNotification.type, (message) => {
				switch (message.type) {
					case import_main$1.MessageType.Error:
						this.error(message.message);
						break;
					case import_main$1.MessageType.Warning:
						this.warn(message.message);
						break;
					case import_main$1.MessageType.Info:
						this.info(message.message);
						break;
					case import_main$1.MessageType.Debug:
						this.debug(message.message);
						break;
					default: this.outputChannel.appendLine(message.message);
				}
			});
			connection.onNotification(import_main$1.ShowMessageNotification.type, (message) => {
				switch (message.type) {
					case import_main$1.MessageType.Error:
						window_default.showErrorMessage(message.message);
						break;
					case import_main$1.MessageType.Warning:
						window_default.showWarningMessage(message.message);
						break;
					case import_main$1.MessageType.Info:
						window_default.showInformationMessage(message.message);
						break;
					default: window_default.showInformationMessage(message.message);
				}
			});
			connection.onRequest(import_main$1.ShowMessageRequest.type, (params) => {
				let messageFunc;
				switch (params.type) {
					case import_main$1.MessageType.Error:
						messageFunc = window_default.showErrorMessage.bind(window_default);
						break;
					case import_main$1.MessageType.Warning:
						messageFunc = window_default.showWarningMessage.bind(window_default);
						break;
					case import_main$1.MessageType.Info:
						messageFunc = window_default.showInformationMessage.bind(window_default);
						break;
					default: messageFunc = window_default.showInformationMessage.bind(window_default);
				}
				let actions = toArray(params.actions);
				return messageFunc(params.message, ...actions);
			});
			connection.onRequest(import_main$1.ShowDocumentRequest.type, async (params, token) => {
				const showDocument = async (params) => {
					try {
						if (params.external === true || /^https?:\/\//.test(params.uri)) {
							await workspace_default.openResource(params.uri);
							return { success: true };
						} else {
							let { selection, takeFocus } = params;
							if (takeFocus === false) await workspace_default.loadFile(params.uri);
							else {
								await workspace_default.jumpTo(params.uri, selection?.start);
								if (selection && comparePosition(selection.start, selection.end) != 0) await window_default.selectRange(selection);
							}
							return { success: true };
						}
					} catch (error) {
						return { success: false };
					}
				};
				const middleware = this._clientOptions.middleware.window?.showDocument;
				if (middleware !== void 0) return middleware(params, token, showDocument);
				else return showDocument(params);
			});
		}
		createOnStartPromise() {
			let resolve;
			let reject;
			return [
				new Promise((_resolve, _reject) => {
					resolve = _resolve;
					reject = _reject;
				}),
				resolve,
				reject
			];
		}
		resolveRootPath() {
			if (this._clientOptions.workspaceFolder) return URI.parse(this._clientOptions.workspaceFolder.uri).fsPath;
			let { ignoredRootPaths, rootPatterns, requireRootPattern } = this._clientOptions;
			let resolved;
			if (!isFalsyOrEmpty(rootPatterns)) resolved = workspace_default.documentsManager.resolveRoot(rootPatterns, requireRootPattern);
			let rootPath = resolved || workspace_default.rootPath;
			if (sameFile(rootPath, os$5.homedir()) || ignoredRootPaths.some((p) => sameFile(rootPath, p))) {
				this.warn(`Ignored rootPath ${rootPath} of client "${this._id}"`);
				return null;
			}
			return rootPath;
		}
		initialize(connection) {
			let { initializationOptions, workspaceFolder, progressOnInitialization } = this._clientOptions;
			this.refreshTrace(false);
			let rootPath = this._rootPath;
			let initParams = {
				processId: process.pid,
				rootPath: rootPath ? rootPath : null,
				rootUri: rootPath ? this.code2ProtocolConverter.asUri(URI.file(rootPath)) : null,
				capabilities: this.computeClientCapabilities(),
				initializationOptions: func(initializationOptions) ? initializationOptions() : initializationOptions,
				trace: import_main$1.Trace.toString(this._trace),
				workspaceFolders: workspaceFolder ? [workspaceFolder] : null,
				locale: getLocale(),
				clientInfo: {
					name: "coc.nvim",
					version: workspace_default.version
				}
			};
			this.fillInitializeParams(initParams);
			if (progressOnInitialization) {
				const token = generateUuid();
				initParams.workDoneToken = token;
				connection.id = this._id;
				const part = new ProgressPart(connection, token);
				part.begin({
					title: `Initializing ${this.id}`,
					kind: "begin"
				});
				return this.doInitialize(connection, initParams).then((result) => {
					part.done();
					return result;
				}, (error) => {
					part.done();
					return Promise.reject(error);
				});
			} else return this.doInitialize(connection, initParams);
		}
		async doInitialize(connection, initParams) {
			try {
				const result = await connection.initialize(initParams);
				if (result.capabilities.positionEncoding !== void 0 && result.capabilities.positionEncoding !== import_main$1.PositionEncodingKind.UTF16) throw new Error(`Unsupported position encoding (${result.capabilities.positionEncoding}) received from server ${this.name}`);
				this._initializeResult = result;
				this.$state = 3;
				let textDocumentSyncOptions;
				if (number(result.capabilities.textDocumentSync)) if (result.capabilities.textDocumentSync === import_main$1.TextDocumentSyncKind.None) textDocumentSyncOptions = {
					openClose: false,
					change: import_main$1.TextDocumentSyncKind.None,
					save: void 0
				};
				else textDocumentSyncOptions = {
					openClose: true,
					change: result.capabilities.textDocumentSync,
					save: { includeText: false }
				};
				else if (result.capabilities.textDocumentSync !== void 0 && result.capabilities.textDocumentSync !== null) textDocumentSyncOptions = result.capabilities.textDocumentSync;
				this._capabilities = Object.assign({}, result.capabilities, { resolvedTextDocumentSync: textDocumentSyncOptions });
				connection.onNotification(import_main$1.PublishDiagnosticsNotification.type, (params) => this.handleDiagnostics(params));
				for (let requestType of [import_main$1.RegistrationRequest.type, "client/registerFeature"]) connection.onRequest(requestType, (params) => this.handleRegistrationRequest(params));
				for (let requestType of [import_main$1.UnregistrationRequest.type, "client/unregisterFeature"]) connection.onRequest(requestType, (params) => this.handleUnregistrationRequest(params));
				connection.onRequest(import_main$1.ApplyWorkspaceEditRequest.type, (params) => this.handleApplyWorkspaceEdit(params));
				for (const [method, handler] of this._pendingNotificationHandlers) this._notificationDisposables.set(method, connection.onNotification(method, handler));
				this._pendingNotificationHandlers.clear();
				for (const [method, handler] of this._pendingRequestHandlers) this._requestDisposables.set(method, connection.onRequest(method, handler));
				this._pendingRequestHandlers.clear();
				for (const [token, data] of this._pendingProgressHandlers) this._progressDisposables.set(token, connection.onProgress(data.type, token, data.handler));
				this._pendingProgressHandlers.clear();
				await connection.sendNotification(import_main$1.InitializedNotification.type, {});
				this.hookConfigurationChanged();
				this.initializeFeatures(connection);
				return result;
			} catch (error) {
				this.error("Server initialization failed.", error);
				logger$35.error(`Server "${this.id}" initialization failed.`, error);
				let cb = (retry) => {
					process.nextTick(() => {
						new Promise((resolve, reject) => {
							if (retry) this.initialize(connection).then(resolve, reject);
							else this.stop().then(resolve, reject);
						}).catch((err) => {
							this.error(`Unexpected error`, err, false);
						});
					});
				};
				if (this._clientOptions.initializationFailedHandler) cb(this._clientOptions.initializationFailedHandler(error));
				else if (error instanceof import_main$1.ResponseError && error.data && error.data.retry) window_default.showErrorMessage(error.message, {
					title: "Retry",
					id: "retry"
				}).then((item) => {
					cb(item && item.id === "retry");
				});
				else {
					if (error && error.message) window_default.showErrorMessage(toText(error.message));
					cb(false);
				}
				throw error;
			}
		}
		stop(timeout = 2e3) {
			return this.shutdown("stop", timeout);
		}
		async shutdown(mode, timeout) {
			if (this.$state === 5 || this.$state === 0) return;
			if (this.$state === 1 && this._onStart) await this._onStart;
			if (this.$state === 4) return this._onStop;
			const connection = this._connection;
			if (connection === void 0 || this.$state !== 3 && this.$state !== 2) throw new Error(`Client is not running and can't be stopped. Its current state is: ${this.$state}`);
			this._initializeResult = void 0;
			this.$state = 4;
			this.cleanUp(mode);
			let tm;
			const tp = new Promise((c) => {
				tm = setTimeout(c, timeout);
			});
			const shutdown = (async (connection) => {
				await connection.shutdown();
				await connection.exit();
				return connection;
			})(connection);
			return this._onStop = Promise.race([tp, shutdown]).then((connection) => {
				if (tm) clearTimeout(tm);
				if (connection !== void 0) {
					connection.end();
					connection.dispose();
				} else {
					this.error(`Stopping server timed out`, void 0);
					throw new Error(`Stopping the server timed out`);
				}
			}, (error) => {
				this.error(`Stopping server failed`, error);
				throw error;
			}).finally(() => {
				this.$state = 5;
				if (mode === "stop") this.cleanUpChannel();
				this._onStart = void 0;
				this._onStop = void 0;
				this._connection = void 0;
				this._ignoredRegistrations.clear();
			});
		}
		dispose(timeout = 2e3) {
			if (this._disposed) return;
			try {
				this._disposed = "disposing";
				if (!this.needsStop()) return;
				return this.stop(timeout);
			} finally {
				this._disposed = "disposed";
			}
		}
		cleanUp(mode) {
			this._fileEvents = [];
			this._fileEventDelayer.cancel();
			if (this._listeners) disposeAll(this._listeners);
			if (this._syncedDocuments) this._syncedDocuments.clear();
			for (const feature of Array.from(this._features.entries()).map((entry) => entry[1]).reverse()) if (typeof feature.dispose === "function") feature.dispose();
			if ((mode === "stop" || mode === "restart") && this._diagnostics !== void 0) {
				this._diagnostics.dispose();
				this._diagnostics = void 0;
			}
		}
		cleanUpChannel() {
			if (this._outputChannel) {
				this._outputChannel.dispose();
				this._outputChannel = void 0;
			}
		}
		notifyFileEvent(event) {
			const didChangeWatchedFile = async (event) => {
				if (event) this._fileEvents.push(event);
				return this._fileEventDelayer.trigger(async () => {
					const fileEvents = this._fileEvents;
					if (fileEvents.length === 0) return;
					this._fileEvents = [];
					try {
						await this.sendNotification(import_api.DidChangeWatchedFilesNotification.type, { changes: fileEvents });
					} catch (error) {
						this._fileEvents = fileEvents;
						throw error;
					}
				});
			};
			const workSpaceMiddleware = this.clientOptions.middleware.workspace;
			(workSpaceMiddleware?.didChangeWatchedFile ? workSpaceMiddleware.didChangeWatchedFile(event, didChangeWatchedFile) : didChangeWatchedFile(event)).catch((error) => {
				this.error(`Notifying ${import_api.DidChangeWatchedFilesNotification.method} failed.`, error);
			});
		}
		/**
		* @deprecated
		*/
		async forceDocumentSync() {}
		isSynced(uri) {
			return this._syncedDocuments ? this._syncedDocuments.has(uri) : false;
		}
		async createConnection() {
			let onError = (error) => {
				this.error(`Unexpected connection error: `, error);
			};
			let errorHandler = (error, message, count) => {
				this.handleConnectionError(error, message, count).catch(onError);
			};
			let closeHandler = () => {
				this.handleConnectionClosed().catch(onError);
			};
			const transports = await this.createMessageTransports(defaultValue(this._clientOptions.stdioEncoding, "utf8"));
			this._connection = createConnection(transports.reader, transports.writer, errorHandler, closeHandler, this._clientOptions.connectionOptions);
			return this._connection;
		}
		async handleConnectionClosed() {
			if (this.$state === 5) {
				logger$35.info(`client ${this._id} normal closed`);
				return;
			}
			try {
				if (this._connection !== void 0) this._connection.dispose();
			} catch (error) {}
			let handlerResult = { action: 1 };
			let err;
			if (this.$state !== 4) try {
				handlerResult = toCloseHandlerResult(await this._clientOptions.errorHandler.closed());
			} catch (error) {
				err = error;
			}
			this._connection = void 0;
			if (handlerResult.action === 1) {
				this.error(handlerResult.message ?? "Connection to server got closed. Server will not be restarted.", void 0, handlerResult.handled === true ? false : "force");
				this.cleanUp("stop");
				if (this.$state === 1) this.$state = 2;
				else this.$state = 5;
				this._onStop = Promise.resolve();
				this._onStart = void 0;
			} else if (handlerResult.action === 2) {
				this.info(handlerResult.message ?? "Connection to server got closed. Server will restart.", void 0, !handlerResult.handled);
				this.cleanUp("restart");
				this.$state = 0;
				this._onStop = Promise.resolve();
				this._onStart = void 0;
				this.start().catch((error) => {
					this.error(`Restarting server failed`, error, "force");
				});
			}
			if (err) throw err;
		}
		async handleConnectionError(error, message, count) {
			let res = await this._clientOptions.errorHandler.error(error, message, count);
			let result = typeof res === "number" ? { action: res } : defaultValue(res, { action: 2 });
			const showNotification = result.handled === true ? false : "force";
			if (result.action === 2) {
				const msg = result.message ?? `Client ${this._name}: connection to server is erroring.\n${error.message}\nShutting down server.`;
				this.error(msg, error, showNotification);
				return this.stop();
			} else {
				const msg = result.message ?? `Client ${this._name}: connection to server is erroring.\n${error.message}`;
				this.error(msg, error, showNotification);
			}
		}
		hookConfigurationChanged() {
			workspace_default.onDidChangeConfiguration((e) => {
				if (e.affectsConfiguration(this._id)) this.refreshTrace(true);
			}, null, this._listeners);
		}
		refreshTrace(sendNotification) {
			let config = workspace_default.getConfiguration(this._id, null);
			let trace = import_main$1.Trace.Off;
			let traceFormat = import_main$1.TraceFormat.Text;
			if (config) {
				const traceConfig = config.get("trace.server", "off");
				if (typeof traceConfig === "string") trace = import_main$1.Trace.fromString(traceConfig);
				else {
					trace = import_main$1.Trace.fromString(config.get("trace.server.verbosity", "off"));
					traceFormat = import_main$1.TraceFormat.fromString(config.get("trace.server.format", "text"));
				}
			}
			if (sendNotification && this._trace == trace && this._traceFormat == traceFormat) return;
			this.changeTrace(trace, traceFormat, sendNotification);
		}
		changeTrace(trace, traceFormat, sendNotification = true) {
			this._trace = trace;
			this._traceFormat = traceFormat;
			if (this._connection && (this.$state === 3 || this.$state === 1)) this._connection.trace(this._trace, this._tracer, {
				sendNotification,
				traceFormat: this._traceFormat
			}).catch((error) => {
				this.error(`Updating trace failed with error`, error, false);
			});
		}
		_features = [];
		_dynamicFeatures = /* @__PURE__ */ new Map();
		registerFeatures(features) {
			for (let feature of features) this.registerFeature(feature, "");
		}
		registerFeature(feature, name) {
			let { disabledFeatures } = this._clientOptions;
			if (disabledFeatures.length > 0 && disabledFeatures.includes(name)) return;
			this._features.push(feature);
			if (DynamicFeature.is(feature)) {
				const registrationType = feature.registrationType;
				this._dynamicFeatures.set(registrationType.method, feature);
			}
		}
		getStaticFeature(method) {
			return this._features.find((o) => StaticFeature.is(o) && o.method == method);
		}
		getFeature(request) {
			return this._dynamicFeatures.get(request);
		}
		registerBuiltinFeatures() {
			this.registerFeature(new SyncConfigurationFeature(this), "configuration");
			this._didOpenTextDocumentFeature = new DidOpenTextDocumentFeature(this, this._syncedDocuments);
			this.registerFeature(this._didOpenTextDocumentFeature, "document");
			this.registerFeature(new DidChangeTextDocumentFeature(this), "document");
			this.registerFeature(new DidCloseTextDocumentFeature(this, this._syncedDocuments), "document");
			this.registerFeature(new WillSaveFeature(this), "willSave");
			this.registerFeature(new WillSaveWaitUntilFeature(this), "willSaveWaitUntil");
			this.registerFeature(new DidSaveTextDocumentFeature(this), "didSave");
			this.registerFeature(new FileSystemWatcherFeature(this, this.notifyFileEvent.bind(this)), "fileSystemWatcher");
			this.registerFeature(new CompletionItemFeature(this), "completion");
			this.registerFeature(new HoverFeature(this), "hover");
			this.registerFeature(new SignatureHelpFeature(this), "signatureHelp");
			this.registerFeature(new ReferencesFeature(this), "references");
			this.registerFeature(new DefinitionFeature(this), "definition");
			this.registerFeature(new DocumentHighlightFeature(this), "documentHighlight");
			this.registerFeature(new DocumentSymbolFeature(this), "documentSymbol");
			this.registerFeature(new CodeActionFeature(this), "codeAction");
			this.registerFeature(new CodeLensFeature(this), "codeLens");
			this.registerFeature(new DocumentFormattingFeature(this), "documentFormatting");
			this.registerFeature(new DocumentRangeFormattingFeature(this), "documentRangeFormatting");
			this.registerFeature(new DocumentOnTypeFormattingFeature(this), "documentOnTypeFormatting");
			this.registerFeature(new RenameFeature(this), "rename");
			this.registerFeature(new DocumentLinkFeature(this), "documentLink");
			this.registerFeature(new ExecuteCommandFeature(this), "executeCommand");
			this.registerFeature(new PullConfigurationFeature(this), "pullConfiguration");
			this.registerFeature(new TypeDefinitionFeature(this), "typeDefinition");
			this.registerFeature(new ImplementationFeature(this), "implementation");
			this.registerFeature(new DeclarationFeature(this), "declaration");
			this.registerFeature(new ColorProviderFeature(this), "colorProvider");
			this.registerFeature(new FoldingRangeFeature(this), "foldingRange");
			this.registerFeature(new SelectionRangeFeature(this), "selectionRange");
			this.registerFeature(new CallHierarchyFeature(this), "callHierarchy");
			this.registerFeature(new ProgressFeature(this), "progress");
			this.registerFeature(new LinkedEditingFeature(this), "linkedEditing");
			this.registerFeature(new DidCreateFilesFeature(this), "fileEvents");
			this.registerFeature(new DidRenameFilesFeature(this), "fileEvents");
			this.registerFeature(new DidDeleteFilesFeature(this), "fileEvents");
			this.registerFeature(new WillCreateFilesFeature(this), "fileEvents");
			this.registerFeature(new WillRenameFilesFeature(this), "fileEvents");
			this.registerFeature(new WillDeleteFilesFeature(this), "fileEvents");
			this.registerFeature(new SemanticTokensFeature(this), "semanticTokens");
			this.registerFeature(new InlayHintsFeature(this), "inlayHint");
			this.registerFeature(new InlineCompletionItemFeature(this), "inlineCompletion");
			this.registerFeature(new TextDocumentContentFeature(this), "textDocumentContent");
			this.registerFeature(new InlineValueFeature(this), "inlineValue");
			this.registerFeature(new DiagnosticFeature(this), "pullDiagnostic");
			this.registerFeature(new TypeHierarchyFeature(this), "typeHierarchy");
			this.registerFeature(new WorkspaceSymbolFeature(this), "workspaceSymbol");
			if (this.clientOptions.workspaceFolder === void 0) this.registerFeature(new WorkspaceFoldersFeature(this), "workspaceFolders");
		}
		registerProposedFeatures() {
			this.registerFeatures(ProposedFeatures.createAll(this));
		}
		fillInitializeParams(params) {
			for (let feature of this._features) if (func(feature.fillInitializeParams)) feature.fillInitializeParams(params);
		}
		computeClientCapabilities() {
			const result = {};
			ensure(result, "workspace").applyEdit = true;
			const workspaceEdit = ensure(ensure(result, "workspace"), "workspaceEdit");
			workspaceEdit.documentChanges = true;
			workspaceEdit.resourceOperations = [
				import_main$1.ResourceOperationKind.Create,
				import_main$1.ResourceOperationKind.Rename,
				import_main$1.ResourceOperationKind.Delete
			];
			workspaceEdit.failureHandling = import_main$1.FailureHandlingKind.Undo;
			workspaceEdit.normalizesLineEndings = true;
			workspaceEdit.changeAnnotationSupport = { groupsOnLabel: false };
			workspaceEdit.metadataSupport = true;
			workspaceEdit.snippetEditSupport = true;
			const diagnostics = ensure(ensure(result, "textDocument"), "publishDiagnostics");
			diagnostics.relatedInformation = true;
			diagnostics.versionSupport = true;
			diagnostics.tagSupport = { valueSet: [DiagnosticTag.Unnecessary, DiagnosticTag.Deprecated] };
			diagnostics.codeDescriptionSupport = true;
			diagnostics.dataSupport = true;
			const textDocumentFilter = ensure(ensure(result, "textDocument"), "filters");
			textDocumentFilter.relativePatternSupport = true;
			const windowCapabilities = ensure(result, "window");
			const showMessage = ensure(windowCapabilities, "showMessage");
			showMessage.messageActionItem = { additionalPropertiesSupport: true };
			const showDocument = ensure(windowCapabilities, "showDocument");
			showDocument.support = true;
			const generalCapabilities = ensure(result, "general");
			generalCapabilities.staleRequestSupport = {
				cancel: true,
				retryOnContentModified: Array.from(BaseLanguageClient.RequestsToCancelOnContentModified)
			};
			generalCapabilities.regularExpressions = {
				engine: "ECMAScript",
				version: "ES2020"
			};
			generalCapabilities.markdown = {
				parser: "marked",
				version: "10.0.0"
			};
			generalCapabilities.positionEncodings = ["utf-16"];
			if (this._clientOptions.markdown.supportHtml) generalCapabilities.markdown.allowedTags = [
				"ul",
				"li",
				"p",
				"code",
				"blockquote",
				"ol",
				"h1",
				"h2",
				"h3",
				"h4",
				"h5",
				"h6",
				"hr",
				"em",
				"pre",
				"table",
				"thead",
				"tbody",
				"tr",
				"th",
				"td",
				"div",
				"del",
				"a",
				"strong",
				"br",
				"span"
			];
			for (let feature of this._features) feature.fillClientCapabilities(result);
			return result;
		}
		initializeFeatures(_connection) {
			let documentSelector = this._clientOptions.documentSelector;
			for (let feature of this._features) if (func(feature.preInitialize)) feature.preInitialize(this._capabilities, documentSelector);
			for (let feature of this._features) feature.initialize(this._capabilities, documentSelector);
		}
		handleRegistrationRequest(params) {
			if (this.clientOptions.disableDynamicRegister) return;
			const middleware = this.clientOptions.middleware.handleRegisterCapability;
			if (middleware) return middleware(params, (nextParams) => this.doRegisterCapability(nextParams));
			else return this.doRegisterCapability(params);
		}
		async doRegisterCapability(params) {
			if (!this.isRunning()) {
				for (const registration of params.registrations) this._ignoredRegistrations.add(registration.id);
				return;
			}
			for (const registration of params.registrations) {
				const feature = this._dynamicFeatures.get(registration.method);
				if (!feature) {
					this.error(`No feature implementation for "${registration.method}" found. Registration failed.`, void 0, false);
					return;
				}
				const options = defaultValue(registration.registerOptions, {});
				options.documentSelector = options.documentSelector ?? this._clientOptions.documentSelector;
				const data = {
					id: registration.id,
					registerOptions: options
				};
				feature.register(data);
			}
		}
		handleUnregistrationRequest(params) {
			const middleware = this._clientOptions.middleware.handleUnregisterCapability;
			if (middleware) return middleware(params, (nextParams) => this.doUnregisterCapability(nextParams));
			else return this.doUnregisterCapability(params);
		}
		async doUnregisterCapability(params) {
			for (const unregistration of params.unregisterations) {
				if (this._ignoredRegistrations.has(unregistration.id)) continue;
				const feature = this._dynamicFeatures.get(unregistration.method);
				if (feature) feature.unregister(unregistration.id);
			}
		}
		handleDiagnostics(params) {
			let { uri, diagnostics, version } = params;
			if (number(version) && !workspace_default.hasDocument(uri, version)) return;
			let middleware = this.clientOptions.middleware.handleDiagnostics;
			if (middleware) middleware(uri, diagnostics, (uri, diagnostics) => this.setDiagnostics(uri, diagnostics));
			else this.setDiagnostics(uri, diagnostics);
		}
		setDiagnostics(uri, diagnostics) {
			if (!this._diagnostics) return;
			this._diagnostics.set(uri, diagnostics);
		}
		doHandleApplyWorkspaceEdit(params) {
			return workspace_default.applyEdit(params.edit).then((applied) => {
				return { applied };
			});
		}
		async handleApplyWorkspaceEdit(params) {
			const middleware = this.clientOptions.middleware.workspace?.handleApplyEdit;
			if (middleware) try {
				let resultOrError = await Promise.resolve(middleware(params, (nextParams) => this.doHandleApplyWorkspaceEdit(nextParams)));
				if (resultOrError instanceof import_main$1.ResponseError) throw resultOrError;
			} catch (error) {
				this.error(`Error on apply workspace edit`, error, false);
				return { applied: false };
			}
			else return this.doHandleApplyWorkspaceEdit(params);
		}
		static RequestsToCancelOnContentModified = new Set([
			import_main$1.InlayHintRequest.method,
			import_main$1.SemanticTokensRequest.method,
			import_main$1.SemanticTokensRangeRequest.method,
			import_main$1.SemanticTokensDeltaRequest.method
		]);
		handleFailedRequest(type, token, error, defaultValue, showNotification = true) {
			if (token && token.isCancellationRequested) return defaultValue;
			if (error instanceof import_main$1.ResponseError) {
				if (error.code === import_main$1.ErrorCodes.PendingResponseRejected || error.code === import_main$1.ErrorCodes.ConnectionInactive) return defaultValue;
				if (error.code === import_main$1.LSPErrorCodes.RequestCancelled || error.code === import_main$1.LSPErrorCodes.ServerCancelled) if (error.data != null) throw new LSPCancellationError(error.data);
				else throw new CancellationError();
				else if (error.code === import_main$1.LSPErrorCodes.ContentModified) if (BaseLanguageClient.RequestsToCancelOnContentModified.has(type.method)) throw new CancellationError();
				else return defaultValue;
			}
			this.error(`Request ${type.method} failed.`, error, showNotification);
			throw error;
		}
		logFailedRequest(type, error) {
			if (error instanceof import_main$1.ResponseError && error.code === import_main$1.LSPErrorCodes.RequestCancelled) return;
			this.error(`Request ${type.method} failed.`, error);
		}
		/**
		* Return extension name or id.
		*/
		getExtensionName() {
			if (this.__extensionName) return this.__extensionName;
			let name = parseExtensionName(toText(this["stack"]));
			if (name && name !== "coc.nvim") {
				this.__extensionName = name;
				return name;
			}
			return this._id;
		}
		/**
		* Add __extensionName property to provider
		*/
		attachExtensionName(provider) {
			if (!provider.hasOwnProperty("__extensionName")) Object.defineProperty(provider, "__extensionName", {
				get: () => this.getExtensionName(),
				enumerable: true
			});
		}
	};
	ProposedFeatures = { createAll: (_client) => {
		return [];
	} };
}));
//#endregion
//#region src/language-client/index.ts
function getRuntimePath(runtime, serverWorkingDirectory) {
	if (path$5.isAbsolute(runtime)) return runtime;
	const mainRootPath = mainGetRootPath();
	if (mainRootPath !== void 0) {
		const result = path$5.join(mainRootPath, runtime);
		if (fs$6.existsSync(result)) return result;
	}
	if (serverWorkingDirectory !== void 0) {
		const result = path$5.join(serverWorkingDirectory, runtime);
		if (fs$6.existsSync(result)) return result;
	}
	return runtime;
}
function mainGetRootPath() {
	let folders = workspace_default.workspaceFolders;
	if (!folders || folders.length === 0) return;
	return URI.parse(folders[0].uri).fsPath;
}
function getServerWorkingDir(options) {
	let cwd = options && options.cwd;
	if (cwd && !path$5.isAbsolute(cwd)) cwd = path$5.join(workspace_default.cwd, cwd);
	if (!cwd) cwd = workspace_default.cwd;
	return new Promise((s) => {
		fs$6.lstat(cwd, (err, stats) => {
			s(!err && stats.isDirectory() ? cwd : void 0);
		});
	});
}
function startedInDebugMode(args) {
	if (args) return args.some((arg) => {
		return debugStartWith.some((value) => arg.startsWith(value)) || debugEquals.some((value) => arg === value);
	});
	return false;
}
function handleChildProcessStartError(childProcess, message) {
	if (childProcess === null) return Promise.reject(message);
	childProcess.unref();
	return new Promise((_, reject) => {
		childProcess.on("error", (err) => {
			reject(`${message} ${err}`);
		});
		setImmediate(() => reject(message));
	});
}
function checkProcessDied(childProcess) {
	if (!childProcess || childProcess.pid === void 0) return;
	setTimeout(() => {
		try {
			process.kill(childProcess.pid, 0);
			terminate(childProcess);
		} catch (error) {}
	}, STOP_TIMEOUT);
}
var logger$34, debugStartWith, debugEquals, STOP_TIMEOUT, RESTART_TIMEOUT, TransportKind, Transport, Executable, NodeModule, StreamInfo, ChildProcessInfo, LanguageClient, SettingMonitor;
var init_language_client = __esmMin((() => {
	init_esm();
	init_logger$2();
	init_util$7();
	init_is();
	init_node();
	init_processes();
	init_protocol();
	init_workspace$1();
	init_client();
	init_utils();
	init_client();
	logger$34 = createLogger$1("language-client-index");
	debugStartWith = [
		"--debug=",
		"--debug-brk=",
		"--inspect=",
		"--inspect-brk="
	];
	debugEquals = [
		"--debug",
		"--debug-brk",
		"--inspect",
		"--inspect-brk"
	];
	STOP_TIMEOUT = getConditionValue(2e3, 10);
	RESTART_TIMEOUT = getConditionValue(1e3, 10);
	TransportKind = /* @__PURE__ */ function(TransportKind) {
		TransportKind[TransportKind["stdio"] = 0] = "stdio";
		TransportKind[TransportKind["ipc"] = 1] = "ipc";
		TransportKind[TransportKind["pipe"] = 2] = "pipe";
		TransportKind[TransportKind["socket"] = 3] = "socket";
		return TransportKind;
	}({});
	(function(_Transport) {
		function isSocket(value) {
			let candidate = value;
			return candidate && candidate.kind === 3 && number(candidate.port);
		}
		_Transport.isSocket = isSocket;
	})(Transport || (Transport = {}));
	(function(_Executable) {
		function is(value) {
			return string(value.command);
		}
		_Executable.is = is;
	})(Executable || (Executable = {}));
	(function(_NodeModule) {
		function is(value) {
			return string(value.module);
		}
		_NodeModule.is = is;
	})(NodeModule || (NodeModule = {}));
	(function(_StreamInfo) {
		function is(value) {
			let candidate = value;
			return candidate && candidate.writer !== void 0 && candidate.reader !== void 0;
		}
		_StreamInfo.is = is;
	})(StreamInfo || (StreamInfo = {}));
	(function(_ChildProcessInfo) {
		function is(value) {
			let candidate = value;
			return candidate && candidate.process !== void 0 && typeof candidate.detached === "boolean";
		}
		_ChildProcessInfo.is = is;
	})(ChildProcessInfo || (ChildProcessInfo = {}));
	LanguageClient = class extends BaseLanguageClient {
		_forceDebug;
		_isInDebugMode;
		_serverProcess;
		_isDetached;
		_serverOptions;
		constructor(arg1, arg2, arg3, arg4, arg5) {
			let id;
			let name;
			let serverOptions;
			let clientOptions;
			let forceDebug;
			if (string(arg2)) {
				id = arg1;
				name = arg2;
				serverOptions = arg3;
				clientOptions = arg4;
				forceDebug = !!arg5;
			} else {
				id = arg1.toLowerCase();
				name = arg1;
				serverOptions = arg2;
				clientOptions = arg3;
				forceDebug = arg4;
			}
			super(id, name, clientOptions);
			this._serverOptions = serverOptions;
			this._forceDebug = !!forceDebug;
			this._isInDebugMode = !!forceDebug;
		}
		shutdown(mode, timeout) {
			return super.shutdown(mode, timeout).then(() => {
				if (this._serverProcess) {
					let toCheck = this._serverProcess;
					this._serverProcess = void 0;
					if (this._isDetached === void 0 || !this._isDetached) checkProcessDied(toCheck);
					this._isDetached = void 0;
				}
			}, (err) => {
				if (this._serverProcess && err.message.includes("timed out")) {
					this._serverProcess.kill("SIGKILL");
					this._serverProcess = void 0;
					return;
				}
				throw err;
			});
		}
		get serviceState() {
			return this._state;
		}
		handleConnectionClosed() {
			this._serverProcess = void 0;
			return super.handleConnectionClosed();
		}
		get isInDebugMode() {
			return this._isInDebugMode;
		}
		async restart() {
			await this.stop();
			if (this.isInDebugMode) {
				await new Promise((resolve) => setTimeout(resolve, RESTART_TIMEOUT));
				await this._start();
			} else await this._start();
		}
		createMessageTransports(encoding) {
			function getEnvironment(env, fork) {
				if (!env && !fork) return;
				let result = Object.create(null);
				Object.keys(process.env).forEach((key) => result[key] = process.env[key]);
				if (env) Object.keys(env).forEach((key) => result[key] = env[key]);
				return result;
			}
			function assertStdio(process) {
				if (process.stdin === null || process.stdout === null || process.stderr === null) {
					process.kill("SIGKILL");
					throw new Error("Process created without stdio streams");
				}
			}
			function logMessage(kind, data, outputChannel) {
				let msg = `[${kind} - ${currentTimeStamp()}] ${data}`;
				outputChannel.appendLine(msg);
			}
			function pipeStdoutToLogOutputChannel(input, outputChannel) {
				readline.createInterface({
					input,
					crlfDelay: Infinity,
					terminal: false,
					historySize: 0
				}).on("line", (data) => logMessage("Stdout", data, outputChannel));
			}
			function pipeStderrToLogOutputChannel(input, outputChannel) {
				readline.createInterface({
					input,
					crlfDelay: Infinity,
					terminal: false,
					historySize: 0
				}).on("line", (data) => logMessage("Stderr", data, outputChannel));
			}
			let server = this._serverOptions;
			if (func(server)) return server().then((result) => {
				if (MessageTransports.is(result)) {
					this._isDetached = !!result.detached;
					return result;
				} else if (StreamInfo.is(result)) {
					this._isDetached = !!result.detached;
					return {
						reader: new import_main$1.StreamMessageReader(result.reader),
						writer: new import_main$1.StreamMessageWriter(result.writer)
					};
				} else {
					let cp;
					if (ChildProcessInfo.is(result)) {
						cp = result.process;
						this._isDetached = result.detached;
					} else {
						cp = result;
						this._isDetached = false;
					}
					pipeStderrToLogOutputChannel(cp.stderr, this.outputChannel);
					return {
						reader: new import_main$1.StreamMessageReader(cp.stdout),
						writer: new import_main$1.StreamMessageWriter(cp.stdin)
					};
				}
			});
			let json;
			let runDebug = server;
			if (runDebug.run || runDebug.debug) if (typeof v8debug === "object" || this._forceDebug || startedInDebugMode(process.execArgv)) {
				json = runDebug.debug;
				this._isInDebugMode = true;
			} else {
				json = runDebug.run;
				this._isInDebugMode = false;
			}
			else json = server;
			return getServerWorkingDir(json.options).then((serverWorkingDir) => {
				if (NodeModule.is(json) && json.module) {
					let node = json;
					let transport = node.transport || 0;
					let pipeName;
					let runtime = node.runtime ? getRuntimePath(node.runtime, serverWorkingDir) : void 0;
					return new Promise((resolve, _reject) => {
						let args = node.args && node.args.slice() || [];
						if (transport === 1) args.push("--node-ipc");
						else if (transport === 0) args.push("--stdio");
						else if (transport === 2) {
							pipeName = (0, import_main$1.generateRandomPipeName)();
							args.push(`--pipe=${pipeName}`);
						} else if (Transport.isSocket(transport)) args.push(`--socket=${transport.port}`);
						args.push(`--clientProcessId=${process.pid}`);
						let options = node.options || Object.create(null);
						options.env = getEnvironment(options.env, true);
						options.execArgv = options.execArgv || [];
						options.cwd = serverWorkingDir;
						options.silent = true;
						if (runtime) options.execPath = runtime;
						if (transport === 1 || transport === 0) {
							let sp = child_process$1.fork(node.module, args, options);
							assertStdio(sp);
							this._serverProcess = sp;
							logger$34.info(`Language server "${this.id}" started with ${sp.pid}`);
							pipeStderrToLogOutputChannel(sp.stderr, this.outputChannel);
							if (transport === 1) {
								pipeStdoutToLogOutputChannel(sp.stdout, this.outputChannel);
								resolve({
									reader: new import_main$1.IPCMessageReader(this._serverProcess),
									writer: new import_main$1.IPCMessageWriter(this._serverProcess)
								});
							} else resolve({
								reader: new import_main$1.StreamMessageReader(sp.stdout),
								writer: new import_main$1.StreamMessageWriter(sp.stdin)
							});
						} else if (transport === 2) return createClientPipeTransport(pipeName).then((transport) => {
							let sp = child_process$1.fork(node.module, args, options);
							assertStdio(sp);
							logger$34.info(`Language server "${this.id}" started with ${sp.pid}`);
							this._serverProcess = sp;
							pipeStderrToLogOutputChannel(sp.stderr, this.outputChannel);
							pipeStdoutToLogOutputChannel(sp.stdout, this.outputChannel);
							transport.onConnected().then((protocol) => {
								resolve({
									reader: protocol[0],
									writer: protocol[1]
								});
							});
						});
						else if (Transport.isSocket(transport)) return createClientSocketTransport(transport.port).then((transport) => {
							let sp = child_process$1.fork(node.module, args, options);
							assertStdio(sp);
							this._serverProcess = sp;
							logger$34.info(`Language server "${this.id}" started with ${sp.pid}`);
							pipeStderrToLogOutputChannel(sp.stderr, this.outputChannel);
							pipeStdoutToLogOutputChannel(sp.stdout, this.outputChannel);
							transport.onConnected().then((protocol) => {
								resolve({
									reader: protocol[0],
									writer: protocol[1]
								});
							});
						});
					});
				} else if (Executable.is(json) && json.command) {
					let command = json;
					let args = Array.isArray(command.args) ? command.args.slice(0) : [];
					let pipeName;
					const transport = json.transport;
					if (transport === 0) args.push("--stdio");
					else if (transport === 2) {
						pipeName = (0, import_main$1.generateRandomPipeName)();
						args.push(`--pipe=${pipeName}`);
					} else if (Transport.isSocket(transport)) args.push(`--socket=${transport.port}`);
					else if (transport === 1) throw new Error(`Transport kind ipc is not supported for command executable`);
					let options = Object.assign({ shell: process.platform === "win32" }, command.options);
					options.env = getEnvironment(options.env, false);
					options.cwd = options.cwd ?? serverWorkingDir;
					options.windowsHide = true;
					const attachProcess = (serverProcess, pipiStdout = true) => {
						this._serverProcess = serverProcess;
						this._isDetached = !!options.detached;
						logger$34.info(`Language server "${this.id}" started with ${serverProcess.pid}`);
						if (pipiStdout) pipeStdoutToLogOutputChannel(serverProcess.stdout, this.outputChannel);
						pipeStderrToLogOutputChannel(serverProcess.stderr, this.outputChannel);
					};
					let cmd = workspace_default.expand(json.command);
					if (transport === void 0 || transport === 0) {
						const serverProcess = child_process$1.spawn(cmd, args, options);
						if (!serverProcess || !serverProcess.pid) return handleChildProcessStartError(serverProcess, `Launching server using command ${cmd} failed.`);
						attachProcess(serverProcess, false);
						return Promise.resolve({
							reader: new import_main$1.StreamMessageReader(serverProcess.stdout),
							writer: new import_main$1.StreamMessageWriter(serverProcess.stdin)
						});
					} else if (transport === 2 || Transport.isSocket(transport)) {
						let promise;
						if (transport === 2) promise = createClientPipeTransport(pipeName);
						else promise = createClientSocketTransport(transport.port);
						return promise.then((transport) => {
							const serverProcess = child_process$1.spawn(cmd, args, options);
							if (!serverProcess || !serverProcess.pid) {
								transport.dispose();
								return handleChildProcessStartError(serverProcess, `Launching server using command ${cmd} failed.`);
							}
							attachProcess(serverProcess);
							return transport.onConnected().then((protocol) => {
								return {
									reader: protocol[0],
									writer: protocol[1]
								};
							});
						});
					}
				}
				return Promise.reject(/* @__PURE__ */ new Error(`Unsupported server configuration ${JSON.stringify(server, null, 2)}`));
			}).finally(() => {
				if (this._serverProcess !== void 0) this._serverProcess.on("exit", (code, signal) => {
					if (code === 0) this.info("Server process exited successfully", void 0, false);
					else if (code !== null) this.error(`Server process exited with code ${code}.`, void 0, false);
					if (signal !== null) this.error(`Server process exited with signal ${signal}.`, void 0, false);
				});
			});
		}
	};
	SettingMonitor = class {
		_client;
		_setting;
		_listeners;
		constructor(_client, _setting) {
			this._client = _client;
			this._setting = _setting;
			this._listeners = [];
		}
		start() {
			workspace_default.onDidChangeConfiguration((e) => {
				if (e.affectsConfiguration(this._setting)) this.onDidChangeConfiguration();
			}, null, this._listeners);
			this.onDidChangeConfiguration();
			return { dispose: () => {
				disposeAll(this._listeners);
				this._client.dispose();
			} };
		}
		onDidChangeConfiguration() {
			let index = this._setting.indexOf(".");
			let primary = index >= 0 ? this._setting.substring(0, index) : this._setting;
			let rest = index >= 0 ? this._setting.substring(index + 1) : void 0;
			let enabled = rest ? workspace_default.getConfiguration(primary).get(rest, true) : workspace_default.getConfiguration().get(primary, true);
			if (enabled && this._client.needsStart()) this._client.start().catch((error) => this._client.error("Start failed after configuration change", error, "force"));
			else if (!enabled && this._client.needsStop()) this._client.stop().catch((error) => this._client.error("Stop failed after configuration change", error, "force"));
		}
	};
}));
//#endregion
//#region src/services.ts
function documentSelectorToLanguageIds(documentSelector) {
	let res = documentSelector.map((filter) => {
		if (typeof filter == "string") return filter;
		return filter.language;
	});
	res = res.filter((s) => typeof s == "string");
	return Array.from(new Set(res));
}
function getLanguageServerOptions(id, name, config, folder) {
	let { command, module, port, args, filetypes } = config;
	args = args || [];
	if (!filetypes) {
		window_default.showErrorMessage(`Wrong configuration of LS "${name}", filetypes not found`);
		return null;
	}
	if (!command && !module && !port) {
		window_default.showErrorMessage(`Wrong configuration of LS "${name}", no command or module specified.`);
		return null;
	}
	let serverOptions;
	args = args.map((s) => workspace_default.expand(s));
	if (module) {
		module = workspace_default.expand(module);
		if (!fs$6.existsSync(module)) {
			window_default.showErrorMessage(`Module file "${module}" not found for LS "${name}"`);
			return null;
		}
		serverOptions = {
			module,
			runtime: config.runtime ?? process.execPath,
			args,
			transport: getTransportKind(config),
			options: getForkOptions(config)
		};
	} else if (command) serverOptions = {
		command,
		args,
		options: getSpawnOptions(config)
	};
	else serverOptions = () => new Promise((resolve, reject) => {
		let client = new net$2.Socket();
		let host = config.host ?? "127.0.0.1";
		logger$33.info(`languageserver "${id}" connecting to ${host}:${port}`);
		client.connect(port, host, () => {
			resolve({
				reader: client,
				writer: client
			});
		});
		client.on("error", (e) => {
			reject(/* @__PURE__ */ new Error(`Connection error for ${id}: ${e.message}`));
		});
	});
	let disabledFeatures = Array.from(config.disabledFeatures || []);
	for (let key of [
		"disableWorkspaceFolders",
		"disableCompletion",
		"disableDiagnostics"
	]) if (config[key] === true) {
		logger$33.warn(`Language server config "${key}" is deprecated, use "disabledFeatures" instead.`);
		let s = key.slice(7);
		disabledFeatures.push(s[0].toLowerCase() + s.slice(1));
	}
	let disableSnippetCompletion = !!config.disableSnippetCompletion;
	let ignoredRootPaths = toArray(config.ignoredRootPaths);
	let clientOptions = {
		workspaceFolder: folder == null ? void 0 : {
			name: path$5.basename(folder.fsPath),
			uri: folder.toString()
		},
		rootPatterns: config.rootPatterns,
		requireRootPattern: config.requireRootPattern,
		ignoredRootPaths: ignoredRootPaths.map((s) => workspace_default.expand(s)),
		disableSnippetCompletion,
		disableDynamicRegister: !!config.disableDynamicRegister,
		disabledFeatures,
		formatterPriority: config.formatterPriority,
		documentSelector: getDocumentSelector(config.filetypes, config.additionalSchemes),
		revealOutputChannelOn: getRevealOutputChannelOn(config.revealOutputChannelOn),
		synchronize: { configurationSection: `${id}.settings` },
		diagnosticCollectionName: name,
		outputChannelName: id,
		stdioEncoding: config.stdioEncoding,
		progressOnInitialization: config.progressOnInitialization === true,
		initializationOptions: config.initializationOptions ?? {}
	};
	if (config.maxRestartCount) clientOptions.connectionOptions = { maxRestartCount: config.maxRestartCount };
	return [clientOptions, serverOptions];
}
function isValidServerConfig(key, config) {
	let errors = [];
	for (let field of [
		"module",
		"command",
		"transport"
	]) {
		let val = config[field];
		if (val && typeof val !== "string") errors.push(`"${field}" field of languageserver ${key} should be string`);
	}
	if (config.transportPort != null && typeof config.transportPort !== "number") errors.push(`"transportPort" field of languageserver ${key} should be number`);
	if (!Array.isArray(config.filetypes) || !config.filetypes.every((s) => typeof s === "string")) errors.push(`"filetypes" field of languageserver ${key} should be array of string`);
	if (config.additionalSchemes && (!Array.isArray(config.additionalSchemes) || config.additionalSchemes.some((s) => typeof s !== "string"))) errors.push(`"additionalSchemes" field of languageserver ${key} should be array of string`);
	if (errors.length) {
		logger$33.error(`Invalid language server configuration for ${key}`, errors.join("\n"));
		return false;
	}
	return true;
}
function getRevealOutputChannelOn(revealOn) {
	switch (revealOn) {
		case "info": return 1;
		case "warn": return 2;
		case "error": return 3;
		case "never": return 4;
		default: return 4;
	}
}
function getDocumentSelector(filetypes, additionalSchemes) {
	let documentSelector = [];
	let schemes = ["file", "untitled"].concat(additionalSchemes || []);
	if (!filetypes) return schemes.map((s) => ({ scheme: s }));
	filetypes.forEach((filetype) => {
		documentSelector.push(...schemes.map((scheme) => ({
			language: filetype,
			scheme
		})));
	});
	return documentSelector;
}
function getTransportKind(config) {
	let { transport, transportPort } = config;
	if (!transport || transport == "ipc") return 1;
	if (transport == "stdio") return 0;
	if (transport == "pipe") return 2;
	return {
		kind: 3,
		port: transportPort
	};
}
function getForkOptions(config) {
	return {
		cwd: config.cwd && workspace_default.expand(config.cwd),
		execArgv: config.execArgv ?? [],
		env: config.env ?? void 0
	};
}
function getSpawnOptions(config) {
	return {
		cwd: config.cwd && workspace_default.expand(config.cwd),
		detached: !!config.detached,
		shell: process.platform === "win32" || !!config.shell,
		env: config.env ?? void 0
	};
}
function convertState(state) {
	switch (state) {
		case 2: return 3;
		case 3: return 1;
		case 1: return 5;
		default: return;
	}
}
function stateString(state) {
	switch (state) {
		case 2: return "running";
		case 3: return "starting";
		case 1: return "stopped";
		case 4: return "startFailed";
		default: return "unknown";
	}
}
function getStateName(state) {
	switch (state) {
		case 0: return "init";
		case 3: return "running";
		case 1: return "starting";
		case 2: return "startFailed";
		case 4: return "stopping";
		case 5: return "stopped";
		default: return "unknown";
	}
}
var logger$33, ServiceStat, ServiceManager, services_default;
var init_services$1 = __esmMin((() => {
	init_esm();
	init_events();
	init_language_client();
	init_logger$2();
	init_util$7();
	init_array();
	init_node();
	init_object();
	init_protocol();
	init_window();
	init_workspace$1();
	logger$33 = createLogger$1("services");
	ServiceStat = /* @__PURE__ */ function(ServiceStat) {
		ServiceStat[ServiceStat["Initial"] = 0] = "Initial";
		ServiceStat[ServiceStat["Starting"] = 1] = "Starting";
		ServiceStat[ServiceStat["StartFailed"] = 2] = "StartFailed";
		ServiceStat[ServiceStat["Running"] = 3] = "Running";
		ServiceStat[ServiceStat["Stopping"] = 4] = "Stopping";
		ServiceStat[ServiceStat["Stopped"] = 5] = "Stopped";
		return ServiceStat;
	}({});
	ServiceManager = class {
		registered = /* @__PURE__ */ new Map();
		disposables = [];
		pendingNotifications = /* @__PURE__ */ new Map();
		/**
		* @deprecated
		*/
		regist;
		/**
		* @deprecated
		*/
		registLanguageClient;
		constructor() {
			this.registLanguageClient = this.registerLanguageClient.bind(this);
			this.regist = this.register.bind(this);
		}
		init() {
			workspace_default.onDidOpenTextDocument((document) => {
				this.start(document);
			}, null, this.disposables);
			const iterate = (folders) => {
				for (let folder of folders) this.registerClientsFromFolder(folder);
			};
			workspace_default.onDidChangeWorkspaceFolders((e) => {
				iterate(e.added);
			}, null, this.disposables);
			let lspConfig = workspace_default.initialConfiguration.get("languageserver", {});
			this.registerClientsByConfig(lspConfig);
			iterate(workspace_default.workspaceFolders);
			workspace_default.onDidChangeConfiguration((e) => {
				if (e.affectsConfiguration("languageserver")) {
					let lspConfig = workspace_default.getConfiguration("languageserver", null);
					this.registerClientsByConfig(lspConfig);
				}
			}, null, this.disposables);
		}
		registerClientsFromFolder(workspaceFolder) {
			let uri = URI.parse(workspaceFolder.uri);
			let config = workspace_default.getConfiguration(void 0, uri).inspect("languageserver").workspaceFolderValue;
			this.registerClientsByConfig(config, uri);
		}
		register(service) {
			let { id } = service;
			if (this.registered.get(id)) return;
			this.registered.set(id, service);
			this.tryStartService(service);
			service.onServiceReady(() => {
				logger$33.info(`service ${id} started`);
			}, null, this.disposables);
			return import_main$1.Disposable.create(() => {
				if (!this.registered.has(id)) return;
				service.dispose();
				this.registered.delete(id);
			});
		}
		tryStartService(service) {
			if (!events_default.ready) {
				let disposable = events_default.on("ready", () => {
					disposable.dispose();
					if (this.shouldStart(service)) service.start();
				});
			} else if (this.shouldStart(service)) service.start();
		}
		getService(id) {
			let service = this.registered.get(id);
			if (!service) service = this.registered.get(`languageserver.${id}`);
			return service;
		}
		shouldStart(service) {
			if (service.state != 0) return false;
			let selector = service.selector;
			for (let doc of workspace_default.documents) if (workspace_default.match(selector, doc.textDocument)) return true;
			return false;
		}
		async start(document) {
			let services = [];
			for (let service of this.registered.values()) if (service.state == 0 && workspace_default.match(service.selector, document) > 0) services.push(service);
			await Promise.allSettled(services.map((service) => {
				return service.start();
			}));
		}
		stop(id) {
			let service = this.registered.get(id);
			if (service) return Promise.resolve(service.stop());
		}
		async toggle(id) {
			let service = this.registered.get(id);
			if (!service) throw new Error(`Service ${id} not found`);
			let { state } = service;
			if (state == 3) await Promise.resolve(service.stop());
			else if (state == 0 || state == 2) await service.start();
			else if (state == 5) await service.restart();
		}
		getServiceStats() {
			let res = [];
			for (let [id, service] of this.registered) res.push({
				id,
				languageIds: documentSelectorToLanguageIds(service.selector),
				state: getStateName(service.state)
			});
			return res;
		}
		registerClientsByConfig(lspConfig, folder) {
			for (let key of Object.keys(toObject(lspConfig))) {
				let config = lspConfig[key];
				if (!isValidServerConfig(key, config)) continue;
				this.registerLanguageClient(key, config, folder);
			}
		}
		async getLanguageClient(id) {
			let service = this.getService(id);
			if (!service) await wait(100);
			service = this.getService(id);
			if (!service || !service.client) throw new Error(`Language server ${id} not found`);
			return service.client;
		}
		async sendNotification(id, method, params) {
			let client = await this.getLanguageClient(id);
			await Promise.resolve(client.sendNotification(method, params));
		}
		async sendRequest(id, method, params, token) {
			let client = await this.getLanguageClient(id);
			token = token ?? import_main$1.CancellationToken.None;
			return await Promise.resolve(client.sendRequest(method, params, token));
		}
		registerNotification(id, method) {
			let service = this.getService(id);
			if (service && service.client) service.client.onNotification(method, async (result) => {
				this.sendNotificationVim(id, method, result);
			});
			let arr = this.pendingNotifications.get(id) ?? [];
			arr.push({
				id,
				method
			});
			this.pendingNotifications.set(id, arr);
		}
		getRegisteredNotifications(id) {
			id = id.startsWith("languageserver") ? id.slice(15) : id;
			return this.pendingNotifications.get(id) ?? [];
		}
		sendNotificationVim(id, method, result) {
			workspace_default.nvim.call("coc#do_notify", [
				id,
				method,
				result
			], true);
		}
		registerLanguageClient(name, config, folder) {
			let id = typeof name === "string" ? `languageserver.${name}` : name.id;
			let disposables = [];
			let onDidServiceReady = new import_main$1.Emitter();
			let client = typeof name === "string" ? null : name;
			if (this.registered.has(id)) return import_main$1.Disposable.create(() => {});
			if (client && typeof client.dispose === "function") disposables.push(client);
			let created = false;
			let service = {
				id,
				client,
				name: typeof name === "string" ? name : name.name,
				selector: typeof name === "string" ? getDocumentSelector(config.filetypes, config.additionalSchemes) : name.clientOptions.documentSelector,
				state: client && client.state === 2 ? 3 : 0,
				onServiceReady: onDidServiceReady.event,
				start: async () => {
					if (!created) {
						if (typeof name == "string" && !client) {
							let config = workspace_default.getConfiguration(void 0, folder).get(`languageserver.${name}`, {});
							let opts = getLanguageServerOptions(id, name, config, folder);
							if (!opts || config.enable === false) return;
							client = new LanguageClient(id, name, opts[1], opts[0]);
							service.selector = opts[0].documentSelector;
							service.client = client;
							disposables.push(client);
						}
						created = true;
						for (let item of this.getRegisteredNotifications(id)) service.client.onNotification(item.method, async (result) => {
							this.sendNotificationVim(item.id, item.method, result);
						});
						client.onDidChangeState((changeEvent) => {
							let { oldState, newState } = changeEvent;
							service.state = convertState(newState);
							let oldStr = stateString(oldState);
							let newStr = stateString(newState);
							logger$33.info(`LanguageClient ${client.name} state change: ${oldStr} => ${newStr}`);
						}, null, disposables);
					}
					try {
						if (!client.needsStart()) service.state = convertState(client.state);
						else {
							service.state = 1;
							logger$33.debug(`starting service: ${id}`);
							await client.start();
							onDidServiceReady.fire(void 0);
						}
					} catch (e) {
						window_default.showErrorMessage(`Server ${id} failed to start: ${e}`);
						logger$33.error(`Server ${id} failed to start:`, e);
						service.state = 2;
					}
				},
				dispose: async () => {
					onDidServiceReady.dispose();
					disposeAll(disposables);
				},
				stop: async () => {
					if (!client || !client.needsStop()) return;
					await Promise.resolve(client.stop());
				},
				restart: async () => {
					if (client) {
						service.state = 1;
						await client.restart();
					} else await service.start();
				}
			};
			return this.register(service);
		}
		dispose() {
			disposeAll(this.disposables);
			for (let service of this.registered.values()) service.dispose();
			this.registered.clear();
		}
	};
	services_default = new ServiceManager();
}));
//#endregion
//#region src/list/source/services.ts
var ServicesList;
var init_services = __esmMin((() => {
	init_services$1();
	init_util$7();
	init_basic();
	init_formatting$1();
	ServicesList = class extends BasicList {
		defaultAction = "toggle";
		description = "registered services of coc.nvim";
		name = "services";
		constructor() {
			super();
			this.addAction("toggle", async (item) => {
				let { id } = item.data;
				await services_default.toggle(id);
				await wait(50);
			}, {
				persist: true,
				reload: true
			});
		}
		async loadItems(_context) {
			let stats = services_default.getServiceStats();
			return formatListItems(this.alignColumns, stats.map((stat) => {
				return {
					label: [
						stat.state == "running" ? "*" : " ",
						stat.id,
						`[${stat.state}]`,
						stat.languageIds.join(", ")
					],
					data: { id: stat.id }
				};
			}));
		}
		doHighlight() {
			let { nvim } = this;
			nvim.pauseNotification();
			nvim.command("syntax match CocServicesPrefix /\\v^./ contained containedin=CocServicesLine", true);
			nvim.command("syntax match CocServicesName /\\v%3c\\S+/ contained containedin=CocServicesLine", true);
			nvim.command("syntax match CocServicesStat /\\v\\t\\[\\w+\\]/ contained containedin=CocServicesLine", true);
			nvim.command("syntax match CocServicesLanguages /\\v(\\])@<=.*$/ contained containedin=CocServicesLine", true);
			nvim.command("highlight default link CocServicesPrefix Special", true);
			nvim.command("highlight default link CocServicesName Type", true);
			nvim.command("highlight default link CocServicesStat Statement", true);
			nvim.command("highlight default link CocServicesLanguages Comment", true);
			nvim.resumeNotification(false, true);
		}
	};
}));
//#endregion
//#region src/list/source/sources.ts
var SourcesList;
var init_sources$1 = __esmMin((() => {
	init_main$2();
	init_esm();
	init_sources();
	init_basic();
	init_formatting$1();
	SourcesList = class extends BasicList {
		defaultAction = "toggle";
		description = "registered completion sources";
		name = "sources";
		constructor() {
			super();
			this.addAction("toggle", async (item) => {
				let { name } = item.data;
				sources_default.toggleSource(name);
			}, {
				persist: true,
				reload: true
			});
			this.addAction("refresh", async (item) => {
				let { name } = item.data;
				await sources_default.refresh(name);
			}, {
				persist: true,
				reload: true
			});
			this.addAction("open", async (item, context) => {
				let { location } = item;
				if (location) await this.jumpTo(location, null, context);
			});
		}
		async loadItems() {
			return sources_default.sourceStats().map((stat) => {
				let prefix = stat.disabled ? " " : "*";
				let location;
				if (stat.filepath) location = Location.create(URI.file(stat.filepath).toString(), Range.create(0, 0, 0, 0));
				return {
					label: `${prefix} ${fixWidth(stat.name, 22)} ${fixWidth("[" + stat.shortcut + "]", 10)} ${fixWidth(stat.triggerCharacters.join(""), 10)} ${fixWidth(stat.priority.toString(), 3)} ${stat.filetypes.join(",")}`,
					location,
					data: { name: stat.name }
				};
			});
		}
		doHighlight() {
			let { nvim } = this;
			nvim.pauseNotification();
			nvim.command("syntax match CocSourcesPrefix /\\v^./ contained containedin=CocSourcesLine", true);
			nvim.command("syntax match CocSourcesName /\\v%3c\\S+/ contained containedin=CocSourcesLine", true);
			nvim.command("syntax match CocSourcesType /\\v%25v.*%36v/ contained containedin=CocSourcesLine", true);
			nvim.command("syntax match CocSourcesPriority /\\v%46v.*%52v/ contained containedin=CocSourcesLine", true);
			nvim.command("syntax match CocSourcesFileTypes /\\v\\S+$/ contained containedin=CocSourcesLine", true);
			nvim.command("highlight default link CocSourcesPrefix Special", true);
			nvim.command("highlight default link CocSourcesName Type", true);
			nvim.command("highlight default link CocSourcesPriority Number", true);
			nvim.command("highlight default link CocSourcesFileTypes Comment", true);
			nvim.command("highlight default link CocSourcesType Statement", true);
			nvim.resumeNotification(false, true);
		}
	};
}));
//#endregion
//#region src/list/source/symbols.ts
function toTargetLocation(location) {
	if (!Location.is(location)) return Location.create(location.uri, Range.create(0, 0, 0, 0));
	let loc = Location.create(location.uri, Range.create(location.range.start, location.range.start));
	loc.targetRange = location.range;
	return loc;
}
function sortSymbolItems(a, b) {
	if (a.data.score != b.data.score) return b.data.score - a.data.score;
	if (a.data.kind != b.data.kind) return a.data.kind - b.data.kind;
	return a.data.file.length - b.data.file.length;
}
var Symbols$1;
var init_symbols$1 = __esmMin((() => {
	init_main$2();
	init_languages();
	init_util$7();
	init_array();
	init_convert();
	init_node();
	init_protocol();
	init_string$1();
	init_workspace$1();
	init_formatting$1();
	init_location();
	Symbols$1 = class extends LocationList {
		interactive = true;
		description = "search workspace symbols";
		detail = "Symbols list is provided by server, it works on interactive mode only.";
		fuzzyMatch = workspace_default.createFuzzyMatch();
		name = "symbols";
		options = [{
			name: "-k, -kind KIND",
			description: "Filter symbols by kind.",
			hasValue: true
		}];
		async loadItems(context, token) {
			let { input } = context;
			let args = this.parseArguments(context.args);
			let filterKind = args.kind ? args.kind.toString().toLowerCase() : "";
			if (!languages_default.hasProvider("workspaceSymbols", {
				uri: "file:///1",
				languageId: ""
			})) throw new Error("No workspace symbols provider registered");
			let symbols = await languages_default.getWorkspaceSymbols(input, token);
			if (token.isCancellationRequested) return [];
			let excludes = this.getConfig().get("excludes", []);
			let items = [];
			this.fuzzyMatch.setPattern(input, true);
			for (let s of symbols) {
				let kind = getSymbolKind(s.kind);
				if (filterKind && kind.toLowerCase() != filterKind) continue;
				let file = formatUri(s.location.uri, workspace_default.cwd);
				if (excludes.some((p) => minimatch(file, p))) continue;
				let item = this.createListItem(input, s, kind, file);
				items.push(item);
			}
			this.fuzzyMatch.free();
			items.sort(sortSymbolItems);
			return items;
		}
		async resolveItem(item) {
			let symbolItem = item.data.original;
			if (!symbolItem || Location.is(symbolItem.location)) return null;
			let tokenSource = new import_main$1.CancellationTokenSource();
			let resolved = await languages_default.resolveWorkspaceSymbol(symbolItem, tokenSource.token);
			resolved = defaultValue(resolved, symbolItem);
			if (Location.is(resolved.location)) {
				symbolItem.location = resolved.location;
				item.location = toTargetLocation(resolved.location);
			}
			return item;
		}
		createListItem(input, item, kind, file) {
			let { name } = item;
			let label = "";
			let ansiHighlights = [];
			let parts = [
				name,
				`[${kind}]`,
				this.formatFilepath(file)
			];
			let highlights = [
				"Normal",
				"Typedef",
				"Comment"
			];
			for (let index = 0; index < parts.length; index++) {
				const text = parts[index];
				let start = byteLength(label);
				label += text;
				let end = byteLength(label);
				if (index != parts.length - 1) label += " ";
				ansiHighlights.push({
					span: [start, end],
					hlGroup: highlights[index]
				});
				if (index === 0 && toArray(item.tags).includes(SymbolTag.Deprecated) || item["deprecated"]) ansiHighlights.push({
					span: [start, end],
					hlGroup: "CocDeprecatedHighlight"
				});
			}
			let score = 0;
			if (input.length > 0) {
				let result = this.fuzzyMatch.matchHighlights(name, "CocListSearch");
				if (result) {
					score = result.score;
					ansiHighlights.push(...result.highlights);
				}
			}
			return {
				label,
				filterText: "",
				ansiHighlights,
				location: toTargetLocation(item.location),
				data: {
					original: item,
					input,
					kind: item.kind,
					file,
					score
				}
			};
		}
	};
}));
//#endregion
//#region src/list/manager.ts
function createConfigurationNode(name, interactive, id) {
	let properties = {};
	properties[`list.source.${name}.defaultAction`] = {
		type: "string",
		default: null,
		description: `Default action of "${name}" list.`
	};
	properties[`list.source.${name}.defaultOptions`] = {
		type: "array",
		default: interactive ? ["--interactive"] : [],
		description: `Default list options of "${name}" list, only used when both list option and argument are empty.`,
		uniqueItems: true,
		items: {
			type: "string",
			enum: [
				"--top",
				"--normal",
				"--no-sort",
				"--input",
				"--height",
				"--tab",
				"--strict",
				"--regex",
				"--ignore-case",
				"--number-select",
				"--reverse",
				"--interactive",
				"--auto-preview",
				"--first",
				"--no-quit"
			]
		}
	};
	properties[`list.source.${name}.defaultArgs`] = {
		type: "array",
		default: [],
		description: `Default argument list of "${name}" list, only used when list argument is empty.`,
		uniqueItems: true,
		items: { type: "string" }
	};
	let node = {
		scope: 1,
		properties
	};
	if (id) node.extensionInfo = { id };
	return node;
}
var logger$32, mouseKeys, winleaveDalay, ListManager, manager_default$1;
var init_manager$2 = __esmMin((() => {
	init_registry();
	init_events();
	init_extension();
	init_logger$2();
	init_util$7();
	init_constants();
	init_errors();
	init_extensionRegistry();
	init_node();
	init_protocol();
	init_registry$1();
	init_string$1();
	init_window();
	init_workspace$1();
	init_configuration$1();
	init_history();
	init_mappings();
	init_prompt();
	init_session$2();
	init_commands$1();
	init_diagnostics();
	init_extensions();
	init_folders();
	init_links$1();
	init_lists();
	init_location();
	init_notifications();
	init_outline$1();
	init_services();
	init_sources$1();
	init_symbols$1();
	logger$32 = createLogger$1("list-manager");
	mouseKeys = [
		"<LeftMouse>",
		"<LeftDrag>",
		"<LeftRelease>",
		"<2-LeftMouse>"
	];
	winleaveDalay = isVim ? 50 : 0;
	ListManager = class {
		prompt;
		mappings;
		plugTs = 0;
		sessionsMap = /* @__PURE__ */ new Map();
		lastSession;
		disposables = [];
		listMap = /* @__PURE__ */ new Map();
		constructor() {
			InputHistory.migrate(dataHome);
		}
		get nvim() {
			return workspace_default.nvim;
		}
		init(nvim) {
			this.prompt = new Prompt(nvim);
			this.mappings = new Mappings(this, nvim);
			let signText = configuration_default.get("selectedSignText", "*");
			nvim.command(`sign define CocSelected text=${signText} texthl=CocSelectedText linehl=CocSelectedLine`, true);
			events_default.on("InputChar", this.onInputChar, this, this.disposables);
			events_default.on("FocusGained", async () => {
				if (await this.getCurrentSession()) this.prompt.drawPrompt();
			}, null, this.disposables);
			events_default.on("WinEnter", (winid) => {
				let session = this.getSessionByWinid(winid);
				if (session) this.prompt.start(session.listOptions);
			}, null, this.disposables);
			let timer;
			events_default.on("WinLeave", (winid) => {
				clearTimeout(timer);
				if (this.getSessionByWinid(winid)) timer = setTimeout(() => {
					this.prompt.cancel();
				}, winleaveDalay);
			}, null, this.disposables);
			workspace_default.onDidChangeConfiguration((e) => {
				if (e.source !== 0 && e.affectsConfiguration("list")) this.mappings.createMappings();
			}, null, this.disposables);
			this.prompt.onDidChangeInput(() => {
				this.session?.onInputChange();
			});
		}
		registerLists() {
			this.registerList(new LinksList(), true);
			this.registerList(new LocationList(), true);
			this.registerList(new Symbols$1(), true);
			this.registerList(new Outline(), true);
			this.registerList(new CommandsList(), true);
			this.registerList(new ExtensionList(extension_default.manager), true);
			this.registerList(new DiagnosticsList(this), true);
			this.registerList(new NotificationsList(), true);
			this.registerList(new SourcesList(), true);
			this.registerList(new ServicesList(), true);
			this.registerList(new ListsList(this.listMap), true);
			this.registerList(new FoldList(), true);
		}
		async start(args) {
			let res = this.parseArgs(args);
			if (!res) return;
			let { name } = res.list;
			let curr = this.sessionsMap.get(name);
			if (curr) curr.dispose();
			this.prompt.start(res.options);
			let session = new ListSession(this.nvim, this.prompt, res.list, res.options, res.listArgs);
			this.sessionsMap.set(name, session);
			this.lastSession = session;
			try {
				await session.start(args);
			} catch (e) {
				this.nvim.call("coc#prompt#stop_prompt", ["list"], true);
				this.nvim.command(`echo ""`, true);
				if (isCancellationError(e)) return;
				window_default.showErrorMessage(`Error on "CocList ${name}": ${toErrorText(e)}`);
				this.nvim.redrawVim();
				logger$32.error(`Error on load ${name} list:`, e);
			}
		}
		getSessionByWinid(winid) {
			for (let session of this.sessionsMap.values()) if (session && session.winid == winid) {
				this.lastSession = session;
				return session;
			}
			return null;
		}
		async getCurrentSession() {
			let { id } = await this.nvim.window;
			for (let session of this.sessionsMap.values()) if (session && session.winid == id) {
				this.lastSession = session;
				return session;
			}
			return null;
		}
		async resume(name) {
			if (!name) await this.session?.resume();
			else {
				let session = this.sessionsMap.get(name);
				if (!session) {
					window_default.showWarningMessage(`Can't find exists ${name} list`);
					return;
				}
				this.lastSession = session;
				await session.resume();
			}
		}
		async doAction(name) {
			let lastSession = this.lastSession;
			if (!lastSession) return;
			await lastSession.doAction(name);
		}
		async first(name) {
			let s = this.getSession(name);
			if (s) await s.first();
		}
		async last(name) {
			let s = this.getSession(name);
			if (s) await s.last();
		}
		async previous(name) {
			let s = this.getSession(name);
			if (s) await s.previous();
		}
		async next(name) {
			let s = this.getSession(name);
			if (s) await s.next();
		}
		getSession(name) {
			if (!name) return this.session;
			return this.sessionsMap.get(name);
		}
		async cancel(close = true) {
			this.prompt.cancel();
			if (!close) return;
			if (this.session) await this.session.hide();
		}
		/**
		* Clear all list sessions
		*/
		reset() {
			this.prompt.cancel();
			this.lastSession = void 0;
			for (let session of this.sessionsMap.values()) session.dispose();
			this.sessionsMap.clear();
			this.nvim.call("coc#prompt#stop_prompt", ["list"], true);
		}
		async switchMatcher() {
			await this.session?.switchMatcher();
		}
		async togglePreview() {
			let { nvim } = this;
			if (await nvim.call("coc#list#get_preview", [0]) != -1) {
				await nvim.call("coc#list#close_preview", []);
				await nvim.command("redraw");
			} else await this.doAction("preview");
		}
		async chooseAction() {
			let { lastSession } = this;
			if (lastSession) await lastSession.chooseAction();
		}
		parseArgs(args) {
			let options = [];
			let interactive = false;
			let autoPreview = false;
			let numberSelect = false;
			let noQuit = false;
			let first = false;
			let reverse = false;
			let name;
			let input = "";
			let matcher = "fuzzy";
			let position = "bottom";
			let listArgs = [];
			let listOptions = [];
			let height;
			for (let arg of args) if (!name && arg.startsWith("-")) listOptions.push(arg);
			else if (!name) {
				if (!/^\w+$/.test(arg)) {
					window_default.showErrorMessage(`Invalid list option: "${arg}"`);
					return null;
				}
				name = arg;
			} else listArgs.push(arg);
			name = name || "lists";
			let config = workspace_default.initialConfiguration.get(`list.source.${name}`);
			if (!listOptions.length && !listArgs.length) listOptions = defaultValue(config?.defaultOptions, []);
			if (!listArgs.length) listArgs = defaultValue(config?.defaultArgs, []);
			for (let opt of listOptions) if (opt.startsWith("--input=")) input = opt.slice(8);
			else if (opt.startsWith("--height=")) height = toInteger(opt.slice(9));
			else if (opt == "--number-select" || opt == "-N") numberSelect = true;
			else if (opt == "--auto-preview" || opt == "-A") autoPreview = true;
			else if (opt == "--regex" || opt == "-R") matcher = "regex";
			else if (opt == "--strict" || opt == "-S") matcher = "strict";
			else if (opt == "--interactive" || opt == "-I") interactive = true;
			else if (opt == "--top") position = "top";
			else if (opt == "--tab") position = "tab";
			else if (opt == "--ignore-case" || opt == "--normal" || opt == "--no-sort") options.push(opt.slice(2));
			else if (opt == "--first") first = true;
			else if (opt == "--reverse") reverse = true;
			else if (opt == "--no-quit") noQuit = true;
			else {
				window_default.showErrorMessage(`Invalid option "${opt}" of list`);
				return null;
			}
			let list = this.listMap.get(name);
			if (!list) {
				window_default.showErrorMessage(`List ${name} not found`);
				return null;
			}
			if (interactive && !list.interactive) {
				window_default.showErrorMessage(`Interactive mode of "${name}" list not supported`);
				return null;
			}
			return {
				list,
				listArgs,
				options: {
					numberSelect,
					autoPreview,
					height,
					reverse,
					noQuit,
					first,
					input,
					interactive,
					matcher,
					position,
					ignorecase: options.includes("ignore-case") ? true : false,
					mode: !options.includes("normal") ? "insert" : "normal",
					sort: !options.includes("no-sort") ? true : false
				}
			};
		}
		async onInputChar(session, ch, charmod) {
			if (!ch || session != "list") return;
			let { mode } = this.prompt;
			let now = Date.now();
			if (ch == "<plug>" || this.plugTs && now - this.plugTs < 20) {
				this.plugTs = now;
				return;
			}
			if (ch == "<esc>") {
				await this.cancel();
				return;
			}
			if (mode == "insert") await this.onInsertInput(ch, charmod);
			else await this.onNormalInput(ch, charmod);
		}
		async onInsertInput(ch, charmod) {
			let { session } = this;
			if (mouseKeys.includes(ch)) {
				await this.onMouseEvent(ch);
				return;
			}
			if (!session) return;
			if (await session.doNumberSelect(ch)) return;
			if (await this.mappings.doInsertKeymap(ch) || charmod) return;
			if (ch.startsWith("<") && ch.endsWith(">")) {
				await this.feedkeys(ch, false);
				return;
			}
			for (let s of ch) {
				let code = s.codePointAt(0);
				if (code == 65533) return;
				if (code < 32 || code >= 127 && code <= 159) return;
				await this.prompt.acceptCharacter(s);
			}
		}
		async onNormalInput(ch, _charmod) {
			if (mouseKeys.includes(ch)) {
				await this.onMouseEvent(ch);
				return;
			}
			if (!await this.mappings.doNormalKeymap(ch)) await this.feedkeys(ch);
		}
		onMouseEvent(key) {
			return this.session?.onMouseEvent(key);
		}
		async feedkeys(key, remap = true) {
			let { nvim } = this;
			key = key.startsWith("<") && key.endsWith(">") ? `\\${key}` : key;
			await nvim.call("coc#prompt#stop_prompt", ["list"]);
			await nvim.call("eval", [`feedkeys("${key}", "${remap ? "i" : "in"}")`]);
			this.triggerCursorMoved();
			this.prompt.start();
		}
		async command(command) {
			let { nvim } = this;
			await nvim.call("coc#prompt#stop_prompt", ["list"]);
			await nvim.command(command);
			this.triggerCursorMoved();
			this.prompt.start();
		}
		async normal(command, bang) {
			let { nvim } = this;
			await nvim.call("coc#prompt#stop_prompt", ["list"]);
			await nvim.command(`normal${bang ? "!" : ""} ${command}`);
			this.triggerCursorMoved();
			this.prompt.start();
		}
		triggerCursorMoved() {
			if (this.nvim.isVim) this.nvim.command("doautocmd <nomodeline> CursorMoved", true);
			this.nvim.call("coc#util#do_autocmd", ["CocListMoved"], true);
		}
		async call(fname) {
			if (this.session) return await this.session.call(fname);
		}
		get session() {
			return this.lastSession;
		}
		registerList(list, internal = false) {
			let { name, interactive } = list;
			let id;
			if (!internal) id = getConditionValue(parseExtensionName(Error().stack), void 0);
			let removed = this.deregisterList(name);
			this.listMap.set(name, list);
			const configNode = createConfigurationNode(name, interactive, id);
			if (!removed) workspace_default.configurations.updateConfigurations([configNode]);
			return import_main$1.Disposable.create(() => {
				this.deregisterList(name);
				Registry.as(Extensions$1.Configuration).deregisterConfigurations([configNode]);
			});
		}
		deregisterList(name) {
			let exists = this.listMap.get(name);
			if (exists) {
				if (typeof exists.dispose == "function") exists.dispose();
				this.listMap.delete(name);
				return true;
			}
			return false;
		}
		get names() {
			return Array.from(this.listMap.keys());
		}
		get descriptions() {
			let d = {};
			for (let name of this.listMap.keys()) d[name] = this.listMap.get(name).description;
			return d;
		}
		/**
		* Get items of {name} list
		* @param {string} name
		* @returns {Promise<any>}
		*/
		async loadItems(name) {
			let args = [name];
			let res = this.parseArgs(args);
			if (!res || !name) return;
			let { list, options, listArgs } = res;
			let token = new import_main$1.CancellationTokenSource().token;
			let arr = await this.nvim.eval("[win_getid(),bufnr(\"%\")]");
			let items = await list.loadItems({
				options,
				args: listArgs,
				input: "",
				cwd: workspace_default.cwd,
				window: this.nvim.createWindow(arr[0]),
				buffer: this.nvim.createBuffer(arr[1]),
				listWindow: null
			}, token);
			if (!items || Array.isArray(items)) return items;
			let task = items;
			return await new Promise((resolve, reject) => {
				let items = [];
				task.on("data", (item) => {
					item.label = stripAnsi(item.label);
					items.push(item);
				});
				task.on("end", () => {
					resolve(items);
				});
				task.on("error", (msg) => {
					reject(msg instanceof Error ? msg : new Error(msg));
					task.dispose();
				});
			});
		}
		toggleMode() {
			let lastSession = this.lastSession;
			if (lastSession) lastSession.toggleMode();
		}
		get isActivated() {
			return this.session?.winid != null;
		}
		stop() {
			let lastSession = this.lastSession;
			if (lastSession) lastSession.stop();
		}
		dispose() {
			for (let session of this.sessionsMap.values()) session.dispose();
			this.sessionsMap.clear();
			this.lastSession = void 0;
			disposeAll(this.disposables);
		}
	};
	manager_default$1 = new ListManager();
}));
//#endregion
//#region src/snippets/eval.ts
function generateContextId(bufnr) {
	return `${bufnr}-${context_id++}`;
}
function hasPython(snip) {
	if (!snip) return false;
	if (snip.context) return true;
	if (snip.actions && Object.keys(snip.actions).length > 0) return true;
	return false;
}
function getResetPythonCode(context) {
	const pyCodes = [];
	pyCodes.push(`${contexts_var} = ${contexts_var} if '${contexts_var}' in locals() else {}`);
	pyCodes.push(`context = ${contexts_var}.get('${context.id}', {}).get('context', None)`);
	pyCodes.push(`match = ${contexts_var}.get('${context.id}', {}).get('match', None)`);
	return pyCodes;
}
function getPyBlockCode(snip) {
	let { range, line } = snip;
	let pyCodes = [
		"import re, os, vim, string, random",
		`path = vim.eval('coc#util#get_fullpath()') or ""`,
		`fn = os.path.basename(path)`
	];
	let start = `(${range.start.line},${range.start.character})`;
	let end = `(${range.start.line},${range.end.character})`;
	let indent = line.match(/^\s*/)[0];
	pyCodes.push(...getResetPythonCode(snip));
	pyCodes.push(`snip = SnippetUtil("${escapeString(indent)}", ${start}, ${end}, context)`);
	return pyCodes;
}
function getInitialPythonCode(context) {
	let pyCodes = [
		"import re, os, vim, string, random",
		`path = vim.eval('coc#util#get_fullpath()') or ""`,
		`fn = os.path.basename(path)`
	];
	let { range, regex, line, id } = context;
	if (context.context) {
		pyCodes.push(`snip = ContextSnippet()`);
		pyCodes.push(`context = ${context.context}`);
	} else pyCodes.push(`context = None`);
	if (regex && Range.is(range)) {
		let trigger = line.slice(range.start.character, range.end.character);
		pyCodes.push(`pattern = re.compile("${escapeString(regex)}")`);
		pyCodes.push(`match = pattern.search("${escapeString(trigger)}")`);
	} else pyCodes.push(`match = None`);
	pyCodes.push(`${contexts_var} = ${contexts_var} if '${contexts_var}' in locals() else {}`);
	let prefix = id.match(/^\w+-/)[0];
	pyCodes.push(`${contexts_var} = {k: v for k, v in ${contexts_var}.items() if k.startswith('${prefix}')}`);
	pyCodes.push(`${contexts_var}['${context.id}'] = {'context': context, 'match': match}`);
	return pyCodes;
}
async function executePythonCode(nvim, codes) {
	if (codes.length == 0) return;
	let lines = [...codes];
	lines.unshift(`__requesting = ${events_default.requesting ? "True" : "False"}`);
	try {
		await nvim.command(`pyx ${addPythonTryCatch(lines.join("\n"))}`);
	} catch (e) {
		let err = new Error(e.message);
		err.stack = `Error on execute python code:\n${codes.join("\n")}\n` + e.stack;
		throw err;
	}
}
function getVariablesCode(values) {
	let keys = Object.keys(values);
	if (keys.length == 0) return `t = ()`;
	let maxIndex = Math.max.apply(null, keys.map((v) => Number(v)));
	let vals = new Array(maxIndex).fill("\"\"");
	for (let [idx, val] of Object.entries(values)) vals[idx] = `"${escapeString(val)}"`;
	return `t = (${vals.join(",")},)`;
}
/**
* vim8 doesn't throw any python error with :py command
* we have to use g:errmsg since v:errmsg can't be changed in python script.
*/
function addPythonTryCatch(code, force = false) {
	if (!isVim && force === false) return code;
	let lines = [
		"import traceback, vim",
		`vim.vars['errmsg'] = ''`,
		"try:"
	];
	lines.push(...code.split("\n").map((line) => "    " + line));
	lines.push("except Exception as e:");
	lines.push(`    vim.vars['errmsg'] = traceback.format_exc()`);
	return lines.join("\n");
}
function escapeString(input) {
	return input.replace(/\\/g, "\\\\").replace(/"/g, "\\\"").replace(/\t/g, "\\t").replace(/\n/g, "\\n");
}
var contexts_var, context_id;
var init_eval = __esmMin((() => {
	init_main$2();
	init_events();
	init_constants();
	contexts_var = "__coc_ultisnip_contexts";
	context_id = 1;
}));
//#endregion
//#region src/snippets/util.ts
var util_exports = /* @__PURE__ */ __exportAll({
	WordsSource: () => WordsSource,
	convertRegex: () => convertRegex,
	getAction: () => getAction,
	getNewRange: () => getNewRange,
	getTextAfter: () => getTextAfter,
	getTextBefore: () => getTextBefore,
	normalizeSnippetString: () => normalizeSnippetString,
	shouldFormat: () => shouldFormat,
	toSnippetString: () => toSnippetString,
	wordsSource: () => wordsSource
});
/**
* Convert python regex to javascript regex,
* throw error when unsupported pattern found
*/
function convertRegex(str) {
	if (str.indexOf("\\z") !== -1) throw new Error("pattern \\z not supported");
	if (str.indexOf("(?s)") !== -1) throw new Error("pattern (?s) not supported");
	if (str.indexOf("(?x)") !== -1) throw new Error("pattern (?x) not supported");
	if (str.indexOf("\n") !== -1) throw new Error("pattern \\n not supported");
	if (conditionRe.test(str)) throw new Error("pattern (?id/name)yes-pattern|no-pattern not supported");
	return str.replace(regex, (match, p1) => {
		if (match.startsWith("(?#")) return "";
		if (match.startsWith("(?P<")) return "(?" + match.slice(3);
		if (match.startsWith("(?P=")) return `\\k<${p1}>`;
		return "^";
	});
}
/**
* Action code from context or option
*/
function getAction(opt, action) {
	if (!opt || !opt.actions) return void 0;
	return opt.actions[action];
}
function shouldFormat(snippet) {
	if (/^\s/.test(snippet)) return true;
	if (snippet.indexOf("\n") !== -1) return true;
	return false;
}
function normalizeSnippetString(snippet, indent, opts) {
	let lines = snippet.split(/\r?\n/);
	let ind = opts.insertSpaces ? " ".repeat(opts.tabSize) : "	";
	let tabSize = defaultValue(opts.tabSize, 2);
	let noExpand = opts.noExpand;
	let trimTrailingWhitespace = opts.trimTrailingWhitespace;
	lines = lines.map((line, idx) => {
		let space = line.match(/^\s*/)[0];
		let pre = space;
		let isTab = space.startsWith("	");
		if (isTab && opts.insertSpaces && !noExpand) pre = ind.repeat(space.length);
		else if (!isTab && !opts.insertSpaces) pre = ind.repeat(space.length / tabSize);
		return (idx == 0 || trimTrailingWhitespace && line.length == 0 ? "" : indent) + pre + line.slice(space.length);
	});
	return lines.join("\n");
}
/**
* Get range from base position and position, text
*/
function getNewRange(base, pos, value) {
	const { line, character } = base;
	const start = {
		line: line + pos.line,
		character: pos.line == 0 ? character + pos.character : pos.character
	};
	return Range.create(start, getEnd(start, value));
}
function getTextBefore(range, text, pos) {
	let newLines = [];
	let { line, character } = range.start;
	let n = pos.line - line;
	const lines = text.split("\n");
	for (let i = 0; i <= n; i++) {
		let line = lines[i];
		if (i == n) newLines.push(line.slice(0, i == 0 ? pos.character - character : pos.character));
		else newLines.push(line);
	}
	return newLines.join("\n");
}
function getTextAfter(range, text, pos) {
	let newLines = [];
	let n = range.end.line - pos.line;
	const lines = text.split("\n");
	let len = lines.length;
	for (let i = 0; i <= n; i++) {
		let idx = len - i - 1;
		let line = lines[idx];
		if (i == n) {
			let sc = range.start.character;
			let from = idx == 0 ? pos.character - sc : pos.character;
			newLines.unshift(line.slice(from));
		} else newLines.unshift(line);
	}
	return newLines.join("\n");
}
function toSnippetString(snippet) {
	if (typeof snippet === "string") return snippet;
	if (typeof snippet.value === "string") return snippet.value;
	throw new TypeError(`Snippet should be string or has value as string`);
}
var stringStartRe, conditionRe, regex, WordsSource, wordsSource;
var init_util$4 = __esmMin((() => {
	init_main$2();
	init_util$7();
	init_position();
	stringStartRe = /\\A/;
	conditionRe = /\(\?\(\w+\).+\|/;
	regex = new RegExp(`${/\(\?#.*?\)/.source}|${stringStartRe.source}|${/\(\?P<\w+>.*?\)/.source}|${/\(\?P=(\w+)\)/.source}`, "g");
	WordsSource = class {
		name = "$words";
		shortcut = "";
		triggerOnly = true;
		words = [];
		startcol;
		doComplete(opt) {
			return {
				startcol: this.startcol,
				items: this.words.map((s) => {
					return {
						word: s,
						filterText: opt.input
					};
				})
			};
		}
	};
	wordsSource = new WordsSource();
}));
//#endregion
//#region src/snippets/parser.ts
function walk(marker, visitor, ignoreChild = false) {
	const stack = [...marker];
	while (stack.length > 0) {
		const marker = stack.shift();
		if (ignoreChild && marker instanceof TextmateSnippet) continue;
		if (!visitor(marker)) break;
		stack.unshift(...marker.children);
	}
}
function transformEscapes(input, backslashIndexes = []) {
	let res = "";
	let len = input.length;
	let i = 0;
	let toUpper = false;
	let toLower = false;
	while (i < len) {
		let ch = input[i];
		if (ch.charCodeAt(0) === 92 && !backslashIndexes.includes(i)) {
			let next = input[i + 1];
			if (escapedCharacters.includes(next)) {
				i++;
				continue;
			}
			if (next == "u" || next == "l") {
				let follow = input[i + 2];
				if (follow) res = res + (next == "u" ? follow.toUpperCase() : follow.toLowerCase());
				i = i + 3;
				continue;
			}
			if (next == "U" || next == "L") {
				if (next == "U") toUpper = true;
				else toLower = true;
				i = i + 2;
				continue;
			}
			if (next == "E") {
				toUpper = false;
				toLower = false;
				i = i + 2;
				continue;
			}
			if (next == "n") {
				res += "\n";
				i = i + 2;
				continue;
			}
			if (next == "t") {
				res += "	";
				i = i + 2;
				continue;
			}
		}
		if (toUpper) ch = ch.toUpperCase();
		else if (toLower) ch = ch.toLowerCase();
		res += ch;
		i++;
	}
	return res;
}
function mergeTexts(marker, begin = 0) {
	let { children } = marker;
	let end;
	let start;
	for (let i = begin; i < children.length; i++) if (children[i] instanceof Text) if (start !== void 0) end = i;
	else start = i;
	else {
		if (end !== void 0) break;
		start = void 0;
	}
	if (end === void 0) return;
	let newText = "";
	for (let i = start; i <= end; i++) newText += children[i].toString();
	let m = new Text(newText);
	children.splice(start, end - start + 1, m);
	m.parent = marker;
	return mergeTexts(marker, start + 1);
}
function getPlaceholderId(p) {
	if (typeof p.id === "number") return p.id;
	p.id = id++;
	return p.id;
}
var logger$31, ULTISNIP_VARIABLES, id, snippet_id, knownRegexOptions, ultisnipSpecialEscape, Scanner, Marker, Text, CodeBlock, TransformableMarker, Placeholder, Choice, Transform, ConditionString, FormatString, Variable, TextmateSnippet, SnippetParser, escapedCharacters;
var init_parser = __esmMin((() => {
	init_logger$2();
	init_array();
	init_async$1();
	init_errors();
	init_node();
	init_string$1();
	init_eval();
	init_util$4();
	logger$31 = createLogger$1("snippets-parser");
	ULTISNIP_VARIABLES = [
		"VISUAL",
		"YANK",
		"UUID"
	];
	id = 0;
	snippet_id = 0;
	knownRegexOptions = [
		"d",
		"g",
		"i",
		"m",
		"s",
		"u",
		"y"
	];
	ultisnipSpecialEscape = [
		"u",
		"l",
		"U",
		"L",
		"E",
		"n",
		"t"
	];
	Scanner = class Scanner {
		static _table = {
			[36]: 0,
			[58]: 1,
			[44]: 2,
			[123]: 3,
			[125]: 4,
			[92]: 5,
			[47]: 6,
			[124]: 7,
			[43]: 11,
			[45]: 12,
			[63]: 13,
			[40]: 15,
			[41]: 16,
			[96]: 17,
			[33]: 18
		};
		static isDigitCharacter(ch) {
			return ch >= 48 && ch <= 57;
		}
		static isVariableCharacter(ch) {
			return ch === 95 || ch >= 97 && ch <= 122 || ch >= 65 && ch <= 90;
		}
		value;
		pos;
		constructor() {
			this.text("");
		}
		text(value) {
			this.value = value;
			this.pos = 0;
		}
		tokenText(token) {
			return this.value.slice(token.pos, token.pos + token.len);
		}
		isEnd() {
			return this.pos >= this.value.length;
		}
		next() {
			if (this.pos >= this.value.length) return {
				type: 14,
				pos: this.pos,
				len: 0
			};
			let pos = this.pos;
			let len = 0;
			let ch = this.value.charCodeAt(pos);
			let type;
			type = Scanner._table[ch];
			if (typeof type === "number") {
				this.pos += 1;
				return {
					type,
					pos,
					len: 1
				};
			}
			if (Scanner.isDigitCharacter(ch)) {
				type = 8;
				do {
					len += 1;
					ch = this.value.charCodeAt(pos + len);
				} while (Scanner.isDigitCharacter(ch));
				this.pos += len;
				return {
					type,
					pos,
					len
				};
			}
			if (Scanner.isVariableCharacter(ch)) {
				type = 9;
				do
					ch = this.value.charCodeAt(pos + ++len);
				while (Scanner.isVariableCharacter(ch) || Scanner.isDigitCharacter(ch));
				this.pos += len;
				return {
					type,
					pos,
					len
				};
			}
			type = 10;
			do {
				len += 1;
				ch = this.value.charCodeAt(pos + len);
			} while (!isNaN(ch) && typeof Scanner._table[ch] === "undefined" && !Scanner.isDigitCharacter(ch) && !Scanner.isVariableCharacter(ch));
			this.pos += len;
			return {
				type,
				pos,
				len
			};
		}
	};
	Marker = class {
		parent;
		_children = [];
		appendChild(child) {
			if (child instanceof Text && this._children[this._children.length - 1] instanceof Text) this._children[this._children.length - 1].value += child.value;
			else {
				child.parent = this;
				this._children.push(child);
			}
			return this;
		}
		setOnlyChild(child) {
			child.parent = this;
			this._children = [child];
		}
		replaceChildren(children) {
			for (const child of children) child.parent = this;
			this._children = children;
		}
		replaceWith(newMarker) {
			if (!this.parent) return false;
			let p = this.parent;
			let idx = p.children.indexOf(this);
			if (idx == -1) return false;
			newMarker.parent = p;
			p.children.splice(idx, 1, newMarker);
			return true;
		}
		insertBefore(text) {
			if (!this.parent) return;
			let p = this.parent;
			let idx = p.children.indexOf(this);
			if (idx == -1) return;
			let prev = p.children[idx - 1];
			if (prev instanceof Text) {
				let v = prev.value;
				prev.replaceWith(new Text(v + text));
			} else {
				let marker = new Text(text);
				marker.parent = p;
				p.children.splice(idx, 0, marker);
			}
		}
		get children() {
			return this._children;
		}
		get snippet() {
			let candidate = this;
			while (true) {
				if (!candidate) return;
				if (candidate instanceof TextmateSnippet) return candidate;
				candidate = candidate.parent;
			}
		}
		toString() {
			return this.children.reduce((prev, cur) => prev + cur.toString(), "");
		}
		len() {
			return 0;
		}
	};
	Text = class Text extends Marker {
		value;
		static escape(value) {
			return value.replace(/\$|}|\\/g, "\\$&");
		}
		constructor(value) {
			super();
			this.value = value;
		}
		toString() {
			return this.value;
		}
		toTextmateString() {
			return Text.escape(this.value);
		}
		len() {
			return this.value.length;
		}
		clone() {
			return new Text(this.value);
		}
	};
	CodeBlock = class CodeBlock extends Marker {
		code;
		kind;
		_value = "";
		_related = [];
		constructor(code, kind, value, related) {
			super();
			this.code = code;
			this.kind = kind;
			if (Array.isArray(related)) this._related = related;
			else if (kind === "python") this._related = CodeBlock.parseRelated(code);
			if (typeof value === "string") this._value = value;
		}
		static parseRelated(code) {
			let list = [];
			let arr;
			let re = /\bt\[(\d+)\]/g;
			while (true) {
				arr = re.exec(code);
				if (arr == null) break;
				let n = parseInt(arr[1], 10);
				if (!list.includes(n)) list.push(n);
			}
			return list;
		}
		get related() {
			return this._related;
		}
		get index() {
			if (this.parent instanceof Placeholder) return this.parent.index;
		}
		async resolve(nvim, token) {
			if (!this.code.length) return;
			if (token?.isCancellationRequested) return;
			let res;
			if (this.kind == "python") res = await this.evalPython(nvim, token);
			else if (this.kind == "vim") res = await this.evalVim(nvim);
			else if (this.kind == "shell") res = await this.evalShell();
			if (token?.isCancellationRequested) return;
			if (res != null) this._value = res;
		}
		async evalShell() {
			let opts = { windowsHide: true };
			Object.assign(opts, { shell: process.env.SHELL });
			return (await (0, util.promisify)(child_process.exec)(this.code, opts)).stdout.toString().replace(/\s*$/, "");
		}
		async evalVim(nvim) {
			let res = await nvim.eval(this.code);
			return res == null ? "" : res.toString();
		}
		async evalPython(nvim, token) {
			let lines = [`snip._reset("${escapeString(toText(this._value))}")`];
			lines.push(...this.code.split(/\r?\n/).map((line) => line.replace(/\t/g, "    ")));
			await executePythonCode(nvim, lines);
			if (token?.isCancellationRequested) return;
			return await nvim.call(`pyxeval`, "str(snip.rv)");
		}
		len() {
			return this._value.length;
		}
		toString() {
			return this._value;
		}
		get value() {
			return this._value;
		}
		toTextmateString() {
			let t = "";
			if (this.kind == "python") t = "!p ";
			else if (this.kind == "shell") t = "";
			else if (this.kind == "vim") t = "!v ";
			return "`" + t + this.code + "`";
		}
		clone() {
			return new CodeBlock(this.code, this.kind, this.value, this._related.slice());
		}
	};
	TransformableMarker = class extends Marker {
		transform;
	};
	Placeholder = class Placeholder extends TransformableMarker {
		index;
		primary = false;
		id;
		constructor(index) {
			super();
			this.index = index;
		}
		get isFinalTabstop() {
			return this.index === 0;
		}
		get choice() {
			return this._children.length === 1 && this._children[0] instanceof Choice ? this._children[0] : void 0;
		}
		toTextmateString() {
			let transformString = "";
			if (this.transform) transformString = this.transform.toTextmateString();
			if (this.children.length === 0 && !this.transform) return `$${this.index}`;
			else if (this.children.length === 0 || this.children.length == 1 && this.children[0].toTextmateString() == "") return `\${${this.index}${transformString}}`;
			else if (this.choice) return `\${${this.index}|${this.choice.toTextmateString()}|${transformString}}`;
			else return `\${${this.index}:${this.children.map((child) => child.toTextmateString()).join("")}${transformString}}`;
		}
		clone() {
			let ret = new Placeholder(this.index);
			if (this.transform) ret.transform = this.transform.clone();
			ret.id = this.id;
			ret.primary = this.primary;
			ret._children = this.children.map((child) => {
				let m = child.clone();
				m.parent = ret;
				return m;
			});
			return ret;
		}
		checkParentPlaceHolders() {
			let idx = this.index;
			let p = this.parent;
			while (p != null && !(p instanceof TextmateSnippet)) {
				if (p instanceof Placeholder && p.index == idx) throw new Error(`Parent placeholder has same index: ${idx}`);
				p = p.parent;
			}
		}
	};
	Choice = class Choice extends Marker {
		_index;
		constructor(index = 0) {
			super();
			this._index = index;
		}
		options = [];
		appendChild(marker) {
			if (marker instanceof Text) {
				marker.parent = this;
				this.options.push(marker);
			}
			return this;
		}
		toString() {
			return this.options[this._index].value;
		}
		toTextmateString() {
			return this.options.map((option) => option.value.replace(/\||,/g, "\\$&")).join(",");
		}
		len() {
			return this.options[this._index].len();
		}
		clone() {
			let ret = new Choice(this._index);
			for (let opt of this.options) ret.appendChild(opt);
			return ret;
		}
	};
	Transform = class Transform extends Marker {
		regexp;
		ascii = false;
		ultisnip = false;
		resolve(value) {
			let didMatch = false;
			let ret = value.replace(this.regexp, (...args) => {
				didMatch = true;
				return this._replace(args.slice(0, -2));
			});
			if (!didMatch && this._children.some((child) => child instanceof FormatString && Boolean(child.elseValue))) ret = this._replace([]);
			return ret;
		}
		_replace(groups) {
			let ret = "";
			let backslashIndexes = [];
			for (const marker of this._children) {
				let val = "";
				let len = ret.length;
				if (marker instanceof FormatString) {
					val = marker.resolve(groups[marker.index] ?? "");
					if (this.ultisnip && val.indexOf("\\") !== -1) for (let idx of iterateCharacter(val, "\\")) backslashIndexes.push(len + idx);
				} else if (marker instanceof ConditionString) {
					val = marker.resolve(groups[marker.index]);
					if (this.ultisnip) val = val.replace(/(?<!\\)\$(\d+)/g, (...args) => {
						return toText(groups[Number(args[1])]);
					});
				} else val = marker.toString();
				ret += val;
			}
			if (this.ascii) ret = unidecode(ret);
			return this.ultisnip ? transformEscapes(ret, backslashIndexes) : ret;
		}
		toString() {
			return "";
		}
		toTextmateString() {
			let format = this.children.map((c) => c.toTextmateString()).join("");
			if (this.ultisnip) format = format.replace(/\\\\(\w)/g, (match, ch) => {
				if (ultisnipSpecialEscape.includes(ch)) return "\\" + ch;
				return match;
			});
			return `/${this.regexp.source}/${format}/${(this.regexp.ignoreCase ? "i" : "") + (this.regexp.global ? "g" : "")}`;
		}
		clone() {
			let ret = new Transform();
			ret.regexp = new RegExp(this.regexp.source, (this.regexp.ignoreCase ? "i" : "") + (this.regexp.global ? "g" : ""));
			ret._children = this.children.map((child) => {
				let m = child.clone();
				m.parent = ret;
				return m;
			});
			return ret;
		}
	};
	ConditionString = class ConditionString extends Marker {
		index;
		ifValue;
		elseValue;
		constructor(index, ifValue, elseValue) {
			super();
			this.index = index;
			this.ifValue = ifValue;
			this.elseValue = elseValue;
		}
		resolve(value) {
			if (value) return this.ifValue;
			return this.elseValue;
		}
		toTextmateString() {
			return "(?" + this.index + ":" + this.ifValue + (this.elseValue ? ":" + this.elseValue : "") + ")";
		}
		clone() {
			return new ConditionString(this.index, this.ifValue, this.elseValue);
		}
	};
	FormatString = class FormatString extends Marker {
		index;
		shorthandName;
		ifValue;
		elseValue;
		constructor(index, shorthandName, ifValue, elseValue) {
			super();
			this.index = index;
			this.shorthandName = shorthandName;
			this.ifValue = ifValue;
			this.elseValue = elseValue;
		}
		resolve(value) {
			if (this.shorthandName === "upcase") return !value ? "" : value.toLocaleUpperCase();
			else if (this.shorthandName === "downcase") return !value ? "" : value.toLocaleLowerCase();
			else if (this.shorthandName === "capitalize") return !value ? "" : value[0].toLocaleUpperCase() + value.slice(1);
			else if (this.shorthandName === "pascalcase") return !value ? "" : this._toPascalCase(value);
			else if (Boolean(value) && typeof this.ifValue === "string") return this.ifValue;
			else if (!value && typeof this.elseValue === "string") return this.elseValue;
			else return value || "";
		}
		_toPascalCase(value) {
			const match = value.match(/[a-z]+/gi);
			if (!match) return value;
			return match.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join("");
		}
		toTextmateString() {
			let value = "${";
			value += this.index;
			if (this.shorthandName) value += `:/${this.shorthandName}`;
			else if (this.ifValue && this.elseValue) value += `:?${this.ifValue}:${this.elseValue}`;
			else if (this.ifValue) value += `:+${this.ifValue}`;
			else if (this.elseValue) value += `:-${this.elseValue}`;
			value += "}";
			return value;
		}
		clone() {
			return new FormatString(this.index, this.shorthandName, this.ifValue, this.elseValue);
		}
	};
	Variable = class Variable extends TransformableMarker {
		name;
		_resolved;
		constructor(name, resolved = false) {
			super();
			this.name = name;
			this._resolved = resolved;
		}
		get resolved() {
			return this._resolved;
		}
		async resolve(resolver) {
			let value = await resolver.resolve(this);
			this._resolved = true;
			if (value && value.includes("\n")) {
				let indent = "";
				this.snippet.walk((m) => {
					if (m == this) return false;
					if (m instanceof Text) {
						let lines = m.toString().split(/\r?\n/);
						indent = lines[lines.length - 1].match(/^\s*/)[0];
					}
					return true;
				}, true);
				let lines = value.split("\n");
				let minIndent = lines.filter((s) => s.length > 0).map((s) => s.match(/^\s*/)[0]).reduce((p, c) => p < c.length ? p : c.length, 0);
				value = lines.map((s, i) => i == 0 || s.length == 0 || !s.startsWith(" ".repeat(minIndent)) ? s : indent + s.slice(minIndent)).join("\n");
			}
			if (typeof value !== "string") return false;
			if (this.transform) value = this.transform.resolve(toText(value));
			this._children = [new Text(value.toString())];
			return true;
		}
		toTextmateString() {
			let transformString = "";
			if (this.transform) transformString = this.transform.toTextmateString();
			if (this.children.length === 0) return `\${${this.name}${transformString}}`;
			else return `\${${this.name}:${this.children.map((child) => child.toTextmateString()).join("")}${transformString}}`;
		}
		clone() {
			const ret = new Variable(this.name, this.resolved);
			if (this.transform) ret.transform = this.transform.clone();
			ret._children = this.children.map((child) => {
				let m = child.clone();
				m.parent = ret;
				return m;
			});
			return ret;
		}
	};
	TextmateSnippet = class TextmateSnippet extends Marker {
		ultisnip;
		id;
		related = {};
		constructor(ultisnip, id) {
			super();
			this.ultisnip = ultisnip === true;
			this.id = id ?? snippet_id++;
		}
		get hasPythonBlock() {
			if (!this.ultisnip) return false;
			return this.pyBlocks.length > 0;
		}
		get hasCodeBlock() {
			if (!this.ultisnip) return false;
			let { pyBlocks, otherBlocks } = this;
			return pyBlocks.length > 0 || otherBlocks.length > 0;
		}
		/**
		* Values for each placeholder index
		*/
		get values() {
			let values = {};
			let maxIndexNumber = 0;
			this.placeholders.forEach((c) => {
				if (!Number.isInteger(c.index)) return;
				maxIndexNumber = Math.max(c.index, maxIndexNumber);
				if (c.transform != null) return;
				if (c.primary || values[c.index] === void 0) values[c.index] = c.toString();
			});
			for (let i = 0; i <= maxIndexNumber; i++) if (values[i] === void 0) values[i] = "";
			return values;
		}
		get orderedPyIndexBlocks() {
			let res = [];
			let filtered = this.pyBlocks.filter((o) => typeof o.index === "number");
			if (filtered.length === 0) return res;
			let allIndexes = filtered.map((o) => o.index);
			let usedIndexes = [];
			const checkBlock = (b) => {
				let { related } = b;
				if (related.length == 0 || related.every((idx) => !allIndexes.includes(idx) || usedIndexes.includes(idx))) {
					usedIndexes.push(b.index);
					res.push(b);
					return true;
				}
				return false;
			};
			while (filtered.length > 0) {
				let c = false;
				for (let b of filtered) if (checkBlock(b)) c = true;
				if (!c) break;
				filtered = filtered.filter((o) => !usedIndexes.includes(o.index));
			}
			return res;
		}
		async evalCodeBlocks(nvim, pyCodes) {
			const { pyBlocks, otherBlocks } = this.placeholderInfo;
			await Promise.all(otherBlocks.map((block) => {
				let pre = block.value;
				return block.resolve(nvim).then(() => {
					if (block.parent instanceof Placeholder && pre !== block.value) this.onPlaceholderUpdate(block.parent);
				});
			}));
			if (pyCodes.length === 0) return;
			let relatedBlocks = pyBlocks.filter((o) => o.index === void 0 && o.related.length > 0);
			const variableCode = getVariablesCode(this.values);
			await executePythonCode(nvim, [...pyCodes, variableCode]);
			for (let block of pyBlocks) {
				let pre = block.value;
				if (relatedBlocks.includes(block)) continue;
				await block.resolve(nvim);
				if (pre === block.value) continue;
				if (block.parent instanceof Placeholder) {
					this.onPlaceholderUpdate(block.parent);
					await executePythonCode(nvim, [getVariablesCode(this.values)]);
				}
			}
			for (let block of this.orderedPyIndexBlocks) await this.updatePyIndexBlock(nvim, block);
			for (let block of relatedBlocks) await block.resolve(nvim);
		}
		/**
		* Update python blocks after user change Placeholder with index
		*/
		async updatePythonCodes(nvim, marker, codes, token) {
			let index = marker.index;
			let blocks = this.getDependentPyIndexBlocks(index);
			await runSequence([
				async () => {
					await executePythonCode(nvim, [...codes, getVariablesCode(this.values)]);
				},
				async () => {
					for (let block of blocks) await this.updatePyIndexBlock(nvim, block, token);
				},
				async () => {
					let filtered = this.pyBlocks.filter((o) => o.index === void 0 && o.related.length > 0);
					for (let block of filtered) await block.resolve(nvim, token);
				}
			], token);
		}
		getDependentPyIndexBlocks(index) {
			const res = [];
			const taken = [];
			let filtered = this.pyBlocks.filter((o) => typeof o.index === "number");
			const search = (idx) => {
				let blocks = filtered.filter((o) => !taken.includes(o.index) && o.related.includes(idx));
				if (blocks.length > 0) {
					res.push(...blocks);
					blocks.forEach((b) => {
						search(b.index);
					});
				}
			};
			search(index);
			return res;
		}
		/**
		* Update single index block
		*/
		async updatePyIndexBlock(nvim, block, token) {
			let pre = block.value;
			await block.resolve(nvim, token);
			if (pre === block.value || token?.isCancellationRequested) return;
			if (block.parent instanceof Placeholder) this.onPlaceholderUpdate(block.parent);
			await executePythonCode(nvim, [getVariablesCode(this.values)]);
		}
		get placeholderInfo() {
			const pyBlocks = [];
			const otherBlocks = [];
			let placeholders = [];
			this.walk((candidate) => {
				if (candidate instanceof Placeholder) placeholders.push(candidate);
				else if (candidate instanceof CodeBlock) if (candidate.kind === "python") pyBlocks.push(candidate);
				else otherBlocks.push(candidate);
				return true;
			}, true);
			return {
				placeholders,
				pyBlocks,
				otherBlocks
			};
		}
		get variables() {
			const variables = [];
			this.walk((candidate) => {
				if (candidate instanceof Variable) variables.push(candidate);
				return true;
			}, true);
			return variables;
		}
		get placeholders() {
			let placeholders = [];
			this.walk((candidate) => {
				if (candidate instanceof Placeholder) placeholders.push(candidate);
				return true;
			}, true);
			return placeholders;
		}
		get pyBlocks() {
			return this.placeholderInfo.pyBlocks;
		}
		get otherBlocks() {
			return this.placeholderInfo.otherBlocks;
		}
		get first() {
			let { placeholders } = this;
			let [normals, finals] = groupBy(placeholders.filter((p) => !p.transform), (v) => v.index !== 0);
			if (normals.length) {
				let minIndex = Math.min.apply(null, normals.map((o) => o.index));
				let arr = normals.filter((v) => v.index == minIndex);
				return arr.find((p) => p.primary) ?? arr[0];
			}
			return finals.find((o) => o.primary) ?? finals[0];
		}
		async update(nvim, marker, token) {
			this.onPlaceholderUpdate(marker);
			let codes = this.related.codes ?? [];
			if (codes.length === 0 || !this.hasPythonBlock) return;
			await this.updatePythonCodes(nvim, marker, codes, token);
		}
		/**
		* Reflact changes for related markers.
		*/
		onPlaceholderUpdate(marker) {
			let val = marker.toString();
			let markers = this.placeholders.filter((o) => o.index == marker.index);
			for (let p of markers) {
				p.checkParentPlaceHolders();
				if (p === marker) continue;
				let newText = p.transform ? p.transform.resolve(val) : val;
				p.setOnlyChild(new Text(toText(newText)));
			}
			this.synchronizeParents(markers);
		}
		synchronizeParents(markers) {
			let parents = /* @__PURE__ */ new Set();
			markers.forEach((m) => {
				let p = m.parent;
				if (p instanceof Placeholder) parents.add(p);
			});
			for (let p of parents) this.onPlaceholderUpdate(p);
		}
		offset(marker) {
			let pos = 0;
			let found = false;
			this.walk((candidate) => {
				if (candidate === marker) {
					found = true;
					return false;
				}
				pos += candidate.len();
				return true;
			}, true);
			if (!found) return -1;
			return pos;
		}
		fullLen(marker) {
			let ret = 0;
			walk([marker], (marker) => {
				ret += marker.len();
				return true;
			});
			return ret;
		}
		getTextBefore(marker, parent) {
			let res = "";
			const calc = (m) => {
				let p = m.parent;
				if (!p) return;
				let s = "";
				for (let b of p.children) {
					if (b === m) break;
					s = s + b.toString();
				}
				res = s + res;
				if (p == parent) return;
				calc(p);
			};
			calc(marker);
			return res;
		}
		enclosingPlaceholders(placeholder) {
			let ret = [];
			let { parent } = placeholder;
			while (parent) {
				if (parent instanceof Placeholder) ret.push(parent);
				parent = parent.parent;
			}
			return ret;
		}
		async resolveVariables(resolver) {
			let variables = this.variables;
			if (variables.length === 0) return;
			let failed = [];
			let succeed = [];
			let promises = [];
			const changedParents = /* @__PURE__ */ new Set();
			for (let item of variables) promises.push(item.resolve(resolver).then((res) => {
				changedParents.add(item.parent);
				(res ? succeed : failed).push(item);
			}, onUnexpectedError));
			await Promise.allSettled(promises);
			for (const variable of succeed) {
				let text = new Text(variable.toString());
				variable.replaceWith(text);
			}
			if (failed.length > 0) {
				let indexMap = /* @__PURE__ */ new Map();
				const primarySet = /* @__PURE__ */ new Set();
				let max = this.getMaxPlaceholderIndex();
				for (let i = 0; i < failed.length; i++) {
					const v = failed[i];
					let idx = indexMap.get(v.name);
					if (idx == null) {
						idx = ++max;
						indexMap.set(v.name, idx);
					}
					let p = new Placeholder(idx);
					p.transform = v.transform;
					if (!p.transform && !primarySet.has(idx)) {
						primarySet.add(idx);
						p.primary = true;
					}
					let newText = p.transform ? p.transform.resolve(v.name) : v.name;
					p.setOnlyChild(new Text(toText(newText)));
					v.replaceWith(p);
				}
			}
			changedParents.forEach((marker) => {
				mergeTexts(marker);
				if (marker instanceof Placeholder) this.onPlaceholderUpdate(marker);
			});
		}
		getMaxPlaceholderIndex() {
			let res = 0;
			this.walk((candidate) => {
				if (candidate instanceof Placeholder) res = Math.max(res, candidate.index);
				return true;
			}, true);
			return res;
		}
		replace(marker, children) {
			marker.replaceChildren(children);
			if (marker instanceof Placeholder) this.onPlaceholderUpdate(marker);
		}
		toTextmateString() {
			return this.children.reduce((prev, cur) => prev + cur.toTextmateString(), "");
		}
		clone() {
			let ret = new TextmateSnippet(this.ultisnip, this.id);
			ret.related.codes = this.related.codes;
			ret.related.context = this.related.context;
			ret._children = this.children.map((child) => {
				let m = child.clone();
				m.parent = ret;
				return m;
			});
			return ret;
		}
		walk(visitor, ignoreChild = false) {
			walk(this.children, visitor, ignoreChild);
		}
	};
	SnippetParser = class SnippetParser {
		ultisnip;
		constructor(ultisnip) {
			this.ultisnip = ultisnip;
		}
		static escape(value) {
			return value.replace(/\$|}|\\/g, "\\$&");
		}
		static isPlainText(value) {
			let s = new SnippetParser().parse(value.replace(/\$0$/, ""), false);
			return s.children.length == 1 && s.children[0] instanceof Text;
		}
		_scanner = new Scanner();
		_token;
		text(value) {
			return this.parse(value, false).toString();
		}
		parse(value, insertFinalTabstop) {
			this._scanner.text(value);
			this._token = this._scanner.next();
			const snippet = new TextmateSnippet(this.ultisnip);
			while (this._parse(snippet));
			const defaultValues = /* @__PURE__ */ new Map();
			const incompletePlaceholders = [];
			let complexPlaceholders = [];
			let hasFinal = false;
			snippet.walk((marker) => {
				if (marker instanceof Placeholder) {
					if (marker.index == 0) hasFinal = true;
					if (marker.children.some((o) => o instanceof Placeholder)) {
						marker.primary = true;
						complexPlaceholders.push(marker);
					} else if (!defaultValues.has(marker.index) && marker.children.length > 0) {
						marker.primary = true;
						defaultValues.set(marker.index, marker.toString());
					} else incompletePlaceholders.push(marker);
				}
				return true;
			});
			const complexIndexes = complexPlaceholders.map((p) => p.index);
			for (const placeholder of incompletePlaceholders) if (defaultValues.has(placeholder.index)) {
				let val = defaultValues.get(placeholder.index);
				let text = new Text(placeholder.transform ? placeholder.transform.resolve(val) : val);
				placeholder.setOnlyChild(text);
			} else if (!complexIndexes.includes(placeholder.index)) if (placeholder.transform) {
				let text = new Text(placeholder.transform.resolve(""));
				placeholder.setOnlyChild(text);
			} else {
				placeholder.primary = true;
				defaultValues.set(placeholder.index, "");
			}
			const resolveComplex = () => {
				let resolved = /* @__PURE__ */ new Set();
				for (let p of complexPlaceholders) if (p.children.every((o) => !(o instanceof Placeholder) || defaultValues.has(o.index))) {
					let val = p.toString();
					defaultValues.set(p.index, val);
					for (let placeholder of incompletePlaceholders.filter((o) => o.index == p.index)) {
						let text = new Text(placeholder.transform ? placeholder.transform.resolve(val) : val);
						placeholder.setOnlyChild(text);
					}
					resolved.add(p.index);
				}
				complexPlaceholders = complexPlaceholders.filter((p) => !resolved.has(p.index));
				if (complexPlaceholders.length == 0 || !resolved.size) return;
				resolveComplex();
			};
			resolveComplex();
			if (!hasFinal && insertFinalTabstop) snippet.appendChild(new Placeholder(0));
			return snippet;
		}
		_accept(type, value) {
			if (type === void 0 || this._token.type === type) {
				let ret = !value ? true : this._scanner.tokenText(this._token);
				this._token = this._scanner.next();
				return ret;
			}
			return false;
		}
		_backTo(token) {
			this._scanner.pos = token.pos + token.len;
			this._token = token;
			return false;
		}
		_until(type, checkBackSlash = false) {
			if (this._token.type === 14) return false;
			let start = this._token;
			let pre;
			while (this._token.type !== type || checkBackSlash && pre && pre.type === 5) {
				if (checkBackSlash) pre = this._token;
				this._token = this._scanner.next();
				if (this._token.type === 14) return false;
			}
			let value = this._scanner.value.substring(start.pos, this._token.pos);
			this._token = this._scanner.next();
			return value;
		}
		_parse(marker) {
			return this._parseEscaped(marker) || this._parseCodeBlock(marker) || this._parseTabstopOrVariableName(marker) || this._parseComplexPlaceholder(marker) || this._parseComplexVariable(marker) || this._parseAnything(marker);
		}
		_parseEscaped(marker) {
			let value;
			if (value = this._accept(5, true)) {
				value = this._accept(0, true) || this._accept(4, true) || this._accept(5, true) || this.ultisnip && this._accept(3, true) || this.ultisnip && this._accept(17, true) || value;
				marker.appendChild(new Text(value));
				return true;
			}
			return false;
		}
		_parseTabstopOrVariableName(parent) {
			let value;
			const token = this._token;
			if (!(this._accept(0) && (value = this._accept(9, true) || this._accept(8, true)))) return this._backTo(token);
			if (/^\d+$/.test(value)) parent.appendChild(new Placeholder(Number(value)));
			else if (this.ultisnip && !ULTISNIP_VARIABLES.includes(value)) parent.appendChild(new Text("$" + value));
			else parent.appendChild(new Variable(value));
			return true;
		}
		_checkCulybrace(marker) {
			let count = 0;
			for (marker of marker.children) if (marker instanceof Text) {
				let text = marker.value;
				for (let index = 0; index < text.length; index++) {
					const ch = text[index];
					if (ch === "{") count++;
					else if (ch === "}") count--;
				}
			}
			return count <= 0;
		}
		_parseComplexPlaceholder(parent) {
			let index;
			const token = this._token;
			if (!(this._accept(0) && this._accept(3) && (index = this._accept(8, true)))) return this._backTo(token);
			const placeholder = new Placeholder(Number(index));
			if (this._accept(1)) while (true) {
				const lastChar = this._scanner.isEnd();
				if (this._accept(4)) {
					if (!this._checkCulybrace(placeholder) && !lastChar) {
						placeholder.appendChild(new Text("}"));
						continue;
					}
					parent.appendChild(placeholder);
					return true;
				}
				if (this._parse(placeholder)) continue;
				parent.appendChild(new Text("${" + index + ":"));
				placeholder.children.forEach(parent.appendChild, parent);
				return true;
			}
			else if (placeholder.index > 0 && this._accept(7)) {
				const choice = new Choice();
				while (true) {
					if (this._parseChoiceElement(choice)) {
						if (this._accept(2)) continue;
						if (this._accept(7)) {
							placeholder.appendChild(choice);
							if (this._accept(4)) {
								parent.appendChild(placeholder);
								return true;
							}
						}
					}
					this._backTo(token);
					return false;
				}
			} else if (this._accept(6)) {
				if (this._parseTransform(placeholder)) {
					parent.appendChild(placeholder);
					return true;
				}
				this._backTo(token);
				return false;
			} else if (this._accept(4)) {
				parent.appendChild(placeholder);
				return true;
			} else return this._backTo(token);
		}
		_parseChoiceElement(parent) {
			const token = this._token;
			const values = [];
			while (true) {
				if (this._token.type === 2 || this._token.type === 7) break;
				let value;
				if (value = this._accept(5, true)) value = this._accept(2, true) || this._accept(7, true) || this._accept(5, true) || value;
				else value = this._accept(void 0, true);
				if (!value) {
					this._backTo(token);
					return false;
				}
				values.push(value);
			}
			if (values.length === 0) {
				this._backTo(token);
				return false;
			}
			parent.appendChild(new Text(values.join("")));
			return true;
		}
		_parseComplexVariable(parent) {
			let name;
			const token = this._token;
			if (!(this._accept(0) && this._accept(3) && (name = this._accept(9, true)))) return this._backTo(token);
			if (this.ultisnip && !ULTISNIP_VARIABLES.includes(name)) return this._backTo(token);
			const variable = new Variable(name);
			if (this._accept(1)) while (true) {
				if (this._accept(4)) {
					parent.appendChild(variable);
					return true;
				}
				if (this._parse(variable)) continue;
				parent.appendChild(new Text("${" + name + ":"));
				variable.children.forEach(parent.appendChild, parent);
				return true;
			}
			else if (this._accept(6)) {
				if (this._parseTransform(variable)) {
					parent.appendChild(variable);
					return true;
				}
				this._backTo(token);
				return false;
			} else if (this._accept(4)) {
				parent.appendChild(variable);
				return true;
			} else return this._backTo(token);
		}
		_parseTransform(parent) {
			let transform = new Transform();
			transform.ultisnip = this.ultisnip === true;
			let regexValue = "";
			let regexOptions = "";
			while (true) {
				if (this._accept(6)) break;
				let escaped;
				if (escaped = this._accept(5, true)) {
					escaped = this._accept(6, true) || escaped;
					regexValue += escaped;
					continue;
				}
				if (this._token.type !== 14) {
					regexValue += this._accept(void 0, true);
					continue;
				}
				return false;
			}
			while (true) {
				if (this._accept(6)) break;
				let escaped;
				if (escaped = this._accept(5, true)) {
					escaped = this._accept(5, true) || this._accept(6, true) || escaped;
					transform.appendChild(new Text(escaped));
					continue;
				}
				if (this._parseFormatString(transform) || this._parseConditionString(transform) || this._parseAnything(transform)) continue;
				return false;
			}
			let ascii = false;
			while (true) {
				if (this._accept(4)) break;
				if (this._token.type !== 14) {
					let c = this._accept(void 0, true);
					if (c == "a") ascii = true;
					else {
						if (!knownRegexOptions.includes(c)) logger$31.error(`Unknown regex option: ${c}`);
						regexOptions += c;
					}
					continue;
				}
				return false;
			}
			try {
				if (ascii) transform.ascii = true;
				if (this.ultisnip) regexValue = convertRegex(regexValue);
				transform.regexp = new RegExp(regexValue, regexOptions);
			} catch (e) {
				return false;
			}
			parent.transform = transform;
			return true;
		}
		_parseConditionString(parent) {
			if (!this.ultisnip) return false;
			const token = this._token;
			if (!this._accept(15)) return false;
			if (!this._accept(13)) {
				this._backTo(token);
				return false;
			}
			let index = this._accept(8, true);
			if (!index) {
				this._backTo(token);
				return false;
			}
			if (!this._accept(1)) {
				this._backTo(token);
				return false;
			}
			let text = this._until(16, true);
			if (text) {
				let i = 0;
				while (i < text.length) {
					if (text[i] == ":" && text[i - 1] != "\\") break;
					i++;
				}
				let ifValue = text.slice(0, i);
				let elseValue = text.slice(i + 1);
				parent.appendChild(new ConditionString(Number(index), ifValue, elseValue));
				return true;
			}
			this._backTo(token);
			return false;
		}
		_parseFormatString(parent) {
			const token = this._token;
			if (!this._accept(0)) return false;
			let complex = false;
			if (this._accept(3)) complex = true;
			let index = this._accept(8, true);
			if (!index) {
				this._backTo(token);
				return false;
			} else if (!complex) {
				parent.appendChild(new FormatString(Number(index)));
				return true;
			} else if (this._accept(4)) {
				parent.appendChild(new FormatString(Number(index)));
				return true;
			} else if (!this._accept(1)) {
				this._backTo(token);
				return false;
			}
			if (this.ultisnip) {
				this._backTo(token);
				return false;
			}
			if (this._accept(6)) {
				let shorthand = this._accept(9, true);
				if (!shorthand || !this._accept(4)) {
					this._backTo(token);
					return false;
				} else {
					parent.appendChild(new FormatString(Number(index), shorthand));
					return true;
				}
			} else if (this._accept(11)) {
				let ifValue = this._until(4);
				if (ifValue) {
					parent.appendChild(new FormatString(Number(index), void 0, ifValue, void 0));
					return true;
				}
			} else if (this._accept(12)) {
				let elseValue = this._until(4);
				if (elseValue) {
					parent.appendChild(new FormatString(Number(index), void 0, void 0, elseValue));
					return true;
				}
			} else if (this._accept(13)) {
				let ifValue = this._until(1);
				if (ifValue) {
					let elseValue = this._until(4);
					if (elseValue) {
						parent.appendChild(new FormatString(Number(index), void 0, ifValue, elseValue));
						return true;
					}
				}
			} else {
				let elseValue = this._until(4);
				if (elseValue) {
					parent.appendChild(new FormatString(Number(index), void 0, void 0, elseValue));
					return true;
				}
			}
			this._backTo(token);
			return false;
		}
		_parseCodeBlock(parent) {
			if (!this.ultisnip) return false;
			const token = this._token;
			if (!this._accept(17)) return false;
			let text = this._until(17, true);
			if (text) {
				if (!text.startsWith("!")) {
					let marker = new CodeBlock(text.trim(), "shell");
					parent.appendChild(marker);
					return true;
				}
				if (text.startsWith("!v")) {
					let marker = new CodeBlock(text.slice(2).trim(), "vim");
					parent.appendChild(marker);
					return true;
				}
				if (text.startsWith("!p")) {
					let code = text.slice(2);
					if (code.indexOf("\n") == -1) {
						let marker = new CodeBlock(code.trim(), "python");
						parent.appendChild(marker);
					} else {
						let codes = code.split(/\r?\n/);
						codes = codes.filter((s) => !/^\s*$/.test(s));
						if (!codes.length) return true;
						let ind = codes[0].match(/^\s*/)[0];
						if (ind.length && codes.every((s) => s.startsWith(ind))) codes = codes.map((s) => s.slice(ind.length));
						if (ind == " " && codes[0].startsWith(ind)) codes[0] = codes[0].slice(1);
						let marker = new CodeBlock(codes.join("\n"), "python");
						parent.appendChild(marker);
					}
					return true;
				}
			}
			this._backTo(token);
			return false;
		}
		_parseAnything(marker) {
			if (this._token.type !== 14) {
				let text = this._scanner.tokenText(this._token);
				marker.appendChild(new Text(text));
				this._accept(void 0);
				return true;
			}
			return false;
		}
	};
	escapedCharacters = [
		":",
		"(",
		")",
		"{",
		"}"
	];
}));
//#endregion
//#region src/model/textline.ts
var TextLine;
var init_textline = __esmMin((() => {
	init_main$2();
	TextLine = class {
		_line;
		_text;
		_isLastLine;
		constructor(line, text, isLastLine) {
			this._line = line;
			this._text = text;
			this._isLastLine = isLastLine;
		}
		/**
		* The zero-based line number.
		*/
		get lineNumber() {
			return this._line;
		}
		/**
		* The text of this line without the line separator characters.
		*/
		get text() {
			return this._text;
		}
		/**
		* The range this line covers without the line separator characters.
		*/
		get range() {
			return Range.create(this._line, 0, this._line, this._text.length);
		}
		/**
		* The range this line covers with the line separator characters.
		*/
		get rangeIncludingLineBreak() {
			return this._isLastLine ? this.range : Range.create(this._line, 0, this._line + 1, 0);
		}
		/**
		* The offset of the first character which is not a whitespace character as defined
		* by `/\s/`. **Note** that if a line is all whitespace the length of the line is returned.
		*/
		get firstNonWhitespaceCharacterIndex() {
			return /^(\s*)/.exec(this._text)[1].length;
		}
		/**
		* Whether this line is whitespace only, shorthand
		* for {@link TextLine.firstNonWhitespaceCharacterIndex} === {@link TextLine.text TextLine.text.length}.
		*/
		get isEmptyOrWhitespace() {
			return this.firstNonWhitespaceCharacterIndex === this._text.length;
		}
	};
}));
//#endregion
//#region src/model/textdocument.ts
function computeLinesOffsets(lines, eol) {
	const result = [];
	let textOffset = 0;
	for (let line of lines) {
		result.push(textOffset);
		textOffset += line.length + 1;
	}
	if (eol) result.push(textOffset);
	return result;
}
var LinesTextDocument;
var init_textdocument = __esmMin((() => {
	init_main$2();
	init_textedit();
	init_textline();
	LinesTextDocument = class {
		uri;
		languageId;
		version;
		lines;
		bufnr;
		eol;
		_lineOffsets;
		_content;
		constructor(uri, languageId, version, lines, bufnr, eol) {
			this.uri = uri;
			this.languageId = languageId;
			this.version = version;
			this.lines = lines;
			this.bufnr = bufnr;
			this.eol = eol;
		}
		get content() {
			if (!this._content) this._content = this.lines.join("\n") + (this.eol ? "\n" : "");
			return this._content;
		}
		get length() {
			if (!this._content) {
				let n = this.lines.reduce((p, c) => {
					return p + c.length + 1;
				}, 0);
				return this.eol ? n : n - 1;
			}
			return this._content.length;
		}
		get end() {
			let len = this.lines.length;
			if (this.eol) return Position.create(len, 0);
			return Position.create(len - 1, this.lines[len - 1].length);
		}
		get lineCount() {
			return this.lines.length + (this.eol ? 1 : 0);
		}
		intersectWith(range) {
			let start = Position.create(0, 0);
			if (start.line < range.start.line) start = range.start;
			else if (range.start.line === start.line) start = Position.create(start.line, Math.max(start.character, range.start.character));
			let end = this.end;
			if (range.end.line < end.line) end = range.end;
			else if (range.end.line === end.line) end = Position.create(end.line, Math.min(end.character, range.end.character));
			return Range.create(start, end);
		}
		getText(range) {
			if (range) return getRangeText(this.lines, range);
			return this.content;
		}
		lineAt(lineOrPos) {
			const line = Position.is(lineOrPos) ? lineOrPos.line : lineOrPos;
			if (typeof line !== "number" || line < 0 || line >= this.lineCount || Math.floor(line) !== line) throw new Error("Illegal value for `line`");
			return new TextLine(line, this.lines[line] ?? "", line === this.lineCount - 1);
		}
		positionAt(offset) {
			offset = Math.max(Math.min(offset, this.content.length), 0);
			let lineOffsets = this.getLineOffsets();
			let low = 0;
			let high = lineOffsets.length;
			if (high === 0) return {
				line: 0,
				character: offset
			};
			while (low < high) {
				let mid = Math.floor((low + high) / 2);
				if (lineOffsets[mid] > offset) high = mid;
				else low = mid + 1;
			}
			let line = low - 1;
			return {
				line,
				character: offset - lineOffsets[line]
			};
		}
		offsetAt(position) {
			let lineOffsets = this.getLineOffsets();
			if (position.line >= lineOffsets.length) return this.content.length;
			else if (position.line < 0) return 0;
			let lineOffset = lineOffsets[position.line];
			let nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this.content.length;
			return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
		}
		getLineOffsets() {
			if (this._lineOffsets === void 0) this._lineOffsets = computeLinesOffsets(this.lines, this.eol);
			return this._lineOffsets;
		}
	};
}));
//#endregion
//#region src/snippets/snippet.ts
/**
* Next or previous placeholder
*/
function getNextPlaceholder(marker, forward, nested = false) {
	if (!marker) return void 0;
	let { snippet } = marker;
	let idx = marker.index;
	if (idx < 0 || !snippet) return void 0;
	let arr = [];
	let min_index;
	let max_index;
	if (idx > 0) {
		snippet.walk((m) => {
			if (m instanceof Placeholder && !m.transform) {
				if (forward && (m.index > idx || m.isFinalTabstop) || !forward && m.index < idx && !m.isFinalTabstop) {
					arr.push(m);
					if (!m.isFinalTabstop) min_index = min_index === void 0 ? m.index : Math.min(min_index, m.index);
					max_index = max_index === void 0 ? m.index : Math.max(max_index, m.index);
				}
			}
			return true;
		}, true);
		if (arr.length > 0) {
			arr.sort((a, b) => {
				if (b.primary && !a.primary) return 1;
				if (a.primary && !b.primary) return -1;
				return 0;
			});
			if (forward) return min_index === void 0 ? arr[0] : arr.find((o) => o.index === min_index);
			return arr.find((o) => o.index === max_index);
		}
	}
	if (snippet.parent instanceof Placeholder) return getNextPlaceholder(snippet.parent, forward, true);
	if (nested) return marker;
}
/**
* Return action code and reset code of snippet.
*/
function getUltiSnipActionCodes(marker, action) {
	if (!marker) return void 0;
	const snip = marker instanceof TextmateSnippet ? marker : marker.snippet;
	if (!snip) return void 0;
	let context = snip.related.context;
	let code = getAction(context, action);
	if (!code) return void 0;
	return [code, getResetPythonCode(context)];
}
var CocSnippet;
var init_snippet = __esmMin((() => {
	init_main$2();
	init_textdocument();
	init_util$7();
	init_position();
	init_protocol();
	init_eval();
	init_parser();
	init_util$4();
	CocSnippet = class {
		snippet;
		position;
		nvim;
		resolver;
		_markerSequence = [];
		_placeholders = [];
		_snippets = [];
		_text;
		_tmSnippet;
		constructor(snippet, position, nvim, resolver) {
			this.snippet = snippet;
			this.position = position;
			this.nvim = nvim;
			this.resolver = resolver;
		}
		get tmSnippet() {
			return this._tmSnippet;
		}
		get snippets() {
			return this._snippets.map((o) => o.marker);
		}
		getSnippet(marker) {
			return marker instanceof TextmateSnippet ? marker : marker.snippet;
		}
		deactivateSnippet(snip) {
			if (!snip) return;
			if (snip.parent) {
				let text = new Text(snip.toString());
				snip.replaceWith(text);
				this.synchronize();
			}
		}
		getUltiSnipOption(marker, key) {
			let snip = this.getSnippet(marker);
			if (!snip) return void 0;
			let context = snip.related.context;
			if (!context) return void 0;
			return context[key];
		}
		async init(ultisnip) {
			if (typeof this.snippet === "string") {
				const snippet = new SnippetParser(!!ultisnip).parse(this.snippet, true);
				this._tmSnippet = snippet;
			} else this._tmSnippet = this.snippet;
			await this.resolve(this._tmSnippet, ultisnip);
			this.synchronize();
		}
		async resolve(snippet, ultisnip) {
			let { resolver, nvim } = this;
			if (resolver) await snippet.resolveVariables(resolver);
			if (ultisnip) {
				let pyCodes = [];
				snippet.related.context = ultisnip;
				if (ultisnip.noPython !== true) {
					if (snippet.hasPythonBlock) pyCodes = getPyBlockCode(ultisnip);
					else if (hasPython(ultisnip)) pyCodes = getResetPythonCode(ultisnip);
					if (pyCodes.length > 0) snippet.related.codes = pyCodes;
				}
				await snippet.evalCodeBlocks(nvim, pyCodes);
			}
		}
		getPlaceholderOnJump(current, forward) {
			const p = getNextPlaceholder(current, forward);
			return p ? this.getPlaceholderByMarker(p) : void 0;
		}
		/**
		* Same index and in same snippet only
		*/
		getRanges(marker) {
			if (marker.toString().length === 0 || !marker.snippet) return [];
			let tmSnippet = marker.snippet;
			return this._placeholders.filter((o) => o.index == marker.index && o.marker.snippet === tmSnippet).map((o) => o.range).filter((r) => !emptyRange(r));
		}
		/**
		* Find the most possible marker contains range, throw error when not found
		*/
		findParent(range, current) {
			const isInsert = emptyRange(range);
			let marker;
			let markerRange;
			const { _snippets, _placeholders, _markerSequence } = this;
			const seq = _markerSequence.filter((o) => o !== current);
			if (current && _markerSequence.includes(current)) seq.push(current);
			const list = seq.map((m) => {
				return m instanceof TextmateSnippet ? _snippets.find((o) => o.marker === m) : _placeholders.find((o) => o.marker === m);
			});
			for (let index = list.length - 1; index >= 0; index--) {
				const o = list[index];
				if (rangeInRange(range, o.range)) {
					if (isInsert && o.marker instanceof Placeholder && (o.marker.choice || o.marker.index === 0) && o.marker !== current && adjacentPosition(range.start, o.range)) continue;
					marker = o.marker;
					markerRange = o.range;
					break;
				}
			}
			if (!marker) throw new Error(`Unable to find parent marker in range ${JSON.stringify(range, null, 2)}`);
			return {
				marker,
				range: markerRange
			};
		}
		/**
		* The change must happens with same marker parents, return the changed marker
		*/
		replaceWithMarker(range, marker, current) {
			const isInsert = emptyRange(range);
			const result = this.findParent(range, current);
			let parentMarker = result.marker;
			let parentRange = result.range;
			const children = parentMarker.children;
			let pos = parentRange.start;
			let startIdx = 0;
			let deleteCount = 0;
			const { start, end } = range;
			let startMarker;
			let endMarker;
			let preText = "";
			let afterText = "";
			let len = children.length;
			for (let i = 0; i < len; i++) {
				let child = children[i];
				let value = child.toString();
				let s = Position.create(pos.line, pos.character);
				let e = getEnd(s, value);
				let r = Range.create(s, e);
				if (startMarker === void 0 && positionInRange(start, r) === 0 && !samePosition(start, e)) {
					startMarker = child;
					startIdx = i;
					preText = getTextBefore(Range.create(s, e), value, start);
					if (isInsert && samePosition(end, s)) {
						endMarker = child;
						break;
					}
				}
				if (startMarker != null) {
					if (positionInRange(end, r) === 0) {
						endMarker = child;
						afterText = getTextAfter(Range.create(s, e), value, end);
					}
					deleteCount += 1;
				} else if (i == len - 1 && samePosition(start, e)) startIdx = len;
				if (endMarker != null) break;
				pos = e;
			}
			if (marker instanceof Text) {
				let newText = new Text(preText + marker.value + afterText);
				parentMarker.children.splice(startIdx, deleteCount, newText);
				newText.parent = parentMarker;
				mergeTexts(parentMarker, 0);
				if (parentMarker instanceof Placeholder && parentMarker.children[0] instanceof Text) {
					let text = parentMarker.children[0];
					if (text.value.startsWith("\n")) {
						text.replaceWith(new Text(text.value.slice(1)));
						parentMarker.insertBefore("\n");
					}
				}
			} else {
				let markers = [];
				if (preText) markers.push(new Text(preText));
				if (parentMarker instanceof TextmateSnippet) {
					let p = new Placeholder((current ? current.index : 0) + Math.random());
					p.appendChild(marker);
					p.primary = true;
					markers.push(p);
				} else markers.push(marker);
				if (afterText) markers.push(new Text(afterText));
				children.splice(startIdx, deleteCount, ...markers);
				markers.forEach((m) => m.parent = parentMarker);
				if (preText.length > 0 || afterText.length > 0) mergeTexts(parentMarker, 0);
			}
			if (parentMarker instanceof Placeholder && !parentMarker.primary) {
				let first = parentMarker.children[0];
				if (parentMarker.children.length === 1 && first instanceof Text) {
					parentMarker.replaceWith(first);
					return first;
				}
				if (Number.isInteger(parentMarker.index)) parentMarker.index += .1;
			}
			return parentMarker;
		}
		/**
		* Replace range with text, return new Cursor position when cursor provided
		*
		* Get new Cursor position for synchronize update only.
		* The cursor position should already adjusted before call this function.
		*/
		async replaceWithText(range, text, token, current, cursor) {
			let cloned = this._tmSnippet.clone();
			let marker = this.replaceWithMarker(range, new Text(text), current);
			let snippetText = this._tmSnippet.toString();
			if (marker === this._tmSnippet) {
				this.synchronize();
				return {
					snippetText,
					marker
				};
			}
			let sp = this.getMarkerPosition(marker);
			let changeCharacter = sp && cursor && sp.line === cursor.line;
			const reset = () => {
				this._tmSnippet = cloned;
				this.synchronize();
			};
			token.onCancellationRequested(reset);
			await this.onMarkerUpdate(marker, token);
			if (token.isCancellationRequested) return void 0;
			let ep = this.getMarkerPosition(marker);
			let delta;
			if (cursor && sp && ep) {
				let lc = ep.line - sp.line;
				let cc = changeCharacter ? ep.character - sp.character : 0;
				if (lc != 0 || cc != 0) delta = Position.create(lc, cc);
			}
			return {
				snippetText,
				marker,
				delta
			};
		}
		async replaceWithSnippet(range, text, current, ultisnip) {
			let snippet = new SnippetParser(!!ultisnip).parse(text, true);
			let marker = this.replaceWithMarker(range, snippet, current);
			await this.resolve(snippet, ultisnip);
			await this.onMarkerUpdate(marker, import_main$1.CancellationToken.None);
			return snippet;
		}
		/**
		* Get placeholder or snippet start position in current document
		*/
		getMarkerPosition(marker) {
			if (marker instanceof Placeholder) {
				let p = this._placeholders.find((o) => o.marker === marker);
				return p ? p.range.start : void 0;
			}
			let o = this._snippets.find((o) => o.marker === marker);
			return o ? o.range.start : void 0;
		}
		getSnippetRange(marker) {
			let snip = marker.snippet;
			if (!snip) return void 0;
			let info = this._snippets.find((o) => o.marker === snip);
			return info ? info.range : void 0;
		}
		/**
		* Get TabStops of same snippet.
		*/
		getSnippetTabstops(marker) {
			let snip = marker.snippet;
			if (!snip) return [];
			let res = [];
			this._placeholders.forEach((p) => {
				const { start, end } = p.range;
				if (p.marker.snippet === snip && (p.primary || p.index === 0)) res.push({
					index: p.index,
					range: [
						start.line,
						start.character,
						end.line,
						end.character
					],
					text: p.value
				});
			});
			return res;
		}
		async onMarkerUpdate(marker, token) {
			let ts = Date.now();
			while (marker != null) if (marker instanceof Placeholder) {
				let snip = marker.snippet;
				if (!snip) break;
				await snip.update(this.nvim, marker, token);
				if (token.isCancellationRequested) return;
				marker = snip.parent;
			} else marker = marker.parent;
			await waitWithToken(Math.max(0, 16 - Date.now() + ts), token);
			if (token.isCancellationRequested) return;
			this.synchronize();
		}
		usePython(snip) {
			return snip.hasCodeBlock || hasPython(snip.related.context);
		}
		get hasPython() {
			for (const info of this._snippets) {
				let snip = info.marker;
				if (this.usePython(snip)) return true;
			}
			return false;
		}
		resetStartPosition(pos) {
			this.position = pos;
			this.synchronize();
		}
		get start() {
			return Position.create(this.position.line, this.position.character);
		}
		get range() {
			let end = getEnd(this.position, this._text);
			return Range.create(this.position, end);
		}
		get text() {
			return this._text;
		}
		get hasBeginningPlaceholder() {
			let { position } = this;
			return this._placeholders.find((o) => o.index !== 0 && comparePosition(o.range.start, position) === 0) != null;
		}
		get hasEndPlaceholder() {
			let position = this._snippets[0].range.end;
			return this._placeholders.find((o) => o.index !== 0 && comparePosition(o.range.end, position) === 0) != null;
		}
		getPlaceholderByMarker(marker) {
			return this._placeholders.find((o) => o.marker === marker);
		}
		getPlaceholderByIndex(index) {
			let filtered = this._placeholders.filter((o) => o.index == index && !o.marker.transform);
			return defaultValue(filtered.find((o) => o.primary), filtered[0]);
		}
		getPlaceholderById(id, index) {
			let p = this._tmSnippet.placeholders.find((o) => o.id === id);
			if (p) return p;
			let placeholder = this.getPlaceholderByIndex(index);
			return placeholder ? placeholder.marker : void 0;
		}
		/**
		* Should be used after snippet resolved.
		*/
		synchronize() {
			const snippet = this._tmSnippet;
			const snippetStr = snippet.toString();
			const document = new LinesTextDocument("/", "", 0, snippetStr.split(/\n/), 0, false);
			const placeholders = [];
			const snippets = [];
			const markerSequence = [];
			const { start } = this;
			snippets.push({
				range: Range.create(start, getEnd(start, snippetStr)),
				marker: snippet,
				value: snippetStr
			});
			markerSequence.push(snippet);
			let offset = 0;
			snippet.walk((marker) => {
				if (marker instanceof Placeholder && marker.transform == null) {
					markerSequence.push(marker);
					const position = document.positionAt(offset);
					const value = marker.toString();
					placeholders.push({
						index: marker.index,
						value,
						marker,
						range: getNewRange(start, position, value),
						primary: marker.primary === true
					});
				} else if (marker instanceof TextmateSnippet) {
					markerSequence.push(marker);
					const position = document.positionAt(offset);
					const value = marker.toString();
					snippets.push({
						range: getNewRange(start, position, value),
						marker,
						value
					});
				}
				offset += marker.len();
				return true;
			}, false);
			this._snippets = snippets;
			this._text = snippetStr;
			this._placeholders = placeholders;
			this._markerSequence = markerSequence;
		}
	};
}));
//#endregion
//#region src/snippets/variableResolve.ts
function padZero(n) {
	return n < 10 ? "0" + n : n.toString();
}
function parseComments(comments) {
	let start;
	let end;
	let single;
	let parts = comments.split(",");
	for (let s of parts) {
		if (start && end && single) break;
		if (!s.includes(":")) continue;
		let [flag, str] = s.split(":");
		if (flag.includes("s")) start = str;
		else if (flag.includes("e")) end = str;
		else if (!single && flag == "") single = str;
	}
	return {
		start,
		end,
		single
	};
}
function parseCommentstring(commentstring) {
	if (commentstring.endsWith("%s")) return commentstring.slice(0, -2).trim();
}
var SnippetVariableResolver;
var init_variableResolve = __esmMin((() => {
	init_dist_node();
	init_esm();
	init_node();
	init_object();
	SnippetVariableResolver = class {
		nvim;
		workspaceFolder;
		_variableToValue = {};
		constructor(nvim, workspaceFolder) {
			this.nvim = nvim;
			this.workspaceFolder = workspaceFolder;
			const currentDate = /* @__PURE__ */ new Date();
			const fullyear = currentDate.getFullYear().toString();
			Object.assign(this._variableToValue, {
				CURRENT_YEAR: fullyear,
				CURRENT_YEAR_SHORT: fullyear.slice(-2),
				CURRENT_MONTH: padZero(currentDate.getMonth() + 1),
				CURRENT_DATE: padZero(currentDate.getDate()),
				CURRENT_HOUR: padZero(currentDate.getHours()),
				CURRENT_MINUTE: padZero(currentDate.getMinutes()),
				CURRENT_SECOND: padZero(currentDate.getSeconds()),
				CURRENT_DAY_NAME: currentDate.toLocaleString("en-US", { weekday: "long" }),
				CURRENT_DAY_NAME_SHORT: currentDate.toLocaleString("en-US", { weekday: "short" }),
				CURRENT_MONTH_NAME: currentDate.toLocaleString("en-US", { month: "long" }),
				CURRENT_MONTH_NAME_SHORT: currentDate.toLocaleString("en-US", { month: "short" }),
				TM_FILENAME: null,
				TM_FILENAME_BASE: null,
				TM_DIRECTORY: null,
				TM_FILEPATH: null,
				YANK: null,
				TM_LINE_INDEX: null,
				TM_LINE_NUMBER: null,
				TM_CURRENT_LINE: null,
				TM_CURRENT_WORD: null,
				TM_SELECTED_TEXT: null,
				VISUAL: null,
				CLIPBOARD: null,
				RELATIVE_FILEPATH: null,
				RANDOM: null,
				RANDOM_HEX: null,
				UUID: null,
				BLOCK_COMMENT_START: null,
				BLOCK_COMMENT_END: null,
				LINE_COMMENT: null,
				WORKSPACE_NAME: null,
				WORKSPACE_FOLDER: null
			});
		}
		async resolveValue(name) {
			let { nvim } = this;
			if ([
				"TM_FILENAME",
				"TM_FILENAME_BASE",
				"TM_DIRECTORY",
				"TM_FILEPATH"
			].includes(name)) {
				let filepath = await nvim.call("coc#util#get_fullpath");
				if (name === "TM_FILENAME") return path$5.basename(filepath);
				if (name === "TM_FILENAME_BASE") return path$5.basename(filepath, path$5.extname(filepath));
				if (name === "TM_DIRECTORY") return path$5.dirname(filepath);
				if (name === "TM_FILEPATH") return filepath;
			}
			if (name === "YANK") return await nvim.call("getreg", ["\"\""]);
			if (name === "TM_LINE_INDEX") return (await nvim.call("line", ["."]) - 1).toString();
			if (name === "TM_LINE_NUMBER") return (await nvim.call("line", ["."])).toString();
			if (name === "TM_CURRENT_LINE") return await nvim.call("getline", ["."]);
			if (name === "TM_CURRENT_WORD") return await nvim.eval(`expand('<cword>')`);
			if (name === "TM_SELECTED_TEXT" || name == "VISUAL") return await nvim.eval(`get(g:,'coc_selected_text', v:null)`);
			if (name === "CLIPBOARD") return await nvim.eval("@*");
			if (name === "RANDOM") return Math.random().toString().slice(-6);
			if (name === "RANDOM_HEX") return Math.random().toString(16).slice(-6);
			if (name === "UUID") return v4();
			if ([
				"RELATIVE_FILEPATH",
				"WORKSPACE_NAME",
				"WORKSPACE_FOLDER"
			].includes(name)) {
				let filepath = await nvim.call("coc#util#get_fullpath");
				let folder = this.workspaceFolder.getWorkspaceFolder(URI.file(filepath));
				if (name === "RELATIVE_FILEPATH") return this.workspaceFolder.getRelativePath(filepath);
				if (name === "WORKSPACE_NAME") return folder.name;
				if (name === "WORKSPACE_FOLDER") return URI.parse(folder.uri).fsPath;
			}
			if (name === "LINE_COMMENT") {
				let s = parseCommentstring(await nvim.eval("&commentstring"));
				if (s) return s;
				let { single } = parseComments(await nvim.eval("&comments"));
				return single;
			}
			if (["BLOCK_COMMENT_START", "BLOCK_COMMENT_END"].includes(name)) {
				let { start, end } = parseComments(await nvim.eval("&comments"));
				if (name === "BLOCK_COMMENT_START") return start;
				if (name === "BLOCK_COMMENT_END") return end;
			}
		}
		async resolve(variable) {
			const name = variable.name;
			let resolved = this._variableToValue[name];
			if (resolved != null) return resolved.toString();
			if (hasOwnProperty$1(this._variableToValue, name)) {
				let value = await this.resolveValue(name);
				if (!value && variable.children.length) return variable.toString();
				return value == null ? "" : value.toString();
			}
			if (variable.children.length) return variable.toString();
		}
	};
}));
//#endregion
//#region src/snippets/session.ts
var logger$30, NAME_SPACE, SnippetSession;
var init_session$1 = __esmMin((() => {
	init_main$2();
	init_events();
	init_logger$2();
	init_util$7();
	init_diff();
	init_errors();
	init_lodash();
	init_mutex();
	init_object();
	init_position();
	init_protocol();
	init_string$1();
	init_textedit();
	init_window();
	init_workspace$1();
	init_eval();
	init_parser();
	init_snippet();
	init_util$4();
	init_variableResolve();
	logger$30 = createLogger$1("snippets-session");
	NAME_SPACE = "snippets";
	SnippetSession = class {
		nvim;
		document;
		config;
		mutex = new Mutex();
		current;
		textDocument;
		tokenSource;
		_applying = false;
		_paused = false;
		snippet = null;
		_onActiveChange = new import_main$1.Emitter();
		_selected = false;
		onActiveChange = this._onActiveChange.event;
		constructor(nvim, document, config) {
			this.nvim = nvim;
			this.document = document;
			this.config = config;
		}
		get selected() {
			return this._selected;
		}
		async insertSnippetEdits(edits) {
			if (edits.length === 0) return this.isActive;
			if (edits.length === 1) return await this.start(toSnippetString(edits[0].snippet), edits[0].range, false);
			const textDocument = this.document.textDocument;
			const textEdits = filterSortEdits(textDocument, edits.map((e) => TextEdit.replace(e.range, toSnippetString(e.snippet))));
			const len = textEdits.length;
			const snip = new TextmateSnippet();
			for (let i = 0; i < len; i++) {
				let range = textEdits[i].range;
				let placeholder = new Placeholder(i + 1);
				placeholder.appendChild(new Text(textDocument.getText(range)));
				snip.appendChild(placeholder);
				if (i != len - 1) {
					let r = Range.create(range.end, textEdits[i + 1].range.start);
					snip.appendChild(new Text(textDocument.getText(r)));
				}
			}
			this.deactivate();
			const resolver = new SnippetVariableResolver(this.nvim, workspace_default.workspaceFolderControl);
			let snippet = new CocSnippet(snip, textEdits[0].range.start, this.nvim, resolver);
			await snippet.init();
			this.activate(snippet);
			for (let i = len - 1; i >= 0; i--) {
				let idx = i + 1;
				this.current = snip.placeholders.find((o) => o.index === idx);
				let edit = textEdits[i];
				await this.start(edit.newText, edit.range, false);
			}
			return this.isActive;
		}
		async start(inserted, range, select = true, context) {
			let { document, snippet } = this;
			this._paused = false;
			const edits = [];
			let textmateSnippet;
			if (inserted.length === 0) return this.isActive;
			if (snippet && this.canNestSnippet(range, snippet)) {
				let oldRange = snippet.range;
				let previous = snippet.text;
				textmateSnippet = await this.snippet.replaceWithSnippet(range, inserted, this.current, context);
				let edit = reduceTextEdit({
					range: oldRange,
					newText: this.snippet.text
				}, previous);
				edits.push(edit);
			} else {
				this.deactivate();
				const resolver = new SnippetVariableResolver(this.nvim, workspace_default.workspaceFolderControl);
				snippet = new CocSnippet(inserted, range.start, this.nvim, resolver);
				await snippet.init(context);
				textmateSnippet = snippet.tmSnippet;
				edits.push(TextEdit.replace(range, snippet.text));
				if (inserted.replace(/\$0$/, "").endsWith("\n")) {
					const currentLine = document.getline(range.start.line);
					const remain = currentLine.slice(range.end.character);
					if (remain.length) {
						let s = range.end.character;
						let l = remain.match(/^\s*/)[0].length;
						let r = Range.create(range.end.line, s, range.end.line, s + l);
						edits.push(TextEdit.replace(r, currentLine.match(/^\s*/)[0]));
					}
				}
			}
			this.current = textmateSnippet.first;
			this.nvim.call("coc#compat#del_var", ["coc_selected_text"], true);
			await this.applyEdits(edits);
			this.activate(snippet);
			if (context) await this.tryPostExpand(textmateSnippet);
			let { placeholder } = this;
			if (select && placeholder) await this.selectPlaceholder(placeholder, true);
			return this.isActive;
		}
		canNestSnippet(range, snippet) {
			let placeholder = this.placeholder;
			return !!placeholder && rangeInRange(range, snippet.range) && rangeInRange(range, placeholder.range);
		}
		async tryPostExpand(textmateSnippet) {
			let result = getUltiSnipActionCodes(textmateSnippet, "postExpand");
			if (!result) return;
			const { start, end } = this.snippet.range;
			const [code, resetCodes] = result;
			let pos = `[${start.line},${start.character},${end.line},${end.character}]`;
			let codes = [
				...resetCodes,
				`snip = coc_ultisnips_dict["PostExpandContext"](${pos})`,
				code
			];
			this.cancel();
			await executePythonCode(this.nvim, codes);
			await this.forceSynchronize();
		}
		async tryPostJump(code, resetCodes, info, bufnr) {
			await waitNextTick();
			this.nvim.setVar("coc_ultisnips_tabstops", info.tabstops, true);
			const { snippet_start, snippet_end } = info;
			let pos = `[${snippet_start.line},${snippet_start.character},${snippet_end.line},${snippet_end.character}]`;
			let codes = [
				...resetCodes,
				`snip = coc_ultisnips_dict["PostJumpContext"](${pos},${info.index},${info.forward ? 1 : 0})`,
				code
			];
			this.cancel();
			await executePythonCode(this.nvim, codes);
			await this.forceSynchronize();
			events_default.fire("PlaceholderJump", [bufnr, info]);
		}
		async removeWhiteSpaceBefore(placeholder) {
			if (!emptyRange(placeholder.range)) return;
			let pos = placeholder.range.start;
			let line = this.document.getline(pos.line);
			let ms = line.match(/\s+$/);
			if (ms && line.length === pos.character) {
				let startCharacter = pos.character - ms[0].length;
				let textEdit = TextEdit.del(Range.create(pos.line, startCharacter, pos.line, pos.character));
				await this.document.applyEdits([textEdit]);
				await this.forceSynchronize();
			}
		}
		async applyEdits(edits, joinundo = false) {
			let { document } = this;
			this._applying = true;
			await document.applyEdits(edits, joinundo);
			this._applying = false;
			this.textDocument = document.textDocument;
		}
		async nextPlaceholder() {
			await this.forceSynchronize();
			if (!this.current) return;
			let marker = this.current;
			if (this.snippet.getUltiSnipOption(marker, "removeWhiteSpace")) {
				let { placeholder } = this;
				if (placeholder) await this.removeWhiteSpaceBefore(placeholder);
			}
			const p = this.snippet.getPlaceholderOnJump(marker, true);
			await this.selectPlaceholder(p, true);
		}
		async previousPlaceholder() {
			await this.forceSynchronize();
			if (!this.current) return;
			const p = this.snippet.getPlaceholderOnJump(this.current, false);
			await this.selectPlaceholder(p, true, false);
		}
		async selectCurrentPlaceholder(triggerAutocmd = true) {
			await this.forceSynchronize();
			let { placeholder } = this;
			if (placeholder) await this.selectPlaceholder(placeholder, triggerAutocmd);
		}
		async selectPlaceholder(placeholder, triggerAutocmd = true, forward = true) {
			let { nvim, document } = this;
			if (!document || !placeholder) return;
			this._selected = true;
			let { start, end } = placeholder.range;
			const line = document.getline(start.line);
			const marker = this.current = placeholder.marker;
			const range = this.snippet.getSnippetRange(marker);
			const tabstops = this.snippet.getSnippetTabstops(marker);
			if (marker instanceof Placeholder && marker.choice && marker.choice.options.length) {
				const col = byteIndex(line, start.character) + 1;
				wordsSource.words = marker.choice.options.map((o) => o.value);
				wordsSource.startcol = col - 1;
				nvim.call("coc#snippet#show_choices", [
					start.line + 1,
					col,
					end,
					placeholder.value
				], true);
			} else {
				await this.select(placeholder);
				this.highlights();
			}
			if (triggerAutocmd) nvim.call("coc#util#do_autocmd", ["CocJumpPlaceholder"], true);
			let info = {
				forward,
				tabstops,
				snippet_start: range.start,
				snippet_end: range.end,
				index: placeholder.index,
				range: placeholder.range,
				charbefore: start.character == 0 ? "" : line.slice(start.character - 1, start.character)
			};
			let result = getUltiSnipActionCodes(marker, "postJump");
			if (result) this.tryPostJump(result[0], result[1], info, document.bufnr).catch(onUnexpectedError);
			else events_default.fire("PlaceholderJump", [document.bufnr, info]);
			this.checkFinalPlaceholder();
		}
		checkFinalPlaceholder() {
			let current = this.current;
			if (current && current.index === 0) {
				const { snippet } = current;
				if (snippet === this.snippet.tmSnippet) {
					logger$30.info("Jump to final placeholder, cancelling snippet session");
					this.deactivate();
				} else {
					let marker = snippet.parent;
					this.snippet.deactivateSnippet(snippet);
					if (marker instanceof Placeholder) this.current = marker;
				}
			}
		}
		highlights() {
			let { current, config } = this;
			if (!current || !config.highlight || events_default.bufnr !== this.bufnr) return;
			let buf = this.document.buffer;
			this.nvim.pauseNotification();
			buf.clearNamespace(NAME_SPACE);
			let ranges = this.snippet.getRanges(current);
			buf.highlightRanges(NAME_SPACE, "CocSnippetVisual", ranges);
			this.nvim.resumeNotification(true, true);
		}
		async select(placeholder) {
			let { range, value } = placeholder;
			let { nvim } = this;
			if (value.length > 0) await nvim.call("coc#snippet#select", [
				range.start,
				range.end,
				value
			]);
			else await nvim.call("coc#snippet#move", [range.start]);
			nvim.redrawVim();
		}
		async checkPosition() {
			if (!this.isActive) return;
			let position = await window_default.getCursorPosition();
			if (this.snippet && positionInRange(position, this.snippet.range) != 0) {
				logger$30.info("Cursor insert out of range, cancelling snippet session");
				this.deactivate();
			}
		}
		onTextChange() {
			this.cancel();
		}
		onChange(e) {
			if (this._applying || !this.isActive || this._paused) return;
			let changes = e.contentChanges;
			this.cancel();
			this.synchronize({
				version: e.textDocument.version,
				change: changes[0]
			}).catch(onUnexpectedError);
		}
		async synchronize(change) {
			const { document, isActive } = this;
			this._paused = false;
			if (!isActive) return;
			await this.mutex.use(() => {
				if (!document.attached || document.dirty || !this.snippet || !this.textDocument || document.version === this.version) return Promise.resolve();
				if (change && (change.version - this.version !== 1 || document.version != change.version)) change = void 0;
				return this._synchronize(change);
			});
		}
		async _synchronize(documentChange) {
			let { document, textDocument, current, snippet } = this;
			const newDocument = document.textDocument;
			if (equals(textDocument.lines, newDocument.lines)) {
				this.textDocument = newDocument;
				return;
			}
			const startTs = Date.now();
			let tokenSource = this.tokenSource = new import_main$1.CancellationTokenSource();
			const cursor = events_default.bufnr == document.bufnr ? await window_default.getCursorPosition() : void 0;
			let change = documentChange?.change;
			if (!change) {
				let edit = getTextEdit(textDocument.lines, newDocument.lines, cursor, events_default.insertMode);
				change = {
					range: edit.range,
					text: edit.newText
				};
			}
			if (!emptyRange(change.range)) {
				let reduced = reduceTextEdit(TextEdit.replace(change.range, change.text), textDocument.getText(change.range));
				change = {
					range: reduced.range,
					text: reduced.newText
				};
			}
			const { range, start } = snippet;
			let c = comparePosition(change.range.start, range.end);
			let insertEnd = emptyRange(change.range) && snippet.hasEndPlaceholder;
			if (c > 0 || c === 0 && !insertEnd) {
				logger$30.info("Content change after snippet");
				this.textDocument = newDocument;
				return;
			}
			c = comparePosition(change.range.end, range.start);
			let insertBeginning = emptyRange(change.range) && !change.text.endsWith("\n") && snippet.hasBeginningPlaceholder;
			if (c < 0 || c === 0 && !insertBeginning) {
				let changeEnd = change.range.end;
				let checkCharacter = range.start.line === changeEnd.line;
				let newLines = change.text.split(/\n/);
				let lc = newLines.length - (changeEnd.line - change.range.start.line + 1);
				let cc = 0;
				if (checkCharacter) if (newLines.length > 1) cc = newLines[newLines.length - 1].length - changeEnd.character;
				else cc = change.range.start.character + change.text.length - changeEnd.character;
				this.snippet.resetStartPosition(Position.create(start.line + lc, start.character + cc));
				this.textDocument = newDocument;
				logger$30.info("Content change before snippet, reset snippet position");
				return;
			}
			if (!rangeInRange(change.range, range)) {
				logger$30.info("Before and snippet body changed, cancel snippet session");
				this.deactivate();
				return;
			}
			if (tokenSource.token.isCancellationRequested) return;
			const nextPlaceholder = getNextPlaceholder(current, true);
			const id = getPlaceholderId(current);
			const res = await this.snippet.replaceWithText(change.range, change.text, tokenSource.token, current, cursor);
			this.tokenSource = void 0;
			if (!res) {
				if (this.snippet) {
					let marker = this.snippet.getPlaceholderById(id, current.index);
					this.current = defaultValue(marker, this.snippet.tmSnippet.first);
				}
				return;
			}
			this.textDocument = newDocument;
			let { snippetText, delta } = res;
			let changedRange = Range.create(start, getEnd(start, snippetText));
			const expected = newDocument.getText(changedRange);
			if (expected !== snippetText) {
				logger$30.error(`Something went wrong with the snippet implementation`, change, snippetText, expected);
				this.deactivate();
				return;
			}
			let newText = this.snippet.text;
			if (newText !== snippetText) {
				let edit = reduceTextEdit({
					range: changedRange,
					newText
				}, snippetText);
				await this.applyEdits([edit], true);
				if (delta) this.nvim.call(`coc#cursor#move_to`, [cursor.line + delta.line, cursor.character + delta.character], true);
			}
			this.highlights();
			logger$30.debug("update cost:", Date.now() - startTs, res.delta);
			this.trySelectNextOnDelete(current, nextPlaceholder).catch(onUnexpectedError);
		}
		async trySelectNextOnDelete(curr, next) {
			if (!this.config.nextOnDelete || !this.snippet || !curr || curr.snippet != null && curr.toString() != "" || !next) return;
			let p = this.snippet.getPlaceholderByMarker(next);
			if (p) await this.selectPlaceholder(p, true);
		}
		async forceSynchronize() {
			if (this.isActive) {
				this._paused = false;
				await this.document.patchChange();
				await this.synchronize();
			} else await this.document.patchChange();
		}
		async onCompleteDone() {
			if (this.isActive) {
				this._paused = false;
				this.document._forceSync();
				await this.synchronize();
			}
		}
		get version() {
			return this.textDocument ? this.textDocument.version : -1;
		}
		get isActive() {
			return this.snippet != null;
		}
		get bufnr() {
			return this.document.bufnr;
		}
		activate(snippet) {
			if (this.isActive) return;
			this.snippet = snippet;
			this.nvim.call("coc#snippet#enable", [this.bufnr, this.config.preferComplete ? 1 : 0], true);
			this._onActiveChange.fire(true);
		}
		deactivate() {
			this.cancel();
			if (!this.isActive) return;
			this.snippet = null;
			this.current = null;
			this.nvim.call("coc#snippet#disable", [this.bufnr], true);
			if (this.config.highlight) this.nvim.call("coc#highlight#clear_highlight", [
				this.bufnr,
				NAME_SPACE,
				0,
				-1
			], true);
			this._onActiveChange.fire(false);
			logger$30.debug(`session ${this.bufnr} deactivate`);
		}
		get placeholder() {
			if (!this.snippet || !this.current) return void 0;
			return this.snippet.getPlaceholderByMarker(this.current);
		}
		cancel(pause = false) {
			if (!this.isActive) return;
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource.dispose();
				this.tokenSource = null;
			}
			if (pause) this._paused = true;
		}
		dispose() {
			this.cancel();
			this._onActiveChange.dispose();
			this.snippet = null;
			this.current = null;
			this.textDocument = void 0;
		}
		async resolveSnippet(nvim, snippetString, ultisnip) {
			let context;
			if (ultisnip) {
				ultisnip = omit$2(ultisnip, ["actions"]);
				context = Object.assign({
					range: Range.create(0, 0, 0, 0),
					line: ""
				}, ultisnip, { id: generateContextId(events_default.bufnr) });
				if (ultisnip.noPython !== true && snippetString.includes("`!p")) await executePythonCode(nvim, getInitialPythonCode(context));
			}
			const resolver = new SnippetVariableResolver(nvim, workspace_default.workspaceFolderControl);
			const snippet = new CocSnippet(snippetString, Position.create(0, 0), nvim, resolver);
			await snippet.init(context);
			return snippet.text;
		}
	};
}));
//#endregion
//#region src/snippets/manager.ts
var SnippetManager, manager_default;
var init_manager$1 = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_events();
	init_util$7();
	init_object();
	init_position();
	init_window();
	init_workspace$1();
	init_eval();
	init_session$1();
	init_util$4();
	SnippetManager = class {
		disposables = [];
		_statusItem;
		bufferSync;
		config;
		init() {
			this.synchronizeConfig();
			workspace_default.onDidChangeConfiguration((e) => {
				if (e.affectsConfiguration("snippet") || e.affectsConfiguration("suggest")) this.synchronizeConfig();
			}, null, this.disposables);
			events_default.on(["InsertCharPre", "Enter"], () => {
				let session = this.session;
				if (session) session.cancel();
			}, null, this.disposables);
			events_default.on("CompleteDone", async (_item, _line, bufnr) => {
				let session = this.bufferSync.getItem(bufnr);
				if (session) await session.onCompleteDone();
			}, null, this.disposables);
			events_default.on("CompleteStart", async (opt) => {
				let session = this.bufferSync.getItem(opt.bufnr);
				if (session) session.cancel(true);
			}, null, this.disposables);
			events_default.on("InsertEnter", async (bufnr) => {
				let session = this.bufferSync.getItem(bufnr);
				if (session) await session.checkPosition();
			}, null, this.disposables);
			this.bufferSync = workspace_default.registerBufferSync((doc) => {
				let session = new SnippetSession(this.nvim, doc, this.config);
				session.onActiveChange((isActive) => {
					if (events_default.bufnr !== session.bufnr) return;
					this.statusItem[isActive ? "show" : "hide"]();
				});
				return session;
			});
			this.disposables.push(this.bufferSync);
			window_default.onDidChangeActiveTextEditor(async (e) => {
				let session = this.bufferSync.getItem(e.bufnr);
				if (session && session.isActive) {
					this.statusItem.show();
					if (!session.selected) await session.selectCurrentPlaceholder();
				} else this.statusItem.hide();
			}, null, this.disposables);
			commands_default.register({
				id: "editor.action.insertSnippet",
				execute: async (edit, ultisnip) => {
					const opts = ultisnip === true ? {} : ultisnip;
					return await this.insertSnippet(edit.newText, true, edit.range, InsertTextMode.adjustIndentation, opts ? opts : void 0);
				}
			}, true);
			commands_default.register({
				id: "editor.action.insertBufferSnippets",
				execute: async (bufnr, edits, select) => {
					return await this.insertBufferSnippets(bufnr, edits, select);
				}
			}, true);
		}
		get nvim() {
			return workspace_default.nvim;
		}
		get statusItem() {
			if (this._statusItem) return this._statusItem;
			const snippetConfig = workspace_default.initialConfiguration.get("snippet");
			const statusItem = this._statusItem = window_default.createStatusBarItem(0);
			statusItem.text = defaultValue(snippetConfig.statusText, "");
			return this._statusItem;
		}
		synchronizeConfig() {
			const snippetConfig = workspace_default.getConfiguration("snippet", null);
			const suggest = workspace_default.getConfiguration("suggest", null);
			let obj = {
				highlight: defaultValue(snippetConfig.inspect("highlight").globalValue, false),
				nextOnDelete: defaultValue(snippetConfig.inspect("nextPlaceholderOnDelete").globalValue, false),
				preferComplete: suggest.get("preferCompleteThanJumpPlaceholder", false)
			};
			if (this.config) Object.assign(this.config, obj);
			else this.config = obj;
		}
		async toRange(range) {
			if (range) return toValidRange(range);
			let pos = await window_default.getCursorPosition();
			return Range.create(pos, pos);
		}
		async insertBufferSnippets(bufnr, edits, select = false) {
			let document = workspace_default.getAttachedDocument(bufnr);
			const session = this.bufferSync.getItem(bufnr);
			session.deactivate();
			let snippetEdits = [];
			for (const edit of edits) {
				let currentLine = document.getline(edit.range.start.line);
				let inserted = await this.normalizeInsertText(bufnr, toSnippetString(edit.snippet), currentLine, InsertTextMode.asIs);
				snippetEdits.push({
					range: edit.range,
					snippet: inserted
				});
			}
			await session.synchronize();
			let isActive = await session.insertSnippetEdits(snippetEdits);
			if (isActive && select && workspace_default.bufnr === bufnr) await session.selectCurrentPlaceholder();
			return isActive;
		}
		/**
		* Insert snippet to specific buffer, ultisnips not supported, and the placeholder is not selected
		*/
		async insertBufferSnippet(bufnr, snippet, range, insertTextMode) {
			let document = workspace_default.getAttachedDocument(bufnr);
			const session = this.bufferSync.getItem(bufnr);
			session.deactivate();
			range = toValidRange(range);
			const line = document.getline(range.start.line);
			const snippetStr = toSnippetString(snippet);
			const inserted = await this.normalizeInsertText(document.bufnr, snippetStr, line, insertTextMode);
			await session.synchronize();
			return await session.start(inserted, range, false);
		}
		/**
		* Insert snippet at current cursor position
		*/
		async insertSnippet(snippet, select = true, range, insertTextMode, ultisnip) {
			let { nvim } = workspace_default;
			let document = workspace_default.getAttachedDocument(workspace_default.bufnr);
			const session = this.bufferSync.getItem(document.bufnr);
			let context;
			session.cancel(true);
			range = await this.toRange(range);
			const currentLine = document.getline(range.start.line);
			const snippetStr = toSnippetString(snippet);
			const inserted = await this.normalizeInsertText(document.bufnr, snippetStr, currentLine, insertTextMode, ultisnip);
			if (ultisnip != null) {
				const usePy = hasPython(ultisnip) || inserted.includes("`!p");
				const bufnr = document.bufnr;
				context = Object.assign({
					range: deepClone(range),
					line: currentLine
				}, ultisnip, { id: generateContextId(bufnr) });
				if (usePy) {
					if (session.placeholder) {
						let { start, end } = session.placeholder.range;
						let last = {
							current_text: session.placeholder.value,
							start: {
								line: start.line,
								col: start.character
							},
							end: {
								line: end.line,
								col: end.character
							}
						};
						this.nvim.setVar("coc_last_placeholder", last, true);
					} else this.nvim.call("coc#compat#del_var", ["coc_last_placeholder"], true);
					const codes = getInitialPythonCode(context);
					let preExpand = getAction(ultisnip, "preExpand");
					if (preExpand) {
						nvim.call("coc#cursor#move_to", [range.end.line, range.end.character], true);
						await executePythonCode(nvim, codes.concat(["snip = coc_ultisnips_dict[\"PreExpandContext\"]()", preExpand]));
						const [valid, pos] = await nvim.call("pyxeval", "snip.getResult()");
						if (valid) {
							let count = range.end.character - range.start.character;
							range = Range.create(pos[0], Math.max(0, pos[1] - count), pos[0], pos[1]);
						} else range = Range.create(pos[0], pos[1], pos[0], pos[1]);
					} else await executePythonCode(nvim, codes);
				}
			}
			if (!(ultisnip == null && !session.isActive)) {
				const { start } = range;
				nvim.call("coc#cursor#move_to", [start.line, start.character], true);
				if (!emptyRange(range)) await document.applyEdits([TextEdit.del(range)]);
				if (session.isActive) {
					await session.synchronize();
					let pos = await window_default.getCursorPosition();
					range = Range.create(pos, pos);
				} else range.end = Position.create(start.line, start.character);
			}
			await session.start(inserted, range, select, context);
			return session.isActive;
		}
		async selectCurrentPlaceholder(triggerAutocmd = true) {
			let { session } = this;
			if (session) return await session.selectCurrentPlaceholder(triggerAutocmd);
		}
		async nextPlaceholder() {
			let { session } = this;
			if (session) await session.nextPlaceholder();
			else this.nvim.call("coc#snippet#disable", [], true);
			return "";
		}
		async previousPlaceholder() {
			let { session } = this;
			if (session) await session.previousPlaceholder();
			else this.nvim.call("coc#snippet#disable", [], true);
			return "";
		}
		cancel() {
			let session = this.bufferSync.getItem(workspace_default.bufnr);
			if (session) return session.deactivate();
			this.nvim.call("coc#snippet#disable", [], true);
			this.statusItem.hide();
		}
		get session() {
			return this.bufferSync.getItem(workspace_default.bufnr);
		}
		/**
		* exported method
		*/
		getSession(bufnr) {
			let session = this.bufferSync.getItem(bufnr);
			return session && session.isActive ? session : void 0;
		}
		isActivated(bufnr) {
			let session = this.bufferSync.getItem(bufnr);
			return session && session.isActive;
		}
		jumpable() {
			let { session } = this;
			if (!session) return false;
			return session.placeholder != null && session.placeholder.index != 0;
		}
		/**
		* Exposed for snippet preview
		*/
		async resolveSnippet(snippetString, ultisnip) {
			let session = this.bufferSync.getItem(workspace_default.bufnr);
			if (!session) return;
			return await session.resolveSnippet(this.nvim, snippetString, ultisnip);
		}
		async normalizeInsertText(bufnr, snippetString, currentLine, insertTextMode, ultisnip) {
			let inserted = "";
			if (insertTextMode === InsertTextMode.asIs || !shouldFormat(snippetString)) inserted = snippetString;
			else {
				const currentIndent = currentLine.match(/^\s*/)[0];
				let formatOptions = await workspace_default.getFormatOptions(bufnr);
				let opts = ultisnip ?? {};
				formatOptions.trimTrailingWhitespace = opts.trimTrailingWhitespace !== false;
				if (opts.noExpand) formatOptions.noExpand = true;
				inserted = normalizeSnippetString(snippetString, currentIndent, formatOptions);
			}
			return inserted;
		}
		dispose() {
			this.cancel();
			disposeAll(this.disposables);
		}
	};
	manager_default = new SnippetManager();
}));
//#endregion
//#region src/snippets/string.ts
var SnippetString;
var init_string = __esmMin((() => {
	SnippetString = class SnippetString {
		static isSnippetString(thing) {
			if (thing instanceof SnippetString) return true;
			if (!thing) return false;
			return typeof thing.value === "string";
		}
		static _escape(value) {
			return value.replace(/\$|}|\\/g, "\\$&");
		}
		_tabstop = 1;
		value;
		constructor(value) {
			this.value = value || "";
		}
		appendText(str) {
			this.value += SnippetString._escape(str);
			return this;
		}
		appendTabstop(num = this._tabstop++) {
			this.value += "$";
			this.value += num;
			return this;
		}
		appendPlaceholder(value, num = this._tabstop++) {
			if (typeof value === "function") {
				const nested = new SnippetString();
				nested._tabstop = this._tabstop;
				value(nested);
				this._tabstop = nested._tabstop;
				value = nested.value;
			} else value = SnippetString._escape(value);
			this.value += "${";
			this.value += num;
			this.value += ":";
			this.value += value;
			this.value += "}";
			return this;
		}
		appendChoice(values, num = this._tabstop++) {
			const value = values.map((s) => s.replaceAll(/[|\\,]/g, "\\$&")).join(",");
			this.value += "${";
			this.value += num;
			this.value += "|";
			this.value += value;
			this.value += "|}";
			return this;
		}
		appendVariable(name, defaultValue) {
			if (typeof defaultValue === "function") {
				const nested = new SnippetString();
				nested._tabstop = this._tabstop;
				defaultValue(nested);
				this._tabstop = nested._tabstop;
				defaultValue = nested.value;
			} else if (typeof defaultValue === "string") defaultValue = defaultValue.replace(/\$|}/g, "\\$&");
			this.value += "${";
			this.value += name;
			if (defaultValue) {
				this.value += ":";
				this.value += defaultValue;
			}
			this.value += "}";
			return this;
		}
	};
}));
//#endregion
//#region src/completion/types.ts
var SourceType;
var init_types = __esmMin((() => {
	SourceType = /* @__PURE__ */ function(SourceType) {
		SourceType[SourceType["Native"] = 0] = "Native";
		SourceType[SourceType["Remote"] = 1] = "Remote";
		SourceType[SourceType["Service"] = 2] = "Service";
		return SourceType;
	}({});
}));
//#endregion
//#region src/core/workspaceFolder.ts
function toWorkspaceFolder(fsPath) {
	if (!fsPath || !path$5.isAbsolute(fsPath)) {
		logger$29.error(`Invalid folder: ${fsPath}, full path required.`);
		return;
	}
	return {
		name: path$5.basename(fsPath),
		uri: URI.file(fsPath).toString()
	};
}
var PatternType, logger$29, PatternTypes, checkPatternTimeout, extensionRegistry$1, WorkspaceFolderController;
var init_workspaceFolder = __esmMin((() => {
	init_esm();
	init_events();
	init_logger$2();
	init_util$7();
	init_array();
	init_errors();
	init_extensionRegistry();
	init_fs();
	init_node();
	init_object();
	init_protocol();
	init_registry$1();
	PatternType = /* @__PURE__ */ function(PatternType) {
		PatternType[PatternType["Buffer"] = 0] = "Buffer";
		PatternType[PatternType["LanguageServer"] = 1] = "LanguageServer";
		PatternType[PatternType["Global"] = 2] = "Global";
		return PatternType;
	}({});
	logger$29 = createLogger$1("core-workspaceFolder");
	PatternTypes = [
		0,
		1,
		2
	];
	checkPatternTimeout = getConditionValue(5e3, 50);
	extensionRegistry$1 = Registry.as(Extensions$3.ExtensionContribution);
	WorkspaceFolderController = class {
		configurations;
		config;
		_onDidChangeWorkspaceFolders = new import_main$1.Emitter();
		onDidChangeWorkspaceFolders = this._onDidChangeWorkspaceFolders.event;
		rootPatterns = /* @__PURE__ */ new Map();
		_workspaceFolders = [];
		_tokenSources = /* @__PURE__ */ new Set();
		constructor(configurations) {
			this.configurations = configurations;
			events_default.on("VimLeavePre", this.cancelAll, this);
			this.updateConfiguration();
			this.updateServerRootPatterns();
			this.configurations.onDidChange((e) => {
				if (e.affectsConfiguration("workspace") || e.affectsConfiguration("coc.preferences")) this.updateConfiguration();
				if (e.affectsConfiguration("languageserver")) this.updateServerRootPatterns();
			});
		}
		updateConfiguration() {
			const allConfig = this.configurations.initialConfiguration;
			let config = allConfig.get("workspace");
			let oldConfig = allConfig.get("coc.preferences.rootPatterns");
			this.config = {
				rootPatterns: isFalsyOrEmpty(oldConfig) ? toArray(config.rootPatterns) : oldConfig,
				ignoredFiletypes: toArray(config.ignoredFiletypes),
				bottomUpFiletypes: toArray(config.bottomUpFiletypes),
				ignoredFolders: toArray(config.ignoredFolders),
				workspaceFolderCheckCwd: !!config.workspaceFolderCheckCwd,
				workspaceFolderFallbackCwd: !!config.workspaceFolderFallbackCwd
			};
		}
		updateServerRootPatterns() {
			let lspConfig = this.configurations.getConfiguration("languageserver", null);
			this.rootPatterns.clear();
			for (let config of Object.values(toObject(lspConfig))) {
				let { filetypes, rootPatterns } = config;
				if (Array.isArray(filetypes) && !isFalsyOrEmpty(rootPatterns)) filetypes.filter((s) => typeof s === "string").forEach((filetype) => {
					this.addRootPattern(filetype, rootPatterns);
				});
			}
		}
		cancelAll() {
			for (let tokenSource of this._tokenSources) tokenSource.cancel();
		}
		setWorkspaceFolders(folders) {
			if (!folders || !Array.isArray(folders)) return;
			let arr = folders.filter((f) => f.length > 0).map((f) => toWorkspaceFolder(f));
			this._workspaceFolders = arr.filter((o) => o != null);
		}
		getWorkspaceFolder(uri) {
			if (uri.scheme !== "file") return void 0;
			if (this._workspaceFolders.length === 0) return void 0;
			let folders = Array.from(this._workspaceFolders).map((o) => URI.parse(o.uri).fsPath);
			folders.sort((a, b) => b.length - a.length);
			let fsPath = uri.fsPath;
			let folder = folders.find((f) => isParentFolder(f, fsPath, true));
			if (folder === void 0) return void 0;
			return toWorkspaceFolder(folder);
		}
		getRelativePath(pathOrUri, includeWorkspace) {
			let resource;
			let p = "";
			if (typeof pathOrUri === "string") {
				resource = URI.file(pathOrUri);
				p = pathOrUri;
			} else if (pathOrUri != null) {
				resource = pathOrUri;
				p = pathOrUri.fsPath;
			}
			if (!resource) return p;
			const folder = this.getWorkspaceFolder(resource);
			if (!folder) return p;
			if (typeof includeWorkspace === "undefined" && this._workspaceFolders) includeWorkspace = this._workspaceFolders.length > 1;
			let result = path$5.relative(URI.parse(folder.uri).fsPath, resource.fsPath);
			result = result == "" ? resource.fsPath : result;
			if (includeWorkspace && folder.name) result = `${folder.name}/${result}`;
			return result;
		}
		get workspaceFolders() {
			return this._workspaceFolders;
		}
		addRootPattern(filetype, rootPatterns) {
			let patterns = this.rootPatterns.get(filetype) ?? [];
			for (let p of rootPatterns) if (!patterns.includes(p)) patterns.push(p);
			this.rootPatterns.set(filetype, patterns);
		}
		resolveRoot(document, cwd, fireEvent, expand) {
			if (document.buftype !== "" || document.schema !== "file") return null;
			let u = URI.parse(document.uri);
			let dir = isDirectory(u.fsPath) ? path$5.normalize(u.fsPath) : path$5.dirname(u.fsPath);
			let { ignoredFiletypes, ignoredFolders, workspaceFolderCheckCwd, workspaceFolderFallbackCwd, bottomUpFiletypes } = this.config;
			if (ignoredFiletypes?.includes(document.filetype)) return null;
			ignoredFolders = Array.isArray(ignoredFolders) ? ignoredFolders.filter((s) => s && s.length > 0).map((s) => expand(s)) : [];
			let res = null;
			for (let patternType of PatternTypes) {
				let patterns = this.getRootPatterns(document, patternType);
				if (patterns && patterns.length) {
					let root = resolveRoot(dir, patterns, cwd, bottomUpFiletypes.includes("*") || bottomUpFiletypes.includes(document.filetype), workspaceFolderCheckCwd, ignoredFolders);
					if (root) {
						res = root;
						break;
					}
				}
			}
			if (!res && workspaceFolderFallbackCwd && !isFolderIgnored(cwd, ignoredFolders) && isParentFolder(cwd, dir, true)) res = cwd;
			if (res) this.addWorkspaceFolder(res, fireEvent);
			return res;
		}
		addWorkspaceFolder(folder, fireEvent) {
			let workspaceFolder = toWorkspaceFolder(folder);
			if (!workspaceFolder) return void 0;
			if (this._workspaceFolders.findIndex((o) => o.uri == workspaceFolder.uri) == -1) {
				this._workspaceFolders.push(workspaceFolder);
				if (fireEvent) this._onDidChangeWorkspaceFolders.fire({
					added: [workspaceFolder],
					removed: []
				});
			}
			return workspaceFolder;
		}
		renameWorkspaceFolder(oldPath, newPath) {
			let added = toWorkspaceFolder(newPath);
			if (!added) return;
			let idx = this._workspaceFolders.findIndex((f) => URI.parse(f.uri).fsPath == oldPath);
			if (idx == -1) return;
			let removed = this.workspaceFolders[idx];
			this._workspaceFolders.splice(idx, 1, added);
			this._onDidChangeWorkspaceFolders.fire({
				removed: [removed],
				added: [added]
			});
		}
		removeWorkspaceFolder(fsPath) {
			let removed = toWorkspaceFolder(fsPath);
			if (!removed) return;
			let idx = this._workspaceFolders.findIndex((f) => f.uri == removed.uri);
			if (idx == -1) return;
			this._workspaceFolders.splice(idx, 1);
			this._onDidChangeWorkspaceFolders.fire({
				removed: [removed],
				added: []
			});
		}
		onDocumentDetach(uris) {
			if (!this.configurations.initialConfiguration.get("workspace.removeEmptyWorkspaceFolder", false)) return;
			let filepaths = [];
			for (const uri of uris) if (uri.scheme === "file") filepaths.push(uri.fsPath);
			for (const item of this.workspaceFolders) {
				const folder = URI.parse(item.uri).fsPath;
				if (!filepaths.some((f) => isParentFolder(folder, f))) {
					this.removeWorkspaceFolder(folder);
					return;
				}
			}
		}
		getRootPatterns(document, patternType) {
			if (patternType == 0) return document.getVar("root_patterns", []);
			if (patternType == 1) return this.getServerRootPatterns(document.languageId);
			return this.config.rootPatterns;
		}
		reset() {
			this.rootPatterns.clear();
			this._workspaceFolders = [];
		}
		/**
		* Get rootPatterns of filetype by languageserver configuration and extension configuration.
		*/
		getServerRootPatterns(filetype) {
			let patterns = extensionRegistry$1.getRootPatternsByFiletype(filetype);
			patterns = patterns.concat(toArray(this.rootPatterns.get(filetype)));
			return distinct(patterns);
		}
		checkFolder(dir, patterns, token) {
			return checkFolder(dir, patterns, token);
		}
		async checkPatterns(folders, patterns) {
			if (isFalsyOrEmpty(folders)) return false;
			let dirs = folders.map((f) => URI.parse(f.uri).fsPath);
			let find = false;
			let tokenSource = new import_main$1.CancellationTokenSource();
			this._tokenSources.add(tokenSource);
			let token = tokenSource.token;
			let timer = setTimeout(() => {
				tokenSource.cancel();
			}, checkPatternTimeout);
			let results = await Promise.allSettled(dirs.map((dir) => {
				return this.checkFolder(dir, patterns, token).then((checked) => {
					this._tokenSources.delete(tokenSource);
					if (checked) {
						find = true;
						clearTimeout(timer);
						tokenSource.cancel();
					}
				});
			}));
			clearTimeout(timer);
			results.forEach((res) => {
				if (res.status === "rejected" && !isCancellationError(res.reason)) logger$29.error(`checkPatterns error:`, patterns, res.reason);
			});
			return find;
		}
	};
}));
//#endregion
//#region src/model/line.ts
var LineBuilder;
var init_line = __esmMin((() => {
	init_string$1();
	LineBuilder = class {
		addSpace;
		_label = "";
		_len = 0;
		_highlights = [];
		constructor(addSpace = false) {
			this.addSpace = addSpace;
		}
		append(text, hlGroup, nested) {
			if (text.length == 0) return;
			let space = this._len > 0 && this.addSpace ? " " : "";
			let start = this._len + space.length;
			this._label = this._label + space + text;
			this._len = this._len + byteLength(text) + space.length;
			if (hlGroup) this._highlights.push({
				hlGroup,
				span: [start, start + byteLength(text)]
			});
			if (nested) for (let item of nested) {
				let s = start + byteIndex(text, item.offset);
				let e = start + byteIndex(text, item.offset + item.length);
				this._highlights.push({
					hlGroup: item.hlGroup,
					span: [s, e]
				});
			}
		}
		appendBuilder(builder) {
			let space = this._len > 0 && this.addSpace ? " " : "";
			let curr = this._len + space.length;
			this._label = this._label + space + builder.label;
			this._len = this._len + byteLength(builder.label) + space.length;
			this._highlights.push(...builder.highlights.map((item) => {
				return {
					hlGroup: item.hlGroup,
					span: item.span.map((v) => {
						return curr + v;
					})
				};
			}));
		}
		get label() {
			return this._label;
		}
		get highlights() {
			return this._highlights;
		}
	};
}));
//#endregion
//#region src/model/semanticTokensBuilder.ts
function isStringArray(value) {
	return Array.isArray(value) && value.every((elem) => typeof elem === "string");
}
function isStrArrayOrUndefined(arg) {
	return typeof arg === "undefined" || isStringArray(arg);
}
var SemanticTokensBuilder;
var init_semanticTokensBuilder = __esmMin((() => {
	init_main$2();
	SemanticTokensBuilder = class SemanticTokensBuilder {
		_prevLine;
		_prevChar;
		_dataIsSortedAndDeltaEncoded;
		_data;
		_dataLen;
		_tokenTypeStrToInt;
		_tokenModifierStrToInt;
		_hasLegend;
		constructor(legend) {
			this._prevLine = 0;
			this._prevChar = 0;
			this._dataIsSortedAndDeltaEncoded = true;
			this._data = [];
			this._dataLen = 0;
			this._tokenTypeStrToInt = /* @__PURE__ */ new Map();
			this._tokenModifierStrToInt = /* @__PURE__ */ new Map();
			this._hasLegend = false;
			if (legend) {
				this._hasLegend = true;
				for (let i = 0, len = legend.tokenTypes.length; i < len; i++) this._tokenTypeStrToInt.set(legend.tokenTypes[i], i);
				for (let i = 0, len = legend.tokenModifiers.length; i < len; i++) this._tokenModifierStrToInt.set(legend.tokenModifiers[i], i);
			}
		}
		push(arg0, arg1, arg2, arg3, arg4) {
			if (typeof arg0 === "number" && typeof arg1 === "number" && typeof arg2 === "number" && typeof arg3 === "number" && (typeof arg4 === "number" || typeof arg4 === "undefined")) {
				if (typeof arg4 === "undefined") arg4 = 0;
				return this._pushEncoded(arg0, arg1, arg2, arg3, arg4);
			}
			if (Range.is(arg0) && typeof arg1 === "string" && isStrArrayOrUndefined(arg2)) return this._push(arg0, arg1, arg2);
			throw new Error("Illegal argument");
		}
		_push(range, tokenType, tokenModifiers) {
			if (!this._hasLegend) throw new Error("Legend must be provided in constructor");
			if (range.start.line !== range.end.line) throw new Error("`range` cannot span multiple lines");
			if (!this._tokenTypeStrToInt.has(tokenType)) throw new Error("`tokenType` is not in the provided legend");
			const line = range.start.line;
			const char = range.start.character;
			const length = range.end.character - range.start.character;
			const nTokenType = this._tokenTypeStrToInt.get(tokenType);
			let nTokenModifiers = 0;
			if (tokenModifiers) for (const tokenModifier of tokenModifiers) {
				if (!this._tokenModifierStrToInt.has(tokenModifier)) throw new Error("`tokenModifier` is not in the provided legend");
				const nTokenModifier = this._tokenModifierStrToInt.get(tokenModifier);
				nTokenModifiers |= 1 << nTokenModifier >>> 0;
			}
			this._pushEncoded(line, char, length, nTokenType, nTokenModifiers);
		}
		_pushEncoded(line, char, length, tokenType, tokenModifiers) {
			if (this._dataIsSortedAndDeltaEncoded && (line < this._prevLine || line === this._prevLine && char < this._prevChar)) {
				this._dataIsSortedAndDeltaEncoded = false;
				const tokenCount = this._data.length / 5 | 0;
				let prevLine = 0;
				let prevChar = 0;
				for (let i = 0; i < tokenCount; i++) {
					let line = this._data[5 * i];
					let char = this._data[5 * i + 1];
					if (line === 0) {
						line = prevLine;
						char += prevChar;
					} else line += prevLine;
					this._data[5 * i] = line;
					this._data[5 * i + 1] = char;
					prevLine = line;
					prevChar = char;
				}
			}
			let pushLine = line;
			let pushChar = char;
			if (this._dataIsSortedAndDeltaEncoded && this._dataLen > 0) {
				pushLine -= this._prevLine;
				if (pushLine === 0) pushChar -= this._prevChar;
			}
			this._data[this._dataLen++] = pushLine;
			this._data[this._dataLen++] = pushChar;
			this._data[this._dataLen++] = length;
			this._data[this._dataLen++] = tokenType;
			this._data[this._dataLen++] = tokenModifiers;
			this._prevLine = line;
			this._prevChar = char;
		}
		static _sortAndDeltaEncode(data) {
			let pos = [];
			const tokenCount = data.length / 5 | 0;
			for (let i = 0; i < tokenCount; i++) pos[i] = i;
			pos.sort((a, b) => {
				const aLine = data[5 * a];
				const bLine = data[5 * b];
				if (aLine === bLine) return data[5 * a + 1] - data[5 * b + 1];
				return aLine - bLine;
			});
			const result = new Array(data.length);
			let prevLine = 0;
			let prevChar = 0;
			for (let i = 0; i < tokenCount; i++) {
				const srcOffset = 5 * pos[i];
				const line = data[srcOffset + 0];
				const char = data[srcOffset + 1];
				const length = data[srcOffset + 2];
				const tokenType = data[srcOffset + 3];
				const tokenModifiers = data[srcOffset + 4];
				const pushLine = line - prevLine;
				const pushChar = pushLine === 0 ? char - prevChar : char;
				const dstOffset = 5 * i;
				result[dstOffset + 0] = pushLine;
				result[dstOffset + 1] = pushChar;
				result[dstOffset + 2] = length;
				result[dstOffset + 3] = tokenType;
				result[dstOffset + 4] = tokenModifiers;
				prevLine = line;
				prevChar = char;
			}
			return result;
		}
		/**
		* Finish and create a `SemanticTokens` instance.
		*/
		build(resultId) {
			if (!this._dataIsSortedAndDeltaEncoded) return {
				data: SemanticTokensBuilder._sortAndDeltaEncode(this._data),
				resultId
			};
			return {
				data: this._data,
				resultId
			};
		}
	};
}));
//#endregion
//#region src/tree/TreeItem.ts
function getItemLabel(item) {
	return TreeItemLabel.is(item.label) ? item.label.label : item.label;
}
var TreeItemLabel, TreeItemCollapsibleState, TreeItem;
var init_TreeItem = __esmMin((() => {
	init_esm();
	init_node();
	(function(_TreeItemLabel) {
		function is(obj) {
			return typeof obj.label == "string";
		}
		_TreeItemLabel.is = is;
	})(TreeItemLabel || (TreeItemLabel = {}));
	TreeItemCollapsibleState = /* @__PURE__ */ function(TreeItemCollapsibleState) {
		/**
		* Determines an item can be neither collapsed nor expanded. Implies it has no children.
		*/
		TreeItemCollapsibleState[TreeItemCollapsibleState["None"] = 0] = "None";
		/**
		* Determines an item is collapsed
		*/
		TreeItemCollapsibleState[TreeItemCollapsibleState["Collapsed"] = 1] = "Collapsed";
		/**
		* Determines an item is expanded
		*/
		TreeItemCollapsibleState[TreeItemCollapsibleState["Expanded"] = 2] = "Expanded";
		return TreeItemCollapsibleState;
	}({});
	TreeItem = class {
		collapsibleState;
		label;
		id;
		description;
		icon;
		resourceUri;
		command;
		tooltip;
		deprecated;
		constructor(label, collapsibleState = 0) {
			this.collapsibleState = collapsibleState;
			if (URI.isUri(label)) {
				this.resourceUri = label;
				this.label = path$5.basename(label.path);
				this.id = label.toString();
			} else this.label = label;
		}
	};
}));
//#endregion
//#region src/tree/index.ts
var init_tree = __esmMin((() => {
	init_TreeItem();
}));
//#endregion
//#region src/index.ts
var require_src = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	init_main$2();
	init_esm();
	init_commands$2();
	init_sources();
	init_manager$4();
	init_events();
	init_extension();
	init_languages();
	init_basic();
	init_manager$2();
	init_download();
	init_fetch();
	init_floatFactory();
	init_highlighter();
	init_mru();
	init_relativePattern();
	init_services$1();
	init_manager$1();
	init_string();
	init_ansiparse();
	init_errors();
	init_mutex();
	init_protocol();
	init_window();
	init_workspace$1();
	init_language_client();
	init_types();
	init_types$1();
	init_workspaceFolder();
	init_line();
	init_semanticTokensBuilder();
	init_tree();
	init_util$7();
	init_fs();
	init_processes();
	module.exports = {
		get nvim() {
			return workspace_default.nvim;
		},
		Uri: URI,
		LineBuilder,
		NullLogger,
		SettingMonitor,
		LanguageClient,
		CancellationTokenSource: import_main$1.CancellationTokenSource,
		ProgressType: import_main$1.ProgressType,
		RequestType: import_main$1.RequestType,
		RequestType0: import_main$1.RequestType0,
		NotificationType: import_main$1.NotificationType,
		NotificationType0: import_main$1.NotificationType0,
		ProtocolRequestType: import_main$1.ProtocolRequestType,
		ProtocolRequestType0: import_main$1.ProtocolRequestType0,
		ProtocolNotificationType: import_main$1.ProtocolNotificationType,
		ProtocolNotificationType0: import_main$1.ProtocolNotificationType0,
		Highlighter,
		Mru,
		Emitter: import_main$1.Emitter,
		SnippetString,
		BasicList,
		Mutex,
		TreeItem,
		SemanticTokensBuilder,
		FloatFactory: FloatFactoryImpl,
		RelativePattern: RelativePattern$1,
		CancellationError,
		WorkspaceChange,
		ResponseError: import_main$1.ResponseError,
		StringValue,
		SnippetTextEdit,
		Trace: import_main$1.Trace,
		DocumentUri,
		WorkspaceFolder,
		SelectedCompletionInfo,
		InlineCompletionContext: import_main$1.InlineCompletionContext,
		InlineCompletionItem: import_main$1.InlineCompletionItem,
		InlineCompletionList,
		InlineCompletionTriggerKind,
		InlineValueText,
		InlineValueVariableLookup,
		InlineValueEvaluatableExpression,
		InlineValueContext,
		InlayHintKind,
		InlayHintLabelPart,
		InlayHint,
		DiagnosticRelatedInformation,
		SemanticTokens: SemanticTokens$1,
		SemanticTokenTypes,
		SemanticTokenModifiers,
		AnnotatedTextEdit,
		ChangeAnnotation,
		SymbolTag,
		Command,
		Color,
		CodeDescription,
		ColorInformation,
		ColorPresentation,
		TextDocumentEdit,
		TextDocumentIdentifier,
		VersionedTextDocumentIdentifier,
		TextDocumentItem,
		DocumentHighlight,
		SelectionRange,
		DocumentLink,
		CodeLens,
		FormattingOptions,
		CodeAction,
		CodeActionContext,
		DocumentSymbol,
		WorkspaceSymbol,
		CreateFile,
		RenameFile,
		WorkspaceEdit,
		InsertReplaceEdit,
		InsertTextMode,
		CompletionItem,
		CompletionList,
		Hover,
		ParameterInformation,
		SignatureInformation,
		SymbolInformation,
		MarkupContent,
		ErrorCodes: import_main$1.ErrorCodes,
		CompletionItemTag,
		integer,
		uinteger,
		FoldingRangeKind: FoldingRangeKind$2,
		FoldingRange,
		ChangeAnnotationIdentifier,
		DeleteFile,
		OptionalVersionedTextDocumentIdentifier,
		CompletionItemLabelDetails,
		MarkedString,
		ProviderName,
		DocumentDiagnosticReportKind: import_main$1.DocumentDiagnosticReportKind,
		UniquenessLevel: import_main$1.UniquenessLevel,
		MonikerKind: import_main$1.MonikerKind,
		PatternType,
		SourceType,
		ConfigurationTarget: ConfigurationUpdateTarget,
		ServiceStat,
		FileType,
		State,
		ClientState,
		CloseAction,
		ErrorAction,
		TransportKind,
		MessageTransports,
		RevealOutputChannelOn,
		MarkupKind,
		DiagnosticTag,
		DocumentHighlightKind,
		SymbolKind,
		SignatureHelpTriggerKind: import_main$1.SignatureHelpTriggerKind,
		FileChangeType: import_main$1.FileChangeType,
		CodeActionKind,
		Diagnostic,
		DiagnosticSeverity,
		CompletionItemKind,
		InsertTextFormat,
		Location,
		LocationLink,
		CancellationToken: import_main$1.CancellationToken,
		Position,
		Range,
		TextEdit,
		Disposable: import_main$1.Disposable,
		Event: import_main$1.Event,
		workspace: workspace_default,
		window: window_default,
		CodeActionTriggerKind,
		CompletionTriggerKind: import_main$1.CompletionTriggerKind,
		snippetManager: manager_default,
		events: events_default,
		services: services_default,
		commands: commands_default,
		sources: sources_default,
		languages: languages_default,
		diagnosticManager: manager_default$2,
		extensions: extension_default,
		listManager: manager_default$1,
		TreeItemCollapsibleState,
		DiagnosticPullMode,
		ApplyKind,
		terminate,
		fetch,
		download,
		ansiparse,
		disposeAll,
		concurrent,
		watchFile,
		wait,
		runCommand,
		isRunning,
		executable
	};
}));
//#endregion
//#region src/util/factory.ts
function removedGlobalStub(name) {
	return () => {
		throw new Error(`process.${name}() is not allowed in extension sandbox`);
	};
}
function makeRequireFunction(cocExports) {
	const req = (p) => {
		if (p === "coc.nvim") return toObject(cocExports);
		return this.require(p);
	};
	req.resolve = (request, options) => Module._resolveFilename(request, this, false, options);
	req.main = mainModule;
	req.extensions = Module._extensions;
	req.cache = Module._cache;
	return req;
}
function compileInSandbox(sandbox, cocExports) {
	return function(content, filename) {
		const require = makeRequireFunction.call(this, cocExports);
		const dirname = path$5.dirname(filename);
		const newContent = content.startsWith("#!") ? content.replace(/^#!.*/, "") : content;
		const wrapper = Module.wrap(newContent);
		const compiledWrapper = vm.runInContext(wrapper, sandbox, { filename });
		const args = [
			this.exports,
			require,
			this,
			filename,
			dirname
		];
		return compiledWrapper.apply(this.exports, args);
	};
}
function getProtoWithCompile(mod) {
	if (hasOwnProperty$1(mod.prototype, "_compile")) return mod.prototype;
	if (hasOwnProperty$1(mod.prototype.__proto__, "_compile")) return mod.prototype.__proto__;
	throw new Error("_compile not found");
}
function copyGlobalProperties(sandbox, globalObj) {
	for (const key of Object.keys(globalObj)) if (sandbox[key] === void 0) sandbox[key] = globalObj[key];
	return sandbox;
}
function createConsole(con, logger) {
	let result = {};
	let methods = [
		"debug",
		"log",
		"info",
		"error",
		"warn"
	];
	for (let key of Object.keys(con)) if (methods.includes(key)) result[key] = (...args) => {
		logger[key].apply(logger, args);
	};
	else {
		let fn = con[key];
		if (key !== "Console" && typeof fn === "function") result[key] = () => {
			logger.warn(`function console.${key} not supported`);
		};
		else result[key] = fn;
	}
	return result;
}
function createSandbox(filename, logger, name, noExport = false) {
	const module = new Module(filename);
	module.paths = Module._nodeModulePaths(filename);
	const sandbox = vm.createContext({
		module,
		Buffer,
		URL: globalThis.URL,
		WebAssembly: globalThis.WebAssembly,
		console: createConsole(console, logger)
	}, { name });
	copyGlobalProperties(sandbox, global);
	let cocExports = noExport ? void 0 : require_src();
	sandbox.require = function sandboxRequire(p) {
		const oldCompile = ModuleProto._compile;
		ModuleProto._compile = compileInSandbox(sandbox, cocExports);
		const moduleExports = sandbox.module.require(p);
		ModuleProto._compile = oldCompile;
		return moduleExports;
	};
	sandbox.process = new process.constructor();
	for (let key of Reflect.ownKeys(process)) {
		if (typeof key === "string" && key.startsWith("_")) continue;
		sandbox.process[key] = process[key];
	}
	REMOVED_GLOBALS.forEach((name) => {
		sandbox.process[name] = removedGlobalStub(name);
	});
	sandbox.process["chdir"] = () => {};
	sandbox.process.umask = (mask) => {
		if (typeof mask !== "undefined") throw new Error("Cannot use process.umask() to change mask (read-only)");
		return process.umask();
	};
	return sandbox;
}
function getLogger(useConsole, id) {
	return useConsole ? consoleLogger : createLogger$1(`extension:${id}`);
}
function createExtension(id, filename, isEmpty) {
	if (isEmpty || !fs$6.existsSync(filename)) return {
		activate: () => {},
		deactivate: null
	};
	const sandbox = createSandbox(filename, getLogger(!global.__isMain && true, id), id);
	delete Module._cache[require.resolve(filename)];
	const defaultImport = sandbox.require(filename);
	const activate = defaultImport && defaultImport.activate || defaultImport;
	if (typeof activate !== "function") return { activate: () => {} };
	return typeof defaultImport === "function" ? { activate } : Object.assign({}, defaultImport);
}
var consoleLogger, Module, mainModule, REMOVED_GLOBALS, ModuleProto;
var init_factory = __esmMin((() => {
	init_logger$2();
	init_node();
	init_object();
	consoleLogger = {
		category: "",
		log: console.log.bind(console),
		debug: console.debug.bind(console),
		error: console.error.bind(console),
		warn: console.warn.bind(console),
		info: console.info.bind(console),
		trace: console.log.bind(console),
		fatal: console.error.bind(console),
		mark: console.log.bind(console)
	};
	Module = require("module");
	mainModule = require.main;
	REMOVED_GLOBALS = [
		"reallyExit",
		"abort",
		"umask",
		"setuid",
		"setgid",
		"setgroups",
		"_fatalException",
		"exit",
		"kill"
	];
	ModuleProto = getProtoWithCompile(Module);
}));
//#endregion
//#region src/util/timing.ts
/**
* Trace the duration and show error on timeout
*/
function createTiming(name, timeout) {
	let start;
	let timer;
	let _label;
	return {
		start(label) {
			_label = label;
			start = Date.now();
			clearTimeout(timer);
			if (timeout) {
				timer = setTimeout(() => {
					logger$28.error(`${name} timeout after ${timeout}ms`);
				}, timeout);
				timer.unref();
			}
		},
		stop() {
			clearTimeout(timer);
			logger$28.trace(`${name}${_label ? ` ${_label}` : ""} cost:`, Date.now() - start);
		}
	};
}
var logger$28;
var init_timing = __esmMin((() => {
	init_logger$2();
	logger$28 = createLogger$1("timing");
}));
//#endregion
//#region src/extension/stat.ts
function toInterval(opt) {
	return opt === "daily" ? ONE_DAY : ONE_DAY * 7;
}
function validExtensionFolder(folder, version) {
	let errors = [];
	return loadExtensionJson(folder, version, errors) != null && errors.length == 0;
}
function getEntryFile(main) {
	if (!main) return "index.js";
	if (!main.endsWith(".js")) return main + ".js";
	return main;
}
async function loadGlobalJsonAsync(folder, version) {
	let content = await readFile(path$5.join(folder, "package.json"), "utf8");
	let packageJSON = JSON.parse(content);
	let { engines } = packageJSON;
	let main = getEntryFile(packageJSON.main);
	if (!engines || typeof engines.coc !== "string" && typeof engines.vscode !== "string") throw new Error("Invalid engines field");
	if (Object.keys(engines).includes("coc") && !semver.satisfies(version, engines["coc"].replace(/^\^/, ">="))) throw new Error(`coc.nvim version not match, required ${engines["coc"]}`);
	if (!engines.vscode && !fs$6.existsSync(path$5.join(folder, main))) throw new Error(`main file ${main} not found, you may need to build the project.`);
	return packageJSON;
}
function loadExtensionJson(folder, version, errors) {
	let jsonFile = path$5.join(folder, "package.json");
	if (!fs$6.existsSync(jsonFile)) {
		errors.push(`package.json not found in ${folder}`);
		return;
	}
	let packageJSON = loadJson(jsonFile);
	let { name, engines } = packageJSON;
	let main = getEntryFile(packageJSON.main);
	if (!name) errors.push(`can't find name in package.json`);
	if (!engines || !objectLiteral(engines)) errors.push(`invalid engines in ${jsonFile}`);
	if (engines && !engines.vscode && !fs$6.existsSync(path$5.join(folder, main))) errors.push(`main file ${main} not found, you may need to build the project.`);
	if (engines) {
		let keys = Object.keys(engines);
		if (!keys.includes("coc") && !keys.includes("vscode")) errors.push(`Engines in package.json doesn't have coc or vscode`);
		if (keys.includes("coc")) {
			let required = engines["coc"].replace(/^\^/, ">=");
			if (!semver.satisfies(version, required)) errors.push(`Please update coc.nvim, ${packageJSON.name} requires coc.nvim ${engines["coc"]}`);
		}
	}
	return packageJSON;
}
/**
* Name of extension
*/
function getExtensionName(def) {
	if (/^https?:/.test(def)) return def;
	if (!def.includes("@")) return def;
	return def.replace(/@[\d.]+$/, "");
}
function checkExtensionRoot(root) {
	try {
		if (!fs$6.existsSync(root)) fs$6.mkdirSync(root, { recursive: true });
		if (!fs$6.statSync(root).isDirectory()) {
			logger$27.info(`Trying to delete ${root}`);
			fs$6.unlinkSync(root);
			fs$6.mkdirSync(root, { recursive: true });
		}
		let jsonFile = path$5.join(root, "package.json");
		if (!fs$6.existsSync(jsonFile)) fs$6.writeFileSync(jsonFile, "{\"dependencies\":{}}", "utf8");
	} catch (e) {
		console.error(`Unexpected error when check data home ${root}: ${e}`);
		return false;
	}
	return true;
}
async function getJsFiles(folder) {
	if (!fs$6.existsSync(folder)) return [];
	return (await fs$6.promises.readdir(folder)).filter((f) => f.endsWith(".js"));
}
function loadJson(filepath) {
	try {
		let text = fs$6.readFileSync(filepath, "utf8");
		return toObject(JSON.parse(text));
	} catch (e) {
		logger$27.error(`Error on parse json file ${filepath}`, e);
		return {};
	}
}
var logger$27, ONE_DAY, DISABLE_PROMPT_KEY, ExtensionStat;
var init_stat = __esmMin((() => {
	init_logger$2();
	init_array();
	init_fs();
	init_is();
	init_node();
	init_object();
	logger$27 = createLogger$1("extension-stat");
	ONE_DAY = 1440 * 60 * 1e3;
	DISABLE_PROMPT_KEY = "disablePrompt";
	ExtensionStat = class {
		folder;
		disabled = /* @__PURE__ */ new Set();
		locked = /* @__PURE__ */ new Set();
		extensions = /* @__PURE__ */ new Set();
		localExtensions = /* @__PURE__ */ new Map();
		constructor(folder) {
			this.folder = folder;
			try {
				this.migrate();
			} catch (e) {
				logger$27.error(`Error on update package.json at ${folder}`, e);
			}
		}
		migrate() {
			let curr = loadJson(this.jsonFile);
			let db = path$5.join(this.folder, "db.json");
			let changed = false;
			if (fs$6.existsSync(db)) {
				let obj = loadJson(db);
				let def = obj.extension ?? {};
				for (let [key, o] of Object.entries(def)) {
					if (o.disabled) this.disabled.add(key);
					if (o.locked) this.locked.add(key);
				}
				curr.disabled = Array.from(this.disabled);
				curr.locked = Array.from(this.locked);
				curr.lastUpdate = obj.lastUpdate;
				fs$6.unlinkSync(db);
				changed = true;
			} else {
				this.disabled = new Set(curr.disabled ?? []);
				this.locked = new Set(curr.locked ?? []);
			}
			if (changed) writeJson(this.jsonFile, curr);
			let ids = Object.keys(curr.dependencies ?? {});
			this.extensions = new Set(ids);
		}
		addNoPromptFolder(uri) {
			let curr = loadJson(this.jsonFile);
			curr[DISABLE_PROMPT_KEY] = curr[DISABLE_PROMPT_KEY] ?? [];
			curr[DISABLE_PROMPT_KEY].push(uri);
			writeJson(this.jsonFile, curr);
		}
		shouldPrompt(uri) {
			return !(loadJson(this.jsonFile)[DISABLE_PROMPT_KEY] ?? []).includes(uri);
		}
		reset() {
			writeJson(this.jsonFile, {});
		}
		*activated() {
			let { disabled } = this;
			for (let key of Object.keys(this.dependencies)) if (!disabled.has(key)) yield key;
		}
		addLocalExtension(name, folder) {
			this.localExtensions.set(name, folder);
		}
		getFolder(name) {
			if (this.extensions.has(name)) return path$5.join(this.folder, "node_modules", name);
			return this.localExtensions.get(name);
		}
		getExtensionsStat() {
			let res = {};
			for (let id of this.extensions) if (this.disabled.has(id)) res[id] = 1;
			else if (this.locked.has(id)) res[id] = 2;
			else res[id] = 0;
			return res;
		}
		hasExtension(id) {
			return this.extensions.has(id);
		}
		addExtension(id, val) {
			let curr = loadJson(this.jsonFile);
			curr.dependencies = curr.dependencies ?? {};
			curr.dependencies[id] = val;
			this.extensions.add(id);
			writeJson(this.jsonFile, curr);
		}
		removeExtension(id) {
			let curr = loadJson(this.jsonFile);
			if (curr.disabled) curr.disabled = curr.disabled.filter((key) => key !== id);
			if (curr.locked) curr.locked = curr.locked.filter((key) => key !== id);
			curr.dependencies = curr.dependencies ?? {};
			delete curr.dependencies[id];
			this.extensions.delete(id);
			writeJson(this.jsonFile, curr);
		}
		isDisabled(id) {
			return this.disabled.has(id);
		}
		get lockedExtensions() {
			return Array.from(this.locked);
		}
		get disabledExtensions() {
			return Array.from(this.disabled);
		}
		get dependencies() {
			return loadJson(this.jsonFile).dependencies ?? {};
		}
		setDisable(id, disable) {
			if (disable) this.disabled.add(id);
			else this.disabled.delete(id);
			this.update("disabled", Array.from(this.disabled));
		}
		setLocked(id, locked) {
			if (locked) this.locked.add(id);
			else this.locked.delete(id);
			this.update("locked", Array.from(this.disabled));
		}
		setLastUpdate() {
			this.update("lastUpdate", Date.now());
		}
		shouldUpdate(opt) {
			if (opt === "never") return false;
			let interval = toInterval(opt);
			let curr = loadJson(this.jsonFile);
			return curr.lastUpdate == null || Date.now() - curr.lastUpdate > interval;
		}
		get globalIds() {
			let curr = loadJson(this.jsonFile);
			return Object.keys(curr.dependencies ?? {});
		}
		/**
		* Filter out global extensions that needs install
		*/
		filterGlobalExtensions(names) {
			let disabledExtensions = this.disabledExtensions;
			let dependencies = this.dependencies;
			let map = /* @__PURE__ */ new Map();
			toArray(names).forEach((def) => {
				if (!def || typeof def !== "string") return;
				let name = getExtensionName(def);
				map.set(name, def);
			});
			let currentUrls = [];
			let exists = [];
			for (let [key, val] of Object.entries(dependencies)) if (fs$6.existsSync(path$5.join(this.folder, "node_modules", key, "package.json"))) {
				exists.push(key);
				if (typeof val === "string" && /^https?:/.test(val)) currentUrls.push(val);
			}
			for (let name of map.keys()) {
				if (disabledExtensions.includes(name) || this.extensions.has(name)) {
					map.delete(name);
					continue;
				}
				if (/^https?:/.test(name) && currentUrls.some((url) => url.startsWith(name)) || exists.includes(name)) map.delete(name);
			}
			return Array.from(map.values());
		}
		update(key, value) {
			let curr = loadJson(this.jsonFile);
			curr[key] = value;
			writeJson(this.jsonFile, curr);
		}
		get jsonFile() {
			return path$5.join(this.folder, "package.json");
		}
	};
}));
//#endregion
//#region src/extension/manager.ts
function getEvents(activationEvents) {
	let res = [];
	for (let ev of toArray(activationEvents)) {
		let [name] = ev.split(":", 2);
		if (name && !res.includes(name)) res.push(name);
	}
	return res;
}
function getOnCommandList(activationEvents) {
	let res = [];
	for (let ev of toArray(activationEvents)) {
		let [name, command] = ev.split(":", 2);
		if (name === "onCommand" && command) res.push(command);
	}
	return res;
}
function checkLanguageId(document, activationEvents) {
	for (let eventName of activationEvents) {
		let parts = eventName.split(":");
		if (parts[0] == "onLanguage" && (document.languageId == parts[1] || document.filetype == parts[1])) return true;
	}
	return false;
}
function checkCommand(command, activationEvents) {
	for (let eventName of activationEvents) {
		let parts = eventName.split(":");
		if (parts[0] == "onCommand" && command == parts[1]) return true;
	}
	return false;
}
function checkFileSystem(uri, activationEvents) {
	let scheme = URI.parse(uri).scheme;
	for (let eventName of activationEvents) {
		let parts = eventName.split(":");
		if (parts[0] == "onFileSystem" && scheme == parts[1]) return true;
	}
	return false;
}
function getActivationEvents(json) {
	return toArray(json.activationEvents).filter((key) => typeof key === "string" && key.length > 0);
}
/**
* Convert globl patterns
*/
function toWorkspaceContainsPatterns(activationEvents) {
	let patterns = [];
	for (let eventName of activationEvents) {
		let parts = eventName.split(":");
		if (parts[0] == "workspaceContains" && parts[1]) patterns.push(parts[1]);
	}
	return patterns;
}
var logger$26, extensionRegistry, memos, configurationRegistry, ExtensionManager;
var init_manager = __esmMin((() => {
	init_esm();
	init_registry();
	init_events();
	init_logger$2();
	init_memos();
	init_util$7();
	init_array();
	init_constants();
	init_errors();
	init_extensionRegistry();
	init_factory();
	init_fs();
	init_is();
	init_lodash();
	init_node();
	init_object();
	init_protocol();
	init_registry$1();
	init_timing();
	init_window();
	init_workspace$1();
	init_stat();
	logger$26 = createLogger$1("extensions-manager");
	extensionRegistry = Registry.as(Extensions$3.ExtensionContribution);
	memos = new Memos(path$5.resolve(dataHome, "memos.json"));
	memos.merge(path$5.resolve(dataHome, "../memos.json"));
	configurationRegistry = Registry.as(Extensions$1.Configuration);
	ExtensionManager = class {
		states;
		folder;
		activated = false;
		disposables = [];
		configurationNodes = [];
		extensions = /* @__PURE__ */ new Map();
		_onDidLoadExtension = new import_main$1.Emitter();
		_onDidActiveExtension = new import_main$1.Emitter();
		_onDidUnloadExtension = new import_main$1.Emitter();
		singleExtensionsRoot = path$5.join(configHome, "coc-extensions");
		modulesFolder;
		onDidLoadExtension = this._onDidLoadExtension.event;
		onDidActiveExtension = this._onDidActiveExtension.event;
		onDidUnloadExtension = this._onDidUnloadExtension.event;
		constructor(states, folder) {
			this.states = states;
			this.folder = folder;
			this.modulesFolder = path$5.join(this.folder, "node_modules");
		}
		activateExtensions() {
			this.activated = true;
			if (process.env.COC_NO_PLUGINS == "1") return;
			configurationRegistry.registerConfigurations(this.configurationNodes);
			this.attachEvents();
			let promises = [];
			for (let key of this.extensions.keys()) {
				const { extension } = this.extensions.get(key);
				const activationEvents = extension.packageJSON.activationEvents;
				if (!activationEvents || activationEvents.includes("*")) promises.push(void this.activate(key));
				else this.autoActivate(key, extension);
			}
			return Promise.allSettled(promises);
		}
		async loadFileExtensions() {
			let folder = this.singleExtensionsRoot;
			let files = await getJsFiles(folder);
			await Promise.allSettled(files.map((file) => {
				return this.loadExtensionFile(path$5.join(folder, file));
			}));
		}
		attachEvents() {
			workspace_default.onDidRuntimePathChange(async (paths) => {
				let folders = paths.filter((p) => p && validExtensionFolder(p, workspace_default.version));
				let outputChannel = window_default.createOutputChannel("extensions");
				await Promise.allSettled(folders.map((folder) => {
					outputChannel.appendLine(`Loading extension from runtimepath: ${folder}`);
					return this.loadExtension(folder);
				}));
			}, null, this.disposables);
			workspace_default.onDidOpenTextDocument((document) => {
				let doc = workspace_default.getDocument(document.bufnr);
				this.tryActivateExtensions("onLanguage", (events) => {
					return checkLanguageId(doc, events);
				});
				this.tryActivateExtensions("onFileSystem", (events) => {
					return checkFileSystem(doc.uri, events);
				});
			}, null, this.disposables);
			events_default.on("Command", async (command) => {
				let fired = false;
				this.tryActivateExtensions("onCommand", (events) => {
					let result = checkCommand(command, events);
					if (result) fired = true;
					return result;
				});
				if (fired) await wait(50);
			}, null, this.disposables);
			workspace_default.onDidChangeWorkspaceFolders((e) => {
				if (e.added.length > 0) this.tryActivateExtensions("workspaceContains", (events) => {
					let patterns = toWorkspaceContainsPatterns(events);
					return workspace_default.checkPatterns(patterns, e.added);
				});
			}, null, this.disposables);
		}
		/**
		* Unload & remove all global extensions, return removed extensions.
		*/
		async cleanExtensions() {
			let { globalIds } = this.states;
			await remove(this.modulesFolder);
			return globalIds.filter((id) => !this.states.isDisabled(id));
		}
		tryActivateExtensions(event, check) {
			for (let item of this.extensions.values()) {
				if (item.extension.isActive) continue;
				if (!item.events.includes(event)) continue;
				let { extension } = item;
				let activationEvents = getActivationEvents(extension.packageJSON);
				Promise.resolve(check(activationEvents)).then((checked) => {
					if (checked) Promise.resolve(this.activate(extension.id));
				});
			}
		}
		async checkAutoActivate(packageJSON) {
			let activationEvents = getActivationEvents(packageJSON);
			if (activationEvents.length === 0 || activationEvents.includes("*")) return true;
			let patterns = [];
			for (let eventName of activationEvents) {
				let parts = eventName.split(":");
				let ev = parts[0];
				if (ev === "onLanguage") {
					if (workspace_default.languageIds.has(parts[1]) || workspace_default.filetypes.has(parts[1])) return true;
				} else if (ev === "workspaceContains" && parts[1]) patterns.push(parts[1]);
				else if (ev === "onFileSystem") {
					for (let doc of workspace_default.documents) if (URI.parse(doc.uri).scheme == parts[1]) return true;
				}
			}
			if (patterns.length > 0) {
				if (await workspace_default.checkPatterns(patterns)) return true;
			}
			return false;
		}
		has(id) {
			return this.extensions.has(id);
		}
		getExtension(id) {
			return this.extensions.get(id);
		}
		get loadedExtensions() {
			return Array.from(this.extensions.keys());
		}
		get all() {
			return Array.from(this.extensions.values()).map((o) => o.extension);
		}
		/**
		* Activate extension, throw error if disabled or doesn't exist.
		* Returns true if extension successfully activated.
		*/
		async activate(id, activating = /* @__PURE__ */ new Set()) {
			let item = this.extensions.get(id);
			if (!item) throw new Error(`Extension ${id} not registered!`);
			let { extension } = item;
			if (extension.isActive) return true;
			if (activating.has(id)) {
				logger$26.warn(`Circular dependency detected: ${id}`);
				return false;
			}
			activating = new Set([...activating, id]);
			const { packageJSON } = extension;
			if (packageJSON.extensionDependencies?.length > 0) {
				const results = await Promise.allSettled(packageJSON.extensionDependencies.map((dep) => this.activate(dep, activating)));
				for (const result of results) if (result.status === "rejected" || result.status === "fulfilled" && !result.value) {
					logger$26.error(`Could not activate dependency for ${id}, activation failed.`);
					return false;
				}
			}
			await extension.activate();
			return extension.isActive === true;
		}
		async deactivate(id) {
			let item = this.extensions.get(id);
			if (!item || !item.extension.isActive) return;
			await Promise.resolve(item.deactivate());
		}
		/**
		* Load extension from folder, folder should contains coc extension.
		*/
		async loadExtension(folder, noActive = false) {
			if (Array.isArray(folder)) {
				(await Promise.allSettled(folder.map((f) => {
					return this.loadExtension(f, noActive);
				}))).forEach((res) => {
					if (res.status === "rejected") throw new Error(`Error on loadExtension ${res.reason}`);
				});
				return true;
			}
			let errors = [];
			let obj = loadExtensionJson(folder, workspace_default.version, errors);
			if (errors.length > 0) throw new Error(errors[0]);
			let { name } = obj;
			if (this.states.isDisabled(name)) return false;
			await this.unloadExtension(name);
			let isLocal = !this.states.hasExtension(name);
			if (isLocal) this.states.addLocalExtension(name, folder);
			await this.registerExtension(folder, Object.freeze(obj), isLocal ? 1 : 0, noActive);
			return true;
		}
		/**
		* Deactivate & unregist extension
		*/
		async unloadExtension(id) {
			if (this.extensions.get(id)) {
				await this.deactivate(id);
				this.extensions.delete(id);
				this._onDidUnloadExtension.fire(id);
			}
		}
		async reloadExtension(id) {
			let item = this.extensions.get(id);
			if (!item || item.type == 3) throw new Error(`Extension ${id} not registered`);
			if (item.type == 2) await this.loadExtensionFile(item.filepath);
			else await this.loadExtension(item.directory);
		}
		async call(id, method, args) {
			let item = this.extensions.get(id);
			if (!item) throw new Error(`extension ${id} not registered`);
			let { extension } = item;
			if (!extension.isActive) await this.activate(id);
			let { exports } = extension;
			if (!exports || typeof exports[method] !== "function") throw new Error(`method ${method} not found on extension ${id}`);
			return await Promise.resolve(exports[method].apply(null, args));
		}
		registContribution(id, packageJSON, directory, filepath) {
			let { contributes, activationEvents } = packageJSON;
			let { configuration, rootPatterns, commands } = contributes ?? {};
			let definitions;
			let props = getProperties(configuration ?? {});
			if (!isEmpty(props)) {
				let properties = convertProperties(props, 2);
				if (objectLiteral(configuration.definitions)) {
					let prefix = id.replace(/[^\w]/g, "");
					const addPrefix = (obj, key) => {
						if (key == "$ref") {
							let val = obj[key];
							if (string(val) && val.startsWith("#/definitions/")) obj[key] = val.slice(0, 14) + prefix + "." + val.slice(14);
						}
					};
					deepIterate(properties, addPrefix);
					definitions = {};
					Object.entries(deepClone(configuration.definitions)).forEach(([key, val]) => {
						if (objectLiteral(val)) {
							definitions[prefix + "." + key] = val;
							deepIterate(val, addPrefix);
						}
					});
				}
				let node = {
					properties,
					extensionInfo: {
						id,
						displayName: packageJSON.displayName
					}
				};
				this.configurationNodes.push(node);
				if (this.activated) {
					let toRemove = [];
					let idx = this.configurationNodes.findIndex((o) => o.extensionInfo.id === id);
					if (idx !== -1) {
						toRemove.push(this.configurationNodes[idx]);
						this.configurationNodes.splice(idx, 1);
					}
					workspace_default.configurations.updateConfigurations([node], toRemove);
				}
			}
			extensionRegistry.registerExtension(id, {
				name: id,
				directory,
				filepath,
				commands,
				definitions,
				rootPatterns,
				onCommands: getOnCommandList(activationEvents)
			});
		}
		getExtensionState(id) {
			if (this.states.isDisabled(id)) return "disabled";
			let item = this.getExtension(id);
			if (!item) return "unknown";
			let { extension } = item;
			return extension.isActive ? "activated" : "loaded";
		}
		async autoActivate(id, extension) {
			try {
				if (await this.checkAutoActivate(extension.packageJSON)) await Promise.resolve(this.activate(id));
			} catch (e) {
				logger$26.error(`Error on activate ${id}`, e);
			}
		}
		async loadExtensionFile(filepath, noActive = false) {
			let stat = await statAsync(filepath);
			if (!stat || !stat.isFile()) return;
			let filename = path$5.basename(filepath);
			let basename = path$5.basename(filepath, ".js");
			let name = "single-" + basename;
			let root = path$5.dirname(filepath);
			let packageJSON = {
				name,
				main: filename,
				engines: { coc: ">=0.0.82" }
			};
			let obj = loadJson$1(path$5.join(root, basename + ".json"));
			for (const attr of ["activationEvents", "contributes"]) packageJSON[attr] = obj[attr];
			await this.unloadExtension(name);
			await this.registerExtension(root, packageJSON, 2, noActive);
			return name;
		}
		registerExtensions(stats) {
			for (let stat of stats) try {
				let extensionType = stat.isLocal ? 1 : 0;
				this.registerExtension(stat.root, stat.packageJSON, extensionType);
			} catch (e) {
				logger$26.error(`Error on regist extension from ${stat.root}: `, e);
			}
		}
		async registerExtension(root, packageJSON, extensionType, noActive = false) {
			let id = packageJSON.name;
			if (this.states.isDisabled(id)) return;
			let isActive = false;
			let result;
			let filename = path$5.join(root, packageJSON.main || "index.js");
			let extensionPath = extensionType === 2 ? filename : root;
			let exports;
			let ext;
			let subscriptions = [];
			const timing = createTiming(`activate ${id}`, 5e3);
			let extension = {
				activate: () => {
					if (result) return result;
					result = new Promise(async (resolve, reject) => {
						timing.start();
						try {
							ext = createExtension(id, filename, typeof packageJSON.engines.coc === "undefined");
							let context = {
								subscriptions,
								extensionPath,
								globalState: memos.createMemento(`${id}|global`),
								workspaceState: memos.createMemento(`${id}|${workspace_default.rootPath}`),
								asAbsolutePath: (relativePath) => path$5.join(root, relativePath),
								storagePath: path$5.join(this.folder, `${id}-data`),
								logger: createLogger$1(`extension:${id}`)
							};
							let res = await Promise.resolve(ext.activate(context));
							isActive = true;
							exports = res;
							this._onDidActiveExtension.fire(extension);
							timing.stop();
							resolve(res);
						} catch (e) {
							logger$26.error(`Error on active extension ${id}:`, e);
							reject(e);
						}
					});
					return result;
				},
				id,
				packageJSON,
				extensionPath,
				extensionUri: URI.parse(extensionPath),
				get isActive() {
					return isActive;
				},
				get module() {
					return ext;
				},
				get exports() {
					if (!isActive) throw new Error(`Invalid access to exports, extension "${id}" not activated`);
					return exports;
				}
			};
			Object.freeze(extension);
			this.extensions.set(id, {
				id,
				type: extensionType,
				isLocal: extensionType == 1,
				extension,
				directory: root,
				filepath: filename,
				events: getEvents(packageJSON.activationEvents),
				deactivate: async () => {
					if (!isActive) return;
					isActive = false;
					result = void 0;
					exports = void 0;
					disposeAll(subscriptions);
					if (ext && typeof ext.deactivate === "function") try {
						await Promise.resolve(ext.deactivate());
						ext = void 0;
					} catch (e) {
						logger$26.error(`Error on ${id} deactivate: `, e);
					}
				}
			});
			this.registContribution(id, packageJSON, root, filename);
			this._onDidLoadExtension.fire(extension);
			if (this.activated && !noActive) await this.autoActivate(id, extension);
		}
		unregistContribution(id) {
			let idx = this.configurationNodes.findIndex((o) => o.extensionInfo.id === id);
			extensionRegistry.unregistExtension(id);
			if (idx !== -1) {
				let node = this.configurationNodes[idx];
				this.configurationNodes.splice(idx, 1);
				configurationRegistry.deregisterConfigurations([node]);
			}
		}
		async registerInternalExtension(extension, deactivate) {
			let { id, packageJSON } = extension;
			this.extensions.set(id, {
				id,
				directory: __dirname,
				type: 3,
				events: getEvents(packageJSON.activationEvents),
				extension,
				deactivate,
				isLocal: true
			});
			this.registContribution(id, packageJSON, __dirname);
			this._onDidLoadExtension.fire(extension);
			await this.autoActivate(id, extension);
		}
		/**
		* Only global extensions can be uninstalled
		*/
		async uninstallExtensions(ids) {
			let [globals, filtered] = splitArray(ids, (id) => this.states.hasExtension(id));
			for (let id of globals) {
				await this.unloadExtension(id);
				this.states.removeExtension(id);
				extensionRegistry.unregistExtension(id);
				await remove(path$5.join(this.modulesFolder, id));
			}
			if (filtered.length > 0) window_default.showWarningMessage(`Global extensions ${filtered.join(", ")} not found`);
			if (globals.length > 0) window_default.showInformationMessage(`Removed extensions: ${globals.join(" ")}`);
		}
		async toggleExtension(id) {
			let state = this.getExtensionState(id);
			if (state == "activated") await this.deactivate(id);
			if (state != "disabled") {
				this.states.setDisable(id, true);
				this.unregistContribution(id);
				await this.unloadExtension(id);
			} else {
				this.states.setDisable(id, false);
				if (id.startsWith("single-")) {
					let filepath = path$5.join(this.singleExtensionsRoot, `${id.replace(/^single-/, "")}.js`);
					await this.loadExtensionFile(filepath);
				} else {
					let folder = this.states.getFolder(id);
					if (folder) await this.loadExtension(folder);
					else window_default.showWarningMessage(`Extension ${id} not found`);
				}
			}
		}
		async watchExtension(id) {
			let item = this.getExtension(id);
			if (!item) throw new Error(`extension ${id} not found`);
			if (id.startsWith("single-")) {
				window_default.showInformationMessage(`watching ${item.filepath}`);
				this.disposables.push(watchFile(item.filepath, async () => {
					await this.loadExtensionFile(item.filepath);
					window_default.showInformationMessage(`reloaded ${id}`);
				}, false));
			} else {
				let client = await workspace_default.fileSystemWatchers.createClient(item.directory, true);
				if (!client) throw new Error("watchman not found");
				window_default.showInformationMessage(`watching ${item.directory}`);
				client.subscribe("**/*.js", async () => {
					this.reloadExtension(id).then(() => {
						window_default.showInformationMessage(`reloaded ${id}`);
					}, onUnexpectedError);
				});
			}
		}
		/**
		* load extension in folder or file
		*/
		async load(filepath, active) {
			let name;
			if (isDirectory(filepath)) {
				name = loadJson$1(path$5.join(filepath, "package.json")).name;
				await this.loadExtension(filepath, true);
			} else name = await this.loadExtensionFile(filepath, true);
			if (!name) throw new Error(`Unable to load extension at ${filepath}`);
			if (this.states.isDisabled(name)) throw new Error(`extension ${name} is disabled`);
			let item = this.getExtension(name);
			if (active) await this.activate(name);
			return {
				get isActive() {
					return item.extension.isActive;
				},
				get name() {
					return name;
				},
				get api() {
					return item.extension.exports;
				},
				get exports() {
					return omit$2(item.extension.module ?? {}, ["activate"]);
				},
				unload: () => {
					return this.unloadExtension(name);
				}
			};
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/model/status.ts
var frames, StatusLine;
var init_status = __esmMin((() => {
	init_dist_node();
	frames = [
		"⠋",
		"⠙",
		"⠹",
		"⠸",
		"⠼",
		"⠴",
		"⠦",
		"⠧",
		"⠇",
		"⠏"
	];
	StatusLine = class {
		items = /* @__PURE__ */ new Map();
		shownIds = /* @__PURE__ */ new Set();
		_text = "";
		interval;
		nvim;
		constructor() {
			this.interval = setInterval(() => {
				this.setStatusText();
			}, 100).unref();
		}
		dispose() {
			this.items.clear();
			this.shownIds.clear();
			clearInterval(this.interval);
		}
		reset() {
			this.items.clear();
			this.shownIds.clear();
		}
		createStatusBarItem(priority, isProgress = false) {
			let uid = v1();
			let item = {
				text: "",
				priority,
				isProgress,
				show: () => {
					this.shownIds.add(uid);
					this.setStatusText();
				},
				hide: () => {
					this.shownIds.delete(uid);
					this.setStatusText();
				},
				dispose: () => {
					this.shownIds.delete(uid);
					this.items.delete(uid);
					this.setStatusText();
				}
			};
			this.items.set(uid, item);
			return item;
		}
		getText() {
			if (this.shownIds.size == 0) return "";
			let idx = Math.floor((/* @__PURE__ */ new Date()).getMilliseconds() / 100);
			let text = "";
			let items = [];
			for (let [id, item] of this.items) if (this.shownIds.has(id)) items.push(item);
			items.sort((a, b) => a.priority - b.priority);
			for (let item of items) if (!item.isProgress) text = `${text} ${item.text}`;
			else text = `${text} ${frames[idx]} ${item.text}`;
			return text;
		}
		setStatusText() {
			let text = this.getText();
			let { nvim } = this;
			if (text != this._text && nvim) {
				this._text = text;
				nvim.pauseNotification();
				this.nvim.setVar("coc_status", text, true);
				this.nvim.callTimer("coc#util#do_autocmd", ["CocStatusChange"], true);
				nvim.resumeNotification(false, true);
			}
		}
	};
}));
//#endregion
//#region src/extension/ui.ts
var interval, InstallChannel, debounceTime$7, InstallBuffer;
var init_ui = __esmMin((() => {
	init_events();
	init_status();
	init_util$7();
	init_node();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	interval = getConditionValue(100, 1);
	InstallChannel = class {
		settings;
		channel;
		constructor(settings, channel) {
			this.settings = settings;
			this.channel = channel;
		}
		get isUpdate() {
			return this.settings.isUpdate;
		}
		getText() {
			return this.isUpdate ? "update" : "install";
		}
		start(names) {
			this.channel.appendLine(`${this.isUpdate ? "Updating" : "Installing"} ${names.join(", ")}`);
		}
		addMessage(name, msg, isProgress) {
			if (!isProgress) this.channel.appendLine(`${name} - ${msg}`);
		}
		startProgress(name) {
			this.channel.appendLine(`Start ${this.getText()} ${name}`);
		}
		finishProgress(name, succeed) {
			if (succeed) this.channel.appendLine(`${name} ${this.getText()} succeed!`);
			else this.channel.appendLine(`${name} ${this.getText()} failed!`);
		}
	};
	debounceTime$7 = getConditionValue(500, 10);
	InstallBuffer = class {
		settings;
		statMap = /* @__PURE__ */ new Map();
		updated = /* @__PURE__ */ new Set();
		messagesMap = /* @__PURE__ */ new Map();
		disposables = [];
		names = [];
		interval;
		bufnr;
		constructor(settings) {
			this.settings = settings;
			let floatFactory = window_default.createFloatFactory({ modes: ["n"] });
			this.disposables.push(floatFactory);
			let fn = debounce(async (bufnr, cursor) => {
				if (bufnr == this.bufnr) {
					let msgs = this.getMessages(cursor[0] - 1);
					let docs = msgs.length > 0 ? [{
						content: msgs.join("\n"),
						filetype: "txt"
					}] : [];
					await floatFactory.show(docs);
				}
			}, debounceTime$7);
			this.disposables.push(import_main$1.Disposable.create(() => {
				fn.clear();
			}));
			events_default.on("CursorMoved", fn, this.disposables);
			events_default.on("BufUnload", (bufnr) => {
				if (bufnr === this.bufnr) this.dispose();
			}, null, this.disposables);
		}
		async start(names) {
			this.statMap.clear();
			this.names = names;
			for (let name of names) this.statMap.set(name, 0);
			await this.show();
		}
		addMessage(name, msg) {
			let lines = this.messagesMap.get(name) || [];
			this.messagesMap.set(name, lines.concat(msg.trim().split(/\r?\n/)));
			if (msg.startsWith("Updated to") || msg.startsWith("Installed extension")) this.updated.add(name);
		}
		startProgress(name) {
			this.statMap.set(name, 2);
		}
		finishProgress(name, succeed) {
			this.statMap.set(name, succeed ? 3 : 1);
		}
		get remains() {
			let count = 0;
			for (let name of this.names) {
				let stat = this.statMap.get(name);
				if (![3, 1].includes(stat)) count = count + 1;
			}
			return count;
		}
		getLinesAndHighlights(start) {
			let lines = [];
			let highlights = [];
			for (let name of this.names) {
				let state = this.statMap.get(name);
				let processText = "*";
				let hlGroup;
				let lnum = start + lines.length;
				switch (state) {
					case 2:
						processText = frames[Math.floor((/* @__PURE__ */ new Date()).getMilliseconds() / 100)];
						hlGroup = void 0;
						break;
					case 1:
						processText = "✗";
						hlGroup = "ErrorMsg";
						break;
					case 3:
						processText = "✓";
						hlGroup = this.updated.has(name) ? "MoreMsg" : "Comment";
						break;
				}
				let msgs = this.messagesMap.get(name) || [];
				let pre = `- ${processText} `;
				let len = byteLength(pre);
				if (hlGroup) highlights.push({
					hlGroup,
					lnum,
					colStart: len,
					colEnd: len + byteLength(name)
				});
				lines.push(`${pre}${name} ${msgs.length ? msgs[msgs.length - 1] : ""}`);
			}
			return {
				lines,
				highlights
			};
		}
		getMessages(line) {
			let name = this.names[line - 2];
			return this.messagesMap.get(name) ?? [];
		}
		get stopped() {
			return this.interval == null;
		}
		get isUpdate() {
			return this.settings.isUpdate;
		}
		draw() {
			let { remains, bufnr } = this;
			let { nvim } = workspace_default;
			if (!bufnr) return;
			let buffer = nvim.createBuffer(bufnr);
			let first = remains == 0 ? `${this.isUpdate ? "Update" : "Install"} finished` : `Installing, ${remains} remaining...`;
			let { lines, highlights } = this.getLinesAndHighlights(2);
			nvim.pauseNotification();
			buffer.setLines([
				first,
				"",
				...lines
			], {
				start: 0,
				end: -1,
				strictIndexing: false
			}, true);
			buffer.updateHighlights("coc-extensions", highlights, { priority: 99 });
			if (remains == 0 && this.interval) {
				clearInterval(this.interval);
				this.interval = null;
			}
			nvim.resumeNotification(true, true);
		}
		highlight() {
			let { nvim } = workspace_default;
			nvim.call("matchadd", ["CocListFgCyan", "^\\-\\s\\zs\\*"], true);
			nvim.call("matchadd", ["CocListFgGreen", "^\\-\\s\\zs✓"], true);
			nvim.call("matchadd", ["CocListFgRed", "^\\-\\s\\zs✗"], true);
		}
		async show() {
			let isSync = events_default.requesting === true;
			let { nvim } = workspace_default;
			nvim.pauseNotification();
			nvim.command(isSync ? "enew" : this.settings.updateUIInTab ? "tabnew" : "vs +enew", true);
			nvim.call("bufnr", ["%"], true);
			nvim.command("setl buftype=nofile bufhidden=wipe noswapfile nobuflisted wrap undolevels=-1", true);
			if (!isSync) nvim.command("nnoremap <silent><nowait><buffer> q :q<CR>", true);
			this.highlight();
			let res = await nvim.resumeNotification();
			this.bufnr = res[0][1];
			this.interval = setInterval(() => {
				this.draw();
			}, interval);
		}
		dispose() {
			this.bufnr = void 0;
			this.messagesMap.clear();
			this.statMap.clear();
			disposeAll(this.disposables);
			clearInterval(this.interval);
			this.interval = null;
		}
	};
}));
//#endregion
//#region src/extension/index.ts
function toUrl(val) {
	return isUrl(val) ? val.replace(/\.git(#master|#main)?$/, "") : "";
}
var logger$25, EXTENSIONS_FOLDER, Extensions, extension_default;
var init_extension = __esmMin((() => {
	init_commands$2();
	init_events();
	init_logger$2();
	init_util$7();
	init_array();
	init_constants();
	init_is();
	init_node();
	init_object();
	init_processes();
	init_window();
	init_workspace$1();
	init_installer();
	init_manager();
	init_stat();
	init_ui();
	logger$25 = createLogger$1("extensions-index");
	EXTENSIONS_FOLDER = path$5.join(dataHome, "extensions");
	Extensions = class {
		manager;
		states;
		modulesFolder = path$5.join(EXTENSIONS_FOLDER, "node_modules");
		globalPromise;
		constructor() {
			checkExtensionRoot(EXTENSIONS_FOLDER);
			this.states = new ExtensionStat(EXTENSIONS_FOLDER);
			this.manager = new ExtensionManager(this.states, EXTENSIONS_FOLDER);
			commands_default.register({
				id: "extensions.forceUpdateAll",
				execute: async () => {
					let arr = await this.manager.cleanExtensions();
					logger$25.info(`Force update extensions: ${arr}`);
					await this.installExtensions(arr);
				}
			}, false, "remove all global extensions and install them");
			this.globalPromise = this.globalExtensions();
			commands_default.register({
				id: "extensions.toggleAutoUpdate",
				execute: async () => {
					let settings = this.getUpdateSettings();
					let target = 1;
					let config = workspace_default.getConfiguration(null, null);
					if (settings.updateCheck == "never") {
						await config.update("extensions.updateCheck", "daily", target);
						window_default.showInformationMessage("Extension auto update enabled.");
					} else {
						await config.update("extensions.updateCheck", "never", target);
						window_default.showInformationMessage("Extension auto update disabled.");
					}
					await config.update("coc.preferences.extensionUpdateCheck", void 0, target);
				}
			}, false, "toggle auto update of extensions.");
			events_default.once("ready", () => {
				this.checkRecommendation(workspace_default.workspaceFolders[0]);
				workspace_default.onDidChangeWorkspaceFolders((e) => {
					this.checkRecommendation(e.added[0]);
				});
			});
		}
		async checkRecommendation(workspaceFolder) {
			if (!workspaceFolder) return;
			const unInstalled = toArray(workspace_default.getConfiguration("extensions", workspaceFolder).inspect("recommendations").workspaceFolderValue).filter((name) => !this.states.hasExtension(name));
			let uri = workspaceFolder.uri;
			if (!this.manager.states.shouldPrompt(uri) || unInstalled.length === 0) return;
			let items = [{
				title: `Install ${unInstalled.join(", ")}`,
				index: 1
			}, {
				title: "Don't show again",
				isCloseAffordance: true,
				index: 2
			}];
			const item = await window_default.showInformationMessage(`Install recommend extensions?`, ...items);
			if (!item) return;
			if (item.index === 1) await this.installExtensions(unInstalled);
			else this.manager.states.addNoPromptFolder(uri);
		}
		getUpdateSettings() {
			let config = workspace_default.getConfiguration(null, null);
			let extensionsConfig = toObject(config.inspect("extensions").globalValue);
			return {
				updateCheck: extensionsConfig.updateCheck ?? config.get("coc.preferences.extensionUpdateCheck", "never"),
				updateUIInTab: extensionsConfig.updateUIInTab ?? config.get("coc.preferences.extensionUpdateUIInTab", false),
				silentAutoupdate: extensionsConfig.silentAutoupdate ?? config.get("coc.preferences.silentAutoupdate", true)
			};
		}
		async init(runtimepath) {
			if (process.env.COC_NO_PLUGINS == "1") return;
			let stats = await this.globalPromise;
			this.manager.registerExtensions(stats);
			let localStats = this.runtimeExtensionStats(runtimepath.split(","));
			this.manager.registerExtensions(localStats);
			this.manager.loadFileExtensions();
		}
		async activateExtensions() {
			await this.manager.activateExtensions();
			if (process.env.COC_NO_PLUGINS == "1") {
				logger$25.warn("Extensions disabled by env COC_NO_PLUGINS");
				return;
			}
			let names = this.states.filterGlobalExtensions(workspace_default.env.globalExtensions);
			this.installExtensions(names);
			let settings = this.getUpdateSettings();
			if (this.states.shouldUpdate(settings.updateCheck)) {
				this.outputChannel.appendLine("Start auto update...");
				this.updateExtensions(settings.silentAutoupdate, settings.updateUIInTab).catch((e) => {
					this.outputChannel.appendLine(`Error on updateExtensions ${e}`);
				});
			}
		}
		get onDidLoadExtension() {
			return this.manager.onDidLoadExtension;
		}
		get onDidActiveExtension() {
			return this.manager.onDidActiveExtension;
		}
		get onDidUnloadExtension() {
			return this.manager.onDidUnloadExtension;
		}
		get outputChannel() {
			return window_default.createOutputChannel("extensions");
		}
		/**
		* Get all loaded extensions.
		*/
		get all() {
			return this.manager.all;
		}
		has(id) {
			return this.manager.has(id);
		}
		getExtension(id) {
			return this.manager.getExtension(id);
		}
		getExtensionById(extensionId) {
			let item = this.manager.getExtension(extensionId);
			return item ? item.extension : void 0;
		}
		/**
		* @deprecated Used by old version coc-json.
		*/
		get schemes() {
			return {};
		}
		/**
		* @deprecated Used by old version coc-json.
		*/
		addSchemeProperty(key, def) {}
		/**
		* @public Get state of extension
		*/
		getExtensionState(id) {
			return this.manager.getExtensionState(id);
		}
		isActivated(id) {
			let item = this.manager.getExtension(id);
			return item != null && item.extension.isActive;
		}
		async call(id, method, args) {
			return await this.manager.call(id, method, args);
		}
		get npm() {
			let npm = workspace_default.initialConfiguration.get("npm.binPath");
			npm = workspace_default.expand(npm);
			for (let exe of [npm, "npm"]) if (executable(exe)) return which.sync(exe);
			window_default.showErrorMessage(`Can't find ${npm} or npm in your $PATH`);
			return null;
		}
		createInstallerUI(isUpdate, silent, updateUIInTab) {
			return silent ? new InstallChannel({ isUpdate }, this.outputChannel) : new InstallBuffer({
				isUpdate,
				updateUIInTab
			});
		}
		createInstaller(npm, def) {
			return new Installer(this.modulesFolder, npm, def);
		}
		/**
		* Install extensions, can be called without initialize.
		*/
		async installExtensions(list) {
			if (isFalsyOrEmpty(list) || !this.npm) return;
			let { npm } = this;
			list = distinct(list);
			let installBuffer = this.createInstallerUI(false, false, false);
			await Promise.resolve(installBuffer.start(list));
			let fn = async (key) => {
				try {
					installBuffer.startProgress(key);
					let installer = this.createInstaller(npm, key);
					installer.on("message", (msg, isProgress) => {
						installBuffer.addMessage(key, msg, isProgress);
					});
					let result = await installer.install();
					installBuffer.finishProgress(key, true);
					this.states.addExtension(result.name, result.url ? result.url : `>=${result.version}`);
					if (key.match(/@[\d.]+$/) != null) this.states.setLocked(result.name, true);
					await this.manager.loadExtension(result.folder);
				} catch (err) {
					installBuffer.addMessage(key, err.message);
					installBuffer.finishProgress(key, false);
					window_default.showErrorMessage(`Error on install ${key}: ${err}`);
					logger$25.error(`Error on install ${key}`, err);
				}
			};
			await concurrent(list, fn);
		}
		/**
		* Update global extensions
		*/
		async updateExtensions(silent = false, updateUIInTab = false) {
			let { npm } = this;
			if (!npm) return;
			let stats = this.globalExtensionStats();
			stats = stats.filter((s) => {
				if (s.isLocked || s.state === "disabled") {
					this.outputChannel.appendLine(`Skipped update for ${s.isLocked ? "locked" : "disabled"} extension "${s.id}"`);
					return false;
				}
				return true;
			});
			this.states.setLastUpdate();
			this.cleanModulesFolder();
			let installBuffer = this.createInstallerUI(true, silent, updateUIInTab);
			await Promise.resolve(installBuffer.start(stats.map((o) => o.id)));
			let fn = async (stat) => {
				let { id } = stat;
				try {
					installBuffer.startProgress(id);
					let url = stat.exotic ? stat.uri : null;
					let installer = this.createInstaller(npm, id);
					installer.on("message", (msg, isProgress) => {
						installBuffer.addMessage(id, msg, isProgress);
					});
					let directory = await installer.update(url);
					installBuffer.finishProgress(id, true);
					if (directory) await this.manager.loadExtension(directory);
				} catch (err) {
					installBuffer.addMessage(id, err.message);
					installBuffer.finishProgress(id, false);
					window_default.showErrorMessage(`Error on update ${id}: ${err}`);
					logger$25.error(`Error on update ${id}`, err);
				}
			};
			await concurrent(stats, fn, silent ? 1 : 3);
		}
		/**
		* Get all extension states
		*/
		async getExtensionStates() {
			let runtimepaths = await workspace_default.nvim.runtimePaths;
			let localStats = this.runtimeExtensionStats(runtimepaths);
			let globalStats = this.globalExtensionStats();
			return localStats.concat(globalStats);
		}
		async globalExtensions() {
			if (process.env.COC_NO_PLUGINS == "1") return [];
			let res = [];
			for (let key of this.states.activated()) {
				let root = path$5.join(this.modulesFolder, key);
				try {
					let json = await loadGlobalJsonAsync(root, VERSION);
					res.push({
						root,
						isLocal: false,
						packageJSON: json
					});
				} catch (err) {
					logger$25.error(`Error on load package.json of ${key}`, err);
				}
			}
			return res;
		}
		globalExtensionStats() {
			let dependencies = this.states.dependencies;
			let lockedExtensions = this.states.lockedExtensions;
			let infos = [];
			Object.entries(dependencies).map(([key, val]) => {
				let root = path$5.join(this.modulesFolder, key);
				let errors = [];
				let obj = loadExtensionJson(root, VERSION, errors);
				if (errors.length > 0) {
					this.outputChannel.appendLine(`Error on load ${key} at ${root}: ${errors.join("\n")}`);
					return;
				}
				obj.name = key;
				infos.push({
					id: key,
					root,
					isLocal: false,
					version: obj.version,
					description: obj.description ?? "",
					isLocked: lockedExtensions.includes(key),
					exotic: /^https?:/.test(val),
					uri: toUrl(val),
					state: this.getExtensionState(key),
					packageJSON: obj
				});
			});
			logger$25.debug("globalExtensionStats:", infos.length);
			return infos;
		}
		runtimeExtensionStats(runtimepaths) {
			let lockedExtensions = this.states.lockedExtensions;
			let infos = [];
			let localIds = /* @__PURE__ */ new Set();
			runtimepaths.map((root) => {
				let errors = [];
				let obj = loadExtensionJson(root, workspace_default.version, errors);
				if (errors.length > 0) return;
				let { name } = obj;
				if (!name || this.states.hasExtension(name) || localIds.has(name)) return;
				this.states.addLocalExtension(name, root);
				localIds.add(name);
				infos.push({
					id: obj.name,
					isLocal: true,
					isLocked: lockedExtensions.includes(name),
					version: obj.version,
					description: obj.description ?? "",
					exotic: false,
					root,
					state: this.getExtensionState(obj.name),
					packageJSON: Object.freeze(obj)
				});
			});
			return infos;
		}
		/**
		* Remove unnecessary folders in node_modules
		*/
		cleanModulesFolder() {
			let folders = this.states.globalIds.map((s) => s.replace(/\/.*$/, ""));
			if (!fs$6.existsSync(this.modulesFolder)) return;
			let files = fs$6.readdirSync(this.modulesFolder);
			for (let file of files) {
				if (folders.includes(file)) continue;
				let p = path$5.join(this.modulesFolder, file);
				let stat = fs$6.lstatSync(p);
				if (stat.isSymbolicLink()) fs$6.unlinkSync(p);
				else if (stat.isDirectory()) fs$6.rmSync(p, {
					recursive: true,
					force: true
				});
			}
		}
		dispose() {
			this.manager.dispose();
		}
	};
	extension_default = new Extensions();
}));
//#endregion
//#region src/completion/keywords.ts
var KeywordsBuffer;
var init_keywords = __esmMin((() => {
	init_esm();
	init_events();
	init_util$7();
	init_async$1();
	init_fs();
	init_protocol();
	KeywordsBuffer = class {
		doc;
		segmenterLocales;
		lineWords = [];
		_gitIgnored = false;
		tokenSource;
		minimalCharacterLen = 2;
		constructor(doc, segmenterLocales) {
			this.doc = doc;
			this.segmenterLocales = segmenterLocales;
			this.parseWords(segmenterLocales);
			let uri = URI.parse(doc.uri);
			if (uri.scheme === "file") isGitIgnored(uri.fsPath).then((ignored) => {
				this._gitIgnored = ignored;
			});
		}
		getWords() {
			let res = [];
			for (let words of this.lineWords) words.forEach((word) => {
				if (!res.includes(word)) res.push(word);
			});
			return res;
		}
		cancel() {
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = void 0;
			}
		}
		async parseWords(segmenterLocales) {
			let { lineWords, doc, minimalCharacterLen } = this;
			let { chars } = doc;
			let token = (this.tokenSource = new import_main$1.CancellationTokenSource()).token;
			await forEach(doc.textDocument.lines, (line) => {
				let words = chars.matchLine(line, segmenterLocales, minimalCharacterLen);
				lineWords.push(words);
			}, token, { yieldAfter: 20 });
		}
		get bufnr() {
			return this.doc.bufnr;
		}
		get gitIgnored() {
			return this._gitIgnored;
		}
		onCompleteDone(idx) {
			let { doc, segmenterLocales, minimalCharacterLen } = this;
			let line = doc.getline(idx);
			this.lineWords[idx] = doc.chars.matchLine(line, segmenterLocales, minimalCharacterLen);
		}
		onChange(e) {
			if (events_default.completing || e.contentChanges.length == 0) return;
			let { lineWords, doc, segmenterLocales, minimalCharacterLen } = this;
			let { range, text } = e.contentChanges[0];
			let { start, end } = range;
			let sl = start.line;
			let del = end.line - sl;
			let arr = doc.textDocument.lines.slice(sl, sl + text.split(/\n/).length).map((line) => doc.chars.matchLine(line, segmenterLocales, minimalCharacterLen));
			lineWords.splice(sl, del + 1, ...arr);
		}
		*matchWords(line) {
			let { lineWords } = this;
			if (line >= lineWords.length) line = lineWords.length - 1;
			for (let i = 0; i < lineWords.length; i++) {
				let words = defaultValue(lineWords[i < line ? line - i - 1 : i], []);
				for (let word of words) yield word;
			}
		}
		dispose() {
			this.cancel();
			this.lineWords = [];
		}
	};
}));
//#endregion
//#region src/completion/source.ts
function firstMatchFuzzy(firstCode, ascii, word) {
	let ch = word[0];
	if (ascii && !WORD_PREFIXES_CODE.includes(firstCode) && WORD_PREFIXES.includes(ch)) ch = word[1];
	if (ascii && ch.charCodeAt(0) > 128) ch = unidecode(ch);
	return caseMatch(firstCode, ch.charCodeAt(0));
}
var WORD_PREFIXES, WORD_PREFIXES_CODE, MAX_DURATION, MAX_COUNT, Source;
var init_source = __esmMin((() => {
	init_events();
	init_util$7();
	init_array();
	init_constants();
	init_fuzzy();
	init_is();
	init_node();
	init_string$1();
	init_workspace$1();
	WORD_PREFIXES = [
		"_",
		"$",
		"-"
	];
	WORD_PREFIXES_CODE = [
		95,
		36,
		45
	];
	MAX_DURATION = getConditionValue(80, 20);
	MAX_COUNT = 50;
	Source = class {
		name;
		filepath;
		sourceType;
		isSnippet;
		documentSelector;
		/**
		* Words that not match during session
		* The word that not match previous input would not match further input
		*/
		noMatchWords = /* @__PURE__ */ new Set();
		config;
		disposables = [];
		_disabled = false;
		defaults;
		constructor(option) {
			this.name = option.name;
			this.filepath = option.filepath || "";
			this.sourceType = option.sourceType || 0;
			this.isSnippet = !!option.isSnippet;
			this.defaults = option;
			this.documentSelector = option.documentSelector;
			const key = `coc.source.${option.name}`;
			this.config = defaultValue(workspace_default.initialConfiguration.get(key), {});
			workspace_default.onDidChangeConfiguration((e) => {
				if (e.affectsConfiguration(key)) this.config = defaultValue(workspace_default.initialConfiguration.get(key), {});
			}, null, this.disposables);
			events_default.on("CompleteDone", () => {
				this.noMatchWords.clear();
			}, null, this.disposables);
		}
		get nvim() {
			return workspace_default.nvim;
		}
		/**
		* Priority of source, higher priority makes items lower index.
		*/
		get priority() {
			return this.getConfig("priority", 1);
		}
		get triggerPatterns() {
			let patterns = this.getConfig("triggerPatterns", null);
			if (isFalsyOrEmpty(patterns)) return null;
			return patterns.map((s) => string(s) ? new RegExp(s + "$") : s);
		}
		/**
		* When triggerOnly is true, not trigger completion on keyword character insert.
		*/
		get triggerOnly() {
			let triggerOnly = this.defaults["triggerOnly"];
			if (boolean(triggerOnly)) return triggerOnly;
			return Array.isArray(this.triggerPatterns) && this.triggerPatterns.length > 0;
		}
		get triggerCharacters() {
			return toArray(this.getConfig("triggerCharacters", []));
		}
		get firstMatch() {
			return this.getConfig("firstMatch", true);
		}
		get remoteFns() {
			return toArray(this.defaults.remoteFns);
		}
		get shortcut() {
			let shortcut = this.getConfig("shortcut", "");
			return shortcut ? shortcut : this.name.slice(0, 3);
		}
		get enable() {
			if (this._disabled) return false;
			return this.getConfig("enable", true);
		}
		get filetypes() {
			return this.getConfig("filetypes", null);
		}
		get disableSyntaxes() {
			return this.getConfig("disableSyntaxes", []);
		}
		getConfig(key, defaultValue) {
			let val = this.config[key];
			if (func(val) || val == null) return defaultValue ?? null;
			return val;
		}
		toggle() {
			this._disabled = !this._disabled;
		}
		get menu() {
			return "";
		}
		async checkComplete(opt) {
			let { disableSyntaxes } = this;
			if (!isFalsyOrEmpty(disableSyntaxes) && opt.synname) {
				let synname = opt.synname.toLowerCase();
				if (disableSyntaxes.findIndex((s) => synname.includes(s.toLowerCase())) !== -1) return false;
			}
			let fn = this.defaults["shouldComplete"];
			if (func(fn)) return !!await Promise.resolve(fn.call(this, opt));
			return true;
		}
		async refresh() {
			let fn = this.defaults["refresh"];
			if (func(fn)) await Promise.resolve(fn.call(this));
		}
		async onCompleteDone(item, opt) {
			let fn = this.defaults["onCompleteDone"];
			if (func(fn)) await Promise.resolve(fn.call(this, item, opt));
		}
		async doComplete(opt, token) {
			if (!await this.checkComplete(opt) || token.isCancellationRequested) return null;
			let fn = this.defaults["doComplete"];
			return await Promise.resolve(fn.call(this, opt, token));
		}
		async onCompleteResolve(item, opt, token) {
			let fn = this.defaults["onCompleteResolve"];
			if (func(fn)) await Promise.resolve(fn.call(this, item, opt, token));
		}
		/**
		* Add words to items with timer.
		*/
		async getResults(iterables, input, exclude, items, token) {
			let { firstMatch, noMatchWords } = this;
			let start = Date.now();
			let prev = start;
			let len = input.length;
			let firstCode = input.charCodeAt(0);
			let codes = getCharCodes(input);
			let ascii = isAlphabet(firstCode);
			let i = 0;
			for (let iterable of iterables) for (let w of iterable) {
				i++;
				if (i % 100 === 0) {
					let curr = Date.now();
					if (curr - prev > 15 || prev === start) {
						await waitImmediate$1();
						prev = curr;
					}
					if (token.isCancellationRequested || curr - start > MAX_DURATION) return true;
				}
				if (w.length <= 1 && w.charCodeAt(0) < 255 || w === exclude || items.has(w) || noMatchWords.has(w)) continue;
				if (firstMatch && !firstMatchFuzzy(firstCode, ascii, w)) {
					noMatchWords.add(w);
					continue;
				}
				if (len > 1) {
					if (!fuzzyMatch(codes, ascii && w[0].charCodeAt(0) > 128 ? unidecode(w) : w)) {
						noMatchWords.add(w);
						continue;
					}
				}
				items.add(w);
				if (items.size == MAX_COUNT) return true;
			}
			return false;
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/model/chars.ts
function getCharCode(str) {
	if (/^\d+$/.test(str)) return parseInt(str, 10);
	if (str.length > 0) return str.charCodeAt(0);
}
function sameScope(a, b) {
	if (a < boundary) return b < boundary;
	return b >= boundary;
}
function detectLanguage(code) {
	if (code >= 19968 && code <= 40959) return "cn";
	if (code >= 12352 && code <= 12447 || code >= 12448 && code <= 12543) return "ja";
	if (code >= 44032 && code <= 55215) return "ko";
	return "";
}
function* parseSegments(text, segmenterLocales) {
	if (Intl === void 0 || typeof Intl["Segmenter"] !== "function") {
		yield text;
		return;
	}
	let res = [];
	let items = new Intl["Segmenter"](segmenterLocales === "" ? void 0 : segmenterLocales, { granularity: "word" }).segment(text);
	for (let item of items) if (item.isWordLike) yield item.segment;
	return res;
}
function splitKeywordOption(iskeyword) {
	let res = [];
	let i = 0;
	let s = 0;
	let len = iskeyword.length;
	for (; i < len; i++) {
		let c = iskeyword[i];
		if (i + 1 == len && s != len) {
			res.push(iskeyword.slice(s, len));
			continue;
		}
		if (c == ",") {
			let d = i - s;
			if (d == 0) continue;
			if (d == 1) {
				let p = iskeyword[i - 1];
				if (p == "^" || p == ",") {
					res.push(p == "," ? "," : "^,");
					s = i + 1;
					if (p == "^" && iskeyword[i + 1] == ",") {
						i++;
						s++;
					}
					continue;
				}
			}
			res.push(iskeyword.slice(s, i));
			s = i + 1;
		}
	}
	return res;
}
var WORD_RANGES, MAX_CODE_UNIT, boundary, IntegerRanges, Chars;
var init_chars = __esmMin((() => {
	init_main$2();
	init_util$7();
	init_array();
	init_object();
	init_string$1();
	WORD_RANGES = [
		[257, 893],
		[895, 902],
		[904, 1369],
		[1376, 1416],
		[1418, 1469],
		[1471, 1471],
		[1473, 1474],
		[1476, 1522],
		[1525, 1547],
		[1549, 1562],
		[1564, 1566],
		[1568, 1641],
		[1646, 1747],
		[1749, 1791],
		[1806, 2403],
		[2406, 2415],
		[2417, 3571],
		[3573, 3662],
		[3664, 3673],
		[3676, 3843],
		[3859, 3897],
		[3902, 3972],
		[3974, 4169],
		[4176, 4346],
		[4348, 4960],
		[4969, 5740],
		[5743, 5759],
		[5761, 5786],
		[5789, 5866],
		[5870, 5940],
		[5943, 6099],
		[6109, 6143],
		[6155, 8191],
		[10240, 10495],
		[10649, 10711],
		[10716, 10747],
		[10750, 11775],
		[11904, 12287],
		[12321, 12335],
		[12337, 12348],
		[12350, 64829],
		[64832, 65071],
		[65132, 65279],
		[65296, 65305],
		[65313, 65338],
		[65345, 65370],
		[65382, 65535]
	];
	MAX_CODE_UNIT = 65535;
	boundary = 19968;
	IntegerRanges = class IntegerRanges {
		ranges;
		wordChars;
		/**
		* Sorted ranges without overlap
		*/
		constructor(ranges = [], wordChars = false) {
			this.ranges = ranges;
			this.wordChars = wordChars;
		}
		clone() {
			return new IntegerRanges(this.ranges.slice(), this.wordChars);
		}
		/**
		* Add new range
		*/
		add(start, end) {
			let index = 0;
			let removeCount = 0;
			if (end != null && end < start) {
				let t = end;
				end = start;
				start = t;
			}
			end = end == null ? start : end;
			for (let r of this.ranges) {
				let [s, e] = r;
				if (e < start) {
					index++;
					continue;
				}
				if (s > end) break;
				removeCount++;
				if (s < start) start = s;
				if (e > end) {
					end = e;
					break;
				}
			}
			this.ranges.splice(index, removeCount, [start, end]);
		}
		exclude(start, end) {
			if (end != null && end < start) {
				let t = end;
				end = start;
				start = t;
			}
			end = end == null ? start : end;
			let index = 0;
			let removeCount = 0;
			let created = [];
			for (let r of this.ranges) {
				let [s, e] = r;
				if (e < start) {
					index++;
					continue;
				}
				if (s > end) break;
				removeCount++;
				if (s < start) created.push([s, start - 1]);
				if (e > end) {
					created.push([end + 1, e]);
					break;
				}
			}
			if (removeCount == 0 && created.length == 0) return;
			this.ranges.splice(index, removeCount, ...created);
		}
		flatten() {
			return this.ranges.reduce((p, c) => p.concat(c), []);
		}
		includes(n) {
			if (n > 256 && this.wordChars) return intable(n, WORD_RANGES);
			return intable(n, this.ranges);
		}
		static fromKeywordOption(iskeyword) {
			let range = new IntegerRanges();
			for (let part of splitKeywordOption(iskeyword)) {
				let exclude = part.length > 1 && part.startsWith("^");
				let method = exclude ? "exclude" : "add";
				if (exclude) part = part.slice(1);
				if (part === "@" && !exclude) {
					range.wordChars = true;
					range[method](65, 90);
					range[method](97, 122);
					range[method](192, 255);
				} else if (part == "@-@") range[method]("@".charCodeAt(0));
				else if (part.length == 1 || /^\d+$/.test(part)) range[method](getCharCode(part));
				else if (part.includes("-")) {
					let items = part.split("-", 2);
					let start = getCharCode(items[0]);
					let end = getCharCode(items[1]);
					if (start === void 0 || end === void 0) continue;
					range[method](start, end);
				}
			}
			return range;
		}
	};
	Chars = class Chars {
		ranges;
		constructor(keywordOption) {
			this.ranges = IntegerRanges.fromKeywordOption(keywordOption);
		}
		addKeyword(ch) {
			this.ranges.add(ch.codePointAt(0));
		}
		clone() {
			let chars = new Chars("");
			chars.ranges = this.ranges.clone();
			return chars;
		}
		isKeywordCode(code) {
			if (code === 32 || code > MAX_CODE_UNIT) return false;
			if (isHighSurrogate(code)) return false;
			return this.ranges.includes(code);
		}
		isKeywordChar(ch) {
			let code = ch.charCodeAt(0);
			return this.isKeywordCode(code);
		}
		isKeyword(word) {
			for (let i = 0, l = word.length; i < l; i++) if (!this.isKeywordChar(word[i])) return false;
			return true;
		}
		*iterateWords(text) {
			let start = -1;
			let prevCode;
			for (let i = 0, l = text.length; i < l; i++) {
				let code = text.charCodeAt(i);
				if (this.isKeywordCode(code)) {
					if (start == -1) start = i;
					else if (prevCode !== void 0 && !sameScope(prevCode, code)) {
						yield [start, i];
						start = i;
					}
				} else if (start != -1) {
					yield [start, i];
					start = -1;
				}
				if (i === l - 1 && start != -1) yield [start, i + 1];
				prevCode = code;
			}
		}
		matchLine(line, segmenterLocales = void 0, min = 2, max = 1024) {
			let res = /* @__PURE__ */ new Set();
			let l = line.length;
			if (l > max) {
				line = line.slice(0, max);
				l = max;
			}
			for (let [start, end] of this.iterateWords(line)) {
				if (end - start < min) continue;
				let word = line.slice(start, end);
				let code = word.charCodeAt(0);
				if (segmenterLocales != null && code > 255) {
					if (segmenterLocales == "") segmenterLocales = detectLanguage(code);
					for (let text of parseSegments(word, segmenterLocales)) res.add(text);
				} else res.add(word);
			}
			return Array.from(res);
		}
		async computeWordRanges(lines, range, token) {
			let s = range.start.line;
			let e = range.end.line;
			let res = {};
			let ts = Date.now();
			for (let i = s; i <= e; i++) {
				let text = lines[i];
				if (text === void 0) break;
				let sc = i === s ? range.start.character : 0;
				if (i === s) text = text.slice(sc);
				if (i === e) text = text.slice(0, range.end.character - sc);
				if (Date.now() - ts > 15) {
					if (token && token.isCancellationRequested) break;
					await waitImmediate$1();
					ts = Date.now();
				}
				for (let [start, end] of this.iterateWords(text)) {
					let word = text.slice(start, end);
					let arr = hasOwnProperty$1(res, word) ? res[word] : [];
					arr.push(Range.create(i, start + sc, i, end + sc));
					res[word] = arr;
				}
			}
			return res;
		}
	};
}));
//#endregion
//#region src/completion/util.ts
function useAscii(input) {
	return input.length > 0 && input.charCodeAt(0) < 128;
}
function getKindText(kind, kindMap, defaultKindText) {
	return number(kind) ? kindMap.get(kind) ?? defaultKindText : kind;
}
function getKindHighlight(kind) {
	return number(kind) ? highlightsMap[kind] ?? DEFAULT_HL_GROUP : DEFAULT_HL_GROUP;
}
function getPriority(source, defaultValue) {
	if (number(source.priority)) return source.priority;
	return defaultValue;
}
function getDetail(item, filetype) {
	const { detail, labelDetails, label } = item;
	if (!isEmpty(labelDetails)) return {
		filetype: "txt",
		content: (labelDetails.detail ?? "") + (labelDetails.description ? ` ${labelDetails.description}` : "")
	};
	if (detail && detail !== label) return {
		filetype: /^[\w-\s.,\t\n]+$/.test(detail) ? "txt" : filetype,
		content: detail
	};
}
/**
* Return 1 when next is inserted as paried character
*/
function deltaCount(info) {
	if (!info.insertChar || !info.insertChars) return 0;
	if (info.insertChars.length != 2) return 0;
	let pre = info.pre;
	let last = pre[pre.length - 1];
	if (last !== info.insertChars[0] || !pariedCharacters.has(last)) return 0;
	let next = info.line[pre.length];
	if (!next || pariedCharacters.get(last) != next) return 0;
	return 1;
}
function toCompleteDoneItem(selected, item) {
	if (!item || !selected) return {};
	return Object.assign({
		word: selected.word,
		abbr: selected.abbr,
		kind: selected.kind,
		menu: selected.menu,
		source: selected.source.name,
		isSnippet: selected.isSnippet,
		user_data: `${selected.source.name}:0`
	}, item);
}
function getDocumentations(completeItem, filetype, detailRendered = false) {
	let docs = [];
	if (isCompletionItem(completeItem)) {
		let { documentation } = completeItem;
		if (!detailRendered) {
			let doc = getDetail(completeItem, filetype);
			if (doc) docs.push(doc);
		}
		if (documentation) {
			if (typeof documentation == "string") docs.push({
				filetype: "txt",
				content: documentation
			});
			else if (documentation.value) docs.push({
				filetype: documentation.kind == "markdown" ? "markdown" : "txt",
				content: documentation.value
			});
		}
	} else if (completeItem.documentation) docs = completeItem.documentation;
	else if (completeItem.info) docs.push({
		content: completeItem.info,
		filetype: "txt"
	});
	return docs;
}
function getResumeInput(option, pretext) {
	if (!option) return null;
	const { line, col } = option;
	const start = characterIndex(line, col);
	if (pretext.length < start) return null;
	for (let i = 0; i < start; i++) if (pretext.charCodeAt(i) !== line.charCodeAt(i)) return null;
	return byteSlice(pretext, option.col);
}
function checkIgnoreRegexps(ignoreRegexps, input) {
	if (!ignoreRegexps || ignoreRegexps.length == 0 || input.length == 0) return false;
	return ignoreRegexps.some((regexp) => {
		try {
			return new RegExp(regexp).test(input);
		} catch (e) {
			return false;
		}
	});
}
function createKindMap(labels) {
	return new Map([
		[CompletionItemKind.Text, labels["text"] ?? "v"],
		[CompletionItemKind.Method, labels["method"] ?? "f"],
		[CompletionItemKind.Function, labels["function"] ?? "f"],
		[CompletionItemKind.Constructor, typeof labels["constructor"] == "function" ? "f" : labels["constructor"] ?? ""],
		[CompletionItemKind.Field, labels["field"] ?? "m"],
		[CompletionItemKind.Variable, labels["variable"] ?? "v"],
		[CompletionItemKind.Class, labels["class"] ?? "C"],
		[CompletionItemKind.Interface, labels["interface"] ?? "I"],
		[CompletionItemKind.Module, labels["module"] ?? "M"],
		[CompletionItemKind.Property, labels["property"] ?? "m"],
		[CompletionItemKind.Unit, labels["unit"] ?? "U"],
		[CompletionItemKind.Value, labels["value"] ?? "v"],
		[CompletionItemKind.Enum, labels["enum"] ?? "E"],
		[CompletionItemKind.Keyword, labels["keyword"] ?? "k"],
		[CompletionItemKind.Snippet, labels["snippet"] ?? "S"],
		[CompletionItemKind.Color, labels["color"] ?? "v"],
		[CompletionItemKind.File, labels["file"] ?? "F"],
		[CompletionItemKind.Reference, labels["reference"] ?? "r"],
		[CompletionItemKind.Folder, labels["folder"] ?? "F"],
		[CompletionItemKind.EnumMember, labels["enumMember"] ?? "m"],
		[CompletionItemKind.Constant, labels["constant"] ?? "v"],
		[CompletionItemKind.Struct, labels["struct"] ?? "S"],
		[CompletionItemKind.Event, labels["event"] ?? "E"],
		[CompletionItemKind.Operator, labels["operator"] ?? "O"],
		[CompletionItemKind.TypeParameter, labels["typeParameter"] ?? "T"]
	]);
}
function shouldStop(bufnr, info, option) {
	let { pre } = info;
	if (pre.length === 0 || getUnicodeClass(pre[pre.length - 1]) === "space") return true;
	if (option.bufnr != bufnr || option.linenr != info.lnum) return true;
	let text = byteSlice(option.line, 0, option.col);
	if (!pre.startsWith(text)) return true;
	return false;
}
function getInput(chars, pre, asciiCharactersOnly) {
	let len = 0;
	let prev;
	for (let i = pre.length - 1; i >= 0; i--) {
		let code = pre.charCodeAt(i);
		if (!isWordCode(chars, code, asciiCharactersOnly) || prev !== void 0 && !sameScope(prev, code)) break;
		len += 1;
		prev = code;
	}
	return len == 0 ? "" : pre.slice(-len);
}
function isWordCode(chars, code, asciiCharactersOnly) {
	if (!chars.isKeywordCode(code)) return false;
	if (isLowSurrogate(code)) return false;
	if (asciiCharactersOnly && code >= 255) return false;
	return true;
}
function highlightOffset(pre, item) {
	let { filterText, abbr } = item;
	let idx = abbr.indexOf(filterText);
	if (idx == -1) return -1;
	return pre + (idx == 0 ? 0 : byteIndex(abbr, idx));
}
function emptLabelDetails(labelDetails) {
	if (!labelDetails) return true;
	return !labelDetails.detail && !labelDetails.description;
}
function isSnippetItem(item, itemDefaults) {
	return (item.insertTextFormat ?? itemDefaults.insertTextFormat) === InsertTextFormat.Snippet;
}
/**
* Snippet or have additionalTextEdits
*/
function hasAction(item, itemDefaults) {
	return isSnippetItem(item, itemDefaults) || !isFalsyOrEmpty(item.additionalTextEdits);
}
function toValidWord(snippet, excludes) {
	for (let i = 0; i < snippet.length; i++) {
		let code = snippet.charCodeAt(i);
		if (excludes.includes(code)) return snippet.slice(0, i);
	}
	return snippet;
}
function snippetToWord(text, kind) {
	if (kind === CompletionItemKind.Function || kind === CompletionItemKind.Method || kind === CompletionItemKind.Class) text = text.replace(/\(.+/, "");
	if (!text.includes(DollarSign)) return text;
	return toValidWord(new SnippetParser().text(text), INVALID_WORD_CHARS);
}
/**
* Get the word to insert, it's the word to insert from range or input start position,
* may not the actual word to insert
*/
function getWord(item, itemDefaults) {
	let { label, data, kind } = item;
	if (data && string(data.word)) return data.word;
	let textToInsert = item.textEdit ? item.textEdit.newText : item.insertText;
	if (!string(textToInsert)) return label;
	return isSnippetItem(item, itemDefaults) ? snippetToWord(textToInsert, kind) : toValidWord(textToInsert, INVALID_WORD_CHARS);
}
function getReplaceRange(item, defaultRange, character, insertMode) {
	let editRange;
	if (item.textEdit) editRange = InsertReplaceEdit.is(item.textEdit) ? item.textEdit : item.textEdit.range;
	else if (defaultRange) editRange = defaultRange;
	let range;
	if (editRange) if (Range.is(editRange)) range = editRange;
	else range = insertMode == "insert" ? editRange.insert : editRange.replace;
	if (range && number(character) && range.start.character > character) range.start.character = character;
	return range;
}
function toItemKey(item) {
	return `${item.filterText}|${item.source.name}|${item.kind ?? ""}`;
}
var INVALID_WORD_CHARS, DollarSign, QuestionMark, MAX_CODE_POINT, MAX_MRU_ITEMS, DEFAULT_HL_GROUP, highlightsMap, Converter, MruLoader;
var init_util$3 = __esmMin((() => {
	init_main$2();
	init_chars();
	init_parser();
	init_util$7();
	init_array();
	init_constants();
	init_is();
	init_map();
	init_node();
	init_object();
	init_string$1();
	INVALID_WORD_CHARS = [10, 13];
	DollarSign = "$";
	QuestionMark = "?";
	MAX_CODE_POINT = 1114111;
	MAX_MRU_ITEMS = 100;
	DEFAULT_HL_GROUP = "CocSymbolDefault";
	highlightsMap = {
		[CompletionItemKind.Text]: "CocSymbolText",
		[CompletionItemKind.Method]: "CocSymbolMethod",
		[CompletionItemKind.Function]: "CocSymbolFunction",
		[CompletionItemKind.Constructor]: "CocSymbolConstructor",
		[CompletionItemKind.Field]: "CocSymbolField",
		[CompletionItemKind.Variable]: "CocSymbolVariable",
		[CompletionItemKind.Class]: "CocSymbolClass",
		[CompletionItemKind.Interface]: "CocSymbolInterface",
		[CompletionItemKind.Module]: "CocSymbolModule",
		[CompletionItemKind.Property]: "CocSymbolProperty",
		[CompletionItemKind.Unit]: "CocSymbolUnit",
		[CompletionItemKind.Value]: "CocSymbolValue",
		[CompletionItemKind.Enum]: "CocSymbolEnum",
		[CompletionItemKind.Keyword]: "CocSymbolKeyword",
		[CompletionItemKind.Snippet]: "CocSymbolSnippet",
		[CompletionItemKind.Color]: "CocSymbolColor",
		[CompletionItemKind.File]: "CocSymbolFile",
		[CompletionItemKind.Reference]: "CocSymbolReference",
		[CompletionItemKind.Folder]: "CocSymbolFolder",
		[CompletionItemKind.EnumMember]: "CocSymbolEnumMember",
		[CompletionItemKind.Constant]: "CocSymbolConstant",
		[CompletionItemKind.Struct]: "CocSymbolStruct",
		[CompletionItemKind.Event]: "CocSymbolEvent",
		[CompletionItemKind.Operator]: "CocSymbolOperator",
		[CompletionItemKind.TypeParameter]: "CocSymbolTypeParameter"
	};
	Converter = class {
		inputStart;
		option;
		opt;
		previousCache = /* @__PURE__ */ new Map();
		postCache = /* @__PURE__ */ new Map();
		character;
		minCharacter = Number.MAX_SAFE_INTEGER;
		inputLen;
		constructor(inputStart, option, opt) {
			this.inputStart = inputStart;
			this.option = option;
			this.opt = opt;
			this.character = opt.position.character;
			this.inputLen = opt.position.character - inputStart;
		}
		/**
		* Text before input to replace
		*/
		getPrevious(character) {
			if (this.previousCache.has(character)) return this.previousCache.get(character);
			let prev = this.opt.line.slice(character, this.inputStart);
			this.previousCache.set(character, prev);
			return prev;
		}
		/**
		* Text after cursor to replace
		*/
		getAfter(character) {
			if (this.postCache.has(character)) return this.postCache.get(character);
			let text = this.opt.line.slice(this.character, character);
			this.postCache.set(character, text);
			return text;
		}
		/**
		* Exclude follow characters to replace from end of word
		*/
		fixFollow(word, isSnippet, endCharacter) {
			if (isSnippet || endCharacter <= this.character) return word;
			let toReplace = this.getAfter(endCharacter);
			if (word.length - this.inputLen > toReplace.length && word.endsWith(toReplace)) return word.slice(0, -toReplace.length);
			return word;
		}
		/**
		* Better filter text with prefix before input removed if exists.
		*/
		getDelta(filterText, character) {
			if (character < this.inputStart) {
				let prev = this.getPrevious(character);
				if (filterText.startsWith(prev)) return prev.length;
			}
			return 0;
		}
		convertToDurationItem(item) {
			if (isCompletionItem(item)) return this.convertLspCompleteItem(item);
			else if (string(item.word)) return this.convertVimCompleteItem(item);
		}
		convertVimCompleteItem(item) {
			const { option } = this;
			const { range, asciiMatch } = option;
			const word = toText(item.word);
			const character = range.start.character;
			this.minCharacter = Math.min(this.minCharacter, character);
			let filterText = item.filterText ?? word;
			filterText = asciiMatch ? unidecode(filterText) : filterText;
			const delta = this.getDelta(filterText, character);
			return {
				word: this.fixFollow(word, item.isSnippet, range.end.character),
				abbr: item.abbr ?? word,
				filterText,
				delta,
				character,
				dup: item.dup === 1,
				menu: item.menu,
				kind: item.kind,
				isSnippet: !!item.isSnippet,
				insertText: item.insertText,
				preselect: item.preselect,
				sortText: item.sortText,
				deprecated: item.deprecated,
				detail: item.detail,
				labelDetails: item.labelDetails,
				get source() {
					return option.source;
				},
				get priority() {
					return option.source.priority ?? 99;
				},
				get shortcut() {
					return toText(option.source.shortcut);
				}
			};
		}
		convertLspCompleteItem(item) {
			const { option, inputStart } = this;
			const label = item.label.trim();
			const itemDefaults = toObject(option.itemDefaults);
			const word = getWord(item, itemDefaults);
			const range = getReplaceRange(item, itemDefaults?.editRange, inputStart, this.option.insertMode) ?? option.range;
			const character = range.start.character;
			const data = toObject(item.data);
			const filterText = item.filterText ?? item.label;
			const delta = this.getDelta(filterText, character);
			let obj = {
				word: this.fixFollow(word, isSnippetItem(item, itemDefaults), range.end.character),
				abbr: label,
				character,
				delta,
				kind: item.kind,
				detail: item.detail,
				sortText: item.sortText,
				filterText,
				preselect: item.preselect === true,
				deprecated: item.deprecated === true || item.tags?.includes(CompletionItemTag.Deprecated),
				isSnippet: hasAction(item, itemDefaults),
				get source() {
					return option.source;
				},
				get priority() {
					return option.priority;
				},
				get shortcut() {
					return toText(option.source.shortcut);
				},
				dup: data.dup !== 0
			};
			this.minCharacter = Math.min(this.minCharacter, character);
			if (data.optional && !obj.abbr.endsWith(QuestionMark)) obj.abbr += QuestionMark;
			if (!emptLabelDetails(item.labelDetails)) obj.labelDetails = item.labelDetails;
			if (number(item["score"]) && !obj.sortText) obj.sortText = String.fromCodePoint(MAX_CODE_POINT - Math.round(item["score"]));
			return obj;
		}
	};
	MruLoader = class {
		max = 0;
		items = new LRUCache(MAX_MRU_ITEMS);
		itemsNoPrefix = new LRUCache(MAX_MRU_ITEMS);
		getScore(input, item, selection) {
			let key = toItemKey(item);
			if (input.length == 0) return this.itemsNoPrefix.get(key) ?? -1;
			if (selection === "recentlyUsedByPrefix") key = `${input}|${key}`;
			return (selection === "recentlyUsed" ? this.itemsNoPrefix : this.items).get(key) ?? -1;
		}
		add(prefix, item) {
			if (!number(item.kind)) return;
			let key = toItemKey(item);
			if (!item.filterText.startsWith(prefix)) prefix = "";
			let line = `${prefix}|${key}`;
			this.items.set(line, this.max);
			this.itemsNoPrefix.set(key, this.max);
			this.max += 1;
		}
		clear() {
			this.max = 0;
			this.items.clear();
			this.itemsNoPrefix.clear();
		}
	};
}));
//#endregion
//#region src/completion/source-language.ts
function getUltisnipOption(item) {
	let opts = item.data?.ultisnip === true ? {} : item.data?.ultisnip;
	return opts ? opts : void 0;
}
function fixIndent(line, currline, range) {
	let oldIndent = line.match(/^\s*/)[0];
	let newIndent = currline.match(/^\s*/)[0];
	if (oldIndent === newIndent) return 0;
	let d = newIndent.length - oldIndent.length;
	range.start.character += d;
	range.end.character += d;
	return d;
}
function fixTextEdit(character, edit) {
	if (TextEdit.is(edit)) {
		if (character < edit.range.start.character) edit.range.start.character = character;
	}
	if (InsertReplaceEdit.is(edit)) {
		if (character < edit.insert.start.character) edit.insert.start.character = character;
		if (character < edit.replace.start.character) edit.replace.start.character = character;
	}
	return edit;
}
var logger$24, LanguageSource;
var init_source_language = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_ui$2();
	init_logger$2();
	init_manager$1();
	init_util$7();
	init_array();
	init_errors();
	init_is();
	init_object();
	init_protocol();
	init_string$1();
	init_workspace$1();
	init_util$3();
	logger$24 = createLogger$1("source-language");
	LanguageSource = class {
		name;
		shortcut;
		provider;
		documentSelector;
		triggerCharacters;
		allCommitCharacters;
		priority;
		sourceType = 2;
		_enabled = true;
		itemDefaults = {};
		hasDefaultRange;
		triggerContext;
		resolving = /* @__PURE__ */ new WeakMap();
		constructor(name, shortcut, provider, documentSelector, triggerCharacters, allCommitCharacters, priority) {
			this.name = name;
			this.shortcut = shortcut;
			this.provider = provider;
			this.documentSelector = documentSelector;
			this.triggerCharacters = triggerCharacters;
			this.allCommitCharacters = allCommitCharacters;
			this.priority = priority;
		}
		get enable() {
			return this._enabled;
		}
		toggle() {
			this._enabled = !this._enabled;
		}
		shouldCommit(item, character) {
			if (this.allCommitCharacters.includes(character)) return true;
			return toArray(item.commitCharacters ?? this.itemDefaults.commitCharacters).includes(character);
		}
		async doComplete(option, token) {
			let { triggerCharacter, bufnr, position } = option;
			let triggerKind = this.getTriggerKind(option);
			this.triggerContext = {
				lnum: position.line,
				character: position.character,
				line: option.line
			};
			let context = {
				triggerKind,
				option
			};
			if (triggerKind == import_main$1.CompletionTriggerKind.TriggerCharacter) context.triggerCharacter = triggerCharacter;
			let textDocument = workspace_default.getDocument(bufnr).textDocument;
			await waitImmediate$1();
			let result = await Promise.resolve(this.provider.provideCompletionItems(textDocument, position, token, context));
			if (!result || token.isCancellationRequested) return null;
			let completeItems = Array.isArray(result) ? result : result.items;
			if (!completeItems || completeItems.length == 0) return null;
			let itemDefaults = this.itemDefaults = toObject(result["itemDefaults"]);
			let isIncomplete = isCompletionList(result) ? result.isIncomplete === true : false;
			this.hasDefaultRange = isEditRange(itemDefaults.editRange);
			return {
				isIncomplete,
				items: completeItems,
				itemDefaults
			};
		}
		onCompleteResolve(item, opt, token) {
			if (!func(this.provider.resolveCompletionItem)) return;
			let promise = this.resolving.get(item);
			if (promise) return promise;
			let invalid = false;
			promise = new Promise(async (resolve, reject) => {
				let disposable = token.onCancellationRequested(() => {
					this.resolving.delete(item);
					reject(new CancellationError());
				});
				try {
					let resolved = await Promise.resolve(this.provider.resolveCompletionItem(item, token));
					disposable.dispose();
					if (!token.isCancellationRequested) if (!resolved) {
						invalid = true;
						this.resolving.delete(item);
					} else {
						if (resolved.textEdit) resolved.textEdit = fixTextEdit(characterIndex(opt.line, opt.col), resolved.textEdit);
						Object.assign(item, resolved);
					}
					resolve();
				} catch (e) {
					invalid = true;
					this.resolving.delete(item);
					reject(e);
				}
			});
			if (!invalid) this.resolving.set(item, promise);
			return promise;
		}
		async onCompleteDone(item, opt) {
			let doc = workspace_default.getDocument(opt.bufnr);
			await doc.patchChange();
			let additionalEdits = !isFalsyOrEmpty(item.additionalTextEdits);
			let version = doc.version;
			let isSnippet = await this.applyTextEdit(doc, additionalEdits, item, opt);
			if (additionalEdits) {
				let move = !isSnippet;
				if (isSnippet) {
					let pos = await getLineAndPosition(workspace_default.nvim);
					move = Position.create(pos.line, pos.character);
				}
				await doc.applyEdits(item.additionalTextEdits, doc.version != version, move);
				if (isSnippet) await manager_default.selectCurrentPlaceholder();
			}
			if (item.command) if (commands_default.has(item.command.command)) commands_default.execute(item.command);
			else logger$24.warn(`Command "${item.command.command}" not registered to coc.nvim`);
		}
		async applyTextEdit(doc, additionalEdits, item, option) {
			let { linenr, col } = option;
			let { character, line } = this.triggerContext;
			let pos = await getLineAndPosition(workspace_default.nvim);
			if (pos.line != linenr - 1) return;
			let { textEdit, textEditText, insertText, label } = item;
			let range = getReplaceRange(item, this.itemDefaults?.editRange, void 0, option.insertMode);
			if (!range) {
				let end = character + (option.insertMode == "insert" ? 0 : option.followWord.length);
				range = Range.create(pos.line, characterIndex(line, col), pos.line, end);
			}
			let invalidRangeEnd = range.end.character < character;
			if (invalidRangeEnd) range.end.character = character;
			let newText = textEdit ? textEdit.newText : (textEditText && this.hasDefaultRange ? textEditText : insertText) ?? label;
			let indentCount = fixIndent(line, pos.text, range);
			let delta = pos.character - character - indentCount;
			if (delta !== 0) range.end.character += delta;
			let next = pos.text[range.end.character];
			if (invalidRangeEnd && next && newText.endsWith(next) && pariedCharacters.get(newText[0]) === next) range.end.character += 1;
			if (option.snippetsSupport !== false && isSnippetItem(item, this.itemDefaults)) {
				let opts = getUltisnipOption(item);
				let insertTextMode = item.insertTextMode ?? this.itemDefaults.insertTextMode;
				return await manager_default.insertSnippet(newText, !additionalEdits, range, insertTextMode, opts);
			}
			await doc.applyEdits([TextEdit.replace(range, newText)], false, pos);
			return false;
		}
		getTriggerKind(opt) {
			let { triggerCharacters } = this;
			let isTrigger = triggerCharacters.includes(opt.triggerCharacter);
			let triggerKind = import_main$1.CompletionTriggerKind.Invoked;
			if (opt.triggerForInComplete) triggerKind = import_main$1.CompletionTriggerKind.TriggerForIncompleteCompletions;
			else if (isTrigger) triggerKind = import_main$1.CompletionTriggerKind.TriggerCharacter;
			return triggerKind;
		}
	};
}));
//#endregion
//#region src/completion/source-vim.ts
function getMethodName(name, names) {
	if (names.includes(name)) return name;
	let key = name[0].toUpperCase() + name.slice(1);
	if (names.includes(key)) return key;
	throw new Error(`${name} not exists`);
}
function checkInclude(name, fns) {
	if (fns.includes(name)) return true;
	let key = name[0].toUpperCase() + name.slice(1);
	return fns.includes(key);
}
var VimSource;
var init_source_vim = __esmMin((() => {
	init_main$2();
	init_ui$2();
	init_manager$1();
	init_string$1();
	init_workspace$1();
	init_source();
	init_is();
	VimSource = class extends Source {
		async callOptionalFunc(fname, args, isNotify = false) {
			if (!checkInclude(fname, this.remoteFns)) return null;
			let name = `coc#source#${this.name}#${getMethodName(fname, this.remoteFns)}`;
			if (isNotify) return this.nvim.call(name, args, true);
			return await this.nvim.call(name, args);
		}
		async checkComplete(opt) {
			if (!await super.checkComplete(opt)) return false;
			if (!checkInclude("should_complete", this.remoteFns)) return true;
			return !!await this.callOptionalFunc("should_complete", [opt]);
		}
		async refresh() {
			await this.callOptionalFunc("refresh", []);
		}
		async insertSnippet(insertText, opt) {
			let pos = await getLineAndPosition(this.nvim);
			let { line, col } = opt;
			let oldIndent = line.match(/^\s*/)[0];
			let newIndent = pos.text.match(/^\s*/)[0];
			let range = Range.create(pos.line, characterIndex(line, col) + newIndent.length - oldIndent.length, pos.line, pos.character);
			await manager_default.insertSnippet(insertText, true, range);
		}
		async onCompleteDone(item, opt) {
			if (checkInclude("on_complete", this.remoteFns)) await this.callOptionalFunc("on_complete", [item], true);
			else if (item.isSnippet && item.insertText) await this.insertSnippet(item.insertText, opt);
		}
		onEnter(bufnr) {
			let doc = workspace_default.getDocument(bufnr);
			if (!doc || !checkInclude("on_enter", this.remoteFns)) return;
			let { filetypes } = this;
			if (filetypes && !filetypes.includes(doc.filetype)) return;
			this.callOptionalFunc("on_enter", [{
				bufnr,
				uri: doc.uri,
				languageId: doc.filetype
			}], true);
		}
		async doComplete(opt, token) {
			if (!await this.checkComplete(opt)) return null;
			let startcol = await this.callOptionalFunc("get_startcol", [opt]);
			if (token.isCancellationRequested) return null;
			let { col, input, line, colnr } = opt;
			if (number(startcol) && startcol >= 0 && startcol !== col) {
				input = byteSlice(line, startcol, colnr - 1);
				opt = Object.assign({}, opt, {
					col: startcol,
					changed: col - startcol,
					input
				});
			}
			const vim9 = this.remoteFns.includes("Complete");
			let vimItems = await this.nvim.callAsync("coc#_do_complete", [this.name, {
				...opt,
				vim9
			}]);
			if (!vimItems || vimItems.length == 0 || token.isCancellationRequested) return null;
			let checkFirst = this.firstMatch && input.length > 0;
			let inputFirst = checkFirst ? input[0].toLowerCase() : "";
			let items = [];
			vimItems.forEach((item) => {
				let obj = string(item) ? { word: item } : item;
				if (checkFirst) {
					let ch = (obj.filterText ?? obj.word)[0];
					if (inputFirst && ch.toLowerCase() !== inputFirst) return;
				}
				if (this.isSnippet) obj.isSnippet = true;
				items.push(obj);
			});
			return {
				items,
				startcol: number(startcol) ? startcol : void 0
			};
		}
	};
}));
//#endregion
//#region src/completion/native/around.ts
var around_exports = /* @__PURE__ */ __exportAll({
	Around: () => Around,
	register: () => register$2
});
function register$2(sourceMap, keywords) {
	let source = new Around(keywords);
	sourceMap.set("around", source);
}
var Around;
var init_around = __esmMin((() => {
	init_util$7();
	init_source();
	Around = class extends Source {
		keywords;
		constructor(keywords) {
			super({
				name: "around",
				filepath: __filename
			});
			this.keywords = keywords;
		}
		async doComplete(opt, token) {
			if (!await this.checkComplete(opt)) return null;
			let { bufnr, input, word, linenr, triggerForInComplete } = opt;
			if (input.length === 0) return null;
			await waitImmediate$1();
			let buf = this.keywords.getItem(bufnr);
			if (!buf) return null;
			if (!triggerForInComplete) this.noMatchWords = /* @__PURE__ */ new Set();
			if (token.isCancellationRequested) return null;
			let iterable = buf.matchWords(linenr - 1);
			let items = /* @__PURE__ */ new Set();
			return {
				isIncomplete: await this.getResults([iterable], input, word, items, token),
				items: Array.from(items, (word) => ({ word }))
			};
		}
	};
}));
//#endregion
//#region src/completion/native/buffer.ts
var buffer_exports = /* @__PURE__ */ __exportAll({
	Buffer: () => Buffer$1,
	register: () => register$1
});
function register$1(sourceMap, keywords) {
	let source = new Buffer$1(keywords);
	sourceMap.set("buffer", source);
}
var Buffer$1;
var init_buffer$5 = __esmMin((() => {
	init_util$7();
	init_source();
	Buffer$1 = class extends Source {
		keywords;
		constructor(keywords) {
			super({
				name: "buffer",
				filepath: __filename
			});
			this.keywords = keywords;
		}
		get ignoreGitignore() {
			return this.getConfig("ignoreGitignore", true);
		}
		async doComplete(opt, token) {
			if (!await this.checkComplete(opt)) return null;
			let { bufnr, input, word, triggerForInComplete } = opt;
			if (input.length === 0) return null;
			await waitImmediate$1();
			if (!triggerForInComplete) this.noMatchWords = /* @__PURE__ */ new Set();
			if (token.isCancellationRequested) return null;
			let iterables = [];
			for (let buf of this.keywords.items) {
				if (buf.bufnr === bufnr || this.ignoreGitignore && buf.gitIgnored) continue;
				iterables.push(buf.matchWords(0));
			}
			let items = /* @__PURE__ */ new Set();
			return {
				isIncomplete: await this.getResults(iterables, input, word, items, token),
				items: Array.from(items).map((s) => {
					return { word: s };
				})
			};
		}
	};
}));
//#endregion
//#region src/completion/native/file.ts
var file_exports = /* @__PURE__ */ __exportAll({
	File: () => File,
	filterFiles: () => filterFiles,
	getDirectory: () => getDirectory,
	getFileItem: () => getFileItem,
	getItemsFromRoot: () => getItemsFromRoot,
	getLastPart: () => getLastPart,
	register: () => register,
	resolveEnvVariables: () => resolveEnvVariables
});
function resolveEnvVariables(str, env = process.env) {
	let replaced = str;
	replaced = replaced.replace(/%([^%]+)%/g, (m, n) => env[n] ?? m);
	replaced = replaced.replace(/\$([A-Z_]+[A-Z0-9_]*)|\${([A-Z0-9_]*)}/gi, (m, a, b) => env[a || b] ?? m);
	return replaced;
}
function getLastPart(text) {
	let begin = text.length - 1;
	while (begin >= 0) {
		let curr = text[begin];
		if (invalid_characters.has(curr)) {
			begin++;
			break;
		}
		if (curr == " " && text[begin - 1] !== "\\") {
			begin++;
			break;
		}
		if (begin == 0) break;
		begin--;
	}
	if (begin >= text.length) return null;
	return text.slice(begin);
}
async function getFileItem(root, filename) {
	let stat = await statAsync(path$5.join(root, filename));
	if (stat) {
		let dir = stat.isDirectory();
		return {
			word: filename,
			abbr: dir ? filename + "/" : filename,
			kind: dir ? CompletionItemKind.Folder : CompletionItemKind.File
		};
	}
	return null;
}
function filterFiles(files, ignoreHidden, ignorePatterns = []) {
	return files.filter((f) => {
		if (!f || ignoreHidden && f.startsWith(".")) return false;
		for (let p of ignorePatterns) if (minimatch(f, p, { dot: true })) return false;
		return true;
	});
}
function getDirectory(pathstr, root) {
	let part = /[\\/]$/.test(pathstr) ? pathstr : path$5.dirname(pathstr);
	return path$5.isAbsolute(pathstr) ? part : path$5.join(root, part);
}
async function getItemsFromRoot(pathstr, root, ignoreHidden, ignorePatterns) {
	let res = [];
	let dir = getDirectory(pathstr, root);
	let stat = await statAsync(dir);
	if (stat && stat.isDirectory()) {
		let files = await fs$6.promises.readdir(dir);
		files = filterFiles(files, ignoreHidden, ignorePatterns);
		let items = await Promise.all(files.map((filename) => getFileItem(dir, filename)));
		res = res.concat(items);
	}
	res = res.filter((item) => item != null);
	return res;
}
function register(sourceMap) {
	sourceMap.set("file", new File(isWindows));
}
var pathRe, invalid_characters, File;
var init_file = __esmMin((() => {
	init_main$2();
	init_fs();
	init_node();
	init_platform();
	init_string$1();
	init_workspace$1();
	init_source();
	pathRe = /(?:\.{0,2}|~|\$HOME|([\w]+)|[a-zA-Z]:|)(\/|\\+)(?:[\u4E00-\u9FA5\u00A0-\u024F\w .@()-]+(\/|\\+))*(?:[\u4E00-\u9FA5\u00A0-\u024F\w .@()-])*$/;
	invalid_characters = new Set([
		"#",
		"<",
		"$",
		"+",
		"%",
		">",
		"!",
		"`",
		"&",
		"*",
		"'",
		"|",
		"{",
		"?",
		"\"",
		"=",
		"}",
		"@"
	]);
	File = class extends Source {
		isWindows;
		constructor(isWindows) {
			super({
				name: "file",
				filepath: __filename
			});
			this.isWindows = isWindows;
		}
		get triggerCharacters() {
			let characters = this.getConfig("triggerCharacters", []);
			return this.isWindows ? characters : characters.filter((s) => s != "\\");
		}
		getPathOption(opt) {
			let { line, colnr } = opt;
			let part = resolveEnvVariables(byteSlice(line, 0, colnr - 1));
			let filepath = getLastPart(part);
			if (!filepath || filepath.endsWith("//")) return null;
			let ms = part.match(pathRe);
			if (ms && ms.length) {
				const pathstr = workspace_default.expand(ms[0]);
				let input = ms[0].match(/[^/\\]*$/)[0];
				return {
					pathstr,
					part: ms[1],
					startcol: colnr - input.length - 1,
					input
				};
			}
			return null;
		}
		shouldTrim(ext) {
			return this.getConfig("trimSameExts", []).includes(ext);
		}
		async getRoot(pathstr, part, filepath, cwd) {
			let root;
			let dirname = filepath ? path$5.dirname(filepath) : "";
			if (pathstr.startsWith(".")) root = filepath ? dirname : cwd;
			else if (this.isWindows && /^\w+:/.test(pathstr)) root = /[\\/]$/.test(pathstr) ? pathstr : path$5.win32.dirname(pathstr);
			else if (!this.isWindows && pathstr.startsWith("/")) root = pathstr.endsWith("/") ? pathstr : path$5.posix.dirname(pathstr);
			else if (part) {
				let exists = await fs$6.promises.access(path$5.join(dirname, part)).then(() => true, () => false);
				if (exists) root = dirname;
				else {
					exists = await fs$6.promises.access(path$5.join(cwd, part)).then(() => true, () => false);
					if (exists) root = cwd;
				}
			} else root = cwd;
			return root;
		}
		async doComplete(opt, token) {
			if (!await this.checkComplete(opt)) return null;
			let { filepath } = opt;
			let option = this.getPathOption(opt);
			if (!option || option.startcol < opt.col) return null;
			let { pathstr, part, startcol } = option;
			let startPart = opt.col == startcol ? "" : byteSlice(opt.line, opt.col, startcol);
			let ext = path$5.extname(path$5.basename(filepath));
			let cwd = await this.nvim.call("getcwd", []);
			let root = await this.getRoot(pathstr, part, filepath, cwd);
			if (!root || token.isCancellationRequested) return null;
			let items = await getItemsFromRoot(pathstr, root, this.getConfig("ignoreHidden", true), this.getConfig("ignorePatterns", []));
			let trimExt = this.shouldTrim(ext);
			return { items: items.map((item) => {
				let ex = path$5.extname(item.word);
				item.word = trimExt && ex === ext ? item.word.replace(ext, "") : item.word;
				return {
					word: `${startPart}${item.word}`,
					abbr: `${startPart}${item.abbr}`,
					menu: this.menu
				};
			}) };
		}
	};
}));
//#endregion
//#region src/completion/sources.ts
var sources_exports = /* @__PURE__ */ __exportAll({
	Sources: () => Sources,
	default: () => sources_default,
	getSourceType: () => getSourceType,
	logError: () => logError
});
function logError(err) {
	logger$23.error("Error on source create", err);
}
function getSourceType(sourceType) {
	if (sourceType === 0) return "native";
	if (sourceType === 1) return "remote";
	return "service";
}
var logger$23, Sources, sources_default;
var init_sources = __esmMin((() => {
	init_events();
	init_extension();
	init_logger$2();
	init_util$7();
	init_array();
	init_fs();
	init_is();
	init_node();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	init_keywords();
	init_source();
	init_source_language();
	init_source_vim();
	init_util$3();
	logger$23 = createLogger$1("sources");
	Sources = class {
		sourceMap = /* @__PURE__ */ new Map();
		disposables = [];
		remoteSourcePaths = [];
		keywords;
		init() {
			this.keywords = workspace_default.registerBufferSync((doc) => {
				return new KeywordsBuffer(doc, workspace_default.getConfiguration("suggest", doc).get("segmenterLocales"));
			});
			this.createNativeSources();
			this.createRemoteSources();
			events_default.on("BufEnter", this.onDocumentEnter, this, this.disposables);
			events_default.on("CompleteDone", (_item, linenr, bufnr) => {
				let item = this.keywords.getItem(bufnr);
				if (item) item.onCompleteDone(linenr - 1);
			}, null, this.disposables);
			workspace_default.onDidRuntimePathChange((newPaths) => {
				for (let p of newPaths) this.createVimSources(p).catch(logError);
			}, null, this.disposables);
		}
		get nvim() {
			return workspace_default.nvim;
		}
		getKeywordsBuffer(bufnr) {
			return this.keywords.getItem(bufnr);
		}
		createNativeSources() {
			Promise.all([
				Promise.resolve().then(() => (init_util$4(), util_exports)).then((m) => this.sourceMap.set(m.wordsSource.name, m.wordsSource)),
				Promise.resolve().then(() => (init_around(), around_exports)).then((module) => {
					module.register(this.sourceMap, this.keywords);
				}),
				Promise.resolve().then(() => (init_buffer$5(), buffer_exports)).then((module) => {
					module.register(this.sourceMap, this.keywords);
				}),
				Promise.resolve().then(() => (init_file(), file_exports)).then((module) => {
					module.register(this.sourceMap);
				})
			]);
		}
		createLanguageSource(name, shortcut, selector, provider, triggerCharacters, priority, allCommitCharacters) {
			let source = new LanguageSource(name, shortcut, provider, selector, toArray(triggerCharacters), toArray(allCommitCharacters), priority);
			logger$23.trace("created service source", name);
			this.sourceMap.set(name, source);
			return { dispose: () => {
				this.sourceMap.delete(name);
			} };
		}
		async createVimSourceExtension(filepath) {
			let { nvim } = this;
			try {
				let name = path$5.basename(filepath, ".vim");
				await nvim.command(`source ${filepath.split(path$5.sep).join(path$5.posix.sep)}`);
				let fns = await nvim.call("coc#_remote_fns", name);
				let lowercased = fns.map((fn) => fn[0].toLowerCase() + fn.slice(1));
				for (let fn of ["init", "complete"]) if (!lowercased.includes(fn)) throw new Error(`function "coc#source#${name}#${fn}" not found`);
				let props = await nvim.call(`coc#source#${name}#${getMethodName("init", fns)}`, []);
				let packageJSON = {
					name: `coc-vim-source-${name}`,
					engines: { coc: ">= 0.0.1" },
					activationEvents: props.filetypes ? props.filetypes.map((f) => `onLanguage:${f}`) : ["*"],
					contributes: { configuration: { properties: {
						[`coc.source.${name}.enable`]: {
							type: "boolean",
							default: true
						},
						[`coc.source.${name}.firstMatch`]: {
							type: "boolean",
							default: !!props.firstMatch
						},
						[`coc.source.${name}.triggerCharacters`]: {
							type: "number",
							default: props.triggerCharacters ?? []
						},
						[`coc.source.${name}.priority`]: {
							type: "number",
							default: props.priority ?? 9
						},
						[`coc.source.${name}.shortcut`]: {
							type: "string",
							default: props.shortcut ?? name.slice(0, 3).toUpperCase(),
							description: "Shortcut text shown in complete menu."
						},
						[`coc.source.${name}.disableSyntaxes`]: {
							type: "array",
							default: [],
							items: { type: "string" }
						},
						[`coc.source.${name}.filetypes`]: {
							type: "array",
							default: props.filetypes || null,
							description: "Enabled filetypes.",
							items: { type: "string" }
						}
					} } }
				};
				let isActive = false;
				let extension = {
					id: packageJSON.name,
					packageJSON,
					exports: void 0,
					extensionPath: filepath,
					activate: () => {
						isActive = true;
						let source = new VimSource({
							name,
							filepath,
							isSnippet: props.isSnippet,
							sourceType: 1,
							triggerOnly: !!props.triggerOnly,
							remoteFns: fns
						});
						this.addSource(source);
						return Promise.resolve();
					}
				};
				Object.defineProperty(extension, "isActive", { get: () => isActive });
				await extension_default.manager.registerInternalExtension(extension, () => {
					isActive = false;
					this.removeSource(name);
				});
			} catch (e) {
				if (!this.nvim.isVim) {
					let lines = await readFileLines(filepath, 0, 1);
					if (lines.length > 0 && lines[0].startsWith("vim9script")) return;
				}
				window_default.showErrorMessage(`Error on create vim source from ${filepath}: ${e}`);
				logger$23.error(`Error on create vim source from ${filepath}`, e);
			}
		}
		createRemoteSources() {
			let paths = workspace_default.env.runtimepath.split(",");
			for (let path of paths) this.createVimSources(path).catch(logError);
		}
		async createVimSources(pluginPath) {
			if (this.remoteSourcePaths.includes(pluginPath) || !pluginPath) return;
			this.remoteSourcePaths.push(pluginPath);
			let folder = path$5.join(pluginPath, "autoload/coc/source");
			let stat = await statAsync(folder);
			if (stat && stat.isDirectory()) {
				let files = (await fs$6.promises.readdir(folder)).filter((s) => s.endsWith(".vim")).map((s) => path$5.join(folder, s));
				await Promise.allSettled(files.map((p) => this.createVimSourceExtension(p)));
			}
		}
		get names() {
			return Array.from(this.sourceMap.keys());
		}
		get sources() {
			return Array.from(this.sourceMap.values());
		}
		has(name) {
			return this.names.findIndex((o) => o == name) != -1;
		}
		getSource(name) {
			return this.sourceMap.get(name) ?? null;
		}
		shouldCommit(source, item, commitCharacter) {
			if (!item || source == null || commitCharacter.length === 0) return false;
			if (func(source.shouldCommit)) return source.shouldCommit(item, commitCharacter);
			return false;
		}
		getSources(opt) {
			let { source } = opt;
			if (source) return toArray(this.getSource(source));
			let uri = workspace_default.getUri(opt.bufnr);
			return this.getNormalSources(opt.filetype, uri);
		}
		/**
		* Get sources should be used without trigger.
		* @param {string} filetype
		* @returns {ISource[]}
		*/
		getNormalSources(filetype, uri) {
			let languageIds = filetype.split(".");
			return this.sources.filter((source) => {
				let { filetypes, triggerOnly, documentSelector, enable } = source;
				if (!enable || triggerOnly || filetypes && !intersect(filetypes, languageIds)) return false;
				if (documentSelector && languageIds.every((filetype) => workspace_default.match(documentSelector, {
					uri,
					languageId: filetype
				}) == 0)) return false;
				return true;
			});
		}
		checkTrigger(source, pre, character) {
			let { triggerCharacters, triggerPatterns } = source;
			if (!isFalsyOrEmpty(triggerCharacters) && triggerCharacters.includes(character)) return true;
			if (!isFalsyOrEmpty(triggerPatterns) && triggerPatterns.findIndex((p) => p.test(pre)) !== -1) return true;
			return false;
		}
		shouldTrigger(pre, filetype, uri) {
			return this.getTriggerSources(pre, filetype, uri).length > 0;
		}
		getTriggerSources(pre, filetype, uri, disabled = []) {
			if (!pre) return [];
			let character = pre[pre.length - 1];
			let languageIds = filetype.split(".");
			return this.sources.filter((source) => {
				let { filetypes, enable, documentSelector, name } = source;
				if (disabled.includes(name)) return false;
				if (!enable || Array.isArray(filetypes) && !intersect(filetypes, languageIds)) return false;
				if (documentSelector && languageIds.every((languageId) => workspace_default.match(documentSelector, {
					uri,
					languageId
				}) == 0)) return false;
				return this.checkTrigger(source, pre, character);
			});
		}
		addSource(source) {
			let { name } = source;
			if (this.names.includes(name)) logger$23.warn(`Recreate source ${name}`);
			this.sourceMap.set(name, source);
			return import_main$1.Disposable.create(() => {
				this.removeSource(source);
			});
		}
		removeSource(source) {
			let name = typeof source == "string" ? source : source.name;
			let obj = typeof source === "string" ? this.sourceMap.get(source) : source;
			if (obj && typeof obj.dispose === "function") obj.dispose();
			this.sourceMap.delete(name);
		}
		async refresh(name) {
			for (let source of this.sources) if (!name || source.name == name) {
				if (typeof source.refresh === "function") await Promise.resolve(source.refresh());
			}
		}
		toggleSource(name) {
			let source = this.getSource(name);
			if (source && typeof source.toggle === "function") source.toggle();
		}
		sourceStats() {
			let stats = [];
			let languageSourcePriority = workspace_default.initialConfiguration.get("suggest.languageSourcePriority");
			for (let item of this.sourceMap.values()) {
				if (item.name === "$words") continue;
				stats.push({
					name: item.name,
					priority: getPriority(item, languageSourcePriority),
					triggerCharacters: toArray(item.triggerCharacters),
					shortcut: toText(item.shortcut),
					filetypes: toArray(item.filetypes ?? item.documentSelector?.map((o) => string(o) ? o : o.language)),
					filepath: toText(item.filepath),
					type: getSourceType(item.sourceType),
					disabled: !item.enable
				});
			}
			return stats;
		}
		onDocumentEnter(bufnr) {
			let { sources } = this;
			for (let s of sources) if (s.enable && func(s.onEnter)) s.onEnter(bufnr);
		}
		createSource(config) {
			if (typeof config.name !== "string" || typeof config.doComplete !== "function") {
				logger$23.error(`Bad config for createSource:`, config);
				throw new TypeError(`name and doComplete required for createSource`);
			}
			let source = new Source(Object.assign({ sourceType: 2 }, config));
			return this.addSource(source);
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
	sources_default = new Sources();
}));
//#endregion
//#region src/languages.ts
var eventDebounce, ProviderName, Languages, languages_default;
var init_languages = __esmMin((() => {
	init_main$2();
	init_manager$4();
	init_callHierarchyManager();
	init_codeActionManager();
	init_codeLensManager();
	init_declarationManager();
	init_definitionManager();
	init_documentColorManager();
	init_documentHighlightManager();
	init_documentLinkManager();
	init_documentSymbolManager();
	init_foldingRangeManager();
	init_formatManager();
	init_formatRangeManager();
	init_hoverManager();
	init_implementationManager();
	init_inlayHintManager();
	init_inlineCompletionItemManager();
	init_inlineValueManager();
	init_linkedEditingRangeManager();
	init_onTypeFormatManager();
	init_referenceManager();
	init_renameManager();
	init_selectionRangeManager();
	init_semanticTokensManager();
	init_semanticTokensRangeManager();
	init_signatureManager();
	init_typeDefinitionManager();
	init_typeHierarchyManager();
	init_workspaceSymbolsManager();
	init_util$7();
	init_is();
	init_protocol();
	init_string$1();
	eventDebounce = getConditionValue(100, 1);
	ProviderName = /* @__PURE__ */ function(ProviderName) {
		ProviderName["FormatOnType"] = "formatOnType";
		ProviderName["Rename"] = "rename";
		ProviderName["OnTypeEdit"] = "onTypeEdit";
		ProviderName["DocumentLink"] = "documentLink";
		ProviderName["DocumentColor"] = "documentColor";
		ProviderName["FoldingRange"] = "foldingRange";
		ProviderName["Format"] = "format";
		ProviderName["CodeAction"] = "codeAction";
		ProviderName["FormatRange"] = "formatRange";
		ProviderName["Hover"] = "hover";
		ProviderName["Signature"] = "signature";
		ProviderName["WorkspaceSymbols"] = "workspaceSymbols";
		ProviderName["DocumentSymbol"] = "documentSymbol";
		ProviderName["DocumentHighlight"] = "documentHighlight";
		ProviderName["Definition"] = "definition";
		ProviderName["Declaration"] = "declaration";
		ProviderName["TypeDefinition"] = "typeDefinition";
		ProviderName["Reference"] = "reference";
		ProviderName["Implementation"] = "implementation";
		ProviderName["CodeLens"] = "codeLens";
		ProviderName["SelectionRange"] = "selectionRange";
		ProviderName["CallHierarchy"] = "callHierarchy";
		ProviderName["SemanticTokens"] = "semanticTokens";
		ProviderName["SemanticTokensRange"] = "semanticTokensRange";
		ProviderName["LinkedEditing"] = "linkedEditing";
		ProviderName["InlayHint"] = "inlayHint";
		ProviderName["InlineValue"] = "inlineValue";
		ProviderName["InlineCompletion"] = "inlineCompletion";
		ProviderName["TypeHierarchy"] = "typeHierarchy";
		return ProviderName;
	}({});
	Languages = class {
		_onDidSemanticTokensRefresh = new import_main$1.Emitter();
		_onDidFoldingRangeRefresh = new import_main$1.Emitter();
		_onDidInlayHintRefresh = new import_main$1.Emitter();
		_onDidCodeLensRefresh = new import_main$1.Emitter();
		_onDidColorsRefresh = new import_main$1.Emitter();
		_onDidLinksRefresh = new import_main$1.Emitter();
		onDidSemanticTokensRefresh = this._onDidSemanticTokensRefresh.event;
		onDidFoldingRangeRefresh = this._onDidFoldingRangeRefresh.event;
		onDidInlayHintRefresh = this._onDidInlayHintRefresh.event;
		onDidCodeLensRefresh = this._onDidCodeLensRefresh.event;
		onDidColorsRefresh = this._onDidColorsRefresh.event;
		onDidLinksRefresh = this._onDidLinksRefresh.event;
		onTypeFormatManager = new OnTypeFormatManager();
		documentLinkManager = new DocumentLinkManager();
		documentColorManager = new DocumentColorManager();
		foldingRangeManager = new FoldingRangeManager();
		renameManager = new RenameManager();
		formatManager = new FormatManager();
		codeActionManager = new CodeActionManager();
		workspaceSymbolsManager = new WorkspaceSymbolManager();
		formatRangeManager = new FormatRangeManager();
		hoverManager = new HoverManager();
		signatureManager = new SignatureManager();
		documentSymbolManager = new DocumentSymbolManager();
		documentHighlightManager = new DocumentHighlightManager();
		definitionManager = new DefinitionManager();
		declarationManager = new DeclarationManager();
		typeDefinitionManager = new TypeDefinitionManager();
		typeHierarchyManager = new TypeHierarchyManager();
		referenceManager = new ReferenceManager();
		implementationManager = new ImplementationManager();
		codeLensManager = new CodeLensManager$1();
		selectionRangeManager = new SelectionRangeManager();
		callHierarchyManager = new CallHierarchyManager();
		semanticTokensManager = new SemanticTokensManager();
		semanticTokensRangeManager = new SemanticTokensRangeManager();
		linkedEditingManager = new LinkedEditingRangeManager();
		inlayHintManager = new InlayHintManger();
		inlineCompletionItemManager = new InlineCompletionItemManager();
		inlineValueManager = new InlineValueManager();
		registerDocumentRangeFormattingEditProvider;
		registerDocumentFormattingEditProvider;
		registerReferenceProvider;
		constructor() {
			this.registerReferenceProvider = this.registerReferencesProvider;
			this.registerDocumentRangeFormattingEditProvider = this.registerDocumentRangeFormatProvider;
			this.registerDocumentFormattingEditProvider = this.registerDocumentFormatProvider;
		}
		hasFormatProvider(doc) {
			if (this.formatManager.hasProvider(doc)) return true;
			if (this.formatRangeManager.hasProvider(doc)) return true;
			return false;
		}
		registerOnTypeFormattingEditProvider(selector, provider, triggerCharacters) {
			return this.onTypeFormatManager.register(selector, provider, triggerCharacters);
		}
		registerCompletionItemProvider(name, shortcut, selector, provider, triggerCharacters = [], priority, allCommitCharacters) {
			selector = string(selector) ? [{ language: selector }] : selector;
			let sources = (init_sources(), __toCommonJS(sources_exports)).default;
			sources.removeSource(name);
			return sources.createLanguageSource(name, shortcut, selector, provider, triggerCharacters, priority, allCommitCharacters);
		}
		registerInlineCompletionItemProvider(selector, provider) {
			return this.inlineCompletionItemManager.register(selector, provider);
		}
		registerCodeActionProvider(selector, provider, clientId, codeActionKinds) {
			return this.codeActionManager.register(selector, provider, clientId, codeActionKinds);
		}
		registerHoverProvider(selector, provider) {
			return this.hoverManager.register(selector, provider);
		}
		registerSelectionRangeProvider(selector, provider) {
			return this.selectionRangeManager.register(selector, provider);
		}
		registerSignatureHelpProvider(selector, provider, triggerCharacters) {
			return this.signatureManager.register(selector, provider, triggerCharacters);
		}
		registerDocumentSymbolProvider(selector, provider, metadata) {
			if (metadata) provider.meta = metadata;
			return this.documentSymbolManager.register(selector, provider);
		}
		registerFoldingRangeProvider(selector, provider) {
			return this.registerProviderWithEvent(selector, provider, "onDidChangeFoldingRanges", this.foldingRangeManager, this._onDidFoldingRangeRefresh);
		}
		registerDocumentHighlightProvider(selector, provider) {
			return this.documentHighlightManager.register(selector, provider);
		}
		registerDocumentLinkProvider(selector, provider) {
			this._onDidLinksRefresh.fire(selector);
			let disposable = this.documentLinkManager.register(selector, provider);
			return import_main$1.Disposable.create(() => {
				disposable.dispose();
				this._onDidLinksRefresh.fire(selector);
			});
		}
		registerDocumentColorProvider(selector, provider) {
			this._onDidColorsRefresh.fire(selector);
			let disposable = this.documentColorManager.register(selector, provider);
			return import_main$1.Disposable.create(() => {
				disposable.dispose();
				this._onDidColorsRefresh.fire(selector);
			});
		}
		registerDefinitionProvider(selector, provider) {
			return this.definitionManager.register(selector, provider);
		}
		registerDeclarationProvider(selector, provider) {
			return this.declarationManager.register(selector, provider);
		}
		registerTypeDefinitionProvider(selector, provider) {
			return this.typeDefinitionManager.register(selector, provider);
		}
		registerTypeHierarchyProvider(selector, provider) {
			return this.typeHierarchyManager.register(selector, provider);
		}
		registerImplementationProvider(selector, provider) {
			return this.implementationManager.register(selector, provider);
		}
		registerReferencesProvider(selector, provider) {
			return this.referenceManager.register(selector, provider);
		}
		registerRenameProvider(selector, provider) {
			return this.renameManager.register(selector, provider);
		}
		registerWorkspaceSymbolProvider(provider) {
			if (arguments.length > 1 && func(arguments[1].provideWorkspaceSymbols)) provider = arguments[1];
			return this.workspaceSymbolsManager.register(provider);
		}
		registerDocumentFormatProvider(selector, provider, priority = 0) {
			return this.formatManager.register(selector, provider, priority);
		}
		registerDocumentRangeFormatProvider(selector, provider, priority = 0) {
			return this.formatRangeManager.register(selector, provider, priority);
		}
		registerCallHierarchyProvider(selector, provider) {
			return this.callHierarchyManager.register(selector, provider);
		}
		registerCodeLensProvider(selector, provider) {
			return this.registerProviderWithEvent(selector, provider, "onDidChangeCodeLenses", this.codeLensManager, this._onDidCodeLensRefresh);
		}
		registerDocumentSemanticTokensProvider(selector, provider, legend) {
			return this.registerProviderWithEvent(selector, provider, "onDidChangeSemanticTokens", this.semanticTokensManager, this._onDidSemanticTokensRefresh, legend);
		}
		registerDocumentRangeSemanticTokensProvider(selector, provider, legend) {
			let disposable;
			let timer = setTimeout(() => {
				disposable = this.semanticTokensRangeManager.register(selector, provider, legend);
				this._onDidSemanticTokensRefresh.fire(selector);
			}, eventDebounce);
			return import_main$1.Disposable.create(() => {
				clearTimeout(timer);
				if (disposable) {
					disposable.dispose();
					this._onDidSemanticTokensRefresh.fire(selector);
				}
			});
		}
		registerInlayHintsProvider(selector, provider) {
			return this.registerProviderWithEvent(selector, provider, "onDidChangeInlayHints", this.inlayHintManager, this._onDidInlayHintRefresh);
		}
		registerInlineValuesProvider(selector, provider) {
			return this.inlineValueManager.register(selector, provider);
		}
		registerLinkedEditingRangeProvider(selector, provider) {
			return this.linkedEditingManager.register(selector, provider);
		}
		shouldTriggerSignatureHelp(document, triggerCharacter) {
			return this.signatureManager.shouldTrigger(document, triggerCharacter);
		}
		async getHover(document, position, token) {
			return await this.hoverManager.provideHover(document, position, token);
		}
		async getSignatureHelp(document, position, token, context) {
			return await this.signatureManager.provideSignatureHelp(document, position, token, context);
		}
		async getDefinition(document, position, token) {
			return await this.definitionManager.provideDefinition(document, position, token);
		}
		async getDefinitionLinks(document, position, token) {
			return await this.definitionManager.provideDefinitionLinks(document, position, token);
		}
		async getDeclaration(document, position, token) {
			return await this.declarationManager.provideDeclaration(document, position, token);
		}
		async getTypeDefinition(document, position, token) {
			return await this.typeDefinitionManager.provideTypeDefinition(document, position, token);
		}
		async getImplementation(document, position, token) {
			return await this.implementationManager.provideImplementations(document, position, token);
		}
		async getReferences(document, context, position, token) {
			return await this.referenceManager.provideReferences(document, position, context, token);
		}
		async getDocumentSymbol(document, token) {
			return await this.documentSymbolManager.provideDocumentSymbols(document, token);
		}
		getDocumentSymbolMetadata(document) {
			return this.documentSymbolManager.getMetaData(document);
		}
		async getSelectionRanges(document, positions, token) {
			return await this.selectionRangeManager.provideSelectionRanges(document, positions, token);
		}
		async getWorkspaceSymbols(query, token) {
			return await this.workspaceSymbolsManager.provideWorkspaceSymbols(toText(query), token);
		}
		async resolveWorkspaceSymbol(symbol, token) {
			return await this.workspaceSymbolsManager.resolveWorkspaceSymbol(symbol, token);
		}
		async prepareRename(document, position, token) {
			return await this.renameManager.prepareRename(document, position, token);
		}
		async provideRenameEdits(document, position, newName, token) {
			return await this.renameManager.provideRenameEdits(document, position, newName, token);
		}
		async provideDocumentFormattingEdits(document, options, token) {
			if (!this.formatManager.hasFormatProvider(document)) {
				if (!this.formatRangeManager.hasProvider(document)) return null;
				let end = document.positionAt(document.getText().length);
				let range = Range.create(Position.create(0, 0), end);
				return await this.provideDocumentRangeFormattingEdits(document, range, options, token);
			}
			return await this.formatManager.provideDocumentFormattingEdits(document, options, token);
		}
		async provideDocumentRangeFormattingEdits(document, range, options, token) {
			return await this.formatRangeManager.provideDocumentRangeFormattingEdits(document, range, options, token);
		}
		async getCodeActions(document, range, context, token) {
			return await this.codeActionManager.provideCodeActions(document, range, context, token);
		}
		async getDocumentHighLight(document, position, token) {
			return await this.documentHighlightManager.provideDocumentHighlights(document, position, token);
		}
		async getDocumentLinks(document, token) {
			return await this.documentLinkManager.provideDocumentLinks(document, token);
		}
		async resolveDocumentLink(link, token) {
			return await this.documentLinkManager.resolveDocumentLink(link, token);
		}
		async provideDocumentColors(document, token) {
			return await this.documentColorManager.provideDocumentColors(document, token);
		}
		async provideFoldingRanges(document, context, token) {
			return await this.foldingRangeManager.provideFoldingRanges(document, context, token);
		}
		async provideColorPresentations(color, document, token) {
			return await this.documentColorManager.provideColorPresentations(color, document, token);
		}
		async provideInlineCompletionItems(document, position, context, token) {
			return this.inlineCompletionItemManager.provideInlineCompletionItems(document, position, context, token);
		}
		async getCodeLens(document, token) {
			return await this.codeLensManager.provideCodeLenses(document, token);
		}
		async resolveCodeLens(codeLens, token) {
			return await this.codeLensManager.resolveCodeLens(codeLens, token);
		}
		async resolveCodeAction(codeAction, token) {
			return await this.codeActionManager.resolveCodeAction(codeAction, token);
		}
		async provideDocumentOnTypeEdits(character, document, position, token) {
			return this.onTypeFormatManager.onCharacterType(character, document, position, token);
		}
		canFormatOnType(character, document) {
			return this.onTypeFormatManager.couldTrigger(document, character) != null;
		}
		async prepareCallHierarchy(document, position, token) {
			return this.callHierarchyManager.prepareCallHierarchy(document, position, token);
		}
		async provideIncomingCalls(document, item, token) {
			return this.callHierarchyManager.provideCallHierarchyIncomingCalls(document, item, token);
		}
		async provideOutgoingCalls(document, item, token) {
			return this.callHierarchyManager.provideCallHierarchyOutgoingCalls(document, item, token);
		}
		getLegend(document, range) {
			if (range) return this.semanticTokensRangeManager.getLegend(document);
			return this.semanticTokensManager.getLegend(document);
		}
		hasSemanticTokensEdits(document) {
			return this.semanticTokensManager.hasSemanticTokensEdits(document);
		}
		async provideDocumentSemanticTokens(document, token) {
			return this.semanticTokensManager.provideDocumentSemanticTokens(document, token);
		}
		async provideDocumentSemanticTokensEdits(document, previousResultId, token) {
			return this.semanticTokensManager.provideDocumentSemanticTokensEdits(document, previousResultId, token);
		}
		async provideDocumentRangeSemanticTokens(document, range, token) {
			return this.semanticTokensRangeManager.provideDocumentRangeSemanticTokens(document, range, token);
		}
		async provideInlayHints(document, range, token) {
			return this.inlayHintManager.provideInlayHints(document, range, token);
		}
		async resolveInlayHint(hint, token) {
			return this.inlayHintManager.resolveInlayHint(hint, token);
		}
		async provideLinkedEdits(document, position, token) {
			return this.linkedEditingManager.provideLinkedEditingRanges(document, position, token);
		}
		async provideInlineValues(document, viewPort, context, token) {
			return this.inlineValueManager.provideInlineValues(document, viewPort, context, token);
		}
		async prepareTypeHierarchy(document, position, token) {
			return this.typeHierarchyManager.prepareTypeHierarchy(document, position, token);
		}
		async provideTypeHierarchySupertypes(item, token) {
			return this.typeHierarchyManager.provideTypeHierarchySupertypes(item, token);
		}
		async provideTypeHierarchySubtypes(item, token) {
			return this.typeHierarchyManager.provideTypeHierarchySubtypes(item, token);
		}
		createDiagnosticCollection(owner) {
			return manager_default$2.create(owner);
		}
		registerProviderWithEvent(selector, provider, key, manager, emitter, extra) {
			let disposables = [];
			let timer = setTimeout(() => {
				disposables.push(manager.register(selector, provider, extra));
				emitter.fire(selector);
				if (func(provider[key])) disposables.push(provider[key](() => {
					emitter.fire(selector);
				}));
			}, eventDebounce);
			return import_main$1.Disposable.create(() => {
				clearTimeout(timer);
				let registered = disposables.length > 0;
				disposeAll(disposables);
				if (registered) emitter.fire(selector);
			});
		}
		hasProvider(id, document) {
			switch (id) {
				case "onTypeEdit":
				case "formatOnType": return this.onTypeFormatManager.hasProvider(document);
				case "rename": return this.renameManager.hasProvider(document);
				case "documentLink": return this.documentLinkManager.hasProvider(document);
				case "documentColor": return this.documentColorManager.hasProvider(document);
				case "foldingRange": return this.foldingRangeManager.hasProvider(document);
				case "format": return this.formatManager.hasProvider(document) || this.formatRangeManager.hasProvider(document);
				case "codeAction": return this.codeActionManager.hasProvider(document);
				case "workspaceSymbols": return this.workspaceSymbolsManager.hasProvider();
				case "formatRange": return this.formatRangeManager.hasProvider(document);
				case "hover": return this.hoverManager.hasProvider(document);
				case "signature": return this.signatureManager.hasProvider(document);
				case "documentSymbol": return this.documentSymbolManager.hasProvider(document);
				case "documentHighlight": return this.documentHighlightManager.hasProvider(document);
				case "definition": return this.definitionManager.hasProvider(document);
				case "declaration": return this.declarationManager.hasProvider(document);
				case "typeDefinition": return this.typeDefinitionManager.hasProvider(document);
				case "reference": return this.referenceManager.hasProvider(document);
				case "implementation": return this.implementationManager.hasProvider(document);
				case "codeLens": return this.codeLensManager.hasProvider(document);
				case "selectionRange": return this.selectionRangeManager.hasProvider(document);
				case "callHierarchy": return this.callHierarchyManager.hasProvider(document);
				case "semanticTokens": return this.semanticTokensManager.hasProvider(document);
				case "semanticTokensRange": return this.semanticTokensRangeManager.hasProvider(document);
				case "linkedEditing": return this.linkedEditingManager.hasProvider(document);
				case "inlayHint": return this.inlayHintManager.hasProvider(document);
				case "inlineCompletion": return this.inlineCompletionItemManager.hasProvider(document);
				case "inlineValue": return this.inlineValueManager.hasProvider(document);
				case "typeHierarchy": return this.typeHierarchyManager.hasProvider(document);
				default: return false;
			}
		}
	};
	languages_default = new Languages();
}));
//#endregion
//#region src/model/document.ts
function fireDetach(bufnr) {
	events_default.fire("BufDetach", [bufnr]);
}
function fireLinesChanged(bufnr) {
	events_default.fire("LinesChanged", [bufnr]);
}
function getUri(fullpath, id, buftype) {
	if (!fullpath) return `untitled:${id}`;
	if (path$5.isAbsolute(fullpath)) return URI.file(path$5.normalize(fullpath)).toString();
	if (isUrl(fullpath)) return URI.parse(fullpath).toString();
	if (buftype != "") return `${buftype}:${id}`;
	return `unknown:${id}`;
}
function getNotAttachReason(buftype, enabled, size) {
	if (!["", "acwrite"].includes(buftype)) return `not a normal buffer, buftype "${buftype}"`;
	if (enabled === 0) return `b:coc_enabled = 0`;
	return `buffer size ${size} exceed coc.preferences.maxFileSize`;
}
var logger$22, MAX_EDITS, debounceTime$6, Document;
var init_document = __esmMin((() => {
	init_main$2();
	init_esm();
	init_events();
	init_logger$2();
	init_array();
	init_constants();
	init_diff();
	init_util$7();
	init_is();
	init_node();
	init_object();
	init_position();
	init_protocol();
	init_string$1();
	init_textedit();
	init_chars();
	init_textdocument();
	logger$22 = createLogger$1("document");
	MAX_EDITS = getConditionValue(200, 400);
	debounceTime$6 = getConditionValue(150, 15);
	Document = class {
		buffer;
		nvim;
		buftype;
		isIgnored = false;
		chars;
		eol = true;
		_disposed = false;
		_attached = false;
		_notAttachReason = "";
		_previewwindow = false;
		_winid = -1;
		_winids = [];
		_filetype;
		_bufname;
		_commandLine = false;
		_applying = false;
		_uri;
		_changedtick;
		variables;
		disposables = [];
		_textDocument;
		lines = [];
		_applyLines;
		fireContentChanges;
		fetchContent;
		_onDocumentChange = new import_main$1.Emitter();
		onDocumentChange = this._onDocumentChange.event;
		constructor(buffer$2, nvim, filetype, opts) {
			this.buffer = buffer$2;
			this.nvim = nvim;
			this.fireContentChanges = debounce(() => {
				this._fireContentChanges();
			}, debounceTime$6);
			this.init(filetype, opts);
		}
		/**
		* Synchronize content
		*/
		get content() {
			return this.syncLines.join("\n") + (this.eol ? "\n" : "");
		}
		get attached() {
			return this._attached;
		}
		/**
		* Synchronized textDocument.
		*/
		get textDocument() {
			return this._textDocument;
		}
		get syncLines() {
			return this._textDocument.lines;
		}
		get version() {
			return this._textDocument.version;
		}
		/**
		* Buffer number
		*/
		get bufnr() {
			return this.buffer.id;
		}
		get bufname() {
			return this._bufname;
		}
		get filetype() {
			return this._filetype;
		}
		get uri() {
			return this._uri;
		}
		get isCommandLine() {
			return this._commandLine;
		}
		/**
		* LanguageId of TextDocument, main filetype are used for combined filetypes
		* with '.'
		*/
		get languageId() {
			let { _filetype } = this;
			return _filetype.includes(".") ? _filetype.match(/(.*?)\./)[1] : _filetype;
		}
		/**
		* Get current buffer changedtick.
		*/
		get changedtick() {
			return this._changedtick;
		}
		/**
		* Scheme of document.
		*/
		get schema() {
			return URI.parse(this.uri).scheme;
		}
		/**
		* Line count of current buffer.
		*/
		get lineCount() {
			return this.lines.length;
		}
		/**
		* Window ID when buffer create, could be -1 when no window associated.
		*/
		get winid() {
			return this._winid;
		}
		get winids() {
			return this._winids;
		}
		/**
		* Returns if current document is opened with previewwindow
		* @deprecated
		*/
		get previewwindow() {
			return this._previewwindow;
		}
		/**
		* Initialize document model.
		*/
		init(filetype, opts) {
			let buftype = this.buftype = opts.buftype;
			this._bufname = opts.bufname;
			this._commandLine = opts.commandline === 1;
			this._previewwindow = !!opts.previewwindow;
			this._winid = opts.winid;
			this._winids = toArray(opts.winids);
			this.variables = toObject(opts.variables);
			this._changedtick = opts.changedtick;
			this.eol = opts.eol == 1;
			this._uri = getUri(opts.fullpath, this.bufnr, buftype);
			if (Array.isArray(opts.lines)) {
				this.lines = opts.lines.map((line) => toText(line));
				this._attached = true;
				this.attach();
			} else {
				this.lines = [];
				this._notAttachReason = getNotAttachReason(buftype, this.variables[`coc_enabled`], opts.size);
			}
			this._filetype = filetype;
			this.setIskeyword(opts.iskeyword, opts.lisp);
			this.createTextDocument(1, this.lines);
		}
		get notAttachReason() {
			return this._notAttachReason;
		}
		attach() {
			let lines = this.lines;
			const { bufnr } = this;
			this.buffer.attach(true).then((res) => {
				if (!res) fireDetach(this.bufnr);
			}, (_e) => {
				fireDetach(this.bufnr);
			});
			if (isVim) {
				/**
				* Triggered by `@chemzqm/neovim/src/api/client.ts vim_buf_change_event` which is triggered by `autoload/coc/api.vim OnBufferChange`
				*
				* Corresponds to `nvim_buf_lines_event`
				* @see {@link https://neovim.io/doc/user/api/#nvim_buf_lines_event}
				*/
				const vim_onLinesChange = (_buf, tick, firstline, lastline, linedata) => {
					this._changedtick = tick;
					lines = [
						...lines.slice(0, firstline),
						...linedata,
						...lines.slice(lastline)
					];
					if (lines.length === 0) lines = [""];
					if (this._applying) {
						this._applyLines = lines;
						return;
					}
					this.lines = lines;
					fireLinesChanged(bufnr);
					if (events_default.completing) return;
					this.fireContentChanges();
				};
				this.buffer.listen("vim_lines", vim_onLinesChange, this.disposables);
			} else {
				const onLinesChange = (_buf, tick, firstline, lastline, linedata) => {
					if (tick && tick > this._changedtick) {
						this._changedtick = tick;
						lines = [
							...lines.slice(0, firstline),
							...linedata,
							...lastline < 0 ? [] : lines.slice(lastline)
						];
						if (lines.length == 0) lines = [""];
						if (this._applying) {
							this._applyLines = lines;
							return;
						}
						this.lines = lines;
						fireLinesChanged(bufnr);
						if (events_default.completing) return;
						this.fireContentChanges();
					}
				};
				this.buffer.listen("lines", onLinesChange, this.disposables);
				this.buffer.listen("detach", () => {
					fireDetach(this.bufnr);
				}, this.disposables);
			}
		}
		/**
		* Check if document changed after last synchronize
		*/
		get dirty() {
			return this.lines !== this.syncLines;
		}
		get hasChanged() {
			if (!this.dirty) return false;
			return !equals(this.lines, this.syncLines);
		}
		/**
		* Cursor position if document is current document
		*/
		get cursor() {
			let { cursor } = events_default;
			if (cursor.bufnr !== this.bufnr) return void 0;
			let content = toText(this.lines[cursor.lnum - 1]);
			return Position.create(cursor.lnum - 1, characterIndex(content, cursor.col - 1));
		}
		_fireContentChanges(edit) {
			if (this.lines === this.syncLines) return;
			let textDocument = this._textDocument;
			let changes = [];
			if (!edit) edit = getTextEdit(textDocument.lines, this.lines, this.cursor, events_default.cursor.insert);
			let original;
			if (edit) {
				original = textDocument.getText(edit.range);
				changes.push({
					range: edit.range,
					text: edit.newText,
					rangeLength: original.length
				});
			} else original = "";
			let created = this.createTextDocument(this.version + (edit ? 1 : 0), this.lines);
			this._onDocumentChange.fire(Object.freeze({
				bufnr: this.bufnr,
				original,
				originalLines: textDocument.lines,
				textDocument: {
					version: created.version,
					uri: this.uri
				},
				document: created,
				contentChanges: changes
			}));
		}
		async applyEdits(edits, joinUndo = false, move = false) {
			if (Array.isArray(arguments[1])) edits = arguments[1];
			if (!this._attached || edits.length === 0) return;
			const { bufnr } = this;
			this._forceSync();
			let textDocument = this.textDocument;
			edits = filterSortEdits(textDocument, edits);
			let newLines = applyEdits(textDocument, edits);
			if (!newLines) return;
			let lines = textDocument.lines;
			let changed = diffLines(lines, newLines, getStartLine(edits[0]));
			let isAppend = changed.start === changed.end && changed.start === lines.length;
			let original = lines.slice(changed.start, changed.end);
			let changes = [];
			if (edits.length <= MAX_EDITS && changed.start !== changed.end && changed.replacement.length > 0) changes = toTextChanges(lines, edits);
			const { cursor, col } = this.getCursorAndCol(move, edits, newLines);
			this.nvim.pauseNotification();
			if (joinUndo) this.nvim.command(`if bufnr('%') == ${bufnr} | undojoin | endif`, true);
			if (isAppend) this.buffer.setLines(changed.replacement, {
				start: -1,
				end: -1
			}, true);
			else this.nvim.call("coc#ui#set_lines", [
				this.bufnr,
				this._changedtick,
				original,
				changed.replacement,
				changed.start,
				changed.end,
				changes,
				cursor,
				col,
				lines.length
			], true);
			this._applying = true;
			this.nvim.resumeNotification(true, true);
			this.lines = newLines;
			await waitNextTick();
			fireLinesChanged(bufnr);
			let textEdit = edits.length == 1 ? edits[0] : mergeTextEdits(edits, lines, newLines);
			this.fireContentChanges.clear();
			this._fireContentChanges(textEdit);
			let range = Range.create(changed.start, 0, changed.start + changed.replacement.length, 0);
			return TextEdit.replace(range, original.join("\n") + (original.length > 0 ? "\n" : ""));
		}
		onTextChange() {
			let { bufnr } = this;
			if (this._applying) {
				this._applying = false;
				if (this._applyLines != null && !equals(this._applyLines, this.textDocument.lines)) {
					this.lines = this._applyLines;
					this._applyLines = void 0;
					fireLinesChanged(bufnr);
					this.fireContentChanges();
				}
			}
		}
		getCursorAndCol(move, edits, newLines) {
			if (!move) return {};
			let pos = Position.is(move) ? move : this.cursor;
			if (pos) {
				let position = getPositionFromEdits(pos, edits);
				if (!equals(pos, position)) {
					let column = byteIndex(toText(newLines[position.line]), position.character) + 1;
					return {
						cursor: [position.line + 1, column],
						col: byteIndex(this.lines[pos.line], pos.character) + 1
					};
				}
			}
			return {};
		}
		async changeLines(lines) {
			let filtered = [];
			let newLines = this.lines.slice();
			for (let [lnum, text] of lines) if (newLines[lnum] != text) {
				filtered.push([lnum, text]);
				newLines[lnum] = text;
			}
			if (!filtered.length) return;
			this.nvim.call("coc#ui#change_lines", [this.bufnr, filtered], true);
			this.nvim.redrawVim();
			this.lines = newLines;
			await waitNextTick();
			fireLinesChanged(this.bufnr);
			this._forceSync();
		}
		_forceSync() {
			if (!this._attached) return;
			this.fireContentChanges.clear();
			this._fireContentChanges();
		}
		forceSync() {}
		/**
		* Get offset from lnum & col
		*/
		getOffset(lnum, col) {
			return this.textDocument.offsetAt({
				line: lnum - 1,
				character: col
			});
		}
		/**
		* Check string is word.
		*/
		isWord(word) {
			return this.chars.isKeyword(word);
		}
		getStartWord(text) {
			let i = 0;
			for (; i < text.length; i++) if (!this.chars.isKeywordChar(text[i])) break;
			return text.slice(0, i);
		}
		/**
		* Current word for replacement
		*/
		getWordRangeAtPosition(position, extraChars, current = true) {
			let chars = this.chars;
			if (extraChars && extraChars.length) {
				chars = this.chars.clone();
				for (let ch of extraChars) chars.addKeyword(ch);
			}
			let line = this.getline(position.line, current);
			let ch = line[position.character];
			if (ch == null || !chars.isKeywordChar(ch)) return null;
			let start = position.character;
			let end = position.character + 1;
			while (start >= 0) {
				let ch = line[start - 1];
				if (!ch || !chars.isKeywordChar(ch)) break;
				start = start - 1;
			}
			while (end <= line.length) {
				let ch = line[end];
				if (!ch || !chars.isKeywordChar(ch)) break;
				end = end + 1;
			}
			return Range.create(position.line, start, position.line, end);
		}
		createTextDocument(version, lines) {
			let { uri, languageId, eol } = this;
			return this._textDocument = new LinesTextDocument(uri, languageId, version, lines, this.bufnr, eol);
		}
		/**
		* Get ranges of word in textDocument.
		*/
		getSymbolRanges(word) {
			let { version, languageId, uri } = this;
			let textDocument = new LinesTextDocument(uri, languageId, version, this.lines, this.bufnr, this.eol);
			let res = [];
			let content = textDocument.getText();
			let str = "";
			for (let i = 0, l = content.length; i < l; i++) {
				let ch = content[i];
				if ("-" == ch && str.length == 0) continue;
				let isKeyword = this.chars.isKeywordChar(ch);
				if (isKeyword) str = str + ch;
				if (str.length > 0 && !isKeyword && str == word) res.push(Range.create(textDocument.positionAt(i - str.length), textDocument.positionAt(i)));
				if (!isKeyword) str = "";
			}
			return res;
		}
		/**
		* Adjust col with new valid character before position.
		*/
		fixStartcol(position, valids) {
			let line = this.getline(position.line);
			if (!line) return 0;
			let { character } = position;
			let start = line.slice(0, character);
			let col = byteLength(start);
			let { chars } = this;
			for (let i = start.length - 1; i >= 0; i--) {
				let c = start[i];
				if (!chars.isKeywordChar(c) && !valids.includes(c)) break;
				col = col - byteLength(c);
			}
			return col;
		}
		/**
		* Add vim highlight items from highlight group and range.
		* Synchronized lines are used for calculate cols.
		*/
		addHighlights(items, hlGroup, range, opts = {}) {
			let { start, end } = range;
			if (emptyRange(range)) return;
			for (let line = start.line; line <= end.line; line++) {
				const text = this.getline(line, false);
				let colStart = line == start.line ? byteIndex(text, start.character) : 0;
				let colEnd = line == end.line ? byteIndex(text, end.character) : buffer.Buffer.byteLength(text);
				if (colStart >= colEnd) continue;
				items.push(Object.assign({
					hlGroup,
					lnum: line,
					colStart,
					colEnd
				}, opts));
			}
		}
		/**
		* Line content 0 based line
		*/
		getline(line, current = true) {
			if (current) return this.lines[line] || "";
			return this.syncLines[line] || "";
		}
		/**
		* Get lines, zero indexed, end exclude.
		*/
		getLines(start, end) {
			return this.lines.slice(start ?? 0, end ?? this.lines.length);
		}
		/**
		* Get current content text.
		*/
		getDocumentContent() {
			let content = this.lines.join("\n");
			return this.eol ? content + "\n" : content;
		}
		/**
		* Get variable value by key, defined by `b:coc_{key}`
		*/
		getVar(key, defaultValue) {
			let val = this.variables[`coc_${key}`];
			return val === void 0 ? defaultValue : val;
		}
		/**
		* Get position from lnum & col
		*/
		getPosition(lnum, col) {
			let line = this.getline(lnum - 1);
			if (!line || col == 0) return {
				line: lnum - 1,
				character: 0
			};
			let pre = byteSlice(line, 0, col - 1);
			return {
				line: lnum - 1,
				character: pre.length
			};
		}
		/**
		* Recreate document with new filetype.
		*/
		setFiletype(filetype) {
			this._filetype = filetype;
			let lines = this.lines;
			this._textDocument = new LinesTextDocument(this.uri, this.languageId, 1, lines, this.bufnr, this.eol);
		}
		/**
		* Change iskeyword option of document
		*/
		setIskeyword(iskeyword, lisp) {
			let chars = this.chars = new Chars(iskeyword);
			let additional = this.getVar("additional_keywords", []);
			if (lisp) chars.addKeyword("-");
			if (additional && Array.isArray(additional)) for (let ch of additional) chars.addKeyword(ch);
		}
		/**
		* Detach document.
		*/
		detach() {
			disposeAll(this.disposables);
			if (this._disposed) return;
			this._disposed = true;
			this._attached = false;
			this.lines = [];
			this.fireContentChanges.clear();
			this._onDocumentChange.dispose();
		}
		/**
		* Synchronize latest document content
		*/
		async synchronize() {
			if (!this.attached) return;
			let { changedtick } = this;
			await this.patchChange();
			if (changedtick != this.changedtick) await wait(30);
		}
		/**
		* Synchronize buffer change
		*/
		async patchChange() {
			if (!this._attached) return;
			this._changedtick = await this.nvim.call("coc#util#get_changedtick", [this.bufnr]);
			this._forceSync();
		}
		getSha256() {
			return sha256(this.lines.join("\n"));
		}
		async fetchLines() {
			let lines = await this.nvim.call("getbufline", [
				this.bufnr,
				1,
				"$"
			]);
			this.lines = lines;
			fireLinesChanged(this.bufnr);
			this.fireContentChanges();
			logger$22.error(`Buffer ${this.bufnr} not synchronized on vim9, consider send bug report!`);
		}
	};
}));
//#endregion
//#region node_modules/bytes/index.js
/*!
* bytes
* Copyright(c) 2012-2014 TJ Holowaychuk
* Copyright(c) 2015 Jed Watson
* MIT Licensed
*/
var require_bytes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	/**
	* Module exports.
	* @public
	*/
	module.exports = bytes;
	module.exports.format = format;
	module.exports.parse = parse;
	/**
	* Module variables.
	* @private
	*/
	var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g;
	var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/;
	var map = {
		b: 1,
		kb: 1024,
		mb: 1 << 20,
		gb: 1 << 30,
		tb: Math.pow(1024, 4),
		pb: Math.pow(1024, 5)
	};
	var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;
	/**
	* Convert the given value in bytes into a string or parse to string to an integer in bytes.
	*
	* @param {string|number} value
	* @param {{
	*  case: [string],
	*  decimalPlaces: [number]
	*  fixedDecimals: [boolean]
	*  thousandsSeparator: [string]
	*  unitSeparator: [string]
	*  }} [options] bytes options.
	*
	* @returns {string|number|null}
	*/
	function bytes(value, options) {
		if (typeof value === "string") return parse(value);
		if (typeof value === "number") return format(value, options);
		return null;
	}
	/**
	* Format the given value in bytes into a string.
	*
	* If the value is negative, it is kept as such. If it is a float,
	* it is rounded.
	*
	* @param {number} value
	* @param {object} [options]
	* @param {number} [options.decimalPlaces=2]
	* @param {number} [options.fixedDecimals=false]
	* @param {string} [options.thousandsSeparator=]
	* @param {string} [options.unit=]
	* @param {string} [options.unitSeparator=]
	*
	* @returns {string|null}
	* @public
	*/
	function format(value, options) {
		if (!Number.isFinite(value)) return null;
		var mag = Math.abs(value);
		var thousandsSeparator = options && options.thousandsSeparator || "";
		var unitSeparator = options && options.unitSeparator || "";
		var decimalPlaces = options && options.decimalPlaces !== void 0 ? options.decimalPlaces : 2;
		var fixedDecimals = Boolean(options && options.fixedDecimals);
		var unit = options && options.unit || "";
		if (!unit || !map[unit.toLowerCase()]) if (mag >= map.pb) unit = "PB";
		else if (mag >= map.tb) unit = "TB";
		else if (mag >= map.gb) unit = "GB";
		else if (mag >= map.mb) unit = "MB";
		else if (mag >= map.kb) unit = "KB";
		else unit = "B";
		var str = (value / map[unit.toLowerCase()]).toFixed(decimalPlaces);
		if (!fixedDecimals) str = str.replace(formatDecimalsRegExp, "$1");
		if (thousandsSeparator) str = str.split(".").map(function(s, i) {
			return i === 0 ? s.replace(formatThousandsRegExp, thousandsSeparator) : s;
		}).join(".");
		return str + unitSeparator + unit;
	}
	/**
	* Parse the string value into an integer in bytes.
	*
	* If no unit is given, it is assumed the value is in bytes.
	*
	* @param {number|string} val
	*
	* @returns {number|null}
	* @public
	*/
	function parse(val) {
		if (typeof val === "number" && !isNaN(val)) return val;
		if (typeof val !== "string") return null;
		var results = parseRegExp.exec(val);
		var floatValue;
		var unit = "b";
		if (!results) {
			floatValue = parseInt(val, 10);
			unit = "b";
		} else {
			floatValue = parseFloat(results[1]);
			unit = results[4].toLowerCase();
		}
		if (isNaN(floatValue)) return null;
		return Math.floor(map[unit] * floatValue);
	}
}));
//#endregion
//#region src/core/documents.ts
var logger$21, cwd, filetypeDelay, Documents;
var init_documents = __esmMin((() => {
	init_main$2();
	init_esm();
	init_commands$2();
	init_events();
	init_languages();
	init_logger$2();
	init_document();
	init_util$7();
	init_array();
	init_constants();
	init_convert();
	init_expand();
	init_fs();
	init_is();
	init_node();
	init_object();
	init_platform();
	init_protocol();
	init_string$1();
	logger$21 = createLogger$1("core-documents");
	cwd = normalizeFilePath(process.cwd());
	filetypeDelay = getConditionValue(50, 10);
	Documents = class {
		configurations;
		workspaceFolder;
		_cwd;
		_env;
		_bufnr;
		_root;
		_attached = false;
		_currentResolve = false;
		nvim;
		config;
		disposables = [];
		_filetypeTimer = /* @__PURE__ */ new Map();
		creating = /* @__PURE__ */ new Map();
		buffers = /* @__PURE__ */ new Map();
		resolves = [];
		_onDidOpenTextDocument = new import_main$1.Emitter();
		_onDidCloseDocument = new import_main$1.Emitter();
		_onDidChangeDocument = new import_main$1.Emitter();
		_onDidSaveDocument = new import_main$1.Emitter();
		_onWillSaveDocument = new import_main$1.Emitter();
		onDidOpenTextDocument = this._onDidOpenTextDocument.event;
		onDidCloseDocument = this._onDidCloseDocument.event;
		onDidChangeDocument = this._onDidChangeDocument.event;
		onDidSaveTextDocument = this._onDidSaveDocument.event;
		onWillSaveTextDocument = this._onWillSaveDocument.event;
		constructor(configurations, workspaceFolder) {
			this.configurations = configurations;
			this.workspaceFolder = workspaceFolder;
			this._cwd = cwd;
			this.getConfiguration();
			this.configurations.onDidChange(this.getConfiguration, this, this.disposables);
		}
		async attach(nvim, env) {
			if (this._attached) return;
			this.nvim = nvim;
			this._env = env;
			this._attached = true;
			let { bufnrs, bufnr } = await this.nvim.call("coc#util#all_state");
			this._bufnr = bufnr;
			await Promise.all(bufnrs.map((bufnr) => this.createDocument(bufnr)));
			if (isVim) {
				const checkedTick = /* @__PURE__ */ new Map();
				events_default.on("CursorHold", async (bufnr) => {
					let doc = this.getDocument(bufnr);
					if (doc && doc.attached && checkedTick.get(bufnr) != doc.changedtick) {
						let sha256 = doc.getSha256();
						let same = await nvim.callVim("coc#vim9#Check_sha256", [bufnr, sha256]);
						checkedTick.set(bufnr, doc.changedtick);
						if (!same) await doc.fetchLines();
					}
				}, null, this.disposables);
			}
			events_default.on("BufDetach", this.onBufDetach, this, this.disposables);
			events_default.on("BufRename", async (bufnr) => {
				this.detachBuffer(bufnr);
				await this.createDocument(bufnr);
			}, null, this.disposables);
			events_default.on("DirChanged", (cwd) => {
				this._cwd = normalizeFilePath(cwd);
			}, null, this.disposables);
			const checkCurrentBuffer = (bufnr) => {
				this._bufnr = bufnr;
				this.createDocument(bufnr);
			};
			events_default.on("CursorMoved", checkCurrentBuffer, null, this.disposables);
			events_default.on("CursorMovedI", checkCurrentBuffer, null, this.disposables);
			events_default.on("BufUnload", this.onBufUnload, this, this.disposables);
			events_default.on("BufEnter", this.onBufEnter, this, this.disposables);
			events_default.on("BufCreate", this.onBufCreate, this, this.disposables);
			events_default.on("TermOpen", this.onBufCreate, this, this.disposables);
			events_default.on("BufWritePost", this.onBufWritePost, this, this.disposables);
			events_default.on("BufWritePre", this.onBufWritePre, this, this.disposables);
			events_default.on("FileType", this.onFileTypeChange, this, this.disposables);
			events_default.on("BufEnter", (bufnr) => {
				this.createDocument(bufnr);
			}, null, this.disposables);
			events_default.on("TextChanged", this.onTextChange, this, this.disposables);
			events_default.on("TextChangedI", this.onTextChange, this, this.disposables);
		}
		onTextChange(bufnr) {
			let doc = this.getDocument(bufnr);
			if (doc) doc.onTextChange();
		}
		getConfiguration(e) {
			if (!e || e.affectsConfiguration("coc.preferences")) {
				let config = this.configurations.initialConfiguration.get("coc.preferences");
				const bytes = require_bytes();
				this.config = {
					maxFileSize: bytes.parse(config.maxFileSize),
					willSaveHandlerTimeout: defaultValue(config.willSaveHandlerTimeout, 500),
					formatOnSaveTimeout: defaultValue(config.formatOnSaveTimeout, 500),
					useQuickfixForLocations: config.useQuickfixForLocations
				};
			}
		}
		get bufnr() {
			return this._bufnr;
		}
		get root() {
			return this._root;
		}
		get cwd() {
			return this._cwd;
		}
		get documents() {
			return Array.from(this.buffers.values()).filter((o) => o.attached);
		}
		async getCurrentUri() {
			let bufnr = await this.nvim.call("bufnr", ["%"]);
			let doc = this.getDocument(bufnr);
			return doc ? doc.uri : void 0;
		}
		*attached(schema) {
			for (let doc of this.buffers.values()) {
				if (!doc.attached) continue;
				if (schema && doc.schema !== schema) continue;
				yield doc;
			}
		}
		get bufnrs() {
			return this.buffers.keys();
		}
		detach() {
			this._attached = false;
			for (let bufnr of this.buffers.keys()) this.onBufUnload(bufnr);
		}
		resolveRoot(rootPatterns, requireRootPattern = false) {
			let doc = this.getDocument(this.bufnr);
			let resolved;
			if (doc && doc.schema == "file") resolved = resolveRoot(path$5.dirname(URI.parse(doc.uri).fsPath), rootPatterns, this.cwd);
			else resolved = resolveRoot(this.cwd, rootPatterns);
			if (requireRootPattern && !resolved) throw new Error(`Required root pattern not resolved.`);
			return resolved;
		}
		get textDocuments() {
			let docs = [];
			for (let b of this.buffers.values()) if (b.attached) docs.push(b.textDocument);
			return docs;
		}
		getDocument(uri, caseInsensitive = isWindows || isMacintosh) {
			if (typeof uri === "number") return this.buffers.get(uri);
			let u = URI.parse(uri);
			uri = u.toString();
			let isFile = u.scheme === "file";
			for (let doc of this.buffers.values()) {
				if (doc.uri === uri) return doc;
				if (isFile && caseInsensitive && doc.uri.toLowerCase() === uri.toLowerCase()) return doc;
			}
			return null;
		}
		/**
		* Expand filepath with `~` and/or environment placeholders
		*/
		expand(input) {
			if (input.startsWith("~")) input = os$5.homedir() + input.slice(1);
			if (input.includes("$")) {
				let doc = this.getDocument(this.bufnr);
				let file = doc ? URI.parse(doc.uri).fsPath : "";
				input = expandVariables(input, {
					root: this._root || this._cwd,
					cwd: this._cwd,
					file
				});
				input = input.replace(/\$[\w]+/g, (match) => {
					if (match == "$HOME") return os$5.homedir();
					return process.env[match.slice(1)] || match;
				});
			}
			return input;
		}
		/**
		* Current document.
		*/
		get document() {
			if (this._currentResolve) return new Promise((resolve) => {
				this.resolves.push(resolve);
			});
			this._currentResolve = true;
			return new Promise((resolve) => {
				this.nvim.eval(`coc#util#get_bufoptions(bufnr("%"),${this.config.maxFileSize})`).then((opts) => {
					let doc;
					if (opts != null) {
						this.creating.delete(opts.bufnr);
						doc = this._createDocument(opts);
					}
					this.resolveCurrent(doc);
					resolve(doc);
					this._currentResolve = false;
				}, () => {
					resolve(void 0);
					this._currentResolve = false;
				});
			});
		}
		resolveCurrent(document) {
			if (this.resolves.length > 0) while (this.resolves.length) {
				const fn = this.resolves.pop();
				if (fn) fn(document);
			}
		}
		get uri() {
			let { bufnr } = this;
			if (bufnr) {
				let doc = this.getDocument(bufnr);
				if (doc) return doc.uri;
			}
			return null;
		}
		/**
		* Current filetypes.
		*/
		get filetypes() {
			let res = /* @__PURE__ */ new Set();
			for (let doc of this.attached()) res.add(doc.filetype);
			return res;
		}
		/**
		* Get filetype by check same extension name buffer.
		*/
		getLanguageId(filepath) {
			let ext = path$5.extname(filepath);
			if (!ext) return "";
			for (let doc of this.attached()) {
				let fsPath = URI.parse(doc.uri).fsPath;
				if (path$5.extname(fsPath) == ext) return doc.languageId;
			}
			return "";
		}
		async getLines(uri) {
			let doc = this.getDocument(uri);
			if (doc) return doc.textDocument.lines;
			let u = URI.parse(uri);
			if (u.scheme !== "file") return [];
			try {
				return (await readFile(u.fsPath, "utf8")).split(/\r?\n/);
			} catch (e) {
				return [];
			}
		}
		/**
		* Current languageIds.
		*/
		get languageIds() {
			let res = /* @__PURE__ */ new Set();
			for (let doc of this.attached()) res.add(doc.languageId);
			return res;
		}
		/**
		* Get format options
		*/
		async getFormatOptions(uri) {
			let bufnr = typeof uri === "number" ? uri : this.getBufnr(uri);
			return convertFormatOptions(await this.nvim.call("coc#util#get_format_opts", [bufnr]));
		}
		getBufnr(uri) {
			if (!uri) return 0;
			let doc = this.getDocument(uri);
			return doc ? doc.bufnr : 0;
		}
		/**
		* Create document by bufnr.
		*/
		async createDocument(bufnr) {
			let doc = this.buffers.get(bufnr);
			if (doc) return doc;
			if (this.creating.has(bufnr)) return await this.creating.get(bufnr);
			let promise = new Promise((resolve) => {
				this.nvim.call("coc#util#get_bufoptions", [bufnr, this.config.maxFileSize]).then((opts) => {
					if (!this.creating.has(bufnr)) {
						resolve(void 0);
						return;
					}
					this.creating.delete(bufnr);
					if (!opts) {
						resolve(void 0);
						return;
					}
					doc = this._createDocument(opts);
					resolve(doc);
				}, () => {
					this.creating.delete(bufnr);
					resolve(void 0);
				});
			});
			this.creating.set(bufnr, promise);
			return await promise;
		}
		async onBufCreate(bufnr) {
			this.onBufUnload(bufnr);
			await this.createDocument(bufnr);
		}
		_createDocument(opts) {
			let { bufnr } = opts;
			if (this.buffers.has(bufnr)) return this.buffers.get(bufnr);
			let doc = new Document(this.nvim.createBuffer(bufnr), this.nvim, this.convertFiletype(opts.filetype), opts);
			if (opts.size > this.config.maxFileSize) logger$21.warn(`buffer ${opts.bufnr} size exceed maxFileSize ${this.config.maxFileSize}, not attached.`);
			this.buffers.set(bufnr, doc);
			if (doc.attached) {
				if (doc.schema == "file") {
					this.configurations.locateFolderConfigution(doc.uri);
					let root = this.workspaceFolder.resolveRoot(doc, this._cwd, true, this.expand.bind(this));
					if (root && bufnr == this._bufnr) this.changeRoot(root);
				}
				this._onDidOpenTextDocument.fire(doc.textDocument);
				doc.onDocumentChange((e) => this._onDidChangeDocument.fire(e));
			}
			logger$21.debug("buffer created", bufnr, doc.attached, doc.uri);
			return doc;
		}
		onBufEnter(bufnr) {
			this._bufnr = bufnr;
			let doc = this.buffers.get(bufnr);
			if (doc) {
				let workspaceFolder = this.workspaceFolder.getWorkspaceFolder(URI.parse(doc.uri));
				if (workspaceFolder) this._root = URI.parse(workspaceFolder.uri).fsPath;
			}
		}
		onBufUnload(bufnr) {
			this.creating.delete(bufnr);
			this.onBufDetach(bufnr, false);
		}
		async onBufDetach(bufnr, checkReload = true) {
			this.clearTimer(bufnr);
			this.detachBuffer(bufnr);
			if (checkReload) {
				if (await this.nvim.call("bufloaded", [bufnr])) await this.createDocument(bufnr);
			}
		}
		detachBuffer(bufnr) {
			let doc = this.buffers.get(bufnr);
			this.buffers.delete(bufnr);
			if (!doc || !doc.attached) return;
			logger$21.debug("document detach", bufnr, doc.uri);
			this._onDidCloseDocument.fire(doc.textDocument);
			doc.detach();
			const uris = this.textDocuments.map((o) => URI.parse(o.uri));
			this.workspaceFolder.onDocumentDetach(uris);
		}
		async onBufWritePost(bufnr, changedtick) {
			let doc = this.buffers.get(bufnr);
			if (doc) {
				if (doc.changedtick != changedtick) await doc.patchChange();
				this._onDidSaveDocument.fire(doc.textDocument);
			}
		}
		async onBufWritePre(bufnr, bufname, changedtick) {
			let doc = this.buffers.get(bufnr);
			if (!doc || !doc.attached) return;
			if (doc.bufname != bufname) {
				this.detachBuffer(bufnr);
				doc = await this.createDocument(bufnr);
				if (!doc.attached) return;
			}
			if (doc.changedtick != changedtick) await doc.synchronize();
			else await doc.patchChange();
			let firing = true;
			let thenables = [];
			let event = {
				bufnr: doc.bufnr,
				document: doc.textDocument,
				reason: import_main$1.TextDocumentSaveReason.Manual,
				waitUntil: (thenable) => {
					if (!firing) this.nvim.echoError(`waitUntil can't be used in async manner, check log for details`);
					else thenables.push(thenable);
				}
			};
			this._onWillSaveDocument.fire(event);
			firing = false;
			let total = thenables.length;
			if (total) {
				let edits = await new Promise((resolve) => {
					const willSaveHandlerTimeout = this.config.willSaveHandlerTimeout;
					let timer = setTimeout(() => {
						this.nvim.outWriteLine(`Will save handler timeout after ${willSaveHandlerTimeout}ms`);
						resolve(void 0);
					}, willSaveHandlerTimeout);
					let i = 0;
					let called = false;
					for (let p of thenables) {
						let cb = (res) => {
							if (called) return;
							called = true;
							clearTimeout(timer);
							resolve(res);
						};
						p.then((res) => {
							if (Array.isArray(res) && res.length && TextEdit.is(res[0])) return cb(res);
							i = i + 1;
							if (i == total) cb(void 0);
						}, (e) => {
							logger$21.error(`Error on will save handler:`, e);
							i = i + 1;
							if (i == total) cb(void 0);
						});
					}
				});
				if (edits) await doc.applyEdits(edits, false, this.bufnr === doc.bufnr);
			}
			await this.tryCodeActionsOnSave(doc);
			await this.tryFormatOnSave(doc);
		}
		async tryFormatOnSave(document) {
			if (!this.shouldFormatOnSave(document)) return;
			let options = await this.getFormatOptions(document.uri);
			let formatOnSaveTimeout = this.config.formatOnSaveTimeout;
			let timer;
			let tokenSource = new import_main$1.CancellationTokenSource();
			const tp = new Promise((c) => {
				timer = setTimeout(() => {
					logger$21.warn(`Format on save timeout after ${formatOnSaveTimeout}ms`, document.uri);
					tokenSource.cancel();
					c(void 0);
				}, formatOnSaveTimeout);
			});
			const provideEdits = languages_default.provideDocumentFormattingEdits(document.textDocument, options, tokenSource.token);
			let textEdits = await Promise.race([tp, provideEdits]);
			clearTimeout(timer);
			if (isFalsyOrEmpty(textEdits)) return;
			await document.applyEdits(textEdits);
			let extensionName = textEdits["__extensionName"];
			logger$21.info(`Format buffer ${document.bufnr} by ${toText(extensionName)}`);
		}
		async tryCodeActionsOnSave(doc) {
			let conf = this.configurations.getConfiguration("editor", doc.textDocument).get("codeActionsOnSave", {});
			if (emptyObject(conf)) return false;
			const actions = [];
			for (const key of Object.keys(conf)) if (conf[key] === true || conf[key] === "always") actions.push(key);
			if (actions.length === 0) return false;
			await commands_default.executeCommand("editor.action.executeCodeActions", doc, void 0, actions, this.config.willSaveHandlerTimeout);
			return true;
		}
		shouldFormatOnSave(document) {
			const config = this.configurations.getConfiguration("coc.preferences", document);
			const filetypes = config.get("formatOnSaveFiletypes", null) ?? [];
			if (!(filetypes.includes("*") || filetypes.includes(document.languageId) || config.get("formatOnSave", false))) return false;
			if (!languages_default.hasFormatProvider(document)) {
				logger$21.warn(`Format provider not found for ${document.uri}`);
				return false;
			}
			if (!document || document.getVar("disable_autoformat", 0)) {
				logger$21.warn(`Format ${document.uri} disabled by b:coc_disable_autoformat`);
				return false;
			}
			return true;
		}
		onFileTypeChange(filetype, bufnr) {
			let doc = this.getDocument(bufnr);
			if (!doc) return;
			this.clearTimer(bufnr);
			let timer = setTimeout(() => {
				if (this.creating.has(bufnr) || !doc.attached) return;
				if (this.convertFiletype(filetype) === doc.filetype) return;
				this._onDidCloseDocument.fire(doc.textDocument);
				doc.setFiletype(filetype);
				this._onDidOpenTextDocument.fire(doc.textDocument);
			}, filetypeDelay);
			this._filetypeTimer.set(bufnr, timer);
		}
		async getQuickfixList(locations) {
			let filesLines = {};
			let filepathList = locations.reduce((pre, curr) => {
				let u = URI.parse(curr.uri);
				if (u.scheme == "file" && !pre.includes(u.fsPath) && !this.getDocument(curr.uri)) pre.push(u.fsPath);
				return pre;
			}, []);
			await Promise.all(filepathList.map((fsPath) => {
				return new Promise((resolve) => {
					readFile(fsPath, "utf8").then((content) => {
						filesLines[fsPath] = content.split(/\r?\n/);
						resolve(void 0);
					}, () => {
						resolve();
					});
				});
			}));
			return await Promise.all(locations.map((loc) => {
				let { uri, range } = loc;
				let { fsPath } = URI.parse(uri);
				let text;
				let lines = filesLines[fsPath];
				if (lines) text = lines[range.start.line];
				return this.getQuickfixItem(loc, text);
			}));
		}
		/**
		* Populate locations to UI.
		*/
		async showLocations(locations) {
			let { nvim } = this;
			let items = await this.getQuickfixList(locations);
			if (this.config.useQuickfixForLocations) {
				let openCommand = await nvim.getVar("coc_quickfix_open_command");
				if (typeof openCommand != "string") openCommand = items.length < 10 ? `copen ${items.length}` : "copen";
				nvim.pauseNotification();
				nvim.call("setqflist", [items], true);
				nvim.command(openCommand, true);
				nvim.resumeNotification(false, true);
			} else {
				await nvim.setVar("coc_jump_locations", items);
				if (this._env.locationlist) nvim.command("CocList --normal --auto-preview location", true);
				else nvim.call("coc#util#do_autocmd", ["CocLocationsChange"], true);
			}
		}
		fixUnixPrefix(filepath) {
			if (!this._env.isCygwin || !/^\w:/.test(filepath)) return filepath;
			return this._env.unixPrefix + filepath[0].toLowerCase() + filepath.slice(2).replace(/\\/g, "/");
		}
		/**
		* Convert location to quickfix item.
		*/
		async getQuickfixItem(loc, text, type = "", module) {
			let targetRange = loc.targetRange;
			if (LocationLink.is(loc)) loc = Location.create(loc.targetUri, loc.targetRange);
			let doc = this.getDocument(loc.uri);
			let { uri, range } = loc;
			let { start, end } = range;
			let u = URI.parse(uri);
			if (!text && u.scheme == "file") text = await this.getLine(uri, start.line);
			let endLine = start.line == end.line ? text : await this.getLine(uri, end.line);
			let item = {
				uri,
				filename: u.scheme == "file" ? this.fixUnixPrefix(u.fsPath) : uri,
				lnum: start.line + 1,
				end_lnum: end.line + 1,
				col: text ? byteIndex(text, start.character) + 1 : start.character + 1,
				end_col: endLine ? byteIndex(endLine, end.character) + 1 : end.character + 1,
				text: text || "",
				range
			};
			if (targetRange) item.targetRange = targetRange;
			if (module) item.module = module;
			if (type) item.type = type;
			if (doc) item.bufnr = doc.bufnr;
			return item;
		}
		/**
		* Get content of line by uri and line.
		*/
		async getLine(uri, line) {
			let document = this.getDocument(uri);
			if (document && document.attached) return document.getline(line) || "";
			if (!uri.startsWith("file:")) return "";
			let fsPath = URI.parse(uri).fsPath;
			if (!fs$6.existsSync(fsPath)) return "";
			return await readFileLine(fsPath, line);
		}
		/**
		* Get content from buffer or file by uri.
		*/
		async readFile(uri) {
			let document = this.getDocument(uri);
			if (document) {
				await document.patchChange();
				return document.content;
			}
			let u = URI.parse(uri);
			if (u.scheme != "file") return "";
			return (await this.nvim.call("readfile", [u.fsPath])).join("\n") + "\n";
		}
		clearTimer(bufnr) {
			let timer = this._filetypeTimer.get(bufnr);
			if (timer) clearTimeout(timer);
		}
		convertFiletype(filetype) {
			switch (filetype) {
				case "javascript.jsx": return "javascriptreact";
				case "typescript.jsx":
				case "typescript.tsx": return "typescriptreact";
				case "tex": return "latex";
				default: {
					let map = toObject(this._env.filetypeMap);
					return toText(hasOwnProperty$1(map, filetype) ? map[filetype] : filetype);
				}
			}
		}
		reset() {
			this.creating.clear();
			for (let bufnr of this.buffers.keys()) this.onBufUnload(bufnr);
			this.buffers.clear();
			this.changeRoot(process.cwd());
		}
		changeRoot(dir) {
			this._root = normalizeFilePath(dir);
		}
		dispose() {
			for (let bufnr of this.buffers.keys()) this.onBufUnload(bufnr);
			this._attached = false;
			this.buffers.clear();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/core/editors.ts
function renamed(editor, info) {
	let { document, uri } = editor;
	if (document.bufnr != info.bufnr) return false;
	let u = URI.parse(uri);
	if (u.scheme === "file") return !sameFile(u.fsPath, info.fullpath);
	return false;
}
var logger$20, Editors;
var init_editors = __esmMin((() => {
	init_main$2();
	init_esm();
	init_events();
	init_logger$2();
	init_convert();
	init_errors();
	init_fs();
	init_mutex();
	init_protocol();
	logger$20 = createLogger$1("core-editors");
	Editors = class {
		documents;
		disposables = [];
		winid = -1;
		mutex = new Mutex();
		previousId;
		nvim;
		editors = /* @__PURE__ */ new Map();
		tabIds = /* @__PURE__ */ new Set();
		creating = /* @__PURE__ */ new Set();
		_onDidTabClose = new import_main$1.Emitter();
		_onDidChangeActiveTextEditor = new import_main$1.Emitter();
		_onDidChangeVisibleTextEditors = new import_main$1.Emitter();
		onDidTabClose = this._onDidTabClose.event;
		onDidChangeActiveTextEditor = this._onDidChangeActiveTextEditor.event;
		onDidChangeVisibleTextEditors = this._onDidChangeVisibleTextEditors.event;
		constructor(documents) {
			this.documents = documents;
		}
		get activeTextEditor() {
			return this.editors.get(this.winid);
		}
		get visibleTextEditors() {
			return Array.from(this.editors.values());
		}
		getFormatOptions(bufnr) {
			for (let editor of this.editors.values()) if (editor.bufnr === bufnr || editor.uri === bufnr) return editor.options;
		}
		getBufWinids(bufnr) {
			let winids = [];
			for (let editor of this.editors.values()) if (editor.bufnr == bufnr) winids.push(editor.winid);
			return winids;
		}
		onChangeCurrent(editor) {
			if (!editor) return;
			let id = editor.id;
			if (id === this.previousId) return;
			this.previousId = id;
			this._onDidChangeActiveTextEditor.fire(editor);
		}
		async attach(nvim) {
			this.nvim = nvim;
			let [winid, infos] = await nvim.eval(`[win_getid(),coc#util#editor_infos()]`);
			await Promise.allSettled(infos.map((info) => {
				return this.createTextEditor(info.winid);
			}));
			this.winid = winid;
			events_default.on("CursorHold", this.checkEditors, this, this.disposables);
			events_default.on("TabNew", (tabid) => {
				this.tabIds.add(tabid);
			}, null, this.disposables);
			events_default.on("TabClosed", this.checkTabs, this, this.disposables);
			events_default.on("WinEnter", (winid) => {
				this.winid = winid;
				let editor = this.editors.get(winid);
				if (editor) this.onChangeCurrent(editor);
			}, null, this.disposables);
			events_default.on("WinClosed", (winid) => {
				if (this.editors.has(winid)) {
					this.editors.delete(winid);
					this._onDidChangeVisibleTextEditors.fire(this.visibleTextEditors);
				}
			}, null, this.disposables);
			events_default.on("BufWinEnter", async (_, winid) => {
				this.winid = winid;
				if (await this.createTextEditor(winid)) this._onDidChangeVisibleTextEditors.fire(this.visibleTextEditors);
			}, null, this.disposables);
			this.documents.onDidOpenTextDocument(async (e) => {
				let document = this.documents.getDocument(e.bufnr);
				let changed = false;
				for (let winid of document.winids) if (this.editors.get(winid)?.document !== document) {
					if (await this.createTextEditor(winid).catch(onUnexpectedError)) changed = true;
				}
				if (changed) this._onDidChangeVisibleTextEditors.fire(this.visibleTextEditors);
			}, null, this.disposables);
		}
		checkTabs(ids) {
			let changed = false;
			for (let editor of this.editors.values()) if (!ids.includes(editor.tabpageid)) {
				changed = true;
				this.editors.delete(editor.winid);
			}
			for (let id of Array.from(this.tabIds)) if (!ids.includes(id)) this._onDidTabClose.fire(id);
			this.tabIds = new Set(ids);
			if (changed) this._onDidChangeVisibleTextEditors.fire(this.visibleTextEditors);
		}
		checkUnloadedBuffers(bufnrs) {
			for (let bufnr of this.documents.bufnrs) if (!bufnrs.includes(bufnr)) events_default.fire("BufUnload", [bufnr]);
		}
		async checkEditors() {
			let { documents } = this;
			await this.mutex.use(async () => {
				let [winid, bufnrs, infos] = await this.nvim.eval(`[win_getid(),coc#util#get_loaded_bufs(),coc#util#editor_infos()]`);
				this.winid = winid;
				this.checkUnloadedBuffers(bufnrs);
				let changed = false;
				let winids = /* @__PURE__ */ new Set();
				for (let info of infos) {
					let editor = this.editors.get(info.winid);
					let create = false;
					if (!editor) create = true;
					else if (renamed(editor, info)) {
						events_default.fire("BufRename", [info.bufnr]);
						create = true;
					} else if (editor.document.bufnr != info.bufnr || editor.document !== documents.getDocument(info.bufnr) || editor.tabpageid != info.tabid) create = true;
					if (create) {
						await this.createTextEditor(info.winid);
						changed = true;
					}
					winids.add(info.winid);
				}
				if (this.cleanUpEditors(winids)) changed = true;
				this.onChangeCurrent(this.activeTextEditor);
				if (changed) this._onDidChangeVisibleTextEditors.fire(this.visibleTextEditors);
			});
		}
		cleanUpEditors(winids) {
			let changed = false;
			for (let winid of Array.from(this.editors.keys())) if (!winids.has(winid)) {
				changed = true;
				this.editors.delete(winid);
			}
			return changed;
		}
		async createTextEditor(winid) {
			let { documents, creating, nvim } = this;
			if (creating.has(winid)) return false;
			let changed = false;
			creating.add(winid);
			let opts = await nvim.call("coc#util#get_editoroption", [winid]);
			if (opts) {
				this.tabIds.add(opts.tabpageid);
				let doc = documents.getDocument(opts.bufnr);
				if (doc && doc.attached) {
					let editor = this.fromOptions(opts);
					this.editors.set(winid, editor);
					if (winid == this.winid) this.onChangeCurrent(editor);
					logger$20.debug("editor created winid & bufnr & tabpageid: ", winid, opts.bufnr, opts.tabpageid);
					changed = true;
				} else if (this.editors.has(winid)) {
					this.editors.delete(winid);
					changed = true;
				}
			}
			creating.delete(winid);
			return changed;
		}
		fromOptions(opts) {
			let { visibleRanges, bufnr, formatOptions } = opts;
			let { documents } = this;
			let document = documents.getDocument(bufnr);
			return {
				id: `${opts.tabpageid}-${opts.winid}-${document.uri}`,
				tabpageid: opts.tabpageid,
				winid: opts.winid,
				winnr: opts.winnr,
				uri: document.uri,
				bufnr: document.bufnr,
				document,
				visibleRanges: visibleRanges.map((o) => Range.create(o[0] - 1, 0, o[1], 0)),
				options: convertFormatOptions(formatOptions)
			};
		}
	};
}));
//#endregion
//#region node_modules/node-int64/Int64.js
var require_Int64 = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var VAL32 = 4294967296;
	var _HEX = [];
	for (var i = 0; i < 256; i++) _HEX[i] = (i > 15 ? "" : "0") + i.toString(16);
	/**
	* Constructor accepts any of the following argument types:
	*
	* new Int64(buffer[, offset=0]) - Existing Buffer with byte offset
	* new Int64(Uint8Array[, offset=0]) - Existing Uint8Array with a byte offset
	* new Int64(string)             - Hex string (throws if n is outside int64 range)
	* new Int64(number)             - Number (throws if n is outside int64 range)
	* new Int64(hi, lo)             - Raw bits as two 32-bit values
	*/
	var Int64 = module.exports = function(a1, a2) {
		if (a1 instanceof Buffer) {
			this.buffer = a1;
			this.offset = a2 || 0;
		} else if (Object.prototype.toString.call(a1) == "[object Uint8Array]") {
			this.buffer = new Buffer(a1);
			this.offset = a2 || 0;
		} else {
			this.buffer = this.buffer || new Buffer(8);
			this.offset = 0;
			this.setValue.apply(this, arguments);
		}
	};
	Int64.MAX_INT = Math.pow(2, 53);
	Int64.MIN_INT = -Math.pow(2, 53);
	Int64.prototype = {
		constructor: Int64,
		/**
		* Do in-place 2's compliment.  See
		* http://en.wikipedia.org/wiki/Two's_complement
		*/
		_2scomp: function() {
			var b = this.buffer, o = this.offset, carry = 1;
			for (var i = o + 7; i >= o; i--) {
				var v = (b[i] ^ 255) + carry;
				b[i] = v & 255;
				carry = v >> 8;
			}
		},
		/**
		* Set the value. Takes any of the following arguments:
		*
		* setValue(string) - A hexidecimal string
		* setValue(number) - Number (throws if n is outside int64 range)
		* setValue(hi, lo) - Raw bits as two 32-bit values
		*/
		setValue: function(hi, lo) {
			var negate = false;
			if (arguments.length == 1) if (typeof hi == "number") {
				negate = hi < 0;
				hi = Math.abs(hi);
				lo = hi % VAL32;
				hi = hi / VAL32;
				if (hi > VAL32) throw new RangeError(hi + " is outside Int64 range");
				hi = hi | 0;
			} else if (typeof hi == "string") {
				hi = (hi + "").replace(/^0x/, "");
				lo = hi.substr(-8);
				hi = hi.length > 8 ? hi.substr(0, hi.length - 8) : "";
				hi = parseInt(hi, 16);
				lo = parseInt(lo, 16);
			} else throw new Error(hi + " must be a Number or String");
			var b = this.buffer, o = this.offset;
			for (var i = 7; i >= 0; i--) {
				b[o + i] = lo & 255;
				lo = i == 4 ? hi : lo >>> 8;
			}
			if (negate) this._2scomp();
		},
		/**
		* Convert to a native JS number.
		*
		* WARNING: Do not expect this value to be accurate to integer precision for
		* large (positive or negative) numbers!
		*
		* @param allowImprecise If true, no check is performed to verify the
		* returned value is accurate to integer precision.  If false, imprecise
		* numbers (very large positive or negative numbers) will be forced to +/-
		* Infinity.
		*/
		toNumber: function(allowImprecise) {
			var b = this.buffer, o = this.offset;
			var negate = b[o] & 128, x = 0, carry = 1;
			for (var i = 7, m = 1; i >= 0; i--, m *= 256) {
				var v = b[o + i];
				if (negate) {
					v = (v ^ 255) + carry;
					carry = v >> 8;
					v = v & 255;
				}
				x += v * m;
			}
			if (!allowImprecise && x >= Int64.MAX_INT) return negate ? -Infinity : Infinity;
			return negate ? -x : x;
		},
		/**
		* Convert to a JS Number. Returns +/-Infinity for values that can't be
		* represented to integer precision.
		*/
		valueOf: function() {
			return this.toNumber(false);
		},
		/**
		* Return string value
		*
		* @param radix Just like Number#toString()'s radix
		*/
		toString: function(radix) {
			return this.valueOf().toString(radix || 10);
		},
		/**
		* Return a string showing the buffer octets, with MSB on the left.
		*
		* @param sep separator string. default is '' (empty string)
		*/
		toOctetString: function(sep) {
			var out = new Array(8);
			var b = this.buffer, o = this.offset;
			for (var i = 0; i < 8; i++) out[i] = _HEX[b[o + i]];
			return out.join(sep || "");
		},
		/**
		* Returns the int64's 8 bytes in a buffer.
		*
		* @param {bool} [rawBuffer=false]  If no offset and this is true, return the internal buffer.  Should only be used if
		*                                  you're discarding the Int64 afterwards, as it breaks encapsulation.
		*/
		toBuffer: function(rawBuffer) {
			if (rawBuffer && this.offset === 0) return this.buffer;
			var out = new Buffer(8);
			this.buffer.copy(out, 0, this.offset, this.offset + 8);
			return out;
		},
		/**
		* Copy 8 bytes of int64 into target buffer at target offset.
		*
		* @param {Buffer} targetBuffer       Buffer to copy into.
		* @param {number} [targetOffset=0]   Offset into target buffer.
		*/
		copy: function(targetBuffer, targetOffset) {
			this.buffer.copy(targetBuffer, targetOffset || 0, this.offset, this.offset + 8);
		},
		/**
		* Returns a number indicating whether this comes before or after or is the
		* same as the other in sort order.
		*
		* @param {Int64} other  Other Int64 to compare.
		*/
		compare: function(other) {
			if ((this.buffer[this.offset] & 128) != (other.buffer[other.offset] & 128)) return other.buffer[other.offset] - this.buffer[this.offset];
			for (var i = 0; i < 8; i++) if (this.buffer[this.offset + i] !== other.buffer[other.offset + i]) return this.buffer[this.offset + i] - other.buffer[other.offset + i];
			return 0;
		},
		/**
		* Returns a boolean indicating if this integer is equal to other.
		*
		* @param {Int64} other  Other Int64 to compare.
		*/
		equals: function(other) {
			return this.compare(other) === 0;
		},
		/**
		* Pretty output in console.log
		*/
		inspect: function() {
			return "[Int64 value:" + this + " octets:" + this.toOctetString(" ") + "]";
		}
	};
}));
//#endregion
//#region node_modules/bser/index.js
var require_bser = /* @__PURE__ */ __commonJSMin(((exports) => {
	var EE$1 = require("events").EventEmitter;
	var util$2 = require("util");
	var os$1 = require("os");
	require("assert");
	var Int64 = require_Int64();
	var isBigEndian = os$1.endianness() == "BE";
	function nextPow2(size) {
		return Math.pow(2, Math.ceil(Math.log(size) / Math.LN2));
	}
	function Accumulator(initsize) {
		this.buf = Buffer.alloc(nextPow2(initsize || 8192));
		this.readOffset = 0;
		this.writeOffset = 0;
	}
	exports.Accumulator = Accumulator;
	Accumulator.prototype.writeAvail = function() {
		return this.buf.length - this.writeOffset;
	};
	Accumulator.prototype.readAvail = function() {
		return this.writeOffset - this.readOffset;
	};
	Accumulator.prototype.reserve = function(size) {
		if (size < this.writeAvail()) return;
		if (this.readOffset > 0) {
			this.buf.copy(this.buf, 0, this.readOffset, this.writeOffset);
			this.writeOffset -= this.readOffset;
			this.readOffset = 0;
		}
		if (size < this.writeAvail()) return;
		var buf = Buffer.alloc(nextPow2(this.buf.length + size - this.writeAvail()));
		this.buf.copy(buf);
		this.buf = buf;
	};
	Accumulator.prototype.append = function(buf) {
		if (Buffer.isBuffer(buf)) {
			this.reserve(buf.length);
			buf.copy(this.buf, this.writeOffset, 0, buf.length);
			this.writeOffset += buf.length;
		} else {
			var size = Buffer.byteLength(buf);
			this.reserve(size);
			this.buf.write(buf, this.writeOffset);
			this.writeOffset += size;
		}
	};
	Accumulator.prototype.assertReadableSize = function(size) {
		if (this.readAvail() < size) throw new Error("wanted to read " + size + " bytes but only have " + this.readAvail());
	};
	Accumulator.prototype.peekString = function(size) {
		this.assertReadableSize(size);
		return this.buf.toString("utf-8", this.readOffset, this.readOffset + size);
	};
	Accumulator.prototype.readString = function(size) {
		var str = this.peekString(size);
		this.readOffset += size;
		return str;
	};
	Accumulator.prototype.peekInt = function(size) {
		this.assertReadableSize(size);
		switch (size) {
			case 1: return this.buf.readInt8(this.readOffset, size);
			case 2: return isBigEndian ? this.buf.readInt16BE(this.readOffset, size) : this.buf.readInt16LE(this.readOffset, size);
			case 4: return isBigEndian ? this.buf.readInt32BE(this.readOffset, size) : this.buf.readInt32LE(this.readOffset, size);
			case 8:
				var big = this.buf.slice(this.readOffset, this.readOffset + 8);
				if (isBigEndian) return new Int64(big);
				return new Int64(byteswap64(big));
			default: throw new Error("invalid integer size " + size);
		}
	};
	Accumulator.prototype.readInt = function(bytes) {
		var ival = this.peekInt(bytes);
		if (ival instanceof Int64 && isFinite(ival.valueOf())) ival = ival.valueOf();
		this.readOffset += bytes;
		return ival;
	};
	Accumulator.prototype.peekDouble = function() {
		this.assertReadableSize(8);
		return isBigEndian ? this.buf.readDoubleBE(this.readOffset) : this.buf.readDoubleLE(this.readOffset);
	};
	Accumulator.prototype.readDouble = function() {
		var dval = this.peekDouble();
		this.readOffset += 8;
		return dval;
	};
	Accumulator.prototype.readAdvance = function(size) {
		if (size > 0) this.assertReadableSize(size);
		else if (size < 0 && this.readOffset + size < 0) throw new Error("advance with negative offset " + size + " would seek off the start of the buffer");
		this.readOffset += size;
	};
	Accumulator.prototype.writeByte = function(value) {
		this.reserve(1);
		this.buf.writeInt8(value, this.writeOffset);
		++this.writeOffset;
	};
	Accumulator.prototype.writeInt = function(value, size) {
		this.reserve(size);
		switch (size) {
			case 1:
				this.buf.writeInt8(value, this.writeOffset);
				break;
			case 2:
				if (isBigEndian) this.buf.writeInt16BE(value, this.writeOffset);
				else this.buf.writeInt16LE(value, this.writeOffset);
				break;
			case 4:
				if (isBigEndian) this.buf.writeInt32BE(value, this.writeOffset);
				else this.buf.writeInt32LE(value, this.writeOffset);
				break;
			default: throw new Error("unsupported integer size " + size);
		}
		this.writeOffset += size;
	};
	Accumulator.prototype.writeDouble = function(value) {
		this.reserve(8);
		if (isBigEndian) this.buf.writeDoubleBE(value, this.writeOffset);
		else this.buf.writeDoubleLE(value, this.writeOffset);
		this.writeOffset += 8;
	};
	var BSER_ARRAY = 0;
	var BSER_OBJECT = 1;
	var BSER_STRING = 2;
	var BSER_INT8 = 3;
	var BSER_INT16 = 4;
	var BSER_INT32 = 5;
	var BSER_INT64 = 6;
	var BSER_REAL = 7;
	var BSER_TRUE = 8;
	var BSER_FALSE = 9;
	var BSER_NULL = 10;
	var BSER_TEMPLATE = 11;
	var BSER_SKIP = 12;
	var ST_NEED_PDU = 0;
	var ST_FILL_PDU = 1;
	var MAX_INT8 = 127;
	var MAX_INT16 = 32767;
	var MAX_INT32 = 2147483647;
	function BunserBuf() {
		EE$1.call(this);
		this.buf = new Accumulator();
		this.state = ST_NEED_PDU;
	}
	util$2.inherits(BunserBuf, EE$1);
	exports.BunserBuf = BunserBuf;
	BunserBuf.prototype.append = function(buf, synchronous) {
		if (synchronous) {
			this.buf.append(buf);
			return this.process(synchronous);
		}
		try {
			this.buf.append(buf);
		} catch (err) {
			this.emit("error", err);
			return;
		}
		this.processLater();
	};
	BunserBuf.prototype.processLater = function() {
		var self = this;
		process.nextTick(function() {
			try {
				self.process(false);
			} catch (err) {
				self.emit("error", err);
			}
		});
	};
	BunserBuf.prototype.process = function(synchronous) {
		if (this.state == ST_NEED_PDU) {
			if (this.buf.readAvail() < 2) return;
			this.expectCode(0);
			this.expectCode(1);
			this.pduLen = this.decodeInt(true);
			if (this.pduLen === false) {
				this.buf.readAdvance(-2);
				return;
			}
			this.buf.reserve(this.pduLen);
			this.state = ST_FILL_PDU;
		}
		if (this.state == ST_FILL_PDU) {
			if (this.buf.readAvail() < this.pduLen) return;
			var val = this.decodeAny();
			if (synchronous) return val;
			this.emit("value", val);
			this.state = ST_NEED_PDU;
		}
		if (!synchronous && this.buf.readAvail() > 0) this.processLater();
	};
	BunserBuf.prototype.raise = function(reason) {
		throw new Error(reason + ", in Buffer of length " + this.buf.buf.length + " (" + this.buf.readAvail() + " readable) at offset " + this.buf.readOffset + " buffer: " + JSON.stringify(this.buf.buf.slice(this.buf.readOffset, this.buf.readOffset + 32).toJSON()));
	};
	BunserBuf.prototype.expectCode = function(expected) {
		var code = this.buf.readInt(1);
		if (code != expected) this.raise("expected bser opcode " + expected + " but got " + code);
	};
	BunserBuf.prototype.decodeAny = function() {
		var code = this.buf.peekInt(1);
		switch (code) {
			case BSER_INT8:
			case BSER_INT16:
			case BSER_INT32:
			case BSER_INT64: return this.decodeInt();
			case BSER_REAL:
				this.buf.readAdvance(1);
				return this.buf.readDouble();
			case BSER_TRUE:
				this.buf.readAdvance(1);
				return true;
			case BSER_FALSE:
				this.buf.readAdvance(1);
				return false;
			case BSER_NULL:
				this.buf.readAdvance(1);
				return null;
			case BSER_STRING: return this.decodeString();
			case BSER_ARRAY: return this.decodeArray();
			case BSER_OBJECT: return this.decodeObject();
			case BSER_TEMPLATE: return this.decodeTemplate();
			default: this.raise("unhandled bser opcode " + code);
		}
	};
	BunserBuf.prototype.decodeArray = function() {
		this.expectCode(BSER_ARRAY);
		var nitems = this.decodeInt();
		var arr = [];
		for (var i = 0; i < nitems; ++i) arr.push(this.decodeAny());
		return arr;
	};
	BunserBuf.prototype.decodeObject = function() {
		this.expectCode(BSER_OBJECT);
		var nitems = this.decodeInt();
		var res = {};
		for (var i = 0; i < nitems; ++i) {
			var key = this.decodeString();
			res[key] = this.decodeAny();
		}
		return res;
	};
	BunserBuf.prototype.decodeTemplate = function() {
		this.expectCode(BSER_TEMPLATE);
		var keys = this.decodeArray();
		var nitems = this.decodeInt();
		var arr = [];
		for (var i = 0; i < nitems; ++i) {
			var obj = {};
			for (var keyidx = 0; keyidx < keys.length; ++keyidx) {
				if (this.buf.peekInt(1) == BSER_SKIP) {
					this.buf.readAdvance(1);
					continue;
				}
				var val = this.decodeAny();
				obj[keys[keyidx]] = val;
			}
			arr.push(obj);
		}
		return arr;
	};
	BunserBuf.prototype.decodeString = function() {
		this.expectCode(BSER_STRING);
		var len = this.decodeInt();
		return this.buf.readString(len);
	};
	BunserBuf.prototype.decodeInt = function(relaxSizeAsserts) {
		if (relaxSizeAsserts && this.buf.readAvail() < 1) return false;
		else this.buf.assertReadableSize(1);
		var code = this.buf.peekInt(1);
		var size = 0;
		switch (code) {
			case BSER_INT8:
				size = 1;
				break;
			case BSER_INT16:
				size = 2;
				break;
			case BSER_INT32:
				size = 4;
				break;
			case BSER_INT64:
				size = 8;
				break;
			default: this.raise("invalid bser int encoding " + code);
		}
		if (relaxSizeAsserts && this.buf.readAvail() < 1 + size) return false;
		this.buf.readAdvance(1);
		return this.buf.readInt(size);
	};
	function loadFromBuffer(input) {
		var buf = new BunserBuf();
		var result = buf.append(input, true);
		if (buf.buf.readAvail()) throw Error("excess data found after input buffer, use BunserBuf instead");
		if (typeof result === "undefined") throw Error("no bser found in string and no error raised!?");
		return result;
	}
	exports.loadFromBuffer = loadFromBuffer;
	function byteswap64(buf) {
		var swap = Buffer.alloc(buf.length);
		for (var i = 0; i < buf.length; i++) swap[i] = buf[buf.length - 1 - i];
		return swap;
	}
	function dump_int64(buf, val) {
		var be = val.toBuffer();
		if (isBigEndian) {
			buf.writeByte(BSER_INT64);
			buf.append(be);
			return;
		}
		var le = byteswap64(be);
		buf.writeByte(BSER_INT64);
		buf.append(le);
	}
	function dump_int(buf, val) {
		var abs = Math.abs(val);
		if (abs <= MAX_INT8) {
			buf.writeByte(BSER_INT8);
			buf.writeInt(val, 1);
		} else if (abs <= MAX_INT16) {
			buf.writeByte(BSER_INT16);
			buf.writeInt(val, 2);
		} else if (abs <= MAX_INT32) {
			buf.writeByte(BSER_INT32);
			buf.writeInt(val, 4);
		} else dump_int64(buf, new Int64(val));
	}
	function dump_any(buf, val) {
		switch (typeof val) {
			case "number":
				if (isFinite(val) && Math.floor(val) === val) dump_int(buf, val);
				else {
					buf.writeByte(BSER_REAL);
					buf.writeDouble(val);
				}
				return;
			case "string":
				buf.writeByte(BSER_STRING);
				dump_int(buf, Buffer.byteLength(val));
				buf.append(val);
				return;
			case "boolean":
				buf.writeByte(val ? BSER_TRUE : BSER_FALSE);
				return;
			case "object":
				if (val === null) {
					buf.writeByte(BSER_NULL);
					return;
				}
				if (val instanceof Int64) {
					dump_int64(buf, val);
					return;
				}
				if (Array.isArray(val)) {
					buf.writeByte(BSER_ARRAY);
					dump_int(buf, val.length);
					for (var i = 0; i < val.length; ++i) dump_any(buf, val[i]);
					return;
				}
				buf.writeByte(BSER_OBJECT);
				var keys = Object.keys(val);
				var num_keys = keys.length;
				for (var i = 0; i < keys.length; ++i) {
					var key = keys[i];
					var v = val[key];
					if (typeof v == "undefined") num_keys--;
				}
				dump_int(buf, num_keys);
				for (var i = 0; i < keys.length; ++i) {
					var key = keys[i];
					var v = val[key];
					if (typeof v == "undefined") continue;
					dump_any(buf, key);
					try {
						dump_any(buf, v);
					} catch (e) {
						throw new Error(e.message + " (while serializing object property with name `" + key + "')");
					}
				}
				return;
			default: throw new Error("cannot serialize type " + typeof val + " to BSER");
		}
	}
	function dumpToBuffer(val) {
		var buf = new Accumulator();
		buf.writeByte(0);
		buf.writeByte(1);
		buf.writeByte(BSER_INT32);
		buf.writeInt(0, 4);
		dump_any(buf, val);
		var off = buf.writeOffset;
		var len = off - 7;
		buf.writeOffset = 3;
		buf.writeInt(len, 4);
		buf.writeOffset = off;
		return buf.buf.slice(0, off);
	}
	exports.dumpToBuffer = dumpToBuffer;
}));
//#endregion
//#region node_modules/fb-watchman/index.js
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
var require_fb_watchman = /* @__PURE__ */ __commonJSMin(((exports, module) => {
	var net$1 = require("net");
	var EE = require("events").EventEmitter;
	var util$1 = require("util");
	var childProcess = require("child_process");
	var bser = require_bser();
	var unilateralTags = ["subscription", "log"];
	/**
	* @param options An object with the following optional keys:
	*   * 'watchmanBinaryPath' (string) Absolute path to the watchman binary.
	*     If not provided, the Client locates the binary using the PATH specified
	*     by the node child_process's default env.
	*/
	function Client(options) {
		EE.call(this);
		this.watchmanBinaryPath = "watchman";
		if (options && options.watchmanBinaryPath) this.watchmanBinaryPath = options.watchmanBinaryPath.trim();
		this.commands = [];
	}
	util$1.inherits(Client, EE);
	module.exports.Client = Client;
	Client.prototype.sendNextCommand = function() {
		if (this.currentCommand) return;
		this.currentCommand = this.commands.shift();
		if (!this.currentCommand) return;
		this.socket.write(bser.dumpToBuffer(this.currentCommand.cmd));
	};
	Client.prototype.cancelCommands = function(why) {
		var error = new Error(why);
		var cmds = this.commands;
		this.commands = [];
		if (this.currentCommand) {
			cmds.unshift(this.currentCommand);
			this.currentCommand = null;
		}
		cmds.forEach(function(cmd) {
			cmd.cb(error);
		});
	};
	Client.prototype.connect = function() {
		var self = this;
		function makeSock(sockname) {
			self.bunser = new bser.BunserBuf();
			self.bunser.on("value", function(obj) {
				var unilateral = false;
				for (var i = 0; i < unilateralTags.length; i++) {
					var tag = unilateralTags[i];
					if (tag in obj) unilateral = tag;
				}
				if (unilateral) self.emit(unilateral, obj);
				else if (self.currentCommand) {
					var cmd = self.currentCommand;
					self.currentCommand = null;
					if ("error" in obj) {
						var error = new Error(obj.error);
						error.watchmanResponse = obj;
						cmd.cb(error);
					} else cmd.cb(null, obj);
				}
				self.sendNextCommand();
			});
			self.bunser.on("error", function(err) {
				self.emit("error", err);
			});
			self.socket = net$1.createConnection(sockname);
			self.socket.on("connect", function() {
				self.connecting = false;
				self.emit("connect");
				self.sendNextCommand();
			});
			self.socket.on("error", function(err) {
				self.connecting = false;
				self.emit("error", err);
			});
			self.socket.on("data", function(buf) {
				if (self.bunser) self.bunser.append(buf);
			});
			self.socket.on("end", function() {
				self.socket = null;
				self.bunser = null;
				self.cancelCommands("The watchman connection was closed");
				self.emit("end");
			});
		}
		if (process.env.WATCHMAN_SOCK) {
			makeSock(process.env.WATCHMAN_SOCK);
			return;
		}
		var args = ["--no-pretty", "get-sockname"];
		var proc = null;
		var spawnFailed = false;
		function spawnError(error) {
			if (spawnFailed) return;
			spawnFailed = true;
			if (error.code === "EACCES" || error.errno === "EACCES") error.message = "The Watchman CLI is installed but cannot be spawned because of a permission problem";
			else if (error.code === "ENOENT" || error.errno === "ENOENT") error.message = "Watchman was not found in PATH.  See https://facebook.github.io/watchman/docs/install.html for installation instructions";
			console.error("Watchman: ", error.message);
			self.emit("error", error);
		}
		try {
			proc = childProcess.spawn(this.watchmanBinaryPath, args, {
				stdio: [
					"ignore",
					"pipe",
					"pipe"
				],
				windowsHide: true
			});
		} catch (error) {
			spawnError(error);
			return;
		}
		var stdout = [];
		var stderr = [];
		proc.stdout.on("data", function(data) {
			stdout.push(data);
		});
		proc.stderr.on("data", function(data) {
			data = data.toString("utf8");
			stderr.push(data);
			console.error(data);
		});
		proc.on("error", function(error) {
			spawnError(error);
		});
		proc.on("close", function(code, signal) {
			if (code !== 0) {
				spawnError(/* @__PURE__ */ new Error(self.watchmanBinaryPath + " " + args.join(" ") + " returned with exit code=" + code + ", signal=" + signal + ", stderr= " + stderr.join("")));
				return;
			}
			try {
				var obj = JSON.parse(stdout.join(""));
				if ("error" in obj) {
					var error = new Error(obj.error);
					error.watchmanResponse = obj;
					self.emit("error", error);
					return;
				}
				makeSock(obj.sockname);
			} catch (e) {
				self.emit("error", e);
			}
		});
	};
	Client.prototype.command = function(args, done) {
		done = done || function() {};
		this.commands.push({
			cmd: args,
			cb: done
		});
		if (!this.socket) {
			if (!this.connecting) {
				this.connecting = true;
				this.connect();
				return;
			}
			return;
		}
		this.sendNextCommand();
	};
	var cap_versions = {
		"cmd-watch-del-all": "3.1.1",
		"cmd-watch-project": "3.1",
		"relative_root": "3.3",
		"term-dirname": "3.1",
		"term-idirname": "3.1",
		"wildmatch": "3.7"
	};
	function vers_compare(a, b) {
		a = a.split(".");
		b = b.split(".");
		for (var i = 0; i < 3; i++) {
			var d = parseInt(a[i] || "0") - parseInt(b[i] || "0");
			if (d != 0) return d;
		}
		return 0;
	}
	function have_cap(vers, name) {
		if (name in cap_versions) return vers_compare(vers, cap_versions[name]) >= 0;
		return false;
	}
	Client.prototype._synthesizeCapabilityCheck = function(resp, optional, required) {
		resp.capabilities = {};
		var version = resp.version;
		optional.forEach(function(name) {
			resp.capabilities[name] = have_cap(version, name);
		});
		required.forEach(function(name) {
			var have = have_cap(version, name);
			resp.capabilities[name] = have;
			if (!have) resp.error = "client required capability `" + name + "` is not supported by this server";
		});
		return resp;
	};
	Client.prototype.capabilityCheck = function(caps, done) {
		var optional = caps.optional || [];
		var required = caps.required || [];
		var self = this;
		this.command(["version", {
			optional,
			required
		}], function(error, resp) {
			if (error) {
				done(error);
				return;
			}
			if (!("capabilities" in resp)) {
				resp = self._synthesizeCapabilityCheck(resp, optional, required);
				if (resp.error) {
					error = new Error(resp.error);
					error.watchmanResponse = resp;
					done(error);
					return;
				}
			}
			done(null, resp);
		});
	};
	Client.prototype.end = function() {
		this.cancelCommands("The client was ended");
		if (this.socket) {
			this.socket.end();
			this.socket = null;
		}
		this.bunser = null;
	};
}));
//#endregion
//#region src/core/watchman.ts
var logger$19, requiredCapabilities, Watchman;
var init_watchman = __esmMin((() => {
	init_dist_node();
	init_logger$2();
	init_node();
	logger$19 = createLogger$1("core-watchman");
	requiredCapabilities = [
		"relative_root",
		"cmd-watch-project",
		"wildmatch",
		"field-new"
	];
	Watchman = class Watchman {
		channel;
		client;
		relative_path;
		_listeners = [];
		_root;
		subscription;
		constructor(binaryPath, channel) {
			this.channel = channel;
			const watchman = require_fb_watchman();
			this.client = new watchman.Client({ watchmanBinaryPath: binaryPath });
			this.client.setMaxListeners(300);
		}
		get root() {
			return this._root;
		}
		checkCapability() {
			let { client } = this;
			return new Promise((resolve) => {
				client.capabilityCheck({
					optional: [],
					required: requiredCapabilities
				}, (error, resp) => {
					if (error) return resolve(false);
					let { capabilities } = resp;
					for (let key of Object.keys(capabilities)) if (!capabilities[key]) return resolve(false);
					resolve(true);
				});
			});
		}
		async watchProject(root) {
			this._root = root;
			let { watch, warning, relative_path } = await this.command(["watch-project", root]);
			if (!watch) return false;
			if (warning) {
				logger$19.warn(warning);
				this.appendOutput(warning, "Warning");
			}
			this.relative_path = relative_path;
			logger$19.info(`watchman watching project: ${root}`);
			this.appendOutput(`watchman watching project: ${root}`);
			let { clock } = await this.command(["clock", watch]);
			let sub = {
				expression: ["allof", [
					"type",
					"f",
					"wholename"
				]],
				fields: [
					"name",
					"size",
					"new",
					"exists",
					"type",
					"mtime_ms",
					"ctime_ms"
				],
				since: clock
			};
			if (relative_path) {
				sub.relative_root = relative_path;
				root = path$5.join(watch, relative_path);
			}
			let uid = v1();
			let { subscribe } = await this.command([
				"subscribe",
				watch,
				uid,
				sub
			]);
			this.subscription = subscribe;
			this.appendOutput(`subscribing events in ${root}`);
			this.client.on("subscription", (resp) => {
				if (!resp || resp.subscription != uid || !resp.files) return;
				for (let listener of this._listeners) listener(resp);
			});
			return true;
		}
		command(args) {
			return new Promise((resolve, reject) => {
				this.client.command(args, (error, resp) => {
					if (error) return reject(error);
					resolve(resp);
				});
			});
		}
		subscribe(globPattern, cb) {
			let fn = (change) => {
				let { files } = change;
				files = files.filter((f) => f.type == "f" && minimatch(f.name, globPattern, { dot: true }));
				if (!files.length) return;
				let ev = Object.assign({}, change);
				if (this.relative_path) ev.root = path$5.resolve(change.root, this.relative_path);
				this.appendOutput(`file change of "${globPattern}" detected: ${JSON.stringify(ev, null, 2)}`);
				cb(ev);
			};
			this._listeners.push(fn);
			return { dispose: () => {
				let idx = this._listeners.indexOf(fn);
				if (idx !== -1) this._listeners.splice(idx, 1);
			} };
		}
		dispose() {
			if (this.client) {
				this.client.end();
				this.client = void 0;
			}
		}
		appendOutput(message, type = "Info") {
			if (this.channel) this.channel.appendLine(`[${type}  - ${(/* @__PURE__ */ new Date()).toLocaleTimeString()}] ${message}`);
		}
		static async createClient(binaryPath, root, channel) {
			let watchman;
			try {
				watchman = new Watchman(binaryPath, channel);
				if (!await watchman.checkCapability()) throw new Error("required capabilities do not exist.");
				if (!await watchman.watchProject(root)) throw new Error("unable to watch");
				return watchman;
			} catch (e) {
				if (watchman) watchman.dispose();
				throw e;
			}
		}
	};
}));
//#endregion
//#region src/core/fileSystemWatcher.ts
var WATCHMAN_COMMAND, FileSystemWatcherManager, FileSystemWatcher;
var init_fileSystemWatcher = __esmMin((() => {
	init_esm();
	init_logger$2();
	init_util$7();
	init_array();
	init_fs();
	init_node();
	init_protocol();
	init_watchman();
	createLogger$1("fileSystemWatcher");
	WATCHMAN_COMMAND = "watchman";
	FileSystemWatcherManager = class FileSystemWatcherManager {
		workspaceFolder;
		config;
		clientsMap = /* @__PURE__ */ new Map();
		disposables = [];
		channel;
		creating = /* @__PURE__ */ new Set();
		static watchers = /* @__PURE__ */ new Set();
		_onDidCreateClient = new import_main$1.Emitter();
		disabled = false;
		onDidCreateClient = this._onDidCreateClient.event;
		constructor(workspaceFolder, config) {
			this.workspaceFolder = workspaceFolder;
			this.config = config;
			this.disabled = config.enable === false;
		}
		attach(channel) {
			this.channel = channel;
			let createClient = (folder) => {
				let root = URI.parse(folder.uri).fsPath;
				this.createClient(root);
			};
			this.workspaceFolder.workspaceFolders.forEach((folder) => {
				createClient(folder);
			});
			this.workspaceFolder.onDidChangeWorkspaceFolders((e) => {
				e.added.forEach((folder) => {
					createClient(folder);
				});
				e.removed.forEach((folder) => {
					let root = URI.parse(folder.uri).fsPath;
					let client = this.clientsMap.get(root);
					if (client) {
						this.clientsMap.delete(root);
						client.dispose();
					}
				});
			}, null, this.disposables);
		}
		waitClient(root) {
			if (this.clientsMap.has(root)) return Promise.resolve(this.clientsMap.get(root));
			return new Promise((resolve) => {
				let disposable = this.onDidCreateClient((r) => {
					if (r == root) {
						disposable.dispose();
						resolve(this.clientsMap.get(r));
					}
				});
			});
		}
		async createClient(root, skipCheck = false) {
			if (!skipCheck && (this.disabled || isFolderIgnored(root, this.config.ignoredFolders))) return;
			if (this.has(root)) return this.waitClient(root);
			try {
				this.creating.add(root);
				let watchmanPath = await this.getWatchmanPath();
				let client = await Watchman.createClient(watchmanPath, root, this.channel);
				this.creating.delete(root);
				this.clientsMap.set(root, client);
				for (let watcher of FileSystemWatcherManager.watchers) watcher.listen(root, client);
				this._onDidCreateClient.fire(root);
				return client;
			} catch (e) {
				this.creating.delete(root);
				if (this.channel) this.channel.appendLine(`Error on create watchman client: ${e}`);
				return false;
			}
		}
		async getWatchmanPath() {
			let watchmanPath = this.config.watchmanPath ?? WATCHMAN_COMMAND;
			if (!process.env.WATCHMAN_SOCK) watchmanPath = await which(watchmanPath, { all: false });
			return watchmanPath;
		}
		has(root) {
			let curr = Array.from(this.clientsMap.keys());
			curr.push(...this.creating);
			return curr.some((r) => sameFile(r, root));
		}
		createFileSystemWatcher(globPattern, ignoreCreateEvents, ignoreChangeEvents, ignoreDeleteEvents) {
			let fileWatcher = new FileSystemWatcher(globPattern, ignoreCreateEvents, ignoreChangeEvents, ignoreDeleteEvents);
			let base = typeof globPattern === "string" ? void 0 : globPattern.baseUri.fsPath;
			for (let [root, client] of this.clientsMap.entries()) {
				if (base && isParentFolder(root, base, true)) base = void 0;
				fileWatcher.listen(root, client);
			}
			if (base) this.createClient(base);
			FileSystemWatcherManager.watchers.add(fileWatcher);
			return fileWatcher;
		}
		dispose() {
			this._onDidCreateClient.dispose();
			for (let client of this.clientsMap.values()) if (client) client.dispose();
			this.clientsMap.clear();
			FileSystemWatcherManager.watchers.clear();
			disposeAll(this.disposables);
		}
	};
	FileSystemWatcher = class {
		globPattern;
		ignoreCreateEvents;
		ignoreChangeEvents;
		ignoreDeleteEvents;
		_onDidCreate = new import_main$1.Emitter();
		_onDidChange = new import_main$1.Emitter();
		_onDidDelete = new import_main$1.Emitter();
		_onDidRename = new import_main$1.Emitter();
		disposables = [];
		subscribe;
		onDidCreate = this._onDidCreate.event;
		onDidChange = this._onDidChange.event;
		onDidDelete = this._onDidDelete.event;
		onDidRename = this._onDidRename.event;
		_onDidListen = new import_main$1.Emitter();
		onDidListen = this._onDidListen.event;
		constructor(globPattern, ignoreCreateEvents, ignoreChangeEvents, ignoreDeleteEvents) {
			this.globPattern = globPattern;
			this.ignoreCreateEvents = ignoreCreateEvents;
			this.ignoreChangeEvents = ignoreChangeEvents;
			this.ignoreDeleteEvents = ignoreDeleteEvents;
		}
		listen(root, client) {
			let { globPattern, ignoreCreateEvents, ignoreChangeEvents, ignoreDeleteEvents } = this;
			let pattern;
			let basePath;
			if (typeof globPattern === "string") pattern = globPattern;
			else {
				pattern = globPattern.pattern;
				basePath = globPattern.baseUri.fsPath;
				if (!isParentFolder(root, basePath, true)) return;
			}
			const onChange = (change) => {
				let { root, files } = change;
				if (basePath && !sameFile(root, basePath)) files = files.filter((f) => {
					if (f.type != "f") return false;
					let fullpath = path$5.join(root, f.name);
					if (!isParentFolder(basePath, fullpath)) return false;
					return minimatch(path$5.relative(basePath, fullpath), pattern, { dot: true });
				});
				else files = files.filter((f) => f.type == "f" && minimatch(f.name, pattern, { dot: true }));
				for (let file of files) {
					let uri = URI.file(path$5.join(root, file.name));
					if (!file.exists) {
						if (!ignoreDeleteEvents) this._onDidDelete.fire(uri);
					} else if (file.new === true) {
						if (!ignoreCreateEvents) this._onDidCreate.fire(uri);
					} else if (!ignoreChangeEvents) this._onDidChange.fire(uri);
				}
				if (files.length == 2 && files[0].exists !== files[1].exists) {
					let oldFile = files.find((o) => o.exists !== true);
					let newFile = files.find((o) => o.exists === true);
					if (oldFile.size == newFile.size) this._onDidRename.fire({
						oldUri: URI.file(path$5.join(root, oldFile.name)),
						newUri: URI.file(path$5.join(root, newFile.name))
					});
				}
				if (files.length > 2 && files.length % 2 == 0) {
					let [oldFiles, newFiles] = splitArray(files, (o) => o.exists === false);
					if (oldFiles.length == newFiles.length) for (let oldFile of oldFiles) {
						let newFile = newFiles.find((o) => o.size == oldFile.size && o.mtime_ms == oldFile.mtime_ms);
						if (newFile) this._onDidRename.fire({
							oldUri: URI.file(path$5.join(root, oldFile.name)),
							newUri: URI.file(path$5.join(root, newFile.name))
						});
					}
				}
			};
			this.subscribe = client.subscription;
			let disposable = client.subscribe(pattern, onChange);
			this._onDidListen.fire();
			this.disposables.push(disposable);
		}
		dispose() {
			FileSystemWatcherManager.watchers.delete(this);
			this._onDidRename.dispose();
			this._onDidCreate.dispose();
			this._onDidChange.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/model/editInspect.ts
function getOriginalLine(item, change) {
	if (typeof item.lnum !== "number") return void 0;
	let lnum = item.lnum;
	if (change) {
		let edits = change.edits.map((o) => SnippetTextEdit.is(o) ? {
			range: o.range,
			newText: o.snippet.value
		} : o);
		edits = mergeSortEdits(edits);
		lnum = getPositionFromEdits(Position.create(lnum - 1, 0), edits).line + 1;
	}
	return lnum;
}
function grouByAnnotation(changes, annotations) {
	let map = /* @__PURE__ */ new Map();
	for (let change of changes) {
		let id = getAnnotationKey(change) ?? null;
		let key = id ? annotations[id]?.label : null;
		let arr = map.get(key);
		if (arr) arr.push(change);
		else map.set(key, [change]);
	}
	return map;
}
var global_id, EditInspect;
var init_editInspect = __esmMin((() => {
	init_main$2();
	init_esm();
	init_events();
	init_util$7();
	init_array();
	init_fs();
	init_node();
	init_textedit();
	init_highlighter();
	global_id = 0;
	EditInspect = class {
		nvim;
		keymaps;
		disposables = [];
		bufnr;
		items = [];
		renameMap = /* @__PURE__ */ new Map();
		constructor(nvim, keymaps) {
			this.nvim = nvim;
			this.keymaps = keymaps;
			events_default.on("BufUnload", (bufnr) => {
				if (bufnr == this.bufnr) this.dispose();
			}, null, this.disposables);
		}
		addFile(filepath, highlighter, lnum) {
			this.items.push({
				index: highlighter.length,
				filepath,
				lnum
			});
		}
		async show(state) {
			let { nvim } = this;
			let id = global_id++;
			nvim.pauseNotification();
			nvim.command(`tabe +setl\\ buftype=nofile CocWorkspaceEdit${id}`, true);
			nvim.command(`setl bufhidden=wipe nolist`, true);
			nvim.command("setl nobuflisted wrap undolevels=-1 filetype=cocedits noswapfile", true);
			await nvim.resumeNotification(true);
			let buffer = await nvim.buffer;
			let cwd = await nvim.call("getcwd");
			this.bufnr = buffer.id;
			const relpath = (uri) => {
				let fsPath = URI.parse(uri).fsPath;
				return isParentFolder(cwd, fsPath, true) ? path$5.relative(cwd, fsPath) : fsPath;
			};
			const absPath = (filepath) => {
				return path$5.isAbsolute(filepath) ? filepath : path$5.join(cwd, filepath);
			};
			let highlighter = new Highlighter();
			let map = grouByAnnotation(toArray(state.edit.documentChanges), state.edit.changeAnnotations ?? {});
			for (let [label, changes] of map.entries()) {
				if (label) {
					highlighter.addLine(label, "MoreMsg");
					highlighter.addLine("");
				}
				for (let change of changes) if (TextDocumentEdit.is(change)) {
					let linesChange = state.changes[change.textDocument.uri];
					let fsPath = relpath(change.textDocument.uri);
					highlighter.addTexts([
						{
							text: "Change",
							hlGroup: "Title"
						},
						{ text: " " },
						{
							text: fsPath,
							hlGroup: "Directory"
						},
						{
							text: `:${linesChange.lnum}`,
							hlGroup: "LineNr"
						}
					]);
					this.addFile(fsPath, highlighter, linesChange.lnum);
					highlighter.addLine("");
					this.addChangedLines(highlighter, linesChange, fsPath, linesChange.lnum);
					highlighter.addLine("");
				} else if (CreateFile.is(change) || DeleteFile.is(change)) {
					let title = DeleteFile.is(change) ? "Delete" : "Create";
					let fsPath = relpath(change.uri);
					highlighter.addTexts([
						{
							text: title,
							hlGroup: "Title"
						},
						{ text: " " },
						{
							text: fsPath,
							hlGroup: "Directory"
						}
					]);
					this.addFile(fsPath, highlighter);
					highlighter.addLine("");
				} else if (RenameFile.is(change)) {
					let oldPath = relpath(change.oldUri);
					let newPath = relpath(change.newUri);
					highlighter.addTexts([
						{
							text: "Rename",
							hlGroup: "Title"
						},
						{ text: " " },
						{
							text: oldPath,
							hlGroup: "Directory"
						},
						{
							text: "->",
							hlGroup: "Comment"
						},
						{
							text: newPath,
							hlGroup: "Directory"
						}
					]);
					this.renameMap.set(oldPath, newPath);
					this.addFile(newPath, highlighter);
					highlighter.addLine("");
				}
			}
			nvim.pauseNotification();
			highlighter.render(buffer);
			buffer.setOption("modifiable", false, true);
			await nvim.resumeNotification(true);
			this.disposables.push(this.keymaps.registerLocalKeymap(buffer.id, "n", "<CR>", async () => {
				let lnum = await nvim.call("line", ".");
				let col = await nvim.call("col", ".");
				let find;
				for (let i = this.items.length - 1; i >= 0; i--) {
					let item = this.items[i];
					if (lnum >= item.index) {
						find = item;
						break;
					}
				}
				if (!find) return;
				let uri = URI.file(absPath(find.filepath)).toString();
				let filepath = this.renameMap.has(find.filepath) ? this.renameMap.get(find.filepath) : find.filepath;
				await nvim.call("coc#util#open_file", ["tab drop", absPath(filepath)]);
				let change = toArray(state.edit.documentChanges).find((o) => TextDocumentEdit.is(o) && o.textDocument.uri == uri);
				let originLine = getOriginalLine(find, change);
				if (originLine !== void 0) await nvim.call("cursor", [originLine, col]);
				nvim.redrawVim();
			}, true));
			this.disposables.push(this.keymaps.registerLocalKeymap(buffer.id, "n", "<esc>", async () => {
				nvim.command("bwipeout!", true);
			}, true));
		}
		addChangedLines(highlighter, linesChange, fsPath, lnum) {
			let diffs = fastDiff(linesChange.oldLines.join("\n"), linesChange.newLines.join("\n"));
			for (let i = 0; i < diffs.length; i++) {
				let diff = diffs[i];
				if (diff[0] == fastDiff.EQUAL) {
					let text = diff[1];
					if (!text.includes("\n")) highlighter.addText(text);
					else {
						let parts = text.split("\n");
						highlighter.addText(parts[0]);
						let curr = lnum + parts.length - 1;
						highlighter.addLine("");
						highlighter.addTexts([
							{
								text: "Change",
								hlGroup: "Title"
							},
							{ text: " " },
							{
								text: fsPath,
								hlGroup: "Directory"
							},
							{
								text: `:${curr}`,
								hlGroup: "LineNr"
							}
						]);
						this.addFile(fsPath, highlighter, curr);
						highlighter.addLine("");
						let last = parts[parts.length - 1];
						highlighter.addText(last);
					}
					lnum += text.split("\n").length - 1;
				} else if (diff[0] == fastDiff.DELETE) {
					lnum += diff[1].split("\n").length - 1;
					highlighter.addText(diff[1], "DiffDelete");
				} else highlighter.addText(diff[1], "DiffAdd");
			}
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/core/files.ts
function fileMatch(root, relpath, pattern) {
	let filepath = path$5.join(root, relpath);
	if (typeof pattern !== "string") {
		let base = pattern.baseUri.fsPath;
		if (!isParentFolder(base, filepath)) return false;
		return minimatch(path$5.relative(base, filepath), pattern.pattern, { dot: true });
	}
	return minimatch(relpath, pattern, { dot: true });
}
function fsPath(uri) {
	return URI.parse(uri).fsPath;
}
var logger$18, Files;
var init_files = __esmMin((() => {
	init_main$2();
	init_esm();
	init_commands$2();
	init_events();
	init_logger$2();
	init_editInspect();
	init_errors();
	init_fs();
	init_node();
	init_protocol();
	init_string$1();
	init_textedit();
	logger$18 = createLogger$1("core-files");
	Files = class {
		documents;
		configurations;
		workspaceFolderControl;
		keymaps;
		nvim;
		env;
		window;
		editState;
		operationTimeout = 500;
		_onDidCreateFiles = new import_main$1.Emitter();
		_onDidRenameFiles = new import_main$1.Emitter();
		_onDidDeleteFiles = new import_main$1.Emitter();
		_onWillCreateFiles = new import_main$1.Emitter();
		_onWillRenameFiles = new import_main$1.Emitter();
		_onWillDeleteFiles = new import_main$1.Emitter();
		onDidCreateFiles = this._onDidCreateFiles.event;
		onDidRenameFiles = this._onDidRenameFiles.event;
		onDidDeleteFiles = this._onDidDeleteFiles.event;
		onWillCreateFiles = this._onWillCreateFiles.event;
		onWillRenameFiles = this._onWillRenameFiles.event;
		onWillDeleteFiles = this._onWillDeleteFiles.event;
		constructor(documents, configurations, workspaceFolderControl, keymaps) {
			this.documents = documents;
			this.configurations = configurations;
			this.workspaceFolderControl = workspaceFolderControl;
			this.keymaps = keymaps;
		}
		attach(nvim, env, window) {
			this.nvim = nvim;
			this.env = env;
			this.window = window;
		}
		async openTextDocument(uri) {
			uri = typeof uri === "string" ? URI.file(uri) : uri;
			let doc = this.documents.getDocument(uri.toString());
			if (doc) return doc;
			const scheme = uri.scheme;
			if (scheme == "file") {
				if (!fs$6.existsSync(uri.fsPath)) throw fileNotExists(uri.fsPath);
				fs$6.accessSync(uri.fsPath, fs$6.constants.R_OK);
			}
			if (scheme == "untitled") {
				await this.nvim.call("coc#util#open_file", ["tab drop", uri.path]);
				return await this.documents.document;
			}
			return await this.loadResource(uri.toString(), null);
		}
		async jumpTo(uri, position, openCommand) {
			if (!openCommand) openCommand = this.configurations.initialConfiguration.get("coc.preferences.jumpCommand", "edit");
			let { nvim } = this;
			let u = uri instanceof URI ? uri : URI.parse(uri);
			let doc = this.documents.getDocument(u.with({ fragment: "" }).toString());
			let bufnr = doc ? doc.bufnr : -1;
			if (!position && u.scheme === "file" && u.fragment) {
				let parts = u.fragment.split(",");
				let lnum = parseInt(parts[0], 10);
				if (!isNaN(lnum)) {
					let col = parts.length > 0 && /^\d+$/.test(parts[1]) ? parseInt(parts[1], 10) : void 0;
					position = Position.create(lnum - 1, col == null ? 0 : col - 1);
				}
			}
			if (bufnr != -1 && openCommand == "edit") {
				nvim.pauseNotification();
				nvim.command(`silent! normal! m'`, true);
				nvim.command(`buffer ${bufnr}`, true);
				nvim.command(`if &filetype ==# '' | filetype detect | endif`, true);
				if (position) {
					let col = byteIndex(doc.getline(position.line), position.character) + 1;
					nvim.call("cursor", [position.line + 1, col], true);
				}
				await nvim.resumeNotification(true);
			} else {
				let { fsPath, scheme } = u;
				let pos = position == null ? null : [position.line, position.character];
				if (scheme == "file") {
					let bufname = normalizeFilePath(fsPath);
					await this.nvim.call("coc#util#jump", [
						openCommand,
						bufname,
						pos
					]);
				} else await this.nvim.call("coc#util#jump", [
					openCommand,
					uri.toString(),
					pos
				]);
			}
		}
		/**
		* Open resource by uri
		*/
		async openResource(uri) {
			let { nvim } = this;
			let u = URI.parse(uri);
			if (/^https?/.test(u.scheme)) {
				await nvim.call("coc#ui#open_url", uri);
				return;
			}
			await this.jumpTo(uri);
			await this.documents.document;
		}
		/**
		* Load uri as document.
		*/
		async loadResource(uri, cmd) {
			let doc = this.documents.getDocument(uri);
			if (doc) return doc;
			if (cmd === void 0) cmd = this.configurations.getConfiguration("workspace").get("openResourceCommand", "tab drop");
			let u = URI.parse(uri);
			let bufname = u.scheme === "file" ? u.fsPath : uri;
			let bufnr;
			if (cmd) {
				let winid = await this.nvim.call("win_getid");
				bufnr = await this.nvim.call("coc#util#open_file", [cmd, bufname]);
				await this.nvim.call("win_gotoid", [winid]);
			} else bufnr = (await this.nvim.call("coc#ui#open_files", [[bufname]]))[0];
			return await this.documents.createDocument(bufnr);
		}
		/**
		* Load the files that not loaded
		*/
		async loadResources(uris) {
			let { documents } = this;
			let files = uris.map((uri) => {
				let u = URI.parse(uri);
				return u.scheme == "file" ? u.fsPath : uri;
			});
			let bufnrs = await this.nvim.call("coc#ui#open_files", [files]);
			return await Promise.all(bufnrs.map((bufnr) => {
				return documents.createDocument(bufnr);
			}));
		}
		/**
		* Create a file in vim and disk
		*/
		async createFile(filepath, opts = {}, recovers) {
			let { nvim } = this;
			let exists = fs$6.existsSync(filepath);
			if (exists && !opts.overwrite && !opts.ignoreIfExists) throw fileExists(filepath);
			if (!exists || opts.overwrite) {
				let tokenSource = new import_main$1.CancellationTokenSource();
				await this.fireWaitUntilEvent(this._onWillCreateFiles, {
					files: [URI.file(filepath)],
					token: tokenSource.token
				}, recovers);
				tokenSource.cancel();
				let dir = path$5.dirname(filepath);
				if (!fs$6.existsSync(dir)) {
					let folder;
					let curr = dir;
					while (![
						".",
						"/",
						path$5.parse(dir).root
					].includes(curr)) {
						if (fs$6.existsSync(path$5.dirname(curr))) {
							folder = curr;
							break;
						}
						curr = path$5.dirname(curr);
					}
					fs$6.mkdirSync(dir, { recursive: true });
					if (Array.isArray(recovers)) recovers.push(() => {
						fs$6.rmSync(folder, {
							force: true,
							recursive: true
						});
					});
				}
				fs$6.writeFileSync(filepath, "", "utf8");
				if (Array.isArray(recovers)) recovers.push(() => {
					fs$6.rmSync(filepath, {
						force: true,
						recursive: true
					});
				});
				let bufnr = (await this.loadResource(filepath)).bufnr;
				if (Array.isArray(recovers)) recovers.push(() => {
					events_default.fire("BufUnload", [bufnr]);
					return nvim.command(`silent! bd! ${bufnr}`);
				});
				this._onDidCreateFiles.fire({ files: [URI.file(filepath)] });
			}
		}
		/**
		* Delete a file or folder from vim and disk.
		*/
		async deleteFile(filepath, opts = {}, recovers) {
			let { ignoreIfNotExists, recursive } = opts;
			let stat = await statAsync(filepath);
			let isDir = stat && stat.isDirectory();
			if (!stat && !ignoreIfNotExists) throw fileNotExists(filepath);
			if (stat == null) return;
			let uri = URI.file(filepath);
			await this.fireWaitUntilEvent(this._onWillDeleteFiles, { files: [uri] }, recovers);
			if (!isDir) {
				let bufnr = await this.nvim.call("bufnr", [filepath]);
				if (bufnr) {
					events_default.fire("BufUnload", [bufnr]);
					await this.nvim.command(`silent! bwipeout ${bufnr}`);
					if (Array.isArray(recovers)) recovers.push(() => {
						return this.loadResource(uri.toString());
					});
				}
			}
			let folder = path$5.join(os$5.tmpdir(), "coc-" + process.pid);
			fs$6.mkdirSync(folder, { recursive: true });
			let md5 = crypto$1.createHash("md5").update(filepath).digest("hex");
			if (isDir && recursive) {
				let dest = path$5.join(folder, md5);
				let dir = path$5.dirname(filepath);
				fs$6.renameSync(filepath, dest);
				if (Array.isArray(recovers)) recovers.push(async () => {
					fs$6.mkdirSync(dir, { recursive: true });
					fs$6.renameSync(dest, filepath);
				});
			} else if (isDir) {
				fs$6.rmdirSync(filepath);
				if (Array.isArray(recovers)) recovers.push(() => {
					fs$6.mkdirSync(filepath);
				});
			} else {
				let dest = path$5.join(folder, md5);
				let dir = path$5.dirname(filepath);
				fs$6.renameSync(filepath, dest);
				if (Array.isArray(recovers)) recovers.push(() => {
					fs$6.mkdirSync(dir, { recursive: true });
					fs$6.renameSync(dest, filepath);
				});
			}
			this._onDidDeleteFiles.fire({ files: [uri] });
		}
		/**
		* Rename a file or folder on vim and disk
		*/
		async renameFile(oldPath, newPath, opts = {}, recovers) {
			let { nvim } = this;
			let { overwrite, ignoreIfExists } = opts;
			if (newPath === oldPath) return;
			let exists = fs$6.existsSync(newPath);
			if (exists && ignoreIfExists && !overwrite) return;
			if (exists && !overwrite) throw fileExists(newPath);
			let oldStat = await statAsync(oldPath);
			let loaded = oldStat && oldStat.isDirectory() ? 0 : await nvim.call("bufloaded", [oldPath]);
			if (!loaded && !oldStat) throw fileNotExists(oldPath);
			let file = {
				newUri: URI.parse(newPath),
				oldUri: URI.parse(oldPath)
			};
			if (!opts.skipEvent) await this.fireWaitUntilEvent(this._onWillRenameFiles, { files: [file] }, recovers);
			if (loaded) {
				let bufnr = await nvim.call("coc#ui#rename_file", [
					oldPath,
					newPath,
					oldStat != null
				]);
				await this.documents.onBufCreate(bufnr);
			} else {
				if (oldStat.isDirectory()) for (let doc of this.documents.attached("file")) {
					let u = URI.parse(doc.uri);
					if (isParentFolder(oldPath, u.fsPath, false)) {
						let filepath = u.fsPath.replace(oldPath, newPath);
						let bufnr = await nvim.call("coc#ui#rename_file", [
							u.fsPath,
							filepath,
							false
						]);
						await this.documents.onBufCreate(bufnr);
					}
				}
				fs$6.renameSync(oldPath, newPath);
			}
			if (Array.isArray(recovers)) recovers.push(() => {
				return this.renameFile(newPath, oldPath, { skipEvent: true });
			});
			if (!opts.skipEvent) this._onDidRenameFiles.fire({ files: [file] });
		}
		/**
		* Return denied annotations
		*/
		async promptAnnotations(documentChanges, changeAnnotations) {
			let toConfirm = changeAnnotations ? getConfirmAnnotations(documentChanges, changeAnnotations) : [];
			let denied = [];
			for (let key of toConfirm) {
				let annotation = changeAnnotations[key];
				if (await this.window.showMenuPicker(["Yes", "No"], {
					position: "center",
					title: "Confirm edits",
					content: annotation.label + (annotation.description ? " " + annotation.description : "")
				}) !== 0) denied.push(key);
			}
			return denied;
		}
		/**
		* Apply WorkspaceEdit.
		*/
		async applyEdit(edit, nested) {
			let documentChanges = toDocumentChanges(edit);
			let recovers = [];
			let currentOnly = false;
			try {
				let denied = await this.promptAnnotations(documentChanges, edit.changeAnnotations);
				if (denied.length > 0) documentChanges = createFilteredChanges(documentChanges, denied);
				let changes = {};
				let currentUri = await this.documents.getCurrentUri();
				currentOnly = documentChanges.every((o) => TextDocumentEdit.is(o) && o.textDocument.uri === currentUri);
				this.validateChanges(documentChanges);
				for (const change of documentChanges) if (TextDocumentEdit.is(change)) {
					let { textDocument, edits } = change;
					let { uri } = textDocument;
					let doc = await this.loadResource(uri);
					let revertEdit;
					if (edits.some((o) => SnippetTextEdit.is(o))) {
						let snippetEdits = mergeSortEdits(edits.map((edit) => {
							if (SnippetTextEdit.is(edit)) return {
								range: edit.range,
								snippet: edit.snippet.value
							};
							return {
								range: edit.range,
								snippet: edit.newText
							};
						}));
						let oldLines = doc.textDocument.lines;
						await commands_default.executeCommand("editor.action.insertBufferSnippets", doc.bufnr, snippetEdits, doc.bufnr === events_default.bufnr);
						let startLine = snippetEdits[0].range.start.line;
						revertEdit = getRevertEdit(oldLines, doc.textDocument.lines, startLine);
					} else revertEdit = await doc.applyEdits(edits, false, uri === currentUri);
					if (revertEdit) {
						let version = doc.version;
						let { newText, range } = revertEdit;
						changes[uri] = {
							uri,
							lnum: range.start.line + 1,
							newLines: doc.getLines(range.start.line, range.end.line),
							oldLines: newText.endsWith("\n") ? newText.slice(0, -1).split("\n") : newText.split("\n")
						};
						recovers.push(async () => {
							let doc = this.documents.getDocument(uri);
							if (!doc || !doc.attached || doc.version !== version) return;
							await doc.applyEdits([revertEdit]);
							textDocument.version = doc.version;
						});
					}
				} else if (CreateFile.is(change)) await this.createFile(fsPath(change.uri), change.options, recovers);
				else if (DeleteFile.is(change)) await this.deleteFile(fsPath(change.uri), change.options, recovers);
				else if (RenameFile.is(change)) await this.renameFile(fsPath(change.oldUri), fsPath(change.newUri), change.options, recovers);
				if (recovers.length === 0) return true;
				if (!nested) this.editState = {
					edit: {
						documentChanges,
						changeAnnotations: edit.changeAnnotations
					},
					changes,
					recovers,
					applied: true
				};
				this.nvim.redrawVim();
			} catch (e) {
				logger$18.error("Error on applyEdits:", edit, e);
				if (!nested) this.window.showErrorMessage(`Error on applyEdits: ${e}`);
				await this.undoChanges(recovers);
				return false;
			}
			if (nested || currentOnly) return true;
			this.window.showInformationMessage(`Use ':wa' to save changes or ':CocCommand workspace.inspectEdit' to inspect.`);
			return true;
		}
		async undoChanges(recovers) {
			while (recovers.length > 0) {
				let fn = recovers.pop();
				await Promise.resolve(fn());
			}
		}
		async inspectEdit() {
			if (!this.editState) {
				this.window.showWarningMessage("No workspace edit to inspect");
				return;
			}
			await new EditInspect(this.nvim, this.keymaps).show(this.editState);
		}
		async undoWorkspaceEdit() {
			let { editState } = this;
			if (!editState || !editState.applied) {
				this.window.showWarningMessage(`No workspace edit to undo`);
				return;
			}
			editState.applied = false;
			await this.undoChanges(editState.recovers);
		}
		async redoWorkspaceEdit() {
			let { editState } = this;
			if (!editState || editState.applied) {
				this.window.showWarningMessage(`No workspace edit to redo`);
				return;
			}
			this.editState = void 0;
			await this.applyEdit(editState.edit);
		}
		validateChanges(documentChanges) {
			let { documents } = this;
			for (let change of documentChanges) if (TextDocumentEdit.is(change)) {
				let { uri, version } = change.textDocument;
				let doc = documents.getDocument(uri);
				if (typeof version === "number" && version > 0) {
					if (!doc) throw notLoaded(uri);
					if (doc.version != version) throw new Error(`${uri} changed before apply edit`);
				} else if (!doc && !isFile(uri)) throw badScheme(uri);
			} else if (CreateFile.is(change) || DeleteFile.is(change)) {
				if (!isFile(change.uri)) throw badScheme(change.uri);
			} else if (RenameFile.is(change)) {
				if (!isFile(change.oldUri) || !isFile(change.newUri)) throw badScheme(change.oldUri);
			}
		}
		async findFiles(include, exclude, maxResults, token) {
			let folders = this.workspaceFolderControl.workspaceFolders;
			if (token?.isCancellationRequested || !folders.length || maxResults === 0) return [];
			maxResults = maxResults ?? Infinity;
			let roots = folders.map((o) => URI.parse(o.uri).fsPath);
			let pattern;
			if (typeof include !== "string") {
				pattern = include.pattern;
				roots = [include.baseUri.fsPath];
			} else pattern = include;
			let res = [];
			let exceed = false;
			const ac = new AbortController();
			if (token) token.onCancellationRequested(() => {
				if (!ac.signal.aborted) ac.abort();
			});
			for (let root of roots) try {
				let files = await glob.glob(pattern, {
					signal: ac.signal,
					dot: true,
					cwd: root,
					nodir: true,
					absolute: false
				});
				if (token?.isCancellationRequested) break;
				for (let file of files) {
					if (exclude && fileMatch(root, file, exclude)) continue;
					res.push(URI.file(path$5.join(root, file)));
					if (res.length === maxResults) {
						exceed = true;
						break;
					}
				}
				if (exceed) break;
			} catch (e) {
				if (e["name"] === "AbortError") break;
			}
			return res;
		}
		async fireWaitUntilEvent(emitter, properties, recovers) {
			let firing = true;
			let promises = [];
			emitter.fire({
				...properties,
				waitUntil: (thenable) => {
					if (!firing) throw shouldNotAsync("waitUntil");
					let tp = new Promise((resolve) => {
						setTimeout(resolve, this.operationTimeout);
					});
					let promise = Promise.race([thenable, tp]).then((edit) => {
						if (edit && WorkspaceEdit.is(edit)) return this.applyEdit(edit, true);
					});
					promises.push(promise);
				}
			});
			firing = false;
			await Promise.all(promises);
		}
	};
}));
//#endregion
//#region src/core/keymaps.ts
function getKeymapModifier(mode, cmd) {
	if (cmd) return "<Cmd>";
	if (mode == "n" || mode == "o" || mode == "x" || mode == "v") return "<C-U>";
	if (mode == "i") return "<C-o>";
	if (mode == "s") return "<Esc>";
	return "<Cmd>";
}
function getBufnr(buffer) {
	return typeof buffer === "number" ? buffer : 0;
}
function toKeymapOption(option) {
	return Object.assign({
		sync: true,
		cancel: true,
		silent: true
	}, typeof option == "boolean" ? { sync: !option } : option);
}
var logger$17, Keymaps;
var init_keymaps = __esmMin((() => {
	init_logger$2();
	init_constants();
	init_protocol();
	init_string$1();
	logger$17 = createLogger$1("core-keymaps");
	Keymaps = class {
		keymaps = /* @__PURE__ */ new Map();
		nvim;
		attach(nvim) {
			this.nvim = nvim;
		}
		async doKeymap(key, defaultReturn) {
			let keymap = this.keymaps.get(key) ?? this.keymaps.get("coc-" + key);
			if (!keymap) {
				logger$17.error(`keymap for ${key} not found`);
				return defaultReturn;
			}
			let [fn, repeat] = keymap;
			let res = await Promise.resolve(fn());
			if (repeat) await this.nvim.command(`silent! call repeat#set("\\<Plug>(coc-${key})", -1)`);
			if (res == null) return defaultReturn;
			return res;
		}
		/**
		* Register global <Plug>(coc-${key}) key mapping.
		*/
		registerKeymap(modes, name, fn, opts = {}) {
			if (!name) throw new Error(`Invalid key ${name} of registerKeymap`);
			let key = `coc-${name}`;
			if (this.keymaps.has(key)) throw new Error(`keymap: "${name}" already exists.`);
			const lhs = `<Plug>(${key})`;
			opts = Object.assign({
				sync: true,
				cancel: true,
				silent: true,
				repeat: false
			}, opts);
			let { nvim } = this;
			this.keymaps.set(key, [fn, !!opts.repeat]);
			let method = opts.sync ? "request" : "notify";
			for (let mode of modes) if (mode == "i") {
				const cancel = opts.cancel ? 1 : 0;
				nvim.setKeymap(mode, lhs, `coc#_insert_key('${method}', '${key}', ${cancel})`, {
					expr: true,
					noremap: true,
					silent: opts.silent
				});
			} else nvim.setKeymap(mode, lhs, `:${getKeymapModifier(mode, opts.cmd)}call coc#rpc#${method}('doKeymap', ['${key}'])<cr>`, {
				noremap: true,
				silent: opts.silent
			});
			return import_main$1.Disposable.create(() => {
				this.keymaps.delete(key);
				for (let m of modes) nvim.deleteKeymap(m, lhs);
			});
		}
		registerExprKeymap(mode, lhs, fn, buffer = false, cancel = true) {
			let bufnr = getBufnr(buffer);
			let id = `${mode}-${toBase64(lhs)}${buffer ? `-${bufnr}` : ""}`;
			let { nvim } = this;
			let rhs;
			if (mode == "i") rhs = `coc#_insert_key('request', '${id}', ${cancel ? "1" : "0"})`;
			else rhs = `coc#rpc#request('doKeymap', ['${id}'])`;
			let opts = {
				noremap: true,
				silent: true,
				expr: true,
				nowait: true
			};
			if (buffer !== false) nvim.call("coc#compat#buf_add_keymap", [
				bufnr,
				mode,
				lhs,
				rhs,
				opts
			], true);
			else nvim.setKeymap(mode, lhs, rhs, opts);
			this.keymaps.set(id, [fn, false]);
			return import_main$1.Disposable.create(() => {
				this.keymaps.delete(id);
				if (buffer) nvim.call("coc#compat#buf_del_keymap", [
					bufnr,
					mode,
					lhs
				], true);
				else nvim.deleteKeymap(mode, lhs);
			});
		}
		registerLocalKeymap(bufnr, mode, lhs, fn, option) {
			let { nvim } = this;
			let buffer = nvim.createBuffer(bufnr);
			let id = `local-${bufnr}-${mode}-${toBase64(lhs)}`;
			const opts = toKeymapOption(option);
			this.keymaps.set(id, [fn, !!opts.repeat]);
			const method = opts.sync ? "request" : "notify";
			const opt = {
				noremap: true,
				silent: opts.silent !== false
			};
			if (isVim && opts.special) opt.special = true;
			if (mode == "i") {
				const cancel = opts.cancel ? 1 : 0;
				opt.expr = true;
				buffer.setKeymap(mode, lhs, `coc#_insert_key('${method}', '${id}', ${cancel})`, opt);
			} else {
				opt.nowait = true;
				const modify = getKeymapModifier(mode, opts.cmd);
				buffer.setKeymap(mode, lhs, `:${modify}call coc#rpc#${method}('doKeymap', ['${id}'])<CR>`, opt);
			}
			return import_main$1.Disposable.create(() => {
				this.keymaps.delete(id);
				buffer.deleteKeymap(mode, lhs);
			});
		}
	};
}));
//#endregion
//#region src/core/watchers.ts
var logger$16, Watchers;
var init_watchers = __esmMin((() => {
	init_events();
	init_logger$2();
	init_util$7();
	init_protocol();
	init_string$1();
	logger$16 = createLogger$1("watchers");
	Watchers = class {
		nvim;
		optionCallbacks = /* @__PURE__ */ new Map();
		globalCallbacks = /* @__PURE__ */ new Map();
		disposables = [];
		constructor() {
			events_default.on("OptionSet", async (changed, oldValue, newValue) => {
				let cbs = Array.from(this.optionCallbacks.get(changed) ?? []);
				await Promise.allSettled(cbs.map((cb) => {
					return (async () => {
						try {
							await Promise.resolve(cb(oldValue, newValue));
						} catch (e) {
							this.nvim.errWriteLine(`Error on OptionSet '${changed}': ${toErrorText(e)}`);
							logger$16.error(`Error on OptionSet callback:`, e);
						}
					})();
				}));
			}, null, this.disposables);
			events_default.on("GlobalChange", async (changed, oldValue, newValue) => {
				let cbs = Array.from(this.globalCallbacks.get(changed) ?? []);
				await Promise.allSettled(cbs.map((cb) => {
					return (async () => {
						try {
							await Promise.resolve(cb(oldValue, newValue));
						} catch (e) {
							this.nvim.errWriteLine(`Error on GlobalChange '${changed}': ${toErrorText(e)}`);
							logger$16.error(`Error on GlobalChange callback:`, e);
						}
					})();
				}));
			}, null, this.disposables);
		}
		get options() {
			return Array.from(this.optionCallbacks.keys());
		}
		attach(nvim, _env) {
			this.nvim = nvim;
		}
		/**
		* Watch for option change.
		*/
		watchOption(key, callback, disposables) {
			let cbs = this.optionCallbacks.get(key);
			if (!cbs) {
				cbs = /* @__PURE__ */ new Set();
				this.optionCallbacks.set(key, cbs);
			}
			cbs.add(callback);
			let cmd = `autocmd! coc_dynamic_option OptionSet ${key} call coc#rpc#notify('OptionSet',[expand('<amatch>'), v:option_old, v:option_new])`;
			this.nvim.command(cmd, true);
			let disposable = import_main$1.Disposable.create(() => {
				let cbs = this.optionCallbacks.get(key);
				cbs.delete(callback);
				if (cbs.size === 0) this.nvim.command(`autocmd! coc_dynamic_option OptionSet ${key}`, true);
			});
			if (disposables) disposables.push(disposable);
			return disposable;
		}
		/**
		* Watch global variable, works on neovim only.
		*/
		watchGlobal(key, callback, disposables) {
			let { nvim } = this;
			let cbs = this.globalCallbacks.get(key);
			if (!cbs) {
				cbs = /* @__PURE__ */ new Set();
				this.globalCallbacks.set(key, cbs);
			}
			cbs.add(callback);
			nvim.call("coc#_watch", key, true);
			let disposable = import_main$1.Disposable.create(() => {
				let cbs = this.globalCallbacks.get(key);
				cbs.delete(callback);
				if (cbs.size === 0) nvim.call("coc#_unwatch", key, true);
			});
			if (disposables) disposables.push(disposable);
			return disposable;
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/model/bufferSync.ts
var BufferSync;
var init_bufferSync = __esmMin((() => {
	init_events();
	init_util$7();
	init_is();
	BufferSync = class {
		_create;
		disposables = [];
		itemsMap = /* @__PURE__ */ new Map();
		constructor(_create, documents) {
			this._create = _create;
			let { disposables } = this;
			for (let doc of documents.attached()) this.create(doc);
			documents.onDidOpenTextDocument((e) => {
				this.create(documents.getDocument(e.bufnr));
			}, null, disposables);
			documents.onDidChangeDocument((e) => {
				this.onChange(e);
			}, null, disposables);
			documents.onDidCloseDocument((e) => {
				this.delete(e.bufnr);
			}, null, disposables);
			events_default.on("LinesChanged", this.onTextChange, this, disposables);
			events_default.on("WindowVisible", this.onVisible, this, disposables);
		}
		onTextChange(bufnr) {
			let o = this.itemsMap.get(bufnr);
			if (o && func(o.item.onTextChange)) o.item.onTextChange();
		}
		onVisible(ev) {
			let o = this.itemsMap.get(ev.bufnr);
			if (o && typeof o.item.onVisible === "function") o.item.onVisible(ev.winid, ev.region);
		}
		get items() {
			return Array.from(this.itemsMap.values()).map((x) => x.item);
		}
		getItem(bufnr) {
			if (bufnr == null) return void 0;
			if (typeof bufnr === "number") return this.itemsMap.get(bufnr)?.item;
			let o = Array.from(this.itemsMap.values()).find((v) => {
				return v.uri == bufnr;
			});
			return o ? o.item : void 0;
		}
		create(doc) {
			let o = this.itemsMap.get(doc.bufnr);
			if (o) o.item.dispose();
			let item = this._create(doc);
			if (item) this.itemsMap.set(doc.bufnr, {
				uri: doc.uri,
				item
			});
		}
		onChange(e) {
			let o = this.itemsMap.get(e.bufnr);
			if (o && typeof o.item.onChange == "function") o.item.onChange(e);
		}
		delete(bufnr) {
			let o = this.itemsMap.get(bufnr);
			if (o) {
				o.item.dispose();
				this.itemsMap.delete(bufnr);
			}
		}
		reset() {
			for (let o of this.itemsMap.values()) o.item.dispose();
			this.itemsMap.clear();
		}
		dispose() {
			disposeAll(this.disposables);
			for (let o of this.itemsMap.values()) o.item.dispose();
			this._create = void 0;
			this.itemsMap.clear();
		}
	};
}));
//#endregion
//#region src/model/db.ts
var DB;
var init_db = __esmMin((() => {
	init_node();
	init_object();
	DB = class {
		filepath;
		constructor(filepath) {
			this.filepath = filepath;
		}
		/**
		* Get data by key.
		* @param {string} key unique key allows dot notation.
		* @returns {any}
		*/
		fetch(key) {
			let obj = this.load();
			if (!key) return obj;
			let parts = key.split(".");
			for (let part of parts) {
				if (typeof obj[part] === "undefined") return;
				obj = obj[part];
			}
			return obj;
		}
		/**
		* Check if key exists
		* @param {string} key unique key allows dot notation.
		*/
		exists(key) {
			let obj = this.load();
			let parts = key.split(".");
			for (let part of parts) {
				if (typeof obj[part] === "undefined") return false;
				obj = obj[part];
			}
			return true;
		}
		/**
		* Delete data by key
		* @param {string} key unique key allows dot notation.
		*/
		delete(key) {
			let obj = this.load();
			let origin = obj;
			let parts = key.split(".");
			let len = parts.length;
			for (let i = 0; i < len; i++) {
				if (typeof obj[parts[i]] === "undefined") break;
				if (i == len - 1) {
					delete obj[parts[i]];
					fs$6.writeFileSync(this.filepath, JSON.stringify(origin, null, 2), "utf8");
					break;
				}
				obj = obj[parts[i]];
			}
		}
		/**
		* Save data with key
		* @param {string} key unique string that allows dot notation.
		* @param {number|null|boolean|string|{[index} data saved data.
		*/
		push(key, data) {
			let origin = toObject(this.load());
			let obj = origin;
			let parts = key.split(".");
			let len = parts.length;
			for (let i = 0; i < len; i++) {
				let key = parts[i];
				if (i == len - 1) {
					obj[key] = data;
					let dir = path$5.dirname(this.filepath);
					fs$6.mkdirSync(dir, { recursive: true });
					fs$6.writeFileSync(this.filepath, JSON.stringify(origin, null, 2));
					break;
				}
				if (typeof obj[key] == "undefined") {
					obj[key] = {};
					obj = obj[key];
				} else obj = obj[key];
			}
		}
		load() {
			let dir = path$5.dirname(this.filepath);
			if (!fs$6.existsSync(dir)) {
				fs$6.mkdirSync(dir, { recursive: true });
				fs$6.writeFileSync(this.filepath, "{}", "utf8");
				return {};
			}
			try {
				let content = fs$6.readFileSync(this.filepath, "utf8");
				return JSON.parse(content.trim());
			} catch (e) {
				fs$6.writeFileSync(this.filepath, "{}", "utf8");
				return {};
			}
		}
		/**
		* Empty db file.
		*/
		clear() {
			if (!fs$6.existsSync(this.filepath)) return;
			fs$6.writeFileSync(this.filepath, "{}", "utf8");
		}
		/**
		* Remove db file.
		*/
		destroy() {
			if (fs$6.existsSync(this.filepath)) fs$6.unlinkSync(this.filepath);
		}
	};
}));
//#endregion
//#region src/model/tabs.ts
var Tabs;
var init_tabs = __esmMin((() => {
	init_esm();
	init_protocol();
	Tabs = class {
		editors;
		open = /* @__PURE__ */ new Set();
		_onOpen;
		_onClose;
		constructor(editors) {
			this.editors = editors;
			this._onOpen = new import_main$1.Emitter();
			this._onClose = new import_main$1.Emitter();
			this.editors.onDidChangeVisibleTextEditors((editors) => {
				let uris = Array.from(this.open);
				let seen = /* @__PURE__ */ new Set();
				let opened = /* @__PURE__ */ new Set();
				let closed = /* @__PURE__ */ new Set();
				for (let editor of editors) {
					if (!seen.has(editor.uri) && !uris.includes(editor.uri)) {
						this.open.add(editor.uri);
						opened.add(URI.parse(editor.uri));
					}
					seen.add(editor.uri);
				}
				for (let uri of uris) if (!seen.has(uri)) {
					this.open.delete(uri);
					closed.add(URI.parse(uri));
				}
				if (opened.size > 0) this._onOpen.fire(opened);
				if (closed.size > 0) this._onClose.fire(closed);
			});
		}
		attach() {
			for (let editor of this.editors.visibleTextEditors) this.open.add(editor.uri);
		}
		get onClose() {
			return this._onClose.event;
		}
		get onOpen() {
			return this._onOpen.event;
		}
		isActive(document) {
			const uri = document instanceof URI ? document : document.uri;
			return this.editors.activeTextEditor?.document.uri === uri.toString();
		}
		isVisible(document) {
			const uri = document instanceof URI ? document : document.uri;
			return this.open.has(uri.toString());
		}
		getTabResources() {
			const result = /* @__PURE__ */ new Set();
			let seen = /* @__PURE__ */ new Set();
			for (let editor of this.editors.visibleTextEditors) if (!seen.has(editor.uri)) {
				result.add(URI.parse(editor.uri));
				seen.add(editor.uri);
			}
			return result;
		}
	};
}));
//#endregion
//#region src/model/task.ts
var Task$1;
var init_task = __esmMin((() => {
	init_events();
	init_util$7();
	init_protocol();
	Task$1 = class {
		nvim;
		id;
		disposables = [];
		_onExit = new import_main$1.Emitter();
		_onStderr = new import_main$1.Emitter();
		_onStdout = new import_main$1.Emitter();
		onExit = this._onExit.event;
		onStdout = this._onStdout.event;
		onStderr = this._onStderr.event;
		/**
		* @param {Neovim} nvim
		* @param {string} id unique id
		*/
		constructor(nvim, id) {
			this.nvim = nvim;
			this.id = id;
			events_default.on("TaskExit", (id, code) => {
				if (id == this.id) this._onExit.fire(code);
			}, null, this.disposables);
			events_default.on("TaskStderr", (id, lines) => {
				if (id == this.id) this._onStderr.fire(lines);
			}, null, this.disposables);
			events_default.on("TaskStdout", (id, lines) => {
				if (id == this.id) this._onStdout.fire(lines);
			}, null, this.disposables);
		}
		/**
		* Start task, task will be restarted when already running.
		* @param {TaskOptions} opts
		* @returns {Promise<boolean>}
		*/
		async start(opts) {
			let { nvim } = this;
			return await nvim.call("coc#task#start", [this.id, opts]);
		}
		/**
		* Stop task by SIGTERM or SIGKILL
		*/
		async stop() {
			let { nvim } = this;
			await nvim.call("coc#task#stop", [this.id]);
		}
		/**
		* Check if the task is running.
		*/
		get running() {
			let { nvim } = this;
			return nvim.call("coc#task#running", [this.id]);
		}
		/**
		* Stop task and dispose all events.
		*/
		dispose() {
			let { nvim } = this;
			nvim.call("coc#task#stop", [this.id], true);
			this._onStdout.dispose();
			this._onStderr.dispose();
			this._onExit.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/workspace.ts
var logger$15, methods, Workspace, workspace_default;
var init_workspace$1 = __esmMin((() => {
	init_esm();
	init_configuration$2();
	init_shape();
	init_autocmds();
	init_channels();
	init_contentProvider();
	init_documents();
	init_editors();
	init_fileSystemWatcher();
	init_files();
	init_funcs();
	init_keymaps();
	init_ui$2();
	init_watchers();
	init_workspaceFolder();
	init_events();
	init_logger$2();
	init_bufferSync();
	init_db();
	init_fuzzyMatch();
	init_mru();
	init_status();
	init_strwidth();
	init_tabs();
	init_task();
	init_util$7();
	init_constants();
	init_errors();
	init_fs();
	init_node();
	init_object();
	init_processes();
	init_protocol();
	logger$15 = createLogger$1("workspace");
	methods = [
		"showMessage",
		"runTerminalCommand",
		"openTerminal",
		"showQuickpick",
		"menuPick",
		"openLocalConfig",
		"showPrompt",
		"createStatusBarItem",
		"createOutputChannel",
		"showOutputChannel",
		"requestInput",
		"echoLines",
		"getCursorPosition",
		"moveTo",
		"getOffset",
		"getSelectedRange",
		"selectRange",
		"createTerminal"
	];
	Workspace = class {
		onDidChangeConfiguration;
		onDidOpenTextDocument;
		onDidCloseTextDocument;
		onDidChangeTextDocument;
		onDidSaveTextDocument;
		onWillSaveTextDocument;
		onDidChangeWorkspaceFolders;
		onDidCreateFiles;
		onDidRenameFiles;
		onDidDeleteFiles;
		onWillCreateFiles;
		onWillRenameFiles;
		onWillDeleteFiles;
		nvim;
		configurations;
		workspaceFolderControl;
		documentsManager;
		contentProvider;
		autocmds;
		watchers;
		keymaps;
		files;
		fileSystemWatchers;
		editors;
		tabs;
		isTrusted = true;
		statusLine = new StatusLine();
		_onDidRuntimePathChange = new import_main$1.Emitter();
		onDidRuntimePathChange = this._onDidRuntimePathChange.event;
		fuzzyExports;
		strWidth;
		_env;
		constructor() {
			initFuzzyWasm().then((api) => {
				this.fuzzyExports = api;
			}, onUnexpectedError);
			StrWidth.create().then((strWidth) => {
				this.strWidth = strWidth;
			}, onUnexpectedError);
			events_default.on("VimResized", (columns, lines) => {
				Object.assign(toObject(this.env), {
					columns,
					lines
				});
			});
			Object.defineProperty(this.statusLine, "nvim", { get: () => this.nvim });
			this.configurations = new Configurations(userConfigFile, new ConfigurationProxy(this));
			this.workspaceFolderControl = new WorkspaceFolderController(this.configurations);
			let documents = this.documentsManager = new Documents(this.configurations, this.workspaceFolderControl);
			this.contentProvider = new ContentProvider(documents);
			this.watchers = new Watchers();
			this.autocmds = new Autocmds();
			this.keymaps = new Keymaps();
			this.files = new Files(documents, this.configurations, this.workspaceFolderControl, this.keymaps);
			this.editors = new Editors(documents);
			this.tabs = new Tabs(this.editors);
			this.onDidChangeWorkspaceFolders = this.workspaceFolderControl.onDidChangeWorkspaceFolders;
			this.onDidChangeConfiguration = this.configurations.onDidChange;
			this.onDidOpenTextDocument = documents.onDidOpenTextDocument;
			this.onDidChangeTextDocument = documents.onDidChangeDocument;
			this.onDidCloseTextDocument = documents.onDidCloseDocument;
			this.onDidSaveTextDocument = documents.onDidSaveTextDocument;
			this.onWillSaveTextDocument = documents.onWillSaveTextDocument;
			this.onDidCreateFiles = this.files.onDidCreateFiles;
			this.onDidRenameFiles = this.files.onDidRenameFiles;
			this.onDidDeleteFiles = this.files.onDidDeleteFiles;
			this.onWillCreateFiles = this.files.onWillCreateFiles;
			this.onWillRenameFiles = this.files.onWillRenameFiles;
			this.onWillDeleteFiles = this.files.onWillDeleteFiles;
			const config = this.getWatchConfig();
			this.fileSystemWatchers = new FileSystemWatcherManager(this.workspaceFolderControl, config);
		}
		get initialConfiguration() {
			return this.configurations.initialConfiguration;
		}
		getWatchConfig() {
			let { initialConfiguration } = this;
			let watchConfig = defaultValue(initialConfiguration.get("fileSystemWatch"), {});
			let watchmanPath = watchConfig.watchmanPath;
			if (!watchmanPath) watchmanPath = initialConfiguration.inspect("coc.preferences.watchmanPath").globalValue;
			if (typeof watchmanPath === "string") watchmanPath = this.expand(watchmanPath);
			let ignoredFolders = defaultValue(watchConfig.ignoredFolders, [
				"${tmpdir}",
				"/private/tmp",
				"/"
			]);
			let enable = getConditionValue(watchConfig.enable == null ? true : !!watchConfig.enable, false);
			return {
				watchmanPath,
				enable,
				ignoredFolders: ignoredFolders.map((p) => this.expand(p))
			};
		}
		async init(window) {
			let { nvim } = this;
			for (let method of methods) Object.defineProperty(this, method, { get: () => {
				return (...args) => {
					let stack = "\n" + Error().stack.split("\n").slice(2, 4).join("\n");
					logger$15.warn(`workspace.${method} is deprecated, please use window.${method} instead.`, stack);
					return window[method].apply(window, args);
				};
			} });
			for (let name of ["onDidOpenTerminal", "onDidCloseTerminal"]) Object.defineProperty(this, name, { get: () => {
				let stack = "\n" + Error().stack.split("\n").slice(2, 4).join("\n");
				logger$15.warn(`workspace.${name} is deprecated, please use window.${name} instead.`, stack);
				return window[name];
			} });
			let env = this._env = await nvim.call("coc#util#vim_info");
			this.checkVersion(38);
			this.configurations.updateMemoryConfig(this._env.config);
			this.workspaceFolderControl.setWorkspaceFolders(this._env.workspaceFolders);
			this.workspaceFolderControl.onDidChangeWorkspaceFolders(() => {
				nvim.setVar("WorkspaceFolders", this.folderPaths, true);
			});
			this.files.attach(nvim, env, window);
			this.contentProvider.attach(nvim);
			this.registerTextDocumentContentProvider("output", channels_default.getProvider(nvim));
			this.keymaps.attach(nvim);
			this.autocmds.attach(nvim);
			this.watchers.attach(nvim, env);
			this.watchers.watchOption("runtimepath", async (oldValue, newValue) => {
				let oldList = oldValue.split(",");
				let paths = newValue.split(",").filter((x) => !oldList.includes(x));
				if (paths.length > 0) {
					let filepaths = [];
					await Promise.allSettled(paths.map((filepath) => {
						return new Promise((resolve, reject) => {
							let converted = this.fixWin32unixFilepath(filepath);
							getFileType(converted).then((t) => {
								if (t == 2) filepaths.push(converted);
								resolve(void 0);
							}, reject);
						});
					}));
					if (filepaths.length > 0) {
						this._onDidRuntimePathChange.fire(filepaths);
						this.env.runtimepath = [...oldList, ...filepaths].join(",");
					}
				}
			});
			await this.documentsManager.attach(this.nvim, this._env);
			await this.editors.attach(nvim);
			this.tabs.attach();
			let channel = channels_default.create("watchman", nvim);
			this.fileSystemWatchers.attach(channel);
			if (this.strWidth) this.strWidth.setAmbw(!env.ambiguousIsNarrow);
		}
		checkVersion(version) {
			if (this._env.apiversion != version) {
				this.nvim.echoError(`API version ${this._env.apiversion} is not 38, building coc.nvim by 'npm ci'.`);
				this.nvim.call("coc#ui#fix", [], true);
			}
		}
		getDisplayWidth(text, cache = false) {
			return this.strWidth.getWidth(text, cache);
		}
		get version() {
			return VERSION;
		}
		get cwd() {
			return this.documentsManager.cwd;
		}
		get env() {
			return this._env;
		}
		get root() {
			return this.documentsManager.root || this.cwd;
		}
		get rootPath() {
			return this.root;
		}
		get bufnr() {
			return this.documentsManager.bufnr;
		}
		/**
		* @deprecated
		*/
		get insertMode() {
			return events_default.insertMode;
		}
		/**
		* @deprecated always true
		*/
		get floatSupported() {
			return true;
		}
		/**
		* @deprecated
		*/
		get uri() {
			return this.documentsManager.uri;
		}
		/**
		* @deprecated
		*/
		get workspaceFolder() {
			return this.workspaceFolders[0];
		}
		get textDocuments() {
			return this.documentsManager.textDocuments;
		}
		get documents() {
			return this.documentsManager.documents;
		}
		get document() {
			return this.documentsManager.document;
		}
		get workspaceFolders() {
			return this.workspaceFolderControl.workspaceFolders;
		}
		fixWin32unixFilepath(filepath) {
			return this.documentsManager.fixUnixPrefix(filepath);
		}
		checkPatterns(patterns, folders) {
			return this.workspaceFolderControl.checkPatterns(folders ?? this.workspaceFolderControl.workspaceFolders, patterns);
		}
		get folderPaths() {
			return this.workspaceFolders.map((f) => URI.parse(f.uri).fsPath);
		}
		get channelNames() {
			return channels_default.names;
		}
		get pluginRoot() {
			return pluginRoot;
		}
		get isVim() {
			return this._env.isVim;
		}
		get isNvim() {
			return !this._env.isVim;
		}
		/**
		* Kept for backward compatible
		*/
		get completeOpt() {
			return "";
		}
		get filetypes() {
			return this.documentsManager.filetypes;
		}
		get languageIds() {
			return this.documentsManager.languageIds;
		}
		/**
		* @deprecated Use nvim.createNamespace() instead.
		*/
		createNameSpace(name) {
			return createNameSpace(name);
		}
		has(feature) {
			return has(this.env, feature);
		}
		/**
		* Register autocmd on vim.
		*/
		registerAutocmd(autocmd, disposables) {
			let opts = Object.assign({}, autocmd);
			Error.captureStackTrace(opts);
			let disposable = this.autocmds.registerAutocmd(opts);
			if (disposables) disposables.push(disposable);
			return disposable;
		}
		/**
		* Watch for option change.
		*/
		watchOption(key, callback, disposables) {
			return this.watchers.watchOption(key, callback, disposables);
		}
		/**
		* Watch global variable, works on neovim only.
		*/
		watchGlobal(key, callback, disposables) {
			let cb = callback ?? function() {};
			return this.watchers.watchGlobal(key, cb, disposables);
		}
		/**
		* Check if selector match document.
		*/
		match(selector, document) {
			return score$1(selector, document.uri, document.languageId);
		}
		/**
		* Create a FileSystemWatcher instance, doesn't fail when watchman not found.
		*/
		createFileSystemWatcher(globPattern, ignoreCreate, ignoreChange, ignoreDelete) {
			return this.fileSystemWatchers.createFileSystemWatcher(globPattern, ignoreCreate, ignoreChange, ignoreDelete);
		}
		createFuzzyMatch() {
			return new FuzzyMatch(this.fuzzyExports);
		}
		getWatchmanPath() {
			return getWatchmanPath(this.configurations);
		}
		/**
		* Get configuration by section and optional resource uri.
		*/
		getConfiguration(section, scope) {
			return this.configurations.getConfiguration(section, scope);
		}
		resolveJSONSchema(uri) {
			return this.configurations.getJSONSchema(uri);
		}
		/**
		* Get created document by uri or bufnr.
		*/
		getDocument(uri) {
			return this.documentsManager.getDocument(uri);
		}
		hasDocument(uri, version) {
			let doc = this.documentsManager.getDocument(uri);
			return doc && (version != null ? doc.version == version : true);
		}
		getUri(bufnr, defaultValue = "") {
			let doc = this.documentsManager.getDocument(bufnr);
			return doc ? doc.uri : defaultValue;
		}
		isAttached(bufnr) {
			let doc = this.documentsManager.getDocument(bufnr);
			return doc != null && doc.attached;
		}
		/**
		* Get attached document by uri or bufnr.
		* Throw error when document doesn't exist or isn't attached.
		*/
		getAttachedDocument(uri) {
			let doc = this.getDocument(uri);
			if (!doc) throw new Error(`Buffer ${uri} not exists.`);
			if (!doc.attached) throw new Error(`Buffer ${uri} not attached, ${doc.notAttachReason}`);
			return doc;
		}
		/**
		* Convert location to quickfix item.
		*/
		getQuickfixItem(loc, text, type = "", module) {
			return this.documentsManager.getQuickfixItem(loc, text, type, module);
		}
		/**
		* Create persistence Mru instance.
		*/
		createMru(name) {
			return new Mru(name);
		}
		async getQuickfixList(locations) {
			return this.documentsManager.getQuickfixList(locations);
		}
		/**
		* Populate locations to UI.
		*/
		async showLocations(locations) {
			await this.documentsManager.showLocations(locations);
		}
		/**
		* Get content of line by uri and line.
		*/
		getLine(uri, line) {
			return this.documentsManager.getLine(uri, line);
		}
		/**
		* Get WorkspaceFolder of uri
		*/
		getWorkspaceFolder(uri) {
			return this.workspaceFolderControl.getWorkspaceFolder(typeof uri === "string" ? URI.parse(uri) : uri);
		}
		/**
		* Get content from buffer or file by uri.
		*/
		readFile(uri) {
			return this.documentsManager.readFile(uri);
		}
		async getCurrentState() {
			let document = await this.document;
			let position = await getCursorPosition(this.nvim);
			return {
				document: document.textDocument,
				position
			};
		}
		async getFormatOptions(uri) {
			return this.documentsManager.getFormatOptions(uri);
		}
		/**
		* Resolve module from yarn or npm.
		*/
		resolveModule(name) {
			return resolveModule(name);
		}
		/**
		* Run nodejs command
		*/
		async runCommand(cmd, cwd, timeout) {
			return runCommand(cmd, { cwd: cwd ?? this.cwd }, timeout);
		}
		/**
		* Expand filepath with `~` and/or environment placeholders
		*/
		expand(filepath) {
			return this.documentsManager.expand(filepath);
		}
		async callAsync(method, args) {
			return await callAsync(this.nvim, method, args);
		}
		registerTextDocumentContentProvider(scheme, provider) {
			return this.contentProvider.registerTextDocumentContentProvider(scheme, provider);
		}
		registerKeymap(modes, key, fn, opts = {}) {
			return this.keymaps.registerKeymap(modes, key, fn, opts);
		}
		registerExprKeymap(mode, key, fn, buffer = false, cancel = true) {
			return this.keymaps.registerExprKeymap(mode, key, fn, buffer, cancel);
		}
		registerLocalKeymap(bufnr, mode, key, fn, notify = false) {
			if (typeof arguments[0] === "string") {
				bufnr = this.bufnr;
				mode = arguments[0];
				key = arguments[1];
				fn = arguments[2];
				notify = arguments[3] ?? false;
			}
			return this.keymaps.registerLocalKeymap(bufnr, mode, key, fn, notify);
		}
		/**
		* Create Task instance that runs in vim.
		*/
		createTask(id) {
			return new Task$1(this.nvim, id);
		}
		/**
		* Create DB instance at extension root.
		*/
		createDatabase(name) {
			return new DB(path$5.join(dataHome, name + ".json"));
		}
		registerBufferSync(create) {
			return new BufferSync(create, this.documentsManager);
		}
		async attach() {
			await this.documentsManager.attach(this.nvim, this._env);
		}
		jumpTo(uri, position, openCommand) {
			return this.files.jumpTo(uri, position, openCommand);
		}
		/**
		* Findup for filename or filenames from current filepath or root.
		*/
		findUp(filename) {
			return findUp(this.nvim, this.cwd, filename);
		}
		/**
		* Apply WorkspaceEdit.
		*/
		applyEdit(edit) {
			return this.files.applyEdit(edit);
		}
		/**
		* Create a file in vim and disk
		*/
		createFile(filepath, opts = {}) {
			return this.files.createFile(filepath, opts);
		}
		/**
		* Load uri as document.
		*/
		loadFile(uri, cmd) {
			return this.files.loadResource(uri, cmd);
		}
		/**
		* Load the files that not loaded
		*/
		async loadFiles(uris) {
			return this.files.loadResources(uris);
		}
		/**
		* Rename file in vim and disk
		*/
		async renameFile(oldPath, newPath, opts = {}) {
			await this.files.renameFile(oldPath, newPath, opts);
		}
		/**
		* Delete file from vim and disk.
		*/
		async deleteFile(filepath, opts = {}) {
			await this.files.deleteFile(filepath, opts);
		}
		/**
		* Open resource by uri
		*/
		async openResource(uri) {
			await this.files.openResource(uri);
		}
		async computeWordRanges(uri, range, token) {
			let doc = this.getDocument(uri);
			if (!doc) return null;
			return await doc.chars.computeWordRanges(doc.textDocument.lines, range, token);
		}
		openTextDocument(uri) {
			return this.files.openTextDocument(uri);
		}
		getRelativePath(pathOrUri, includeWorkspace) {
			return this.workspaceFolderControl.getRelativePath(pathOrUri, includeWorkspace);
		}
		asRelativePath(pathOrUri, includeWorkspace) {
			return this.getRelativePath(pathOrUri, includeWorkspace);
		}
		async findFiles(include, exclude, maxResults, token) {
			return this.files.findFiles(include, exclude, maxResults, token);
		}
		detach() {
			this.documentsManager.detach();
		}
		reset() {
			this.statusLine.reset();
			this.configurations.reset();
			this.workspaceFolderControl.reset();
			this.documentsManager.reset();
		}
		dispose() {
			channels_default.dispose();
			this.autocmds.dispose();
			this.statusLine.dispose();
			this.watchers.dispose();
			this.contentProvider.dispose();
			this.documentsManager.dispose();
			this.configurations.dispose();
		}
	};
	workspace_default = new Workspace();
}));
//#endregion
//#region src/tree/filter.ts
var sessionKey, HistoryInput, Filter;
var init_filter = __esmMin((() => {
	init_events();
	init_protocol();
	init_util$7();
	sessionKey = "filter";
	HistoryInput = class {
		history = [];
		next(input) {
			let idx = this.history.indexOf(input);
			return this.history[idx + 1] ?? this.history[0];
		}
		previous(input) {
			let idx = this.history.indexOf(input);
			return this.history[idx - 1] ?? this.history[this.history.length - 1];
		}
		add(input) {
			let idx = this.history.indexOf(input);
			if (idx !== -1) this.history.splice(idx, 1);
			this.history.unshift(input);
		}
		toJSON() {
			return `[${this.history.join(",")}]`;
		}
	};
	Filter = class {
		nvim;
		_activated = false;
		text;
		history = new HistoryInput();
		disposables = [];
		_onDidUpdate = new import_main$1.Emitter();
		_onDidExit = new import_main$1.Emitter();
		_onDidKeyPress = new import_main$1.Emitter();
		onDidKeyPress = this._onDidKeyPress.event;
		onDidUpdate = this._onDidUpdate.event;
		onDidExit = this._onDidExit.event;
		constructor(nvim, keys) {
			this.nvim = nvim;
			this.text = "";
			events_default.on("InputChar", (session, character) => {
				if (session !== "filter" || !this._activated) return;
				if (!keys.includes(character)) {
					if (character.length == 1) {
						this.text = this.text + character;
						this._onDidUpdate.fire(this.text);
						return;
					}
					if (character == "<bs>" || character == "<C-h>") {
						this.text = this.text.slice(0, -1);
						this._onDidUpdate.fire(this.text);
						return;
					}
					if (character == "<C-u>") {
						this.text = "";
						this._onDidUpdate.fire(this.text);
						return;
					}
					if (character == "<C-n>") {
						let text = this.history.next(this.text);
						if (text) {
							this.text = text;
							this._onDidUpdate.fire(this.text);
						}
						return;
					}
					if (character == "<C-p>") {
						let text = this.history.previous(this.text);
						if (text) {
							this.text = text;
							this._onDidUpdate.fire(this.text);
						}
					}
					if (character == "<esc>" || character == "<C-o>") {
						this.deactivate();
						return;
					}
				}
				this._onDidKeyPress.fire(character);
			}, null, this.disposables);
		}
		active() {
			this._activated = true;
			this.text = "";
			this.nvim.call("coc#prompt#start_prompt", [sessionKey], true);
		}
		deactivate(node) {
			if (!this._activated) return;
			this.nvim.call("coc#prompt#stop_prompt", [sessionKey], true);
			this._activated = false;
			let { text } = this;
			this.text = "";
			this._onDidExit.fire(node);
			this.history.add(text);
		}
		get activated() {
			return this._activated;
		}
		dispose() {
			this.deactivate();
			this._onDidKeyPress.dispose();
			this._onDidUpdate.dispose();
			this._onDidExit.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/tree/TreeView.ts
var logger$14, retryTimeout, maxRetry, highlightNamespace, signOffset, globalId, BasicTreeView;
var init_TreeView = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_events();
	init_logger$2();
	init_fuzzyMatch();
	init_util$7();
	init_array();
	init_filter$1();
	init_mutex();
	init_node();
	init_object();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	init_filter();
	init_TreeItem();
	logger$14 = createLogger$1("BasicTreeView");
	retryTimeout = getConditionValue(500, 10);
	maxRetry = getConditionValue(5, 1);
	highlightNamespace = "tree";
	signOffset = 3e3;
	globalId = 1;
	BasicTreeView = class {
		viewId;
		opts;
		bufnr;
		bufname;
		winid;
		config;
		keys;
		_targetBufnr;
		_targetWinId;
		_targetTabId;
		_selection = [];
		_keymapDefs = [];
		_onDispose = new import_main$1.Emitter();
		_onDidRefrash = new import_main$1.Emitter();
		_onDidExpandElement = new import_main$1.Emitter();
		_onDidCollapseElement = new import_main$1.Emitter();
		_onDidChangeSelection = new import_main$1.Emitter();
		_onDidChangeVisibility = new import_main$1.Emitter();
		_onDidFilterStateChange = new import_main$1.Emitter();
		_onDidCursorMoved = new import_main$1.Emitter();
		onDidRefrash = this._onDidRefrash.event;
		onDispose = this._onDispose.event;
		onDidExpandElement = this._onDidExpandElement.event;
		onDidCollapseElement = this._onDidCollapseElement.event;
		onDidChangeSelection = this._onDidChangeSelection.event;
		onDidChangeVisibility = this._onDidChangeVisibility.event;
		onDidFilterStateChange = this._onDidFilterStateChange.event;
		onDidCursorMoved = this._onDidCursorMoved.event;
		message;
		title;
		description;
		retryTimers = 0;
		renderedItems = [];
		provider;
		nodesMap = /* @__PURE__ */ new Map();
		mutex = new Mutex();
		timer;
		disposables = [];
		tooltipFactory;
		resolveTokenSource;
		lineState = {
			titleCount: 0,
			messageCount: 0
		};
		filter;
		filterText;
		itemsToFilter;
		leafIndent;
		winfixwidth;
		autoWidth;
		constructor(viewId, opts) {
			this.viewId = viewId;
			this.opts = opts;
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			if (opts.enableFilter) this.filter = new Filter(this.nvim, [
				this.keys.selectNext,
				this.keys.selectPrevious,
				this.keys.invoke
			]);
			let id = globalId;
			globalId = globalId + 1;
			this.bufname = `CocTree${id}`;
			this.tooltipFactory = window_default.createFloatFactory({ modes: ["n"] });
			this.provider = opts.treeDataProvider;
			this.leafIndent = opts.disableLeafIndent !== true;
			this.winfixwidth = opts.winfixwidth !== false;
			this.autoWidth = opts.autoWidth === true;
			let message;
			Object.defineProperty(this, "message", {
				set: (msg) => {
					message = msg ? msg.replace(/\r?\n/g, " ") : void 0;
					this.updateHeadLines();
				},
				get: () => {
					return message;
				}
			});
			let title = viewId.replace(/\r?\n/g, " ");
			Object.defineProperty(this, "title", {
				set: (newTitle) => {
					title = newTitle ? newTitle.replace(/\r?\n/g, " ") : void 0;
					this.updateHeadLines();
				},
				get: () => {
					return title;
				}
			});
			let description;
			Object.defineProperty(this, "description", {
				set: (desc) => {
					description = desc ? desc.replace(/\r?\n/g, " ") : void 0;
					this.updateHeadLines();
				},
				get: () => {
					return description;
				}
			});
			let filterText;
			Object.defineProperty(this, "filterText", {
				set: (text) => {
					let { titleCount, messageCount } = this.lineState;
					let start = titleCount + messageCount;
					if (text != null) {
						let highlights = [{
							lnum: start,
							colStart: byteLength(text),
							colEnd: byteLength(text) + 1,
							hlGroup: "Cursor"
						}];
						this.renderedItems = [];
						this.updateUI([text + " "], highlights, start, -1, true);
						this.doFilter(text);
					} else if (filterText != null) this.updateUI([], [], start, start + 1);
					filterText = text;
				},
				get: () => {
					return filterText;
				}
			});
			if (this.provider.onDidChangeTreeData) this.provider.onDidChangeTreeData(this.onDataChange, this, this.disposables);
			events_default.on("BufUnload", (bufnr) => {
				if (bufnr != this.bufnr) return;
				let isVisible = this.winid != null;
				this.winid = void 0;
				this.bufnr = void 0;
				if (isVisible) this._onDidChangeVisibility.fire({ visible: false });
				this.dispose();
			}, null, this.disposables);
			events_default.on("WinClosed", (winid) => {
				if (this.winid === winid) {
					this.winid = void 0;
					this._onDidChangeVisibility.fire({ visible: false });
				}
			}, null, this.disposables);
			events_default.on("BufWinLeave", (bufnr, winid) => {
				if (bufnr == this.bufnr && winid == this.winid) {
					this.winid = void 0;
					this._onDidChangeVisibility.fire({ visible: false });
				}
			}, null, this.disposables);
			window_default.onDidTabClose((id) => {
				if (this._targetTabId === id) this.dispose();
			}, null, this.disposables);
			events_default.on("CursorHold", async (bufnr, cursor) => {
				if (bufnr != this.bufnr) return;
				await this.onHover(cursor[0]);
			}, null, this.disposables);
			events_default.on(["CursorMoved", "BufEnter"], () => {
				this.cancelResolve();
			}, null, this.disposables);
			let debounced = debounce((bufnr, cursor) => {
				if (bufnr !== this.bufnr) return;
				let element = this.getElementByLnum(cursor[0] - 1);
				this._onDidCursorMoved.fire(element);
			}, 30);
			this.disposables.push(import_main$1.Disposable.create(() => {
				debounced.clear();
			}));
			events_default.on("CursorMoved", debounced, null, this.disposables);
			events_default.on("WinEnter", (winid) => {
				if (winid != this.windowId || !this.filtering) return;
				let buf = this.nvim.createBuffer(this.bufnr);
				let line = this.startLnum - 1;
				let len = toText(this.filterText).length;
				let range = Range.create(line, len, line, len + 1);
				buf.highlightRanges(highlightNamespace, "Cursor", [range]);
				this.nvim.call("coc#prompt#start_prompt", [sessionKey], true);
				this.redraw();
			}, null, this.disposables);
			events_default.on("WinLeave", (winid) => {
				if (winid != this.windowId || !this.filtering) return;
				let buf = this.nvim.createBuffer(this.bufnr);
				this.nvim.call("coc#prompt#stop_prompt", [sessionKey], true);
				buf.clearNamespace(highlightNamespace, this.startLnum - 1, this.startLnum);
			}, null, this.disposables);
			this.disposables.push(this._onDidChangeVisibility, this._onDidCursorMoved, this._onDidChangeSelection, this._onDidCollapseElement, this._onDidExpandElement);
			if (this.filter) {
				this.filter.onDidExit((node) => {
					this.nodesMap.clear();
					this.filterText = void 0;
					this.itemsToFilter = void 0;
					if (node && typeof this.provider.getParent === "function") {
						this.renderedItems = [];
						this.reveal(node, { focus: true });
					} else {
						this.clearSelection();
						this.render();
					}
					this._onDidFilterStateChange.fire(false);
				});
				this.filter.onDidUpdate((text) => {
					this.filterText = text;
				});
				this.filter.onDidKeyPress(async (character) => {
					let items = toArray(this.renderedItems);
					let curr = this.selection[0];
					if (character == "<up>" || character == this.keys.selectPrevious) {
						let idx = items.findIndex((o) => o.node == curr);
						let node = items[idx == -1 || idx == 0 ? items.length - 1 : idx - 1]?.node;
						if (node) this.selectItem(node, true);
					}
					if (character == "<down>" || character == this.keys.selectNext) {
						let idx = items.findIndex((o) => o.node == curr);
						let node = items[idx == -1 || idx == items.length - 1 ? 0 : idx + 1]?.node;
						if (node) this.selectItem(node, true);
					}
					if (character == "<cr>" || character == this.keys.invoke) {
						if (!curr) return;
						await this.invokeCommand(curr);
						this.filter.deactivate(curr);
					}
				});
			}
		}
		get windowId() {
			return this.winid;
		}
		get targetTabId() {
			return this._targetTabId;
		}
		get targetWinId() {
			return this._targetWinId;
		}
		get targetBufnr() {
			return this._targetBufnr;
		}
		get startLnum() {
			let filterCount = this.filterText == null ? 0 : 1;
			return this.lineState.messageCount + this.lineState.titleCount + filterCount;
		}
		get nvim() {
			return workspace_default.nvim;
		}
		get filtering() {
			return this.filter != null && this.filter.activated;
		}
		loadConfiguration(e) {
			if (!e || e.affectsConfiguration("tree")) {
				let config = workspace_default.getConfiguration("tree", null);
				this.config = {
					openedIcon: config.get("openedIcon", " "),
					closedIcon: config.get("closedIcon", " ")
				};
				this.keys = {
					close: config.get("key.close"),
					invoke: config.get("key.invoke"),
					toggle: config.get("key.toggle"),
					actions: config.get("key.actions"),
					collapseAll: config.get("key.collapseAll"),
					toggleSelection: config.get("key.toggleSelection"),
					activeFilter: config.get("key.activeFilter"),
					selectNext: config.get("key.selectNext"),
					selectPrevious: config.get("key.selectPrevious")
				};
				if (e && this.visible) this.render();
			}
		}
		async doFilter(text) {
			let items = [];
			let index = 0;
			let release = await this.mutex.acquire();
			try {
				if (!this.itemsToFilter) {
					let itemsToFilter = [];
					const addNodes = async (nodes) => {
						for (let n of nodes) {
							itemsToFilter.push(n);
							let arr = await Promise.resolve(this.provider.getChildren(n));
							if (!isFalsyOrEmpty(arr)) await addNodes(arr);
						}
					};
					await addNodes(await Promise.resolve(this.provider.getChildren()));
					this.itemsToFilter = itemsToFilter;
				}
				let lowInput = text.toLowerCase();
				let emptyInput = text.length === 0;
				for (let n of this.itemsToFilter) {
					let item = await this.getTreeItem(n);
					let label = getItemLabel(item);
					let score = 0;
					if (!emptyInput) {
						let res = fuzzyScoreGracefulAggressive(text, lowInput, 0, label, label.toLowerCase(), 0, {
							boostFullMatch: true,
							firstMatchCanBeWeak: true
						});
						if (!res) continue;
						score = res[0];
						item.label = {
							label,
							highlights: toSpans(label, res)
						};
					} else item.label = {
						label,
						highlights: []
					};
					item.collapsibleState = 0;
					let { line, highlights } = this.getRenderedLine(item, index, 0);
					items.push({
						level: 0,
						node: n,
						line,
						index,
						score,
						highlights
					});
					index += 1;
				}
				items.sort((a, b) => {
					if (a.score != b.score) return b.score - a.score;
					return a.index - b.index;
				});
				let lnum = this.startLnum;
				let highlights = [];
				let renderedItems = this.renderedItems = items.map((o, idx) => {
					highlights.push(...o.highlights.map((h) => {
						h.lnum = lnum + idx;
						return h;
					}));
					delete o.index;
					delete o.score;
					delete o.highlights;
					return o;
				});
				this.updateUI(renderedItems.map((o) => o.line), highlights, lnum, -1, true);
				if (renderedItems.length) this.selectItem(renderedItems[0].node, true);
				else this.clearSelection();
				this.redraw();
				release();
			} catch (e) {
				release();
				logger$14.error(`Error on tree filter:`, e);
			}
		}
		async onHover(lnum) {
			let element = this.getElementByLnum(lnum - 1);
			if (!element || !this.nodesMap.has(element)) return;
			let obj = this.nodesMap.get(element);
			let item = obj.item;
			if (!item.tooltip && !obj.resolved) item = await this.resolveItem(element, item);
			if (!item.tooltip) return;
			let doc = {
				filetype: MarkupContent.is(item.tooltip) && item.tooltip.kind == MarkupKind.Markdown ? "markdown" : "txt",
				content: MarkupContent.is(item.tooltip) ? item.tooltip.value : item.tooltip
			};
			await this.tooltipFactory.show([doc]);
		}
		async onClick(element) {
			let { nvim } = this;
			let [line, col] = await nvim.eval(`[getline('.'),col('.')]`);
			let pre = byteSlice(line, 0, col - 1);
			let character = line[pre.length];
			let { openedIcon, closedIcon } = this.config;
			if (/^\s*$/.test(pre) && [openedIcon, closedIcon].includes(character)) await this.toggleExpand(element);
			else await this.invokeCommand(element);
		}
		async invokeCommand(element) {
			let obj = this.nodesMap.get(element);
			if (!obj) return;
			this.selectItem(element);
			let item = obj.item;
			if (!item.command) item = await this.resolveItem(element, item);
			if (!item || !item.command) throw new Error(`Failed to resolve command from TreeItem.`);
			await commands_default.execute(item.command);
		}
		async invokeActions(element) {
			if (!element) return;
			this.selectItem(element);
			if (typeof this.provider.resolveActions !== "function") {
				await window_default.showWarningMessage("No actions");
				return;
			}
			let obj = this.nodesMap.get(element);
			let actions = await Promise.resolve(this.provider.resolveActions(obj.item, element));
			if (!actions || actions.length == 0) {
				await window_default.showWarningMessage("No actions available");
				return;
			}
			let keys = actions.map((o) => o.title);
			let res = await window_default.showMenuPicker(keys, "Choose action");
			if (res == -1) return;
			await Promise.resolve(actions[res].handler(element));
		}
		async onDataChange(node) {
			if (this.filtering) {
				this.itemsToFilter = void 0;
				await this.doFilter(toText(this.filterText));
				return;
			}
			this.clearSelection();
			if (!node) {
				await this.render();
				return;
			}
			let release = await this.mutex.acquire();
			try {
				let items = this.renderedItems;
				let idx = items.findIndex((o) => o.node === node);
				if (idx != -1 && this.bufnr) {
					let level = items[idx].level;
					let removeCount = 0;
					for (let i = idx; i < items.length; i++) {
						let o = items[i];
						if (i == idx || o && o.level > level) removeCount += 1;
					}
					let appendItems = [];
					let highlights = [];
					let start = idx + this.startLnum;
					await this.appendTreeNode(node, level, start, appendItems, highlights);
					items.splice(idx, removeCount, ...appendItems);
					this.updateUI(appendItems.map((o) => o.line), highlights, start, start + removeCount);
				}
				release();
			} catch (e) {
				let errMsg = `Error on tree refresh: ${e}`;
				logger$14.error(errMsg, e);
				this.nvim.errWriteLine("[coc.nvim] " + errMsg);
				release();
			}
		}
		async resolveItem(element, item) {
			if (typeof this.provider.resolveTreeItem === "function") {
				let tokenSource = this.resolveTokenSource = new import_main$1.CancellationTokenSource();
				let token = tokenSource.token;
				item = await Promise.resolve(this.provider.resolveTreeItem(item, element, token));
				tokenSource.dispose();
				this.resolveTokenSource = void 0;
				if (token.isCancellationRequested) return void 0;
			}
			this.nodesMap.set(element, {
				item,
				resolved: true
			});
			return item;
		}
		get visible() {
			if (!this.bufnr) return false;
			return this.winid != null;
		}
		get valid() {
			return typeof this.bufnr === "number";
		}
		get selection() {
			return this._selection.slice();
		}
		async checkLines() {
			if (!this.bufnr) return false;
			let curr = await this.nvim.createBuffer(this.bufnr).lines;
			let { titleCount, messageCount } = this.lineState;
			curr = curr.slice(titleCount + messageCount);
			let lines = this.renderedItems.map((o) => o.line);
			return equals(curr, lines);
		}
		/**
		* Expand/collapse TreeItem.
		*/
		async toggleExpand(element) {
			let o = this.nodesMap.get(element);
			if (!o) return;
			let treeItem = o.item;
			let lnum = this.getItemLnum(element);
			let nodeIdx = lnum - this.startLnum;
			let obj = this.renderedItems[nodeIdx];
			if (!obj || treeItem.collapsibleState == 0) {
				if (typeof this.provider.getParent === "function") {
					let node = await Promise.resolve(this.provider.getParent(element));
					if (node) {
						await this.toggleExpand(node);
						this.focusItem(node);
					}
				}
				return;
			}
			let removeCount = 0;
			if (treeItem.collapsibleState == 2) {
				let level = obj.level;
				for (let i = nodeIdx + 1; i < this.renderedItems.length; i++) {
					let o = this.renderedItems[i];
					if (!o || o.level <= level) break;
					removeCount += 1;
				}
				treeItem.collapsibleState = 1;
			} else if (treeItem.collapsibleState == 1) treeItem.collapsibleState = 2;
			let newItems = [];
			let newHighlights = [];
			await this.appendTreeNode(obj.node, obj.level, lnum, newItems, newHighlights);
			this.renderedItems.splice(nodeIdx, removeCount + 1, ...newItems);
			this.updateUI(newItems.map((o) => o.line), newHighlights, lnum, lnum + removeCount + 1);
			this.refreshSigns();
			if (treeItem.collapsibleState == 1) this._onDidCollapseElement.fire({ element });
			else this._onDidExpandElement.fire({ element });
		}
		toggleSelection(element) {
			if (!element) return;
			let idx = this._selection.findIndex((o) => o === element);
			if (idx !== -1) this.unselectItem(idx);
			else this.selectItem(element);
		}
		clearSelection() {
			if (!this.bufnr) return;
			this._selection = [];
			this.nvim.createBuffer(this.bufnr).unplaceSign({ group: "CocTree" });
			this._onDidChangeSelection.fire({ selection: [] });
		}
		selectItem(item, forceSingle, noRedraw) {
			let { nvim } = this;
			let row = this.getItemLnum(item);
			if (row == null || !this.bufnr) return;
			let buf = nvim.createBuffer(this.bufnr);
			let exists = this._selection.includes(item);
			if (!this.opts.canSelectMany || forceSingle) this._selection = [item];
			else if (!exists) this._selection.push(item);
			nvim.pauseNotification();
			if (!this.opts.canSelectMany || forceSingle) buf.unplaceSign({ group: "CocTree" });
			nvim.call("win_execute", [this.winid, `normal! ${row + 1}G`], true);
			buf.placeSign({
				id: signOffset + row,
				lnum: row + 1,
				name: "CocTreeSelected",
				group: "CocTree"
			});
			if (!noRedraw) this.redraw();
			nvim.resumeNotification(false, true);
			if (!exists) this._onDidChangeSelection.fire({ selection: this._selection });
		}
		unselectItem(idx) {
			let item = this._selection[idx];
			let row = this.getItemLnum(item);
			if (row == null || !this.bufnr) return;
			this._selection.splice(idx, 1);
			this.nvim.createBuffer(this.bufnr).unplaceSign({
				group: "CocTree",
				id: signOffset + row
			});
			this._onDidChangeSelection.fire({ selection: this._selection });
		}
		focusItem(element) {
			if (!this.winid) return;
			let lnum = this.getItemLnum(element);
			if (lnum == null) return;
			this.nvim.call("win_execute", [this.winid, `exe ${lnum + 1}`], true);
		}
		getElementByLnum(lnum) {
			let item = this.renderedItems[lnum - this.startLnum];
			return item ? item.node : void 0;
		}
		getItemLnum(item) {
			let idx = this.renderedItems.findIndex((o) => o.node === item);
			if (idx == -1) return void 0;
			return this.startLnum + idx;
		}
		async getTreeItem(element) {
			let exists;
			let resolved = false;
			let obj = this.nodesMap.get(element);
			if (obj != null) {
				exists = obj.item;
				resolved = obj.resolved;
			}
			let item = await Promise.resolve(this.provider.getTreeItem(element));
			if (exists && item && exists.collapsibleState != 0 && item.collapsibleState != 0) item.collapsibleState = exists.collapsibleState;
			this.nodesMap.set(element, {
				item,
				resolved
			});
			return item;
		}
		getRenderedLine(treeItem, lnum, level) {
			let { openedIcon, closedIcon } = this.config;
			const highlights = [];
			const { label, deprecated, description } = treeItem;
			let prefix = "  ".repeat(level);
			const addHighlight = (text, hlGroup) => {
				let colStart = byteLength(prefix);
				highlights.push({
					lnum,
					hlGroup,
					colStart,
					colEnd: colStart + byteLength(text)
				});
			};
			switch (treeItem.collapsibleState) {
				case 2:
					addHighlight(openedIcon, "CocTreeOpenClose");
					prefix += openedIcon + " ";
					break;
				case 1:
					addHighlight(closedIcon, "CocTreeOpenClose");
					prefix += closedIcon + " ";
					break;
				default: prefix += this.leafIndent ? "  " : "";
			}
			if (treeItem.icon) {
				let { text, hlGroup } = treeItem.icon;
				addHighlight(text, hlGroup);
				prefix += text + " ";
			}
			if (TreeItemLabel.is(label) && Array.isArray(label.highlights)) {
				let colStart = byteLength(prefix);
				for (let o of label.highlights) highlights.push({
					lnum,
					hlGroup: "CocSearch",
					colStart: colStart + o[0],
					colEnd: colStart + o[1]
				});
			}
			let labelText = getItemLabel(treeItem);
			if (deprecated) addHighlight(labelText, "CocDeprecatedHighlight");
			prefix += labelText;
			if (description && description.indexOf("\n") == -1) {
				prefix += " ";
				addHighlight(description, "CocTreeDescription");
				prefix += description;
			}
			return {
				line: prefix,
				highlights
			};
		}
		async appendTreeNode(element, level, lnum, items, highlights) {
			let treeItem = await this.getTreeItem(element);
			if (!treeItem) return 0;
			let takes = 1;
			let res = this.getRenderedLine(treeItem, lnum, level);
			highlights.push(...res.highlights);
			items.push({
				level,
				line: res.line,
				node: element
			});
			if (treeItem.collapsibleState == 2) {
				let l = level + 1;
				let children = await Promise.resolve(this.provider.getChildren(element));
				for (let el of toArray(children)) {
					let n = await this.appendTreeNode(el, l, lnum + takes, items, highlights);
					takes = takes + n;
				}
			}
			return takes;
		}
		updateUI(lines, highlights, start = 0, end = -1, noRedraw = false) {
			if (!this.bufnr) return;
			let { nvim, winid } = this;
			let buf = nvim.createBuffer(this.bufnr);
			nvim.pauseNotification();
			buf.setOption("modifiable", true, true);
			buf.setLines(lines, {
				start,
				end,
				strictIndexing: false
			}, true);
			if (this.autoWidth) this.nvim.call("coc#window#adjust_width", [winid], true);
			if (highlights.length) {
				let highlightEnd = end == -1 ? -1 : start + lines.length;
				buf.updateHighlights(highlightNamespace, highlights, {
					start,
					end: highlightEnd
				});
			}
			buf.setOption("modifiable", false, true);
			if (!noRedraw) this.redraw();
			nvim.resumeNotification(false, true);
		}
		async reveal(element, options = {}) {
			if (this.filtering) return;
			let isShown = this.getItemLnum(element) != null;
			let { select, focus, expand } = options;
			let curr = element;
			if (typeof this.provider.getParent !== "function") throw new Error("missing getParent function from provider for reveal.");
			if (!isShown) while (curr) {
				let parentNode = await Promise.resolve(this.provider.getParent(curr));
				if (parentNode) {
					let item = await this.getTreeItem(parentNode);
					item.collapsibleState = 2;
					curr = parentNode;
				} else break;
			}
			if (expand) {
				let item = await this.getTreeItem(element);
				if (item.collapsibleState != 0) {
					item.collapsibleState = 2;
					if (typeof expand === "boolean") expand = 1;
					if (expand > 1) {
						let curr = Math.min(expand, 2);
						let nodes = await Promise.resolve(this.provider.getChildren(element));
						while (!isFalsyOrEmpty(nodes)) {
							let arr = [];
							for (let n of nodes) {
								let item = await this.getTreeItem(n);
								if (item.collapsibleState == 0) continue;
								item.collapsibleState = 2;
								if (curr > 1) {
									let res = await Promise.resolve(this.provider.getChildren(n));
									arr.push(...res);
								}
							}
							nodes = arr;
							curr = curr - 1;
						}
					}
				}
			}
			if (!isShown || expand) await this.render();
			if (select !== false) this.selectItem(element);
			if (focus) this.focusItem(element);
		}
		updateHeadLines(initialize = false) {
			let { titleCount, messageCount } = this.lineState;
			let end = initialize ? -1 : titleCount + messageCount;
			let lines = [];
			let highlights = [];
			if (this.message) {
				highlights.push({
					hlGroup: "MoreMsg",
					colStart: 0,
					colEnd: byteLength(this.message),
					lnum: 0
				});
				lines.push(this.message);
				lines.push("");
			}
			if (this.title) {
				highlights.push({
					hlGroup: "CocTreeTitle",
					colStart: 0,
					colEnd: byteLength(this.title),
					lnum: lines.length
				});
				if (this.description) {
					let colStart = byteLength(this.title) + 1;
					highlights.push({
						hlGroup: "Comment",
						colStart,
						colEnd: colStart + byteLength(this.description),
						lnum: lines.length
					});
				}
				lines.push(this.title + (this.description ? " " + this.description : ""));
			}
			this.lineState.messageCount = this.message ? 2 : 0;
			this.lineState.titleCount = this.title ? 1 : 0;
			this.updateUI(lines, highlights, 0, end);
			if (!initialize) this.refreshSigns();
		}
		/**
		* Update signs after collapse/expand or head change
		*/
		refreshSigns() {
			let { selection, nvim, bufnr } = this;
			if (!selection.length || !bufnr) return;
			let buf = nvim.createBuffer(bufnr);
			nvim.pauseNotification();
			buf.unplaceSign({ group: "CocTree" });
			for (let n of selection) {
				let row = this.getItemLnum(n);
				if (row == null) continue;
				buf.placeSign({
					id: signOffset + row,
					lnum: row + 1,
					name: "CocTreeSelected",
					group: "CocTree"
				});
			}
			nvim.resumeNotification(false, true);
		}
		async render() {
			if (!this.bufnr) return;
			let release = await this.mutex.acquire();
			try {
				let lines = [];
				let highlights = [];
				let { startLnum } = this;
				let nodes = await Promise.resolve(this.provider.getChildren());
				let level = 0;
				let lnum = startLnum;
				let renderedItems = [];
				if (isFalsyOrEmpty(nodes)) this.message = "No results";
				else {
					if (this.message == "No results") this.message = "";
					for (let node of nodes) {
						let n = await this.appendTreeNode(node, level, lnum, renderedItems, highlights);
						lnum += n;
					}
				}
				lines.push(...renderedItems.map((o) => o.line));
				this.renderedItems = renderedItems;
				let delta = this.startLnum - startLnum;
				highlights.forEach((o) => o.lnum = o.lnum + delta);
				this.updateUI(lines, highlights, this.startLnum, -1);
				this._onDidRefrash.fire();
				this.retryTimers = 0;
				release();
			} catch (err) {
				logger$14.error("Error on render", err);
				this.renderedItems = [];
				this.nodesMap.clear();
				this.lineState = {
					titleCount: 0,
					messageCount: 1
				};
				release();
				let errMsg = `${err}`.replace(/\r?\n/g, " ");
				this.updateUI([errMsg], [{
					hlGroup: "WarningMsg",
					colStart: 0,
					colEnd: byteLength(errMsg),
					lnum: 0
				}]);
				if (this.retryTimers == maxRetry) return;
				this.timer = setTimeout(() => {
					this.retryTimers = this.retryTimers + 1;
					this.render();
				}, retryTimeout);
			}
		}
		async show(splitCommand = "belowright 30vs", waitRender = true) {
			let { nvim } = this;
			let [targetBufnr, windowId] = await nvim.eval(`[bufnr("%"),win_getid()]`);
			this._targetBufnr = targetBufnr;
			this._targetWinId = windowId;
			let opts = {
				command: splitCommand,
				bufname: this.bufname,
				viewId: this.viewId.replace(/"/g, "\\\""),
				bufnr: defaultValue(this.bufnr, -1),
				winid: defaultValue(this.winid, -1),
				bufhidden: defaultValue(this.opts.bufhidden, "wipe"),
				canSelectMany: this.opts.canSelectMany === true,
				winfixwidth: this.winfixwidth === true
			};
			let [bufnr, winid, tabId] = await nvim.call("coc#ui#create_tree", [opts]);
			this.bufnr = bufnr;
			this.winid = winid;
			this._targetTabId = tabId;
			if (winid != opts.winid) this._onDidChangeVisibility.fire({ visible: true });
			if (bufnr == opts.bufnr) return true;
			this.registerKeymaps();
			this.updateHeadLines(true);
			let promise = this.render();
			if (waitRender) await promise;
			return true;
		}
		registerLocalKeymap(mode, key, fn, notify = false) {
			if (!this.bufnr) this._keymapDefs.push({
				mode,
				key,
				fn,
				notify
			});
			else this.addLocalKeymap(mode, key, fn, notify);
		}
		addLocalKeymap(mode, key, fn, notify = true) {
			if (!key) return;
			workspace_default.registerLocalKeymap(this.bufnr, mode, key, async () => {
				let lnum = await this.nvim.call("line", ["."]);
				let element = this.getElementByLnum(lnum - 1);
				await Promise.resolve(fn(element));
			}, notify);
		}
		registerKeymaps() {
			let { toggleSelection, actions, close, invoke, toggle, collapseAll, activeFilter } = this.keys;
			let { nvim, _keymapDefs } = this;
			this.disposables.push(workspace_default.registerLocalKeymap(this.bufnr, "n", "<C-o>", () => {
				nvim.call("win_gotoid", [this._targetWinId], true);
			}, true));
			this.addLocalKeymap("n", "<LeftRelease>", async (element) => {
				if (element) await this.onClick(element);
			});
			if (this.filter != null) this.addLocalKeymap("n", activeFilter, async () => {
				this.nvim.command(`exe ${this.startLnum}`, true);
				this.filter.active();
				this.filterText = "";
				this._onDidFilterStateChange.fire(true);
			});
			this.addLocalKeymap("n", toggleSelection, (element) => this.toggleSelection(element));
			this.addLocalKeymap("n", invoke, (element) => this.invokeCommand(element));
			this.addLocalKeymap("n", actions, (element) => this.invokeActions(element));
			this.addLocalKeymap("n", toggle, (element) => this.toggleExpand(element));
			this.addLocalKeymap("n", collapseAll, () => this.collapseAll());
			this.addLocalKeymap("n", close, () => this.hide());
			while (_keymapDefs.length) {
				const def = _keymapDefs.pop();
				this.addLocalKeymap(def.mode, def.key, def.fn, def.notify);
			}
		}
		hide() {
			this.nvim.call("coc#window#close", [this.winid], true);
			this.redraw();
			this.winid = void 0;
			this._onDidChangeVisibility.fire({ visible: false });
		}
		redraw() {
			if (workspace_default.isVim || this.filter?.activated) this.nvim.command("redraw", true);
		}
		async collapseAll() {
			for (let obj of this.nodesMap.values()) {
				let item = obj.item;
				if (item.collapsibleState == 2) item.collapsibleState = 1;
			}
			await this.render();
		}
		cancelResolve() {
			if (this.resolveTokenSource) {
				this.resolveTokenSource.cancel();
				this.resolveTokenSource = void 0;
			}
		}
		dispose() {
			if (!this.provider) return;
			if (this.timer) clearTimeout(this.timer);
			this.cancelResolve();
			let { bufnr } = this;
			if (this.winid) this._onDidChangeVisibility.fire({ visible: false });
			if (bufnr) this.nvim.command(`silent! bwipeout! ${bufnr}`, true);
			this._keymapDefs = [];
			this.winid = void 0;
			this.bufnr = void 0;
			this.filter?.dispose();
			this._selection = [];
			this.itemsToFilter = [];
			this.tooltipFactory.dispose();
			this.renderedItems = [];
			this.nodesMap.clear();
			this.provider = void 0;
			this._onDispose.fire();
			this._onDispose.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/window.ts
var Window, window_default;
var init_window = __esmMin((() => {
	init_channels();
	init_dialogs();
	init_highlights$1();
	init_notifications$1();
	init_terminals();
	init_ui$2();
	init_TreeView();
	init_object();
	init_protocol();
	Window = class {
		nvim;
		highlights = new Highlights$1();
		terminalManager = new Terminals();
		cursors;
		dialogs = new Dialogs();
		notifications = new Notifications(this.dialogs);
		workspace;
		constructor() {
			Object.defineProperty(this.highlights, "nvim", { get: () => this.nvim });
			Object.defineProperty(this.dialogs, "nvim", { get: () => this.nvim });
			Object.defineProperty(this.dialogs, "configuration", { get: () => this.workspace.initialConfiguration });
			Object.defineProperty(this.notifications, "nvim", { get: () => this.nvim });
			Object.defineProperty(this.notifications, "configuration", { get: () => this.workspace.initialConfiguration });
			Object.defineProperty(this.notifications, "statusLine", { get: () => this.workspace.statusLine });
		}
		get activeTextEditor() {
			return this.workspace.editors.activeTextEditor;
		}
		get visibleTextEditors() {
			return this.workspace.editors.visibleTextEditors;
		}
		get onDidTabClose() {
			return this.workspace.editors.onDidTabClose;
		}
		get onDidChangeActiveTextEditor() {
			return this.workspace.editors.onDidChangeActiveTextEditor;
		}
		get onDidChangeVisibleTextEditors() {
			return this.workspace.editors.onDidChangeVisibleTextEditors;
		}
		get terminals() {
			return this.terminalManager.terminals;
		}
		get onDidOpenTerminal() {
			return this.terminalManager.onDidOpenTerminal;
		}
		get onDidCloseTerminal() {
			return this.terminalManager.onDidCloseTerminal;
		}
		async createTerminal(opts) {
			return await this.terminalManager.createTerminal(this.nvim, opts);
		}
		/**
		* Run command in vim terminal for result
		* @param cmd Command to run.
		* @param cwd Cwd of terminal, default to result of |getcwd()|.
		*/
		async runTerminalCommand(cmd, cwd, keepfocus = false) {
			return await this.terminalManager.runTerminalCommand(this.nvim, cmd, cwd, keepfocus);
		}
		/**
		* Open terminal window.
		* @param cmd Command to run.
		* @param opts Terminal option.
		* @returns number buffer number of terminal
		*/
		async openTerminal(cmd, opts) {
			return await this.terminalManager.openTerminal(this.nvim, cmd, opts);
		}
		/**
		* Reveal message with message type.
		* @param msg Message text to show.
		* @param messageType Type of message, could be `error` `warning` and `more`, default to `more`
		*/
		showMessage(msg, messageType = "more") {
			this.notifications.echoMessages(msg, messageType);
		}
		/**
		* Create a new output channel
		* @param name Unique name of output channel.
		* @returns A new output channel.
		*/
		createOutputChannel(name) {
			return channels_default.create(name, this.nvim);
		}
		/**
		* Reveal buffer of output channel.
		* @param name Name of output channel.
		* @param cmd command for open output channel.
		* @param preserveFocus Preserve window focus when true.
		*/
		showOutputChannel(name, cmd, preserveFocus) {
			let command = cmd ? cmd : this.configuration.get("workspace.openOutputCommand", "vs");
			channels_default.show(name, command, preserveFocus);
		}
		/**
		* Echo lines at the bottom of vim.
		* @param lines Line list.
		* @param truncate Truncate the lines to avoid 'press enter to continue' when true
		*/
		async echoLines(lines, truncate = false) {
			await echoLines(this.nvim, this.workspace.env, lines, truncate);
		}
		/**
		* Get current cursor position (line, character both 0 based).
		* @returns Cursor position.
		*/
		getCursorPosition() {
			return getCursorPosition(this.nvim);
		}
		/**
		* Move cursor to position.
		* @param position LSP position.
		*/
		async moveTo(position) {
			await moveTo(this.nvim, position, this.workspace.env.isVim);
		}
		/**
		* Get selected range for current document
		*/
		getSelectedRange(mode) {
			return getSelection(this.nvim, mode);
		}
		/**
		* Visual select range of current document
		*/
		async selectRange(range) {
			await selectRange(this.nvim, range, this.nvim.isVim);
		}
		/**
		* Get current cursor character offset in document,
		* length of line break would always be 1.
		* @returns Character offset.
		*/
		getOffset() {
			return getOffset(this.nvim);
		}
		/**
		* Get screen position of current cursor(relative to editor),
		* both `row` and `col` are 0 based.
		* @returns Cursor screen position.
		*/
		getCursorScreenPosition() {
			return getCursorScreenPosition(this.nvim);
		}
		/**
		* Create a {@link TreeView} instance.
		* @param viewId Id of the view, used as title of TreeView when title doesn't exist.
		* @param options Options for creating the {@link TreeView}
		* @returns a {@link TreeView}.
		*/
		createTreeView(viewId, options) {
			return new BasicTreeView(viewId, options);
		}
		/**
		* Create statusbar item that would be included in `g:coc_status`.
		* @param priority Higher priority item would be shown right.
		* @param option
		* @return A new status bar item.
		*/
		createStatusBarItem(priority = 0, option = {}) {
			return this.workspace.statusLine.createStatusBarItem(priority, option.progress);
		}
		/**
		* Get diff from highlight items and current highlights on vim.
		* Return null when buffer not loaded
		* @param bufnr Buffer number
		* @param ns Highlight namespace
		* @param items Highlight items
		* @param region 0 based start and end line count (end inclusive)
		* @param token CancellationToken
		* @returns {Promise<HighlightDiff | null>}
		*/
		async diffHighlights(bufnr, ns, items, region, token) {
			return this.highlights.diffHighlights(bufnr, ns, items, region, token);
		}
		/**
		* Create a FloatFactory, user's configurations are respected.
		* @param {FloatWinConfig} conf - Float window configuration
		* @returns {FloatFactory}
		*/
		createFloatFactory(conf) {
			let configuration = this.workspace.initialConfiguration;
			let defaults = toObject(configuration.get("floatFactory.floatConfig"));
			let markdownPreference = this.workspace.configurations.markdownPreference;
			return createFloatFactory(this.workspace.nvim, Object.assign({
				...markdownPreference,
				maxWidth: 80
			}, conf), defaults);
		}
		/**
		* Show quickpick for single item, use `window.menuPick` for menu at current current position.
		* @deprecated Use 'window.showMenuPicker()' or `window.showQuickPick` instead.
		* @param items Label list.
		* @param placeholder Prompt text, default to 'choose by number'.
		* @returns Index of selected item, or -1 when canceled.
		*/
		async showQuickpick(items, placeholder = "Choose by number") {
			return await this.showMenuPicker(items, {
				title: placeholder,
				position: "center"
			});
		}
		/**
		* Shows a selection list.
		*/
		async showQuickPick(itemsOrItemsPromise, options, token = import_main$1.CancellationToken.None) {
			return await this.dialogs.showQuickPick(itemsOrItemsPromise, options, token);
		}
		/**
		* Creates a {@link QuickPick} to let the user pick an item or items from a
		* list of items of type T.
		*
		* Note that in many cases the more convenient {@link window.showQuickPick}
		* is easier to use. {@link window.createQuickPick} should be used
		* when {@link window.showQuickPick} does not offer the required flexibility.
		* @return A new {@link QuickPick}.
		*/
		async createQuickPick(config = {}) {
			return await this.dialogs.createQuickPick(config);
		}
		async requestInputList(prompt, items) {
			if (items.length > this.workspace.env.lines) items = items.slice(0, this.workspace.env.lines - 2);
			return await this.dialogs.requestInputList(prompt, items);
		}
		/**
		* Show menu picker at current cursor position.
		* @param items Array of texts.
		* @param option Options for menu.
		* @param token A token that can be used to signal cancellation.
		* @returns Selected index (0 based), -1 when canceled.
		*/
		async showMenuPicker(items, option, token) {
			return await this.dialogs.showMenuPicker(items, option, token);
		}
		/**
		* Prompt user for confirm, a float/popup window would be used when possible,
		* use vim's |confirm()| function as callback.
		* @param title The prompt text.
		* @returns Result of confirm.
		*/
		async showPrompt(title) {
			return await this.dialogs.showPrompt(title);
		}
		/**
		* Show dialog window at the center of screen.
		* Note that the dialog would always be closed after button click.
		* @param config Dialog configuration.
		* @returns Dialog or null when dialog can't work.
		*/
		async showDialog(config) {
			return await this.dialogs.showDialog(config);
		}
		/**
		* Request input from user
		* @param title Title text of prompt window.
		* @param value Default value of input, empty text by default.
		* @param {InputOptions} option for input window
		* @returns {Promise<string>}
		*/
		async requestInput(title, value, option) {
			return await this.dialogs.requestInput(title, this.workspace.env, value, option);
		}
		/**
		* Creates and show a {@link InputBox} to let the user enter some text input.
		* @return A new {@link InputBox}.
		*/
		async createInputBox(title, value, option) {
			return await this.dialogs.createInputBox(title, value, option);
		}
		async showPickerDialog(items, title, token) {
			return await this.dialogs.showPickerDialog(items, title, token);
		}
		/**
		* Show an information message to users. Optionally provide an array of items which will be presented as
		* clickable buttons.
		* @param message The message to show.
		* @param items A set of items that will be rendered as actions in the message.
		* @return Promise that resolves to the selected item or `undefined` when being dismissed.
		*/
		async showInformationMessage(message, ...items) {
			return await this.notifications._showMessage("Info", message, items);
		}
		/**
		* Show an warning message to users. Optionally provide an array of items which will be presented as
		* clickable buttons.
		* @param message The message to show.
		* @param items A set of items that will be rendered as actions in the message.
		* @return Promise that resolves to the selected item or `undefined` when being dismissed.
		*/
		async showWarningMessage(message, ...items) {
			return await this.notifications._showMessage("Warning", message, items);
		}
		/**
		* Show an error message to users. Optionally provide an array of items which will be presented as
		* clickable buttons.
		* @param message The message to show.
		* @param items A set of items that will be rendered as actions in the message.
		* @return Promise that resolves to the selected item or `undefined` when being dismissed.
		*/
		async showErrorMessage(message, ...items) {
			return await this.notifications._showMessage("Error", message, items);
		}
		async showNotification(config) {
			let stack = Error().stack;
			await this.notifications.showNotification(config, stack);
		}
		/**
		* Show progress in the editor. Progress is shown while running the given callback
		* and while the promise it returned isn't resolved nor rejected.
		*/
		async withProgress(options, task) {
			return this.notifications.withProgress(options, task);
		}
		/**
		* Apply highlight diffs, normally used with `window.diffHighlights`
		*
		* Timer is used to add highlights when there're too many highlight items to add,
		* the highlight process won't be finished on that case.
		* @param {number} bufnr - Buffer name
		* @param {string} ns - Namespace
		* @param {number} priority
		* @param {HighlightDiff} diff
		* @param {boolean} notify - Use notification, default false.
		* @returns {Promise<void>}
		*/
		async applyDiffHighlights(bufnr, ns, priority, diff, notify = false) {
			return this.highlights.applyDiffHighlights(bufnr, ns, priority, diff, notify);
		}
		/**
		* Get visible ranges of bufnr with optional winid
		*/
		async getVisibleRanges(bufnr, winid) {
			return await getVisibleRanges(this.nvim, bufnr, winid);
		}
		get configuration() {
			return this.workspace.initialConfiguration;
		}
		dispose() {
			this.terminalManager.dispose();
		}
	};
	window_default = new Window();
}));
//#endregion
//#region src/completion/wordDistance.ts
var WordDistance;
var init_wordDistance = __esmMin((() => {
	init_main$2();
	init_events();
	init_languages();
	init_array();
	init_object();
	init_is();
	init_position();
	init_workspace$1();
	init_util$7();
	WordDistance = class WordDistance {
		static None = new class extends WordDistance {
			distance() {
				return 0;
			}
		}();
		static async create(localityBonus, opt, token) {
			let { position } = opt;
			let cursor = [opt.linenr, opt.colnr];
			if (!localityBonus) return WordDistance.None;
			let doc = workspace_default.getDocument(opt.bufnr);
			const selectionRanges = await languages_default.getSelectionRanges(doc.textDocument, [position], token);
			if (!selectionRanges || token.isCancellationRequested) return WordDistance.None;
			let ranges = [];
			const iterate = (r) => {
				if (r && r.range.end.line - r.range.start.line < 2e3) {
					ranges.unshift(r.range);
					iterate(r.parent);
				}
			};
			iterate(toArray(selectionRanges)[0]);
			let wordRanges = ranges.length > 0 ? await Promise.race([waitWithToken(100, token), workspace_default.computeWordRanges(opt.bufnr, ranges[0], token)]) : void 0;
			if (!objectLiteral(wordRanges)) return WordDistance.None;
			delete wordRanges[opt.word];
			return new class extends WordDistance {
				distance(anchor, item) {
					if (!equals([events_default.cursor.lnum, events_default.cursor.col], cursor)) return 0;
					if (item.kind === CompletionItemKind.Keyword || toObject(item.source)["name"] === "snippets") return 2 << 20;
					const wordLines = wordRanges[item.word];
					if (isFalsyOrEmpty(wordLines)) return 2 << 20;
					const idx = binarySearch(wordLines, Range.create(anchor, anchor), compareRangesUsingStarts);
					const bestWordRange = idx >= 0 ? wordLines[idx] : wordLines[Math.max(0, ~idx - 1)];
					let blockDistance = ranges.length;
					for (const range of ranges) {
						if (!rangeInRange(bestWordRange, range)) break;
						blockDistance -= 1;
					}
					return blockDistance;
				}
			}();
		}
	};
}));
//#endregion
//#region src/completion/complete.ts
function sortItems(emptyInput, defaultSortMethod, a, b) {
	let sa = a.sortText;
	let sb = b.sortText;
	if (a.score !== b.score) return b.score - a.score;
	if (a.priority !== b.priority) return b.priority - a.priority;
	if (a.source === b.source && sa !== sb) return sa < sb ? -1 : 1;
	if (a.localBonus !== b.localBonus) return b.localBonus - a.localBonus;
	if (emptyInput) return b.character - a.character;
	switch (defaultSortMethod) {
		case "none": return 0;
		case "alphabetical": return a.filterText.localeCompare(b.filterText);
		default: return a.filterText.length - b.filterText.length;
	}
}
var logger$13, MAX_DISTANCE, MIN_TIMEOUT, MAX_TIMEOUT, MAX_TRIGGER_WAIT, WORD_SOURCES, Complete;
var init_complete = __esmMin((() => {
	init_main$2();
	init_logger$2();
	init_util$7();
	init_array();
	init_filter$1();
	init_is();
	init_numbers();
	init_protocol();
	init_string$1();
	init_workspace$1();
	init_util$3();
	init_wordDistance();
	logger$13 = createLogger$1("completion-complete");
	MAX_DISTANCE = 2 << 20;
	MIN_TIMEOUT = 50;
	MAX_TIMEOUT = 15e3;
	MAX_TRIGGER_WAIT = 200;
	WORD_SOURCES = new Set([
		"buffer",
		"around",
		"word"
	]);
	Complete = class {
		option;
		document;
		config;
		sources;
		results = /* @__PURE__ */ new Map();
		_input = "";
		_completing = false;
		timer;
		names = [];
		asciiMatch;
		timeout;
		cid = 0;
		minCharacter = Number.MAX_SAFE_INTEGER;
		inputStart;
		completingSources = /* @__PURE__ */ new Set();
		_onDidRefresh = new import_main$1.Emitter();
		wordDistance;
		tokenSources = /* @__PURE__ */ new Set();
		tokensInfo = /* @__PURE__ */ new WeakMap();
		itemsMap = /* @__PURE__ */ new WeakMap();
		onDidRefresh = this._onDidRefresh.event;
		constructor(option, document, config, sources) {
			this.option = option;
			this.document = document;
			this.config = config;
			this.sources = sources;
			this.inputStart = characterIndex(option.line, option.col);
			this.timeout = clamp(this.config.timeout, MIN_TIMEOUT, MAX_TIMEOUT);
			sources.sort((a, b) => (b.priority ?? 99) - (a.priority ?? 99));
			this.names = sources.map((o) => o.name);
			this.asciiMatch = config.asciiMatch && useAscii(option.input);
		}
		get nvim() {
			return workspace_default.nvim;
		}
		getTrigger(character) {
			let { linenr, col } = this.option;
			let line = this.document.getline(linenr - 1);
			return (line.slice(0, characterIndex(line, col)) + this.input).slice(character);
		}
		fireRefresh(waitTime) {
			clearTimeout(this.timer);
			if (!waitTime) process.nextTick(() => {
				this._onDidRefresh.fire();
			});
			else this.timer = setTimeout(() => {
				this._onDidRefresh.fire();
			}, waitTime);
		}
		get totalLength() {
			let len = 0;
			for (let result of this.results.values()) len += result.items.length;
			return len;
		}
		resolveItem(item) {
			if (!item) return void 0;
			return {
				source: item.source,
				item: this.itemsMap.get(item)
			};
		}
		get isCompleting() {
			return this._completing;
		}
		get input() {
			return this._input;
		}
		get isEmpty() {
			return this.results.size === 0;
		}
		get hasInComplete() {
			for (let result of this.results.values()) if (result.isIncomplete) return true;
			return false;
		}
		getIncompleteSources() {
			return this.sources.filter((s) => {
				let res = this.results.get(s.name);
				return res && res.isIncomplete === true;
			});
		}
		async doComplete() {
			let tokenSource = this.createTokenSource(false);
			let token = tokenSource.token;
			let res = await Promise.all([
				this.nvim.call("coc#util#synname", []),
				this.nvim.call("coc#_suggest_variables", []),
				this.document.patchChange()
			]);
			if (token.isCancellationRequested) return;
			this.option.synname = res[0];
			let variables = res[1];
			if (variables.disable) {
				logger$13.warn("suggest cancelled by b:coc_suggest_disable");
				return true;
			}
			if (!isFalsyOrEmpty(variables.disabled_sources)) {
				this.sources = this.sources.filter((s) => !variables.disabled_sources.includes(s.name));
				if (this.sources.length === 0) {
					logger$13.warn("suggest cancelled by b:coc_disabled_sources");
					return true;
				}
			}
			if (!isFalsyOrEmpty(variables.blacklist) && variables.blacklist.includes(this.option.input)) {
				logger$13.warn("suggest cancelled by b:coc_suggest_blacklist");
				return true;
			}
			WordDistance.create(this.config.localityBonus, this.option, token).then((instance) => {
				this.wordDistance = instance;
			});
			await waitWithToken(clamp(this.config.triggerCompletionWait, 0, MAX_TRIGGER_WAIT), tokenSource.token);
			await this.completeSources(this.sources, tokenSource, this.cid);
		}
		async completeSources(sources, tokenSource, cid) {
			const token = tokenSource.token;
			if (token.isCancellationRequested) return;
			this._completing = true;
			const remains = new Set(sources.map((s) => s.name));
			let timer;
			let disposable;
			let tp = new Promise((resolve) => {
				disposable = token.onCancellationRequested(() => {
					clearTimeout(timer);
					resolve();
				});
				timer = setTimeout(() => {
					let names = Array.from(remains);
					disposable.dispose();
					tokenSource.cancel();
					logger$13.warn(`Completion timeout after ${this.timeout}ms`, names);
					this.nvim.setVar(`coc_timeout_sources`, names, true);
					resolve();
				}, this.timeout);
			});
			const range = this.getDefaultRange();
			let promises = sources.map((s) => this.completeSource(s, range, token).then((added) => {
				remains.delete(s.name);
				if (token.isCancellationRequested) return;
				if (this.completingSources.size === 0) this.fireRefresh(0);
				else if (added) this.fireRefresh(16);
			}));
			await Promise.race([tp, Promise.allSettled(promises)]);
			this.tokenSources.delete(tokenSource);
			disposable.dispose();
			clearTimeout(timer);
			if (cid === this.cid) this._completing = false;
		}
		async completeSource(source, range, token) {
			let opt = Object.assign({}, this.option);
			let { asciiMatch } = this;
			const insertMode = this.config.insertMode;
			const sourceName = source.name;
			let added = false;
			this.completingSources.add(sourceName);
			try {
				if (func(source.shouldComplete)) {
					if (!await Promise.resolve(source.shouldComplete(opt)) || token.isCancellationRequested) return;
				}
				const start = Date.now();
				const map = this.itemsMap;
				await new Promise((resolve, reject) => {
					Promise.resolve(source.doComplete(opt, token)).then((result) => {
						if (token.isCancellationRequested) {
							resolve(void 0);
							return;
						}
						let len = result ? result.items.length : 0;
						logger$13.debug(`Source "${sourceName}" finished with ${len} items ms cost:`, Date.now() - start);
						if (len > 0) {
							if (number(result.startcol)) {
								let line = opt.linenr - 1;
								range = Range.create(line, characterIndex(opt.line, result.startcol), line, range.end.character);
							}
							const option = {
								source,
								insertMode,
								priority: getPriority(source, this.config.languageSourcePriority),
								asciiMatch,
								itemDefaults: result.itemDefaults,
								range
							};
							const converter = new Converter(this.inputStart, option, opt);
							const items = result.items.reduce((items, item) => {
								let completeItem = converter.convertToDurationItem(item);
								if (!completeItem) {
									logger$13.error(`Unexpected completion item from ${sourceName}:`, item);
									return items;
								}
								map.set(completeItem, item);
								items.push(completeItem);
								return items;
							}, []);
							this.minCharacter = Math.min(this.minCharacter, converter.minCharacter);
							this.results.set(sourceName, {
								items,
								isIncomplete: result.isIncomplete === true
							});
							added = true;
						} else this.results.delete(sourceName);
						resolve();
					}, (err) => {
						reject(err);
					});
				});
			} catch (err) {
				logger$13.error("Complete error:", source.name, err);
			}
			this.completingSources.delete(sourceName);
			return added;
		}
		async completeInComplete(resumeInput) {
			let { document } = this;
			this.cancelInComplete();
			let tokenSource = this.createTokenSource(true);
			await document.patchChange();
			let { input, colnr, linenr, followWord, position } = this.option;
			Object.assign(this.option, {
				word: resumeInput + followWord,
				input: resumeInput,
				line: document.getline(linenr - 1),
				position: {
					line: position.line,
					character: position.character + resumeInput.length - input.length
				},
				colnr: colnr + (resumeInput.length - input.length),
				triggerCharacter: void 0,
				triggerForInComplete: true
			});
			this.cid++;
			const sources = this.getIncompleteSources();
			await this.completeSources(sources, tokenSource, this.cid);
		}
		filterItems(input) {
			let { results, names, option, inputStart } = this;
			this._input = input;
			let len = input.length;
			let { maxItemCount, defaultSortMethod, removeDuplicateItems, removeCurrentWord } = this.config;
			let arr = [];
			let words = /* @__PURE__ */ new Set();
			const emptyInput = len == 0;
			const lowInput = input.toLowerCase();
			const scoreFn = !this.config.filterGraceful || this.totalLength > 2e3 ? fuzzyScore : fuzzyScoreGracefulAggressive;
			const scoreOption = {
				boostFullMatch: true,
				firstMatchCanBeWeak: false
			};
			const anchor = Position.create(option.linenr - 1, inputStart);
			for (let name of names) {
				let result = results.get(name);
				if (!result) continue;
				let isWord = WORD_SOURCES.has(name);
				let items = result.items;
				for (let idx = 0; idx < items.length; idx++) {
					let item = items[idx];
					let { word, filterText, dup } = item;
					if (dup !== true && words.has(word)) continue;
					if (removeCurrentWord && isWord && word === input) continue;
					if (removeDuplicateItems && item.isSnippet !== true && words.has(word)) continue;
					let fuzzyResult;
					if (!emptyInput) {
						scoreOption.firstMatchCanBeWeak = item.delta === 0 && item.character !== inputStart;
						if (item.delta > 0) {
							let prev = filterText.slice(0, item.delta);
							fuzzyResult = scoreFn(prev + input, prev.toLowerCase() + lowInput, 0, filterText, filterText.toLowerCase(), 0, scoreOption);
						} else fuzzyResult = scoreFn(input, lowInput, 0, filterText, filterText.toLowerCase(), 0, scoreOption);
						if (fuzzyResult == null) continue;
						item.score = fuzzyResult[0];
						item.positions = fuzzyResult;
						if (this.wordDistance) item.localBonus = MAX_DISTANCE - this.wordDistance.distance(anchor, item);
					} else if (item.character < inputStart) {
						let trigger = option.line.slice(item.character, inputStart);
						scoreOption.firstMatchCanBeWeak = true;
						fuzzyResult = anyScore(trigger, trigger.toLowerCase(), 0, filterText, filterText.toLowerCase(), 0, scoreOption);
						item.score = fuzzyResult[0];
						item.positions = fuzzyResult;
					} else {
						item.score = 0;
						item.positions = void 0;
					}
					words.add(word);
					arr.push(item);
				}
			}
			arr.sort(sortItems.bind(null, emptyInput, defaultSortMethod));
			return this.limitCompleteItems(arr.slice(0, maxItemCount));
		}
		async filterResults(input) {
			if (input !== this.option.input && this.hasInComplete) {
				this.fireRefresh(30);
				this.completeInComplete(input);
				return;
			}
			clearTimeout(this.timer);
			return this.filterItems(input);
		}
		limitCompleteItems(items) {
			let { highPrioritySourceLimit, lowPrioritySourceLimit } = this.config;
			if (!highPrioritySourceLimit && !lowPrioritySourceLimit) return items;
			let counts = /* @__PURE__ */ new Map();
			return items.filter((item) => {
				let { priority, source } = item;
				let isLow = priority < 90;
				let curr = counts.get(source) || 0;
				if (lowPrioritySourceLimit && isLow && curr == lowPrioritySourceLimit || highPrioritySourceLimit && !isLow && curr == highPrioritySourceLimit) return false;
				counts.set(source, curr + 1);
				return true;
			});
		}
		getDefaultRange() {
			let { insertMode } = this.config;
			let { linenr, followWord, position } = this.option;
			let line = linenr - 1;
			let end = position.character + (insertMode == "replace" ? followWord.length : 0);
			return Range.create(line, this.inputStart, line, end);
		}
		createTokenSource(isIncomplete) {
			let tokenSource = new import_main$1.CancellationTokenSource();
			this.tokenSources.add(tokenSource);
			tokenSource.token.onCancellationRequested(() => {
				this.tokenSources.delete(tokenSource);
			});
			this.tokensInfo.set(tokenSource, isIncomplete);
			return tokenSource;
		}
		cancelInComplete() {
			let { tokenSources, tokensInfo } = this;
			for (let tokenSource of Array.from(tokenSources)) if (tokensInfo.get(tokenSource) === true) tokenSource.cancel();
		}
		cancel() {
			let { tokenSources, timer } = this;
			clearTimeout(timer);
			for (let tokenSource of Array.from(tokenSources)) tokenSource.cancel();
			tokenSources.clear();
			this._completing = false;
		}
		dispose() {
			this.cancel();
			this.results.clear();
			this._onDidRefresh.dispose();
		}
	};
}));
//#endregion
//#region src/completion/floating.ts
var logger$12, RESOLVE_TIMEOUT, Floating;
var init_floating = __esmMin((() => {
	init_logger$2();
	init_markdown();
	init_util$7();
	init_errors();
	init_is();
	init_protocol();
	init_workspace$1();
	init_util$3();
	logger$12 = createLogger$1("completion-floating");
	RESOLVE_TIMEOUT = getConditionValue(500, 50);
	Floating = class {
		config;
		resolveTokenSource;
		constructor(config) {
			this.config = config;
		}
		async resolveItem(source, item, opt, showDocs, detailRendered = false) {
			this.cancel();
			if (func(source.onCompleteResolve)) try {
				await this.requestWithToken((token) => {
					return Promise.resolve(source.onCompleteResolve(item, opt, token));
				});
			} catch (e) {
				if (isCancellationError(e)) return;
				logger$12.error(`Error on resolve complete item from ${source.name}:`, item, e);
			}
			if (showDocs) this.show(getDocumentations(item, opt.filetype, detailRendered));
		}
		show(docs) {
			let config = this.config.floatConfig;
			docs = docs.filter((o) => o.content.trim().length > 0);
			if (docs.length === 0) this.close();
			else {
				const markdownPreference = workspace_default.configurations.markdownPreference;
				let { lines, codes, highlights } = parseDocuments(docs, markdownPreference);
				let opts = {
					codes,
					highlights,
					highlight: config.highlight ?? "CocFloating",
					maxWidth: config.maxWidth || 80,
					rounded: config.rounded ? 1 : 0,
					focusable: config.focusable === true ? 1 : 0
				};
				if (string(config.title)) opts.title = config.title;
				if (config.shadow) opts.shadow = 1;
				if (config.border) opts.border = [
					1,
					1,
					1,
					1
				];
				if (config.borderhighlight) opts.borderhighlight = config.borderhighlight;
				if (typeof config.winblend === "number") opts.winblend = config.winblend;
				let { nvim } = workspace_default;
				nvim.call("coc#dialog#create_pum_float", [lines, opts], true);
				nvim.redrawVim();
			}
		}
		close() {
			workspace_default.nvim.call("coc#pum#close_detail", [], true);
			workspace_default.nvim.redrawVim();
		}
		cancel() {
			if (this.resolveTokenSource) {
				this.resolveTokenSource.cancel();
				this.resolveTokenSource = void 0;
			}
		}
		requestWithToken(fn) {
			let tokenSource = this.resolveTokenSource = new import_main$1.CancellationTokenSource();
			return new Promise((resolve, reject) => {
				let called = false;
				let onFinish = (err) => {
					if (called) return;
					called = true;
					disposable.dispose();
					clearTimeout(timer);
					if (this.resolveTokenSource === tokenSource) this.resolveTokenSource = void 0;
					if (err) reject(err);
					else resolve();
				};
				let timer = setTimeout(() => {
					tokenSource.cancel();
				}, RESOLVE_TIMEOUT);
				let disposable = tokenSource.token.onCancellationRequested(() => {
					onFinish(new CancellationError());
				});
				fn(tokenSource.token).then(() => {
					onFinish();
				}, (e) => {
					onFinish(e);
				});
			});
		}
	};
}));
//#endregion
//#region src/completion/pum.ts
/**
* positions is FuzzyScore
*/
function positionHighlights(hls, label, positions, pre, line, max) {
	for (let span of matchSpansReverse(label, positions, 2, max)) hls.push({
		hlGroup: "CocPumSearch",
		lnum: line,
		colStart: pre + span[0],
		colEnd: pre + span[1]
	});
}
/**
* Exclude part with invalid characters.
*/
function getInsertWord(word, codes, start) {
	if (codes.length === 0) return word;
	for (let i = start; i < word.length; i++) if (codes.includes(word.charCodeAt(i))) return word.slice(0, i);
	return word;
}
/**
* Append previous text to word when necessary
*/
function prefixWord(word, character, line, minCharacter) {
	return minCharacter < character ? line.slice(minCharacter, character) + word : word;
}
var PopupMenu;
var init_pum = __esmMin((() => {
	init_fuzzyMatch();
	init_array();
	init_filter$1();
	init_is();
	init_numbers();
	init_string$1();
	init_workspace$1();
	init_util$3();
	PopupMenu = class {
		config;
		mruLoader;
		_search = "";
		_pumConfig;
		constructor(config, mruLoader) {
			this.config = config;
			this.mruLoader = mruLoader;
		}
		get nvim() {
			return workspace_default.nvim;
		}
		get search() {
			return this._search;
		}
		reset() {
			this._search = "";
			this._pumConfig = void 0;
		}
		get pumConfig() {
			if (this._pumConfig) return this._pumConfig;
			let { floatConfig, pumFloatConfig, reversePumAboveCursor } = this.config;
			if (!pumFloatConfig) pumFloatConfig = floatConfig;
			let obj = {};
			if (pumFloatConfig.border) {
				obj.border = [
					1,
					1,
					1,
					1
				];
				obj.rounded = pumFloatConfig.rounded ? 1 : 0;
				obj.borderhighlight = pumFloatConfig.borderhighlight ?? "CocFloatBorder";
			}
			if (string(pumFloatConfig.highlight)) obj.highlight = pumFloatConfig.highlight;
			if (number(pumFloatConfig.winblend)) obj.winblend = pumFloatConfig.winblend;
			if (string(pumFloatConfig.title)) obj.title = pumFloatConfig.title;
			obj.shadow = pumFloatConfig.shadow === true;
			obj.reverse = reversePumAboveCursor === true;
			this._pumConfig = obj;
			return obj;
		}
		stringWidth(text, cache = false) {
			return workspace_default.getDisplayWidth(text, cache);
		}
		show(items, search, option) {
			this._search = search;
			let { noselect, enablePreselect, invalidInsertCharacters, selection, virtualText, kindMap, defaultKindText } = this.config;
			const invalidInsertCodes = invalidInsertCharacters.map((ch) => ch.charCodeAt(0));
			let selectedIndex = enablePreselect ? items.findIndex((o) => o.preselect) : -1;
			let maxMru = -1;
			let abbrWidth = 0;
			let menuWidth = 0;
			let kindWidth = 0;
			let shortcutWidth = 0;
			let checkMru = selectedIndex == -1 && !noselect && selection !== "first";
			let labels = [];
			let minCharacter = characterIndex(option.line, option.col);
			for (let i = 0; i < items.length; i++) {
				let item = items[i];
				if (checkMru) {
					let n = this.mruLoader.getScore(search, item, selection);
					if (n > maxMru) {
						maxMru = n;
						selectedIndex = i;
					}
				}
				if (number(item.character) && item.character < minCharacter) minCharacter = item.character;
				let label = this.getLabel(item);
				labels.push(label);
				abbrWidth = Math.max(this.stringWidth(label.text, true), abbrWidth);
				if (item.kind) kindWidth = Math.max(this.stringWidth(getKindText(item.kind, kindMap, defaultKindText), true), kindWidth);
				if (item.menu) menuWidth = Math.max(this.stringWidth(item.menu, true), menuWidth);
				if (item.shortcut) shortcutWidth = Math.max(this.stringWidth(item.shortcut, true) + 2, shortcutWidth);
			}
			if (selectedIndex !== -1 && search.length > 0) {
				let item = items[selectedIndex];
				if (!item.word.startsWith(search) && !item.filterText.startsWith(search)) selectedIndex = -1;
			}
			if (!noselect) selectedIndex = selectedIndex == -1 ? 0 : selectedIndex;
			else {
				if (selectedIndex > 0) {
					let [item] = items.splice(selectedIndex, 1);
					items.unshift(item);
					let [label] = labels.splice(selectedIndex, 1);
					labels.unshift(label);
				}
				selectedIndex = -1;
			}
			let opt = {
				input: search,
				index: selectedIndex,
				bufnr: option.bufnr,
				line: option.linenr,
				col: option.col,
				startcol: byteIndex(option.line, minCharacter),
				virtualText,
				words: items.map((o) => {
					let character = o.character;
					let start = Math.max(1, option.position.character - character + 1);
					return prefixWord(getInsertWord(o.word, invalidInsertCodes, start), character, option.line, minCharacter);
				})
			};
			let pumConfig = this.pumConfig;
			let lines = [];
			let highlights = [];
			let width = 0;
			let buildConfig = {
				border: !!pumConfig.border,
				menuWidth,
				abbrWidth,
				kindWidth,
				shortcutWidth
			};
			this.adjustAbbrWidth(buildConfig);
			let lowInput = search.toLowerCase();
			for (let index = 0; index < items.length; index++) {
				let [displayWidth, text] = this.buildItem(search, lowInput, items[index], labels[index], highlights, index, buildConfig);
				width = Math.max(width, displayWidth);
				lines.push(text);
			}
			let config = Object.assign({
				width,
				highlights
			}, pumConfig);
			this.nvim.call("coc#pum#create", [
				lines,
				opt,
				config
			], true);
			this.nvim.redrawVim();
		}
		getLabel(item) {
			let { labelDetails, detail } = item;
			let { snippetIndicator, labelMaxLength, detailField, detailMaxLength } = this.config;
			let label = item.abbr;
			let hls = [];
			if (item.isSnippet && !label.endsWith(snippetIndicator)) label = label + snippetIndicator;
			if (detailField === "abbr" && detail && !labelDetails && detail.length < detailMaxLength) labelDetails = { detail: " " + detail.replace(/\r?\n\s*/g, " ") };
			if (labelDetails) {
				let added = (labelDetails.detail ?? "") + (labelDetails.description ? ` ${labelDetails.description}` : "");
				if (label.length + added.length <= labelMaxLength) {
					let start = byteLength(label);
					hls.push({
						start,
						end: start + byteLength(added),
						hlGroup: "CocPumDetail"
					});
					label = label + added;
					item.detailRendered = true;
				}
			}
			if (label.length > labelMaxLength) label = label.slice(0, labelMaxLength - 1) + ".";
			return {
				text: label,
				highlights: hls
			};
		}
		adjustAbbrWidth(config) {
			let { formatItems } = this.config;
			let pumwidth = toNumber(workspace_default.env.pumwidth, 15);
			let len = 0;
			for (const item of formatItems) if (item == "abbr") len += config.abbrWidth + 1;
			else if (item == "menu" && config.menuWidth) len += config.menuWidth + 1;
			else if (item == "kind" && config.kindWidth) len += config.kindWidth + 1;
			else if (item == "shortcut" && config.shortcutWidth) len += config.shortcutWidth + 1;
			if (len < pumwidth) config.abbrWidth = config.abbrWidth + pumwidth - len;
		}
		buildItem(input, lowInput, item, label, hls, index, config) {
			let { labelMaxLength, formatItems, kindMap, defaultKindText } = this.config;
			let text = config.border ? "" : " ";
			let len = byteLength(text);
			let displayWidth = text.length;
			let append = (str, width) => {
				let s = this.fillWidth(str, width);
				displayWidth += width;
				len += byteLength(s);
				text += s;
			};
			for (const name of formatItems) switch (name) {
				case "abbr": {
					if (!isFalsyOrEmpty(item.positions)) {
						let pre = highlightOffset(len, item);
						if (pre != -1) positionHighlights(hls, item.filterText, item.positions, pre, index, labelMaxLength);
						else {
							let score = anyScore(input, lowInput, 0, item.abbr, item.abbr.toLowerCase(), 0);
							positionHighlights(hls, item.abbr, score, len, index, labelMaxLength);
						}
					}
					let abbr = label.text;
					let start = len;
					append(abbr, config.abbrWidth + 1);
					label.highlights.forEach((hl) => {
						hls.push({
							hlGroup: hl.hlGroup,
							lnum: index,
							colStart: start + hl.start,
							colEnd: start + hl.end
						});
					});
					if (item.deprecated) hls.push({
						hlGroup: "CocPumDeprecated",
						lnum: index,
						colStart: start,
						colEnd: len - 1
					});
					break;
				}
				case "menu":
					if (config.menuWidth > 0) {
						let colStart = len;
						append(toText(item.menu), config.menuWidth + 1);
						if (item.menu) hls.push({
							hlGroup: "CocPumMenu",
							lnum: index,
							colStart,
							colEnd: colStart + byteLength(item.menu)
						});
					}
					break;
				case "kind":
					if (config.kindWidth > 0) {
						let { kind } = item;
						let kindText = getKindText(kind, kindMap, defaultKindText);
						let colStart = len;
						append(toText(kindText), config.kindWidth + 1);
						if (kindText) hls.push({
							hlGroup: getKindHighlight(kind),
							lnum: index,
							colStart,
							colEnd: colStart + byteLength(kindText)
						});
					}
					break;
				case "shortcut":
					if (config.shortcutWidth > 0) {
						let colStart = len;
						let shortcut = item.shortcut;
						append(shortcut ? `[${shortcut}]` : "", config.shortcutWidth + 1);
						if (shortcut) hls.push({
							hlGroup: "CocPumShortcut",
							lnum: index,
							colStart,
							colEnd: colStart + byteLength(shortcut) + 2
						});
					}
					break;
			}
			return [displayWidth, text];
		}
		fillWidth(text, width) {
			let n = width - this.stringWidth(text);
			return text + " ".repeat(Math.max(n, 0));
		}
	};
}));
//#endregion
//#region src/completion/index.ts
var logger$11, TRIGGER_TIMEOUT, CURSORMOVE_DEBOUNCE, Completion, completion_default;
var init_completion = __esmMin((() => {
	init_main$2();
	init_esm();
	init_commands$2();
	init_events();
	init_logger$2();
	init_util$7();
	init_array();
	init_errors();
	init_is();
	init_node();
	init_numbers();
	init_object();
	init_string$1();
	init_window();
	init_workspace$1();
	init_complete();
	init_floating();
	init_pum();
	init_sources();
	init_util$3();
	logger$11 = createLogger$1("completion");
	TRIGGER_TIMEOUT = getConditionValue(200, 20);
	CURSORMOVE_DEBOUNCE = getConditionValue(20, 20);
	Completion = class {
		config;
		staticConfig;
		pum;
		_mru;
		pretext;
		triggerTimer;
		popupEvent;
		floating;
		disposables = [];
		complete = null;
		_debounced;
		activeItems = [];
		get nvim() {
			return workspace_default.nvim;
		}
		init() {
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			window_default.onDidChangeActiveTextEditor((e) => {
				this.loadLocalConfig(e.document);
			}, null, this.disposables);
			this._mru = new MruLoader();
			this.pum = new PopupMenu(this.staticConfig, this._mru);
			this.floating = new Floating(this.staticConfig);
			this._debounced = debounce(this.onCursorMovedI.bind(this), CURSORMOVE_DEBOUNCE);
			events_default.on("BufEnter", () => {
				this._debounced.clear();
			}, null, this.disposables);
			events_default.on(["CursorMoved", "InsertLeave"], () => {
				this.cancelAndClose();
			}, null, this.disposables);
			events_default.on("PumNavigate", () => {
				this.complete?.cancel();
			}, null, this.disposables);
			events_default.on("CursorMovedI", this._debounced, this, this.disposables);
			events_default.on("CursorMovedI", () => {
				clearTimeout(this.triggerTimer);
			}, null, this.disposables);
			events_default.on("InsertEnter", this.onInsertEnter, this, this.disposables);
			events_default.on("TextChangedI", this.onTextChangedI, this, this.disposables);
			events_default.on("MenuPopupChanged", async (ev) => {
				if (this.complete == null) return;
				this.popupEvent = ev;
				if (ev.inserted) this.complete.cancel();
				let selectedItem = this.activeItems[ev.index];
				let resolved = this.complete.resolveItem(selectedItem);
				if (!resolved || !ev.move && this.complete.isCompleting) return;
				let detailRendered = selectedItem.detailRendered;
				let showDocs = this.config.enableFloat;
				await this.floating.resolveItem(resolved.source, resolved.item, this.option, showDocs, detailRendered);
			}, null, this.disposables);
			this.nvim.call("coc#ui#check_pum_keymappings", [this.config.autoTrigger], true);
			commands_default.registerCommand("editor.action.triggerSuggest", async (source) => {
				await this.startCompletion({ source });
			}, this, true);
		}
		get mru() {
			return this._mru;
		}
		onCursorMovedI(bufnr, cursor, hasInsert) {
			if (hasInsert || !this.option || bufnr !== this.option.bufnr) return;
			let { linenr, col } = this.option;
			if (this.selectedItem && linenr === cursor[0] && col + byteLength(this.selectedItem.word) + 1 == cursor[1]) return;
			if (linenr === cursor[0] && cursor[1] === byteLength(toText(this.pretext)) + 1) return;
			this.cancelAndClose();
		}
		get option() {
			if (!this.complete) return null;
			return this.complete.option;
		}
		get isActivated() {
			return this.complete != null;
		}
		get selectedItem() {
			if (!this.popupEvent) return void 0;
			return this.activeItems[this.popupEvent.index];
		}
		get selectedCompletionInfo() {
			let item = this.selectedItem;
			let { pretext } = this;
			if (!pretext || !item) return void 0;
			let line = this.option.linenr - 1;
			let end = pretext.length;
			return {
				range: Range.create(line, item.character, line, end),
				text: item.word
			};
		}
		/**
		* Configuration for current document
		*/
		loadLocalConfig(doc) {
			let suggest = workspace_default.getConfiguration("suggest", doc);
			this.config = {
				autoTrigger: suggest.get("autoTrigger", "always"),
				insertMode: suggest.get("insertMode", "replace"),
				filterGraceful: suggest.get("filterGraceful", true),
				enableFloat: suggest.get("enableFloat", true),
				languageSourcePriority: suggest.get("languageSourcePriority", 99),
				snippetsSupport: suggest.get("snippetsSupport", true),
				defaultSortMethod: suggest.get("defaultSortMethod", "length"),
				removeDuplicateItems: suggest.get("removeDuplicateItems", false),
				removeCurrentWord: suggest.get("removeCurrentWord", false),
				acceptSuggestionOnCommitCharacter: suggest.get("acceptSuggestionOnCommitCharacter", false),
				triggerCompletionWait: suggest.get("triggerCompletionWait", 0),
				triggerAfterInsertEnter: suggest.get("triggerAfterInsertEnter", false),
				maxItemCount: suggest.get("maxCompleteItemCount", 256),
				timeout: suggest.get("timeout", 500),
				minTriggerInputLength: suggest.get("minTriggerInputLength", 1),
				localityBonus: suggest.get("localityBonus", true),
				highPrioritySourceLimit: suggest.get("highPrioritySourceLimit", null),
				lowPrioritySourceLimit: suggest.get("lowPrioritySourceLimit", null),
				ignoreRegexps: suggest.get("ignoreRegexps", []),
				asciiMatch: suggest.get("asciiMatch", true),
				asciiCharactersOnly: suggest.get("asciiCharactersOnly", false)
			};
		}
		loadConfiguration(e) {
			if (e && !e.affectsConfiguration("suggest")) return;
			if (e) this.pum.reset();
			let suggest = workspace_default.initialConfiguration.get("suggest");
			let labels = defaultValue(suggest.completionItemKindLabels, {});
			this.staticConfig = Object.assign(this.staticConfig ?? {}, {
				kindMap: createKindMap(labels),
				defaultKindText: toText(labels["default"]),
				detailField: suggest.detailField,
				detailMaxLength: toNumber(suggest.detailMaxLength, 100),
				invalidInsertCharacters: toArray(suggest.invalidInsertCharacters),
				formatItems: suggest.formatItems,
				filterOnBackspace: suggest.filterOnBackspace,
				floatConfig: toObject(suggest.floatConfig),
				pumFloatConfig: suggest.pumFloatConfig,
				labelMaxLength: suggest.labelMaxLength,
				reTriggerAfterIndent: !!suggest.reTriggerAfterIndent,
				reversePumAboveCursor: !!suggest.reversePumAboveCursor,
				snippetIndicator: toText(suggest.snippetIndicator),
				noselect: !!suggest.noselect,
				enablePreselect: !!suggest.enablePreselect,
				virtualText: !!suggest.virtualText,
				selection: suggest.selection
			});
			let doc = workspace_default.getDocument(workspace_default.bufnr);
			this.loadLocalConfig(doc);
		}
		async startCompletion(opt) {
			clearTimeout(this.triggerTimer);
			let sourceList;
			if (string(opt.source)) sourceList = toArray(sources_default.getSource(opt.source));
			let doc = workspace_default.getAttachedDocument(events_default.bufnr);
			let info = await this.nvim.call("coc#util#change_info");
			info.pre = byteSlice(info.line, 0, info.col - 1);
			const option = this.getCompleteOption(doc, info, true, opt.col);
			await this._startCompletion(option, sourceList);
		}
		async _startCompletion(option, sourceList) {
			this._debounced.clear();
			let doc = workspace_default.getAttachedDocument(option.bufnr);
			option.filetype = doc.filetype;
			logger$11.debug("trigger completion with", option);
			this.cancelAndClose();
			sourceList = sourceList ?? sources_default.getSources(option);
			if (isFalsyOrEmpty(sourceList)) return;
			this.pretext = byteSlice(option.line, 0, option.colnr - 1);
			let complete = this.complete = new Complete(option, doc, this.config, sourceList);
			events_default.completing = true;
			events_default.fire("CompleteStart", [option]);
			complete.onDidRefresh(async () => {
				clearTimeout(this.triggerTimer);
				if (complete.isEmpty) {
					this.cancelAndClose();
					return;
				}
				await this.filterResults();
			});
			if (await complete.doComplete()) this.cancelAndClose(false);
		}
		hasIndentChange(info) {
			let { option, pretext } = this;
			if (!option || option.linenr != info.lnum) return false;
			let previous = pretext.match(/^\s*/)[0];
			let current = info.pre.match(/^\s*/)[0];
			if (previous == current || pretext.slice(previous.length) !== info.pre.slice(current.length)) return false;
			return true;
		}
		async onTextChangedI(bufnr, info) {
			const doc = workspace_default.getDocument(bufnr);
			if (!doc || !doc.attached) return;
			this._debounced.clear();
			const { option, staticConfig } = this;
			const filterOnBackspace = this.staticConfig.filterOnBackspace;
			if (option != null) {
				if (!info.insertChar) {
					let pre = byteSlice(option.line, 0, option.col);
					if (this.selectedItem) {
						let { word, startcol } = this.popupEvent;
						if (byteSlice(option.line, 0, startcol) + word == info.pre) {
							this.pretext = info.pre;
							return;
						}
					} else if (pre + this.pum.search == info.pre) {
						this.pretext = info.pre;
						return;
					}
				}
				if (staticConfig.reTriggerAfterIndent && this.hasIndentChange(info)) {
					this.cancelAndClose();
					await this.triggerCompletion(doc, info);
					return;
				}
				if (shouldStop(bufnr, info, option) || filterOnBackspace === false && info.pre.length < this.pretext.length) {
					this.cancelAndClose();
					return;
				}
			}
			if (info.pre === this.pretext) return;
			clearTimeout(this.triggerTimer);
			let pretext = this.pretext = info.pre;
			if (!info.insertChar) {
				if (this.complete) await this.filterResults();
				return;
			}
			if (this.config.acceptSuggestionOnCommitCharacter && this.selectedItem) {
				let last = pretext.slice(-1);
				let resolvedItem = this.selectedItem;
				let result = this.complete.resolveItem(resolvedItem);
				if (result && sources_default.shouldCommit(result.source, result.item, last)) {
					logger$11.debug(`commit by commit character: ${last}`);
					let startcol = byteIndex(this.option.line, resolvedItem.character) + 1;
					let delta = deltaCount(info);
					await this.nvim.call("coc#pum#replace", [
						startcol,
						resolvedItem.word,
						delta
					]);
					await this.stop("confirm", true);
					let res = await this.nvim.evalVim(`[getline('.'),col('.'),mode()]`);
					let currentPre = byteSlice(res[0], 0, res[1] - 1);
					if (res[2] != "i" || currentPre[currentPre.length - 1] == last) return;
					if (pariedCharacters.has(last) && currentPre.slice(-2) == `${last}${pariedCharacters.get(last)}`) return;
					this.nvim.call("feedkeys", [last, "n"], true);
					return;
				}
			}
			if (!doc.chars.isKeywordChar(info.insertChar)) {
				let triggerSources = this.getTriggerSources(doc, pretext);
				if (triggerSources.length > 0) {
					await this.triggerCompletion(doc, info, triggerSources);
					return;
				}
			}
			if (!this.complete) {
				await this.triggerCompletion(doc, info);
				return;
			}
			if (this.complete.isEmpty) {
				this.triggerTimer = setTimeout(async () => {
					await this.triggerCompletion(doc, info);
				}, TRIGGER_TIMEOUT);
				return;
			}
			await this.filterResults(info);
		}
		getTriggerSources(doc, pretext) {
			let disabled = doc.getVar("disabled_sources", []);
			if (this.config.autoTrigger === "none") return [];
			return sources_default.getTriggerSources(pretext, doc.filetype, doc.uri, disabled);
		}
		async triggerCompletion(doc, info, sources) {
			let { minTriggerInputLength, autoTrigger } = this.config;
			let { pre } = info;
			if (autoTrigger === "none") return false;
			if (!sources && !this.shouldTrigger(doc, pre)) return false;
			const option = this.getCompleteOption(doc, info);
			if (sources == null && option.input.length < minTriggerInputLength) {
				logger$11.trace(`Suggest not triggered with input "${option.input}", minimal trigger input length: ${minTriggerInputLength}`);
				return false;
			}
			if (checkIgnoreRegexps(this.config.ignoreRegexps, option.input)) return false;
			await this._startCompletion(option, sources);
			return true;
		}
		getCompleteOption(doc, info, manual = false, col) {
			let { pre } = info;
			let input;
			if (number(col)) input = byteSlice(info.line, col - 1, info.col - 1);
			else input = getInput(doc.chars, info.pre, this.config.asciiCharactersOnly);
			let followWord = doc.getStartWord(info.line.slice(info.pre.length));
			return {
				input,
				position: Position.create(info.lnum - 1, info.pre.length),
				line: info.line,
				followWord,
				filetype: doc.filetype,
				linenr: info.lnum,
				col: info.col - 1 - byteLength(input),
				colnr: info.col,
				bufnr: doc.bufnr,
				word: input + followWord,
				changedtick: info.changedtick,
				synname: "",
				filepath: doc.schema === "file" ? URI.parse(doc.uri).fsPath : "",
				triggerCharacter: manual ? void 0 : toText(pre[pre.length - 1])
			};
		}
		addMruItem() {
			let { selectedItem, complete } = this;
			if (!selectedItem) return;
			let character = selectedItem.character;
			this._mru.add(complete.getTrigger(character), selectedItem);
		}
		cancelAndClose(close = true) {
			clearTimeout(this.triggerTimer);
			if (!this.complete) return;
			const { linenr, bufnr } = this.complete.option;
			this._onFinish("", close);
			events_default.fire("CompleteDone", [
				{},
				linenr,
				bufnr
			]).catch(onUnexpectedError);
		}
		_onFinish(kind, close) {
			this.floating.cancel();
			if (kind === "confirm" || this.popupEvent?.inserted) this.addMruItem();
			let doc = this.complete.document;
			events_default.completing = false;
			this.cancel();
			doc._forceSync();
			if (close) this.nvim.call("coc#pum#_close", [], true);
		}
		async stop(kind, close = false) {
			let { complete } = this;
			if (complete == null) return;
			const item = this.selectedItem;
			const resolved = complete.resolveItem(item);
			const option = complete.option;
			this._onFinish(kind, close);
			if (resolved && kind == "confirm") await this.confirmCompletion(resolved.source, resolved.item, option);
			events_default.fire("CompleteDone", [
				toCompleteDoneItem(item, resolved?.item),
				option.linenr,
				option.bufnr
			]).catch(onUnexpectedError);
		}
		async confirmCompletion(source, item, option) {
			await this.floating.resolveItem(source, item, option, false);
			if (!func(source.onCompleteDone)) return;
			let { insertMode, snippetsSupport } = this.config;
			let opt = Object.assign({
				insertMode,
				snippetsSupport
			}, option);
			await Promise.resolve(source.onCompleteDone(item, opt));
		}
		async onInsertEnter(bufnr) {
			if (!this.config.triggerAfterInsertEnter || this.config.autoTrigger !== "always") return;
			let doc = workspace_default.getDocument(bufnr);
			if (!doc || !doc.attached) return;
			let change = await this.nvim.call("coc#util#change_info");
			change.pre = byteSlice(change.line, 0, change.col - 1);
			await this.triggerCompletion(doc, change);
		}
		shouldTrigger(doc, pre) {
			let { autoTrigger } = this.config;
			if (autoTrigger == "none") return false;
			if (sources_default.shouldTrigger(pre, doc.filetype, doc.uri)) return true;
			if (autoTrigger !== "always") return false;
			return true;
		}
		async filterResults(info) {
			let { complete, option, pretext } = this;
			let search = getResumeInput(option, pretext);
			if (search == null || !complete) {
				this.cancelAndClose();
				return;
			}
			let items = await complete.filterResults(search);
			if (items === void 0 || !this.option) return;
			let doc = workspace_default.getDocument(option.bufnr);
			if (info && info.insertChar && items.length == 0) {
				let triggerSources = this.getTriggerSources(doc, pretext);
				if (triggerSources.length > 0) {
					await this.triggerCompletion(doc, info, triggerSources);
					return;
				}
			}
			if (items.length == 0) {
				let last = search.slice(-1);
				if (!complete.isCompleting || last.length === 0 || !doc.chars.isKeywordChar(last)) this.cancelAndClose();
				return;
			}
			this.activeItems = items;
			this.pum.show(items, search, this.option);
		}
		cancel() {
			if (this.complete != null) {
				this.complete.dispose();
				this.complete = null;
			}
			if (this.triggerTimer != null) {
				clearTimeout(this.triggerTimer);
				this.triggerTimer = null;
			}
			this.pretext = void 0;
			this.activeItems = [];
			this.popupEvent = void 0;
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
	completion_default = new Completion();
}));
//#endregion
//#region src/cursors/util.ts
/**
* Split to single line ranges
*/
function splitRange(doc, range) {
	let splited = [];
	for (let i = range.start.line; i <= range.end.line; i++) {
		let curr = toText(doc.getline(i));
		let sc = i == range.start.line ? range.start.character : 0;
		let ec = i == range.end.line ? range.end.character : curr.length;
		if (sc == ec) continue;
		splited.push(Range.create(i, sc, i, ec));
	}
	return splited;
}
/**
* Get ranges of visual block
*/
function getVisualRanges(doc, range) {
	let { start, end } = getWellformedRange(range);
	let sc = start.character < end.character ? start.character : end.character;
	let ec = start.character < end.character ? end.character : start.character;
	let ranges = [];
	for (let i = start.line; i <= end.line; i++) {
		let line = doc.getline(i);
		ranges.push(Range.create(i, sc, i, Math.min(line.length, ec)));
	}
	return ranges;
}
function isSurroundChange(change) {
	return Array.isArray(change["prepend"]) && Array.isArray(change["append"]);
}
function getDelta(change) {
	if (isSurroundChange(change)) return change.append[1].length + change.prepend[1].length - change.append[0] - change.prepend[0];
	return change.insert.length - change.remove;
}
function getChange(r, range, newText) {
	let text = r.text;
	if (equals(r.range, range)) {
		let idx = text.indexOf(newText);
		if (idx !== -1) {
			let prepend = [idx, ""];
			let n = text.length - newText.length - idx;
			return {
				prepend,
				append: [n, ""],
				remove: r.text.length === n
			};
		}
		idx = newText.indexOf(text);
		if (idx !== -1) return {
			prepend: [0, newText.slice(0, idx)],
			append: [0, newText.slice(-(newText.length - text.length - idx))],
			remove: false
		};
	}
	if (equals(r.range.end, range.end)) {
		let remove = range.end.character - range.start.character;
		return {
			offset: remove,
			remove,
			insert: newText,
			fromEnd: true
		};
	}
	let remove = range.end.character - range.start.character;
	return {
		offset: range.start.character - r.range.start.character,
		remove,
		insert: newText
	};
}
function getBeforeCount(textRange, ranges, exclude) {
	let n = 0;
	for (let idx = 0; idx < ranges.length; idx++) {
		const r = ranges[idx];
		if (r.position.line < textRange.position.line || r === exclude) continue;
		if (r.isBefore(textRange)) {
			n++;
			continue;
		}
		break;
	}
	return n;
}
var init_util$2 = __esmMin((() => {
	init_main$2();
	init_object();
	init_string$1();
	init_textedit();
}));
//#endregion
//#region src/cursors/textRange.ts
var TextRange;
var init_textRange = __esmMin((() => {
	init_main$2();
	init_position();
	init_textedit();
	init_util$2();
	TextRange = class {
		start;
		end;
		_text;
		constructor(line, character, text) {
			this.start = Position.create(line, character);
			this._text = text;
			this.end = getEnd(this.start, this._text);
		}
		get position() {
			return this.start;
		}
		get line() {
			return this.start.line;
		}
		get text() {
			return this._text;
		}
		get range() {
			return Range.create(this.start, this.end);
		}
		get textEdit() {
			return {
				range: this.range,
				newText: this.text
			};
		}
		applyChange(change) {
			if (isSurroundChange(change)) this.applySurroundChange(change);
			else this.applyTextChange(change);
		}
		applySurroundChange(change) {
			let { prepend, append, remove } = change;
			if (remove) this._text = "";
			else {
				let len = this._text.length;
				let text = this._text.substring(prepend[0], len - append[0]);
				this._text = `${prepend[1]}${text}${append[1]}`;
			}
		}
		applyTextChange(change) {
			let { text } = this;
			let { offset, remove, fromEnd, insert } = change;
			if (fromEnd) offset = -offset;
			let pre = text.slice(0, fromEnd && offset == 0 ? text.length : offset);
			let after = text.slice(pre.length);
			if (remove) after = after.slice(remove);
			this._text = `${pre}${insert || ""}${after}`;
		}
		/**
		* Adjust range
		*/
		move(delta) {
			if (delta != 0) {
				let { line, character } = this.start;
				this.start = Position.create(line, character + delta);
			}
			this.end = getEnd(this.start, this._text);
		}
		adjustFromEdit(edit) {
			let changed = getChangedPosition(this.start, edit);
			if (changed.line || changed.character) {
				let { line, character } = this.start;
				this.start = Position.create(line + changed.line, character + changed.character);
				this.end = getEnd(this.start, this._text);
			}
			return changed.character;
		}
		isBefore(range) {
			let { position } = range;
			let { line, character } = this.start;
			return position.line == line && position.character > character;
		}
	};
}));
//#endregion
//#region src/cursors/session.ts
function surroundChanges(changes, len) {
	if (changes.length != 2 || changes[0].offset != 0) return false;
	if (changes[1].offset + (changes[1].remove ? changes[1].remove.length : 0) !== len) return false;
	return true;
}
var logger$10, CursorSession;
var init_session = __esmMin((() => {
	init_main();
	init_main$2();
	init_logger$2();
	init_util$7();
	init_node();
	init_position();
	init_protocol();
	init_textedit();
	init_window();
	init_workspace$1();
	init_textRange();
	init_util$2();
	logger$10 = createLogger$1("cursors-session");
	CursorSession = class {
		nvim;
		doc;
		config;
		_onDidCancel = new import_main$1.Emitter();
		_onDidUpdate = new import_main$1.Emitter();
		onDidCancel = this._onDidCancel.event;
		onDidUpdate = this._onDidUpdate.event;
		disposables = [];
		ranges = [];
		activated = true;
		changing = false;
		constructor(nvim, doc, config) {
			this.nvim = nvim;
			this.doc = doc;
			this.config = config;
			let { bufnr } = doc;
			doc.buffer.setVar("coc_cursors_activated", 1, true);
			let { cancelKey, nextKey, previousKey } = this.config;
			this.disposables.push(workspace_default.registerLocalKeymap(bufnr, "n", cancelKey, () => {
				this.cancel();
			}));
			this.disposables.push(workspace_default.registerLocalKeymap(bufnr, "n", nextKey, async () => {
				let ranges = this.ranges.map((o) => o.range);
				let curr = await window_default.getCursorPosition();
				for (let r of ranges) if (comparePosition(r.start, curr) > 0) {
					await window_default.moveTo(r.start);
					return;
				}
				let wrap = this.config.wrapscan;
				if (ranges.length && wrap) await window_default.moveTo(ranges[0].start);
			}));
			this.disposables.push(workspace_default.registerLocalKeymap(bufnr, "n", previousKey, async () => {
				let ranges = this.ranges.map((o) => o.range);
				let curr = await window_default.getCursorPosition();
				for (let i = ranges.length - 1; i >= 0; i--) {
					let r = ranges[i];
					if (comparePosition(r.end, curr) < 0) {
						await window_default.moveTo(r.start);
						return;
					}
				}
				let wrap = this.config.wrapscan;
				if (ranges.length && wrap) await window_default.moveTo(ranges[ranges.length - 1].start);
			}));
			this.doc.onDocumentChange(async (e) => {
				await this.onChange(e);
				if (this.activated && !this.changing) this._onDidUpdate.fire();
			}, this, this.disposables);
		}
		checkRanges() {
			if (this.ranges.length == 0) this.cancel();
		}
		/**
		* Add or remove range.
		*/
		addRange(range) {
			let { ranges } = this;
			let idx = ranges.findIndex((o) => rangeIntersect(o.range, range));
			if (idx !== -1) ranges.splice(idx, 1);
			else {
				this.createRange(range);
				ranges.sort((a, b) => comparePosition(a.range.start, b.range.start));
			}
			if (this.ranges.length == 0) this.cancel();
			else this.doHighlights();
		}
		addRanges(ranges) {
			this.doc._forceSync();
			this.ranges = this.ranges.filter((r) => {
				return !ranges.some((range) => rangeOverlap(range, r.range));
			});
			for (let range of ranges) this.createRange(range);
			this.ranges.sort((a, b) => comparePosition(a.range.start, b.range.start));
			this.doHighlights();
			return true;
		}
		createRange(range) {
			let { textDocument } = this.doc;
			let { line, character } = range.start;
			let text = textDocument.getText(range);
			this.ranges.push(new TextRange(line, character, text));
		}
		async onChange(e) {
			if (!this.activated || this.changing) return;
			if (e.contentChanges.length === 0) {
				this.doHighlights();
				return;
			}
			let { text, range } = e.contentChanges[0];
			let affected = this.ranges.filter((r) => {
				if (!rangeIntersect(range, r.range)) return false;
				if (rangeAdjacent(range, r.range)) {
					if (text.includes("\n") || !emptyRange(range)) return false;
				}
				return true;
			});
			if (emptyRange(range) && affected.length > 0) affected = affected.slice(0, 1);
			if (affected.length == 0) {
				logger$10.debug("no affected ranges");
				this.ranges.forEach((r) => {
					r.adjustFromEdit({
						range,
						newText: text
					});
				});
				this.doHighlights();
			} else if (affected.length == 1 && rangeInRange(range, affected[0].range)) {
				logger$10.debug("affected single range");
				if (text.includes("\n")) {
					this.cancel();
					return;
				}
				await this.applySingleEdit(affected[0], {
					range,
					newText: text
				});
			} else if (!text.length || !this.validChange(range, text)) {
				logger$10.debug("filter affected ranges.");
				let ranges = this.ranges.filter((r) => !affected.includes(r));
				if (ranges.length > 0) {
					this.ranges = ranges;
					ranges.forEach((r) => {
						r.adjustFromEdit({
							range,
							newText: text
						});
					});
					this.doHighlights();
				} else this.cancel();
			} else {
				logger$10.debug("Check undo & redo");
				let first = this.ranges[0];
				let last = this.ranges[this.ranges.length - 1];
				let originalLines = e.originalLines.slice(first.line, last.line + 1);
				let newLines = this.doc.textDocument.lines.slice(first.line, last.line + 1);
				this.applyComposedEdit(originalLines, newLines);
			}
		}
		validChange(range, text) {
			if (lineCountChange(TextEdit.replace(range, text)) != 0) return false;
			if (!rangeInRange(range, this.range)) return false;
			let first = this.ranges[0];
			let last = this.ranges[this.ranges.length - 1];
			if (range.start.line != first.position.line || range.end.line != last.position.line) return false;
			return true;
		}
		get range() {
			let first = this.ranges[0];
			let last = this.ranges[this.ranges.length - 1];
			return Range.create(first.position, last.range.end);
		}
		doHighlights() {
			let { nvim, ranges, doc } = this;
			let buffer = doc.buffer;
			let items = [];
			ranges.forEach((r) => {
				doc.addHighlights(items, "CocCursorRange", r.range, {
					combine: false,
					start_incl: true,
					end_incl: true
				});
			});
			items.sort((a, b) => {
				if (a.lnum != b.lnum) return a.lnum - b.lnum;
				return a.colStart - b.colStart;
			});
			buffer.updateHighlights("cursors", items, { priority: 4096 });
			nvim.redrawVim();
		}
		get currentRanges() {
			return this.ranges.map((r) => r.range);
		}
		/**
		* Cancel session and highlights
		*/
		cancel() {
			if (!this.activated) return;
			logger$10.debug("cursors cancel");
			let buffer = this.doc.buffer;
			this.activated = false;
			this.ranges = [];
			buffer.clearNamespace("cursors");
			buffer.setVar("coc_cursors_activated", 0, true);
			this._onDidUpdate.fire();
			this._onDidCancel.fire();
		}
		/**
		* Called on buffer unload or cancel
		*/
		dispose() {
			if (!this.doc) return;
			this._onDidCancel.dispose();
			this._onDidUpdate.dispose();
			disposeAll(this.disposables);
			this.ranges = [];
			this.doc = null;
		}
		async applySingleEdit(textRange, edit) {
			let { doc, ranges } = this;
			ranges.filter((r) => r !== textRange && r.position.line == textRange.position.line).forEach((r) => r.adjustFromEdit(edit));
			let change = getChange(textRange, edit.range, edit.newText);
			let delta = getDelta(change);
			ranges.forEach((r) => r.applyChange(change));
			let edits = ranges.filter((r) => r !== textRange).map((o) => o.textEdit);
			this.changing = true;
			await doc.applyEdits(edits, true, true);
			this.changing = false;
			if (delta != 0) for (let r of ranges) {
				let n = getBeforeCount(r, this.ranges, textRange);
				r.move(n * delta);
			}
			this.doHighlights();
		}
		applyComposedEdit(originalLines, newLines) {
			let diffs = fastDiff(originalLines[0], newLines[0]);
			let first = this.ranges[0];
			let s = first.position.character;
			let firstLine = first.position.line;
			let len = first.text.length;
			let diff = diffs[0];
			if (s > 0 && (diff[0] != fastDiff.EQUAL || !diff[1].startsWith(originalLines[0].slice(0, s)))) {
				this.cancel();
				return false;
			}
			let used = 0;
			let invalid = false;
			let changes = [];
			for (let i = 0; i < diffs.length; i++) {
				let [kind, text] = diffs[i];
				if (i == 0 && s > 0) text = text.slice(s);
				if (kind == fastDiff.EQUAL) {
					used += text.length;
					if (used > len) break;
				} else if (kind == fastDiff.DELETE) {
					let offset = used;
					used += text.length;
					if (used > len) {
						invalid = true;
						break;
					}
					changes.push({
						offset,
						remove: text
					});
				} else {
					let prev = diffs[i - 1];
					if (prev && prev[0] == fastDiff.DELETE) changes[changes.length - 1].add = text;
					else changes.push({
						offset: used,
						add: text
					});
				}
			}
			if (invalid || !changes.length) {
				this.cancel();
				return false;
			}
			let doc = TextDocument.create("file:///1", "", 0, originalLines.join("\n"));
			let change;
			if (changes.length == 1) change = {
				offset: changes[0].offset,
				remove: changes[0].remove ? changes[0].remove.length : 0,
				insert: changes[0].add ?? ""
			};
			else if (surroundChanges(changes, len)) change = {
				prepend: [changes[0].remove ? changes[0].remove.length : 0, changes[0].add ?? ""],
				append: [changes[1].remove ? changes[1].remove.length : 0, changes[1].add ?? ""],
				remove: false
			};
			else {
				let text = first.text;
				let oldText = "";
				let newText = "";
				let offset = changes[0].offset;
				for (let c of changes) {
					if (c.offset > offset + oldText.length) {
						let s = text.slice(offset + oldText.length, c.offset);
						oldText += s;
						newText += s;
					}
					if (c.add) newText += c.add;
					if (c.remove) oldText += c.remove;
				}
				change = {
					offset,
					remove: oldText.length,
					insert: newText
				};
			}
			let edits = this.ranges.map((o) => {
				let line = o.position.line - firstLine;
				let { start, end } = o.range;
				let range = Range.create(line, start.character, line, end.character);
				o.applyChange(change);
				return TextEdit.replace(range, o.text);
			});
			if (TextDocument.applyEdits(doc, edits) !== newLines.join("\n")) {
				this.cancel();
				return false;
			}
			let delta = getDelta(change);
			if (delta != 0) for (let r of this.ranges) {
				let n = getBeforeCount(r, this.ranges);
				r.move(n * delta);
			}
			this.doHighlights();
			return true;
		}
	};
}));
//#endregion
//#region src/cursors/index.ts
var Cursors;
var init_cursors = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_window();
	init_workspace$1();
	init_session();
	init_util$2();
	Cursors = class {
		nvim;
		sessionsMap = /* @__PURE__ */ new Map();
		disposables = [];
		config;
		constructor(nvim) {
			this.nvim = nvim;
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			workspace_default.onDidCloseTextDocument((e) => {
				let session = this.getSession(e.bufnr);
				if (!session) return;
				this.sessionsMap.delete(e.bufnr);
				session.dispose();
			}, null, this.disposables);
			this.disposables.push(commands_default.registerCommand("editor.action.addRanges", async (ranges) => {
				await this.addRanges(ranges);
			}, null, true));
		}
		loadConfiguration(e) {
			if (!e || e.affectsConfiguration("cursors")) {
				let config = workspace_default.initialConfiguration;
				this.config = config.get("cursors");
			}
		}
		cancel(uri) {
			let doc = workspace_default.getDocument(uri);
			if (!doc) return;
			let session = this.getSession(doc.bufnr);
			if (session) session.cancel();
		}
		getSession(bufnr) {
			return this.sessionsMap.get(bufnr);
		}
		async isActivated() {
			let bufnr = await this.nvim.call("bufnr", ["%"]);
			return this.sessionsMap.get(bufnr) != null;
		}
		async select(bufnr, kind, mode) {
			let doc = workspace_default.getAttachedDocument(bufnr);
			let { nvim } = this;
			let session = this.createSession(doc);
			let range;
			if (kind == "operator") {
				let res = await nvim.eval(`[getpos("'["),getpos("']")]`);
				if (mode == "char") {
					let start = doc.getPosition(res[0][1], res[0][2]);
					let end = doc.getPosition(res[1][1], res[1][2] + 1);
					let ranges = splitRange(doc, Range.create(start, end));
					session.addRanges(ranges);
				} else {
					let ranges = [];
					for (let i = res[0][1] - 1; i <= res[1][1] - 1; i++) {
						let line = doc.getline(i);
						ranges.push(Range.create(i, 0, i, line.length));
					}
					session.addRanges(ranges);
				}
			} else if (kind == "word") {
				let pos = await window_default.getCursorPosition();
				range = doc.getWordRangeAtPosition(pos);
				if (!range) {
					let line = doc.getline(pos.line);
					if (pos.character == line.length) range = Range.create(pos.line, Math.max(0, line.length - 1), pos.line, line.length);
					else range = Range.create(pos.line, pos.character, pos.line, pos.character + 1);
				}
				session.addRange(range);
				await nvim.command(`silent! call repeat#set("\\<Plug>(coc-cursors-${kind})", -1)`);
			} else if (kind == "position") {
				let pos = await window_default.getCursorPosition();
				let line = doc.getline(pos.line);
				if (pos.character >= line.length) range = Range.create(pos.line, Math.max(0, line.length - 1), pos.line, line.length);
				else range = Range.create(pos.line, pos.character, pos.line, pos.character + 1);
				session.addRange(range);
				await nvim.command(`silent! call repeat#set("\\<Plug>(coc-cursors-${kind})", -1)`);
			} else if (kind == "range") {
				await nvim.call("eval", "feedkeys(\"\\<esc>\", \"in\")");
				let range = await window_default.getSelectedRange(mode);
				if (range) {
					let ranges = mode == "" ? getVisualRanges(doc, range) : splitRange(doc, range);
					for (let r of ranges) session.addRange(r);
				}
			} else throw new Error(`select kind "${kind}" not supported`);
			session.checkRanges();
		}
		createSession(doc) {
			let { bufnr } = doc;
			let session = this.getSession(bufnr);
			if (session) return session;
			session = new CursorSession(this.nvim, doc, this.config);
			this.sessionsMap.set(bufnr, session);
			session.onDidCancel(() => {
				session.dispose();
				this.sessionsMap.delete(bufnr);
			});
			return session;
		}
		async addRanges(ranges) {
			let { nvim } = this;
			let bufnr = await nvim.call("bufnr", ["%"]);
			let doc = workspace_default.getAttachedDocument(bufnr);
			return this.createSession(doc).addRanges(ranges);
		}
		reset() {
			for (let session of this.sessionsMap.values()) session.cancel();
			this.sessionsMap.clear();
		}
	};
}));
//#endregion
//#region src/tree/LocationsDataProvider.ts
function addChildren(el, children, token) {
	if (!Array.isArray(children) || token && token.isCancellationRequested) return;
	children.forEach((item) => item.parent = el);
	el.children = children;
}
var LocationsDataProvider;
var init_LocationsDataProvider = __esmMin((() => {
	init_main$2();
	init_esm();
	init_commands$2();
	init_node();
	init_protocol();
	init_workspace$1();
	init_TreeItem();
	LocationsDataProvider = class LocationsDataProvider {
		meta;
		winid;
		config;
		commandId;
		rootItems;
		getIcon;
		resolveChildren;
		_onDidChangeTreeData = new import_main$1.Emitter();
		onDidChangeTreeData = this._onDidChangeTreeData.event;
		tokenSource;
		actions = [];
		static rangesHighlight = "CocSelectedRange";
		constructor(meta, winid, config, commandId, rootItems, getIcon, resolveChildren) {
			this.meta = meta;
			this.winid = winid;
			this.config = config;
			this.commandId = commandId;
			this.rootItems = rootItems;
			this.getIcon = getIcon;
			this.resolveChildren = resolveChildren;
			this.addAction("Open in new tab", async (element) => {
				await commands_default.executeCommand(this.commandId, winid, element, "tabe");
			});
			this.addAction("Dismiss", async (element) => {
				if (element.parent == null) {
					let els = this.rootItems.filter((o) => o !== element);
					this.reset(els);
				} else {
					let parentElement = element.parent;
					let idx = parentElement.children.findIndex((o) => o === element);
					parentElement.children.splice(idx, 1);
					this._onDidChangeTreeData.fire(parentElement);
				}
			});
		}
		cancel() {
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = void 0;
			}
		}
		reset(rootItems) {
			this.rootItems = rootItems;
			this._onDidChangeTreeData.fire(void 0);
		}
		addAction(title, handler) {
			this.actions.push({
				title,
				handler
			});
		}
		async getChildren(element) {
			this.cancel();
			this.tokenSource = new import_main$1.CancellationTokenSource();
			let { token } = this.tokenSource;
			if (!element) {
				for (let o of this.rootItems) addChildren(o, await this.resolveChildren(o, this.meta, token), token);
				return this.rootItems;
			}
			if (element.children) return element.children;
			let items = await this.resolveChildren(element, this.meta, token);
			this.tokenSource = void 0;
			addChildren(element, items, token);
			return items;
		}
		getTreeItem(element) {
			let item = new TreeItem(element.name, element.children ? 2 : 1);
			if (this.config.enableTooltip) item.tooltip = path$5.relative(workspace_default.cwd, URI.parse(element.uri).fsPath);
			if (typeof element.detail === "string" && element.detail.length > 0 && element.name !== element.detail) item.description = element.detail;
			item.deprecated = element.tags?.includes(SymbolTag.Deprecated);
			item.icon = this.getIcon(element.kind);
			item.command = {
				command: this.commandId,
				title: "open location",
				arguments: [
					this.winid,
					element,
					this.config.openCommand
				]
			};
			return item;
		}
		resolveActions() {
			return this.actions;
		}
		dispose() {
			this.cancel();
			workspace_default.nvim.createWindow(this.winid).clearMatchGroup(LocationsDataProvider.rangesHighlight);
		}
	};
}));
//#endregion
//#region src/handler/callHierarchy.ts
/**
* Cleanup properties used by treeview
*/
function toCallHierarchyItem(item) {
	return omit$2(item, [
		"children",
		"parent",
		"ranges",
		"sourceUri"
	]);
}
function isCallHierarchyItem(item) {
	if (item && typeof item.name === "string" && item.kind && Range.is(item.range)) return true;
	return false;
}
function getTitle$1(kind) {
	return `${kind.toUpperCase()} CALLS`;
}
var HIGHLIGHT_GROUP, CallHierarchyHandler;
var init_callHierarchy = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_events();
	init_languages();
	init_LocationsDataProvider();
	init_TreeView();
	init_util$7();
	init_array();
	init_lodash();
	init_protocol();
	init_window();
	init_workspace$1();
	HIGHLIGHT_GROUP = "CocSelectedRange";
	CallHierarchyHandler = class CallHierarchyHandler {
		nvim;
		handler;
		config;
		disposables = [];
		static commandId = "callHierarchy.reveal";
		highlightWinids = /* @__PURE__ */ new Set();
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			this.disposables.push(commands_default.registerCommand(CallHierarchyHandler.commandId, async (winid, item, openCommand) => {
				let { nvim } = this;
				await nvim.call("win_gotoid", [winid]);
				await workspace_default.jumpTo(item.uri, item.selectionRange.start, openCommand);
				let win = await nvim.window;
				win.clearMatchGroup(HIGHLIGHT_GROUP);
				win.highlightRanges(HIGHLIGHT_GROUP, [item.selectionRange], 10, true);
				if (isFalsyOrEmpty(item.ranges)) return;
				if (item.sourceUri) {
					let doc = workspace_default.getDocument(item.sourceUri);
					if (!doc) return;
					let winid = await nvim.call("coc#compat#buf_win_id", [doc.bufnr]);
					if (winid == -1) return;
					if (winid != win.id) {
						win = nvim.createWindow(winid);
						win.clearMatchGroup(HIGHLIGHT_GROUP);
					}
				}
				win.highlightRanges(HIGHLIGHT_GROUP, item.ranges, 100, true);
				this.highlightWinids.add(win.id);
			}, null, true));
			events_default.on("BufWinEnter", (_, winid) => {
				if (this.highlightWinids.has(winid)) {
					this.highlightWinids.delete(winid);
					nvim.createWindow(winid).clearMatchGroup(HIGHLIGHT_GROUP);
				}
			}, null, this.disposables);
			commands_default.register({
				id: "document.showIncomingCalls",
				execute: async () => {
					await this.showCallHierarchyTree("incoming");
				}
			}, false, "show incoming calls in tree view.");
			commands_default.register({
				id: "document.showOutgoingCalls",
				execute: async () => {
					await this.showCallHierarchyTree("outgoing");
				}
			}, false, "show outgoing calls in tree view.");
		}
		loadConfiguration(e) {
			if (!e || e.affectsConfiguration("callHierarchy")) {
				let c = workspace_default.getConfiguration("callHierarchy", null);
				this.config = {
					splitCommand: c.get("splitCommand"),
					openCommand: c.get("openCommand"),
					enableTooltip: c.get("enableTooltip")
				};
			}
		}
		createProvider(rootItems, doc, winid, kind) {
			let provider = new LocationsDataProvider(kind, winid, this.config, CallHierarchyHandler.commandId, rootItems, (kind) => this.handler.getIcon(kind), (el, meta, token) => this.getChildren(doc, el, meta, token));
			for (let kind of ["incoming", "outgoing"]) {
				let name = kind === "incoming" ? "Show Incoming Calls" : "Show Outgoing Calls";
				provider.addAction(name, (el) => {
					provider.meta = kind;
					let rootItems = [toCallHierarchyItem(el)];
					provider.reset(rootItems);
				});
			}
			return provider;
		}
		async getChildren(doc, item, kind, token) {
			let items = [];
			let callHierarchyItem = toCallHierarchyItem(item);
			if (kind == "incoming") {
				let res = await languages_default.provideIncomingCalls(doc, callHierarchyItem, token);
				if (res) items = res.map((o) => Object.assign(o.from, { ranges: o.fromRanges }));
			} else {
				let res = await languages_default.provideOutgoingCalls(doc, callHierarchyItem, token);
				if (res) items = res.map((o) => Object.assign(o.to, {
					ranges: o.fromRanges,
					sourceUri: item.uri
				}));
			}
			return items;
		}
		async prepare(doc, position, token) {
			this.handler.checkProvider("callHierarchy", doc);
			const res = await languages_default.prepareCallHierarchy(doc, position, token);
			return isCallHierarchyItem(res) ? [res] : res;
		}
		async getCallHierarchyItems(item, kind) {
			const { doc, position } = await this.handler.getCurrentState();
			const source = new import_main$1.CancellationTokenSource();
			if (!item) {
				await doc.synchronize();
				let res = await this.prepare(doc.textDocument, position, source.token);
				item = res ? res[0] : void 0;
				if (!res) throw new Error("Unable to getCallHierarchyItem at current position");
			}
			return await languages_default[kind == "incoming" ? "provideIncomingCalls" : "provideOutgoingCalls"](doc.textDocument, item, source.token);
		}
		async getIncoming(item) {
			return await this.getCallHierarchyItems(item, "incoming");
		}
		async getOutgoing(item) {
			return await this.getCallHierarchyItems(item, "outgoing");
		}
		async showCallHierarchyTree(kind) {
			const { doc, position, winid } = await this.handler.getCurrentState();
			await doc.synchronize();
			if (!languages_default.hasProvider("callHierarchy", doc.textDocument)) {
				window_default.showErrorMessage(`CallHierarchy provider not found for current document, it's not supported by your languageserver`);
				return;
			}
			const res = await languages_default.prepareCallHierarchy(doc.textDocument, position, import_main$1.CancellationToken.None);
			const rootItems = isCallHierarchyItem(res) ? [res] : res;
			if (isFalsyOrEmpty(rootItems)) {
				window_default.showWarningMessage("Unable to get CallHierarchyItem at cursor position.");
				return;
			}
			let provider = this.createProvider(rootItems, doc.textDocument, winid, kind);
			let treeView = new BasicTreeView("CALLS", { treeDataProvider: provider });
			treeView.title = getTitle$1(kind);
			provider.onDidChangeTreeData((e) => {
				if (!e) treeView.title = getTitle$1(provider.meta);
			});
			treeView.onDidChangeVisibility((e) => {
				if (!e.visible) provider.dispose();
			});
			this.disposables.push(treeView);
			await treeView.show(this.config.splitCommand);
		}
		dispose() {
			this.highlightWinids.clear();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/codeActions.ts
function shouldAutoApply(only) {
	if (!only) return false;
	if (typeof only === "string" || only[0] === CodeActionKind.QuickFix || only[0] === CodeActionKind.SourceFixAll) return workspace_default.initialConfiguration.get("coc.preferences.autoApplySingleQuickfix", true);
	return false;
}
function isQuickfix(codeAction) {
	return codeAction.kind && codeAction.kind.startsWith("quickfix");
}
var logger$9, CodeActions;
var init_codeActions = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_manager$4();
	init_languages();
	init_logger$2();
	init_array();
	init_numbers();
	init_protocol();
	init_timing();
	init_window();
	init_workspace$1();
	logger$9 = createLogger$1("handler-codeActions");
	CodeActions = class {
		nvim;
		handler;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			handler.addDisposable(commands_default.registerCommand("editor.action.organizeImport", async () => {
				if (!await this.organizeImport()) window_default.showWarningMessage(`Organize import action not found`);
			}));
			commands_default.titles.set("editor.action.organizeImport", "Run organize import code action, show warning when not exists");
			handler.addDisposable(commands_default.registerCommand("editor.action.executeCodeActions", async (doc, range, actionKinds, timeout) => {
				await this.executeCodeActions(doc, range, actionKinds, timeout);
			}, this, true));
		}
		async executeCodeActions(doc, range, actionKinds, timeout) {
			let timing = createTiming("Execute code action", timeout);
			let applied = [];
			for (const kind of actionKinds) {
				let codeAction = (await this.getCodeActions(doc, range, [kind])).find((o) => !o.disabled);
				if (codeAction) {
					logger$9.info(`Apply code action "${kind}" to buffer ${doc.bufnr}`);
					timing.start(`"${kind}"`);
					let tokenSource = new import_main$1.CancellationTokenSource();
					let timer;
					let _resolve;
					const tp = new Promise((c) => {
						timer = setTimeout(() => {
							logger$9.warn(`Apply code action "${kind}" timeout after ${timeout}ms`);
							tokenSource.cancel();
							c(void 0);
						}, timeout);
						_resolve = c;
					});
					await Promise.race([tp, this.applyCodeAction(codeAction, tokenSource.token)]);
					if (!tokenSource.token.isCancellationRequested) applied.push(kind);
					timing.stop();
					clearTimeout(timer);
					_resolve(void 0);
					tokenSource.dispose();
					await doc.synchronize();
				}
			}
			return applied;
		}
		async codeActionRange(start, end, only) {
			let { doc } = await this.handler.getCurrentState();
			await doc.synchronize();
			let line = doc.getline(end - 1);
			let range = Range.create(start - 1, 0, end - 1, line.length);
			let codeActions = await this.getCodeActions(doc, range, only ? [only] : null);
			codeActions = codeActions.filter((o) => !o.disabled);
			if (!codeActions || codeActions.length == 0) {
				window_default.showWarningMessage(`No${only ? " " + only : ""} code action available`);
				return;
			}
			let idx = await window_default.showMenuPicker(codeActions.map((o) => o.title), "Choose action");
			let action = codeActions[idx];
			if (action) await this.applyCodeAction(action);
		}
		async organizeImport() {
			let { doc } = await this.handler.getCurrentState();
			await doc.synchronize();
			let actions = await this.getCodeActions(doc, void 0, [CodeActionKind.SourceOrganizeImports]);
			if (actions && actions.length) {
				await this.applyCodeAction(actions[0]);
				return true;
			}
			return false;
		}
		async getCodeActions(doc, range, only) {
			let excludeSourceAction = range !== null && (!only || only.findIndex((o) => o.startsWith(CodeActionKind.Source)) == -1);
			range = range ?? Range.create(0, 0, doc.lineCount, 0);
			let context = {
				diagnostics: manager_default$2.getDiagnosticsInRange(doc.textDocument, range),
				triggerKind: CodeActionTriggerKind.Invoked
			};
			if (!isFalsyOrEmpty(only)) context.only = only;
			let tokenSource = new import_main$1.CancellationTokenSource();
			let codeActions = await languages_default.getCodeActions(doc.textDocument, range, context, tokenSource.token);
			if (!codeActions || codeActions.length == 0) return [];
			if (excludeSourceAction) codeActions = codeActions.filter((o) => !o.kind || !o.kind.startsWith(CodeActionKind.Source));
			codeActions.sort((a, b) => {
				if (a.disabled && !b.disabled) return 1;
				if (b.disabled && !a.disabled) return -1;
				if (a.isPreferred != b.isPreferred) return boolToNumber(b.isPreferred) - boolToNumber(a.isPreferred);
				if (!only) {
					if (isQuickfix(a) && !isQuickfix(b)) return -1;
					if (isQuickfix(b) && !isQuickfix(a)) return 1;
				}
				return 0;
			});
			return codeActions;
		}
		get floatActions() {
			return workspace_default.initialConfiguration.get("coc.preferences.floatActions", true);
		}
		async doCodeAction(mode, only, showDisable = false) {
			let { doc, position } = await this.handler.getCurrentState();
			let range;
			if (mode) range = await window_default.getSelectedRange(mode);
			else range = Range.create(position, position);
			await doc.synchronize();
			let codeActions = await this.getCodeActions(doc, range, Array.isArray(only) ? only : null);
			if (typeof only == "string") codeActions = codeActions.filter((o) => o.title == only || o.command && o.command.title == only);
			else if (Array.isArray(only)) codeActions = codeActions.filter((o) => only.some((k) => o.kind && o.kind.startsWith(k)));
			if (!this.floatActions || !showDisable) codeActions = codeActions.filter((o) => !o.disabled);
			if (!codeActions || codeActions.length == 0) {
				window_default.showWarningMessage(`No${only ? " " + only : ""} code action available`);
				return;
			}
			if (codeActions.length == 1 && !codeActions[0].disabled && shouldAutoApply(only)) {
				await this.applyCodeAction(codeActions[0]);
				return;
			}
			let idx = this.floatActions ? await window_default.showMenuPicker(codeActions.map((o) => {
				return {
					text: o.title,
					disabled: o.disabled
				};
			}), "Choose action") : await window_default.requestInputList("Choose action by number", codeActions.map((o) => o.title));
			let action = codeActions[idx];
			if (action) await this.applyCodeAction(action);
		}
		/**
		* Get current codeActions
		*/
		async getCurrentCodeActions(mode, only) {
			let { doc } = await this.handler.getCurrentState();
			let range;
			if (mode) range = await window_default.getSelectedRange(mode);
			return (await this.getCodeActions(doc, range, only)).filter((o) => !o.disabled);
		}
		/**
		* Invoke preferred quickfix at current position
		*/
		async doQuickfix() {
			let actions = await this.getCurrentCodeActions("currline", [CodeActionKind.QuickFix]);
			if (!actions || actions.length == 0) {
				window_default.showWarningMessage(`No quickfix action available`);
				return;
			}
			await this.applyCodeAction(actions[0]);
			this.nvim.command(`silent! call repeat#set("\\<Plug>(coc-fix-current)", -1)`, true);
		}
		async applyCodeAction(action, token) {
			if (action.disabled) throw new Error(`Action "${action.title}" is disabled: ${action.disabled.reason}`);
			token = token == null ? import_main$1.CancellationToken.None : token;
			let resolved = await languages_default.resolveCodeAction(action, token);
			if (!resolved || token.isCancellationRequested) return;
			let { edit, command } = resolved;
			if (edit) await workspace_default.applyEdit(edit);
			if (command) await commands_default.execute(command);
		}
	};
}));
//#endregion
//#region src/handler/codelens/buffer.ts
function getTextAlign(position) {
	if (position == "top") return "above";
	if (position == "eol") return "after";
	if (position === "right_align") return "right";
	return "above";
}
function getCommands(line, codeLenses) {
	if (!codeLenses?.length) return [];
	let commands = [];
	for (let codeLens of codeLenses) {
		let { range, command } = codeLens;
		if (!isCommand(command)) continue;
		if (line == range.start.line) commands.push(command);
	}
	return commands;
}
var srcId$2, debounceTime$5, CODELENS_HL, NORMAL_HL, CodeLensBuffer;
var init_buffer$4 = __esmMin((() => {
	init_commands$2();
	init_languages();
	init_logger$2();
	init_util$7();
	init_array();
	init_errors();
	init_is();
	init_node();
	init_protocol();
	init_window();
	init_workspace$1();
	createLogger$1("codelens-buffer");
	debounceTime$5 = getConditionValue(200, 20);
	CODELENS_HL = "CocCodeLens";
	NORMAL_HL = "Normal";
	CodeLensBuffer = class {
		nvim;
		document;
		codeLenses;
		tokenSource;
		resolveTokenSource;
		_config;
		resolveCodeLens;
		debounceFetch;
		constructor(nvim, document) {
			this.nvim = nvim;
			this.document = document;
			this.resolveCodeLens = debounce(() => {
				this._resolveCodeLenses().catch(onUnexpectedError);
			}, debounceTime$5);
			this.debounceFetch = debounce(() => {
				this.fetchCodeLenses().catch(onUnexpectedError);
			}, debounceTime$5);
			if (this.hasProvider) this.debounceFetch();
		}
		get config() {
			if (this._config) return this._config;
			this.loadConfiguration();
			return this._config;
		}
		loadConfiguration() {
			let config = workspace_default.getConfiguration("codeLens", this.document);
			this._config = {
				enabled: config.get("enable", false),
				display: config.get("display", true),
				position: config.get("position", "top"),
				separator: config.get("separator", ""),
				subseparator: config.get("subseparator", " ")
			};
		}
		async toggleDisplay() {
			if (!this.hasProvider || !this.config.enabled) return;
			if (this.config.display) {
				this.config.display = false;
				this.clear();
			} else {
				this.config.display = true;
				this.resolveCodeLens.clear();
				await this._resolveCodeLenses();
			}
		}
		get bufnr() {
			return this.document.bufnr;
		}
		onChange(e) {
			if (e.contentChanges.length === 0 && this.codeLenses != null) {
				this.resolveCodeLens.clear();
				this._resolveCodeLenses().catch(onUnexpectedError);
			} else {
				this.cancel();
				this.debounceFetch();
			}
		}
		get currentCodeLens() {
			return this.codeLenses?.codeLenses;
		}
		get hasProvider() {
			return languages_default.hasProvider("codeLens", this.document);
		}
		async forceFetch() {
			if (!this.config.enabled || !this.hasProvider) return;
			await this.document.synchronize();
			this.cancel();
			await this.fetchCodeLenses();
		}
		async fetchCodeLenses() {
			if (!this.hasProvider || !this.config.enabled) return;
			if (!(this.codeLenses?.version == this.document.version)) {
				let empty = this.codeLenses == null;
				let { textDocument } = this.document;
				let version = textDocument.version;
				this.cancelFetch();
				let token = (this.tokenSource = new import_main$1.CancellationTokenSource()).token;
				if (!srcId$2) srcId$2 = await this.nvim.createNamespace("coc-codelens");
				let codeLenses = await languages_default.getCodeLens(textDocument, token);
				if (token.isCancellationRequested) return;
				codeLenses = defaultValue(codeLenses, []);
				codeLenses = codeLenses.filter((o) => o != null);
				if (isFalsyOrEmpty(codeLenses)) {
					this.clear();
					return;
				}
				this.codeLenses = {
					version,
					codeLenses
				};
				if (empty) this.setVirtualText(codeLenses);
			}
			this.resolveCodeLens.clear();
			await this._resolveCodeLenses();
		}
		/**
		* Resolve visible codeLens
		*/
		async _resolveCodeLenses() {
			if (!this.codeLenses || this.isChanged) return;
			let { codeLenses } = this.codeLenses;
			let [bufnr, start, end, total] = await this.nvim.eval(`[bufnr('%'),line('w0'),line('w$'),line('$')]`);
			if (this.isChanged || bufnr != this.bufnr) return;
			this.cancel();
			codeLenses = codeLenses.filter((o) => {
				let lnum = o.range.start.line + 1;
				return lnum >= start && lnum <= end;
			});
			if (codeLenses.length) {
				let token = (this.resolveTokenSource = new import_main$1.CancellationTokenSource()).token;
				await Promise.all(codeLenses.map((codeLens) => {
					if (isCommand(codeLens.command)) return Promise.resolve();
					codeLens.command = void 0;
					return languages_default.resolveCodeLens(codeLens, token);
				}));
				this.resolveTokenSource = void 0;
				if (token.isCancellationRequested || this.isChanged) return;
			}
			if (end == total) end = -1;
			this.nvim.pauseNotification();
			this.clear();
			this.setVirtualText(codeLenses);
			this.nvim.resumeNotification(true, true);
		}
		get isChanged() {
			if (!this.codeLenses || this.document.dirty) return true;
			let { version } = this.codeLenses;
			return this.document.textDocument.version !== version;
		}
		/**
		* Attach resolved codeLens
		*/
		setVirtualText(codeLenses) {
			let { document } = this;
			if (!srcId$2 || !document || !codeLenses.length || !this.config.display) return;
			let top = this.config.position === "top";
			let list = /* @__PURE__ */ new Map();
			for (let codeLens of codeLenses) {
				let { line } = codeLens.range.start;
				let curr = list.get(line) ?? [];
				curr.push(codeLens);
				list.set(line, curr);
			}
			for (let lnum of list.keys()) {
				let commands = list.get(lnum).reduce((p, c) => {
					if (c && c.command && c.command.title) p.push(c.command.title.replace(/\s+/g, " "));
					return p;
				}, []);
				let chunks = [];
				let len = commands.length;
				for (let i = 0; i < len; i++) {
					let title = commands[i];
					chunks.push([title, CODELENS_HL]);
					if (i != len - 1) chunks.push([this.config.subseparator, CODELENS_HL]);
				}
				if (chunks.length > 0 && this.config.separator) chunks.unshift([`${this.config.separator} `, CODELENS_HL]);
				if (top && chunks.length == 0) chunks.push([" ", NORMAL_HL]);
				if (chunks.length > 0) document.buffer.setVirtualText(srcId$2, lnum, chunks, {
					text_align: getTextAlign(this.config.position),
					indent: true
				});
			}
		}
		clear(start = 0, end = -1) {
			if (!srcId$2) return;
			this.nvim.createBuffer(this.bufnr).clearNamespace(srcId$2, start, end);
		}
		async doAction(line) {
			let commands = getCommands(line, this.codeLenses?.codeLenses);
			if (commands.length == 1) await commands_default.execute(commands[0]);
			else if (commands.length > 1) {
				let res = await window_default.showMenuPicker(commands.map((c) => c.title));
				if (res != -1) await commands_default.execute(commands[res]);
			}
		}
		cancelFetch() {
			this.debounceFetch.clear();
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = null;
			}
		}
		cancelResolve() {
			if (this.resolveTokenSource) {
				this.resolveTokenSource.cancel();
				this.resolveTokenSource = null;
			}
		}
		cancel() {
			this.resolveCodeLens.clear();
			this.cancelResolve();
			this.cancelFetch();
		}
		abandonResult() {
			this.codeLenses = void 0;
		}
		dispose() {
			this.cancel();
			this.codeLenses = void 0;
		}
	};
}));
//#endregion
//#region src/handler/codelens/index.ts
var debounceTime$4, CodeLensManager;
var init_codelens = __esmMin((() => {
	init_node();
	init_commands$2();
	init_events();
	init_languages();
	init_util$7();
	init_protocol();
	init_window();
	init_workspace$1();
	init_buffer$4();
	debounceTime$4 = getConditionValue(200, 0);
	CodeLensManager = class {
		nvim;
		disposables = [];
		buffers;
		constructor(nvim) {
			this.nvim = nvim;
			workspace_default.onDidChangeConfiguration((e) => {
				if (e.affectsConfiguration("codeLens")) for (let item of this.buffers.items) item.loadConfiguration();
			}, this, this.disposables);
			this.buffers = workspace_default.registerBufferSync((doc) => {
				if (doc.buftype != "") return void 0;
				return new CodeLensBuffer(nvim, doc);
			});
			this.disposables.push(this.buffers);
			events_default.on("CursorHold", async (bufnr) => {
				let item = this.buffers.getItem(bufnr);
				if (item && item.config.enabled && !item.currentCodeLens) await item.forceFetch();
			}, null, this.disposables);
			events_default.on("CursorMoved", (bufnr) => {
				let buf = this.buffers.getItem(bufnr);
				if (buf) buf.resolveCodeLens();
			}, null, this.disposables);
			let debounced = debounce(async (selector) => {
				for (let item of this.buffers.items) {
					if (!workspace_default.match(selector, item.document)) continue;
					item.abandonResult();
					await item.forceFetch();
				}
			}, debounceTime$4);
			this.disposables.push(import_main$1.Disposable.create(() => {
				debounced.clear();
			}));
			languages_default.onDidCodeLensRefresh(debounced, null, this.disposables);
			commands_default.register({
				id: "document.toggleCodeLens",
				execute: () => {
					return this.toggle(workspace_default.bufnr);
				}
			}, false, "toggle codeLens display of current buffer");
		}
		async toggle(bufnr) {
			let item = this.buffers.getItem(bufnr);
			try {
				workspace_default.getAttachedDocument(bufnr);
				await item.toggleDisplay();
			} catch (e) {
				window_default.showErrorMessage(e.message);
			}
		}
		/**
		* Check provider for buf that not fetched
		*/
		async checkProvider() {
			for (let buf of this.buffers.items) await buf.forceFetch();
		}
		async doAction() {
			let [bufnr, line] = await this.nvim.eval(`[bufnr("%"),line(".")-1]`);
			let buf = this.buffers.getItem(bufnr);
			if (buf) await buf.doAction(line);
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/util/color.ts
function pad(str) {
	return str.length == 1 ? `0${str}` : str;
}
function toHexString(color) {
	let c = toHexColor(color);
	return `${pad(c.red.toString(16))}${pad(c.green.toString(16))}${pad(c.blue.toString(16))}`;
}
function toHexColor(color) {
	let { red, green, blue } = color;
	return {
		red: Math.round(red * 255),
		green: Math.round(green * 255),
		blue: Math.round(blue * 255)
	};
}
function isDark(color) {
	let rgb = [
		color.red,
		color.green,
		color.blue
	];
	let lum = [];
	for (let i = 0; i < rgb.length; i++) {
		let chan = rgb[i];
		lum[i] = chan <= .03928 ? chan / 12.92 : Math.pow((chan + .055) / 1.055, 2.4);
	}
	return .2126 * lum[0] + .7152 * lum[1] + .0722 * lum[2] <= .5;
}
var init_color = __esmMin((() => {}));
//#endregion
//#region src/handler/colors/colorBuffer.ts
function getHighlightGroup$1(color) {
	return `BG${toHexString(color)}`;
}
var NAMESPACE$3, debounceTime$3, ColorBuffer;
var init_colorBuffer = __esmMin((() => {
	init_languages();
	init_util$7();
	init_color();
	init_is();
	init_node();
	init_position();
	init_protocol();
	init_window();
	init_workspace$1();
	NAMESPACE$3 = "color";
	debounceTime$3 = getConditionValue(200, 10);
	ColorBuffer = class {
		nvim;
		doc;
		config;
		usedColors;
		_colors = [];
		tokenSource;
		highlight;
		_enable;
		constructor(nvim, doc, config, usedColors) {
			this.nvim = nvim;
			this.doc = doc;
			this.config = config;
			this.usedColors = usedColors;
			this.highlight = debounce(() => {
				this.doHighlight();
			}, debounceTime$3);
			if (this.hasProvider) this.highlight();
		}
		get enable() {
			if (boolean(this._enable)) return this._enable;
			this._enable = workspace_default.getConfiguration("colors", this.doc).get("enable", false);
			return this._enable;
		}
		updateDocumentConfig() {
			let enable = this.enabled;
			this._enable = workspace_default.getConfiguration("colors", this.doc).get("enable", false);
			if (enable != this.enabled) if (enable) this.clearHighlight();
			else this.doHighlight();
		}
		toggle() {
			if (this._enable) {
				this._enable = false;
				this.clearHighlight();
			} else {
				this._enable = true;
				this.doHighlight();
			}
		}
		get hasProvider() {
			return languages_default.hasProvider("documentColor", this.doc);
		}
		get enabled() {
			let { filetypes } = this.config;
			let { filetype } = this.doc;
			if (!this.hasProvider) return false;
			if (Array.isArray(filetypes) && (filetypes.includes("*") || filetypes.includes(filetype))) return true;
			return this.enable;
		}
		onChange() {
			this.cancel();
			this.highlight();
		}
		get buffer() {
			return this.doc.buffer;
		}
		get colors() {
			return this._colors;
		}
		hasColor() {
			return this._colors.length > 0;
		}
		async doHighlight() {
			if (!this.enabled) return;
			let { nvim, doc } = this;
			this.tokenSource = new import_main$1.CancellationTokenSource();
			let { token } = this.tokenSource;
			let colors;
			colors = await languages_default.provideDocumentColors(doc.textDocument, token);
			if (token.isCancellationRequested) return;
			colors = colors || [];
			colors.sort((a, b) => comparePosition(a.range.start, b.range.start));
			this._colors = colors;
			let items = [];
			colors.forEach((o) => {
				let hlGroup = getHighlightGroup$1(o.color);
				doc.addHighlights(items, hlGroup, o.range, { combine: false });
			});
			let diff = await window_default.diffHighlights(doc.bufnr, NAMESPACE$3, items);
			if (token.isCancellationRequested || !diff) return;
			nvim.pauseNotification();
			this.defineColors(colors);
			nvim.resumeNotification(false, true);
			await window_default.applyDiffHighlights(doc.bufnr, NAMESPACE$3, this.config.highlightPriority, diff, true);
		}
		defineColors(colors) {
			for (let color of colors) {
				let hex = toHexString(color.color);
				if (!this.usedColors.has(hex)) {
					this.nvim.command(`hi BG${hex} guibg=#${hex} guifg=#${isDark(color.color) ? "ffffff" : "000000"}`, true);
					this.usedColors.add(hex);
				}
			}
		}
		hasColorAtPosition(position) {
			return this.colors.some((o) => positionInRange(position, o.range) == 0);
		}
		clearHighlight() {
			this.highlight.clear();
			this._colors = [];
			this.buffer.clearNamespace("color");
		}
		cancel() {
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = null;
			}
		}
		dispose() {
			this._colors = [];
			this.highlight.clear();
			this.cancel();
		}
	};
}));
//#endregion
//#region src/handler/colors/index.ts
var Colors;
var init_colors = __esmMin((() => {
	init_commands$2();
	init_events();
	init_languages();
	init_util$7();
	init_color();
	init_protocol();
	init_window();
	init_workspace$1();
	init_colorBuffer();
	Colors = class {
		nvim;
		handler;
		config;
		disposables = [];
		highlighters;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			let usedColors = /* @__PURE__ */ new Set();
			this.highlighters = workspace_default.registerBufferSync((doc) => {
				return new ColorBuffer(this.nvim, doc, this.config, usedColors);
			});
			events_default.on("ColorScheme", () => {
				usedColors.clear();
				for (let item of this.highlighters.items) {
					item.cancel();
					item.doHighlight();
				}
			}, null, this.disposables);
			languages_default.onDidColorsRefresh((selector) => {
				for (let item of this.highlighters.items) if (workspace_default.match(selector, item.doc)) item.highlight();
			});
			commands_default.register({
				id: "editor.action.pickColor",
				execute: async () => {
					await this.pickColor();
				}
			}, false, "pick color from system color picker when possible.");
			commands_default.register({
				id: "editor.action.colorPresentation",
				execute: async () => {
					await this.pickPresentation();
				}
			}, false, "change color presentation.");
			commands_default.register({
				id: "document.toggleColors",
				execute: async () => {
					let bufnr = await nvim.call("bufnr", ["%"]);
					let item = this.highlighters.getItem(bufnr);
					workspace_default.getAttachedDocument(bufnr);
					item.toggle();
				}
			}, false, "toggle colors for current buffer");
		}
		loadConfiguration(e) {
			if (!e || e.affectsConfiguration("colors")) {
				let c = workspace_default.initialConfiguration.get("colors");
				this.config = Object.assign(this.config ?? {}, {
					filetypes: c.filetypes,
					highlightPriority: defaultValue(c.highlightPriority, 1e3)
				});
				if (e) for (let item of this.highlighters.items) item.updateDocumentConfig();
			}
		}
		async pickPresentation() {
			let { doc } = await this.handler.getCurrentState();
			this.handler.checkProvider("documentColor", doc.textDocument);
			let info = await this.getColorInformation(doc.bufnr);
			if (!info) return void window_default.showWarningMessage("Color not found at current position");
			let tokenSource = new import_main$1.CancellationTokenSource();
			let presentations = await languages_default.provideColorPresentations(info, doc.textDocument, tokenSource.token);
			if (!presentations?.length) return void window_default.showWarningMessage("No color presentations found");
			let res = await window_default.showMenuPicker(presentations.map((o) => o.label), "Choose color:");
			if (res == -1) return;
			let { textEdit, additionalTextEdits, label } = presentations[res];
			if (!textEdit) textEdit = {
				range: info.range,
				newText: label
			};
			await doc.applyEdits([textEdit]);
			if (additionalTextEdits) await doc.applyEdits(additionalTextEdits);
		}
		async pickColor() {
			let { doc } = await this.handler.getCurrentState();
			this.handler.checkProvider("documentColor", doc.textDocument);
			let info = await this.getColorInformation(doc.bufnr);
			if (!info) return void window_default.showWarningMessage("Color not found at current position");
			let { color } = info;
			let colorArr = [
				(color.red * 255).toFixed(0),
				(color.green * 255).toFixed(0),
				(color.blue * 255).toFixed(0)
			];
			let res = await this.nvim.call("coc#color#pick_color", [colorArr]);
			if (!res) return;
			let hex = toHexString({
				red: res[0] / 65535,
				green: res[1] / 65535,
				blue: res[2] / 65535,
				alpha: 1
			});
			await doc.applyEdits([{
				range: info.range,
				newText: `#${hex}`
			}]);
		}
		isEnabled(bufnr) {
			let highlighter = this.highlighters.getItem(bufnr);
			return highlighter != null && highlighter.enabled === true;
		}
		clearHighlight(bufnr) {
			let highlighter = this.highlighters.getItem(bufnr);
			if (highlighter) highlighter.clearHighlight();
		}
		hasColor(bufnr) {
			let highlighter = this.highlighters.getItem(bufnr);
			if (!highlighter) return false;
			return highlighter.hasColor();
		}
		hasColorAtPosition(bufnr, position) {
			let highlighter = this.highlighters.getItem(bufnr);
			if (!highlighter) return false;
			return highlighter.hasColorAtPosition(position);
		}
		highlightAll() {
			for (let buf of this.highlighters.items) buf.highlight();
		}
		async doHighlight(bufnr) {
			let highlighter = this.highlighters.getItem(bufnr);
			if (highlighter) await highlighter.doHighlight();
		}
		async getColorInformation(bufnr) {
			let highlighter = this.highlighters.getItem(bufnr);
			if (!highlighter) return null;
			let position = await window_default.getCursorPosition();
			for (let info of highlighter.colors) {
				let { range } = info;
				let { start, end } = range;
				if (position.line == start.line && position.character >= start.character && position.character <= end.character) return info;
			}
			return null;
		}
		dispose() {
			this.highlighters.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/commands.ts
function validCommand(command) {
	return command && string(command.id) && string(command.cmd) && command.id.length > 0 && command.cmd.length > 0;
}
var Commands;
var init_commands = __esmMin((() => {
	init_commands$2();
	init_manager$2();
	init_workspace$1();
	init_is();
	Commands = class {
		nvim;
		constructor(nvim) {
			this.nvim = nvim;
			for (let item of workspace_default.env.vimCommands) this.addVimCommand(item);
		}
		addVimCommand(cmd) {
			if (!validCommand(cmd)) return;
			let id = `vim.${cmd.id}`;
			commands_default.registerCommand(id, () => {
				this.nvim.command(cmd.cmd, true);
				this.nvim.redrawVim();
			});
			if (cmd.title) commands_default.titles.set(id, cmd.title);
		}
		getCommandList() {
			return commands_default.commandList.map((o) => o.id);
		}
		async repeat() {
			await commands_default.repeatCommand();
		}
		async runCommand(id, ...args) {
			if (id) return await commands_default.fireCommand(id, ...args);
			await manager_default$1.start(["commands"]);
		}
	};
}));
//#endregion
//#region src/handler/fold.ts
var FoldHandler;
var init_fold = __esmMin((() => {
	init_languages();
	FoldHandler = class {
		nvim;
		handler;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
		}
		async fold(kind) {
			let { doc, winid } = await this.handler.getCurrentState();
			this.handler.checkProvider("foldingRange", doc.textDocument);
			await doc.synchronize();
			let win = this.nvim.createWindow(winid);
			let foldlevel = await this.nvim.eval("&foldlevel");
			let ranges = await this.handler.withRequestToken("foldingrange", (token) => {
				return languages_default.provideFoldingRanges(doc.textDocument, {}, token);
			}, true);
			if (!ranges || !ranges.length) return false;
			if (kind) ranges = ranges.filter((o) => o.kind == kind);
			ranges.sort((a, b) => b.startLine - a.startLine);
			this.nvim.pauseNotification();
			win.setOption("foldmethod", "manual", true);
			this.nvim.command("normal! zE", true);
			for (let range of ranges) {
				let { startLine, endLine } = range;
				let cmd = `${startLine + 1}, ${endLine + 1}fold`;
				this.nvim.command(cmd, true);
			}
			win.setOption("foldenable", true, true);
			win.setOption("foldlevel", foldlevel, true);
			await this.nvim.resumeNotification(true);
			return true;
		}
	};
}));
//#endregion
//#region src/handler/format.ts
var logger$8, FormatHandler;
var init_format = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_events();
	init_languages();
	init_logger$2();
	init_array();
	init_util$7();
	init_string$1();
	init_window();
	init_workspace$1();
	logger$8 = createLogger$1("handler-format");
	FormatHandler = class {
		nvim;
		handler;
		preferences;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.setConfiguration();
			handler.addDisposable(workspace_default.onDidChangeConfiguration(this.setConfiguration, this));
			handler.addDisposable(window_default.onDidChangeActiveTextEditor(() => {
				this.setConfiguration();
			}));
			handler.addDisposable(events_default.on("Enter", async (bufnr) => {
				let res = await events_default.race(["CursorMovedI"], 100);
				if (res.args && res.args[0] === bufnr) await this.handleEnter(bufnr);
			}));
			handler.addDisposable(events_default.on("TextInsert", async (bufnr, _info, character) => {
				let doc = workspace_default.getDocument(bufnr);
				if (!events_default.completing && doc && doc.attached) await this.tryFormatOnType(character, doc);
			}));
			handler.addDisposable(commands_default.registerCommand("editor.action.formatDocument", async (uri) => {
				let doc;
				if (uri) doc = workspace_default.getAttachedDocument(uri);
				else {
					let buf = await nvim.buffer;
					doc = workspace_default.getAttachedDocument(buf.id);
				}
				await this.documentFormat(doc);
			}));
			commands_default.titles.set("editor.action.formatDocument", "Format Document");
		}
		setConfiguration(e) {
			if (!e || e.affectsConfiguration("coc.preferences")) {
				let doc = window_default.activeTextEditor?.document;
				let config = workspace_default.getConfiguration("coc.preferences", doc);
				this.preferences = {
					formatOnType: config.get("formatOnType", false),
					formatOnTypeFiletypes: config.get("formatOnTypeFiletypes", null),
					bracketEnterImprove: config.get("bracketEnterImprove", true)
				};
			}
		}
		shouldFormatOnType(filetype) {
			const filetypes = this.preferences.formatOnTypeFiletypes;
			return isFalsyOrEmpty(filetypes) || filetypes.includes(filetype) || filetypes.includes("*");
		}
		async tryFormatOnType(ch, doc) {
			if (doc.getVar("disable_autoformat", 0)) return false;
			if (!this.preferences.formatOnType) return false;
			if (!ch || isAlphabet(ch.charCodeAt(0))) return false;
			if (!this.shouldFormatOnType(doc.filetype)) return false;
			if (!languages_default.hasProvider("formatOnType", doc.textDocument)) {
				logger$8.warn(`Format on type provider not found for buffer: ${doc.uri}`);
				return false;
			}
			if (!languages_default.canFormatOnType(ch, doc.textDocument)) return false;
			let position;
			let edits = await this.handler.withRequestToken("Format on type", async (token) => {
				position = await window_default.getCursorPosition();
				await doc.synchronize();
				return await languages_default.provideDocumentOnTypeEdits(ch, doc.textDocument, position, token);
			});
			if (edits == null || events_default.completing) return false;
			if (edits.length === 0) return true;
			await doc.applyEdits(edits, false, true);
			this.logProvider(doc.bufnr, edits);
			return true;
		}
		async formatCurrentBuffer() {
			let { doc } = await this.handler.getCurrentState();
			return await this.documentFormat(doc);
		}
		async formatCurrentRange(mode) {
			let { doc } = await this.handler.getCurrentState();
			return await this.documentRangeFormat(doc, mode);
		}
		async documentFormat(doc) {
			await doc.synchronize();
			if (!languages_default.hasFormatProvider(doc.textDocument)) throw new Error(`Format provider not found for buffer: ${doc.bufnr}`);
			let options = await workspace_default.getFormatOptions(doc.uri);
			let textEdits = await this.handler.withRequestToken("format", (token) => {
				return languages_default.provideDocumentFormattingEdits(doc.textDocument, options, token);
			});
			if (textEdits && textEdits.length > 0) {
				await doc.applyEdits(textEdits, false, true);
				this.logProvider(doc.bufnr, textEdits);
				return true;
			}
			return false;
		}
		async handleEnter(bufnr) {
			let { nvim } = this;
			let { bracketEnterImprove } = this.preferences;
			let doc = workspace_default.getDocument(bufnr);
			if (!doc || !doc.attached) return;
			await this.tryFormatOnType("\n", doc);
			if (bracketEnterImprove) {
				let line = await nvim.call("line", ".") - 1;
				await doc.patchChange();
				let pre = doc.getline(line - 1);
				let curr = doc.getline(line);
				let firstLine = doc.getline(0);
				let prevChar = pre[pre.length - 1];
				if (prevChar && pariedCharacters.has(prevChar)) {
					let nextChar = curr.trim()[0];
					if (nextChar && pariedCharacters.get(prevChar) == nextChar) {
						let edits = [];
						let pos = Position.create(line - 1, pre.length);
						let opts = await workspace_default.getFormatOptions(doc.uri);
						let space = opts.insertSpaces ? " ".repeat(opts.tabSize) : "	";
						let preIndent = pre.match(/^\s*/)[0];
						let currIndent = curr.match(/^\s*/)[0];
						let newText = "\n" + preIndent + space;
						if (doc.filetype == "vim" && !firstLine.startsWith("vim9script")) {
							edits.push({
								range: Range.create(line, currIndent.length, line, currIndent.length),
								newText: "  \\ "
							});
							newText = "\n" + currIndent + space + "\\ ";
						}
						edits.push({
							range: Range.create(pos, pos),
							newText
						});
						await doc.applyEdits(edits, true);
						await window_default.moveTo(Position.create(line, newText.length - 1));
					}
				}
			}
		}
		logProvider(bufnr, edits) {
			if (!Array.isArray(edits) || edits.length === 0) return;
			let extensionName = edits["__extensionName"];
			if (extensionName) logger$8.info(`Format buffer ${bufnr} by ${extensionName}`);
		}
		async documentRangeFormat(doc, mode) {
			this.handler.checkProvider("formatRange", doc.textDocument);
			await doc.synchronize();
			let range;
			if (mode) {
				range = await window_default.getSelectedRange(mode);
				if (!range) return -1;
			} else {
				let [lnum, count, mode] = await this.nvim.eval("[v:lnum,v:count,mode()]");
				if (count == 0 || mode == "i" || mode == "R") return -1;
				range = Range.create(lnum - 1, 0, lnum - 1 + count, 0);
			}
			let options = await workspace_default.getFormatOptions(doc.uri);
			let textEdits = await this.handler.withRequestToken("Format range", (token) => {
				return languages_default.provideDocumentRangeFormattingEdits(doc.textDocument, range, options, token);
			});
			if (!isFalsyOrEmpty(textEdits)) {
				await doc.applyEdits(textEdits, false, true);
				this.logProvider(doc.bufnr, textEdits);
				return 0;
			}
			return -1;
		}
	};
}));
//#endregion
//#region src/handler/highlights.ts
var Highlights;
var init_highlights = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_events();
	init_languages();
	init_util$7();
	init_position();
	init_protocol();
	init_window();
	init_workspace$1();
	Highlights = class {
		nvim;
		handler;
		config;
		disposables = [];
		tokenSource;
		highlights = /* @__PURE__ */ new Map();
		timer;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			events_default.on(["CursorMoved", "CursorMovedI"], () => {
				this.cancel();
				this.clearHighlights();
			}, null, this.disposables);
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			window_default.onDidChangeActiveTextEditor(() => {
				this.loadConfiguration();
			}, null, this.disposables);
			commands_default.register({
				id: "document.jumpToNextSymbol",
				execute: async () => {
					await this.jumpSymbol("next");
				}
			}, false, "Jump to next symbol highlight position.");
			commands_default.register({
				id: "document.jumpToPrevSymbol",
				execute: async () => {
					await this.jumpSymbol("previous");
				}
			}, false, "Jump to previous symbol highlight position.");
		}
		loadConfiguration(e) {
			let config = workspace_default.getConfiguration("documentHighlight", this.handler.uri);
			if (!e || e.affectsConfiguration("documentHighlight")) this.config = Object.assign(this.config || {}, {
				limit: config.get("limit", 200),
				priority: config.get("priority", -1),
				timeout: config.get("timeout", 300)
			});
		}
		isEnabled(bufnr, cursors) {
			let doc = workspace_default.getDocument(bufnr);
			if (!doc || !doc.attached || cursors) return false;
			if (!languages_default.hasProvider("documentHighlight", doc.textDocument)) return false;
			return true;
		}
		clearHighlights() {
			if (this.highlights.size == 0) return;
			for (let winid of this.highlights.keys()) this.nvim.createWindow(winid).clearMatchGroup("^CocHighlight");
			this.highlights.clear();
		}
		async highlight() {
			let { nvim } = this;
			this.cancel();
			let [bufnr, winid, pos, cursors] = await nvim.eval(`[bufnr("%"),win_getid(),coc#cursor#position(),get(b:,'coc_cursors_activated',0)]`);
			if (!this.isEnabled(bufnr, cursors)) return;
			let doc = workspace_default.getDocument(bufnr);
			let highlights = await this.getHighlights(doc, Position.create(pos[0], pos[1]));
			if (!highlights) return;
			let groups = {};
			for (let hl of highlights) {
				if (!Range.is(hl.range)) continue;
				let hlGroup = hl.kind == DocumentHighlightKind.Text ? "CocHighlightText" : hl.kind == DocumentHighlightKind.Read ? "CocHighlightRead" : "CocHighlightWrite";
				groups[hlGroup] = groups[hlGroup] || [];
				groups[hlGroup].push(hl.range);
			}
			let win = nvim.createWindow(winid);
			nvim.pauseNotification();
			win.clearMatchGroup("^CocHighlight");
			for (let [hlGroup, ranges] of Object.entries(groups)) win.highlightRanges(hlGroup, ranges, -1, true);
			nvim.resumeNotification(true, true);
			this.highlights.set(winid, highlights);
		}
		async jumpSymbol(direction) {
			let ranges = await this.getSymbolsRanges();
			if (!ranges) return;
			let pos = await window_default.getCursorPosition();
			if (direction == "next") {
				for (let i = 0; i <= ranges.length - 1; i++) if (comparePosition(ranges[i].start, pos) > 0) {
					await window_default.moveTo(ranges[i].start);
					return;
				}
				await window_default.moveTo(ranges[0].start);
			} else {
				for (let i = ranges.length - 1; i >= 0; i--) if (comparePosition(ranges[i].end, pos) < 0) {
					await window_default.moveTo(ranges[i].start);
					return;
				}
				await window_default.moveTo(ranges[ranges.length - 1].start);
			}
		}
		async getSymbolsRanges() {
			let { doc, position } = await this.handler.getCurrentState();
			this.handler.checkProvider("documentHighlight", doc.textDocument);
			let highlights = await this.getHighlights(doc, position);
			if (!highlights) return null;
			return highlights.filter((o) => Range.is(o.range)).map((o) => o.range).sort((a, b) => {
				return compareRangesUsingStarts(a, b);
			});
		}
		hasHighlights(winid) {
			return this.highlights.get(winid) != null;
		}
		async getHighlights(doc, position) {
			let ch = doc.getline(position.line)[position.character];
			if (!ch || !doc.isWord(ch)) return null;
			await doc.synchronize();
			this.cancel();
			let source = this.tokenSource = new import_main$1.CancellationTokenSource();
			let timer = this.timer = setTimeout(() => {
				source.cancel();
			}, this.config.timeout);
			let highlights = await languages_default.getDocumentHighLight(doc.textDocument, position, source.token);
			clearTimeout(timer);
			if (source.token.isCancellationRequested) return null;
			return highlights;
		}
		cancel() {
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource.dispose();
				this.tokenSource = null;
			}
		}
		dispose() {
			if (this.timer) clearTimeout(this.timer);
			this.cancel();
			this.highlights.clear();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/hover.ts
async function addDefinitions(hovers, definitions, filetype) {
	for (const def of definitions) {
		if (!def?.targetRange) continue;
		const { start, end } = def.targetRange;
		const endLine = end.line - start.line >= 100 ? start.line + 100 : end.character == 0 ? end.line - 1 : end.line;
		let lines = await readLines(def.targetUri, start.line, endLine);
		if (lines.length) {
			let indent = lines[0].match(/^\s*/)[0];
			if (indent) lines = lines.map((l) => l.startsWith(indent) ? l.substring(indent.length) : l);
			hovers.push({
				content: lines.join("\n"),
				filetype
			});
		}
	}
}
function addDocument(docs, text, filetype, isPreview = false) {
	let content = text.trim();
	if (!content.length) return;
	if (isPreview && filetype !== "markdown") content = "``` " + filetype + "\n" + content + "\n```";
	docs.push({
		content,
		filetype
	});
}
function isDocumentation(obj) {
	if (!obj) return false;
	return typeof obj.filetype === "string" && typeof obj.content === "string";
}
async function readLines(uri, start, end) {
	let doc = workspace_default.getDocument(uri);
	if (doc) return doc.getLines(start, end + 1);
	let fsPath = URI.parse(uri).fsPath;
	if (!fs$6.existsSync(fsPath)) return [];
	return await readFileLines(fsPath, start, end);
}
var highlightDelay, HoverHandler;
var init_hover = __esmMin((() => {
	init_main$2();
	init_esm();
	init_languages();
	init_util$7();
	init_array();
	init_fs();
	init_is();
	init_node();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	highlightDelay = getConditionValue(500, 10);
	HoverHandler = class {
		nvim;
		handler;
		hoverFactory;
		disposables = [];
		documentLines = [];
		config;
		timer;
		hasProvider = false;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			this.hoverFactory = window_default.createFloatFactory({
				modes: ["n"],
				autoHide: this.config.autoHide
			});
			this.disposables.push(this.hoverFactory);
			window_default.onDidChangeActiveTextEditor(() => {
				this.loadConfiguration();
			}, null, this.disposables);
		}
		registerProvider() {
			if (this.hasProvider) return;
			this.hasProvider = true;
			let { nvim } = this;
			this.disposables.push(workspace_default.registerTextDocumentContentProvider("coc", {
				onDidChange: null,
				provideTextDocumentContent: async () => {
					nvim.pauseNotification();
					nvim.command("setlocal conceallevel=2 nospell nofoldenable wrap", true);
					nvim.command("setlocal bufhidden=wipe nobuflisted", true);
					nvim.command("setfiletype markdown", true);
					nvim.command(`if winnr('j') != winnr('k') | exe "normal! z${Math.min(this.documentLines.length, this.config.previewMaxHeight)}\\<cr>" | endif`, true);
					await nvim.resumeNotification();
					return this.documentLines.join("\n");
				}
			}));
		}
		loadConfiguration(e) {
			if (!e || e.affectsConfiguration("hover")) {
				let config = workspace_default.getConfiguration("hover", this.handler.uri);
				this.config = {
					floatConfig: config.get("floatConfig", {}),
					autoHide: config.get("autoHide", true),
					target: config.get("target", "float"),
					previewMaxHeight: config.get("previewMaxHeight", 12)
				};
				if (this.config.target == "preview") this.registerProvider();
			}
		}
		async onHover(hoverTarget) {
			let { doc, position, winid } = await this.handler.getCurrentState();
			if (hoverTarget == "preview") this.registerProvider();
			this.handler.checkProvider("hover", doc.textDocument);
			await doc.synchronize();
			let hovers = await this.handler.withRequestToken("hover", (token) => {
				return languages_default.getHover(doc.textDocument, position, token);
			}, true);
			if (hovers == null || !hovers.length) return false;
			let hover = hovers.find((o) => Range.is(o.range));
			if (hover?.range) {
				let win = this.nvim.createWindow(winid);
				win.highlightRanges("CocHoverRange", [hover.range], 1024, true);
				this.timer = setTimeout(() => {
					win.clearMatchGroup("CocHoverRange");
					this.nvim.redrawVim();
				}, 500);
			}
			await this.previewHover(hovers, hoverTarget);
			return true;
		}
		async definitionHover(hoverTarget) {
			const { doc, position, winid } = await this.handler.getCurrentState();
			if (hoverTarget == "preview") this.registerProvider();
			this.handler.checkProvider("hover", doc.textDocument);
			await doc.synchronize();
			const hovers = await this.handler.withRequestToken("hover", (token) => {
				return languages_default.getHover(doc.textDocument, position, token);
			}, true);
			if (isFalsyOrEmpty(hovers)) return false;
			const defs = await this.handler.withRequestToken("definitionHover", (token) => {
				return languages_default.getDefinitionLinks(doc.textDocument, position, token);
			}, false);
			if (defs == null) return false;
			await addDefinitions(hovers, defs, doc.filetype);
			let hover = hovers.find((o) => Hover.is(o) && Range.is(o.range));
			if (hover?.range) {
				let win = this.nvim.createWindow(winid);
				win.highlightRanges("CocHoverRange", [hover.range], 1024, true);
				this.timer = setTimeout(() => {
					win.clearMatchGroup("CocHoverRange");
					this.nvim.redrawVim();
				}, highlightDelay);
			}
			await this.previewHover(hovers, hoverTarget);
			return true;
		}
		async previewHover(hovers, target) {
			let docs = [];
			target = target ?? this.config.target;
			let isPreview = target === "preview";
			for (let hover of hovers) {
				if (isDocumentation(hover)) {
					docs.push(hover);
					continue;
				}
				let { contents } = hover;
				if (Array.isArray(contents)) for (let item of contents) if (typeof item === "string") addDocument(docs, item, "markdown", isPreview);
				else addDocument(docs, item.value, item.language, isPreview);
				else if (MarkedString.is(contents)) if (typeof contents == "string") addDocument(docs, contents, "markdown", isPreview);
				else addDocument(docs, contents.value, contents.language, isPreview);
				else if (MarkupContent.is(contents)) addDocument(docs, contents.value, isMarkdown(contents) ? "markdown" : "txt", isPreview);
			}
			if (target == "float") {
				await this.hoverFactory.show(docs, this.config.floatConfig);
				return;
			}
			let lines = docs.reduce((p, c) => {
				let arr = c.content.split(/\r?\n/);
				if (p.length > 0) p.push("");
				p.push(...arr);
				return p;
			}, []);
			if (target == "echo") {
				const msg = lines.join("\n").trim();
				await this.nvim.call("coc#ui#echo_hover", [msg]);
			} else {
				this.documentLines = lines;
				await this.nvim.command(`noswapfile pedit coc://document`);
			}
		}
		/**
		* Get hover text array
		*/
		async getHover(loc) {
			let result = [];
			let doc;
			let position;
			if (!loc) {
				let state = await this.handler.getCurrentState();
				doc = state.doc;
				position = state.position;
			} else {
				doc = loc.bufnr ? workspace_default.getAttachedDocument(loc.bufnr) : await workspace_default.document;
				let character = characterIndex(doc.getline(loc.line - 1), loc.col - 1);
				position = Position.create(loc.line - 1, character);
			}
			this.handler.checkProvider("hover", doc.textDocument);
			await doc.synchronize();
			let tokenSource = new import_main$1.CancellationTokenSource();
			let hovers = await languages_default.getHover(doc.textDocument, position, tokenSource.token);
			for (let h of hovers) {
				let { contents } = h;
				if (Array.isArray(contents)) contents.forEach((c) => {
					result.push(typeof c === "string" ? c : c.value);
				});
				else if (MarkupContent.is(contents)) result.push(contents.value);
				else result.push(typeof contents === "string" ? contents : contents.value);
			}
			result = result.filter((s) => s != null && s.length > 0);
			return result;
		}
		dispose() {
			if (this.timer) clearTimeout(this.timer);
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/inlayHint/buffer.ts
function getHighlightGroup(kind) {
	switch (kind) {
		case InlayHintKind.Parameter: return "CocInlayHintParameter";
		case InlayHintKind.Type: return "CocInlayHintType";
		default: return "CocInlayHint";
	}
}
var logger$7, srcId$1, debounceInterval$1, requestDelay$1, InlayHintBuffer;
var init_buffer$3 = __esmMin((() => {
	init_main$2();
	init_events();
	init_languages();
	init_logger$2();
	init_regions();
	init_inlayHintManager();
	init_util$7();
	init_errors();
	init_position();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	logger$7 = createLogger$1("inlayHint-buffer");
	debounceInterval$1 = getConditionValue(150, 10);
	requestDelay$1 = getConditionValue(500, 10);
	InlayHintBuffer = class {
		nvim;
		doc;
		tokenSource;
		regions = new Regions();
		_config;
		_dirty = false;
		_changedtick;
		currentHints = [];
		_onDidRefresh = new import_main$1.Emitter();
		onDidRefresh = this._onDidRefresh.event;
		constructor(nvim, doc) {
			this.nvim = nvim;
			this.doc = doc;
			this.render().catch(onUnexpectedError);
		}
		get config() {
			if (this._config) return this._config;
			this.loadConfiguration();
			return this._config;
		}
		loadConfiguration() {
			let config = workspace_default.getConfiguration("inlayHint", this.doc);
			let changeEnable = this._config && this._config.enable !== config.enable;
			let changeDisplay = this._config && this._config.display !== config.display;
			this._config = {
				enable: config.get("enable"),
				position: config.get("position"),
				display: config.get("display", true),
				filetypes: config.get("filetypes"),
				refreshOnInsertMode: config.get("refreshOnInsertMode"),
				enableParameter: config.get("enableParameter"),
				maximumLength: config.get("maximumLength", 0)
			};
			if (changeEnable || changeDisplay) {
				let { enable, display } = this._config;
				if (enable && display) this.render(void 0, 0).catch(onUnexpectedError);
				else {
					this.clearCache();
					this.clearVirtualText();
				}
			}
		}
		onInsertLeave() {
			if (this.config.refreshOnInsertMode || this.doc.changedtick === this._changedtick) return;
			this.render().catch(onUnexpectedError);
		}
		onInsertEnter() {
			this._changedtick = this.doc.changedtick;
			if (this.config.refreshOnInsertMode) return;
			this.cancel();
		}
		onCompleteDone() {
			if (!workspace_default.isVim) return;
			if (this.config.refreshOnInsertMode) return;
			if (!this.enabled) return;
			this.clearCache();
			this.render(void 0, 0, true).catch(onUnexpectedError);
		}
		get current() {
			return this.currentHints;
		}
		get enabled() {
			if (!this.config.display || !this.configEnabled) return false;
			return this.hasProvider;
		}
		get hasProvider() {
			return languages_default.hasProvider("inlayHint", this.doc);
		}
		get configEnabled() {
			let { filetypes, enable } = this.config;
			if (Array.isArray(filetypes)) return filetypes.includes("*") || filetypes.includes(this.doc.filetype);
			return enable === true;
		}
		enable() {
			this.checkState();
			this.config.display = true;
			this.render(void 0, 0).catch(onUnexpectedError);
		}
		disable() {
			this.checkState();
			this.config.display = false;
			this.clearCache();
			this.clearVirtualText();
		}
		checkState() {
			if (!languages_default.hasProvider("inlayHint", this.doc.textDocument)) throw new Error("Inlay hint provider not found for current document");
			if (!this.configEnabled) throw new Error(`Filetype "${this.doc.filetype}" not enabled by inlayHint configuration, see ':h coc-config-inlayHint'`);
		}
		toggle() {
			if (this.config.display) this.disable();
			else this.enable();
		}
		clearCache() {
			this.cancel();
			this.currentHints = [];
			this.regions.clear();
		}
		onTextChange() {
			this.clearCache();
		}
		onChange() {
			this.render().catch(onUnexpectedError);
		}
		cancel() {
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = null;
			}
		}
		onVisible(winid, region) {
			if (!this._dirty) return;
			this.render({
				winid,
				region: [region[0], region[1]]
			}, 0).catch(onUnexpectedError);
		}
		async render(config, delay, force = false) {
			if (!this.enabled) return;
			if (!force && !this.config.refreshOnInsertMode && events_default.bufnr === this.doc.bufnr && events_default.insertMode) return;
			this.cancel();
			this.tokenSource = new import_main$1.CancellationTokenSource();
			let token = this.tokenSource.token;
			await waitWithToken(typeof delay === "number" ? delay : debounceInterval$1, token);
			if (!srcId$1) srcId$1 = await this.nvim.createNamespace("coc-inlayHint");
			if (token.isCancellationRequested || this.doc.dirty) return;
			if (!this._dirty) await this.renderAll(token);
			else if (config) {
				let region = config.region;
				await this.renderRange([region[0] - 1, region[1] - 1], token);
			} else {
				const spans = await window_default.getVisibleRanges(this.doc.bufnr);
				for (const [topline, botline] of spans) {
					if (token.isCancellationRequested) break;
					await this.renderRange([topline - 1, botline - 1], token);
				}
			}
		}
		async renderAll(token) {
			const lineCount = this.doc.lineCount;
			const range = Range.create(0, 0, lineCount, 0);
			const inlayHints = await this.request(range, token);
			if (!inlayHints) return;
			this.currentHints = inlayHints;
			this.setVirtualText(range, inlayHints);
			this.regions.add(0, lineCount);
			this._dirty = true;
		}
		/**
		* 0 based startLine and endLine
		*/
		async renderRange(lines, token) {
			let span = this.regions.toUncoveredSpan(lines, workspace_default.env.lines, this.doc.lineCount);
			if (!span) return;
			const [startLine, endLine] = span;
			const range = this.doc.textDocument.intersectWith(Range.create(startLine, 0, endLine + 1, 0));
			const inlayHints = await this.request(range, token);
			if (!inlayHints) return;
			this.currentHints = this.currentHints.filter((o) => positionInRange(o.position, range) !== 0);
			this.currentHints.push(...inlayHints);
			this.setVirtualText(range, inlayHints);
			this.regions.add(startLine, endLine);
		}
		async request(range, token) {
			let inlayHints;
			try {
				inlayHints = await languages_default.provideInlayHints(this.doc.textDocument, range, token);
			} catch (e) {
				if (!token.isCancellationRequested && e instanceof CancellationError) {
					this.render(void 0, requestDelay$1).catch(onUnexpectedError);
					return;
				}
			}
			if (inlayHints == null || token.isCancellationRequested) return;
			if (!this.config.enableParameter) inlayHints = inlayHints.filter((o) => o.kind !== InlayHintKind.Parameter);
			return inlayHints;
		}
		setVirtualText(range, inlayHints) {
			let { nvim, doc } = this;
			let buffer = doc.buffer;
			const { maximumLength } = this.config;
			nvim.pauseNotification();
			const end = range.end.line >= doc.lineCount ? -1 : range.end.line + 1;
			buffer.clearNamespace(srcId$1, range.start.line, end);
			let lineInfo = {
				lineNum: 0,
				totalLineLen: 0
			};
			const vitems = [];
			for (const item of inlayHints) {
				const blocks = [];
				let { position } = item;
				if (lineInfo.lineNum !== position.line) lineInfo = {
					lineNum: position.line,
					totalLineLen: 0
				};
				if (maximumLength > 0 && lineInfo.totalLineLen > maximumLength) {
					logger$7.warn(`Inlay hint of ${lineInfo.lineNum} too long, max length: ${maximumLength}, current line total length: ${lineInfo.totalLineLen}`);
					continue;
				}
				let col = byteIndex(this.doc.getline(position.line), position.character) + 1;
				let label = getLabel(item);
				lineInfo.totalLineLen += label.length;
				const over = maximumLength > 0 ? lineInfo.totalLineLen - maximumLength : 0;
				if (over > 0) label = label.slice(0, -over) + "…";
				if (item.paddingLeft) blocks.push([" ", "Normal"]);
				blocks.push([label, getHighlightGroup(item.kind)]);
				if (item.paddingRight) blocks.push([" ", "Normal"]);
				if (this.config.position == "eol") col = 0;
				let opts = {
					line: position.line,
					blocks,
					col,
					hl_mode: "replace"
				};
				if (item.kind == InlayHintKind.Parameter) opts.right_gravity = false;
				vitems.push(opts);
			}
			nvim.call("coc#vtext#set", [
				buffer.id,
				srcId$1,
				vitems,
				false,
				200
			], true);
			nvim.resumeNotification(true, true);
			this._onDidRefresh.fire();
		}
		clearVirtualText() {
			if (srcId$1) this.doc.buffer.clearNamespace(srcId$1);
		}
		dispose() {
			this.clearCache();
		}
	};
}));
//#endregion
//#region src/handler/inlayHint/index.ts
var InlayHintHandler;
var init_inlayHint = __esmMin((() => {
	init_commands$2();
	init_events();
	init_languages();
	init_util$7();
	init_protocol();
	init_window();
	init_workspace$1();
	init_buffer$3();
	InlayHintHandler = class {
		buffers;
		disposables = [];
		constructor(nvim, handler) {
			this.buffers = workspace_default.registerBufferSync((doc) => {
				return new InlayHintBuffer(nvim, doc);
			});
			this.disposables.push(this.buffers);
			workspace_default.onDidChangeConfiguration((e) => {
				for (let item of this.buffers.items) if (e.affectsConfiguration("inlayHint", item.doc)) item.loadConfiguration();
			}, null, this.disposables);
			languages_default.onDidInlayHintRefresh(async (e) => {
				for (let item of this.buffers.items) if (workspace_default.match(e, item.doc.textDocument)) {
					item.clearCache();
					if (languages_default.hasProvider("inlayHint", item.doc.textDocument)) await item.render();
					else item.clearVirtualText();
				}
			}, null, this.disposables);
			events_default.on("InsertLeave", (bufnr) => {
				let item = this.buffers.getItem(bufnr);
				if (item) item.onInsertLeave();
			}, null, this.disposables);
			events_default.on("InsertEnter", (bufnr) => {
				let item = this.buffers.getItem(bufnr);
				if (item) item.onInsertEnter();
			}, null, this.disposables);
			events_default.on("CompleteDone", (_item, _line, bufnr) => {
				let item = this.buffers.getItem(bufnr);
				if (item) item.onCompleteDone();
			}, null, this.disposables);
			commands_default.register({
				id: "document.toggleInlayHint",
				execute: (bufnr) => {
					this.setState("toggle", bufnr);
				}
			}, false, "Toggle inlayHint display of current buffer");
			commands_default.register({
				id: "document.enableInlayHint",
				execute: (bufnr) => {
					this.setState("enable", bufnr);
				}
			}, false, "Enable inlayHint display of current buffer");
			commands_default.register({
				id: "document.disableInlayHint",
				execute: (bufnr) => {
					this.setState("disable", bufnr);
				}
			}, false, "Disable inlayHint display of current buffer");
			handler.addDisposable(import_main$1.Disposable.create(() => {
				disposeAll(this.disposables);
			}));
		}
		setState(method, bufnr) {
			try {
				bufnr = bufnr ?? workspace_default.bufnr;
				workspace_default.getAttachedDocument(bufnr);
				this.getItem(bufnr)[method]();
			} catch (e) {
				window_default.showErrorMessage(e.message);
			}
		}
		getItem(bufnr) {
			return this.buffers.getItem(bufnr);
		}
	};
}));
//#endregion
//#region src/handler/inline.ts
function formatInsertText(text, opts) {
	let lines = text.split(/\r?\n/);
	let tabSize = defaultValue(opts.tabSize, 2);
	let ind = opts.insertSpaces ? " ".repeat(opts.tabSize) : "	";
	lines = lines.map((line) => {
		let space = line.match(/^\s*/)[0];
		let isTab = space.startsWith("	");
		let len = space.length;
		if (isTab && opts.insertSpaces) space = ind.repeat(space.length);
		else if (!isTab && !opts.insertSpaces) space = ind.repeat(space.length / tabSize);
		return space + line.slice(len);
	});
	return lines.join("\n");
}
function getInsertText(item, formatOptions) {
	if (StringValue.isSnippet(item.insertText)) return formatInsertText(new SnippetParser(false).parse(item.insertText.value, true).toString(), formatOptions);
	return formatInsertText(item.insertText, formatOptions);
}
function getInserted(curr, synced, character) {
	if (curr.length < synced.length) return void 0;
	let after = curr.slice(character);
	if (!synced.endsWith(after)) return void 0;
	let start = synced.length - after.length;
	if (!curr.startsWith(synced.slice(0, start))) return void 0;
	return {
		start,
		text: curr.slice(start, character)
	};
}
function getPumInserted(document, cursor) {
	const { line, character } = cursor;
	let synced = toText(document.textDocument.lines[line]);
	let curr = document.getline(cursor.line);
	if (synced === curr) return "";
	let change = getInserted(curr, synced, character);
	return change ? change.text : void 0;
}
function checkInsertedAtBeginning(currentLine, triggerCharacter, inserted, item) {
	if (!item.range) {
		if (StringValue.isSnippet(item.insertText)) return item.insertText.value.startsWith(inserted);
		return item.insertText.startsWith(inserted);
	}
	let current = currentLine.slice(item.range.start.character, triggerCharacter + inserted.length);
	if (StringValue.isSnippet(item.insertText)) return item.insertText.value.startsWith(current);
	return item.insertText.startsWith(current);
}
function fixRange(range, inserted) {
	if (!inserted || !range) return range;
	return Range.create(range.start, Position.create(range.end.line, range.end.character + inserted.length));
}
var logger$6, NAMESPACE$2, InlineSession, InlineCompletion;
var init_inline = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_completion();
	init_events();
	init_languages();
	init_logger$2();
	init_parser();
	init_util$7();
	init_errors();
	init_position();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	logger$6 = createLogger$1("handler-inline");
	NAMESPACE$2 = "inlineSuggest";
	InlineSession = class {
		bufnr;
		cursor;
		items;
		index;
		vtext;
		constructor(bufnr, cursor, items, index = 0, vtext = void 0) {
			this.bufnr = bufnr;
			this.cursor = cursor;
			this.items = items;
			this.index = index;
			this.vtext = vtext;
		}
		get length() {
			return this.items.length;
		}
		get selected() {
			return this.items[this.index];
		}
		clearNamespace() {
			if (this.vtext) {
				workspace_default.nvim.createBuffer(this.bufnr).clearNamespace(NAMESPACE$2);
				this.vtext = void 0;
			}
		}
		get extra() {
			return this.length > 1 ? `(${this.index + 1}/${this.length})` : "";
		}
		get nextIndex() {
			return this.index === this.length - 1 ? 0 : this.index + 1;
		}
		get prevIndex() {
			return this.index === 0 ? this.length - 1 : this.index - 1;
		}
	};
	InlineCompletion = class {
		nvim;
		handler;
		session;
		bufnr;
		tokenSource;
		disposables = [];
		config;
		_applying = false;
		_inserted;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			window_default.onDidChangeActiveTextEditor(() => {
				this.loadConfiguration();
			}, this, this.disposables);
			const triggerOption = { autoTrigger: true };
			workspace_default.onDidChangeTextDocument((e) => {
				if (languages_default.inlineCompletionItemManager.isEmpty === false && this.config.autoTrigger && e.bufnr === defaultValue(window_default.activeTextEditor, {}).bufnr && !this._applying && events_default.insertMode) {
					const wait = this.config.triggerCompletionWait;
					this.trigger(e.bufnr, triggerOption, wait).catch(onUnexpectedError);
				}
			}, null, this.disposables);
			events_default.on("TextChangedI", (bufnr) => {
				if (events_default.pumInserted && !languages_default.inlineCompletionItemManager.isEmpty) {
					const wait = this.config.triggerCompletionWait;
					this.trigger(bufnr, triggerOption, wait).catch(onUnexpectedError);
				}
			}, null, this.disposables);
			events_default.on("ModeChanged", (ev) => {
				if (!ev.new_mode.startsWith("i")) this.cancel();
			}, null, this.disposables);
			events_default.on("InsertCharPre", () => {
				this.cancel();
			}, null, this.disposables);
			events_default.on("LinesChanged", (bufnr) => {
				if (bufnr === this.bufnr) this.cancel();
			}, null, this.disposables);
			workspace_default.onDidCloseTextDocument((e) => {
				if (e.bufnr === this.bufnr) this.cancel();
			}, null, this.disposables);
			commands_default.titles.set("document.checkInlineCompletion", "check inline completion state of current buffer");
			this.handler.addDisposable(commands_default.registerCommand("document.checkInlineCompletion", async () => {
				if (!this.supported) {
					window_default.showWarningMessage(`Inline completion is not supported on current vim ${workspace_default.env.version}`);
					return;
				}
				let bufnr = await this.nvim.eval("bufnr(\"%\")");
				let doc = workspace_default.getDocument(bufnr);
				if (!doc || !doc.attached) {
					window_default.showWarningMessage(`Buffer ${bufnr} is not attached, see ':h coc-document-attached'.`);
					return;
				}
				if (await nvim.createBuffer(bufnr).getVar("coc_inline_disable") == 1) {
					window_default.showWarningMessage(`Trigger inline completion is disabled by b:coc_inline_disable.`);
					return;
				}
				let providers = languages_default.inlineCompletionItemManager.getProviders(doc.textDocument);
				if (providers.length === 0) {
					window_default.showWarningMessage(`Inline completion provider not found for buffer ${bufnr}.`);
					return;
				}
				let names = providers.map((item) => item.provider["__extensionName"] ?? "unknown");
				window_default.showInformationMessage(`Inline completion is supported by ${names.join(", ")}.`);
			}));
		}
		loadConfiguration(e) {
			if (!e || e.affectsConfiguration("inlineSuggest")) {
				let doc = defaultValue(window_default.activeTextEditor, {}).document;
				let config = workspace_default.getConfiguration("inlineSuggest", doc);
				let autoTrigger = defaultValue(config.inspect("autoTrigger").globalValue, true);
				this.config = Object.assign(this.config ?? {}, {
					autoTrigger,
					triggerCompletionWait: defaultValue(config.inspect("triggerCompletionWait").globalValue, 10)
				});
			}
		}
		get supported() {
			return workspace_default.has("patch-9.0.0185") || workspace_default.has("nvim-0.7.0");
		}
		get selected() {
			return this.session?.selected;
		}
		async visible() {
			return !!await this.nvim.call("coc#inline#visible");
		}
		get vtextBufnr() {
			return this.session?.vtext == null ? -1 : this.session.bufnr;
		}
		async trigger(bufnr, option, delay) {
			if (!this.supported) return false;
			this.cancel();
			option = option ?? {};
			let document = workspace_default.getDocument(bufnr);
			if (!document || !document.attached || !languages_default.hasProvider("inlineCompletion", document)) return false;
			let tokenSource = this.tokenSource = new import_main$1.CancellationTokenSource();
			this.bufnr = bufnr;
			this._inserted = void 0;
			let token = tokenSource.token;
			if (delay) await waitWithToken(delay, token);
			if (option.autoTrigger !== true && document.hasChanged) {
				this._applying = true;
				await document.synchronize();
				this._applying = false;
			}
			if (token.isCancellationRequested) return false;
			let state = await this.handler.getCurrentState();
			if (await document.buffer.getVar("coc_inline_disable") == 1 || state.doc.bufnr !== bufnr || !state.mode.startsWith("i") || token.isCancellationRequested) return false;
			let cursor = state.position;
			let triggerPosition = cursor;
			let curr = document.getline(cursor.line);
			if (option.autoTrigger) {
				let inserted = this._inserted = getPumInserted(document, cursor);
				if (inserted == null) return false;
				triggerPosition = Position.create(cursor.line, cursor.character - inserted.length);
			}
			const selectedCompletionInfo = completion_default.selectedCompletionInfo;
			if (selectedCompletionInfo && this._inserted) selectedCompletionInfo.range.end.character -= this._inserted.length;
			let items = await languages_default.provideInlineCompletionItems(document.textDocument, triggerPosition, {
				provider: option.provider,
				selectedCompletionInfo,
				triggerKind: option.autoTrigger ? InlineCompletionTriggerKind.Automatic : InlineCompletionTriggerKind.Invoked
			}, token);
			this.tokenSource = void 0;
			if (!Array.isArray(items) || token.isCancellationRequested) return false;
			items = items.filter((item) => !item.range || positionInRange(triggerPosition, item.range) === 0);
			if (this._inserted) items = items.filter((item) => checkInsertedAtBeginning(curr, triggerPosition.character, this._inserted, item));
			if (items.length === 0) {
				if (!option.autoTrigger && !option.silent) window_default.showWarningMessage(`No inline completion items from provider.`);
				return false;
			}
			this.session = new InlineSession(bufnr, cursor, items);
			await this.insertVtext(items[0]);
			return true;
		}
		async accept(bufnr, kind = "all") {
			if (bufnr !== this.vtextBufnr || !this.selected) return false;
			let item = this.selected;
			let cursor = this.session.cursor;
			let insertedText = this.session.vtext;
			this.cancel();
			let doc = workspace_default.getAttachedDocument(bufnr);
			let insertedLength = 0;
			const itemRange = fixRange(item.range, this._inserted);
			if (StringValue.isSnippet(item.insertText) && kind == "all") {
				let range = defaultValue(itemRange, Range.create(cursor, cursor));
				let text = item.insertText.value;
				if (!itemRange && this._inserted) text = text.slice(this._inserted.length);
				let edit = TextEdit.replace(range, text);
				await commands_default.executeCommand("editor.action.insertSnippet", edit);
			} else {
				let range = Range.create(cursor, cursor);
				if (kind == "word") {
					let total = 0;
					for (let i = 1; i < insertedText.length; i++) if (doc.isWord(insertedText[i])) total = i;
					else break;
					insertedText = insertedText.slice(0, total + 1);
					insertedLength = insertedText.length;
				} else if (kind == "line") insertedLength = insertedText.split("\n")[0].length;
				else {
					insertedText = getInsertText(item, window_default.activeTextEditor.options);
					if (itemRange) range = itemRange;
					else if (this._inserted) insertedText = insertedText.slice(this._inserted.length);
				}
				await doc.applyEdits([TextEdit.replace(range, insertedText)], false, false);
				await window_default.moveTo(getEnd(range.start, insertedText));
			}
			if (item.command) try {
				await commands_default.execute(item.command);
			} catch (err) {
				logger$6.error(`Error on execute command "${item.command.command}"`, err);
			}
			await events_default.fire("InlineAccept", [insertedLength, item]);
			return true;
		}
		async next(bufnr) {
			await this._navigate(true, bufnr);
		}
		async prev(bufnr) {
			await this._navigate(false, bufnr);
		}
		async _navigate(next, bufnr) {
			if (bufnr !== this.vtextBufnr || this.session.length <= 1) return;
			let idx = next ? this.session.nextIndex : this.session.prevIndex;
			this.session.index = idx;
			await this.insertVtext(this.session.selected);
		}
		async insertVtext(item) {
			if (!this.session || !item) return;
			const { bufnr, extra, cursor } = this.session;
			let doc = workspace_default.getDocument(bufnr);
			let formatOptions = window_default.activeTextEditor.options;
			let text = getInsertText(item, formatOptions);
			const line = doc.getline(cursor.line);
			const itemRange = fixRange(item.range, this._inserted);
			if (itemRange && !emptyRange(itemRange)) {
				let current = line.slice(itemRange.start.character, cursor.character);
				text = text.slice(current.length);
				if (comparePosition(cursor, itemRange.end) !== 0) {
					let after = line.slice(cursor.character, itemRange.end.character);
					if (text.endsWith(after)) text = text.slice(0, -after.length);
				}
			} else if (this._inserted) text = text.slice(this._inserted.length);
			const col = byteIndex(line, cursor.character) + 1;
			let shown = await this.nvim.call("coc#inline#_insert", [
				bufnr,
				cursor.line,
				col,
				text.split("\n"),
				extra
			]);
			if (!this.session) return;
			if (shown) {
				this.session.vtext = text;
				this.nvim.redrawVim();
				events_default.fire("InlineShown", [item]);
			} else {
				this.session.clearNamespace();
				this.session = void 0;
			}
		}
		cancel() {
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource.dispose();
				this.tokenSource = void 0;
			}
			if (this.session) {
				this.session.clearNamespace();
				this.session = void 0;
			}
			this.bufnr = void 0;
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/linkedEditing.ts
var debounceTime$2, LinkedEditingHandler;
var init_linkedEditing = __esmMin((() => {
	init_main$2();
	init_textRange();
	init_util$2();
	init_events();
	init_languages();
	init_util$7();
	init_node();
	init_position();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	debounceTime$2 = getConditionValue(200, 10);
	LinkedEditingHandler = class {
		nvim;
		changing = false;
		window;
		bufnr;
		ranges;
		wordPattern;
		tokenSource;
		checkPosition;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.checkPosition = debounce(this._checkPosition, debounceTime$2);
			handler.addDisposable(events_default.on("CursorMoved", (bufnr, cursor) => {
				this.cancel();
				this.checkPosition(bufnr, [cursor[0], cursor[1]]);
			}));
			handler.addDisposable(events_default.on("CursorMovedI", (bufnr, cursor) => {
				this.cancel();
				this.checkPosition(bufnr, [cursor[0], cursor[1]]);
			}));
			handler.addDisposable(window_default.onDidChangeActiveTextEditor(() => {
				this.cancel();
				this.cancelEdit();
			}));
			handler.addDisposable(events_default.on("InsertCharPre", (character, bufnr) => {
				if (bufnr !== this.bufnr) return;
				let doc = workspace_default.getDocument(bufnr);
				if (!this.wordPattern) {
					if (!doc.isWord(character) && character !== "-") this.cancelEdit();
				} else if (!new RegExp(this.wordPattern).test(character)) this.cancelEdit();
			}));
			handler.addDisposable(workspace_default.onDidChangeTextDocument(async (e) => {
				await this.onChange(e);
			}));
		}
		cancelEdit() {
			this.window?.clearMatchGroup("^CocLinkedEditing");
			this.ranges = void 0;
			this.window = void 0;
			this.bufnr = void 0;
		}
		async onChange(e) {
			if (e.bufnr !== this.bufnr || this.changing || !this.ranges) return;
			if (e.contentChanges.length === 0) {
				this.doHighlights();
				return;
			}
			let { text, range } = e.contentChanges[0];
			let affected = this.ranges.filter((r) => {
				if (!rangeIntersect(range, r.range)) return false;
				if (rangeAdjacent(range, r.range)) {
					if (text.includes("\n") || !emptyRange(range)) return false;
				}
				return true;
			});
			if (affected.length == 1 && rangeInRange(range, affected[0].range)) {
				if (text.includes("\n")) {
					this.cancelEdit();
					return;
				}
				await this.applySingleEdit(affected[0], {
					range,
					newText: text
				});
			} else this.cancelEdit();
		}
		async applySingleEdit(textRange, edit) {
			let { bufnr, ranges } = this;
			let doc = workspace_default.getDocument(bufnr);
			ranges.filter((r) => r !== textRange && r.position.line == textRange.position.line).forEach((r) => r.adjustFromEdit(edit));
			let change = getChange(textRange, edit.range, edit.newText);
			let delta = getDelta(change);
			ranges.forEach((r) => r.applyChange(change));
			let edits = ranges.filter((r) => r !== textRange).map((o) => o.textEdit);
			this.changing = true;
			await doc.applyEdits(edits, true, true);
			this.changing = false;
			if (delta != 0) for (let r of ranges) {
				let n = getBeforeCount(r, this.ranges, textRange);
				r.move(n * delta);
			}
			this.doHighlights();
		}
		doHighlights() {
			let { window, ranges, nvim } = this;
			if (window && ranges) {
				nvim.pauseNotification();
				window.clearMatchGroup("^CocLinkedEditing");
				window.highlightRanges("CocLinkedEditing", ranges.map((o) => o.range), 99, true);
				nvim.resumeNotification(true, true);
			}
		}
		_checkPosition(bufnr, cursor) {
			if (events_default.completing || !workspace_default.isAttached(bufnr)) return;
			let doc = workspace_default.getDocument(bufnr);
			if (!workspace_default.getConfiguration("coc.preferences", doc).get("enableLinkedEditing", false) || !languages_default.hasProvider("linkedEditing", doc.textDocument)) return;
			let character = characterIndex(doc.getline(cursor[0] - 1), cursor[1] - 1);
			let position = Position.create(cursor[0] - 1, character);
			if (this.ranges) {
				if (this.ranges.some((r) => positionInRange(position, r.range) == 0)) return;
				this.cancelEdit();
			}
			this.enable(doc, position);
		}
		async enable(doc, position) {
			let textDocument = doc.textDocument;
			let token = (this.tokenSource = new import_main$1.CancellationTokenSource()).token;
			let win = await this.nvim.window;
			let linkedRanges = await languages_default.provideLinkedEdits(textDocument, position, token);
			if (token.isCancellationRequested || !linkedRanges || linkedRanges.ranges.length == 0) return;
			let ranges = linkedRanges.ranges.map((o) => new TextRange(o.start.line, o.start.character, textDocument.getText(o)));
			this.wordPattern = linkedRanges.wordPattern;
			this.bufnr = doc.bufnr;
			this.window = win;
			this.ranges = ranges;
			this.doHighlights();
		}
		cancel() {
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = null;
			}
		}
	};
}));
//#endregion
//#region src/handler/links.ts
function sameLinks(links, other) {
	if (links.length != other.length) return false;
	for (let i = 0; i < links.length; i++) if (!equals(links[i].range, other[i].range)) return false;
	return true;
}
var floatFactory$1, debounceTime$1, NAMESPACE$1, highlightGroup, Links, LinkBuffer;
var init_links = __esmMin((() => {
	init_main$2();
	init_events();
	init_languages();
	init_util$7();
	init_node();
	init_array();
	init_object();
	init_position();
	init_protocol();
	init_window();
	init_workspace$1();
	debounceTime$1 = getConditionValue(200, 10);
	NAMESPACE$1 = "links";
	highlightGroup = "CocLink";
	Links = class {
		nvim;
		handler;
		disposables = [];
		tooltip;
		tokenSource;
		buffers;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.setConfiguration();
			workspace_default.onDidChangeConfiguration(this.setConfiguration, this, this.disposables);
			events_default.on("CursorHold", async () => {
				await this.showTooltip();
			}, null, this.disposables);
			events_default.on(["CursorMoved", "InsertEnter"], () => {
				this.cancel();
			}, null, this.disposables);
			this.buffers = workspace_default.registerBufferSync((doc) => {
				return new LinkBuffer(doc);
			});
			this.disposables.push(this.buffers);
			languages_default.onDidLinksRefresh((selector) => {
				for (let item of this.buffers.items) if (workspace_default.match(selector, item.doc)) item.fetchLinks();
			}, null, this.disposables);
		}
		setConfiguration(e) {
			if (!e || e.affectsConfiguration("links")) {
				this.tooltip = workspace_default.initialConfiguration.get("links.tooltip", false);
				if (e) for (let item of this.buffers.items) item.updateDocumentConfig();
			}
		}
		async showTooltip() {
			if (!this.tooltip) return;
			let link = await this.getCurrentLink();
			if (!link || !link.target) return;
			let text = link.target;
			if (link.tooltip) text += " " + link.tooltip;
			let doc = {
				content: text,
				filetype: "txt"
			};
			if (!floatFactory$1) floatFactory$1 = window_default.createFloatFactory({});
			await floatFactory$1.show([doc]);
		}
		async getLinks() {
			let { doc } = await this.handler.getCurrentState();
			let buf = this.buffers.getItem(doc.bufnr);
			await buf.getLinks();
			return toArray(buf.links);
		}
		async getCurrentLink() {
			let links = await this.getLinks();
			let pos = await window_default.getCursorPosition();
			if (links && links.length) {
				for (let link of links) if (positionInRange(pos, link.range) == 0) {
					if (!link.target) {
						let tokenSource = this.tokenSource = this.tokenSource || new import_main$1.CancellationTokenSource();
						link = await languages_default.resolveDocumentLink(link, this.tokenSource.token);
						this.tokenSource = void 0;
						if (!link.target || tokenSource.token.isCancellationRequested) continue;
					}
					return link;
				}
			}
			let line = await this.nvim.call("getline", ["."]);
			let regex = /\w+?:\/\/[-a-zA-Z0-9@:%._\\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9@:%_\\+.~#?&//=]*/gi;
			let arr;
			let link;
			while ((arr = regex.exec(line)) !== null) {
				let start = arr.index;
				if (start <= pos.character && start + arr[0].length >= pos.character) {
					link = DocumentLink.create(Range.create(pos.line, start, pos.line, start + arr[0].length), arr[0]);
					break;
				}
			}
			return link;
		}
		async openCurrentLink() {
			let link = await this.getCurrentLink();
			if (link) {
				await this.openLink(link);
				return true;
			}
			return false;
		}
		async openLink(link) {
			if (!link.target) throw new Error(`Failed to resolve link target`);
			await workspace_default.openResource(link.target);
		}
		getBuffer(bufnr) {
			return this.buffers.getItem(bufnr);
		}
		cancel() {
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = null;
			}
		}
		dispose() {
			disposeAll(this.disposables);
		}
	};
	LinkBuffer = class {
		doc;
		currentVersion = -1;
		tokenSource;
		_config;
		links = [];
		fetchLinks;
		constructor(doc) {
			this.doc = doc;
			this.fetchLinks = debounce(() => {
				this.getLinks();
			}, debounceTime$1);
			if (this.hasProvider) this.fetchLinks();
		}
		get config() {
			if (this._config) return this._config;
			this.updateDocumentConfig();
			return this._config;
		}
		get hasProvider() {
			return languages_default.hasProvider("documentLink", this.doc);
		}
		updateDocumentConfig() {
			let configuration = workspace_default.getConfiguration("links", this.doc);
			this._config = {
				enable: configuration.get("enable", true),
				highlight: configuration.get("highlight", false)
			};
		}
		onChange(e) {
			if (e.contentChanges.length == 0) this.highlight();
			else {
				this.cancel();
				this.fetchLinks();
			}
		}
		highlight() {
			if (!this.config.highlight || !this.links) return;
			let { links, doc } = this;
			if (isFalsyOrEmpty(links)) this.clearHighlight();
			else {
				let highlights = [];
				links.forEach((link) => {
					doc.addHighlights(highlights, highlightGroup, link.range);
				});
				this.doc.buffer.updateHighlights(NAMESPACE$1, highlights, { priority: 2048 });
			}
		}
		clearHighlight() {
			this.buffer.clearNamespace(NAMESPACE$1);
		}
		get buffer() {
			return this.doc.buffer;
		}
		cancel() {
			this.fetchLinks.clear();
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = null;
			}
		}
		async getLinks() {
			if (!this.hasProvider || !this.config.enable || this.currentVersion === this.doc.version) return;
			this.currentVersion = this.doc.version;
			this.cancel();
			let token = (this.tokenSource = new import_main$1.CancellationTokenSource()).token;
			let links = await languages_default.getDocumentLinks(this.doc.textDocument, token);
			this.tokenSource = void 0;
			if (token.isCancellationRequested || sameLinks(toArray(this.links), toArray(links))) return;
			this.links = toArray(links);
			this.highlight();
		}
		dispose() {
			this.cancel();
		}
	};
}));
//#endregion
//#region src/handler/locations.ts
var LocationsHandler;
var init_locations = __esmMin((() => {
	init_main$2();
	init_esm();
	init_languages();
	init_services$1();
	init_array();
	init_object();
	init_protocol();
	init_window();
	init_workspace$1();
	LocationsHandler = class {
		nvim;
		handler;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
		}
		async request(method, fn) {
			let { doc, position } = await this.handler.getCurrentState();
			this.handler.checkProvider(method, doc.textDocument);
			await doc.synchronize();
			return await this.handler.withRequestToken(method, (token) => {
				return fn(doc.textDocument, position, token);
			}, true);
		}
		async definitions() {
			const { doc, position } = await this.handler.getCurrentState();
			this.handler.checkProvider("definition", doc.textDocument);
			await doc.synchronize();
			const tokenSource = new import_main$1.CancellationTokenSource();
			return languages_default.getDefinition(doc.textDocument, position, tokenSource.token);
		}
		async declarations() {
			const { doc, position } = await this.handler.getCurrentState();
			this.handler.checkProvider("declaration", doc.textDocument);
			await doc.synchronize();
			const tokenSource = new import_main$1.CancellationTokenSource();
			return languages_default.getDeclaration(doc.textDocument, position, tokenSource.token);
		}
		async typeDefinitions() {
			const { doc, position } = await this.handler.getCurrentState();
			this.handler.checkProvider("typeDefinition", doc.textDocument);
			await doc.synchronize();
			const tokenSource = new import_main$1.CancellationTokenSource();
			return languages_default.getTypeDefinition(doc.textDocument, position, tokenSource.token);
		}
		async implementations() {
			const { doc, position } = await this.handler.getCurrentState();
			this.handler.checkProvider("implementation", doc.textDocument);
			await doc.synchronize();
			const tokenSource = new import_main$1.CancellationTokenSource();
			return languages_default.getImplementation(doc.textDocument, position, tokenSource.token);
		}
		async references(excludeDeclaration) {
			const { doc, position } = await this.handler.getCurrentState();
			this.handler.checkProvider("reference", doc.textDocument);
			await doc.synchronize();
			const tokenSource = new import_main$1.CancellationTokenSource();
			return languages_default.getReferences(doc.textDocument, { includeDeclaration: !excludeDeclaration }, position, tokenSource.token);
		}
		async gotoDefinition(openCommand) {
			let definition = await this.request("definition", (doc, position, token) => {
				return languages_default.getDefinition(doc, position, token);
			});
			await this.handleLocations(definition, openCommand);
			return !isFalsyOrEmpty(definition);
		}
		async gotoDeclaration(openCommand) {
			let definition = await this.request("declaration", (doc, position, token) => {
				return languages_default.getDeclaration(doc, position, token);
			});
			await this.handleLocations(definition, openCommand);
			return !isFalsyOrEmpty(definition);
		}
		async gotoTypeDefinition(openCommand) {
			let definition = await this.request("typeDefinition", (doc, position, token) => {
				return languages_default.getTypeDefinition(doc, position, token);
			});
			await this.handleLocations(definition, openCommand);
			return !isFalsyOrEmpty(definition);
		}
		async gotoImplementation(openCommand) {
			let definition = await this.request("implementation", (doc, position, token) => {
				return languages_default.getImplementation(doc, position, token);
			});
			await this.handleLocations(definition, openCommand);
			return !isFalsyOrEmpty(definition);
		}
		async gotoReferences(openCommand, includeDeclaration = true) {
			let definition = await this.request("reference", (doc, position, token) => {
				return languages_default.getReferences(doc, { includeDeclaration }, position, token);
			});
			await this.handleLocations(definition, openCommand);
			return !isFalsyOrEmpty(definition);
		}
		async getTagList() {
			let bufnr = await this.nvim.call("bufnr", "%");
			let doc = workspace_default.getDocument(bufnr);
			if (!doc || !doc.attached) return null;
			let position = await window_default.getCursorPosition();
			let word = await this.nvim.call("expand", "<cword>");
			if (!word) return null;
			if (!languages_default.hasProvider("definition", doc.textDocument)) return null;
			let tokenSource = new import_main$1.CancellationTokenSource();
			let definitions = [];
			try {
				let timeout = workspace_default.initialConfiguration.get("coc.preferences.tagDefinitionTimeout", 0);
				if (timeout > 0) {
					const abort = new Promise((_, rej) => setTimeout(() => rej(/* @__PURE__ */ new Error("timeout")), timeout));
					definitions = await Promise.race([languages_default.getDefinition(doc.textDocument, position, tokenSource.token), abort]);
				} else definitions = await languages_default.getDefinition(doc.textDocument, position, tokenSource.token);
			} catch (e) {
				return null;
			}
			if (!definitions || !definitions.length) return null;
			return definitions.map((location) => {
				let parsedURI = URI.parse(location.uri);
				const filename = parsedURI.scheme == "file" ? parsedURI.fsPath : parsedURI.toString();
				return {
					name: word,
					cmd: `silent keepjumps call coc#cursor#move_to(${location.range.start.line}, ${location.range.start.character})`,
					filename
				};
			});
		}
		/**
		* Send custom request for locations to services.
		*/
		async findLocations(id, method, params, openCommand = false) {
			let { doc, position } = await this.handler.getCurrentState();
			params = params || {};
			Object.assign(params, {
				textDocument: { uri: doc.uri },
				position
			});
			let res = await services_default.sendRequest(id, method, params);
			let locations = this.toLocations(res);
			await this.handleLocations(locations, openCommand);
			return locations.length > 0;
		}
		toLocations(location) {
			let res = [];
			if (location && hasOwnProperty$1(location, "location") && hasOwnProperty$1(location, "children")) {
				let getLocation = (item) => {
					if (!item) return;
					if (Location.is(item.location)) res.push(item.location);
					else if (LocationLink.is(item.location)) {
						let loc = item.location;
						res.push({
							uri: loc.targetUri,
							range: loc.targetSelectionRange,
							targetRange: loc.targetRange
						});
					}
					if (item.children && item.children.length) for (let loc of item.children) getLocation(loc);
				};
				getLocation(location);
				return res;
			}
			if (Location.is(location)) res.push(location);
			else if (LocationLink.is(location)) res.push({
				uri: location.targetUri,
				range: location.targetSelectionRange,
				targetRange: location.targetRange
			});
			else if (Array.isArray(location)) {
				for (let loc of location) if (Location.is(loc)) res.push(loc);
				else if (loc && typeof loc.targetUri === "string") res.push({
					uri: loc.targetUri,
					range: loc.targetSelectionRange,
					targetRange: loc.targetRange
				});
			}
			return res;
		}
		async handleLocations(locations, openCommand) {
			if (!locations) return;
			let len = locations.length;
			if (len == 0) return;
			if (len == 1 && openCommand !== false) {
				let { uri, range } = locations[0];
				await workspace_default.jumpTo(uri, range.start, openCommand);
			} else await workspace_default.showLocations(locations);
		}
	};
}));
//#endregion
//#region src/handler/refactor/changes.ts
var Changes;
var init_changes = __esmMin((() => {
	init_object();
	Changes = class {
		stack = [];
		add(infos) {
			let map = /* @__PURE__ */ new Map();
			for (let info of infos) map.set(info.lnum, info);
			this.stack.push(map);
		}
		checkInsert(lnums) {
			if (!this.stack.length) return void 0;
			let last = this.stack[this.stack.length - 1];
			if (!equals(Array.from(last.keys()).sort((a, b) => a - b), lnums)) return void 0;
			this.stack.pop();
			return Array.from(last.values());
		}
	};
}));
//#endregion
//#region src/handler/refactor/buffer.ts
function adjustRange$1(range, offset) {
	let { start, end } = range;
	return Range.create(start.line - offset, start.character, end.line - offset, end.character);
}
function fixChangeParams(e) {
	let { contentChanges, bufnr, textDocument, original, originalLines, document } = e;
	let { range, text } = contentChanges[0];
	let changes = [{
		range,
		text
	}];
	if (!original) {
		if (emptyRange(range) && range.start.character != 0) {
			let lines = text.split(/\r?\n/);
			let last = lines[lines.length - 1];
			let before = originalLines[range.start.line].slice(0, range.start.character);
			if (last.startsWith("　") && before == last) {
				changes[0].text = before + lines.slice(0, -1).join("\n") + "\n";
				let { start, end } = range;
				changes[0].range = Range.create(start.line, 0, end.line, 0);
			}
		}
	} else {
		let lines = original.split(/\r?\n/);
		let last = lines[lines.length - 1];
		if (last.startsWith("　")) {
			let before = originalLines[range.start.line].slice(0, range.start.character);
			if (before == last) {
				original = before + lines.slice(0, -1).join("\n") + "\n";
				let { start, end } = range;
				changes[0].range = Range.create(start.line, 0, end.line, 0);
			}
		}
		let prev = originalLines[range.start.line - 1];
		let nest = lines.length > 1 ? lines[lines.length - 2] : "";
		if (last == "" && nest.startsWith("　") && prev == nest && range.start.character == 0 && range.end.character == 0) {
			original = prev + "\n" + lines.slice(0, -2).join("\n") + "\n";
			let { start, end } = range;
			changes[0].range = Range.create(start.line - 1, 0, end.line - 1, 0);
		}
	}
	return {
		contentChanges: changes,
		bufnr,
		textDocument,
		document,
		original,
		originalLines
	};
}
var logger$5, RefactorBuffer;
var init_buffer$2 = __esmMin((() => {
	init_main();
	init_main$2();
	init_esm();
	init_logger$2();
	init_highlighter();
	init_util$7();
	init_fs();
	init_lodash();
	init_mutex();
	init_node();
	init_object();
	init_position();
	init_string$1();
	init_textedit();
	init_window();
	init_workspace$1();
	init_changes();
	logger$5 = createLogger$1("handler-refactorBuffer");
	RefactorBuffer = class {
		bufnr;
		srcId;
		nvim;
		config;
		opts;
		_disposed = false;
		_fileItems = [];
		mutex = new Mutex();
		disposables = [];
		matchIds = /* @__PURE__ */ new Set();
		changes;
		changing = false;
		constructor(bufnr, srcId, nvim, config, opts) {
			this.bufnr = bufnr;
			this.srcId = srcId;
			this.nvim = nvim;
			this.config = config;
			this.opts = opts;
			this.changes = new Changes();
			this.disposables.push(workspace_default.registerLocalKeymap(bufnr, "n", "<CR>", this.splitOpen.bind(this), true));
			if (config.showMenu) this.disposables.push(workspace_default.registerLocalKeymap(bufnr, "n", config.showMenu, this.showMenu.bind(this), true));
			workspace_default.onDidChangeTextDocument(this.onDocumentChange, this, this.disposables);
		}
		async showMenu() {
			let res = await window_default.showMenuPicker(["Tab open", "Remove block"]);
			if (res == -1) return;
			let fileRange = await this.searchCurrentRange();
			if (!fileRange) return;
			if (res == 0) {
				let character = (await this.nvim.eval(`strpart(getline('.'), 0 ,col('.') - 1)`)).length;
				let bufname = this.getAbsolutePath(fileRange.filepath);
				this.nvim.call("coc#util#jump", [
					"tabe",
					bufname,
					[fileRange.line, character]
				], true);
			}
			if (res == 1) {
				let range = this.getDeleteRange(fileRange);
				await this.document.applyEdits([TextEdit.del(range)]);
			}
		}
		get fileItems() {
			return this._fileItems;
		}
		getFileItem(uri) {
			let filepath = URI.parse(uri).fsPath;
			return this._fileItems.find((o) => sameFile(o.filepath, filepath));
		}
		getFileRange(lnum) {
			for (let item of this._fileItems) for (let r of item.ranges) if (r.lnum == lnum) return Object.assign(omit$2(r, ["highlights"]), { filepath: item.filepath });
			throw new Error(`File range not found at lnum: ${lnum}`);
		}
		onChange(e) {
			if (this.changing) return;
			if (e.contentChanges.length === 0) {
				this.highlightLineNr();
				this.nvim.redrawVim();
				return;
			}
			let { nvim } = this;
			e = fixChangeParams(e);
			let change = e.contentChanges[0];
			let { original } = e;
			if (change.range.end.line > 2) nvim.call("setbufvar", [
				e.bufnr,
				"&modified",
				1
			], true);
			let { range, text } = change;
			if (lineCountChange(TextEdit.replace(range, text)) == 0) return;
			let edits = [TextEdit.replace(range, text)];
			let addRanges = [];
			if (!emptyRange(range) && !text.includes("　")) {
				let sl = range.start.line;
				let lnums = [];
				let lines = original.split(/\r?\n/);
				for (let i = 0; i < lines.length; i++) {
					let line = lines[i];
					if (line.length > 1 && line.includes("　")) lnums.push(sl + i + 1);
				}
				if (lnums.length) {
					let infos = lnums.map((lnum) => {
						return this.getFileRange(lnum);
					});
					for (let item of this._fileItems) item.ranges = item.ranges.filter((o) => !lnums.includes(o.lnum));
					this.changes.add(infos);
				}
			} else if (emptyRange(range) && text.includes("　")) {
				let lines = text.split(/\r?\n/);
				let lnums = [];
				let sl = range.start.line;
				for (let i = 0; i < lines.length; i++) {
					let line = lines[i];
					if (line.length > 1 && line.includes("　")) lnums.push(sl + i + 1);
				}
				if (lnums.length) {
					let res = this.changes.checkInsert(lnums);
					if (res) addRanges = res;
				}
			} else if (text.includes("　")) {
				edits = this.diffChanges(original, text);
				edits.forEach((e) => {
					e.range = adjustRangePosition(e.range, range.start);
				});
			}
			this.adjustLnums(edits);
			nvim.pauseNotification();
			this.highlightLineNr();
			nvim.resumeNotification(true, true);
			if (addRanges.length) addRanges.forEach((info) => {
				this._fileItems.find((o) => o.filepath == info.filepath).ranges.push(info);
			});
		}
		diffChanges(original, text) {
			let edits = [];
			let diffs = fastDiff(original, text);
			let offset = 0;
			let orig = TextDocument.create("file:///1", "", 0, original);
			for (let i = 0; i < diffs.length; i++) {
				let diff = diffs[i];
				let pos = orig.positionAt(offset);
				if (diff[0] == fastDiff.EQUAL) offset = offset + diff[1].length;
				else if (diff[0] == fastDiff.DELETE) {
					let end = orig.positionAt(offset + diff[1].length);
					if (diffs[i + 1] && diffs[i + 1][0] == fastDiff.INSERT) {
						let text = diffs[i + 1][1];
						edits.push(TextEdit.replace(Range.create(pos, end), text));
						i = i + 1;
					} else edits.push(TextEdit.replace(Range.create(pos, end), ""));
					offset = offset + diff[1].length;
				} else if (diff[0] == fastDiff.INSERT) edits.push(TextEdit.insert(pos, diff[1]));
			}
			return edits;
		}
		/**
		* Handle changes of other buffers.
		*/
		async onDocumentChange(e) {
			if (this.changing || e.contentChanges.length === 0) return;
			let { uri } = e.textDocument;
			let fileItem = this.getFileItem(uri);
			if (!fileItem) return;
			let { range, text } = e.contentChanges[0];
			let lineChange = lineCountChange(TextEdit.replace(range, text));
			let edits = [];
			let deleteIndexes = [];
			for (let i = 0; i < fileItem.ranges.length; i++) {
				let r = fileItem.ranges[i];
				if (range.start.line >= r.start + r.lines.length) continue;
				if (range.end.line < r.start) {
					r.start = r.start + lineChange;
					continue;
				}
				let textDocument = workspace_default.getDocument(uri).textDocument;
				let end = r.start + r.lines.length + lineChange;
				let newLines = textDocument.lines.slice(r.start, end);
				if (!newLines.length) {
					deleteIndexes.push(i);
					let replaceRange = this.getDeleteRange(r);
					edits.push(TextEdit.replace(replaceRange, ""));
				} else {
					r.lines = newLines;
					let replaceRange = this.getReplaceRange(r);
					edits.push(TextEdit.replace(replaceRange, newLines.join("\n")));
				}
			}
			if (deleteIndexes.length) fileItem.ranges = fileItem.ranges.filter((_, i) => !deleteIndexes.includes(i));
			this._fileItems = this._fileItems.filter((o) => o.ranges && o.ranges.length > 0);
			if (edits.length) {
				this.adjustLnums(edits);
				this.changing = true;
				await this.document.applyEdits(edits);
				this.changing = false;
			}
			this.nvim.pauseNotification();
			this.highlightLineNr();
			this.buffer.setOption("modified", false, true);
			await this.nvim.resumeNotification(true);
		}
		adjustLnums(edits) {
			for (let item of this._fileItems) for (let fileRange of item.ranges) {
				let line = fileRange.lnum - 1;
				fileRange.lnum += getChangedLineCount(Position.create(line, 0), edits);
			}
		}
		/**
		* Current changed file ranges
		*/
		async getFileChanges() {
			let changes = [];
			let lines = await this.buffer.lines;
			lines.push("　");
			let arr = [];
			let fsPath;
			let lnum;
			for (let i = 0; i < lines.length; i++) {
				let line = lines[i];
				if (line.startsWith("　")) {
					if (fsPath) {
						changes.push({
							filepath: fsPath,
							lines: arr.slice(),
							lnum
						});
						fsPath = void 0;
						arr = [];
					}
					if (line.length > 1) {
						let ms = line.match(/^\u3000(.*)/);
						if (ms) {
							fsPath = this.getAbsolutePath(ms[1].replace(/\s+$/, ""));
							lnum = i + 1;
							arr = [];
						}
					}
				} else arr.push(line);
			}
			return changes;
		}
		/**
		* Open line under cursor in split window
		*/
		async splitOpen() {
			let { nvim } = this;
			let valid = await nvim.createWindow(this.opts.fromWinid).valid;
			let character = (await nvim.eval(`strpart(getline('.'), 0 ,col('.') - 1)`)).length;
			let fileRange = await this.searchCurrentRange();
			if (fileRange) {
				let bufname = this.getAbsolutePath(fileRange.filepath);
				nvim.pauseNotification();
				if (valid) {
					nvim.call("win_gotoid", [this.opts.fromWinid], true);
					this.nvim.call("coc#util#jump", [
						"edit",
						bufname,
						[fileRange.line, character]
					], true);
				} else this.nvim.call("coc#util#jump", [
					"belowright vs",
					bufname,
					[fileRange.line, character]
				], true);
				nvim.command("normal! zz", true);
				await nvim.resumeNotification(true);
				if (!valid) this.opts.fromWinid = await nvim.call("win_getid");
			}
		}
		async searchCurrentRange() {
			let { nvim } = this;
			let lines = await nvim.eval("getline(1,line(\".\"))");
			let len = lines.length;
			for (let i = 0; i < len; i++) if (lines[len - i - 1].match(/^\u3000(.+)/)) {
				let r = this.getFileRange(len - i);
				return Object.assign({ line: r.start + (i == 0 ? 1 : i) - 1 }, r);
			}
		}
		/**
		* Add FileItem to refactor buffer.
		*/
		async addFileItems(items) {
			if (this._disposed) return;
			let { cwd } = this.opts;
			let { document } = this;
			const release = await this.mutex.acquire();
			try {
				await document.synchronize();
				let count = document.lineCount;
				let highlighter = new Highlighter();
				let hlRanges = [];
				for (let item of items) {
					let ranges = [];
					for (let range of item.ranges) {
						highlighter.addLine("　");
						highlighter.addLine("　");
						let lnum = count + highlighter.length;
						highlighter.addText(`${isParentFolder(cwd, item.filepath) ? path$5.relative(cwd, item.filepath) : item.filepath}`);
						let n = String(range.start + 1).length + String(range.end).length + 4;
						if (!this.srcId) highlighter.addText(" ".repeat(n));
						let base = 0 - highlighter.length - count;
						if (range.highlights) hlRanges.push(...range.highlights.map((r) => adjustRange$1(r, base)));
						let { lines, start, end, highlights } = range;
						if (!lines) lines = await this.getLines(item.filepath, start, end);
						ranges.push({
							lines,
							lnum,
							start,
							highlights
						});
						highlighter.addLines(lines);
					}
					if (ranges.length) {
						let newItem = {
							filepath: item.filepath,
							ranges
						};
						let fileItem = this._fileItems.find((o) => o.filepath == item.filepath);
						if (fileItem) fileItem.ranges.push(...newItem.ranges);
						else this._fileItems.push(newItem);
					}
				}
				let { nvim, buffer } = this;
				this.changing = true;
				nvim.pauseNotification();
				highlighter.render(buffer, count);
				this.highlightLineNr();
				buffer.setOption("modified", false, true);
				buffer.setOption("undolevels", 1e3, true);
				if (count == 2 && hlRanges.length) {
					let pos = hlRanges[0].start;
					nvim.call("coc#cursor#move_to", [pos.line, pos.character], true);
				}
				await nvim.resumeNotification(true);
				await document.patchChange();
				this.changing = false;
				await window_default.cursors.addRanges(hlRanges);
			} catch (e) {
				this.changing = false;
				logger$5.error(`Error on add file item:`, e);
			}
			release();
		}
		findRange(filepath, lnum) {
			let range = this.fileItems.find((o) => sameFile(this.getAbsolutePath(o.filepath), filepath)).ranges.find((o) => o.lnum == lnum);
			if (!range) throw new Error(`File range not found at lnum: ${lnum}`);
			return range;
		}
		/**
		* Save changes to buffers/files, return false when no change made.
		*/
		async save() {
			let { nvim } = this;
			let doc = this.document;
			let { buffer } = doc;
			await doc.patchChange();
			let changes = await this.getFileChanges();
			if (!changes) return;
			changes.sort((a, b) => a.lnum - b.lnum);
			let fileChanges = [];
			for (let i = 0; i < changes.length; i++) {
				let change = changes[i];
				let range = this.findRange(change.filepath, change.lnum);
				if (equals(range.lines, change.lines)) continue;
				fileChanges.push(Object.assign({
					start: range.start,
					end: range.start + range.lines.length
				}, change));
				range.lines = change.lines;
			}
			if (fileChanges.length == 0) {
				await window_default.showInformationMessage("No change.");
				await buffer.setOption("modified", false);
				return false;
			}
			let changeMap = {};
			for (let change of fileChanges) {
				let uri = URI.file(change.filepath).toString();
				let edits = changeMap[uri] || [];
				edits.push({
					range: Range.create(change.start, 0, change.end, 0),
					newText: change.lines.join("\n") + "\n"
				});
				changeMap[uri] = edits;
			}
			this.changing = true;
			await workspace_default.applyEdit({ changes: changeMap });
			this.changing = false;
			for (let item of this.fileItems) {
				let edits = changeMap[URI.file(this.getAbsolutePath(item.filepath)).toString()];
				if (edits && edits.length > 0) item.ranges.forEach((r) => {
					r.start += getChangedLineCount(Position.create(r.start, 0), edits);
				});
			}
			nvim.pauseNotification();
			buffer.setOption("modified", false, true);
			if (this.config.saveToFile) nvim.command("silent noa wa", true);
			this.highlightLineNr();
			await nvim.resumeNotification();
			return true;
		}
		async getLines(fsPath, start, end) {
			let uri = URI.file(fsPath).toString();
			let doc = workspace_default.getDocument(uri);
			if (doc) return doc.getLines(start, end);
			return await readFileLines(fsPath, start, end - 1);
		}
		getAbsolutePath(filepath) {
			if (path$5.isAbsolute(filepath)) return filepath;
			return path$5.join(this.opts.cwd, filepath);
		}
		/**
		* Use conceal/virtual text to add lineNr
		*/
		highlightLineNr() {
			let { fileItems, nvim, srcId, bufnr } = this;
			let { winid, cwd } = this.opts;
			let info = {};
			if (srcId) {
				nvim.call("nvim_buf_clear_namespace", [
					bufnr,
					srcId,
					0,
					-1
				], true);
				for (let item of fileItems) for (let range of item.ranges) {
					let end = range.start + range.lines.length;
					let text = `${range.start + 1}:${end}`;
					info[range.lnum] = [range.start + 1, end];
					nvim.call("nvim_buf_set_virtual_text", [
						bufnr,
						srcId,
						range.lnum - 1,
						[[text, "LineNr"]],
						{}
					], true);
				}
			} else {
				if (this.matchIds.size) {
					nvim.call("coc#highlight#clear_matches", [winid, Array.from(this.matchIds)], true);
					this.matchIds.clear();
				}
				let id = 2e3;
				for (let item of fileItems) {
					let col = byteLength(`${cwd ? path$5.relative(cwd, item.filepath) : item.filepath}`) + 1;
					for (let range of item.ranges) {
						let end = range.start + range.lines.length;
						let text = `:${range.start + 1}:${end}`;
						for (let i = 0; i < text.length; i++) {
							let ch = text[i];
							this.matchIds.add(id);
							info[range.lnum] = [range.start + 1, end];
							nvim.call("matchaddpos", [
								"Conceal",
								[[range.lnum, col + i]],
								99,
								id,
								{
									conceal: ch,
									window: winid
								}
							], true);
							id++;
						}
					}
				}
			}
			this.buffer.setVar("line_infos", info, true);
		}
		getDeleteRange(r) {
			let { document } = this;
			let start = r.lnum - 1;
			let end;
			let total = document.lineCount;
			for (let i = start; i < total; i++) {
				if (i + 1 == total) {
					end = Position.create(total, 0);
					break;
				}
				let line = document.getline(i);
				if (line === "　") {
					end = Position.create(i + 1, 0);
					break;
				}
				if (i != start && line.startsWith("　")) {
					end = Position.create(i, 0);
					break;
				}
			}
			return Range.create(Position.create(start, 0), end);
		}
		getReplaceRange(r) {
			let { document } = this;
			let start = r.lnum;
			let end;
			let total = document.lineCount;
			for (let i = start; i < total; i++) {
				let line = document.getline(i);
				if (i + 1 == total) {
					end = Position.create(i, line.length);
					break;
				}
				if (document.getline(i + 1).startsWith("　")) {
					end = Position.create(i, line.length);
					break;
				}
			}
			return Range.create(Position.create(start, 0), end);
		}
		get valid() {
			return this.buffer.valid;
		}
		get buffer() {
			return this.nvim.createBuffer(this.bufnr);
		}
		get document() {
			return workspace_default.getDocument(this.bufnr);
		}
		dispose() {
			this._disposed = true;
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/refactor/search.ts
function getPathFromArgs(args) {
	if (args.length < 2) return void 0;
	let len = args.length;
	if (args[len - 1].startsWith("-")) return void 0;
	if (args[len - 2].startsWith("-")) return void 0;
	return args[len - 1];
}
var spawn, logger$4, defaultArgs, controlCode, Task, Search;
var init_search = __esmMin((() => {
	init_main$2();
	init_logger$2();
	init_highlighter();
	init_ansiparse();
	init_mutex();
	init_node();
	init_window();
	({spawn} = child_process$1);
	logger$4 = createLogger$1("handler-search");
	defaultArgs = [
		"--color",
		"ansi",
		"--colors",
		"path:fg:black",
		"--colors",
		"line:fg:green",
		"--colors",
		"match:fg:red",
		"--no-messages",
		"--heading",
		"-n"
	];
	controlCode = "\x1B";
	Task = class extends events.EventEmitter {
		process;
		start(cmd, args, cwd) {
			this.process = spawn(cmd, args, {
				cwd,
				shell: process.platform === "win32"
			});
			this.process.on("error", (e) => {
				this.emit("error", e.message);
			});
			const rl = readline.createInterface(this.process.stdout);
			let start;
			let fileItem;
			let lines = [];
			let highlights = [];
			let create = true;
			rl.on("line", (content) => {
				if (content.includes(controlCode)) {
					let items = ansiparse(content);
					if (items.length == 0) return;
					if (items[0].foreground == "black") {
						fileItem = {
							filepath: path$5.join(cwd, items[0].text),
							ranges: []
						};
						return;
					}
					if (items[0].foreground == "green") {
						let lnum = parseInt(items[0].text, 10) - 1;
						let padlen = items[0].text.length + 1;
						if (create) {
							start = lnum;
							create = false;
						}
						let line = "";
						for (let item of items) {
							if (item.foreground == "red") {
								let l = lnum - start;
								let c = line.length - padlen;
								highlights.push(Range.create(l, c, l, c + item.text.length));
							}
							line += item.text;
						}
						let currline = line.slice(padlen);
						lines.push(currline);
					}
				} else {
					let fileEnd = content.trim().length == 0;
					if (fileItem && (fileEnd || content.trim() == "--")) fileItem.ranges.push({
						lines,
						highlights,
						start
					});
					if (fileEnd) {
						this.emit("item", fileItem);
						fileItem = null;
					}
					lines = [];
					highlights = [];
					create = true;
				}
			});
			rl.on("close", () => {
				if (fileItem) {
					if (lines.length) fileItem.ranges.push({
						lines,
						highlights,
						start
					});
					this.emit("item", fileItem);
				}
				lines = highlights = fileItem = null;
				this.emit("end");
			});
		}
		dispose() {
			if (this.process) this.process.kill();
		}
	};
	Search = class {
		nvim;
		cmd;
		task;
		constructor(nvim, cmd = "rg") {
			this.nvim = nvim;
			this.cmd = cmd;
		}
		run(args, cwd, refactorBuf) {
			let { nvim, cmd } = this;
			let { afterContext, beforeContext } = refactorBuf.config;
			let argList = [
				"-A",
				afterContext.toString(),
				"-B",
				beforeContext.toString()
			].concat(defaultArgs, args);
			let p = getPathFromArgs(args);
			if (p) argList.pop();
			argList.push("--", p ? path$5.isAbsolute(p) ? p : `./${p.replace(/^\.\//, "")}` : "./");
			this.task = new Task();
			this.task.start(cmd, argList, cwd);
			let mutex = new Mutex();
			let files = 0;
			let matches = 0;
			let start = Date.now();
			let fileItems = [];
			const addFileItems = async () => {
				if (fileItems.length == 0) return;
				let items = fileItems.slice();
				fileItems = [];
				const release = await mutex.acquire();
				try {
					await refactorBuf.addFileItems(items);
				} catch (e) {
					logger$4.error(e);
				}
				release();
			};
			return new Promise((resolve, reject) => {
				let interval = setInterval(addFileItems, 300);
				this.task.on("item", async (fileItem) => {
					files++;
					matches = matches + fileItem.ranges.reduce((p, r) => p + r.highlights.length, 0);
					fileItems.push(fileItem);
				});
				this.task.on("error", (message) => {
					clearInterval(interval);
					window_default.showErrorMessage(`Error on command "${cmd}": ${message}`);
					this.task = null;
					reject(new Error(message));
				});
				this.task.on("end", async () => {
					clearInterval(interval);
					try {
						await addFileItems();
						(await mutex.acquire())();
						this.task.removeAllListeners();
						this.task = null;
						let buf = refactorBuf.buffer;
						if (buf) {
							nvim.pauseNotification();
							if (files == 0) {
								buf.setLines(["No match found"], {
									start: 1,
									end: 2,
									strictIndexing: false
								}, true);
								buf.addHighlight({
									line: 1,
									srcId: -1,
									colEnd: -1,
									colStart: 0,
									hlGroup: "Error"
								});
								buf.setOption("modified", false, true);
							} else {
								let highlighter = new Highlighter();
								highlighter.addText("Files", "MoreMsg");
								highlighter.addText(": ");
								highlighter.addText(`${files} `, "Number");
								highlighter.addText("Matches", "MoreMsg");
								highlighter.addText(": ");
								highlighter.addText(`${matches} `, "Number");
								highlighter.addText("Duration", "MoreMsg");
								highlighter.addText(": ");
								highlighter.addText(`${Date.now() - start}ms`, "Number");
								highlighter.render(buf, 1, 2);
							}
							buf.setOption("modified", false, true);
							nvim.resumeNotification(false, true);
						}
					} catch (e) {
						reject(e);
						return;
					}
					resolve();
				});
			});
		}
		abort() {
			this.task?.dispose();
		}
	};
}));
//#endregion
//#region src/handler/refactor/index.ts
function adjustRange(range, offset) {
	let { start, end } = range;
	return Range.create(start.line - offset, start.character, end.line - offset, end.character);
}
var name, refactorId, srcId, Refactor;
var init_refactor = __esmMin((() => {
	init_main$2();
	init_esm();
	init_events();
	init_languages();
	init_util$7();
	init_fs();
	init_position();
	init_protocol();
	init_textedit();
	init_workspace$1();
	init_buffer$2();
	init_search();
	name = "__coc_refactor__";
	refactorId = 0;
	Refactor = class {
		nvim;
		handler;
		buffers = /* @__PURE__ */ new Map();
		config;
		disposables = [];
		_onCreate = new import_main$1.Emitter();
		onCreate = this._onCreate.event;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.setConfiguration();
			workspace_default.onDidChangeConfiguration(this.setConfiguration, this, this.disposables);
			events_default.on("BufUnload", (bufnr) => {
				let buf = this.buffers.get(bufnr);
				if (buf) {
					buf.dispose();
					this.buffers.delete(bufnr);
				}
			}, null, this.disposables);
			workspace_default.onDidChangeTextDocument((e) => {
				let buf = this.buffers.get(e.bufnr);
				if (buf) buf.onChange(e);
			}, null, this.disposables);
		}
		has(bufnr) {
			return this.buffers.has(bufnr);
		}
		setConfiguration(e) {
			if (e && !e.affectsConfiguration("refactor")) return;
			let config = workspace_default.getConfiguration("refactor", null);
			this.config = Object.assign(this.config || {}, {
				afterContext: config.get("afterContext", 3),
				beforeContext: config.get("beforeContext", 3),
				openCommand: config.get("openCommand", "vsplit"),
				saveToFile: config.get("saveToFile", true),
				showMenu: config.get("showMenu", "<Tab>")
			});
		}
		/**
		* Refactor of current symbol
		*/
		async doRefactor() {
			let { doc, position } = await this.handler.getCurrentState();
			if (!languages_default.hasProvider("rename", doc.textDocument)) throw new Error(`Rename provider not found for current buffer`);
			await doc.synchronize();
			let edit = await this.handler.withRequestToken("refactor", async (token) => {
				let res = await languages_default.prepareRename(doc.textDocument, position, token);
				if (token.isCancellationRequested) return null;
				if (res === false) throw new Error(`Provider returns null on prepare, unable to rename at current position`);
				let edit = await languages_default.provideRenameEdits(doc.textDocument, position, "NewName", token);
				if (token.isCancellationRequested) return null;
				if (!edit) throw new Error("Provider returns null for rename edits.");
				return edit;
			});
			if (edit) await this.fromWorkspaceEdit(edit, doc.filetype);
		}
		/**
		* Search by rg
		*/
		async search(args) {
			let buf = await this.createRefactorBuffer();
			let cwd = await this.nvim.call("getcwd", []);
			await new Search(this.nvim).run(args, cwd, buf);
		}
		async save(bufnr) {
			let buf = this.buffers.get(bufnr);
			if (buf) return await buf.save();
		}
		getBuffer(bufnr) {
			return this.buffers.get(bufnr);
		}
		/**
		* Create initialized refactor buffer
		*/
		async createRefactorBuffer(filetype, conceal = false) {
			let { nvim } = this;
			let [fromWinid, cwd] = await nvim.eval("[win_getid(),getcwd()]");
			let { openCommand } = this.config;
			if (!nvim.isVim && !srcId) srcId = await this.nvim.createNamespace("coc-refactor");
			nvim.pauseNotification();
			nvim.command(`${openCommand} ${name}${refactorId++}`, true);
			nvim.command(`setl buftype=acwrite nobuflisted bufhidden=wipe nofen wrap conceallevel=2 concealcursor=n`, true);
			nvim.command(`setl undolevels=-1 nolist nospell noswapfile foldmethod=expr foldexpr=coc#util#refactor_foldlevel(v:lnum)`, true);
			nvim.command(`setl foldtext=coc#util#refactor_fold_text(v:foldstart)`, true);
			nvim.call("setline", [1, ["Save current buffer to make changes", "　"]], true);
			nvim.call("matchadd", ["Comment", "\\%1l"], true);
			nvim.call("matchadd", ["Conceal", "^\\%u3000"], true);
			nvim.call("matchadd", ["Label", "^\\%u3000\\zs\\S\\+"], true);
			nvim.command("setl nomod", true);
			if (filetype) nvim.command(`runtime! syntax/${filetype}.vim`, true);
			nvim.call("coc#util#do_autocmd", ["CocRefactorOpen"], true);
			await nvim.resumeNotification();
			let [bufnr, win] = await nvim.eval("[bufnr(\"%\"),win_getid()]");
			let opts = {
				fromWinid,
				winid: win,
				cwd
			};
			await workspace_default.document;
			let buf = new RefactorBuffer(bufnr, conceal ? void 0 : srcId, this.nvim, this.config, opts);
			this.buffers.set(bufnr, buf);
			return buf;
		}
		/**
		* Create refactor buffer from lines
		*/
		async fromLines(lines) {
			let buf = await this.createRefactorBuffer();
			await buf.buffer.setLines(lines, {
				start: 0,
				end: -1,
				strictIndexing: false
			});
			return buf;
		}
		/**
		* Create refactor buffer from locations
		*/
		async fromLocations(locations, filetype) {
			if (!locations || locations.length == 0) return void 0;
			let changes = {};
			let edit = { changes };
			for (let location of locations) {
				let edits = changes[location.uri] || [];
				edits.push({
					range: location.range,
					newText: ""
				});
				changes[location.uri] = edits;
			}
			return await this.fromWorkspaceEdit(edit, filetype);
		}
		/**
		* Start refactor from workspaceEdit
		*/
		async fromWorkspaceEdit(edit, filetype) {
			if (!edit || emptyWorkspaceEdit(edit)) return void 0;
			let items = [];
			let { beforeContext, afterContext } = this.config;
			let { changes, documentChanges } = edit;
			const rangesMap = /* @__PURE__ */ new Map();
			if (documentChanges) {
				for (let change of documentChanges || []) if (TextDocumentEdit.is(change)) {
					let { textDocument, edits } = change;
					rangesMap.set(textDocument.uri, edits.map((o) => o.range));
				}
			} else if (changes) for (let [uri, edits] of Object.entries(changes)) rangesMap.set(uri, edits.map((o) => o.range));
			for (let [key, editRanges] of rangesMap.entries()) {
				let max = await this.getLineCount(key);
				let ranges = [];
				let start = null;
				let end = null;
				let highlights = [];
				editRanges.sort(compareRangesUsingStarts);
				for (let range of editRanges) {
					let { line } = range.start;
					let s = Math.max(0, line - beforeContext);
					if (start != null && s < end) {
						end = Math.min(max, line + afterContext + 1);
						highlights.push(adjustRange(range, start));
					} else {
						if (start != null) ranges.push({
							start,
							end,
							highlights
						});
						start = s;
						end = Math.min(max, line + afterContext + 1);
						highlights = [adjustRange(range, start)];
					}
				}
				if (start != null) ranges.push({
					start,
					end,
					highlights
				});
				items.push({
					ranges,
					filepath: URI.parse(key).fsPath
				});
			}
			let buf = await this.createRefactorBuffer(filetype);
			await buf.addFileItems(items);
			return buf;
		}
		async getLineCount(uri) {
			let doc = workspace_default.getDocument(uri);
			if (doc) return doc.lineCount;
			return await getFileLineCount(URI.parse(uri).fsPath);
		}
		reset() {
			for (let buf of this.buffers.values()) buf.dispose();
			this.buffers.clear();
		}
		dispose() {
			this._onCreate.dispose();
			this.buffers.clear();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/rename.ts
var Rename;
var init_rename = __esmMin((() => {
	init_main$2();
	init_languages();
	init_position();
	init_protocol();
	init_window();
	init_workspace$1();
	Rename = class {
		nvim;
		handler;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
		}
		async getWordEdit() {
			let { doc, position } = await this.handler.getCurrentState();
			let range = doc.getWordRangeAtPosition(position);
			if (!range || emptyRange(range)) return null;
			let curname = doc.textDocument.getText(range);
			if (languages_default.hasProvider("rename", doc.textDocument)) {
				await doc.synchronize();
				let requestTokenSource = new import_main$1.CancellationTokenSource();
				if (await languages_default.prepareRename(doc.textDocument, position, requestTokenSource.token) !== false) {
					let newName = curname.startsWith("a") ? "b" : "a";
					let edit = await languages_default.provideRenameEdits(doc.textDocument, position, newName, requestTokenSource.token);
					if (edit) return edit;
				}
			}
			window_default.showInformationMessage("Rename provider not found, extract word ranges from current buffer");
			let ranges = doc.getSymbolRanges(curname);
			return { changes: { [doc.uri]: ranges.map((r) => ({
				range: r,
				newText: curname
			})) } };
		}
		async rename(newName) {
			let { doc, position } = await this.handler.getCurrentState();
			this.handler.checkProvider("rename", doc.textDocument);
			await doc.synchronize();
			let token = new import_main$1.CancellationTokenSource().token;
			let res = await languages_default.prepareRename(doc.textDocument, position, token);
			if (res === false) {
				window_default.showWarningMessage("Invalid position for rename");
				return false;
			}
			let curname;
			if (!newName) {
				if (Range.is(res)) {
					curname = doc.textDocument.getText(res);
					await window_default.moveTo(res.start);
				} else if (res && typeof res.placeholder === "string") curname = res.placeholder;
				else curname = await this.nvim.eval("expand(\"<cword>\")");
				const config = workspace_default.getConfiguration("coc.preferences", null);
				newName = await window_default.requestInput("New name", config.get("renameFillCurrent", true) ? curname : "");
			}
			if (newName === "") window_default.showWarningMessage("Empty word, rename canceled");
			if (!newName) return false;
			let edit = await languages_default.provideRenameEdits(doc.textDocument, position, newName, token);
			if (token.isCancellationRequested || !edit) return false;
			await workspace_default.applyEdit(edit);
			return true;
		}
	};
}));
//#endregion
//#region src/handler/selectionRange.ts
var SelectionRangeHandler;
var init_selectionRange = __esmMin((() => {
	init_main$2();
	init_languages();
	init_array();
	init_object();
	init_position();
	init_window();
	SelectionRangeHandler = class {
		nvim;
		handler;
		selectionRange = null;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
		}
		async getSelectionRanges() {
			let { doc, position } = await this.handler.getCurrentState();
			this.handler.checkProvider("selectionRange", doc.textDocument);
			await doc.synchronize();
			return await this.handler.withRequestToken("selection ranges", (token) => {
				return languages_default.getSelectionRanges(doc.textDocument, [position], token);
			});
		}
		async selectRange(visualmode, forward) {
			let { doc } = await this.handler.getCurrentState();
			this.handler.checkProvider("selectionRange", doc.textDocument);
			let positions = [];
			if (!forward && (!this.selectionRange || !visualmode)) return;
			if (visualmode) {
				let range = await window_default.getSelectedRange(visualmode);
				positions.push(range.start, range.end);
			} else {
				let position = await window_default.getCursorPosition();
				positions.push(position);
			}
			if (!forward) {
				let curr = Range.create(positions[0], positions[1]);
				let { selectionRange } = this;
				while (selectionRange && selectionRange.parent) {
					if (equals(selectionRange.parent.range, curr)) break;
					selectionRange = selectionRange.parent;
				}
				if (selectionRange && selectionRange.parent) await window_default.selectRange(selectionRange.range);
				return;
			}
			await doc.synchronize();
			let selectionRanges = await this.handler.withRequestToken("selection ranges", (token) => {
				return languages_default.getSelectionRanges(doc.textDocument, positions, token);
			});
			if (isFalsyOrEmpty(selectionRanges)) return false;
			let selectionRange;
			if (selectionRanges.length == 1) selectionRange = selectionRanges[0];
			else {
				let end = positions[1] ?? positions[0];
				let r = Range.create(positions[0], end);
				selectionRange = selectionRanges[0];
				while (selectionRange) {
					if (equals(r, selectionRange.range)) {
						selectionRange = selectionRange.parent;
						continue;
					}
					if (positionInRange(positions[0], selectionRange.range) == 0 && positionInRange(end, selectionRange.range) == 0) break;
					selectionRange = selectionRange.parent;
				}
			}
			if (!selectionRange) return false;
			this.selectionRange = selectionRanges[0];
			await window_default.selectRange(selectionRange.range);
			return true;
		}
	};
}));
//#endregion
//#region src/handler/semanticTokens/buffer.ts
function toHighlightPart(token) {
	if (!token) return "";
	if (highlightGroupMap.has(token)) return highlightGroupMap.get(token);
	let chars = [];
	for (let i = 0; i < token.length; i++) {
		let ch = token[i];
		ch = isHighlightGroupCharCode(ch.charCodeAt(0)) ? ch : "_";
		chars.push(i == 0 ? ch.toUpperCase() : ch);
	}
	let part = chars.join("");
	highlightGroupMap.set(token, part);
	return part;
}
var logger$3, yieldEveryMilliseconds, HLGROUP_PREFIX, NAMESPACE, debounceInterval, requestDelay, highlightGroupMap, SemanticTokensBuffer;
var init_buffer$1 = __esmMin((() => {
	init_main$2();
	init_languages();
	init_logger$2();
	init_regions();
	init_util$7();
	init_array();
	init_errors();
	init_numbers();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	logger$3 = createLogger$1("semanticTokens-buffer");
	yieldEveryMilliseconds = getConditionValue(15, 5);
	HLGROUP_PREFIX = "CocSem";
	NAMESPACE = "semanticTokens";
	debounceInterval = getConditionValue(100, 20);
	requestDelay = getConditionValue(500, 20);
	highlightGroupMap = /* @__PURE__ */ new Map();
	SemanticTokensBuffer = class {
		nvim;
		doc;
		staticConfig;
		_config;
		_dirty = false;
		_version;
		regions = new Regions();
		tokenSource;
		rangeTokenSource;
		previousResults;
		_highlights;
		_onDidRefresh = new import_main$1.Emitter();
		onDidRefresh = this._onDidRefresh.event;
		constructor(nvim, doc, staticConfig) {
			this.nvim = nvim;
			this.doc = doc;
			this.staticConfig = staticConfig;
			if (this.hasProvider) this.doHighlight().catch(onUnexpectedError);
		}
		get config() {
			if (this._config) return this._config;
			this.loadConfiguration();
			return this._config;
		}
		loadConfiguration() {
			let config = workspace_default.getConfiguration("semanticTokens", this.doc);
			let changed = this._config != null && this._config.enable != config.enable;
			this._config = {
				enable: config.get("enable"),
				highlightPriority: config.get("highlightPriority"),
				incrementTypes: config.get("incrementTypes"),
				combinedModifiers: config.get("combinedModifiers")
			};
			if (changed) if (this._config.enable) this.forceHighlight().catch(onUnexpectedError);
			else this.clearHighlight();
		}
		get configEnabled() {
			let { enable } = this.config;
			let { filetypes } = this.staticConfig;
			if (Array.isArray(filetypes)) return filetypes.includes("*") || filetypes.includes(this.doc.filetype);
			return enable;
		}
		get bufnr() {
			return this.doc.bufnr;
		}
		onChange() {
			this.doHighlight().catch(onUnexpectedError);
		}
		onTextChange() {
			this._version = void 0;
			this.cancel();
		}
		async forceHighlight() {
			this.clearHighlight();
			await this.doHighlight(true, 0);
		}
		async onShown(winid) {
			if (!this.enabled) return;
			await this.doHighlight(false, debounceInterval, winid);
		}
		async onWinScroll(winid) {
			if (!this.shouldHighlight) return;
			this.cancel(true);
			let token = (this.rangeTokenSource = new import_main$1.CancellationTokenSource()).token;
			await waitWithToken(debounceInterval, token);
			if (token.isCancellationRequested) return;
			if (this.shouldRangeHighlight) await this.doRangeHighlight(winid, void 0, token);
			else await this.highlightRegions(winid, token);
		}
		/**
		* Highlight the span without check regions
		*/
		async onCursorHold(winid, lnum) {
			if (!this.enabled) return;
			this.cancel(true);
			let token = (this.rangeTokenSource = new import_main$1.CancellationTokenSource()).token;
			let height = workspace_default.env.lines;
			let span = [Math.max(0, lnum - height), Math.min(this.doc.lineCount, lnum + height)];
			if (this.shouldRangeHighlight) await this.doRangeHighlight(winid, span, token);
			else if (this.highlights) await this.addHighlights(this.highlights, span, token);
		}
		get hasProvider() {
			return languages_default.hasProvider("semanticTokens", this.doc) || languages_default.hasProvider("semanticTokensRange", this.doc);
		}
		get hasLegend() {
			let { textDocument } = this.doc;
			return languages_default.getLegend(textDocument) != null || languages_default.getLegend(textDocument, true) != null;
		}
		get rangeProviderOnly() {
			return !languages_default.hasProvider("semanticTokens", this.doc) && languages_default.hasProvider("semanticTokensRange", this.doc);
		}
		get shouldRangeHighlight() {
			let { textDocument } = this.doc;
			return languages_default.hasProvider("semanticTokensRange", textDocument) && this.previousResults == null;
		}
		/**
		* Get current highlight items
		*/
		get highlights() {
			if (!this._highlights) return void 0;
			return this._highlights[1];
		}
		get buffer() {
			return this.nvim.createBuffer(this.bufnr);
		}
		get enabled() {
			if (!this.configEnabled || !this.hasLegend) return false;
			return this.hasProvider;
		}
		get shouldHighlight() {
			if (!this.enabled) return false;
			const { doc } = this;
			if (doc.dirty || doc.version === this._version) return false;
			return true;
		}
		checkState() {
			if (!this.configEnabled) throw new Error(`Semantic tokens highlight not enabled for current filetype: ${this.doc.filetype}`);
			if (!this.hasProvider || !this.hasLegend) throw new Error(`SemanticTokens provider not found for ${this.doc.uri}`);
		}
		async getTokenRanges(tokens, legend, token) {
			let currentLine = 0;
			let currentCharacter = 0;
			let highlights = [];
			let toBytes;
			let textDocument = this.doc.textDocument;
			let tickStart = Date.now();
			for (let i = 0; i < tokens.length; i += 5) {
				if (i == 0 || Date.now() - tickStart > yieldEveryMilliseconds) {
					await waitImmediate$1();
					if (token.isCancellationRequested) break;
					tickStart = Date.now();
				}
				const deltaLine = tokens[i];
				const deltaCharacter = tokens[i + 1];
				const length = tokens[i + 2];
				const tokenType = legend.tokenTypes[tokens[i + 3]];
				const tokenModifiers = legend.tokenModifiers.filter((_, m) => tokens[i + 4] & 1 << m);
				const lnum = currentLine + deltaLine;
				if (deltaLine != 0 || !toBytes) toBytes = bytes(toText(textDocument.lines[lnum]));
				const sc = deltaLine === 0 ? currentCharacter + deltaCharacter : deltaCharacter;
				const ec = sc + length;
				currentLine = lnum;
				currentCharacter = sc;
				this.addHighlightItems(highlights, [
					lnum,
					toBytes(sc),
					toBytes(ec)
				], tokenType, tokenModifiers);
			}
			if (token.isCancellationRequested) return null;
			return highlights;
		}
		/**
		* Single line only.
		*/
		addHighlightItems(highlights, range, tokenType, tokenModifiers) {
			let { combinedModifiers } = this.config;
			let combine = false;
			highlights.push({
				range,
				tokenType,
				combine,
				hlGroup: "CocSemType" + toHighlightPart(tokenType),
				tokenModifiers
			});
			if (tokenModifiers.length) {
				const modifier = tokenModifiers[0];
				combine = combinedModifiers.includes(modifier);
				highlights.push({
					range,
					tokenType,
					combine,
					hlGroup: "CocSemTypeMod" + toHighlightPart(tokenType) + toHighlightPart(modifier),
					tokenModifiers
				});
			}
		}
		toHighlightItems(highlights, span) {
			let { incrementTypes } = this.config;
			let filter = Array.isArray(span);
			let res = [];
			for (let hi of highlights) {
				if (!hi.hlGroup) continue;
				let lnum = hi.range[0];
				if (filter && (lnum < span[0] || lnum > span[1])) continue;
				let item = {
					lnum,
					hlGroup: hi.hlGroup,
					colStart: hi.range[1],
					colEnd: hi.range[2],
					combine: hi.combine
				};
				if (incrementTypes.includes(hi.tokenType)) {
					item.end_incl = true;
					item.start_incl = true;
				}
				res.push(item);
			}
			return res;
		}
		async doHighlight(forceFull = false, wait = debounceInterval, winid) {
			this.cancel();
			let token = (this.tokenSource = new import_main$1.CancellationTokenSource()).token;
			await waitWithToken(wait, token);
			if (token.isCancellationRequested) return;
			const winids = winid == null ? workspace_default.editors.getBufWinids(this.bufnr) : [winid];
			if (!this.enabled || winids.length === 0) return;
			if (this.shouldRangeHighlight) {
				this.cancel(true);
				let rangeToken = (this.rangeTokenSource = new import_main$1.CancellationTokenSource()).token;
				for (const win of winids) {
					await this.doRangeHighlight(win, void 0, rangeToken);
					if (rangeToken.isCancellationRequested) break;
				}
			}
			if (token.isCancellationRequested || this.rangeProviderOnly) return;
			this.cancel(true);
			const { doc } = this;
			const version = doc.version;
			let tokenRanges;
			if (version === this.previousResults?.version) if (this._highlights && this._highlights[0] == version) tokenRanges = this._highlights[1];
			else {
				const tokens = this.previousResults.tokens;
				const legend = languages_default.getLegend(doc.textDocument);
				tokenRanges = await this.getTokenRanges(tokens, legend, token);
			}
			else tokenRanges = await this.sendRequest(() => {
				return this.requestAllHighlights(token, forceFull);
			}, token);
			if (token.isCancellationRequested || !tokenRanges) return;
			this._highlights = [version, tokenRanges];
			if (!this._dirty || tokenRanges.length < 500) {
				if (await this.addHighlights(tokenRanges, void 0, token)) this._version = version;
			} else {
				this.regions.clear();
				await this.highlightRegions(winid, token);
			}
			this._onDidRefresh.fire();
		}
		async addHighlights(highlights, span, token) {
			const { bufnr, regions, doc, config } = this;
			let items = this.toHighlightItems(highlights, span);
			let diff = await window_default.diffHighlights(bufnr, NAMESPACE, items, span, token);
			if (!diff || token.isCancellationRequested) return false;
			const priority = config.highlightPriority;
			await window_default.applyDiffHighlights(bufnr, NAMESPACE, priority, diff, true);
			this._dirty = true;
			if (span) regions.add(span[0], span[1]);
			else regions.add(0, doc.lineCount);
			return true;
		}
		async sendRequest(fn, token) {
			try {
				return await fn();
			} catch (e) {
				if (!token.isCancellationRequested) if (e instanceof CancellationError) this.doHighlight(true, requestDelay).catch(onUnexpectedError);
				else logger$3.error("Error on request semanticTokens: ", e);
				return;
			}
		}
		/**
		* Perform range highlight request and update.
		*/
		async doRangeHighlight(winid, span, token) {
			const { version } = this.doc;
			let res = await this.sendRequest(() => {
				return this.requestRangeHighlights(winid, span, token);
			}, token);
			if (res == null || token.isCancellationRequested) return;
			const { highlights, start, end } = res;
			if (this.rangeProviderOnly || !this.previousResults) {
				if (!this._highlights || version !== this._highlights[0]) this._highlights = [version, []];
				let tokenRanges = this._highlights[1];
				let usedLines = tokenRanges.reduce((p, c) => p.add(c.range[0]), /* @__PURE__ */ new Set());
				highlights.forEach((hi) => {
					if (!usedLines.has(hi.range[0])) tokenRanges.push(hi);
				});
			}
			await this.addHighlights(highlights, [start, end], token);
		}
		/**
		* highlight current visible regions, highlight all associated winids when winid is undefined
		*/
		async highlightRegions(winid, token) {
			let { regions, highlights, doc, bufnr } = this;
			if (!highlights) return;
			let spans = await window_default.getVisibleRanges(bufnr, winid);
			if (token.isCancellationRequested) return;
			for (let lines of spans) {
				let span = regions.toUncoveredSpan([lines[0] - 1, lines[1] - 1], workspace_default.env.lines, doc.lineCount);
				if (span) await this.addHighlights(highlights, span, token);
			}
		}
		/**
		* Request highlights for visible range of winid.
		*/
		async requestRangeHighlights(winid, span, token) {
			let { nvim, doc } = this;
			if (!span) {
				let region = await nvim.call("coc#window#visible_range", [winid]);
				if (!region || token.isCancellationRequested) return null;
				span = this.regions.toUncoveredSpan([region[0] - 1, region[1] - 1], workspace_default.env.lines, doc.lineCount);
			}
			if (!span) return null;
			const startLine = span[0];
			const endLine = span[1];
			let range = doc.textDocument.intersectWith(Range.create(startLine, 0, endLine + 1, 0));
			let res = await languages_default.provideDocumentRangeSemanticTokens(doc.textDocument, range, token);
			if (!res || !SemanticTokens$1.is(res) || token.isCancellationRequested) return null;
			let legend = languages_default.getLegend(doc.textDocument, true);
			let highlights = await this.getTokenRanges(res.data, legend, token);
			if (!highlights) return null;
			return {
				highlights,
				start: startLine,
				end: endLine
			};
		}
		/**
		* Request highlights from provider, return undefined when can't request or request cancelled
		* Use range provider only when not semanticTokens provider exists.
		*/
		async requestAllHighlights(token, forceFull) {
			const textDocument = this.doc.textDocument;
			const legend = languages_default.getLegend(textDocument);
			const hasEditProvider = languages_default.hasSemanticTokensEdits(textDocument);
			const previousResult = forceFull ? null : this.previousResults;
			const version = textDocument.version;
			let result;
			if (hasEditProvider && previousResult?.resultId) result = await languages_default.provideDocumentSemanticTokensEdits(textDocument, previousResult.resultId, token);
			else result = await languages_default.provideDocumentSemanticTokens(textDocument, token);
			if (token.isCancellationRequested || result == null) return;
			let tokens = [];
			if (SemanticTokens$1.is(result)) tokens = result.data;
			else if (previousResult && Array.isArray(result.edits)) {
				tokens = previousResult.tokens;
				result.edits.forEach((e) => {
					tokens.splice(e.start, toNumber(e.deleteCount), ...toArray(e.data));
				});
			}
			this.previousResults = {
				resultId: result.resultId,
				tokens,
				version
			};
			return await this.getTokenRanges(tokens, legend, token);
		}
		clearHighlight() {
			this.reset();
			this.buffer.clearNamespace(NAMESPACE);
		}
		onProviderChange() {
			if (!this.hasProvider) {
				this.cancel();
				this.clearHighlight();
			} else {
				this.reset();
				this.doHighlight(true, 0).catch(onUnexpectedError);
			}
		}
		cancel(rangeOnly = false) {
			if (this.rangeTokenSource) {
				this.rangeTokenSource.cancel();
				this.rangeTokenSource = null;
			}
			if (rangeOnly) return;
			this.regions.clear();
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource = null;
			}
		}
		reset() {
			this.previousResults = void 0;
			this._highlights = void 0;
			this._version = void 0;
			this.regions.clear();
		}
		dispose() {
			this.cancel();
			this.reset();
			this._onDidRefresh.dispose();
		}
	};
}));
//#endregion
//#region src/handler/semanticTokens/index.ts
var headGroup, floatFactory, SemanticTokens;
var init_semanticTokens = __esmMin((() => {
	init_commands$2();
	init_events();
	init_languages();
	init_highlighter();
	init_util$7();
	init_array();
	init_string$1();
	init_window();
	init_workspace$1();
	init_buffer$1();
	headGroup = "Statement";
	SemanticTokens = class {
		nvim;
		disposables = [];
		highlighters;
		staticConfig;
		constructor(nvim) {
			this.nvim = nvim;
			this.setStaticConfiguration();
			workspace_default.onDidChangeConfiguration((e) => {
				if (e.affectsConfiguration("semanticTokens")) {
					this.setStaticConfiguration();
					for (let item of this.highlighters.items) item.loadConfiguration();
				}
			}, this, this.disposables);
			commands_default.register({
				id: "semanticTokens.checkCurrent",
				execute: async () => {
					await this.showHighlightInfo();
				}
			}, false, "show semantic tokens highlight information of current buffer");
			commands_default.register({
				id: "semanticTokens.refreshCurrent",
				execute: () => {
					return this.highlightCurrent();
				}
			}, false, "refresh semantic tokens highlight of current buffer.");
			commands_default.register({
				id: "semanticTokens.inspect",
				execute: () => {
					return this.inspectSemanticToken();
				}
			}, false, "Inspect semantic token information at cursor position.");
			commands_default.register({
				id: "semanticTokens.clearCurrent",
				execute: async () => {
					(await nvim.buffer).clearNamespace(NAMESPACE, 0, -1);
				}
			}, false, "clear semantic tokens highlight of current buffer");
			commands_default.register({
				id: "semanticTokens.clearAll",
				execute: async () => {
					let bufs = await nvim.buffers;
					for (let buf of bufs) buf.clearNamespace(NAMESPACE, 0, -1);
				}
			}, false, "clear semantic tokens highlight of all buffers");
			this.highlighters = workspace_default.registerBufferSync((doc) => {
				return new SemanticTokensBuffer(this.nvim, doc, this.staticConfig);
			});
			languages_default.onDidSemanticTokensRefresh(async (selector) => {
				let visibleBufs = window_default.visibleTextEditors.map((o) => o.document.bufnr);
				for (let item of this.highlighters.items) if (workspace_default.match(selector, item.doc) && visibleBufs.includes(item.bufnr)) item.onProviderChange();
			}, null, this.disposables);
			events_default.on("BufWinEnter", async (bufnr, winid) => {
				let item = this.highlighters.getItem(bufnr);
				if (item) await item.onShown(winid);
			}, null, this.disposables);
			events_default.on("WinScrolled", async (winid, bufnr) => {
				let item = this.highlighters.getItem(bufnr);
				if (item) await item.onWinScroll(winid);
			}, null, this.disposables);
			events_default.on("CursorHold", async (bufnr, cursor, winid) => {
				let item = this.highlighters.getItem(bufnr);
				if (item && winid) await item.onCursorHold(winid, cursor[0]);
			}, null, this.disposables);
		}
		setStaticConfiguration() {
			const filetypes = workspace_default.initialConfiguration.get("semanticTokens.filetypes", null);
			this.staticConfig = Object.assign(this.staticConfig ?? {}, { filetypes });
		}
		async inspectSemanticToken() {
			let item = await this.getCurrentItem();
			if (!item || !item.enabled) {
				if (!item) {
					let doc = await workspace_default.document;
					window_default.showErrorMessage(`Document not attached, ${doc.notAttachReason}`);
				} else try {
					item.checkState();
				} catch (e) {
					window_default.showErrorMessage(e.message);
				}
				this.closeFloat();
				return;
			}
			let [_, line, col] = await this.nvim.call("getcurpos", []);
			let highlight = toArray(item.highlights).find((o) => {
				let column = col - 1;
				return o.range[0] === line - 1 && column >= o.range[1] && column < o.range[2];
			});
			if (highlight) {
				let modifiers = toArray(highlight.tokenModifiers);
				let highlights = [];
				if (highlight.hlGroup) {
					let s = 17;
					highlights.push({
						lnum: 2,
						colStart: s,
						colEnd: s + highlight.hlGroup.length,
						hlGroup: highlight.hlGroup
					});
				}
				let docs = [{
					filetype: "txt",
					content: `Type: ${highlight.tokenType}\nModifiers: ${modifiers.join(", ")}\nHighlight group: ${toText(highlight.hlGroup)}`,
					highlights
				}];
				if (!floatFactory) floatFactory = window_default.createFloatFactory({
					title: "Semantic token info",
					highlight: "Normal",
					borderhighlight: "MoreMsg",
					border: [
						1,
						1,
						1,
						1
					]
				});
				await floatFactory.show(docs, { winblend: 0 });
			} else this.closeFloat();
		}
		closeFloat() {
			floatFactory?.close();
		}
		async getCurrentItem() {
			let buf = await this.nvim.buffer;
			return this.getItem(buf.id);
		}
		getItem(bufnr) {
			return this.highlighters.getItem(bufnr);
		}
		/**
		* Force highlight of current buffer
		*/
		async highlightCurrent() {
			let item = await this.getCurrentItem();
			if (!item || !item.enabled) throw new Error(`Unable to perform semantic highlights for current buffer.`);
			await item.forceHighlight();
		}
		/**
		* Show semantic highlight info in temporarily buffer
		*/
		async showHighlightInfo() {
			let bufnr = await this.nvim.call("bufnr", ["%"]);
			workspace_default.getAttachedDocument(bufnr);
			let { nvim } = this;
			let item = this.highlighters.getItem(bufnr);
			let hl = new Highlighter();
			nvim.pauseNotification();
			nvim.command(`vs +setl\\ buftype=nofile __coc_semantic_highlights_${bufnr}__`, true);
			nvim.command(`setl bufhidden=wipe noswapfile nobuflisted wrap undolevels=-1`, true);
			nvim.call("bufnr", ["%"], true);
			let res = await nvim.resumeNotification();
			hl.addLine("Semantic highlights info", headGroup);
			hl.addLine("");
			try {
				item.checkState();
				let highlights = item.highlights ?? [];
				hl.addLine("The number of semantic tokens: ");
				hl.addText(String(highlights.length), "Number");
				hl.addLine("");
				hl.addLine("Semantic highlight groups used by current buffer", headGroup);
				hl.addLine("");
				const groups = distinct(highlights.filter((o) => o.hlGroup != null).map(({ hlGroup }) => hlGroup));
				for (const hlGroup of groups) hl.addTexts([
					{
						text: "-",
						hlGroup: "Comment"
					},
					{ text: " " },
					{
						text: hlGroup,
						hlGroup
					}
				]);
				hl.addLine("");
				hl.addLine("Tokens types that current Language Server supported:", headGroup);
				hl.addLine("");
				let doc = workspace_default.getDocument(item.bufnr);
				let legend = languages_default.getLegend(doc.textDocument) ?? languages_default.getLegend(doc.textDocument, true);
				if (legend.tokenTypes.length) {
					for (const t of [...new Set(legend.tokenTypes)]) {
						let text = HLGROUP_PREFIX + "Type" + toHighlightPart(t);
						hl.addTexts([
							{
								text: "-",
								hlGroup: "Comment"
							},
							{ text: " " },
							{
								text,
								hlGroup: text
							}
						]);
					}
					hl.addLine("");
				} else {
					hl.addLine("No token types supported", "Comment");
					hl.addLine("");
				}
			} catch (e) {
				hl.addLine(toErrorText(e));
			}
			nvim.pauseNotification();
			hl.render(nvim.createBuffer(res[0][2]));
			nvim.resumeNotification(true, true);
		}
		dispose() {
			this.highlighters.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/util.ts
function toDocumentation(doc) {
	return {
		content: typeof doc === "string" ? doc : doc.value,
		filetype: isMarkdown(doc) ? "markdown" : "txt"
	};
}
var init_util$1 = __esmMin((() => {
	init_is();
}));
//#endregion
//#region src/handler/signature.ts
var debounceTime, Signature;
var init_signature = __esmMin((() => {
	init_events();
	init_languages();
	init_util$7();
	init_array();
	init_node();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	init_util$1();
	debounceTime = getConditionValue(100, 10);
	Signature = class {
		nvim;
		handler;
		timer;
		config;
		signatureFactory;
		lastPosition;
		disposables = [];
		tokenSource;
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.loadConfiguration();
			this.signatureFactory = window_default.createFloatFactory(Object.assign({
				preferTop: this.config.preferAbove,
				autoHide: false,
				modes: [
					"i",
					"ic",
					"s"
				]
			}, this.config.floatConfig));
			this.disposables.push(this.signatureFactory);
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			events_default.on("CursorMovedI", debounce(this.checkCursor.bind(this), debounceTime), null, this.disposables);
			events_default.on("BufEnter", () => {
				this.tokenSource?.cancel();
			}, null, this.disposables);
			events_default.on("TextChangedI", () => {
				if (this.config.hideOnChange) this.signatureFactory.close();
			}, null, this.disposables);
			events_default.on("MenuPopupChanged", () => {
				if (this.config.hideOnChange) return;
				process.nextTick(async () => {
					if (this.signatureFactory.window != null) return;
					let bufnr = this.lastPosition?.bufnr;
					if (!bufnr) return;
					let { doc, position } = await this.handler.getCurrentState();
					if (!doc || !doc.attached || doc.bufnr !== bufnr) return;
					await this._triggerSignatureHelp(doc, position, false);
				});
			}, null, this.disposables);
			events_default.on("TextInsert", async (bufnr, info, character) => {
				if (!this.shouldAutoTrigger(bufnr, character)) return;
				let doc = workspace_default.getDocument(bufnr);
				await this._triggerSignatureHelp(doc, {
					line: info.lnum - 1,
					character: info.pre.length
				}, false);
			}, null, this.disposables);
			events_default.on("PlaceholderJump", async (bufnr, info) => {
				if (workspace_default.env.jumpAutocmd || info.charbefore === "") return;
				await wait(50);
				if (!this.shouldAutoTrigger(bufnr, info.charbefore)) return;
				let doc = workspace_default.getDocument(bufnr);
				if (!doc || !doc.attached) return;
				await this._triggerSignatureHelp(doc, info.range.start, false);
			}, null, this.disposables);
			window_default.onDidChangeActiveTextEditor(() => {
				this.loadConfiguration();
			}, null, this.disposables);
		}
		shouldAutoTrigger(bufnr, character) {
			if (!this.config.enableTrigger) return false;
			let doc = workspace_default.getDocument(bufnr);
			if (!doc || !doc.attached || !languages_default.shouldTriggerSignatureHelp(doc.textDocument, character)) return false;
			return true;
		}
		checkCursor(bufnr, cursor) {
			let pos = this.lastPosition;
			let floatFactory = this.signatureFactory;
			if (!pos || bufnr !== pos.bufnr || floatFactory.window == null) return;
			let doc = workspace_default.getDocument(bufnr);
			if (!doc || cursor[0] != pos.lnum || cursor[1] < pos.col) {
				floatFactory.close();
				return;
			}
			if (byteSlice(doc.getline(pos.lnum - 1), pos.col - 1, cursor[1] - 1).endsWith(")")) return floatFactory.close();
		}
		loadConfiguration(e) {
			if (!e || e.affectsConfiguration("signature")) {
				let doc = window_default.activeTextEditor?.document;
				let config = workspace_default.getConfiguration("signature", doc);
				this.config = {
					target: config.get("target", "float"),
					floatConfig: config.get("floatConfig", {}),
					enableTrigger: config.get("enable", true),
					wait: Math.max(config.get("triggerSignatureWait", 500), 200),
					preferAbove: config.get("preferShownAbove", true),
					hideOnChange: config.get("hideOnTextChange", false)
				};
			}
		}
		async triggerSignatureHelp() {
			let { doc, position } = await this.handler.getCurrentState();
			if (!languages_default.hasProvider("signature", doc.textDocument)) return false;
			return await this._triggerSignatureHelp(doc, position, true, 0);
		}
		async _triggerSignatureHelp(doc, position, invoke, offset = 0) {
			this.tokenSource?.cancel();
			let tokenSource = this.tokenSource = new import_main$1.CancellationTokenSource();
			let token = tokenSource.token;
			token.onCancellationRequested(() => {
				tokenSource.dispose();
				this.tokenSource = void 0;
			});
			let { target } = this.config;
			let timer = this.timer = setTimeout(() => {
				tokenSource.cancel();
			}, this.config.wait);
			await doc.patchChange();
			let signatureHelp = await languages_default.getSignatureHelp(doc.textDocument, position, token, {
				isRetrigger: this.signatureFactory.checkRetrigger(doc.bufnr),
				triggerKind: invoke ? import_main$1.SignatureHelpTriggerKind.Invoked : import_main$1.SignatureHelpTriggerKind.TriggerCharacter
			});
			clearTimeout(timer);
			if (token.isCancellationRequested) return false;
			if (!signatureHelp || signatureHelp.signatures.length == 0) {
				this.signatureFactory.close();
				return false;
			}
			let { activeSignature, signatures } = signatureHelp;
			if (activeSignature) {
				let [active] = signatures.splice(activeSignature, 1);
				if (active) signatures.unshift(active);
			}
			if (target == "echo") this.echoSignature(signatureHelp);
			else await this.showSignatureHelp(doc, position, signatureHelp, offset);
			return true;
		}
		async showSignatureHelp(doc, position, signatureHelp, offset) {
			let { signatures, activeParameter } = signatureHelp;
			activeParameter = typeof activeParameter === "number" ? activeParameter : void 0;
			let paramDoc = null;
			let startOffset = offset;
			let docs = signatures.reduce((p, c, idx) => {
				let activeIndexes = null;
				let activeIndex = c.activeParameter ?? activeParameter;
				if (activeIndex === void 0 && !isFalsyOrEmpty(c.parameters)) activeIndex = 0;
				let nameIndex = c.label.indexOf("(");
				if (idx == 0 && typeof activeIndex === "number") {
					let active = c.parameters?.[activeIndex];
					if (active) {
						let after = c.label.slice(nameIndex == -1 ? 0 : nameIndex);
						paramDoc = active.documentation;
						if (typeof active.label === "string") {
							let str = after.slice(0);
							let ms = str.match(new RegExp("\\b" + active.label.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + "\\b"));
							let index = ms ? ms.index : str.indexOf(active.label);
							if (index != -1) activeIndexes = [index + nameIndex, index + active.label.length + nameIndex];
						} else activeIndexes = active.label;
					}
				}
				if (activeIndexes == null) activeIndexes = [nameIndex + 1, nameIndex + 1];
				if (offset == startOffset) offset = offset + activeIndexes[0] + 1;
				p.push({
					content: c.label,
					filetype: doc.filetype,
					active: activeIndexes
				});
				if (paramDoc) p.push(toDocumentation(paramDoc));
				if (idx == 0 && c.documentation) p.push(toDocumentation(c.documentation));
				return p;
			}, []);
			let content = doc.getline(position.line, false).slice(0, position.character);
			this.lastPosition = {
				bufnr: doc.bufnr,
				lnum: position.line + 1,
				col: byteLength(content) + 1
			};
			await this.signatureFactory.show(docs, { offsetX: offset });
		}
		echoSignature(signatureHelp) {
			let { signatures, activeParameter } = signatureHelp;
			let columns = workspace_default.env.columns;
			signatures = signatures.slice(0, workspace_default.env.cmdheight);
			let signatureList = [];
			for (let signature of signatures) {
				let parts = [];
				let { label } = signature;
				label = label.replace(/\n/g, " ");
				if (label.length >= columns - 16) label = label.slice(0, columns - 16) + "...";
				let nameIndex = label.indexOf("(");
				if (nameIndex == -1) parts = [{
					text: label,
					type: "Normal"
				}];
				else {
					parts.push({
						text: label.slice(0, nameIndex),
						type: "Label"
					});
					let after = label.slice(nameIndex);
					if (signatureList.length == 0 && activeParameter != null) {
						let active = signature.parameters?.[activeParameter];
						if (active) {
							let start;
							let end;
							if (typeof active.label === "string") {
								let str = after.slice(0);
								let ms = str.match(new RegExp("\\b" + active.label.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + "\\b"));
								let idx = ms ? ms.index : str.indexOf(active.label);
								if (idx == -1) parts.push({
									text: after,
									type: "Normal"
								});
								else {
									start = idx;
									end = idx + active.label.length;
								}
							} else {
								[start, end] = active.label;
								start = start - nameIndex;
								end = end - nameIndex;
							}
							if (start != null && end != null) {
								parts.push({
									text: after.slice(0, start),
									type: "Normal"
								});
								parts.push({
									text: after.slice(start, end),
									type: "MoreMsg"
								});
								parts.push({
									text: after.slice(end),
									type: "Normal"
								});
							}
						}
					} else parts.push({
						text: after,
						type: "Normal"
					});
				}
				signatureList.push(parts);
			}
			this.nvim.callTimer("coc#ui#echo_signatures", [signatureList], true);
		}
		dispose() {
			disposeAll(this.disposables);
			if (this.timer) clearTimeout(this.timer);
		}
	};
}));
//#endregion
//#region src/handler/symbols/buffer.ts
var DEBEBOUNCE_INTERVAL, SymbolsBuffer;
var init_buffer = __esmMin((() => {
	init_languages();
	init_logger$2();
	init_util$7();
	init_errors();
	init_node();
	init_protocol();
	createLogger$1("symbols-buffer");
	DEBEBOUNCE_INTERVAL = getConditionValue(500, 10);
	SymbolsBuffer = class {
		doc;
		autoUpdateBufnrs;
		disposables = [];
		fetchSymbols;
		version;
		symbols;
		tokenSource;
		_onDidUpdate = new import_main$1.Emitter();
		onDidUpdate = this._onDidUpdate.event;
		constructor(doc, autoUpdateBufnrs) {
			this.doc = doc;
			this.autoUpdateBufnrs = autoUpdateBufnrs;
			this.fetchSymbols = debounce(() => {
				this._fetchSymbols().catch(onUnexpectedError);
			}, DEBEBOUNCE_INTERVAL);
		}
		/**
		* Enable autoUpdate when invoked.
		*/
		async getSymbols() {
			let { doc } = this;
			await doc.patchChange();
			this.autoUpdateBufnrs.add(doc.bufnr);
			if (doc.version == this.version && this.symbols?.length) return this.symbols;
			this.cancel();
			await this._fetchSymbols();
			return this.symbols;
		}
		onChange(e) {
			if (e.contentChanges.length === 0) return;
			this.cancel();
			if (this.autoUpdateBufnrs.has(this.doc.bufnr)) this.fetchSymbols();
		}
		async _fetchSymbols() {
			let { textDocument } = this.doc;
			let { version } = textDocument;
			let { token } = this.tokenSource = new import_main$1.CancellationTokenSource();
			let symbols = await languages_default.getDocumentSymbol(textDocument, token);
			this.tokenSource = void 0;
			if (symbols == null || token.isCancellationRequested) return;
			this.version = version;
			this.symbols = symbols;
			this._onDidUpdate.fire(symbols);
		}
		cancel() {
			this.fetchSymbols.clear();
			if (this.tokenSource) {
				this.tokenSource.cancel();
				this.tokenSource.dispose();
				this.tokenSource = null;
			}
		}
		dispose() {
			this.cancel();
			this.symbols = void 0;
			this._onDidUpdate.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/tree/BasicDataProvider.ts
function isIcon(obj) {
	if (!obj) return false;
	return typeof obj.text === "string" && typeof obj.hlGroup === "string";
}
/**
* Check label and key, children not checked.
*/
function sameTreeNode(one, two) {
	if (one.label === two.label && one.deprecated === two.deprecated && one.key === two.key) return true;
	return false;
}
/**
* Check changes of nodes array, children not checked.
*/
function sameTreeNodes(one, two) {
	if (one.length !== two.length) return false;
	return one.every((v, idx) => sameTreeNode(v, two[idx]));
}
var BasicDataProvider;
var init_BasicDataProvider = __esmMin((() => {
	init_dist_node();
	init_protocol();
	init_commands$2();
	init_util$7();
	init_TreeItem();
	init_array();
	BasicDataProvider = class {
		opts;
		disposables = [];
		invokeCommand;
		data;
		_onDidChangeTreeData = new import_main$1.Emitter();
		onDidChangeTreeData = this._onDidChangeTreeData.event;
		resolveActions;
		constructor(opts) {
			this.opts = opts;
			this.invokeCommand = `_invoke_${v4()}`;
			this.disposables.push(commands_default.registerCommand(this.invokeCommand, async (node) => {
				await opts.handleClick(node);
			}, null, true));
			if (typeof opts.resolveActions === "function") this.resolveActions = opts.resolveActions.bind(this);
		}
		iterate(node, parentNode, level, fn) {
			let res = fn(node, parentNode, level);
			if (res === false) return false;
			if (Array.isArray(node.children)) {
				for (let element of node.children) if (this.iterate(element, node, level + 1, fn) === false) return false;
			}
			return res;
		}
		/**
		* Change old array to new nodes in place, keep old reference when possible.
		*/
		updateNodes(old, data, parentNode, fireEvent = true) {
			let sameNodes = sameTreeNodes(old, data);
			const applyNode = (previous, curr, fireEvent) => {
				let changed = false;
				for (let key of Object.keys(curr)) {
					if (["children", "key"].includes(key)) continue;
					previous[key] = curr[key];
				}
				if (previous.children?.length && !curr.children?.length) {
					delete previous.children;
					changed = true;
				}
				if (!previous.children?.length && curr.children?.length) {
					previous.children = curr.children;
					changed = true;
				}
				if (changed) {
					if (fireEvent) this._onDidChangeTreeData.fire(previous);
					return;
				}
				if (toArray(previous.children).length > 0 && toArray(curr.children).length > 0) this.updateNodes(previous.children, curr.children, previous, fireEvent);
			};
			if (sameNodes) for (let i = 0; i < old.length; i++) applyNode(old[i], data[i], fireEvent);
			else {
				let oldNodes = old.splice(0, old.length);
				let used = /* @__PURE__ */ new Set();
				for (let i = 0; i < data.length; i++) {
					let curr = data[i];
					let findIndex;
					if (curr.key) findIndex = oldNodes.findIndex((o, i) => !used.has(i) && o.key == curr.key);
					else findIndex = oldNodes.findIndex((o, i) => !used.has(i) && o.label == curr.label);
					if (findIndex === -1) old[i] = curr;
					else {
						used.add(findIndex);
						let previous = oldNodes[findIndex];
						applyNode(previous, curr, false);
						old[i] = previous;
					}
				}
				if (fireEvent) this._onDidChangeTreeData.fire(parentNode);
			}
		}
		/**
		* Update with new data, fires change event when necessary.
		*/
		update(data, reset) {
			if (!this.data) return;
			if (reset) {
				this.data = toArray(data);
				this._onDidChangeTreeData.fire(void 0);
			} else this.updateNodes(this.data, toArray(data), void 0);
			return this.data;
		}
		getTreeItem(node) {
			let label = node.label;
			let { expandLevel } = this.opts;
			let item;
			if (!node.children?.length) item = new TreeItem(label);
			else if (expandLevel && expandLevel > 0) {
				let level = this.getLevel(node);
				item = new TreeItem(label, level && level <= expandLevel ? 2 : 1);
			} else item = new TreeItem(label, 1);
			item.description = node.description;
			if (node.deprecated) item.deprecated = true;
			if (node.tooltip) item.tooltip = node.tooltip;
			if (isIcon(node.icon)) item.icon = node.icon;
			else if (typeof this.opts.resolveIcon === "function") {
				let res = this.opts.resolveIcon(node);
				if (res && isIcon(res)) item.icon = res;
			}
			return item;
		}
		async getChildren(element) {
			if (element) return element.children ?? [];
			if (this.data) return this.data;
			let data = await Promise.resolve(this.opts.provideData());
			if (!Array.isArray(data)) throw new Error(`Unable to fetch data`);
			this.data = data;
			return data;
		}
		/**
		* Use reference check
		*/
		getParent(element) {
			if (!this.data) return void 0;
			let find;
			for (let item of this.data) if (this.iterate(item, null, 0, (node, parentNode) => {
				if (node === element) {
					find = parentNode;
					return false;
				}
			}) === false) break;
			return find;
		}
		getLevel(element) {
			if (!this.data) return 0;
			let level = 0;
			for (let item of toArray(this.data)) if (this.iterate(item, null, 1, (node, _parentNode, l) => {
				if (node === element) {
					level = l;
					return false;
				}
			}) === false) break;
			return level;
		}
		/**
		* Resolve command and tooltip
		*/
		async resolveTreeItem(item, element, token) {
			if (typeof this.opts.resolveItem === "function") {
				let res = await Promise.resolve(this.opts.resolveItem(item, element, token));
				if (res) Object.assign(item, res);
			}
			if (!item.command) item.command = {
				title: `invoke ${element.label}`,
				command: this.invokeCommand,
				arguments: [element]
			};
			return item;
		}
		dispose() {
			this.data = [];
			this._onDidChangeTreeData.dispose();
			if (typeof this.opts.onDispose === "function") this.opts.onDispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/symbols/outline.ts
function getNodeByPosition(position, nodes) {
	let curr;
	let checkNodes = (nodes) => {
		for (let node of nodes) if (positionInRange(position, node.range) == 0) {
			curr = node;
			if (Array.isArray(node.children)) checkNodes(node.children);
			break;
		}
	};
	checkNodes(nodes);
	return curr;
}
var hoverTimeout, SymbolsOutline;
var init_outline = __esmMin((() => {
	init_main$2();
	init_events();
	init_languages();
	init_BasicDataProvider();
	init_TreeView();
	init_util$7();
	init_position();
	init_window();
	init_workspace$1();
	hoverTimeout = getConditionValue(300, 10);
	SymbolsOutline = class {
		nvim;
		buffers;
		handler;
		treeViewList = [];
		providersMap = /* @__PURE__ */ new Map();
		sortByMap = /* @__PURE__ */ new Map();
		config;
		disposables = [];
		constructor(nvim, buffers, handler) {
			this.nvim = nvim;
			this.buffers = buffers;
			this.handler = handler;
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			workspace_default.onDidCloseTextDocument(async (e) => {
				let { bufnr } = e;
				let provider = this.providersMap.get(bufnr);
				if (!provider) return;
				if (await nvim.call("bufloaded", [bufnr])) return;
				this.providersMap.delete(bufnr);
				provider.dispose();
			}, null, this.disposables);
			window_default.onDidChangeActiveTextEditor(async (editor) => {
				if (!this.config.checkBufferSwitch) return;
				if (this.treeViewList.find((v) => v.visible && v.targetTabId == editor.tabpageid)) {
					await this.showOutline(editor.document.bufnr, editor.tabpageid);
					await nvim.command(`noa call win_gotoid(${editor.winid})`);
				}
			}, null, this.disposables);
			events_default.on("CursorHold", async (bufnr, cursor) => {
				if (!this.config.followCursor) return;
				if (!this.providersMap.get(bufnr)) return;
				let tabpage = await nvim.tabpage;
				let view = this.treeViewList.find((o) => o.visible && o.targetBufnr == bufnr && o.targetTabId == tabpage.id);
				if (!view) return;
				await this.revealPosition(bufnr, view, Position.create(cursor[0] - 1, cursor[1] - 1));
			}, null, this.disposables);
		}
		async revealPosition(bufnr, treeView, position) {
			let provider = this.providersMap.get(bufnr);
			let curr = getNodeByPosition(position, await Promise.resolve(provider.getChildren()));
			if (curr) await treeView.reveal(curr);
		}
		loadConfiguration(e) {
			if (!e || e.affectsConfiguration("outline")) {
				let c = workspace_default.getConfiguration("outline", null);
				this.config = {
					splitCommand: c.get("splitCommand"),
					switchSortKey: c.get("switchSortKey"),
					togglePreviewKey: c.get("togglePreviewKey"),
					followCursor: c.get("followCursor"),
					keepWindow: c.get("keepWindow"),
					expandLevel: c.get("expandLevel"),
					autoWidth: c.get("autoWidth"),
					checkBufferSwitch: c.get("checkBufferSwitch"),
					detailAsDescription: c.get("detailAsDescription"),
					sortBy: c.get("sortBy"),
					showLineNumber: c.get("showLineNumber"),
					codeActionKinds: c.get("codeActionKinds"),
					autoHide: c.get("autoHide"),
					autoPreview: c.get("autoPreview"),
					previewMaxWidth: c.get("previewMaxWidth"),
					previewBorder: c.get("previewBorder"),
					previewBorderRounded: c.get("previewBorderRounded"),
					previewHighlightGroup: c.get("previewHighlightGroup"),
					previewBorderHighlightGroup: c.get("previewBorderHighlightGroup"),
					previewWinblend: c.get("previewWinblend")
				};
			}
		}
		convertSymbolToNode(documentSymbol, sortFn) {
			let descs = [];
			let { detailAsDescription, showLineNumber } = this.config;
			if (detailAsDescription && documentSymbol.detail) descs.push(documentSymbol.detail);
			if (showLineNumber) descs.push(`${documentSymbol.selectionRange.start.line + 1}`);
			return {
				label: documentSymbol.name,
				tooltip: detailAsDescription ? void 0 : documentSymbol.detail,
				description: descs.join(" "),
				icon: this.handler.getIcon(documentSymbol.kind),
				deprecated: documentSymbol.tags?.includes(SymbolTag.Deprecated),
				kind: documentSymbol.kind,
				range: documentSymbol.range,
				selectRange: documentSymbol.selectionRange,
				children: Array.isArray(documentSymbol.children) ? documentSymbol.children.map((o) => {
					return this.convertSymbolToNode(o, sortFn);
				}).sort(sortFn) : void 0
			};
		}
		setMessage(bufnr, msg) {
			this.treeViewList.forEach((v) => {
				if (v.valid && v.targetBufnr == bufnr) v.message = msg;
			});
		}
		convertSymbols(bufnr, symbols) {
			let sortBy = this.getSortBy(bufnr);
			let sortFn = (a, b) => {
				if (sortBy === "name") return a.label < b.label ? -1 : 1;
				if (sortBy === "category") {
					if (a.kind == b.kind) return a.label < b.label ? -1 : 1;
					return a.kind - b.kind;
				}
				return comparePosition(a.selectRange.start, b.selectRange.start);
			};
			return symbols.map((s) => this.convertSymbolToNode(s, sortFn)).sort(sortFn);
		}
		onSymbolsUpdate(bufnr, symbols) {
			let provider = this.providersMap.get(bufnr);
			if (provider) provider.update(this.convertSymbols(bufnr, symbols));
		}
		createProvider(bufnr) {
			let { nvim } = this;
			let provider = new BasicDataProvider({
				expandLevel: this.config.expandLevel,
				provideData: async () => {
					let buf = this.buffers.getItem(bufnr);
					if (!buf) throw new Error("Document not attached");
					let doc = workspace_default.getDocument(bufnr);
					if (!languages_default.hasProvider("documentSymbol", doc.textDocument)) throw new Error("Document symbol provider not found");
					let meta = languages_default.getDocumentSymbolMetadata(doc.textDocument);
					if (meta && meta.label) this.treeViewList.filter((v) => v.valid && v.targetBufnr == bufnr).forEach((view) => view.description = meta.label);
					this.setMessage(bufnr, "Loading document symbols");
					let arr = await buf.getSymbols();
					if (!arr || arr.length == 0) throw new Error("Empty symbols returned from language server. ");
					this.setMessage(bufnr, void 0);
					return this.convertSymbols(bufnr, arr);
				},
				handleClick: async (item) => {
					let winnr = await nvim.call("bufwinnr", [bufnr]);
					if (winnr == -1) return;
					nvim.pauseNotification();
					nvim.command(`${winnr}wincmd w`, true);
					let pos = item.selectRange.start;
					nvim.call("coc#cursor#move_to", [pos.line, pos.character], true);
					nvim.command(`normal! zz`, true);
					let buf = nvim.createBuffer(bufnr);
					buf.highlightRanges("outline-hover", "CocHoverRange", [item.selectRange]);
					nvim.command("redraw", true);
					await nvim.resumeNotification();
					setTimeout(() => {
						buf.clearNamespace("outline-hover");
						nvim.command("redraw", true);
					}, hoverTimeout);
					if (this.config.autoHide) await this.hide();
				},
				resolveActions: async (_, element) => {
					let winnr = await nvim.call("bufwinnr", [bufnr]);
					if (winnr == -1) return;
					let doc = workspace_default.getDocument(bufnr);
					return [...(await this.handler.getCodeActions(doc, element.range, this.config.codeActionKinds)).map((o) => {
						return {
							title: o.title,
							handler: async () => {
								let position = element.range.start;
								await nvim.command(`${winnr}wincmd w`);
								await this.nvim.call("coc#cursor#move_to", [position.line, position.character]);
								await this.handler.applyCodeAction(o);
							}
						};
					}), {
						title: "Visual Select",
						handler: async (item) => {
							await nvim.command(`${winnr}wincmd w`);
							await window_default.selectRange(item.range);
						}
					}];
				},
				onDispose: () => {
					for (let view of this.treeViewList.slice()) if (view.provider === provider) view.dispose();
				}
			});
			return provider;
		}
		getSortBy(bufnr) {
			return this.sortByMap.get(bufnr) ?? this.config.sortBy;
		}
		async showOutline(bufnr, tabId) {
			if (!this.providersMap.has(bufnr)) this.providersMap.set(bufnr, this.createProvider(bufnr));
			let treeView = this.treeViewList.find((v) => v.valid && v.targetBufnr == bufnr && v.targetTabId == tabId);
			if (!treeView) {
				let { switchSortKey, togglePreviewKey } = this.config;
				let autoPreview = this.config.autoPreview;
				let previewBufnr;
				treeView = new BasicTreeView("OUTLINE", {
					autoWidth: this.config.autoWidth,
					bufhidden: "hide",
					enableFilter: true,
					treeDataProvider: this.providersMap.get(bufnr)
				});
				let sortBy = this.getSortBy(bufnr);
				let prev;
				treeView.description = `${sortBy[0].toUpperCase()}${sortBy.slice(1)}`;
				this.treeViewList.push(treeView);
				let disposable = events_default.on("BufEnter", (bufnr) => {
					if (previewBufnr && bufnr !== previewBufnr) {
						prev = void 0;
						this.closePreview();
					}
				});
				treeView.onDispose(() => {
					let idx = this.treeViewList.findIndex((v) => v === treeView);
					if (idx !== -1) this.treeViewList.splice(idx, 1);
					disposable.dispose();
					this.closePreview();
				});
				treeView.onDidChangeVisibility((visible) => {
					if (this.nvim.isVim && visible && previewBufnr) {
						prev = void 0;
						this.closePreview();
					}
				});
				treeView.onDidCursorMoved(async (node) => {
					if (autoPreview && prev !== node) {
						prev = node;
						previewBufnr = await this.doPreview(bufnr, node);
					}
				});
				treeView.registerLocalKeymap("n", switchSortKey, async () => {
					let arr = [
						"category",
						"name",
						"position"
					];
					let curr = this.getSortBy(bufnr);
					let items = arr.map((s) => {
						return {
							text: s,
							disabled: s === curr
						};
					});
					let res = await window_default.showMenuPicker(items, { title: "Choose sort method" });
					if (res < 0) return;
					let sortBy = arr[res];
					this.sortByMap.set(bufnr, sortBy);
					this.treeViewList.filter((o) => o.targetBufnr == bufnr).forEach((view) => {
						view.description = `${sortBy[0].toUpperCase()}${sortBy.slice(1)}`;
					});
					let item = this.buffers.getItem(bufnr);
					this.onSymbolsUpdate(bufnr, item.symbols);
				}, true);
				treeView.registerLocalKeymap("n", togglePreviewKey, async (node) => {
					autoPreview = !autoPreview;
					if (!autoPreview) {
						prev = void 0;
						this.closePreview();
					} else previewBufnr = await this.doPreview(bufnr, node);
				}, true);
			}
			await treeView.show(this.config.splitCommand, false);
			return treeView;
		}
		async doPreview(bufnr, node) {
			if (!node) {
				this.closePreview();
				return;
			}
			let config = {
				bufnr,
				range: node.range,
				border: this.config.previewBorder,
				rounded: this.config.previewBorderRounded,
				maxWidth: this.config.previewMaxWidth,
				highlight: this.config.previewHighlightGroup,
				borderhighlight: this.config.previewBorderHighlightGroup,
				winblend: this.config.previewWinblend
			};
			return await this.nvim.call("coc#ui#outline_preview", [config]);
		}
		closePreview() {
			this.nvim.call("coc#ui#outline_close_preview", [], true);
		}
		/**
		* Create outline view.
		*/
		async show(keep) {
			let [bufnr, winid] = await this.nvim.eval("[bufnr(\"%\"),win_getid()]");
			let tabpage = await this.nvim.tabpage;
			let doc = workspace_default.getDocument(bufnr);
			if (doc && !doc.attached) {
				window_default.showErrorMessage(`Unable to show outline, ${doc.notAttachReason}`);
				return;
			}
			let position = await window_default.getCursorPosition();
			let treeView = await this.showOutline(bufnr, tabpage.id);
			if (keep == 1 || keep === void 0 && this.config.keepWindow) await this.nvim.command(`noa call win_gotoid(${winid})`);
			else if (this.config.followCursor) {
				let disposable = treeView.onDidRefrash(async () => {
					disposable.dispose();
					if (await this.nvim.eval("bufnr(\"%\")") == bufnr && treeView.visible) await this.revealPosition(bufnr, treeView, position);
				});
			}
		}
		has(bufnr) {
			return this.providersMap.has(bufnr);
		}
		/**
		* Hide outline of current tab.
		*/
		async hide() {
			let winid = await this.nvim.call("coc#window#find", ["cocViewId", "OUTLINE"]);
			if (winid == -1) return;
			await this.nvim.call("coc#window#close", [winid]);
		}
		dispose() {
			for (let view of this.treeViewList) view.dispose();
			this.treeViewList = [];
			for (let provider of this.providersMap.values()) provider.dispose();
			this.providersMap.clear();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/symbols/util.ts
function convertSymbols(symbols) {
	let res = [];
	let arr = symbols.slice();
	arr.sort(sortDocumentSymbols);
	arr.forEach((s) => addDocumentSymbol(res, s, 0));
	return res;
}
function sortDocumentSymbols(a, b) {
	let ra = a.selectionRange;
	let rb = b.selectionRange;
	return comparePosition(ra.start, rb.start);
}
function addDocumentSymbol(res, sym, level) {
	let { name, selectionRange, detail, kind, children, range, tags } = sym;
	let { start } = defaultValue(selectionRange, range);
	let obj = {
		col: start.character + 1,
		lnum: start.line + 1,
		text: name,
		level,
		kind: getSymbolKind(kind),
		range,
		selectionRange
	};
	if (detail) obj.detail = detail;
	if (tags && tags.includes(SymbolTag.Deprecated)) obj.deprecated = true;
	res.push(obj);
	if (children && children.length) {
		children.sort(sortDocumentSymbols);
		for (let sym of children) addDocumentSymbol(res, sym, level + 1);
	}
}
var init_util = __esmMin((() => {
	init_main$2();
	init_util$7();
	init_convert();
	init_position();
}));
//#endregion
//#region src/handler/symbols/index.ts
var Symbols;
var init_symbols = __esmMin((() => {
	init_main$2();
	init_events();
	init_languages();
	init_util$7();
	init_node();
	init_object();
	init_position();
	init_protocol();
	init_string$1();
	init_window();
	init_workspace$1();
	init_buffer();
	init_outline();
	init_util();
	Symbols = class {
		nvim;
		handler;
		buffers;
		disposables = [];
		outline;
		autoUpdateBufnrs = /* @__PURE__ */ new Set();
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.buffers = workspace_default.registerBufferSync((doc) => {
				let { bufnr } = doc;
				let buf = new SymbolsBuffer(doc, this.autoUpdateBufnrs);
				buf.onDidUpdate((symbols) => {
					if (!this.outline) return;
					this.outline.onSymbolsUpdate(bufnr, symbols);
				});
				return buf;
			});
			this.outline = new SymbolsOutline(nvim, this.buffers, handler);
			const debounceTime = workspace_default.initialConfiguration.get("coc.preferences.currentFunctionSymbolDebounceTime", 300);
			let prev = "";
			let debounced = debounce(async (bufnr, cursor) => {
				if (!this.buffers.getItem(bufnr) || !this.autoUpdate(bufnr)) return;
				let character = characterIndex(workspace_default.getDocument(bufnr).getline(cursor[0] - 1), cursor[1] - 1);
				let pos = Position.create(cursor[0] - 1, character);
				let func = await this.getFunctionSymbol(bufnr, pos);
				let buffer = nvim.createBuffer(bufnr);
				if (func != prev) {
					prev = func;
					buffer.setVar("coc_current_function", func, true);
					this.nvim.callTimer("coc#util#do_autocmd", ["CocStatusChange"], true);
				}
			}, getConditionValue(debounceTime, 0));
			events_default.on("CursorMoved", debounced, this, this.disposables);
			this.disposables.push(import_main$1.Disposable.create(() => {
				debounced.clear();
			}));
			events_default.on("InsertEnter", (bufnr) => {
				debounced.clear();
				let buf = this.buffers.getItem(bufnr);
				if (buf) buf.cancel();
			}, null, this.disposables);
		}
		autoUpdate(bufnr) {
			let doc = workspace_default.getDocument(bufnr);
			return workspace_default.getConfiguration("coc.preferences", doc).get("currentFunctionSymbolAutoUpdate", false);
		}
		get labels() {
			return workspace_default.getConfiguration("suggest").get("completionItemKindLabels", {});
		}
		async getWorkspaceSymbols(input) {
			this.handler.checkProvider("workspaceSymbols", null);
			let tokenSource = new import_main$1.CancellationTokenSource();
			return await languages_default.getWorkspaceSymbols(input, tokenSource.token);
		}
		async resolveWorkspaceSymbol(symbolInfo) {
			if (symbolInfo.location?.uri) return symbolInfo;
			let tokenSource = new import_main$1.CancellationTokenSource();
			return await languages_default.resolveWorkspaceSymbol(symbolInfo, tokenSource.token);
		}
		async getDocumentSymbols(bufnr) {
			if (!bufnr) {
				bufnr = await this.nvim.call("bufnr", ["%"]);
				let doc = workspace_default.getDocument(bufnr);
				if (!doc || !doc.attached) return void 0;
			}
			let buf = this.buffers.getItem(bufnr);
			if (!buf) return;
			let res = await buf.getSymbols();
			return res ? convertSymbols(res) : void 0;
		}
		async getFunctionSymbol(bufnr, position) {
			let symbols = await this.getDocumentSymbols(bufnr);
			if (!symbols || symbols.length === 0) return "";
			symbols = symbols.filter((s) => [
				"Class",
				"Method",
				"Function",
				"Struct"
			].includes(s.kind));
			let functionName = "";
			let labels = this.labels;
			for (let sym of symbols.reverse()) if (sym.range && positionInRange(position, sym.range) == 0 && !sym.text.endsWith(") callback")) {
				functionName = sym.text;
				let label = labels[sym.kind.toLowerCase()];
				if (label) functionName = `${label} ${functionName}`;
				break;
			}
			return functionName;
		}
		async getCurrentFunctionSymbol() {
			let bufnr = await this.nvim.call("bufnr", ["%"]);
			let doc = workspace_default.getDocument(bufnr);
			if (!doc || !doc.attached || !languages_default.hasProvider("documentSymbol", doc.textDocument)) return;
			let position = await window_default.getCursorPosition();
			return await this.getFunctionSymbol(bufnr, position);
		}
		async selectSymbolRange(inner, visualmode, supportedSymbols) {
			let { doc } = await this.handler.getCurrentState();
			this.handler.checkProvider("documentSymbol", doc.textDocument);
			let range;
			if (visualmode) range = await window_default.getSelectedRange(visualmode);
			else {
				let pos = await window_default.getCursorPosition();
				range = Range.create(pos, pos);
			}
			let symbols = await this.getDocumentSymbols(doc.bufnr);
			if (!symbols || symbols.length === 0) {
				window_default.showWarningMessage("No symbols found");
				return;
			}
			symbols = symbols.filter((s) => supportedSymbols.includes(s.kind));
			let selectRange;
			for (let sym of symbols.reverse()) if (sym.range && !equals(sym.range, range) && rangeInRange(range, sym.range)) {
				selectRange = sym.range;
				break;
			}
			if (inner && selectRange) {
				let { start, end } = selectRange;
				let line = doc.getline(start.line + 1);
				let endDelta = doc.filetype === "python" ? 0 : 1;
				let endLine = doc.getline(end.line - endDelta);
				selectRange = Range.create(start.line + 1, line.match(/^\s*/)[0].length, end.line - endDelta, endLine.length);
			}
			if (selectRange) await window_default.selectRange(selectRange);
			else if ([
				"v",
				"V",
				""
			].includes(visualmode)) await this.nvim.command("normal! gv");
		}
		async showOutline(keep) {
			await this.outline.show(keep);
		}
		async hideOutline() {
			await this.outline.hide();
		}
		hasOutline(bufnr) {
			return this.outline.has(bufnr);
		}
		dispose() {
			this.outline.dispose();
			this.buffers.dispose();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/typeHierarchy.ts
/**
* Cleanup properties used by treeview
*/
function toTypeHierarchyItem(item) {
	return omit$2(item, ["children", "parent"]);
}
function getTitle(kind) {
	return kind === "supertypes" ? "Super types" : "Sub types";
}
var TypeHierarchyHandler;
var init_typeHierarchy = __esmMin((() => {
	init_commands$2();
	init_events();
	init_languages();
	init_LocationsDataProvider();
	init_TreeView();
	init_util$7();
	init_array();
	init_lodash();
	init_window();
	init_workspace$1();
	TypeHierarchyHandler = class TypeHierarchyHandler {
		nvim;
		handler;
		config;
		disposables = [];
		static rangesHighlight = "CocSelectedRange";
		highlightWinids = /* @__PURE__ */ new Set();
		static commandId = "typeHierarchy.reveal";
		constructor(nvim, handler) {
			this.nvim = nvim;
			this.handler = handler;
			this.loadConfiguration();
			workspace_default.onDidChangeConfiguration(this.loadConfiguration, this, this.disposables);
			events_default.on("BufWinEnter", (_, winid) => {
				if (this.highlightWinids.has(winid)) {
					this.highlightWinids.delete(winid);
					nvim.createWindow(winid).clearMatchGroup(TypeHierarchyHandler.rangesHighlight);
				}
			}, null, this.disposables);
			this.disposables.push(commands_default.registerCommand(TypeHierarchyHandler.commandId, async (winid, item, openCommand) => {
				let { nvim } = this;
				await nvim.call("win_gotoid", [winid]);
				await workspace_default.jumpTo(item.uri, item.range.start, openCommand);
				let win = await nvim.window;
				win.clearMatchGroup(TypeHierarchyHandler.rangesHighlight);
				win.highlightRanges(TypeHierarchyHandler.rangesHighlight, [item.selectionRange], 10, true);
				this.highlightWinids.add(win.id);
			}, null, true));
		}
		loadConfiguration(e) {
			if (!e || e.affectsConfiguration("typeHierarchy")) {
				let c = workspace_default.getConfiguration("typeHierarchy", null);
				this.config = {
					splitCommand: c.get("splitCommand"),
					openCommand: c.get("openCommand"),
					enableTooltip: c.get("enableTooltip")
				};
			}
		}
		createProvider(rootItems, winid, kind) {
			let provider = new LocationsDataProvider(kind, winid, this.config, TypeHierarchyHandler.commandId, rootItems, (kind) => this.handler.getIcon(kind), (el, meta, token) => this.getChildren(el, meta, token));
			provider.addAction(`Show Super Types`, (el) => {
				provider.meta = "supertypes";
				let rootItems = [omit$2(el, ["children", "parent"])];
				provider.reset(rootItems);
			});
			provider.addAction(`Show Sub Types`, (el) => {
				provider.meta = "subtypes";
				let rootItems = [omit$2(el, ["children", "parent"])];
				provider.reset(rootItems);
			});
			return provider;
		}
		async getChildren(item, kind, token) {
			let res = [];
			let typeHierarchyItem = toTypeHierarchyItem(item);
			if (kind == "supertypes") res = await languages_default.provideTypeHierarchySupertypes(typeHierarchyItem, token);
			else res = await languages_default.provideTypeHierarchySubtypes(typeHierarchyItem, token);
			return res;
		}
		async prepare(doc, position) {
			this.handler.checkProvider("typeHierarchy", doc);
			return await this.handler.withRequestToken("typeHierarchy", async (token) => {
				return await languages_default.prepareTypeHierarchy(doc, position, token);
			}, false);
		}
		async showTypeHierarchyTree(kind) {
			const { doc, position, winid } = await this.handler.getCurrentState();
			await doc.synchronize();
			const rootItems = await this.prepare(doc.textDocument, position);
			if (isFalsyOrEmpty(rootItems)) {
				window_default.showWarningMessage("Unable to get TypeHierarchyItems at cursor position.");
				return;
			}
			let provider = this.createProvider(rootItems, winid, kind);
			let treeView = new BasicTreeView("TYPES", { treeDataProvider: provider });
			treeView.title = getTitle(kind);
			provider.onDidChangeTreeData((e) => {
				if (!e) treeView.title = getTitle(provider.meta);
			});
			treeView.onDidChangeVisibility((e) => {
				if (!e.visible) provider.dispose();
			});
			this.disposables.push(treeView);
			await treeView.show(this.config.splitCommand);
		}
		dispose() {
			this.highlightWinids.clear();
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/handler/workspace.ts
var WorkspaceHandler;
var init_workspace = __esmMin((() => {
	init_dist_node();
	init_esm();
	init_commands$2();
	init_funcs();
	init_workspaceFolder();
	init_extension();
	init_languages();
	init_logger$2();
	init_highlighter();
	init_manager$1();
	init_util$7();
	init_constants();
	init_errors();
	init_fs();
	init_is();
	init_node();
	init_string$1();
	init_window();
	init_workspace$1();
	WorkspaceHandler = class {
		nvim;
		constructor(nvim) {
			this.nvim = nvim;
			Object.defineProperty(window_default, "openLocalConfig", { get: () => this.openLocalConfig.bind(this) });
			extension_default.onDidUnloadExtension((name) => {
				workspace_default.autocmds.removeExtensionAutocmds(name);
			});
			commands_default.register({
				id: "workspace.openLocation",
				execute: async (winid, loc, openCommand) => {
					await nvim.call("win_gotoid", [winid]);
					await workspace_default.jumpTo(loc.uri, loc.range.start, openCommand);
				}
			}, true);
			commands_default.register({
				id: "workspace.openLocalConfig",
				execute: async () => {
					await this.openLocalConfig();
				}
			}, false, "Open config file of current workspace folder");
			commands_default.register({
				id: "workspace.undo",
				execute: async () => {
					await workspace_default.files.undoWorkspaceEdit();
				}
			}, false, "Undo previous this.workspace edit");
			commands_default.register({
				id: "workspace.redo",
				execute: async () => {
					await workspace_default.files.redoWorkspaceEdit();
				}
			}, false, "Redo previous this.workspace edit");
			commands_default.register({
				id: "workspace.inspectEdit",
				execute: async () => {
					await workspace_default.files.inspectEdit();
				}
			}, false, "Inspect previous this.workspace edit in new tab");
			commands_default.register({
				id: "workspace.renameCurrentFile",
				execute: async () => {
					await this.renameCurrent();
				}
			}, false, "change current filename to a new name and reload it.");
			commands_default.register({
				id: "document.checkBuffer",
				execute: async () => {
					await this.bufferCheck();
				}
			}, false, "Check providers for current buffer.");
			commands_default.register({
				id: "document.echoFiletype",
				execute: async () => {
					let bufnr = await nvim.call("bufnr", "%");
					let doc = workspace_default.getAttachedDocument(bufnr);
					await window_default.echoLines([doc.filetype]);
				}
			}, false, "echo the mapped filetype of the current buffer");
			commands_default.register({
				id: "workspace.workspaceFolders",
				execute: async () => {
					let lines = workspace_default.workspaceFolders.map((folder) => URI.parse(folder.uri).fsPath);
					await window_default.echoLines(lines);
				}
			}, false, "show opened workspaceFolders.");
			commands_default.register({
				id: "workspace.writeHeapSnapshot",
				execute: async () => {
					let filepath = path$5.join(os$5.homedir(), `${v4()}-${process.pid}.heapsnapshot`);
					(0, v8.writeHeapSnapshot)(filepath);
					window_default.showInformationMessage(`Create heapdump at: ${filepath}`);
					return filepath;
				}
			}, false, "Generates a snapshot of the current V8 heap and writes it to a JSON file.");
			commands_default.register({
				id: "workspace.showOutput",
				execute: async (name, cmd) => {
					if (!name) name = await window_default.showQuickPick(workspace_default.channelNames, { title: "Choose output name" });
					window_default.showOutputChannel(toText(name), cmd);
				}
			}, false, "open output buffer to show output from languageservers or extensions.");
			commands_default.register({
				id: "workspace.clearWatchman",
				execute: async () => {
					let res = await window_default.runTerminalCommand("watchman watch-del-all");
					if (res.success) window_default.showInformationMessage("Cleared watchman watching directories.");
					return res.success;
				}
			}, false, "run watch-del-all for watchman to free up memory.");
		}
		async openLog() {
			let file = getLoggerFile();
			await workspace_default.jumpTo(URI.file(file).toString());
		}
		/**
		* Open local config file
		*/
		async openLocalConfig() {
			let fsPath = await this.nvim.call("coc#util#get_fullpath", []);
			let filetype = await this.nvim.eval("&filetype");
			if (!fsPath || !path$5.isAbsolute(fsPath)) {
				window_default.showWarningMessage(`Current buffer doesn't have valid file path.`);
				return;
			}
			let folder = workspace_default.getWorkspaceFolder(URI.file(fsPath).toString());
			if (!folder) {
				let c = workspace_default.initialConfiguration.get("workspace");
				let patterns = defaultValue(c.rootPatterns, []);
				let ignored = defaultValue(c.ignoredFiletypes, []);
				let msg;
				if (ignored.includes(filetype)) msg = `Filetype '${filetype}' is ignored for workspace folder resolve.`;
				if (!msg) msg = `Can't resolve workspace folder for file '${fsPath}, consider create one of ${patterns.join(", ")} in your project root.'.`;
				window_default.showWarningMessage(msg);
				return;
			}
			let root = URI.parse(folder.uri).fsPath;
			let dir = path$5.join(root, ".vim");
			if (!fs$6.existsSync(dir)) {
				if (!await window_default.showPrompt(`Would you like to create folder'${root}/.vim'?`)) return;
				fs$6.mkdirSync(dir);
			}
			await workspace_default.jumpTo(URI.file(path$5.join(dir, CONFIG_FILE_NAME)));
		}
		async renameCurrent() {
			let { nvim } = this;
			let oldPath = await nvim.call("coc#util#get_fullpath", []);
			let newPath = await callAsync(nvim, "input", [
				"New path: ",
				oldPath,
				"file"
			]);
			newPath = newPath.trim();
			if (newPath === oldPath || !newPath) return;
			if (oldPath.toLowerCase() != newPath.toLowerCase() && fs$6.existsSync(newPath)) {
				if (!await window_default.showPrompt(`${newPath} exists, overwrite?`)) return;
			}
			await workspace_default.renameFile(oldPath, newPath, { overwrite: true });
		}
		addWorkspaceFolder(folder) {
			if (!string(folder)) throw TypeError(`folder should be string`);
			folder = workspace_default.expand(folder);
			if (!isDirectory(folder)) throw directoryNotExists(folder);
			workspace_default.workspaceFolderControl.addWorkspaceFolder(folder, true);
		}
		removeWorkspaceFolder(folder) {
			if (!string(folder)) throw TypeError(`folder should be string`);
			folder = workspace_default.expand(folder);
			if (!isDirectory(folder)) throw directoryNotExists(folder);
			workspace_default.workspaceFolderControl.removeWorkspaceFolder(folder);
		}
		async bufferCheck() {
			let doc = await workspace_default.document;
			if (!doc.attached) {
				await window_default.showDialog({
					title: "Buffer check result",
					content: `Document not attached, ${doc.notAttachReason}`,
					highlight: "WarningMsg"
				});
				return;
			}
			let hi = new Highlighter();
			hi.addLine("Provider state", "Title");
			hi.addLine("");
			for (let name of Object.values(ProviderName)) {
				if (name === "onTypeEdit") continue;
				let exists = languages_default.hasProvider(name, doc.textDocument);
				hi.addTexts([
					{
						text: "-",
						hlGroup: "Comment"
					},
					{ text: " " },
					exists ? {
						text: "✓",
						hlGroup: "CocListFgGreen"
					} : {
						text: "✗",
						hlGroup: "CocListFgRed"
					},
					{ text: " " },
					{
						text: name,
						hlGroup: exists ? "Normal" : "CocFadeOut"
					}
				]);
			}
			await window_default.showDialog({
				title: "Buffer check result",
				content: hi.content,
				highlights: hi.highlights
			});
		}
		async doAutocmd(id, args) {
			let timeout = workspace_default.getConfiguration("editor", null).get("timeout", 1e3);
			await workspace_default.autocmds.doAutocmd(id, args, timeout);
		}
		async getConfiguration(key) {
			let document = await workspace_default.document;
			return workspace_default.getConfiguration(key, document);
		}
		getRootPatterns(bufnr) {
			let doc = workspace_default.getDocument(bufnr);
			if (!doc) return null;
			return {
				buffer: workspace_default.workspaceFolderControl.getRootPatterns(doc, 0),
				server: workspace_default.workspaceFolderControl.getRootPatterns(doc, 1),
				global: workspace_default.workspaceFolderControl.getRootPatterns(doc, 2)
			};
		}
		async ensureDocument(bufnr) {
			let doc = bufnr ? workspace_default.getDocument(bufnr) : await workspace_default.document;
			return doc && doc.attached;
		}
		async doKeymap(key, defaultReturn = "") {
			return await workspace_default.keymaps.doKeymap(key, defaultReturn);
		}
		async snippetCheck(checkExpand, checkJump) {
			if (checkJump) {
				if (manager_default.jumpable()) return true;
			}
			if (checkExpand) {
				if (await Promise.resolve(extension_default.manager.call("coc-snippets", "expandable", []))) return true;
			}
			return false;
		}
		async showInfo() {
			let lines = [];
			let version = workspace_default.version + "-649c3a2aa 2026-06-04 11:02:43 +0800";
			lines.push("## versions");
			lines.push("");
			let first = (await this.nvim.call("execute", ["version"])).trim().split(/\r?\n/, 2)[0].replace(/\(.*\)/, "").trim();
			lines.push("vim version: " + first + `${isVim ? " " + workspace_default.env.version : ""}`);
			lines.push("node version: " + process.version);
			lines.push("coc.nvim version: " + version);
			lines.push("coc.nvim directory: " + path$5.dirname(__dirname));
			lines.push("term: " + defaultValue(process.env.TERM_PROGRAM, process.env.TERM));
			lines.push("platform: " + process.platform);
			lines.push("");
			lines.push("## Log of coc.nvim");
			lines.push("");
			let file = getLoggerFile();
			if (fs$6.existsSync(file)) {
				let content = fs$6.readFileSync(file, { encoding: "utf8" });
				lines.push(...content.split(/\r?\n/).map((line) => stripAnsi(line)));
			}
			await this.nvim.command("vnew +setl\\ buftype=nofile\\ bufhidden=wipe\\ nobuflisted");
			await (await this.nvim.buffer).setLines(lines, {
				start: 0,
				end: -1,
				strictIndexing: false
			});
		}
	};
}));
//#endregion
//#region src/handler/index.ts
var logger$2, requestTimeout, Handler;
var init_handler = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_events();
	init_languages();
	init_logger$2();
	init_util$7();
	init_convert();
	init_is();
	init_object();
	init_protocol();
	init_textedit();
	init_window();
	init_workspace$1();
	init_callHierarchy();
	init_codeActions();
	init_codelens();
	init_colors();
	init_commands();
	init_fold();
	init_format();
	init_highlights();
	init_hover();
	init_inlayHint();
	init_inline();
	init_linkedEditing();
	init_links();
	init_locations();
	init_refactor();
	init_rename();
	init_selectionRange();
	init_semanticTokens();
	init_signature();
	init_symbols();
	init_typeHierarchy();
	init_workspace();
	logger$2 = createLogger$1("Handler");
	requestTimeout = getConditionValue(500, 10);
	Handler = class {
		nvim;
		documentHighlighter;
		colors;
		signature;
		locations;
		symbols;
		refactor;
		codeActions;
		format;
		hover;
		codeLens;
		commands;
		links;
		rename;
		fold;
		selectionRange;
		callHierarchy;
		typeHierarchy;
		inlineCompletion;
		semanticHighlighter;
		workspace;
		linkedEditingHandler;
		inlayHintHandler;
		_requestStatusItem;
		requestTokenSource;
		requestTimer;
		disposables = [];
		constructor(nvim) {
			this.nvim = nvim;
			events_default.on([
				"CursorMoved",
				"CursorMovedI",
				"InsertEnter",
				"InsertSnippet",
				"InsertLeave"
			], () => {
				if (this.requestTokenSource) {
					this.requestTokenSource.cancel();
					this.requestTokenSource = null;
				}
			}, null, this.disposables);
			this.fold = new FoldHandler(nvim, this);
			this.links = new Links(nvim, this);
			this.codeLens = new CodeLensManager(nvim);
			this.colors = new Colors(nvim, this);
			this.format = new FormatHandler(nvim, this);
			this.symbols = new Symbols(nvim, this);
			this.refactor = new Refactor(nvim, this);
			this.hover = new HoverHandler(nvim, this);
			this.locations = new LocationsHandler(nvim, this);
			this.signature = new Signature(nvim, this);
			this.rename = new Rename(nvim, this);
			this.workspace = new WorkspaceHandler(nvim);
			this.codeActions = new CodeActions(nvim, this);
			this.commands = new Commands(nvim);
			this.callHierarchy = new CallHierarchyHandler(nvim, this);
			this.typeHierarchy = new TypeHierarchyHandler(nvim, this);
			this.documentHighlighter = new Highlights(nvim, this);
			this.semanticHighlighter = new SemanticTokens(nvim);
			this.selectionRange = new SelectionRangeHandler(nvim, this);
			this.linkedEditingHandler = new LinkedEditingHandler(nvim, this);
			this.inlayHintHandler = new InlayHintHandler(nvim, this);
			this.inlineCompletion = new InlineCompletion(nvim, this);
			this.disposables.push({ dispose: () => {
				this.callHierarchy.dispose();
				this.typeHierarchy.dispose();
				this.codeLens.dispose();
				this.links.dispose();
				this.refactor.dispose();
				this.signature.dispose();
				this.symbols.dispose();
				this.hover.dispose();
				this.colors.dispose();
				this.documentHighlighter.dispose();
				this.semanticHighlighter.dispose();
				this.inlineCompletion.dispose();
			} });
			this.registerCommands();
		}
		registerCommands() {
			commands_default.register({
				id: "document.renameCurrentWord",
				execute: async () => {
					let doc = await workspace_default.document;
					let edit = await this.rename.getWordEdit();
					let ranges = getRangesFromEdit(doc.uri, toObject(edit));
					if (!ranges) return window_default.showWarningMessage("Invalid position");
					await commands_default.executeCommand("editor.action.addRanges", ranges);
				}
			}, false, "rename word under cursor in current buffer by multiple cursors.");
			commands_default.register({
				id: ["workbench.action.reloadWindow", "editor.action.restart"],
				execute: () => {
					this.nvim.command("CocRestart", true);
				}
			}, true);
			commands_default.register({
				id: "workbench.action.openSettingsJson",
				execute: () => {
					this.nvim.command("CocConfig", true);
				}
			}, true);
			this.register("vscode.open", async (url) => {
				await workspace_default.openResource(url.toString());
			});
			this.register("editor.action.doCodeAction", async (action) => {
				await this.codeActions.applyCodeAction(action);
			});
			this.register("editor.action.triggerParameterHints", async () => {
				await this.signature.triggerSignatureHelp();
			});
			this.register("editor.action.showReferences", async (uri, position, references) => {
				await workspace_default.jumpTo(uri, position);
				await workspace_default.showLocations(references);
			});
			this.register("editor.action.rename", async (uri, position, newName) => {
				if (Array.isArray(uri)) {
					position = uri[1];
					uri = uri[0];
				}
				await workspace_default.jumpTo(uri, position);
				return await this.rename.rename(newName);
			});
			this.register("editor.action.format", async () => {
				await this.format.formatCurrentBuffer();
			});
			this.register("editor.action.showRefactor", async (locations) => {
				let locs = locations.filter((o) => Location.is(o));
				return await this.refactor.fromLocations(locs);
			});
			this.register("editor.action.triggerInlineCompletion", async (option) => {
				let bufnr = await this.nvim.eval("bufnr(\"%\")");
				return await this.inlineCompletion.trigger(bufnr, option);
			});
		}
		register(key, handler) {
			this.disposables.push(commands_default.registerCommand(key, handler, null, true));
		}
		get requestStatusItem() {
			if (this._requestStatusItem) return this._requestStatusItem;
			this._requestStatusItem = window_default.createStatusBarItem(0, { progress: true });
			return this._requestStatusItem;
		}
		get labels() {
			return workspace_default.initialConfiguration.get("suggest.completionItemKindLabels", {});
		}
		get uri() {
			return window_default.activeTextEditor?.uri;
		}
		async getCurrentState() {
			let { nvim } = this;
			let [bufnr, [line, character], winid, mode] = await nvim.eval("[bufnr('%'),coc#cursor#position(),win_getid(),mode()]");
			return {
				doc: workspace_default.getAttachedDocument(bufnr),
				mode,
				position: Position.create(line, character),
				winid
			};
		}
		addDisposable(disposable) {
			this.disposables.push(disposable);
		}
		/**
		* Throw error when provider doesn't exist.
		*/
		checkProvider(id, document) {
			if (!languages_default.hasProvider(id, document)) throw new Error(`${id} provider not found for current buffer, your language server doesn't support it.`);
		}
		async withRequestToken(name, fn, checkEmpty) {
			if (this.requestTokenSource) {
				this.requestTokenSource.cancel();
				this.requestTokenSource.dispose();
			}
			clearTimeout(this.requestTimer);
			let statusItem = this.requestStatusItem;
			this.requestTokenSource = new import_main$1.CancellationTokenSource();
			let { token } = this.requestTokenSource;
			token.onCancellationRequested(() => {
				statusItem.text = `${name} request canceled`;
				statusItem.isProgress = false;
				this.requestTimer = setTimeout(() => {
					statusItem.hide();
				}, requestTimeout);
			});
			statusItem.isProgress = true;
			statusItem.text = `requesting ${name}`;
			statusItem.show();
			let res;
			try {
				res = await Promise.resolve(fn(token));
			} catch (e) {
				logger$2.error(`Error on request ${name}`, e);
				this.nvim.errWriteLine(`Error on ${name}: ${e}`);
			}
			if (this.requestTokenSource) {
				this.requestTokenSource.dispose();
				this.requestTokenSource = void 0;
			}
			if (token.isCancellationRequested) return null;
			statusItem.hide();
			if (checkEmpty && (!res || Array.isArray(res) && res.length == 0)) {
				window_default.showWarningMessage(`${name} not found`);
				return null;
			}
			return res;
		}
		getIcon(kind) {
			let { labels } = this;
			let kindText = getSymbolKind(kind);
			const key = kindText[0].toLowerCase() + kindText.slice(1);
			let text = hasOwnProperty$1(labels, key) ? labels[key] : void 0;
			if (!string(text) || !text.length) text = string(labels["default"]) ? labels["default"] : kindText[0].toLowerCase();
			return {
				text,
				hlGroup: kindText == "Unknown" ? "CocSymbolDefault" : `CocSymbol${kindText}`
			};
		}
		async getCodeActions(doc, range, only) {
			return (await this.codeActions.getCodeActions(doc, range, only)).filter((o) => !o.disabled);
		}
		async applyCodeAction(action) {
			await this.codeActions.applyCodeAction(action);
		}
		async hasProvider(id, bufnr) {
			if (!bufnr) bufnr = await this.nvim.call("bufnr", "%");
			let doc = workspace_default.getDocument(bufnr);
			if (!doc || !doc.attached) return false;
			return languages_default.hasProvider(id, doc.textDocument);
		}
		dispose() {
			if (this.requestTimer) clearTimeout(this.requestTimer);
			disposeAll(this.disposables);
		}
	};
}));
//#endregion
//#region src/plugin.ts
var logger$1, Plugin;
var init_plugin = __esmMin((() => {
	init_main$2();
	init_commands$2();
	init_completion();
	init_sources();
	init_cursors();
	init_manager$4();
	init_events();
	init_extension();
	init_handler();
	init_manager$2();
	init_logger$2();
	init_services$1();
	init_manager$1();
	init_util$7();
	init_window();
	init_workspace$1();
	logger$1 = createLogger$1("plugin");
	Plugin = class {
		nvim;
		ready = false;
		initialized = false;
		handler;
		cursors;
		actions = /* @__PURE__ */ new Map();
		disposables = [];
		constructor(nvim) {
			this.nvim = nvim;
			Object.defineProperty(window_default, "workspace", { get: () => workspace_default });
			Object.defineProperty(workspace_default, "nvim", { get: () => this.nvim });
			Object.defineProperty(window_default, "nvim", { get: () => this.nvim });
			Object.defineProperty(window_default, "cursors", { get: () => this.cursors });
			Object.defineProperty(commands_default, "nvim", { get: () => this.nvim });
			this.cursors = new Cursors(nvim);
			manager_default$1.init(nvim);
			this.addAction("checkJsonExtension", () => {
				if (extension_default.has("coc-json")) return;
				window_default.showInformationMessage(`Run :CocInstall coc-json for json intellisense`);
			});
			this.addAction("rootPatterns", (bufnr) => this.handler.workspace.getRootPatterns(bufnr));
			this.addAction("ensureDocument", (bufnr) => this.handler.workspace.ensureDocument(bufnr));
			this.addAction("addWorkspaceFolder", (folder) => this.handler.workspace.addWorkspaceFolder(folder));
			this.addAction("removeWorkspaceFolder", (folder) => this.handler.workspace.removeWorkspaceFolder(folder));
			this.addAction("getConfig", (key) => this.handler.workspace.getConfiguration(key));
			this.addAction("doAutocmd", (id, ...args) => this.handler.workspace.doAutocmd(id, args));
			this.addAction("openLog", () => this.handler.workspace.openLog());
			this.addAction("attach", () => workspace_default.attach());
			this.addAction("detach", () => workspace_default.detach());
			this.addAction("doKeymap", (key, defaultReturn) => this.handler.workspace.doKeymap(key, defaultReturn));
			this.addAction("registerExtensions", (...folders) => extension_default.manager.loadExtension(folders), "registExtensions");
			this.addAction("snippetCheck", (checkExpand, checkJump) => this.handler.workspace.snippetCheck(checkExpand, checkJump));
			this.addAction("snippetInsert", (range, newText, mode, ultisnip) => manager_default.insertSnippet(newText, true, range, mode, ultisnip));
			this.addAction("snippetNext", () => manager_default.nextPlaceholder());
			this.addAction("snippetPrev", () => manager_default.previousPlaceholder());
			this.addAction("snippetCancel", () => manager_default.cancel());
			this.addAction("openLocalConfig", () => this.handler.workspace.openLocalConfig());
			this.addAction("bufferCheck", () => this.handler.workspace.bufferCheck());
			this.addAction("showInfo", () => this.handler.workspace.showInfo());
			this.addAction("hasProvider", (id, bufnr) => this.handler.hasProvider(id, bufnr));
			this.addAction("cursorsSelect", (bufnr, kind, mode) => this.cursors.select(bufnr, kind, mode));
			this.addAction("commandList", () => this.handler.commands.getCommandList());
			this.addAction("selectSymbolRange", (inner, visualmode, supportedSymbols) => this.handler.symbols.selectSymbolRange(inner, visualmode, supportedSymbols));
			this.addAction("openList", (...args) => manager_default$1.start(args));
			this.addAction("listNames", () => manager_default$1.names);
			this.addAction("listDescriptions", () => manager_default$1.descriptions);
			this.addAction("listLoadItems", (name) => manager_default$1.loadItems(name));
			this.addAction("listResume", (name) => manager_default$1.resume(name));
			this.addAction("listCancel", () => manager_default$1.cancel(true));
			this.addAction("listPrev", (name) => manager_default$1.previous(name));
			this.addAction("listNext", (name) => manager_default$1.next(name));
			this.addAction("listFirst", (name) => manager_default$1.first(name));
			this.addAction("listLast", (name) => manager_default$1.last(name));
			this.addAction("sendRequest", (id, method, params) => services_default.sendRequest(id, method, params));
			this.addAction("sendNotification", (id, method, params) => services_default.sendNotification(id, method, params));
			this.addAction("registerNotification", (id, method) => services_default.registerNotification(id, method), "registNotification");
			this.addAction("updateConfig", (section, val) => workspace_default.configurations.updateMemoryConfig({ [section]: val }));
			this.addAction("links", () => this.handler.links.getLinks());
			this.addAction("openLink", () => this.handler.links.openCurrentLink());
			this.addAction("pickColor", () => this.handler.colors.pickColor());
			this.addAction("colorPresentation", () => this.handler.colors.pickPresentation());
			this.addAction("highlight", () => this.handler.documentHighlighter.highlight());
			this.addAction("fold", (kind) => this.handler.fold.fold(kind));
			this.addAction("startCompletion", (option) => completion_default.startCompletion(option));
			this.addAction("stopCompletion", (kind) => completion_default.stop(kind));
			this.addAction("sourceStat", () => sources_default.sourceStats());
			this.addAction("refreshSource", (name) => sources_default.refresh(name));
			this.addAction("toggleSource", (name) => sources_default.toggleSource(name));
			this.addAction("fillDiagnostics", (bufnr) => manager_default$2.setLocationlist(bufnr));
			this.addAction("diagnosticRefresh", (bufnr) => manager_default$2.refresh(bufnr));
			this.addAction("diagnosticInfo", (target) => manager_default$2.echoCurrentMessage(target));
			this.addAction("diagnosticToggle", (enable) => manager_default$2.toggleDiagnostic(enable));
			this.addAction("diagnosticToggleBuffer", (bufnr, enable) => manager_default$2.toggleDiagnosticBuffer(bufnr, enable));
			this.addAction("diagnosticNext", (severity) => manager_default$2.jumpNext(severity));
			this.addAction("diagnosticPrevious", (severity) => manager_default$2.jumpPrevious(severity));
			this.addAction("diagnosticPreview", () => manager_default$2.preview());
			this.addAction("diagnosticList", () => manager_default$2.getDiagnosticList());
			this.addAction("diagnosticRelatedInformation", () => manager_default$2.relatedInformation());
			this.addAction("findLocations", (id, method, params, openCommand) => this.handler.locations.findLocations(id, method, params, openCommand));
			this.addAction("getTagList", () => this.handler.locations.getTagList());
			this.addAction("definitions", () => this.handler.locations.definitions());
			this.addAction("declarations", () => this.handler.locations.declarations());
			this.addAction("implementations", () => this.handler.locations.implementations());
			this.addAction("typeDefinitions", () => this.handler.locations.typeDefinitions());
			this.addAction("references", (excludeDeclaration) => this.handler.locations.references(excludeDeclaration));
			this.addAction("jumpUsed", (openCommand) => this.handler.locations.gotoReferences(openCommand, false));
			this.addAction("jumpDefinition", (openCommand) => this.handler.locations.gotoDefinition(openCommand));
			this.addAction("jumpReferences", (openCommand) => this.handler.locations.gotoReferences(openCommand));
			this.addAction("jumpTypeDefinition", (openCommand) => this.handler.locations.gotoTypeDefinition(openCommand));
			this.addAction("jumpDeclaration", (openCommand) => this.handler.locations.gotoDeclaration(openCommand));
			this.addAction("jumpImplementation", (openCommand) => this.handler.locations.gotoImplementation(openCommand));
			this.addAction("doHover", (hoverTarget) => this.handler.hover.onHover(hoverTarget));
			this.addAction("definitionHover", (hoverTarget) => this.handler.hover.definitionHover(hoverTarget));
			this.addAction("getHover", (loc) => this.handler.hover.getHover(loc));
			this.addAction("showSignatureHelp", () => this.handler.signature.triggerSignatureHelp());
			this.addAction("documentSymbols", (bufnr) => this.handler.symbols.getDocumentSymbols(bufnr));
			this.addAction("symbolRanges", () => this.handler.documentHighlighter.getSymbolsRanges());
			this.addAction("selectionRanges", () => this.handler.selectionRange.getSelectionRanges());
			this.addAction("rangeSelect", (visualmode, forward) => this.handler.selectionRange.selectRange(visualmode, forward));
			this.addAction("rename", (newName) => this.handler.rename.rename(newName));
			this.addAction("getWorkspaceSymbols", (input) => this.handler.symbols.getWorkspaceSymbols(input));
			this.addAction("resolveWorkspaceSymbol", (symbolInfo) => this.handler.symbols.resolveWorkspaceSymbol(symbolInfo));
			this.addAction("formatSelected", (mode) => this.handler.format.formatCurrentRange(mode));
			this.addAction("format", () => this.handler.format.formatCurrentBuffer());
			this.addAction("commands", () => commands_default.commandList);
			this.addAction("services", () => services_default.getServiceStats());
			this.addAction("toggleService", (name) => services_default.toggle(name));
			this.addAction("codeAction", (mode, only, noExclude) => this.handler.codeActions.doCodeAction(mode, only, noExclude));
			this.addAction("organizeImport", () => this.handler.codeActions.organizeImport());
			this.addAction("fixAll", () => this.handler.codeActions.doCodeAction(null, [CodeActionKind.SourceFixAll]));
			this.addAction("doCodeAction", (codeAction) => this.handler.codeActions.applyCodeAction(codeAction));
			this.addAction("codeActions", (mode, only) => this.handler.codeActions.getCurrentCodeActions(mode, only));
			this.addAction("quickfixes", (mode) => this.handler.codeActions.getCurrentCodeActions(mode, [CodeActionKind.QuickFix]));
			this.addAction("codeLensAction", () => this.handler.codeLens.doAction());
			this.addAction("doQuickfix", () => this.handler.codeActions.doQuickfix());
			this.addAction("search", (...args) => this.handler.refactor.search(args));
			this.addAction("saveRefactor", (bufnr) => this.handler.refactor.save(bufnr));
			this.addAction("refactor", () => this.handler.refactor.doRefactor());
			this.addAction("runCommand", (...args) => this.handler.commands.runCommand(...args));
			this.addAction("repeatCommand", () => this.handler.commands.repeat());
			this.addAction("installExtensions", (...list) => extension_default.installExtensions(list));
			this.addAction("updateExtensions", (silent) => extension_default.updateExtensions(silent, extension_default.getUpdateSettings().updateUIInTab));
			this.addAction("extensionStats", () => extension_default.getExtensionStates());
			this.addAction("loadedExtensions", () => extension_default.manager.loadedExtensions);
			this.addAction("watchExtension", (id) => extension_default.manager.watchExtension(id));
			this.addAction("activeExtension", (name) => extension_default.manager.activate(name));
			this.addAction("deactivateExtension", (name) => extension_default.manager.deactivate(name));
			this.addAction("reloadExtension", (name) => extension_default.manager.reloadExtension(name));
			this.addAction("toggleExtension", (name) => extension_default.manager.toggleExtension(name));
			this.addAction("uninstallExtension", (...args) => extension_default.manager.uninstallExtensions(args));
			this.addAction("getCurrentFunctionSymbol", () => this.handler.symbols.getCurrentFunctionSymbol());
			this.addAction("showOutline", (keep) => this.handler.symbols.showOutline(keep));
			this.addAction("hideOutline", () => this.handler.symbols.hideOutline());
			this.addAction("getWordEdit", () => this.handler.rename.getWordEdit());
			this.addAction("addCommand", (cmd) => this.handler.commands.addVimCommand(cmd));
			this.addAction("addRanges", (ranges) => this.cursors.addRanges(ranges));
			this.addAction("currentWorkspacePath", () => workspace_default.rootPath);
			this.addAction("selectCurrentPlaceholder", (triggerAutocmd) => manager_default.selectCurrentPlaceholder(!!triggerAutocmd));
			this.addAction("codeActionRange", (start, end, only) => this.handler.codeActions.codeActionRange(start, end, only));
			this.addAction("incomingCalls", (item) => this.handler.callHierarchy.getIncoming(item));
			this.addAction("outgoingCalls", (item) => this.handler.callHierarchy.getOutgoing(item));
			this.addAction("showIncomingCalls", () => this.handler.callHierarchy.showCallHierarchyTree("incoming"));
			this.addAction("showOutgoingCalls", () => this.handler.callHierarchy.showCallHierarchyTree("outgoing"));
			this.addAction("showSuperTypes", () => this.handler.typeHierarchy.showTypeHierarchyTree("supertypes"));
			this.addAction("showSubTypes", () => this.handler.typeHierarchy.showTypeHierarchyTree("subtypes"));
			this.addAction("inspectSemanticToken", () => this.handler.semanticHighlighter.inspectSemanticToken());
			this.addAction("semanticHighlight", () => this.handler.semanticHighlighter.highlightCurrent());
			this.addAction("showSemanticHighlightInfo", () => this.handler.semanticHighlighter.showHighlightInfo());
			this.addAction("inlineTrigger", (bufnr, option) => this.handler.inlineCompletion.trigger(bufnr, option));
			this.addAction("inlineCancel", () => this.handler.inlineCompletion.cancel());
			this.addAction("inlineAccept", (bufnr, kind) => this.handler.inlineCompletion.accept(bufnr, kind));
			this.addAction("inlineNext", (bufnr) => this.handler.inlineCompletion.next(bufnr));
			this.addAction("inlinePrev", (bufnr) => this.handler.inlineCompletion.prev(bufnr));
			this.addAction("notificationHistory", () => window_default.notifications.history);
		}
		get workspace() {
			return workspace_default;
		}
		get window() {
			return window_default;
		}
		get completion() {
			return completion_default;
		}
		addAction(key, fn, alias) {
			if (this.actions.has(key)) throw new Error(`Action ${key} already exists`);
			this.actions.set(key, fn);
			if (alias) this.actions.set(alias, fn);
		}
		async init(rtp) {
			if (this.initialized) return;
			this.initialized = true;
			let { nvim } = this;
			await extension_default.init(rtp);
			await workspace_default.init(window_default);
			nvim.setVar("coc_workspace_initialized", true, true);
			manager_default.init();
			services_default.init();
			sources_default.init();
			completion_default.init();
			manager_default$2.init();
			this.handler = new Handler(nvim);
			this.disposables.push(this.handler);
			manager_default$1.registerLists();
			await extension_default.activateExtensions();
			workspace_default.configurations.flushConfigurations();
			nvim.pauseNotification();
			nvim.setVar("coc_service_initialized", 1, true);
			nvim.call("coc#util#do_autocmd", ["CocNvimInit"], true);
			nvim.resumeNotification(false, true);
			logger$1.info(`coc.nvim initialized with node: ${process.version} after`, Date.now() - getConditionValue(global.__starttime, Date.now()));
			this.ready = true;
			await events_default.fire("ready", []);
		}
		get isReady() {
			return this.ready;
		}
		hasAction(method) {
			return this.actions.has(method);
		}
		async cocAction(method, ...args) {
			let fn = this.actions.get(method);
			if (!fn) throw new Error(`Action "${method}" does not exist`);
			return await Promise.resolve(fn.apply(null, args));
		}
		getHandler() {
			return this.handler;
		}
		dispose() {
			disposeAll(this.disposables);
			extension_default.dispose();
			manager_default$1.dispose();
			workspace_default.dispose();
			window_default.dispose();
			sources_default.dispose();
			services_default.dispose();
			manager_default.dispose();
			commands_default.dispose();
			completion_default.dispose();
			manager_default$2.dispose();
		}
	};
}));
//#endregion
//#region src/attach.ts
var attach_exports = /* @__PURE__ */ __exportAll({ default: () => attach_default });
var logger, ACTIONS_NO_WAIT, semVer, pendingNotifications, NO_ERROR_REQUEST, attach_default;
var init_attach = __esmMin((() => {
	init_neovim();
	init_events();
	init_logger$2();
	init_plugin();
	init_constants();
	init_node();
	init_string$1();
	init_timing();
	logger = createLogger$1("attach");
	ACTIONS_NO_WAIT = ["installExtensions", "updateExtensions"];
	semVer = semver.parse(VERSION);
	pendingNotifications = [];
	NO_ERROR_REQUEST = ["doAutocmd", "CocAutocmd"];
	attach_default = (opts, requestApi = false) => {
		const nvim = attach(opts, createLogger$1("node-client"), requestApi);
		nvim.setVar("coc_process_pid", process.pid, true);
		nvim.setClientInfo("coc", {
			major: semVer.major,
			minor: semVer.minor,
			patch: semVer.patch
		}, "remote", {}, {});
		const plugin = new Plugin(nvim);
		let disposable = events_default.on("ready", () => {
			disposable.dispose();
			for (let [method, args] of pendingNotifications) plugin.cocAction(method, ...args).catch((e) => {
				console.error(`Error on notification "${method}": ${e}`);
				logger.error(`Error on notification ${method}`, e);
			});
			pendingNotifications = [];
		});
		nvim.on("notification", async (method, args) => {
			switch (method) {
				case "VimEnter":
					await plugin.init(args[0]);
					break;
				case "Log":
					logger.debug("Vim log", ...args);
					break;
				case "TaskExit":
				case "TaskStderr":
				case "TaskStdout":
				case "GlobalChange":
				case "PromptInsert":
				case "PromptExit":
				case "InputChar":
				case "MenuInput":
				case "OptionSet":
				case "PromptKeyPress":
				case "FloatBtnClick":
				case "InputListSelect":
				case "PumNavigate":
					logger.trace("Event: ", method, ...args);
					await events_default.fire(method, args);
					break;
				case "CocAutocmd":
					logger.trace("Notification autocmd:", ...args);
					await events_default.fire(args[0], args.slice(1));
					break;
				case "redraw": break;
				default: try {
					logger.info("receive notification:", method, args);
					if (!plugin.isReady) {
						pendingNotifications.push([method, args]);
						return;
					}
					await plugin.cocAction(method, ...args);
				} catch (e) {
					console.error(`Error on notification "${method}": ${toErrorText(e)}`);
					logger.error(`Error on notification ${method}`, e);
				}
			}
		});
		let timing = createTiming("Request", 3e3);
		nvim.on("request", async (method, args, resp) => {
			timing.start(method);
			try {
				events_default.requesting = true;
				if (method == "CocAutocmd") {
					logger.trace("Request autocmd:", ...args);
					await events_default.fire(args[0], args.slice(1));
					resp.send(void 0);
				} else if (!plugin.isReady && !ACTIONS_NO_WAIT.includes(method)) {
					logger.warn(`Plugin not ready on request "${method}"`, args);
					resp.send("Plugin not ready", true);
				} else {
					logger.info("Request action:", method, args);
					let res = await plugin.cocAction(method, ...args);
					resp.send(res);
				}
				events_default.requesting = false;
			} catch (e) {
				events_default.requesting = false;
				if (NO_ERROR_REQUEST.includes(method)) {
					nvim.echoError(/* @__PURE__ */ new Error(`Request "${method}" failed`));
					resp.send("");
				} else resp.send(toErrorText(e), true);
				logger.error(`Request error:`, method, args, e);
			}
			timing.stop();
		});
		return plugin;
	};
}));
//#endregion
//#region \0coc-entry
if (global.__isMain) {
	const { createLogger } = (init_logger$2(), __toCommonJS(logger_exports));
	const logger = createLogger("server");
	Object.defineProperty(console, "log", { value() {
		if (logger) logger.info(...arguments);
	} });
	process.on("uncaughtException", function(err) {
		let msg = "Uncaught exception: " + err.message;
		console.error(msg);
		logger.error("uncaughtException", err.stack);
	});
	process.on("unhandledRejection", function(reason, p) {
		if (reason instanceof Error) if (typeof reason.code === "number") {
			let msg = "Unhandled response error " + reason.code + " from language server: " + reason.message;
			if (reason.data != null) console.error(msg, reason.data);
			else console.error(msg);
		} else console.error("UnhandledRejection: " + reason.message + "\n" + reason.stack);
		else console.error("UnhandledRejection: " + reason);
		logger.error("unhandledRejection ", p, reason);
	});
	const attach = (init_attach(), __toCommonJS(attach_exports)).default;
	attach({
		reader: process.stdin,
		writer: process.stdout
	});
} else {
	const exports = require_src();
	const logger = (init_logger$2(), __toCommonJS(logger_exports)).logger;
	const attach = (init_attach(), __toCommonJS(attach_exports)).default;
	module.exports = {
		attach,
		exports,
		logger,
		loadExtension: (filepath, active) => {
			return exports.extensions.manager.load(filepath, active);
		}
	};
}
//#endregion
