const Re = " ögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lvo3te1ing3o2yage5u2wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2", Ce = "ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2", Bt = "numeric", Kt = "ascii", Ft = "alpha", W = "asciinumeric", F = "alphanumeric", Wt = "domain", ce = "emoji", pe = "scheme", Se = "slashscheme", vt = "whitespace";
function Oe(t, n) {
  return t in n || (n[t] = []), n[t];
}
function j(t, n, e) {
  n[Bt] && (n[W] = !0, n[F] = !0), n[Kt] && (n[W] = !0, n[Ft] = !0), n[W] && (n[F] = !0), n[Ft] && (n[F] = !0), n[F] && (n[Wt] = !0), n[ce] && (n[Wt] = !0);
  for (const s in n) {
    const i = Oe(s, e);
    i.indexOf(t) < 0 && i.push(t);
  }
}
function ye(t, n) {
  const e = {};
  for (const s in n)
    n[s].indexOf(t) >= 0 && (e[s] = !0);
  return e;
}
function p(t = null) {
  this.j = {}, this.jr = [], this.jd = null, this.t = t;
}
p.groups = {};
p.prototype = {
  accepts() {
    return !!this.t;
  },
  /**
   * Follow an existing transition from the given input to the next state.
   * Does not mutate.
   * @param {string} input character or token type to transition on
   * @returns {?State<T>} the next state, if any
   */
  go(t) {
    const n = this, e = n.j[t];
    if (e)
      return e;
    for (let s = 0; s < n.jr.length; s++) {
      const i = n.jr[s][0], r = n.jr[s][1];
      if (r && i.test(t))
        return r;
    }
    return n.jd;
  },
  /**
   * Whether the state has a transition for the given input. Set the second
   * argument to true to only look for an exact match (and not a default or
   * regular-expression-based transition)
   * @param {string} input
   * @param {boolean} exactOnly
   */
  has(t, n = !1) {
    return n ? t in this.j : !!this.go(t);
  },
  /**
   * Short for "transition all"; create a transition from the array of items
   * in the given list to the same final resulting state.
   * @param {string | string[]} inputs Group of inputs to transition on
   * @param {Transition<T> | State<T>} [next] Transition options
   * @param {Flags} [flags] Collections flags to add token to
   * @param {Collections<T>} [groups] Master list of token groups
   */
  ta(t, n, e, s) {
    for (let i = 0; i < t.length; i++)
      this.tt(t[i], n, e, s);
  },
  /**
   * Short for "take regexp transition"; defines a transition for this state
   * when it encounters a token which matches the given regular expression
   * @param {RegExp} regexp Regular expression transition (populate first)
   * @param {T | State<T>} [next] Transition options
   * @param {Flags} [flags] Collections flags to add token to
   * @param {Collections<T>} [groups] Master list of token groups
   * @returns {State<T>} taken after the given input
   */
  tr(t, n, e, s) {
    s = s || p.groups;
    let i;
    return n && n.j ? i = n : (i = new p(n), e && s && j(n, e, s)), this.jr.push([t, i]), i;
  },
  /**
   * Short for "take transitions", will take as many sequential transitions as
   * the length of the given input and returns the
   * resulting final state.
   * @param {string | string[]} input
   * @param {T | State<T>} [next] Transition options
   * @param {Flags} [flags] Collections flags to add token to
   * @param {Collections<T>} [groups] Master list of token groups
   * @returns {State<T>} taken after the given input
   */
  ts(t, n, e, s) {
    let i = this;
    const r = t.length;
    if (!r)
      return i;
    for (let a = 0; a < r - 1; a++)
      i = i.tt(t[a]);
    return i.tt(t[r - 1], n, e, s);
  },
  /**
   * Short for "take transition", this is a method for building/working with
   * state machines.
   *
   * If a state already exists for the given input, returns it.
   *
   * If a token is specified, that state will emit that token when reached by
   * the linkify engine.
   *
   * If no state exists, it will be initialized with some default transitions
   * that resemble existing default transitions.
   *
   * If a state is given for the second argument, that state will be
   * transitioned to on the given input regardless of what that input
   * previously did.
   *
   * Specify a token group flags to define groups that this token belongs to.
   * The token will be added to corresponding entires in the given groups
   * object.
   *
   * @param {string} input character, token type to transition on
   * @param {T | State<T>} [next] Transition options
   * @param {Flags} [flags] Collections flags to add token to
   * @param {Collections<T>} [groups] Master list of groups
   * @returns {State<T>} taken after the given input
   */
  tt(t, n, e, s) {
    s = s || p.groups;
    const i = this;
    if (n && n.j)
      return i.j[t] = n, n;
    const r = n;
    let a, l = i.go(t);
    if (l ? (a = new p(), Object.assign(a.j, l.j), a.jr.push.apply(a.jr, l.jr), a.jd = l.jd, a.t = l.t) : a = new p(), r) {
      if (s)
        if (a.t && typeof a.t == "string") {
          const h = Object.assign(ye(a.t, s), e);
          j(r, h, s);
        } else e && j(r, e, s);
      a.t = r;
    }
    return i.j[t] = a, a;
  }
};
const c = (t, n, e, s, i) => t.ta(n, e, s, i), E = (t, n, e, s, i) => t.tr(n, e, s, i), ne = (t, n, e, s, i) => t.ts(n, e, s, i), o = (t, n, e, s, i) => t.tt(n, e, s, i), I = "WORD", zt = "UWORD", le = "ASCIINUMERICAL", ue = "ALPHANUMERICAL", J = "LOCALHOST", Gt = "TLD", Qt = "UTLD", tt = "SCHEME", U = "SLASH_SCHEME", _t = "NUM", qt = "WS", Jt = "NL", z = "OPENBRACE", G = "CLOSEBRACE", et = "OPENBRACKET", nt = "CLOSEBRACKET", st = "OPENPAREN", it = "CLOSEPAREN", ot = "OPENANGLEBRACKET", rt = "CLOSEANGLEBRACKET", at = "FULLWIDTHLEFTPAREN", ct = "FULLWIDTHRIGHTPAREN", lt = "LEFTCORNERBRACKET", ut = "RIGHTCORNERBRACKET", ht = "LEFTWHITECORNERBRACKET", dt = "RIGHTWHITECORNERBRACKET", Et = "FULLWIDTHLESSTHAN", mt = "FULLWIDTHGREATERTHAN", gt = "AMPERSAND", ft = "APOSTROPHE", At = "ASTERISK", v = "AT", Tt = "BACKSLASH", Lt = "BACKTICK", Rt = "CARET", w = "COLON", Yt = "COMMA", Ct = "DOLLAR", y = "DOT", pt = "EQUALS", $t = "EXCLAMATION", O = "HYPHEN", Q = "PERCENT", St = "PIPE", Ot = "PLUS", yt = "POUND", q = "QUERY", Xt = "QUOTE", he = "FULLWIDTHMIDDLEDOT", Vt = "SEMI", b = "SLASH", _ = "TILDE", bt = "UNDERSCORE", de = "EMOJI", kt = "SYM";
var Ee = /* @__PURE__ */ Object.freeze({
  __proto__: null,
  ALPHANUMERICAL: ue,
  AMPERSAND: gt,
  APOSTROPHE: ft,
  ASCIINUMERICAL: le,
  ASTERISK: At,
  AT: v,
  BACKSLASH: Tt,
  BACKTICK: Lt,
  CARET: Rt,
  CLOSEANGLEBRACKET: rt,
  CLOSEBRACE: G,
  CLOSEBRACKET: nt,
  CLOSEPAREN: it,
  COLON: w,
  COMMA: Yt,
  DOLLAR: Ct,
  DOT: y,
  EMOJI: de,
  EQUALS: pt,
  EXCLAMATION: $t,
  FULLWIDTHGREATERTHAN: mt,
  FULLWIDTHLEFTPAREN: at,
  FULLWIDTHLESSTHAN: Et,
  FULLWIDTHMIDDLEDOT: he,
  FULLWIDTHRIGHTPAREN: ct,
  HYPHEN: O,
  LEFTCORNERBRACKET: lt,
  LEFTWHITECORNERBRACKET: ht,
  LOCALHOST: J,
  NL: Jt,
  NUM: _t,
  OPENANGLEBRACKET: ot,
  OPENBRACE: z,
  OPENBRACKET: et,
  OPENPAREN: st,
  PERCENT: Q,
  PIPE: St,
  PLUS: Ot,
  POUND: yt,
  QUERY: q,
  QUOTE: Xt,
  RIGHTCORNERBRACKET: ut,
  RIGHTWHITECORNERBRACKET: dt,
  SCHEME: tt,
  SEMI: Vt,
  SLASH: b,
  SLASH_SCHEME: U,
  SYM: kt,
  TILDE: _,
  TLD: Gt,
  UNDERSCORE: bt,
  UTLD: Qt,
  UWORD: zt,
  WORD: I,
  WS: qt
});
const k = /[a-z]/, K = new RegExp("\\p{L}", "u"), wt = new RegExp("\\p{Emoji}", "u"), N = /\d/, jt = /\s/, se = "\r", xt = `
`, be = "️", ke = "‍", Ut = "￼";
let X = null, V = null;
function Ne(t = []) {
  const n = {};
  p.groups = n;
  const e = new p();
  X == null && (X = ie(Re)), V == null && (V = ie(Ce)), o(e, "'", ft), o(e, "{", z), o(e, "}", G), o(e, "[", et), o(e, "]", nt), o(e, "(", st), o(e, ")", it), o(e, "<", ot), o(e, ">", rt), o(e, "（", at), o(e, "）", ct), o(e, "「", lt), o(e, "」", ut), o(e, "『", ht), o(e, "』", dt), o(e, "＜", Et), o(e, "＞", mt), o(e, "&", gt), o(e, "*", At), o(e, "@", v), o(e, "`", Lt), o(e, "^", Rt), o(e, ":", w), o(e, ",", Yt), o(e, "$", Ct), o(e, ".", y), o(e, "=", pt), o(e, "!", $t), o(e, "-", O), o(e, "%", Q), o(e, "|", St), o(e, "+", Ot), o(e, "#", yt), o(e, "?", q), o(e, '"', Xt), o(e, "/", b), o(e, ";", Vt), o(e, "~", _), o(e, "_", bt), o(e, "\\", Tt), o(e, "・", he);
  const s = E(e, N, _t, {
    [Bt]: !0
  });
  E(s, N, s);
  const i = E(s, k, le, {
    [W]: !0
  }), r = E(s, K, ue, {
    [F]: !0
  }), a = E(e, k, I, {
    [Kt]: !0
  });
  E(a, N, i), E(a, k, a), E(i, N, i), E(i, k, i);
  const l = E(e, K, zt, {
    [Ft]: !0
  });
  E(l, k), E(l, N, r), E(l, K, l), E(r, N, r), E(r, k), E(r, K, r);
  const h = o(e, xt, Jt, {
    [vt]: !0
  }), m = o(e, se, qt, {
    [vt]: !0
  }), d = E(e, jt, qt, {
    [vt]: !0
  });
  o(e, Ut, d), o(m, xt, h), o(m, Ut, d), E(m, jt, d), o(d, se), o(d, xt), E(d, jt, d), o(d, Ut, d);
  const u = E(e, wt, de, {
    [ce]: !0
  });
  o(u, "#"), E(u, wt, u), o(u, be, u);
  const g = o(u, ke);
  o(g, "#"), E(g, wt, u);
  const f = [[k, a], [N, i]], H = [[k, null], [K, l], [N, r]];
  for (let A = 0; A < X.length; A++)
    P(e, X[A], Gt, I, f);
  for (let A = 0; A < V.length; A++)
    P(e, V[A], Qt, zt, H);
  j(Gt, {
    tld: !0,
    ascii: !0
  }, n), j(Qt, {
    utld: !0,
    alpha: !0
  }, n), P(e, "file", tt, I, f), P(e, "mailto", tt, I, f), P(e, "http", U, I, f), P(e, "https", U, I, f), P(e, "ftp", U, I, f), P(e, "ftps", U, I, f), j(tt, {
    scheme: !0,
    ascii: !0
  }, n), j(U, {
    slashscheme: !0,
    ascii: !0
  }, n), t = t.sort((A, C) => A[0] > C[0] ? 1 : -1);
  for (let A = 0; A < t.length; A++) {
    const C = t[A][0], T = t[A][1] ? {
      [pe]: !0
    } : {
      [Se]: !0
    };
    C.indexOf("-") >= 0 ? T[Wt] = !0 : k.test(C) ? N.test(C) ? T[W] = !0 : T[Kt] = !0 : T[Bt] = !0, ne(e, C, C, T);
  }
  return ne(e, "localhost", J, {
    ascii: !0
  }), e.jd = new p(kt), {
    start: e,
    tokens: Object.assign({
      groups: n
    }, Ee)
  };
}
function me(t, n) {
  const e = Ie(n.replace(/[A-Z]/g, (l) => l.toLowerCase())), s = e.length, i = [];
  let r = 0, a = 0;
  for (; a < s; ) {
    let l = t, h = null, m = 0, d = null, u = -1, g = -1;
    for (; a < s && (h = l.go(e[a])); )
      l = h, l.accepts() ? (u = 0, g = 0, d = l) : u >= 0 && (u += e[a].length, g++), m += e[a].length, r += e[a].length, a++;
    r -= u, a -= g, m -= u, i.push({
      t: d.t,
      // token type/name
      v: n.slice(r - m, r),
      // string value
      s: r - m,
      // start index
      e: r
      // end index (excluding)
    });
  }
  return i;
}
function Ie(t) {
  const n = [], e = t.length;
  let s = 0;
  for (; s < e; ) {
    let i = t.charCodeAt(s), r, a = i < 55296 || i > 56319 || s + 1 === e || (r = t.charCodeAt(s + 1)) < 56320 || r > 57343 ? t[s] : t.slice(s, s + 2);
    n.push(a), s += a.length;
  }
  return n;
}
function P(t, n, e, s, i) {
  let r;
  const a = n.length;
  for (let l = 0; l < a - 1; l++) {
    const h = n[l];
    t.j[h] ? r = t.j[h] : (r = new p(s), r.jr = i.slice(), t.j[h] = r), t = r;
  }
  return r = new p(e), r.jr = i.slice(), t.j[n[a - 1]] = r, r;
}
function ie(t) {
  const n = [], e = [];
  let s = 0, i = "0123456789";
  for (; s < t.length; ) {
    let r = 0;
    for (; i.indexOf(t[s + r]) >= 0; )
      r++;
    if (r > 0) {
      n.push(e.join(""));
      for (let a = parseInt(t.substring(s, s + r), 10); a > 0; a--)
        e.pop();
      s += r;
    } else
      e.push(t[s]), s++;
  }
  return n;
}
const Y = {
  defaultProtocol: "http",
  events: null,
  format: oe,
  formatHref: oe,
  nl2br: !1,
  tagName: "a",
  target: null,
  rel: null,
  validate: !0,
  truncate: 1 / 0,
  className: null,
  attributes: null,
  ignoreTags: [],
  render: null
};
function ge(t, n = null) {
  let e = Object.assign({}, Y);
  t && (e = Object.assign(e, t instanceof ge ? t.o : t));
  const s = e.ignoreTags, i = [];
  for (let r = 0; r < s.length; r++)
    i.push(s[r].toUpperCase());
  this.o = e, n && (this.defaultRender = n), this.ignoreTags = i;
}
ge.prototype = {
  o: Y,
  /**
   * @type string[]
   */
  ignoreTags: [],
  /**
   * @param {IntermediateRepresentation} ir
   * @returns {any}
   */
  defaultRender(t) {
    return t;
  },
  /**
   * Returns true or false based on whether a token should be displayed as a
   * link based on the user options.
   * @param {MultiToken} token
   * @returns {boolean}
   */
  check(t) {
    return this.get("validate", t.toString(), t);
  },
  // Private methods
  /**
   * Resolve an option's value based on the value of the option and the given
   * params. If operator and token are specified and the target option is
   * callable, automatically calls the function with the given argument.
   * @template {keyof Opts} K
   * @param {K} key Name of option to use
   * @param {string} [operator] will be passed to the target option if it's a
   * function. If not specified, RAW function value gets returned
   * @param {MultiToken} [token] The token from linkify.tokenize
   * @returns {Opts[K] | any}
   */
  get(t, n, e) {
    const s = n != null;
    let i = this.o[t];
    return i && (typeof i == "object" ? (i = e.t in i ? i[e.t] : Y[t], typeof i == "function" && s && (i = i(n, e))) : typeof i == "function" && s && (i = i(n, e.t, e)), i);
  },
  /**
   * @template {keyof Opts} L
   * @param {L} key Name of options object to use
   * @param {string} [operator]
   * @param {MultiToken} [token]
   * @returns {Opts[L] | any}
   */
  getObj(t, n, e) {
    let s = this.o[t];
    return typeof s == "function" && n != null && (s = s(n, e.t, e)), s;
  },
  /**
   * Convert the given token to a rendered element that may be added to the
   * calling-interface's DOM
   * @param {MultiToken} token Token to render to an HTML element
   * @returns {any} Render result; e.g., HTML string, DOM element, React
   *   Component, etc.
   */
  render(t) {
    const n = t.render(this);
    return (this.get("render", null, t) || this.defaultRender)(n, t.t, t);
  }
};
function oe(t) {
  return t;
}
function fe(t, n) {
  this.t = "token", this.v = t, this.tk = n;
}
fe.prototype = {
  isLink: !1,
  /**
   * Return the string this token represents.
   * @return {string}
   */
  toString() {
    return this.v;
  },
  /**
   * What should the value for this token be in the `href` HTML attribute?
   * Returns the `.toString` value by default.
   * @param {string} [scheme]
   * @return {string}
   */
  toHref(t) {
    return this.toString();
  },
  /**
   * @param {Options} options Formatting options
   * @returns {string}
   */
  toFormattedString(t) {
    const n = this.toString(), e = t.get("truncate", n, this), s = t.get("format", n, this);
    return e && s.length > e ? s.substring(0, e) + "…" : s;
  },
  /**
   *
   * @param {Options} options
   * @returns {string}
   */
  toFormattedHref(t) {
    return t.get("formatHref", this.toHref(t.get("defaultProtocol")), this);
  },
  /**
   * The start index of this token in the original input string
   * @returns {number}
   */
  startIndex() {
    return this.tk[0].s;
  },
  /**
   * The end index of this token in the original input string (up to this
   * index but not including it)
   * @returns {number}
   */
  endIndex() {
    return this.tk[this.tk.length - 1].e;
  },
  /**
  	Returns an object  of relevant values for this token, which includes keys
  	* type - Kind of token ('url', 'email', etc.)
  	* value - Original text
  	* href - The value that should be added to the anchor tag's href
  		attribute
  		@method toObject
  	@param {string} [protocol] `'http'` by default
  */
  toObject(t = Y.defaultProtocol) {
    return {
      type: this.t,
      value: this.toString(),
      isLink: this.isLink,
      href: this.toHref(t),
      start: this.startIndex(),
      end: this.endIndex()
    };
  },
  /**
   *
   * @param {Options} options Formatting option
   */
  toFormattedObject(t) {
    return {
      type: this.t,
      value: this.toFormattedString(t),
      isLink: this.isLink,
      href: this.toFormattedHref(t),
      start: this.startIndex(),
      end: this.endIndex()
    };
  },
  /**
   * Whether this token should be rendered as a link according to the given options
   * @param {Options} options
   * @returns {boolean}
   */
  validate(t) {
    return t.get("validate", this.toString(), this);
  },
  /**
   * Return an object that represents how this link should be rendered.
   * @param {Options} options Formattinng options
   */
  render(t) {
    const n = this, e = this.toHref(t.get("defaultProtocol")), s = t.get("formatHref", e, this), i = t.get("tagName", e, n), r = this.toFormattedString(t), a = {}, l = t.get("className", e, n), h = t.get("target", e, n), m = t.get("rel", e, n), d = t.getObj("attributes", e, n), u = t.getObj("events", e, n);
    return a.href = s, l && (a.class = l), h && (a.target = h), m && (a.rel = m), d && Object.assign(a, d), {
      tagName: i,
      attributes: a,
      content: r,
      eventListeners: u
    };
  }
};
function Nt(t, n) {
  class e extends fe {
    constructor(i, r) {
      super(i, r), this.t = t;
    }
  }
  for (const s in n)
    e.prototype[s] = n[s];
  return e.t = t, e;
}
const re = Nt("email", {
  isLink: !0,
  toHref() {
    return "mailto:" + this.toString();
  }
}), ae = Nt("text"), He = Nt("nl"), Z = Nt("url", {
  isLink: !0,
  /**
  	Lowercases relevant parts of the domain and adds the protocol if
  	required. Note that this will not escape unsafe HTML characters in the
  	URL.
  		@param {string} [scheme] default scheme (e.g., 'https')
  	@return {string} the full href
  */
  toHref(t = Y.defaultProtocol) {
    return this.hasProtocol() ? this.v : `${t}://${this.v}`;
  },
  /**
   * Check whether this URL token has a protocol
   * @return {boolean}
   */
  hasProtocol() {
    const t = this.tk;
    return t.length >= 2 && t[0].t !== J && t[1].t === w;
  }
}), S = (t) => new p(t);
function De({
  groups: t
}) {
  const n = t.domain.concat([gt, At, v, Tt, Lt, Rt, Ct, pt, O, _t, Q, St, Ot, yt, b, kt, _, bt]), e = [ft, w, Yt, y, $t, Q, q, Xt, Vt, ot, rt, z, G, nt, et, st, it, at, ct, lt, ut, ht, dt, Et, mt], s = [gt, ft, At, Tt, Lt, Rt, Ct, pt, O, z, G, Q, St, Ot, yt, q, b, kt, _, bt], i = S(), r = o(i, _);
  c(r, s, r), c(r, t.domain, r);
  const a = S(), l = S(), h = S();
  c(i, t.domain, a), c(i, t.scheme, l), c(i, t.slashscheme, h), c(a, s, r), c(a, t.domain, a);
  const m = o(a, v);
  o(r, v, m), o(l, v, m), o(h, v, m);
  const d = o(r, y);
  c(d, s, r), c(d, t.domain, r);
  const u = S();
  c(m, t.domain, u), c(u, t.domain, u);
  const g = o(u, y);
  c(g, t.domain, u);
  const f = S(re);
  c(g, t.tld, f), c(g, t.utld, f), o(m, J, f);
  const H = o(u, O);
  o(H, O, H), c(H, t.domain, u), c(f, t.domain, u), o(f, y, g), o(f, O, H);
  const A = o(f, w);
  c(A, t.numeric, re);
  const C = o(a, O), D = o(a, y);
  o(C, O, C), c(C, t.domain, a), c(D, s, r), c(D, t.domain, a);
  const T = S(Z);
  c(D, t.tld, T), c(D, t.utld, T), c(T, t.domain, a), c(T, s, r), o(T, y, D), o(T, O, C), o(T, v, m);
  const Ae = o(T, w), Zt = S(Z);
  c(Ae, t.numeric, Zt);
  const L = S(Z), M = S();
  c(L, n, L), c(L, e, M), c(M, n, L), c(M, e, M), o(T, b, L), o(Zt, b, L);
  const It = o(l, w), Te = o(h, w), Le = o(Te, b), Ht = o(Le, b);
  c(l, t.domain, a), o(l, y, D), o(l, O, C), c(h, t.domain, a), o(h, y, D), o(h, O, C), c(It, t.domain, L), o(It, b, L), o(It, q, L), c(Ht, t.domain, L), c(Ht, n, L), o(Ht, b, L);
  const te = [
    [z, G],
    // {}
    [et, nt],
    // []
    [st, it],
    // ()
    [ot, rt],
    // <>
    [at, ct],
    // （）
    [lt, ut],
    // 「」
    [ht, dt],
    // 『』
    [Et, mt]
    // ＜＞
  ];
  for (let Dt = 0; Dt < te.length; Dt++) {
    const [ee, Pt] = te[Dt], $ = o(L, ee);
    o(M, ee, $), o($, Pt, L);
    const x = S(Z);
    c($, n, x);
    const B = S();
    c($, e), c(x, n, x), c(x, e, B), c(B, n, x), c(B, e, B), o(x, Pt, L), o(B, Pt, L);
  }
  return o(i, J, T), o(i, Jt, He), {
    start: i,
    tokens: Ee
  };
}
function Pe(t, n, e) {
  let s = e.length, i = 0, r = [], a = [];
  for (; i < s; ) {
    let l = t, h = null, m = null, d = 0, u = null, g = -1;
    for (; i < s && !(h = l.go(e[i].t)); )
      a.push(e[i++]);
    for (; i < s && (m = h || l.go(e[i].t)); )
      h = null, l = m, l.accepts() ? (g = 0, u = l) : g >= 0 && g++, i++, d++;
    if (g < 0)
      i -= d, i < s && (a.push(e[i]), i++);
    else {
      a.length > 0 && (r.push(Mt(ae, n, a)), a = []), i -= g, d -= g;
      const f = u.t, H = e.slice(i - d, i);
      r.push(Mt(f, n, H));
    }
  }
  return a.length > 0 && r.push(Mt(ae, n, a)), r;
}
function Mt(t, n, e) {
  const s = e[0].s, i = e[e.length - 1].e, r = n.slice(s, i);
  return new t(r, e);
}
const R = {
  scanner: null,
  parser: null,
  tokenQueue: [],
  pluginQueue: [],
  customSchemes: [],
  initialized: !1
};
function ve() {
  R.scanner = Ne(R.customSchemes);
  for (let t = 0; t < R.tokenQueue.length; t++)
    R.tokenQueue[t][1]({
      scanner: R.scanner
    });
  R.parser = De(R.scanner.tokens);
  for (let t = 0; t < R.pluginQueue.length; t++)
    R.pluginQueue[t][1]({
      scanner: R.scanner,
      parser: R.parser
    });
  return R.initialized = !0, R;
}
function we(t) {
  return R.initialized || ve(), Pe(R.parser.start, t, me(R.scanner.start, t));
}
we.scan = me;
export {
  fe as MultiToken,
  ge as Options,
  p as State,
  Nt as createTokenClass,
  ve as init,
  Ie as stringToArray,
  we as tokenize
};
