UNPKG

ranui

Version:

A framework-agnostic Web Components UI library built on native custom elements, with TypeScript types, light/dark theming, SSR and PWA support.

2,005 lines (2,004 loc) 104 kB
import { n as b } from "./chunk-Y2CYZVJY-0JxdZxki.js"; import { m as J, p as se } from "./src-DtRLxcYO.js"; import { $ as Xe, G as Ue, H as qe, K as Qe, U as Je, a as Ze, d as $e, it as et, k as tt, s as st, v as it, w as rt, x as g1, y as at } from "./chunk-WYO6CB5R-DDHkKowO.js"; import { t as nt } from "./channel-k5-UxdcV.js"; import { c as ie, g as re } from "./chunk-ICXQ74PX-DR8rL-xF.js"; import { t as ut } from "./chunk-5VM5RSS4-Cni2Ogq2.js"; import { t as ot } from "./chunk-32BRIVSS-jAuAwMVV.js"; import { t as lt } from "./chunk-XXDRQBXY-BB1i_53q.js"; import { t as ct } from "./chunk-VR4S4FIN-CJi5okl4.js"; import { o as ht } from "./chunk-ZGVPDNZ5-6uMbTJXy.js"; import { r as dt, t as pt } from "./chunk-FWX5IMBZ-DZ5VYvm5.js"; import { n as ft, t as gt } from "./chunk-ZIRB5QZD-C7OH2FI2.js"; var bt = "flowchart-", At = class { constructor() { this.vertexCounter = 0, this.config = g1(), this.diagramId = "", this.vertices = /* @__PURE__ */ new Map(), this.edges = [], this.classes = /* @__PURE__ */ new Map(), this.subGraphs = [], this.subGraphLookup = /* @__PURE__ */ new Map(), this.tooltips = /* @__PURE__ */ new Map(), this.subCount = 0, this.firstGraphFlag = !0, this.secCount = -1, this.posCrossRef = [], this.funs = [], this.setAccTitle = Je, this.setAccDescription = qe, this.setDiagramTitle = Qe, this.getAccTitle = at, this.getAccDescription = it, this.getDiagramTitle = rt, this.funs.push(this.setupToolTips.bind(this)), this.addVertex = this.addVertex.bind(this), this.firstGraph = this.firstGraph.bind(this), this.setDirection = this.setDirection.bind(this), this.addSubGraph = this.addSubGraph.bind(this), this.addLink = this.addLink.bind(this), this.setLink = this.setLink.bind(this), this.updateLink = this.updateLink.bind(this), this.addClass = this.addClass.bind(this), this.setClass = this.setClass.bind(this), this.destructLink = this.destructLink.bind(this), this.setClickEvent = this.setClickEvent.bind(this), this.setTooltip = this.setTooltip.bind(this), this.updateLinkInterpolate = this.updateLinkInterpolate.bind(this), this.setClickFun = this.setClickFun.bind(this), this.bindFunctions = this.bindFunctions.bind(this), this.lex = { firstGraph: this.firstGraph.bind(this) }, this.clear(), this.setGen("gen-2"); } static { b(this, "FlowDB"); } sanitizeText(e) { return st.sanitizeText(e, this.config); } sanitizeNodeLabelType(e) { switch (e) { case "markdown": case "string": case "text": return e; default: return "markdown"; } } setDiagramId(e) { this.diagramId = e; } lookUpDomId(e) { for (const r of this.vertices.values()) if (r.id === e) return this.diagramId ? `${this.diagramId}-${r.domId}` : r.domId; return this.diagramId ? `${this.diagramId}-${e}` : e; } addVertex(e, r, i, a, n, h, d = {}, l) { if (!e || e.trim().length === 0) return; let o; if (l !== void 0) { let C; l.includes(` `) ? C = l + ` ` : C = `{ ` + l + ` }`, o = ft(C, { schema: gt }); } const x = this.edges.find((C) => C.id === e); if (x) { const C = o; C?.animate !== void 0 && (x.animate = C.animate), C?.animation !== void 0 && (x.animation = C.animation), C?.curve !== void 0 && (x.interpolate = C.curve); return; } let L, p = this.vertices.get(e); if (p === void 0 && (r === void 0 && i === void 0 && a !== void 0 && a !== null && J.warn(`Style applied to unknown node "${e}". This may indicate a typo. The node will be created automatically.`), p = { id: e, labelType: "text", domId: bt + e + "-" + this.vertexCounter, styles: [], classes: [] }, this.vertices.set(e, p)), this.vertexCounter++, r !== void 0 ? (this.config = g1(), L = this.sanitizeText(r.text.trim()), p.labelType = r.type, L.startsWith('"') && L.endsWith('"') && (L = L.substring(1, L.length - 1)), p.text = L) : p.text === void 0 && (p.text = e), i !== void 0 && (p.type = i), a?.forEach((C) => { p.styles.push(C); }), n?.forEach((C) => { p.classes.push(C); }), h !== void 0 && (p.dir = h), p.props === void 0 ? p.props = d : d !== void 0 && Object.assign(p.props, d), o !== void 0) { if (o.shape) { if (o.shape !== o.shape.toLowerCase() || o.shape.includes("_")) throw new Error(`No such shape: ${o.shape}. Shape names should be lowercase.`); if (!ht(o.shape)) throw new Error(`No such shape: ${o.shape}.`); p.type = o?.shape; } o?.label && (p.text = o?.label, p.labelType = this.sanitizeNodeLabelType(o?.labelType)), o?.icon && (p.icon = o?.icon, !o.label?.trim() && p.text === e && (p.text = "")), o?.form && (p.form = o?.form), o?.pos && (p.pos = o?.pos), o?.img && (p.img = o?.img, !o.label?.trim() && p.text === e && (p.text = "")), o?.constraint && (p.constraint = o.constraint), o.w && (p.assetWidth = Number(o.w)), o.h && (p.assetHeight = Number(o.h)); } } addSingleLink(e, r, i, a) { const n = { start: e, end: r, type: void 0, text: "", labelType: "text", classes: [], isUserDefinedId: !1, interpolate: this.edges.defaultInterpolate }; J.info("abc78 Got edge...", n); const h = i.text; if (h !== void 0 && (n.text = this.sanitizeText(h.text.trim()), n.text.startsWith('"') && n.text.endsWith('"') && (n.text = n.text.substring(1, n.text.length - 1)), n.labelType = this.sanitizeNodeLabelType(h.type)), i !== void 0 && (n.type = i.type, n.stroke = i.stroke, n.length = i.length > 10 ? 10 : i.length), a && !this.edges.some((d) => d.id === a)) n.id = a, n.isUserDefinedId = !0; else { const d = this.edges.filter((l) => l.start === n.start && l.end === n.end); d.length === 0 ? n.id = ie(n.start, n.end, { counter: 0, prefix: "L" }) : n.id = ie(n.start, n.end, { counter: d.length + 1, prefix: "L" }); } if (this.edges.length < (this.config.maxEdges ?? 500)) J.info("Pushing edge..."), this.edges.push(n); else throw new Error(`Edge limit exceeded. ${this.edges.length} edges found, but the limit is ${this.config.maxEdges}. Initialize mermaid with maxEdges set to a higher number to allow more edges. You cannot set this config via configuration inside the diagram as it is a secure config. You have to call mermaid.initialize.`); } isLinkData(e) { return e !== null && typeof e == "object" && "id" in e && typeof e.id == "string"; } addLink(e, r, i) { const a = this.isLinkData(i) ? i.id.replace("@", "") : void 0; J.info("addLink", e, r, a); for (const n of e) for (const h of r) { const d = n === e[e.length - 1], l = h === r[0]; d && l ? this.addSingleLink(n, h, i, a) : this.addSingleLink(n, h, i, void 0); } } updateLinkInterpolate(e, r) { e.forEach((i) => { i === "default" ? this.edges.defaultInterpolate = r : this.edges[i].interpolate = r; }); } updateLink(e, r) { e.forEach((i) => { if (typeof i == "number" && i >= this.edges.length) throw new Error(`The index ${i} for linkStyle is out of bounds. Valid indices for linkStyle are between 0 and ${this.edges.length - 1}. (Help: Ensure that the index is within the range of existing edges.)`); i === "default" ? this.edges.defaultStyle = r : (this.edges[i].style = r, (this.edges[i]?.style?.length ?? 0) > 0 && !this.edges[i]?.style?.some((a) => a?.startsWith("fill")) && this.edges[i]?.style?.push("fill:none")); }); } addClass(e, r) { const i = r.join().replace(/\\,/g, "§§§").replace(/,/g, ";").replace(/§§§/g, ",").split(";"); e.split(",").forEach((a) => { let n = this.classes.get(a); n === void 0 && (n = { id: a, styles: [], textStyles: [] }, this.classes.set(a, n)), i?.forEach((h) => { if (/color/.exec(h)) { const d = h.replace("fill", "bgFill"); n.textStyles.push(d); } n.styles.push(h); }); }); } setDirection(e) { this.direction = e.trim(), /.*</.exec(this.direction) && (this.direction = "RL"), /.*\^/.exec(this.direction) && (this.direction = "BT"), /.*>/.exec(this.direction) && (this.direction = "LR"), /.*v/.exec(this.direction) && (this.direction = "TB"), this.direction === "TD" && (this.direction = "TB"); } setClass(e, r) { for (const i of e.split(",")) { const a = this.vertices.get(i); a && a.classes.push(r); const n = this.edges.find((d) => d.id === i); n && n.classes.push(r); const h = this.subGraphLookup.get(i); h && h.classes.push(r); } } setTooltip(e, r) { if (r !== void 0) { r = this.sanitizeText(r); for (const i of e.split(",")) this.tooltips.set(this.version === "gen-1" ? this.lookUpDomId(i) : i, r); } } setClickFun(e, r, i) { if (g1().securityLevel !== "loose" || r === void 0) return; let a = []; if (typeof i == "string") { a = i.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/); for (let h = 0; h < a.length; h++) { let d = a[h].trim(); d.startsWith('"') && d.endsWith('"') && (d = d.substr(1, d.length - 2)), a[h] = d; } } a.length === 0 && a.push(e); const n = this.vertices.get(e); n && (n.haveCallback = !0, this.funs.push(() => { const h = this.lookUpDomId(e), d = document.querySelector(`[id="${h}"]`); d !== null && d.addEventListener("click", () => { re.runFunc(r, ...a); }, !1); })); } setLink(e, r, i) { e.split(",").forEach((a) => { const n = this.vertices.get(a); n !== void 0 && (n.link = re.formatUrl(r, this.config), n.linkTarget = i); }), this.setClass(e, "clickable"); } getTooltip(e) { return this.tooltips.get(e); } setClickEvent(e, r, i) { e.split(",").forEach((a) => { this.setClickFun(a, r, i); }), this.setClass(e, "clickable"); } bindFunctions(e) { this.funs.forEach((r) => { r(e); }); } getDirection() { return this.direction?.trim(); } getVertices() { return this.vertices; } getEdges() { return this.edges; } getClasses() { return this.classes; } setupToolTips(e) { const r = ot(); se(e).select("svg").selectAll("g.node").on("mouseover", (i) => { const a = se(i.currentTarget), n = a.attr("title"); if (n === null) return; const h = i.currentTarget?.getBoundingClientRect(); r.transition().duration(200).style("opacity", ".9"), r.text(a.attr("title")).style("left", window.scrollX + h.left + (h.right - h.left) / 2 + "px").style("top", window.scrollY + h.bottom + "px"), r.html(Xe.sanitize(n)), a.classed("hover", !0); }).on("mouseout", (i) => { r.transition().duration(500).style("opacity", 0), se(i.currentTarget).classed("hover", !1); }); } clear(e = "gen-2") { this.vertices = /* @__PURE__ */ new Map(), this.classes = /* @__PURE__ */ new Map(), this.edges = [], this.funs = [this.setupToolTips.bind(this)], this.diagramId = "", this.subGraphs = [], this.subGraphLookup = /* @__PURE__ */ new Map(), this.subCount = 0, this.tooltips = /* @__PURE__ */ new Map(), this.firstGraphFlag = !0, this.version = e, this.config = g1(), Ze(); } setGen(e) { this.version = e || "gen-2"; } defaultStyle() { return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"; } addSubGraph(e, r, i) { let a = e.text.trim(), n = i.text; e === i && /\s/.exec(i.text) && (a = void 0); const h = (/* @__PURE__ */ b((C) => { const h1 = { boolean: {}, number: {}, string: {} }, F = []; let _; return { nodeList: C.filter(function(Y) { const d1 = typeof Y; return Y.stmt && Y.stmt === "dir" ? (_ = Y.value, !1) : Y.trim() === "" ? !1 : d1 in h1 ? h1[d1].hasOwnProperty(Y) ? !1 : h1[d1][Y] = !0 : F.includes(Y) ? !1 : F.push(Y); }), dir: _ }; }, "uniq"))(r.flat()), d = h.nodeList, l = h.dir, o = l !== void 0, x = g1().flowchart ?? {}, L = l ?? (x.inheritDir ? this.getDirection() ?? g1().direction ?? void 0 : void 0); if (this.version === "gen-1") for (let C = 0; C < d.length; C++) d[C] = this.lookUpDomId(d[C]); a = a ?? "subGraph" + this.subCount, n = n || "", n = this.sanitizeText(n), this.subCount = this.subCount + 1; const p = { id: a, nodes: d, title: n.trim(), classes: [], dir: L, hasExplicitDir: o, labelType: this.sanitizeNodeLabelType(i?.type) }; return J.info("Adding", p.id, p.nodes, p.dir), p.nodes = this.makeUniq(p, this.subGraphs).nodes, this.subGraphs.push(p), this.subGraphLookup.set(a, p), a; } getPosForId(e) { for (const [r, i] of this.subGraphs.entries()) if (i.id === e) return r; return -1; } indexNodes2(e, r) { const i = this.subGraphs[r].nodes; if (this.secCount = this.secCount + 1, this.secCount > 2e3) return { result: !1, count: 0 }; if (this.posCrossRef[this.secCount] = r, this.subGraphs[r].id === e) return { result: !0, count: 0 }; let a = 0, n = 1; for (; a < i.length; ) { const h = this.getPosForId(i[a]); if (h >= 0) { const d = this.indexNodes2(e, h); if (d.result) return { result: !0, count: n + d.count }; n = n + d.count; } a = a + 1; } return { result: !1, count: n }; } getDepthFirstPos(e) { return this.posCrossRef[e]; } indexNodes() { this.secCount = -1, this.subGraphs.length > 0 && this.indexNodes2("none", this.subGraphs.length - 1); } getSubGraphs() { return this.subGraphs; } firstGraph() { return this.firstGraphFlag ? (this.firstGraphFlag = !1, !0) : !1; } destructStartLink(e) { let r = e.trim(), i = "arrow_open"; switch (r[0]) { case "<": i = "arrow_point", r = r.slice(1); break; case "x": i = "arrow_cross", r = r.slice(1); break; case "o": i = "arrow_circle", r = r.slice(1); break; } let a = "normal"; return r.includes("=") && (a = "thick"), r.includes(".") && (a = "dotted"), { type: i, stroke: a }; } countChar(e, r) { const i = r.length; let a = 0; for (let n = 0; n < i; ++n) r[n] === e && ++a; return a; } destructEndLink(e) { const r = e.trim(); let i = r.slice(0, -1), a = "arrow_open"; switch (r.slice(-1)) { case "x": a = "arrow_cross", r.startsWith("x") && (a = "double_" + a, i = i.slice(1)); break; case ">": a = "arrow_point", r.startsWith("<") && (a = "double_" + a, i = i.slice(1)); break; case "o": a = "arrow_circle", r.startsWith("o") && (a = "double_" + a, i = i.slice(1)); break; } let n = "normal", h = i.length - 1; i.startsWith("=") && (n = "thick"), i.startsWith("~") && (n = "invisible"); const d = this.countChar(".", i); return d && (n = "dotted", h = d), { type: a, stroke: n, length: h }; } destructLink(e, r) { const i = this.destructEndLink(e); let a; if (r) { if (a = this.destructStartLink(r), a.stroke !== i.stroke) return { type: "INVALID", stroke: "INVALID" }; if (a.type === "arrow_open") a.type = i.type; else { if (a.type !== i.type) return { type: "INVALID", stroke: "INVALID" }; a.type = "double_" + a.type; } return a.type === "double_arrow" && (a.type = "double_arrow_point"), a.length = i.length, a; } return i; } exists(e, r) { for (const i of e) if (i.nodes.includes(r)) return !0; return !1; } makeUniq(e, r) { const i = []; return e.nodes.forEach((a, n) => { this.exists(r, a) || i.push(e.nodes[n]); }), { nodes: i }; } getTypeFromVertex(e) { if (e.img) return "imageSquare"; if (e.icon) return e.form === "circle" ? "iconCircle" : e.form === "square" ? "iconSquare" : e.form === "rounded" ? "iconRounded" : "icon"; switch (e.type) { case "square": case void 0: return "squareRect"; case "round": return "roundedRect"; case "ellipse": return "ellipse"; default: return e.type; } } findNode(e, r) { return e.find((i) => i.id === r); } destructEdgeType(e) { let r = "none", i = "arrow_point"; switch (e) { case "arrow_point": case "arrow_circle": case "arrow_cross": i = e; break; case "double_arrow_point": case "double_arrow_circle": case "double_arrow_cross": r = e.replace("double_", ""), i = r; break; } return { arrowTypeStart: r, arrowTypeEnd: i }; } addNodeFromVertex(e, r, i, a, n, h) { const d = i.get(e.id), l = a.get(e.id) ?? !1, o = this.findNode(r, e.id); if (o) o.cssStyles = e.styles, o.cssCompiledStyles = this.getCompiledStyles(e.classes), o.cssClasses = e.classes.join(" "); else { const x = { id: e.id, label: e.text, labelType: e.labelType, labelStyle: "", parentId: d, padding: n.flowchart?.padding || 8, cssStyles: e.styles, cssCompiledStyles: this.getCompiledStyles([ "default", "node", ...e.classes ]), cssClasses: "default " + e.classes.join(" "), dir: e.dir, domId: e.domId, look: h, link: e.link, linkTarget: e.linkTarget, tooltip: this.getTooltip(e.id), icon: e.icon, pos: e.pos, img: e.img, assetWidth: e.assetWidth, assetHeight: e.assetHeight, constraint: e.constraint }; l ? r.push({ ...x, isGroup: !0, shape: "rect" }) : r.push({ ...x, isGroup: !1, shape: this.getTypeFromVertex(e) }); } } getCompiledStyles(e) { let r = []; for (const i of e) { const a = this.classes.get(i); a?.styles && (r = [...r, ...a.styles ?? []].map((n) => n.trim())), a?.textStyles && (r = [...r, ...a.textStyles ?? []].map((n) => n.trim())); } return r; } getData() { const e = g1(), r = [], i = [], a = this.getSubGraphs(), n = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map(); for (let l = a.length - 1; l >= 0; l--) { const o = a[l]; o.nodes.length > 0 && h.set(o.id, !0); for (const x of o.nodes) n.set(x, o.id); } for (let l = a.length - 1; l >= 0; l--) { const o = a[l]; r.push({ id: o.id, label: o.title, labelStyle: "", labelType: o.labelType, parentId: n.get(o.id), padding: 8, cssCompiledStyles: this.getCompiledStyles(o.classes), cssClasses: o.classes.join(" "), shape: "rect", dir: o.dir === "TD" ? "TB" : o.dir, explicitDir: o.hasExplicitDir, isGroup: !0, look: e.look }); } this.getVertices().forEach((l) => { this.addNodeFromVertex(l, r, n, h, e, e.look || "classic"); }); const d = this.getEdges(); return d.forEach((l, o) => { const { arrowTypeStart: x, arrowTypeEnd: L } = this.destructEdgeType(l.type), p = [...d.defaultStyle ?? []]; l.style && p.push(...l.style); const C = { id: ie(l.start, l.end, { counter: o, prefix: "L" }, l.id), isUserDefinedId: l.isUserDefinedId, start: l.start, end: l.end, type: l.type ?? "normal", label: l.text, labelType: l.labelType, labelpos: "c", thickness: l.stroke, minlen: l.length, classes: l?.stroke === "invisible" ? "" : "edge-thickness-normal edge-pattern-solid flowchart-link", arrowTypeStart: l?.stroke === "invisible" || l?.type === "arrow_open" ? "none" : x, arrowTypeEnd: l?.stroke === "invisible" || l?.type === "arrow_open" ? "none" : L, arrowheadStyle: "fill: #333", cssCompiledStyles: this.getCompiledStyles(l.classes), labelStyle: p, style: p, pattern: l.stroke, look: e.look, animate: l.animate, animation: l.animation, curve: l.interpolate || this.edges.defaultInterpolate || e.flowchart?.curve }; i.push(C); }), { nodes: r, edges: i, other: {}, config: e }; } defaultConfig() { return $e.flowchart; } }, kt = { getClasses: /* @__PURE__ */ b(function(e, r) { return r.db.getClasses(); }, "getClasses"), draw: /* @__PURE__ */ b(async function(e, r, i, a, n) { J.info("REF0:"), J.info("Drawing state diagram (v2)", r); const { securityLevel: h, flowchart: d, layout: l } = g1(); a.db.setDiagramId(r), J.debug("Before getData: "); const o = a.db.getData(); J.debug("Data: ", o); const x = lt(r, h), L = a.db.getDirection(); o.type = a.type, o.layoutAlgorithm = pt(l), o.layoutAlgorithm === "dagre" && l === "elk" && J.warn("flowchart-elk was moved to an external package in Mermaid v11. Please refer [release notes](https://github.com/mermaid-js/mermaid/releases/tag/v11.0.0) for more details. This diagram will be rendered using `dagre` layout as a fallback."), o.direction = L, o.nodeSpacing = d?.nodeSpacing || 50, o.rankSpacing = d?.rankSpacing || 50, o.markers = [ "point", "circle", "cross" ], o.diagramId = r, J.debug("REF1:", o), await dt(o, x, n); const p = o.config.flowchart?.diagramPadding ?? 8; re.insertTitle(x, "flowchartTitleText", d?.titleTopMargin || 0, a.db.getDiagramTitle()), ct(x, p, "flowchart", d?.useMaxWidth || !1); }, "draw") }, ae = (function() { var e = /* @__PURE__ */ b(function(c, f, A, g) { for (A = A || {}, g = c.length; g--; A[c[g]] = f) ; return A; }, "o"), r = [1, 4], i = [1, 3], a = [1, 5], n = [ 1, 8, 9, 10, 11, 27, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124, 125 ], h = [2, 2], d = [1, 13], l = [1, 14], o = [1, 15], x = [1, 16], L = [1, 23], p = [1, 25], C = [1, 26], h1 = [1, 27], F = [1, 50], _ = [1, 49], Y = [1, 29], d1 = [1, 30], N1 = [1, 31], G1 = [1, 32], P1 = [1, 33], V = [1, 45], I = [1, 47], w = [1, 43], R = [1, 48], N = [1, 44], G = [1, 51], P = [1, 46], O = [1, 52], M = [1, 53], O1 = [1, 34], M1 = [1, 35], U1 = [1, 36], z1 = [1, 37], W1 = [1, 38], p1 = [1, 58], T = [ 1, 8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124, 125 ], $ = [1, 62], e1 = [1, 61], t1 = [1, 63], m1 = [ 8, 9, 11, 75, 77, 78 ], ne = [1, 79], D1 = [1, 92], E1 = [1, 97], C1 = [1, 96], T1 = [1, 93], S1 = [1, 89], y1 = [1, 95], x1 = [1, 91], F1 = [1, 98], _1 = [1, 94], B1 = [1, 99], v1 = [1, 90], b1 = [ 8, 9, 10, 11, 40, 75, 77, 78 ], z = [ 8, 9, 10, 11, 40, 46, 75, 77, 78 ], H = [ 8, 9, 10, 11, 29, 40, 44, 46, 48, 50, 52, 54, 56, 58, 60, 63, 65, 67, 68, 70, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116 ], ue = [ 8, 9, 11, 44, 60, 75, 77, 78, 89, 102, 105, 106, 109, 111, 114, 115, 116 ], L1 = [ 44, 60, 89, 102, 105, 106, 109, 111, 114, 115, 116 ], oe = [1, 122], le = [1, 123], K1 = [1, 125], j1 = [1, 124], ce = [ 44, 60, 62, 74, 89, 102, 105, 106, 109, 111, 114, 115, 116 ], he = [1, 134], de = [1, 148], pe = [1, 149], fe = [1, 150], ge = [1, 151], be = [1, 136], Ae = [1, 138], ke = [1, 142], me = [1, 143], De = [1, 144], Ee = [1, 145], Ce = [1, 146], Te = [1, 147], Se = [1, 152], ye = [1, 153], xe = [1, 132], Fe = [1, 133], _e = [1, 140], Be = [1, 135], ve = [1, 139], Le = [1, 137], q1 = [ 8, 9, 10, 11, 27, 32, 34, 36, 38, 44, 60, 84, 85, 86, 87, 88, 89, 102, 105, 106, 109, 111, 114, 115, 116, 121, 122, 123, 124, 125 ], Ve = [1, 155], Ie = [1, 157], y = [ 8, 9, 11 ], X = [ 8, 9, 10, 11, 14, 44, 60, 89, 105, 106, 109, 111, 114, 115, 116 ], k = [1, 177], W = [1, 173], K = [1, 174], m = [1, 178], D = [1, 175], E = [1, 176], V1 = [ 77, 116, 119 ], S = [ 8, 9, 10, 11, 12, 14, 27, 29, 32, 44, 60, 75, 84, 85, 86, 87, 88, 89, 90, 105, 109, 111, 114, 115, 116 ], we = [10, 106], f1 = [ 31, 49, 51, 53, 55, 57, 62, 64, 66, 67, 69, 71, 116, 117, 118 ], s1 = [1, 248], i1 = [1, 246], r1 = [1, 250], a1 = [1, 244], n1 = [1, 245], u1 = [1, 247], o1 = [1, 249], l1 = [1, 251], I1 = [1, 269], Re = [ 8, 9, 11, 106 ], Z = [ 8, 9, 10, 11, 60, 84, 105, 106, 109, 110, 111, 112 ], Q1 = { trace: /* @__PURE__ */ b(function() { }, "trace"), yy: {}, symbols_: { error: 2, start: 3, graphConfig: 4, document: 5, line: 6, statement: 7, SEMI: 8, NEWLINE: 9, SPACE: 10, EOF: 11, GRAPH: 12, NODIR: 13, DIR: 14, FirstStmtSeparator: 15, ending: 16, endToken: 17, spaceList: 18, spaceListNewline: 19, vertexStatement: 20, separator: 21, styleStatement: 22, linkStyleStatement: 23, classDefStatement: 24, classStatement: 25, clickStatement: 26, subgraph: 27, textNoTags: 28, SQS: 29, text: 30, SQE: 31, end: 32, direction: 33, acc_title: 34, acc_title_value: 35, acc_descr: 36, acc_descr_value: 37, acc_descr_multiline_value: 38, shapeData: 39, SHAPE_DATA: 40, link: 41, node: 42, styledVertex: 43, AMP: 44, vertex: 45, STYLE_SEPARATOR: 46, idString: 47, DOUBLECIRCLESTART: 48, DOUBLECIRCLEEND: 49, PS: 50, PE: 51, "(-": 52, "-)": 53, STADIUMSTART: 54, STADIUMEND: 55, SUBROUTINESTART: 56, SUBROUTINEEND: 57, VERTEX_WITH_PROPS_START: 58, "NODE_STRING[field]": 59, COLON: 60, "NODE_STRING[value]": 61, PIPE: 62, CYLINDERSTART: 63, CYLINDEREND: 64, DIAMOND_START: 65, DIAMOND_STOP: 66, TAGEND: 67, TRAPSTART: 68, TRAPEND: 69, INVTRAPSTART: 70, INVTRAPEND: 71, linkStatement: 72, arrowText: 73, TESTSTR: 74, START_LINK: 75, edgeText: 76, LINK: 77, LINK_ID: 78, edgeTextToken: 79, STR: 80, MD_STR: 81, textToken: 82, keywords: 83, STYLE: 84, LINKSTYLE: 85, CLASSDEF: 86, CLASS: 87, CLICK: 88, DOWN: 89, UP: 90, textNoTagsToken: 91, stylesOpt: 92, "idString[vertex]": 93, "idString[class]": 94, CALLBACKNAME: 95, CALLBACKARGS: 96, HREF: 97, LINK_TARGET: 98, "STR[link]": 99, "STR[tooltip]": 100, alphaNum: 101, DEFAULT: 102, numList: 103, INTERPOLATE: 104, NUM: 105, COMMA: 106, style: 107, styleComponent: 108, NODE_STRING: 109, UNIT: 110, BRKT: 111, PCT: 112, idStringToken: 113, MINUS: 114, MULT: 115, UNICODE_TEXT: 116, TEXT: 117, TAGSTART: 118, EDGE_TEXT: 119, alphaNumToken: 120, direction_tb: 121, direction_bt: 122, direction_rl: 123, direction_lr: 124, direction_td: 125, $accept: 0, $end: 1 }, terminals_: { 2: "error", 8: "SEMI", 9: "NEWLINE", 10: "SPACE", 11: "EOF", 12: "GRAPH", 13: "NODIR", 14: "DIR", 27: "subgraph", 29: "SQS", 31: "SQE", 32: "end", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 40: "SHAPE_DATA", 44: "AMP", 46: "STYLE_SEPARATOR", 48: "DOUBLECIRCLESTART", 49: "DOUBLECIRCLEEND", 50: "PS", 51: "PE", 52: "(-", 53: "-)", 54: "STADIUMSTART", 55: "STADIUMEND", 56: "SUBROUTINESTART", 57: "SUBROUTINEEND", 58: "VERTEX_WITH_PROPS_START", 59: "NODE_STRING[field]", 60: "COLON", 61: "NODE_STRING[value]", 62: "PIPE", 63: "CYLINDERSTART", 64: "CYLINDEREND", 65: "DIAMOND_START", 66: "DIAMOND_STOP", 67: "TAGEND", 68: "TRAPSTART", 69: "TRAPEND", 70: "INVTRAPSTART", 71: "INVTRAPEND", 74: "TESTSTR", 75: "START_LINK", 77: "LINK", 78: "LINK_ID", 80: "STR", 81: "MD_STR", 84: "STYLE", 85: "LINKSTYLE", 86: "CLASSDEF", 87: "CLASS", 88: "CLICK", 89: "DOWN", 90: "UP", 93: "idString[vertex]", 94: "idString[class]", 95: "CALLBACKNAME", 96: "CALLBACKARGS", 97: "HREF", 98: "LINK_TARGET", 99: "STR[link]", 100: "STR[tooltip]", 102: "DEFAULT", 104: "INTERPOLATE", 105: "NUM", 106: "COMMA", 109: "NODE_STRING", 110: "UNIT", 111: "BRKT", 112: "PCT", 114: "MINUS", 115: "MULT", 116: "UNICODE_TEXT", 117: "TEXT", 118: "TAGSTART", 119: "EDGE_TEXT", 121: "direction_tb", 122: "direction_bt", 123: "direction_rl", 124: "direction_lr", 125: "direction_td" }, productions_: [ 0, [3, 2], [5, 0], [5, 2], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [4, 2], [4, 2], [4, 2], [4, 3], [16, 2], [16, 1], [17, 1], [17, 1], [17, 1], [15, 1], [15, 1], [15, 2], [19, 2], [19, 2], [19, 1], [19, 1], [18, 2], [18, 1], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [7, 9], [7, 6], [7, 4], [7, 1], [7, 2], [7, 2], [7, 1], [21, 1], [21, 1], [21, 1], [39, 2], [39, 1], [20, 4], [20, 3], [20, 4], [20, 2], [20, 2], [20, 1], [42, 1], [42, 6], [42, 5], [43, 1], [43, 3], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 8], [45, 4], [45, 4], [45, 4], [45, 6], [45, 4], [45, 4], [45, 4], [45, 4], [45, 4], [45, 1], [41, 2], [41, 3], [41, 3], [41, 1], [41, 3], [41, 4], [76, 1], [76, 2], [76, 1], [76, 1], [72, 1], [72, 2], [73, 3], [30, 1], [30, 2], [30, 1], [30, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [28, 1], [28, 2], [28, 1], [28, 1], [24, 5], [25, 5], [26, 2], [26, 4], [26, 3], [26, 5], [26, 3], [26, 5], [26, 5], [26, 7], [26, 2], [26, 4], [26, 2], [26, 4], [26, 4], [26, 6], [22, 5], [23, 5], [23, 5], [23, 9], [23, 9], [23, 7], [23, 7], [103, 1], [103, 3], [92, 1], [92, 3], [107, 1], [107, 2], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [113, 1], [82, 1], [82, 1], [82, 1], [82, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [91, 1], [79, 1], [79, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [120, 1], [47, 1], [47, 2], [101, 1], [101, 2], [33, 1], [33, 1], [33, 1], [33, 1], [33, 1] ], performAction: /* @__PURE__ */ b(function(f, A, g, u, B, t, R1) { var s = t.length - 1; switch (B) { case 2: this.$ = []; break; case 3: (!Array.isArray(t[s]) || t[s].length > 0) && t[s - 1].push(t[s]), this.$ = t[s - 1]; break; case 4: case 183: this.$ = t[s]; break; case 11: u.setDirection("TB"), this.$ = "TB"; break; case 12: u.setDirection(t[s - 1]), this.$ = t[s - 1]; break; case 27: this.$ = t[s - 1].nodes; break; case 28: case 29: case 30: case 31: case 32: this.$ = []; break; case 33: this.$ = u.addSubGraph(t[s - 6], t[s - 1], t[s - 4]); break; case 34: this.$ = u.addSubGraph(t[s - 3], t[s - 1], t[s - 3]); break; case 35: this.$ = u.addSubGraph(void 0, t[s - 1], void 0); break; case 37: this.$ = t[s].trim(), u.setAccTitle(this.$); break; case 38: case 39: this.$ = t[s].trim(), u.setAccDescription(this.$); break; case 43: this.$ = t[s - 1] + t[s]; break; case 44: this.$ = t[s]; break; case 45: u.addVertex(t[s - 1][t[s - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, t[s]), u.addLink(t[s - 3].stmt, t[s - 1], t[s - 2]), this.$ = { stmt: t[s - 1], nodes: t[s - 1].concat(t[s - 3].nodes) }; break; case 46: u.addLink(t[s - 2].stmt, t[s], t[s - 1]), this.$ = { stmt: t[s], nodes: t[s].concat(t[s - 2].nodes) }; break; case 47: u.addLink(t[s - 3].stmt, t[s - 1], t[s - 2]), this.$ = { stmt: t[s - 1], nodes: t[s - 1].concat(t[s - 3].nodes) }; break; case 48: this.$ = { stmt: t[s - 1], nodes: t[s - 1] }; break; case 49: u.addVertex(t[s - 1][t[s - 1].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, t[s]), this.$ = { stmt: t[s - 1], nodes: t[s - 1], shapeData: t[s] }; break; case 50: this.$ = { stmt: t[s], nodes: t[s] }; break; case 51: this.$ = [t[s]]; break; case 52: u.addVertex(t[s - 5][t[s - 5].length - 1], void 0, void 0, void 0, void 0, void 0, void 0, t[s - 4]), this.$ = t[s - 5].concat(t[s]); break; case 53: this.$ = t[s - 4].concat(t[s]); break; case 54: this.$ = t[s]; break; case 55: this.$ = t[s - 2], u.setClass(t[s - 2], t[s]); break; case 56: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "square"); break; case 57: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "doublecircle"); break; case 58: this.$ = t[s - 5], u.addVertex(t[s - 5], t[s - 2], "circle"); break; case 59: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "ellipse"); break; case 60: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "stadium"); break; case 61: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "subroutine"); break; case 62: this.$ = t[s - 7], u.addVertex(t[s - 7], t[s - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[t[s - 5], t[s - 3]]])); break; case 63: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "cylinder"); break; case 64: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "round"); break; case 65: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "diamond"); break; case 66: this.$ = t[s - 5], u.addVertex(t[s - 5], t[s - 2], "hexagon"); break; case 67: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "odd"); break; case 68: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "trapezoid"); break; case 69: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "inv_trapezoid"); break; case 70: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "lean_right"); break; case 71: this.$ = t[s - 3], u.addVertex(t[s - 3], t[s - 1], "lean_left"); break; case 72: this.$ = t[s], u.addVertex(t[s]); break; case 73: t[s - 1].text = t[s], this.$ = t[s - 1]; break; case 74: case 75: t[s - 2].text = t[s - 1], this.$ = t[s - 2]; break; case 76: this.$ = t[s]; break; case 77: var v = u.destructLink(t[s], t[s - 2]); this.$ = { type: v.type, stroke: v.stroke, length: v.length, text: t[s - 1] }; break; case 78: var v = u.destructLink(t[s], t[s - 2]); this.$ = { type: v.type, stroke: v.stroke, length: v.length, text: t[s - 1], id: t[s - 3] }; break; case 79: this.$ = { text: t[s], type: "text" }; break; case 80: this.$ = { text: t[s - 1].text + "" + t[s], type: t[s - 1].type }; break; case 81: this.$ = { text: t[s], type: "string" }; break; case 82: this.$ = { text: t[s], type: "markdown" }; break; case 83: var v = u.destructLink(t[s]); this.$ = { type: v.type, stroke: v.stroke, length: v.length }; break; case 84: var v = u.destructLink(t[s]); this.$ = { type: v.type, stroke: v.stroke, length: v.length, id: t[s - 1] }; break; case 85: this.$ = t[s - 1]; break; case 86: this.$ = { text: t[s], type: "text" }; break; case 87: this.$ = { text: t[s - 1].text + "" + t[s], type: t[s - 1].type }; break; case 88: this.$ = { text: t[s], type: "string" }; break; case 89: case 104: this.$ = { text: t[s], type: "markdown" }; break; case 101: this.$ = { text: t[s], type: "text" }; break; case 102: this.$ = { text: t[s - 1].text + "" + t[s], type: t[s - 1].type }; break; case 103: this.$ = { text: t[s], type: "text" }; break; case 105: this.$ = t[s - 4], u.addClass(t[s - 2], t[s]); break; case 106: this.$ = t[s - 4], u.setClass(t[s - 2], t[s]); break; case 107: case 115: this.$ = t[s - 1], u.setClickEvent(t[s - 1], t[s]); break; case 108: case 116: this.$ = t[s - 3], u.setClickEvent(t[s - 3], t[s - 2]), u.setTooltip(t[s - 3], t[s]); break; case 109: this.$ = t[s - 2], u.setClickEvent(t[s - 2], t[s - 1], t[s]); break; case 110: this.$ = t[s - 4], u.setClickEvent(t[s - 4], t[s - 3], t[s - 2]), u.setTooltip(t[s - 4], t[s]); break; case 111: this.$ = t[s - 2], u.setLink(t[s - 2], t[s]); break; case 112: this.$ = t[s - 4], u.setLink(t[s - 4], t[s - 2]), u.setTooltip(t[s - 4], t[s]); break; case 113: this.$ = t[s - 4], u.setLink(t[s - 4], t[s - 2], t[s]); break; case 114: this.$ = t[s - 6], u.setLink(t[s - 6], t[s - 4], t[s]), u.setTooltip(t[s - 6], t[s - 2]); break; case 117: this.$ = t[s - 1], u.setLink(t[s - 1], t[s]); break; case 118: this.$ = t[s - 3], u.setLink(t[s - 3], t[s - 2]), u.setTooltip(t[s - 3], t[s]); break; case 119: this.$ = t[s - 3], u.setLink(t[s - 3], t[s - 2], t[s]); break; case 120: this.$ = t[s - 5], u.setLink(t[s - 5], t[s - 4], t[s]), u.setTooltip(t[s - 5], t[s - 2]); break; case 121: this.$ = t[s - 4], u.addVertex(t[s - 2], void 0, void 0, t[s]); break; case 122: this.$ = t[s - 4], u.updateLink([t[s - 2]], t[s]); break; case 123: this.$ = t[s - 4], u.updateLink(t[s - 2], t[s]); break; case 124: this.$ = t[s - 8], u.updateLinkInterpolate([t[s - 6]], t[s - 2]), u.updateLink([t[s - 6]], t[s]); break; case 125: this.$ = t[s - 8], u.updateLinkInterpolate(t[s - 6], t[s - 2]), u.updateLink(t[s - 6], t[s]); break; case 126: this.$ = t[s - 6], u.updateLinkInterpolate([t[s - 4]], t[s]); break; case 127: this.$ = t[s - 6], u.updateLinkInterpolate(t[s - 4], t[s]); break; case 128: case 130: this.$ = [t[s]]; break; case 129: case 131: t[s - 2].push(t[s]), this.$ = t[s - 2]; break; case 133: this.$ = t[s - 1] + t[s]; break; case 181: this.$ = t[s]; break; case 182: this.$ = t[s - 1] + "" + t[s]; break; case 184: this.$ = t[s - 1] + "" + t[s]; break; case 185: this.$ = { stmt: "dir", value: "TB" }; break; case 186: this.$ = { stmt: "dir", value: "BT" }; break; case 187: this.$ = { stmt: "dir", value: "RL" }; break; case 188: this.$ = { stmt: "dir", value: "LR" }; break; case 189: this.$ = { stmt: "dir", value: "TD" }; break; } }, "anonymous"), table: [ { 3: 1, 4: 2, 9: r, 10: i, 12: a }, { 1: [3] }, e(n, h, { 5: 6 }), { 4: 7, 9: r, 10: i, 12: a }, { 4: 8, 9: r, 10: i, 12: a }, { 13: [1, 9], 14: [1, 10] }, { 1: [2, 1], 6: 11, 7: 12, 8: d, 9: l, 10: o, 11: x, 20: 17, 22: 18, 23: 19, 24: 20, 25: 21, 26: 22, 27: L, 33: 24, 34: p, 36: C, 38: h1, 42: 28, 43: 39, 44: F, 45: 40, 47: 41, 60: _, 84: Y, 85: d1, 86: N1, 87: G1, 88: P1, 89: V, 102: I, 105: w, 106: R, 109: N, 111: G, 113: 42, 114: P, 115: O, 116: M, 121: O1, 122: M1, 123: U1, 124: z1, 125: W1 }, e(n, [2, 9]), e(n, [2, 10]), e(n, [2, 11]), { 8: [1, 55], 9: [1, 56], 10: p1, 15: 54, 18: 57 }, e(T, [2, 3]), e(T, [2, 4]), e(T, [2, 5]), e(T, [2, 6]), e(T, [2, 7]), e(T, [2, 8]), { 8: $, 9: e1, 11: t1, 21: 59, 41: 60, 72: 64, 75: [1, 65], 77: [1, 67], 78: [1, 66] }, { 8: $, 9: e1, 11: t1, 21: 68 }, { 8: $, 9: e1, 11: t1, 21: 69 }, { 8: $, 9: e1, 11: t1, 21: 70 }, { 8: $, 9: e1, 11: t1, 21: 71 }, { 8: $, 9: e1, 11: t1, 21: 72 }, { 8: $, 9: e1, 10: [1, 73], 11: t1, 21: 74 }, e(T, [2, 36]), { 35: [1, 75] }, { 37: [1, 76] }, e(T, [2, 39]), e(m1, [2, 50], { 18: 77, 39: 78, 10: p1, 40: ne }), { 10: [1, 80] }, { 10: [1, 81] }, { 10: [1, 82] }, { 10: [1, 83] }, { 14: D1, 44: E1, 60: C1, 80: [1, 87], 89: T1, 95: [1, 84], 97: [1, 85], 101: 86, 105: S1, 106: y1, 109: x1, 111: F1, 114: _1, 115: B1, 116: v1, 120: 88 }, e(T, [2, 185]), e(T, [2, 186]), e(T, [2, 187]), e(T, [2, 188]), e(T, [2, 189]), e(b1, [2, 51]), e(b1, [2, 54], { 46: [1, 100] }), e(z, [2, 72], { 113: 113, 29: [1, 101], 44: F, 48: [1, 102], 50: [1, 103], 52: [1, 104], 54: [1, 105], 56: [1, 106], 58: [1, 107], 60: _, 63: [1, 108], 65: [1, 109], 67: [1, 110], 68: [1, 111], 70: [1, 112], 89: V, 102: I, 105: w, 106: R, 109: N, 111: G, 114: P, 115: O, 116: M }), e(H, [2, 181]), e(H, [2, 142]), e(H, [2, 143]), e(H, [2, 144]), e(H, [2, 145]), e(H, [2, 146]), e(H, [2, 147]), e(H, [2, 148]), e(H, [2, 149]), e(H, [2, 150]), e(H, [2, 151]), e(H, [2, 152]), e(n, [2, 12]), e(n, [2, 18]), e(n, [2, 19]), { 9: [1, 114] }, e(ue, [2, 26], { 18: 115, 10: p1 }), e(T, [2, 27]), { 42: 116, 43: 39, 44: F, 45: 40, 47: 41, 60: _, 89: V, 102: I, 105: w, 106: R, 109: N, 111: G, 113: 42, 114: P, 115: O, 116: M }, e(T, [2, 40]), e(T, [2, 41]), e(T, [2, 42]), e(L1, [2, 76], { 73: 117, 62: [1, 119], 74: [1, 118] }), { 76: 120, 79: 121, 80: oe, 81: le, 116: K1, 119: j1 }, { 75: [1, 126], 77: [1, 127] }, e(ce, [2, 83]), e(T, [2, 28]), e(T, [2, 29]), e(T, [2, 30]), e(T, [2, 31]), e(T, [2, 32]), { 10: he, 12: de, 14: pe, 27: fe, 28: 128, 32: ge, 44: be, 60: Ae, 75: ke, 80: [1, 130], 81: [1, 131], 83: 141, 84: me, 85: De, 86: Ee, 87: Ce, 88: Te, 89: Se, 90: ye, 91: 129, 105: xe, 109: Fe, 111: _e, 114: Be, 115: ve, 116: Le }, e(q1, h, { 5: 154 }), e(T, [2, 37]), e(T, [2, 38]), e(m1, [2, 48], { 44: Ve }), e(m1, [2, 49], { 18: 156, 10: p1, 40: Ie }), e(b1, [2, 44]), { 44: F, 47: 158, 60: _, 89: V, 102: I, 105: w, 106: R, 109: N, 111: G, 113: 42, 114: P, 115: O, 116: M }, { 102: [1, 159], 103: 160, 105: [1, 161] }, { 44: F, 47: 162, 60: _, 89: V, 102: I, 105: w, 106: R, 109: N, 111: G, 113: 42, 114: P, 115: O, 116: M }, { 44: F, 47: 163, 60: _, 89: V, 102: I, 105: w, 106: R, 109: N, 111: G, 113: 42, 114: P, 115: O, 116: M }, e(y, [2, 107], {