{
  "version": 3,
  "sources": ["../../javascript/appos/application.js", "../../javascript/appos/component_loader.js", "../../javascript/appos/component.js", "../../javascript/appos/namespaced_console.js", "../../javascript/appos/simple_events.js", "../../javascript/appos/debugger.js", "../../javascript/appos/util.js", "../../javascript/appos/appos.js", "../../javascript/appos/component/jquery/easings.js", "../../javascript/appos/component/turbo_bridge.js", "../../javascript/appos/component/toggle_inline_list.js", "../../javascript/appos/component/anim/threed_carousel.js", "../../javascript/appos/lib/scroll_queue.js", "../../javascript/sot_profile_viewer/find_a_thing_renderer.js", "../../javascript/appos/lib/trigram_index.js", "../../javascript/sot_profile_viewer/entitlement_mapper.js", "../../javascript/sot_profile_viewer/entitlement_search.js", "../../javascript/sot_profile_viewer/goto_anywhere.js", "../../javascript/appos/bootstrap5/modal.js", "../../javascript/sot_profile_viewer/graph_anything.js", "../../javascript/sot_profile_viewer/tracer_ui.js", "../../javascript/sot_profile_viewer/net_worth_ui.js", "../../javascript/sot_profile_viewer/emote_loadout_ui.js", "../../javascript/sot_profile_viewer/twitch_drops.js", "../../javascript/sot_profile_viewer/insider_timer.js", "../../javascript/sot_profile_viewer/key_modal.js", "../../javascript/sot_profile_viewer/fav_modal.js", "../../javascript/sot_profile_viewer/fat_help_modal.js", "../../../../../shared/node_modules/canvas-confetti/dist/confetti.module.mjs", "../../javascript/sot_profile_viewer/confetti_class.js", "../../javascript/sot_profile_viewer/inline_compare.js", "../../javascript/appos/lib/external_promise.js", "../../javascript/sot_profile_viewer/missing_entitlements.js", "../../javascript/sot_profile_viewer.js"],
  "sourcesContent": ["import * as AppOS from \"./appos\"\n\nclass Application {\n  static availableComponents = []\n\n  static boot(opts) {\n    return AppOS.boot(new this(opts))\n  }\n\n  static DEFAULT_EVENTS = [\n    \"init\",\n    \"boot\",\n    \"documentLoad\",\n    \"pageLoad\",\n  ]\n\n  static DEFAULT_OPTIONS = {\n    instance: null,\n    init: null,\n    debug: false,\n    data: {},\n    turbolinks: false,\n    turbo: false,\n    defaultBoot: app => {\n      if (window.Turbo || window.Turbolinks) {\n        document.addEventListener('DOMContentLoaded', _ => app.fire(\"documentLoad\", app), { once: true })\n        if(window.Turbo) {\n          app.debug(\"detected Turbo\")\n          document.addEventListener('turbo:load', _ => app.fire(\"pageLoad\", app), false)\n        }\n        if(window.Turbolinks) {\n          app.debug(\"detected Turbolinks\")\n          document.addEventListener('turbolinks:load', _ => app.fire(\"pageLoad\", app), false)\n        }\n      } else {\n        document.addEventListener('DOMContentLoaded', _ => {\n          app.fire(\"documentLoad\", app)\n          app.fire(\"pageLoad\", app)\n        }, false)\n      }\n    }\n  }\n\n  constructor(opts = {}) {\n    this.app = this\n    this.loadedComponents = []\n    this.opts = Object.assign({}, this.constructor.DEFAULT_OPTIONS, opts)\n\n    // namespaced console\n    AppOS.NamespacedConsole.applyOn(this, {\n      debugConfig: this.opts,\n      namespaces: [\"AppOS\", [this, \"instance\"]],\n    })\n\n    // debugger\n    this.dev = new AppOS.Debugger(this).getProxy()\n\n    // register events\n    AppOS.SimpleEvents.applyOn(this, this.constructor.DEFAULT_EVENTS, this.opts)\n\n    this.constructor.DEFAULT_EVENTS.forEach(efn => {\n      if(typeof this[efn] == \"function\") this.on(efn, this[efn])\n    })\n  }\n\n  use(imp, opts) {\n    const ins = new imp(this, opts ?? this.opts[imp.name])\n    this.debug(\"using component \", ins.name)\n    this.loadedComponents.push(ins)\n    ins.init?.()\n    return ins\n  }\n\n  get components() {\n    const res = {}\n    this.loadedComponents.forEach(cins => {\n      res[cins.name] = cins\n    })\n    return res\n  }\n\n  get componentLoader() {\n    return window.__appos_core_component_loader\n  }\n\n  // ===============\n  // = API methods =\n  // ===============\n  // init() {}\n  // boot() {}\n  // documentLoad() {}\n  // pageLoad() {}\n}\n\nexport { Application }\n", "export class ComponentLoader {\n  constructor(app) {\n    this.app = app\n    this.promises = new Map()\n    this.sourceMap = new Map()\n    this.exports = new Map()\n  }\n\n  destroy() {\n    delete this.promises\n    delete this.sourceMap\n    delete this.exports\n  }\n\n  refreshSources() {\n    this.sourceMap = new Map()\n    if(document.body?.dataset.apposComponentMap) {\n      this.sourceMap = new Map(Object.entries(JSON.parse(document.body.dataset.apposComponentMap)))\n    }\n    return this\n  }\n\n  signal(comp, exps = {}, use = []) {\n    if(!this.exports.has(comp)) this.exports.set(comp, new Map())\n    const emap = this.exports.get(comp)\n    Object.entries(exps).forEach(([name, exp]) => emap.set(name, exp))\n\n    document.body.dispatchEvent(\n      new CustomEvent(\"appos:component:loaded\", {\n        bubbles: true,\n        detail: { component: comp, exports: exps },\n      }),\n    )\n\n    use.forEach(exp => {\n      const ins = this.app?.use(exp)\n      ins.boot?.()\n      ins.documentLoad?.()\n      ins.pageLoad?.()\n    })\n  }\n\n  ensure() {\n    this.refreshSources()\n    const promises = new Map()\n    document.querySelectorAll(`[data-appos-require-component]`).forEach(el => {\n      if(!el.dataset.apposRequireComponent) return undefined\n      el.dataset.apposRequireComponent.split(\" \").forEach(comp => {\n        if(comp && !promises.has(comp)) promises.set(comp, this.load(comp))\n      })\n    })\n    return Promise.all(promises.values())\n  }\n\n  load(component) {\n    if(!this.promises.has(component)) {\n      if(this.sourceMap.has(component)) {\n        this.promises.set(component, this.loadComponentWithScriptTag(component, this.sourceMap.get(component)))\n      } else {\n        console.warn(`[AppOS] failed to load component, not in map:`, component)\n      }\n    }\n    return this.promises.get(component)\n  }\n\n  loadComponentWithScriptTag(component, src) {\n    return new Promise((resolve, reject) => {\n      const script = document.createElement(\"script\")\n      script.type = \"text/javascript\"\n      script.src = src\n      script.defer = true\n      script.setAttribute(\"data-appos-component\", component)\n      // script.setAttribute(\"data-turbo-track\", \"reload\")\n      script.onload = ev => resolve([component, this.exports.get(component), src, script, ev])\n      document.head.append(script)\n    })\n  }\n}\n", "import * as AppOS from \"./appos\"\n\nclass Component {\n  static DEFAULT_OPTIONS = {\n    debug: false,\n  }\n\n  static DEFAULT_EVENTS = [\n    \"init\",\n    \"boot\",\n    \"documentLoad\",\n    \"pageLoad\",\n  ]\n\n  constructor(app, opts = {}) {\n    this.app = app\n    this.opts = Object.assign({}, this.constructor.DEFAULT_OPTIONS, opts)\n    if(app.opts) this.opts.debug = this.app.opts.debug\n\n    // namespaced console\n    AppOS.NamespacedConsole.applyOn(this, { base: this.app, namespace: [this, \"name\"] })\n\n    // register events\n    this.constructor.DEFAULT_EVENTS.forEach(efn => {\n      if(typeof this[efn] == \"function\") this.app.on(efn, this[efn].bind(this))\n    })\n  }\n\n  get name() {\n    return this.constructor.name\n  }\n\n  get componentLoader() {\n    return window.__appos_core_component_loader\n  }\n\n  visitPage(...args) {\n    AppOS.Util.visitPage(...args)\n  }\n\n  reloadPage (...args) {\n    AppOS.Util.reloadPage(...args)\n  }\n}\n\nexport { Component }\n", "class NamespacedConsole {\n  static applyOn(target, opts = {}) {\n    const bconfig = opts.base?.__namespaced_console_opts\n    if (bconfig) {\n      opts.namespaces = bconfig.namespaces.slice(0)\n      opts.nsFallback = bconfig.nsFallback\n      opts.debug = bconfig.debug\n      opts.debugConfig = bconfig.debugConfig\n      opts.debugConfigKey = bconfig.debugConfigKey\n    }\n\n    opts.debug ??= false\n    opts.debugConfigKey ??= \"debug\"\n    opts.nsFallback ??= \"?\"\n    opts.namespaces ??= []\n    if (opts.namespace) opts.namespaces.push(opts.namespace)\n\n    opts.doDebugProc = _ => {\n      return opts.debugConfig ? opts.debugConfig[opts.debugConfigKey] : opts.debug\n    }\n\n    const nsStrProc = _ => {\n      if(!opts.namespaces) return false\n      let nsStr = \"\"\n      opts.namespaces.forEach(el => {\n        nsStr += `[${(Array.isArray(el) ? el[0][el[1]] : (typeof el == \"function\" ? el() : el)) ?? opts.nsFallback}]`\n      })\n      return nsStr\n    }\n\n    target.__namespaced_console_opts = opts\n\n    target.debug = (function (...msg) {\n      if(!opts.doDebugProc()) return\n      msg.unshift(nsStrProc())\n      if(!msg[0]) msg.shift()\n      console.debug.apply(console, msg)\n    }).bind(target)\n\n    target.info = (function (...msg) {\n      msg.unshift(nsStrProc())\n      if(!msg[0]) msg.shift()\n      console.info.apply(console, msg)\n    }).bind(target)\n\n    target.warning = (function (...msg) {\n      msg.unshift(nsStrProc())\n      if(!msg[0]) msg.shift()\n      console.warn.apply(console, msg)\n    }).bind(target)\n\n    target.error = (function (...msg) {\n      msg.unshift(nsStrProc())\n      if(!msg[0]) msg.shift()\n      console.error.apply(console, msg)\n    }).bind(target)\n  }\n}\n\nexport { NamespacedConsole }\n", "class SimpleEvents {\n  static applyOn(target, events = [], opts) {\n    if(!Array.isArray(target)) target = Array(target)\n    if(target.length == 1) target.push(\"events\")\n    if(!target[0][target[1]]) target[0][target[1]] = new SimpleEvents.Events(target[0])\n\n    const tev = target[0][target[1]]\n    target[0].on = tev.on.bind(tev)\n    target[0].off = tev.off.bind(tev)\n    target[0].fire = tev.fire.bind(tev)\n\n    events.forEach(evn => target[0][target[1]].register(evn, opts))\n  }\n}\n\nSimpleEvents.Events = class {\n  constructor(target) {\n    this.target = target\n    this.callbacks = {}\n  }\n\n  on(evn, cb) {\n    if(!this.callbacks[evn]) throw(`no such event ${evn}`)\n    this.callbacks[evn].push(cb)\n    cb.detach = _ => this.off(evn, cb)\n    return this.target\n  }\n\n  off(evn, cb) {\n    if(!this.callbacks[evn]) throw(`no such event ${evn}`)\n    const index = this.callbacks[evn].indexOf(cb)\n    if(index < 0) throw(`no such handler on ${evn}`)\n    this.callbacks[evn].splice(index, 1)\n    return this.target\n  }\n\n  fire(evn, ...args) {\n    if(!this.callbacks[evn]) throw(`no such event ${evn}`)\n    this.callbacks[evn].forEach(fn => fn.apply(this.target, args))\n    return this.target\n  }\n\n  register(evn, opts) {\n    if(!this.callbacks[evn]) this.callbacks[evn] = []\n    if(opts) {\n      const capitalized = `${evn[0].toUpperCase()}${evn.slice(1)}`\n      if(opts[`on${capitalized}`]) this.on(evn, opts[`on${capitalized}`])\n    }\n  }\n\n  // bindSub(bindOn, ...args) {\n  //   let prefix = false\n  //   let events = args[0]\n  //   if(args.length == 2) {\n  //     prefix = args[0]\n  //     events = args[1]\n  //   }\n  //   Object.keys(this.callbacks).forEach(evn => {\n  //     if (prefix) {\n  //       this.target.on(evn, bindOn[`${prefix}${evn[0].toUpperCase()}${evn.slice(1)}`].bind(bindOn))\n  //     } else {\n  //       this.target.on(evn, bindOn[evn].bind(bindOn))\n  //     }\n  //   })\n  //   return target\n  // }\n}\n\nexport { SimpleEvents }\n", "import * as AppOS from \"./appos\"\n\nclass Debugger {\n  constructor(app) {\n    this.app = app\n    this.namespaces = {}\n    AppOS.NamespacedConsole.applyOn(this, { base: this.app, namespace: \"Debugger\" })\n  }\n\n  getProxy() {\n    this.proxy = new Proxy(this, {\n      get(target, name, receiver) {\n        if(typeof target[name] == \"function\") return target[name].bind(target)\n        if(name == \"__parent\") return target\n        let rv = Reflect.get(target.namespaces, name, receiver)\n        return rv ? rv.getProxy() : rv\n      }\n    })\n\n    return this.proxy\n  }\n\n  _register(ns, attr, vklass) {\n    if(!this.namespaces[ns]) {\n      this.namespaces[ns] = new Debugger.Namespace(ns, this)\n    }\n    this.namespaces[ns]._registerValue(attr, vklass)\n  }\n\n  enable() {\n    Object.entries(this.namespaces).forEach(([name, ns]) => {\n      Object.entries(ns.values).forEach(([name, v]) => v.set(true))\n    })\n  }\n\n  disable() {\n    Object.entries(this.namespaces).forEach(([name, ns]) => {\n      Object.entries(ns.values).forEach(([name, v]) => v.set(false))\n    })\n  }\n}\n\nDebugger.Namespace = class {\n  constructor(name, deb) {\n    this.app = deb.app\n    this.name = name\n    this.deb = deb\n    this.values = {}\n  }\n\n  getProxy() {\n    return this.proxy = new Proxy(this, {\n      get(target, name, receiver) {\n        return Reflect.get(target.values, name, receiver)\n      },\n      set(target, name, val) {\n        let rv = Reflect.get(target.values, name)\n        rv ? rv.set(val) : console.error(\"invalid value name\", name, \"for NS\", target)\n      }\n    })\n  }\n\n  _registerValue(attr, vklass) {\n    const inst = new vklass(this, attr)\n    this.values[attr] = inst\n    inst.init?.()\n  }\n}\n\nDebugger.Value = class {\n  constructor(ns, name) {\n    this.app = ns.app\n    this.ns = ns\n    this.name = name\n    this.value = false\n    AppOS.SimpleEvents.applyOn(this, [\"change\"])\n    AppOS.NamespacedConsole.applyOn(this, { base: this.ns.deb, namespace: _ => [this.ns.name, this.name].join(\".\") })\n  }\n\n  set(v) {\n    if (this.value != v) {\n      this.events.fire(\"change\", this, v, this.value)\n      this.change?.(v, this.value)\n      this.value = v\n    }\n  }\n\n  true() { this.set(true) }\n  yes() { this.set(true) }\n  false() { this.set(false) }\n  no() { this.set(false) }\n}\n\nexport { Debugger }\n", "class Util {\n  static visitPage(url, force_turbolinks = null) {\n    if(window.Turbo && !(force_turbolinks != null && !force_turbolinks)) {\n      Turbo.visit(url)\n    } else if (window.Turbolinks && !(force_turbolinks != null && !force_turbolinks)) {\n      Turbolinks.visit(url)\n    } else {\n      window.location.href = url\n    }\n  }\n\n  static reloadPage() {\n    AppOS.Util.visitPage(...args)\n    this.visitPage(window.location)\n  }\n\n  static upperFirst (str) {\n    return str.charAt(0).toUpperCase() + str.slice(1)\n  }\n\n  static strbool(v, defVal) {\n    if([true, \"true\", \"t\", \"1\", \"y\", \"yes\", \"on\"].includes(v)) {\n      return true\n    } else if([false, \"false\", \"f\", \"0\", \"n\", \"no\", \"off\"].includes(v)) {\n      return false\n    } else {\n      if(defVal != null) return defVal\n      throw(`Can't convert \\`${v}' to boolean, expression invalid!`)\n    }\n  }\n\n  static formatNumber(s, decimals = 0) {\n    if (decimals) {\n      return s.toFixed(decimals).replace(/\\d(?=(\\d{3})+\\.)/g, '$&,')\n    } else {\n      return s.toFixed(1).replace(/\\d(?=(\\d{3})+\\.)/g, '$&,').replace(/\\.\\d+/, \"\")\n    }\n  }\n\n  static getHashParams(urlDecode = true, source = window.location) {\n    const result = {}\n    if (!source.hash) return result\n\n    let hsh = source.hash.substr(1)\n    if(urlDecode) hsh = decodeURIComponent(hsh)\n    const parts = hsh.split(\"&\")\n    parts.forEach(kv => {\n      const kvp = kv.split(\"=\")\n      const key = kvp.shift()\n      result[key] = kvp.join(\"=\")\n    })\n    return result\n  }\n\n  static updateHashParams(toMerge = {}, opts) {\n    this.setHashParams(Object.assign({}, this.getHashParams(), toMerge), opts)\n  }\n\n  static serializeHashParams(hparams = {}, opts = {}) {\n    const hsh = []\n    for (const [k, v] of Object.entries(hparams)) {\n      if(v === undefined) continue\n      if(v === \"\" && opts.clearBlanks) continue\n      if(v === null)\n        hsh.push(`${k}`)\n      else\n        hsh.push(`${k}=${v}`)\n    }\n    return hsh.join(\"&\")\n  }\n\n  static setHashParams(hparams = {}, opts = {}) {\n    // window.location.hash = `#${this.serializeHashParams(hparams)}`\n    history.replaceState(undefined, undefined, `#${this.serializeHashParams(hparams)}`)\n  }\n\n  static observeVisibility(el, opts = {}, callback) {\n    if(!IntersectionObserver) {\n      console.warn(\"IntersectionObserver not available\")\n      return false\n    }\n\n    if (typeof opts == \"function\") {\n      callback = opts\n      opts = {}\n    }\n\n    el = $(el).get(0)\n    opts.root ??= document.documentElement\n\n    const observer = new IntersectionObserver(((entries, observer) => {\n      entries.forEach(entry => callback?.(entry.intersectionRatio > 0, observer))\n    }), opts)\n\n    observer.observe(el)\n    return observer\n  }\n\n  static debounce(func, timeout = 300) {\n    let timer\n    return (...args) => {\n      clearTimeout(timer)\n      timer = setTimeout(() => { func.apply(this, args) }, timeout)\n    }\n  }\n\n  static debounce_leading(func, timeout = 300) {\n    let timer\n    return (...args) => {\n      if (!timer) {\n        func.apply(this, args)\n      }\n      clearTimeout(timer)\n      timer = setTimeout(() => {\n        timer = undefined\n      }, timeout)\n    }\n  }\n\n  static throttle(func, timeout = 300) {\n    let timer\n\n    return (...args) => {\n      if(timer) return\n\n      timer = setTimeout(() => {\n        func.apply(this, args)\n        timer = undefined\n      }, timeout)\n    }\n  }\n\n  static throttle_leading(func, timeout = 300) {\n    let timer\n\n    return (...args) => {\n      if(timer) return\n\n      func.apply(this, args)\n      timer = setTimeout(() => {\n        timer = undefined\n      }, timeout)\n    }\n  }\n\n  static throttle_debounce(func, timeout = 300) {\n    let timer\n    let timer2\n\n    return (...args) => {\n      clearTimeout(timer2)\n      timer2 = setTimeout(() => { func.apply(this, args) }, timeout)\n\n      if(timer) return\n\n      func.apply(this, args)\n      timer = setTimeout(() => {\n        timer = undefined\n      }, timeout)\n    }\n  }\n\n  static throttle_leading_debounce(func, timeout = 300) {\n    let timer\n    let timer2\n\n    return (...args) => {\n      if(!timer2) func.apply(this, args)\n      clearTimeout(timer2)\n      timer2 = setTimeout(() => { func.apply(this, args) }, timeout)\n\n      if(timer) return\n\n      func.apply(this, args)\n      timer = setTimeout(() => {\n        timer = undefined\n      }, timeout)\n    }\n  }\n\n  static scrollParent(el, includeHidden) {\n    const position = $(el).css( \"position\" )\n    const excludeStaticParent = position === \"absolute\"\n    const overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/\n    const scrollParent = $(el).parents().filter(function() {\n      const parent = $( this )\n      if (excludeStaticParent && parent.css( \"position\" ) === \"static\") {\n        return false\n      }\n      return overflowRegex.test(parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) + parent.css( \"overflow-x\" ))\n    }).eq(0)\n\n    return position === \"fixed\" || !scrollParent.length ?\n      $( $(el)[0].ownerDocument || document ) :\n      scrollParent;\n  }\n\n  static scrollIntoViewIfNeeded(target, opts = {}) {\n    target = $(target)\n    opts.centerX ??= true\n    opts.parent ??= target.parent()\n    opts.sparent ??= this.scrollParent(target)\n    opts.behavior ??= \"auto\"\n\n    const toff = target.offset()\n    const soff = opts.sparent.offset()\n    const stop = opts.sparent.scrollTop()\n\n    let x = 0, y = 0\n    let usableHeight = opts.sparent.innerHeight() - target.outerHeight()\n    x = toff.top - soff.top //+ stop\n\n    if (opts.excludeHeight && !Array.isArray(opts.excludeHeight)) {\n      opts.excludeHeight = [opts.excludeHeight]\n    }\n    if (opts.excludeHeight) {\n      opts.excludeHeight.forEach(el => {\n        const oh = $(el).outerHeight()\n        x -= oh\n        usableHeight -= oh\n      })\n    }\n\n    if(x < 0) {\n      let starget = x + stop\n      if (opts.centerX) {\n        starget -= Math.floor(usableHeight / 2) //- Math.floor(target.outerHeight() / 2)\n      }\n      opts.sparent.get(0).scrollTo({ top: starget, left: y, behavior: opts.behavior })\n    } else if (x > 0) {\n      let starget = stop\n      if(x - usableHeight > 0) {\n        starget += (x - usableHeight)\n        if (opts.centerX) {\n          starget += Math.floor(usableHeight / 2) //- Math.floor(target.outerHeight() / 2)\n        }\n        opts.sparent.get(0).scrollTo({ top: starget, left: y, behavior: opts.behavior })\n      }\n    }\n  }\n\n  static scanBeep(play = true, volume = 1) {\n    const snd = new Audio(\"data:audio/wav;base64,//uQRAAAAWMSLwUIYAAsYkXgoQwAEaYLWfkWgAI0wWs/ItAAAGDgYtAgAyN+QWaAAihwMWm4G8QQRDiMcCBcH3Cc+CDv/7xA4Tvh9Rz/y8QADBwMWgQAZG/ILNAARQ4GLTcDeIIIhxGOBAuD7hOfBB3/94gcJ3w+o5/5eIAIAAAVwWgQAVQ2ORaIQwEMAJiDg95G4nQL7mQVWI6GwRcfsZAcsKkJvxgxEjzFUgfHoSQ9Qq7KNwqHwuB13MA4a1q/DmBrHgPcmjiGoh//EwC5nGPEmS4RcfkVKOhJf+WOgoxJclFz3kgn//dBA+ya1GhurNn8zb//9NNutNuhz31f////9vt///z+IdAEAAAK4LQIAKobHItEIYCGAExBwe8jcToF9zIKrEdDYIuP2MgOWFSE34wYiR5iqQPj0JIeoVdlG4VD4XA67mAcNa1fhzA1jwHuTRxDUQ//iYBczjHiTJcIuPyKlHQkv/LHQUYkuSi57yQT//uggfZNajQ3Vmz+Zt//+mm3Wm3Q576v////+32///5/EOgAAADVghQAAAAA//uQZAUAB1WI0PZugAAAAAoQwAAAEk3nRd2qAAAAACiDgAAAAAAABCqEEQRLCgwpBGMlJkIz8jKhGvj4k6jzRnqasNKIeoh5gI7BJaC1A1AoNBjJgbyApVS4IDlZgDU5WUAxEKDNmmALHzZp0Fkz1FMTmGFl1FMEyodIavcCAUHDWrKAIA4aa2oCgILEBupZgHvAhEBcZ6joQBxS76AgccrFlczBvKLC0QI2cBoCFvfTDAo7eoOQInqDPBtvrDEZBNYN5xwNwxQRfw8ZQ5wQVLvO8OYU+mHvFLlDh05Mdg7BT6YrRPpCBznMB2r//xKJjyyOh+cImr2/4doscwD6neZjuZR4AgAABYAAAABy1xcdQtxYBYYZdifkUDgzzXaXn98Z0oi9ILU5mBjFANmRwlVJ3/6jYDAmxaiDG3/6xjQQCCKkRb/6kg/wW+kSJ5//rLobkLSiKmqP/0ikJuDaSaSf/6JiLYLEYnW/+kXg1WRVJL/9EmQ1YZIsv/6Qzwy5qk7/+tEU0nkls3/zIUMPKNX/6yZLf+kFgAfgGyLFAUwY//uQZAUABcd5UiNPVXAAAApAAAAAE0VZQKw9ISAAACgAAAAAVQIygIElVrFkBS+Jhi+EAuu+lKAkYUEIsmEAEoMeDmCETMvfSHTGkF5RWH7kz/ESHWPAq/kcCRhqBtMdokPdM7vil7RG98A2sc7zO6ZvTdM7pmOUAZTnJW+NXxqmd41dqJ6mLTXxrPpnV8avaIf5SvL7pndPvPpndJR9Kuu8fePvuiuhorgWjp7Mf/PRjxcFCPDkW31srioCExivv9lcwKEaHsf/7ow2Fl1T/9RkXgEhYElAoCLFtMArxwivDJJ+bR1HTKJdlEoTELCIqgEwVGSQ+hIm0NbK8WXcTEI0UPoa2NbG4y2K00JEWbZavJXkYaqo9CRHS55FcZTjKEk3NKoCYUnSQ0rWxrZbFKbKIhOKPZe1cJKzZSaQrIyULHDZmV5K4xySsDRKWOruanGtjLJXFEmwaIbDLX0hIPBUQPVFVkQkDoUNfSoDgQGKPekoxeGzA4DUvnn4bxzcZrtJyipKfPNy5w+9lnXwgqsiyHNeSVpemw4bWb9psYeq//uQZBoABQt4yMVxYAIAAAkQoAAAHvYpL5m6AAgAACXDAAAAD59jblTirQe9upFsmZbpMudy7Lz1X1DYsxOOSWpfPqNX2WqktK0DMvuGwlbNj44TleLPQ+Gsfb+GOWOKJoIrWb3cIMeeON6lz2umTqMXV8Mj30yWPpjoSa9ujK8SyeJP5y5mOW1D6hvLepeveEAEDo0mgCRClOEgANv3B9a6fikgUSu/DmAMATrGx7nng5p5iimPNZsfQLYB2sDLIkzRKZOHGAaUyDcpFBSLG9MCQALgAIgQs2YunOszLSAyQYPVC2YdGGeHD2dTdJk1pAHGAWDjnkcLKFymS3RQZTInzySoBwMG0QueC3gMsCEYxUqlrcxK6k1LQQcsmyYeQPdC2YfuGPASCBkcVMQQqpVJshui1tkXQJQV0OXGAZMXSOEEBRirXbVRQW7ugq7IM7rPWSZyDlM3IuNEkxzCOJ0ny2ThNkyRai1b6ev//3dzNGzNb//4uAvHT5sURcZCFcuKLhOFs8mLAAEAt4UWAAIABAAAAAB4qbHo0tIjVkUU//uQZAwABfSFz3ZqQAAAAAngwAAAE1HjMp2qAAAAACZDgAAAD5UkTE1UgZEUExqYynN1qZvqIOREEFmBcJQkwdxiFtw0qEOkGYfRDifBui9MQg4QAHAqWtAWHoCxu1Yf4VfWLPIM2mHDFsbQEVGwyqQoQcwnfHeIkNt9YnkiaS1oizycqJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=\")\n    snd.volume = volume\n    if(play) snd.play()\n    return snd\n  }\n\n  static beepStart(freq, volume, onStop) {\n    return new Promise((resolve, reject) => {\n      try {\n        const context = new AudioContext()\n        const oscillator = context.createOscillator()\n        const gainNode = context.createGain()\n\n        oscillator.type = \"sine\"\n        oscillator.frequency.value = freq\n        gainNode.gain.value = Math.max(0, Math.min(volume, 1))\n\n        oscillator.connect(gainNode)\n        gainNode.connect(context.destination)\n\n        oscillator.start()\n\n        const stopFunc = cb => {\n          oscillator.stop()\n          context.close()\n          onStop?.()\n          cb?.()\n        }\n\n        resolve({ oscillator: oscillator, stop: stopFunc, gainNode: gainNode, gain: gainNode.gain, context: context })\n      } catch(err) {\n        reject(err)\n      }\n    })\n  }\n\n  static beep(freq = 1000, duration = 100, volume = 1) {\n    return new Promise((resolve, reject) => {\n      this.beepStart(freq, volume).then(beep => {\n        if(duration == null) {\n          resolve(beep)\n        } else {\n          setTimeout(_ => { beep.stop(resolve) }, duration)\n        }\n      })\n    })\n  }\n\n  static beepSeq(seq, opts = {}) {\n    opts.volume ??= 1\n    opts.duration ??= 100\n    opts.wait ??= 0\n    opts.form ??= \"sine\"\n\n    let dur = opts.duration\n    let vol = opts.volume\n    let wait = opts.wait\n    let form = opts.form\n    let beep = null\n    let ptr = this.beepStart(0, vol)\n    ptr.then(b => {\n      beep = b\n      beep.gain.value = vol\n    })\n\n    seq.split(\" \").forEach(el => {\n      const chunks = el.split(\":\")\n\n      ptr = ptr.then(_ => {\n        if(chunks[0] == \"wait\") {\n          wait = parseInt(chunks[1])\n          return Promise.resolve()\n        } else if(chunks[0] == \"dur\") {\n          dur = parseInt(chunks[1])\n          return Promise.resolve()\n        } else if(chunks[0] == \"vol\") {\n          vol = parseFloat(chunks[1])\n          if(beep) beep.gain.value = vol\n          return Promise.resolve()\n        } else if(chunks[0] == \"form\") {\n          form = chunks[1]\n          if(beep) beep.oscillator.type = form\n          return Promise.resolve()\n        } else if(chunks[0] == \"w\") {\n          const freqWas = beep.oscillator.frequency.value\n          beep.oscillator.frequency.value = 0\n          const wptr = this.wait(parseInt(chunks[1] ?? dur))\n          wptr.then(_ => beep.oscillator.frequency.value = freqWas)\n          return wptr\n        } else {\n          let wptr = Promise.resolve()\n          let [freq, repeats] = chunks[0].split(\"*\")\n          repeats ??= 1\n          const setFreq = (_wait) => {\n            beep.oscillator.frequency.value = parseInt(freq)\n            return this.wait(_wait)\n          }\n\n          for (var i = 0; i < repeats; i++) {\n            if(wait) {\n              wptr = wptr.then(_ => {\n                const freqWas = beep.oscillator.frequency.value\n                beep.oscillator.frequency.value = 0\n                return this.wait(wait).then(_ => setFreq(parseInt(chunks[1] ?? dur)))\n              })\n            } else {\n              wptr = wptr.then(_ => setFreq(parseInt(chunks[1] ?? dur)))\n            }\n          }\n\n          return wptr\n        }\n      })\n    })\n\n    ptr = ptr.then(_ => beep.stop())\n\n    return ptr\n  }\n\n  static wait(ms) {\n    return new Promise((resolve, reject) => setTimeout(resolve, ms))\n  }\n\n  static parameterize(str) {\n    return str\n      .toLowerCase()\n      .trim()\n      .replace(/[^a-z0-9]+/g, \"-\") // Replace non-alphanumeric characters with a dash\n      .replace(/^-+|-+$/g, \"\")     // Remove leading/trailing dashes\n  }\n}\n\nexport { Util }\n", "import {Application} from \"./application\"\n// import {DomObserver} from \"./dom_observer\"\nimport {ComponentLoader} from \"./component_loader\"\nimport {Component} from \"./component\"\nimport {NamespacedConsole} from \"./namespaced_console\"\nimport {SimpleEvents} from \"./simple_events\"\nimport {Debugger} from \"./debugger\"\nimport {Util} from \"./util\"\n\nclass AppOS {\n  static boot(app) {\n    app.events.fire(\"init\", this)\n    app.opts.defaultBoot?.apply(app, [app])\n\n    AppOS.setupTemplateHooksSingleton(app)\n    // AppOS.setupDomObserverSingleton(app)\n    AppOS.setupComponentLoaderSingleton(app)\n\n    app.events.fire(\"boot\", app)\n    return app\n  }\n\n  static setupTemplateHooksSingleton(app) {\n    if(!window.__appos_core_template_hooks_registered) {\n      this.setupTemplateHooks(app)\n      window.__appos_core_template_hooks_registered = true\n    }\n  }\n\n  static setupTemplateHooks(app) {\n    app.events.on(\"boot\", _ => { AppOS.runTemplateHooks(\"app-boot\", { app: app }) })\n    app.events.on(\"documentLoad\", _ => { AppOS.runTemplateHooks(\"document-load\", { app: app }) })\n    app.events.on(\"pageLoad\", _ => { AppOS.runTemplateHooks(\"page-load\", { app: app }) })\n  }\n\n  static setupComponentLoaderSingleton(app) {\n    if(!window.__appos_core_component_loader) {\n      this.setupComponentLoader(app)\n    }\n  }\n\n  static setupComponentLoader(app) {\n    window.__appos_core_component_loader?.destroy()\n    window.__appos_core_component_loader = new ComponentLoader(app)\n    window.__appos_component_loaded = window.__appos_core_component_loader.signal.bind(window.__appos_core_component_loader)\n    app?.events.on(\"pageLoad\", _ => { window.__appos_core_component_loader.ensure() })\n  }\n\n  // static setupDomObserverSingleton(app) {\n  //   if(!window.__appos_core_dom_observer) {\n  //     this.setupDomObserver(app)\n  //   }\n  // }\n\n  // static setupDomObserver(app) {\n  //   window.__appos_core_dom_observer?.destroy()\n  //   window.__appos_core_dom_observer = new DomObserver(document.documentElement)\n  //   app.events.on(\"documentLoad\", _ => window.__appos_core_dom_observer?.start())\n  //   return window.__appos_core_dom_observer\n  // }\n\n  static runTemplateHooks(type, env = {}) {\n    document.querySelectorAll(`template[appos-${type}]`).forEach(tpl => {\n      const f = new Function('env', tpl.content.firstElementChild.textContent)\n      if(typeof env?.app?.debug == \"function\") env.app.debug(\"running tpl-hook\", type, tpl)\n      f(env)\n      tpl.remove()\n    })\n  }\n\n  static mergeClasses(...bases) {\n    class Bases {\n      constructor() {\n        bases.forEach(base => Object.assign(this, new base()));\n      }\n    }\n    bases.forEach(base => {\n      Object.getOwnPropertyNames(base.prototype)\n      .filter(prop => prop != 'constructor')\n      .forEach(prop => Bases.prototype[prop] = base.prototype[prop])\n    })\n    return Bases;\n  }\n\n  static mergeClassesAsModule(...bases) {\n    class Bases {}\n    bases.forEach(base => {\n      Object.getOwnPropertyNames(base.prototype)\n      .filter(prop => prop != 'constructor')\n      .forEach(prop => Bases.prototype[prop] = base.prototype[prop])\n    })\n    return Bases;\n  }\n\n  static html(str) {\n    const template = document.createElement(\"template\")\n    template.innerHTML = str\n    return template.content.firstElementChild\n  }\n\n  static htmlAll(str) {\n    const template = document.createElement(\"template\")\n    template.innerHTML = str\n    return template.content.childNodes\n  }\n}\n\nconst bootFunction = AppOS.boot\nconst mergeClassesFunction = AppOS.mergeClasses\nconst mergeClassesAsModuleFunction = AppOS.mergeClassesAsModule\n\nexport {\n  bootFunction as boot,\n  mergeClassesFunction as mergeClasses,\n  mergeClassesAsModuleFunction as mergeClassesAsModule,\n  AppOS,\n  Debugger,\n  Application,\n  Component,\n  SimpleEvents,\n  NamespacedConsole,\n  Util,\n}\n", "// t: current time, b: begInnIng value, c: change In value, d: duration\njQuery.easing['jswing'] = jQuery.easing['swing'];\n\njQuery.extend( jQuery.easing,\n{\n  def: 'easeOutQuad',\n  swing: function (x, t, b, c, d) {\n    //alert(jQuery.easing.default);\n    return jQuery.easing[jQuery.easing.def](x, t, b, c, d);\n  },\n  easeInQuad: function (x, t, b, c, d) {\n    return c*(t/=d)*t + b;\n  },\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  },\n  easeInOutQuad: function (x, t, b, c, d) {\n    if ((t/=d/2) < 1) return c/2*t*t + b;\n    return -c/2 * ((--t)*(t-2) - 1) + b;\n  },\n  easeInCubic: function (x, t, b, c, d) {\n    return c*(t/=d)*t*t + b;\n  },\n  easeOutCubic: function (x, t, b, c, d) {\n    return c*((t=t/d-1)*t*t + 1) + b;\n  },\n  easeInOutCubic: function (x, t, b, c, d) {\n    if ((t/=d/2) < 1) return c/2*t*t*t + b;\n    return c/2*((t-=2)*t*t + 2) + b;\n  },\n  easeInQuart: function (x, t, b, c, d) {\n    return c*(t/=d)*t*t*t + b;\n  },\n  easeOutQuart: function (x, t, b, c, d) {\n    return -c * ((t=t/d-1)*t*t*t - 1) + b;\n  },\n  easeInOutQuart: function (x, t, b, c, d) {\n    if ((t/=d/2) < 1) return c/2*t*t*t*t + b;\n    return -c/2 * ((t-=2)*t*t*t - 2) + b;\n  },\n  easeInQuint: function (x, t, b, c, d) {\n    return c*(t/=d)*t*t*t*t + b;\n  },\n  easeOutQuint: function (x, t, b, c, d) {\n    return c*((t=t/d-1)*t*t*t*t + 1) + b;\n  },\n  easeInOutQuint: function (x, t, b, c, d) {\n    if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;\n    return c/2*((t-=2)*t*t*t*t + 2) + b;\n  },\n  easeInSine: function (x, t, b, c, d) {\n    return -c * Math.cos(t/d * (Math.PI/2)) + c + b;\n  },\n  easeOutSine: function (x, t, b, c, d) {\n    return c * Math.sin(t/d * (Math.PI/2)) + b;\n  },\n  easeInOutSine: function (x, t, b, c, d) {\n    return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;\n  },\n  easeInExpo: function (x, t, b, c, d) {\n    return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\n  },\n  easeOutExpo: function (x, t, b, c, d) {\n    return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\n  },\n  slowEaseOutExpo: function (x, t, b, c, d) {\n    var expo = -Math.pow(2, -10 * t/d) + 1;\n    var slowExpo = 1 - Math.pow(1 - expo, 3);\n    return b + c * slowExpo;\n  },\n  easeInOutExpo: function (x, t, b, c, d) {\n    if (t==0) return b;\n    if (t==d) return b+c;\n    if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;\n    return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;\n  },\n  easeInCirc: function (x, t, b, c, d) {\n    return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;\n  },\n  easeOutCirc: function (x, t, b, c, d) {\n    return c * Math.sqrt(1 - (t=t/d-1)*t) + b;\n  },\n  easeInOutCirc: function (x, t, b, c, d) {\n    if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;\n    return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;\n  },\n  easeInElastic: function (x, t, b, c, d) {\n    var s=1.70158;var p=0;var a=c;\n    if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\n    if (a < Math.abs(c)) { a=c; var s=p/4; }\n    else var s = p/(2*Math.PI) * Math.asin (c/a);\n    return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\n  },\n  easeOutElastic: function (x, t, b, c, d) {\n    var s=1.70158;var p=0;var a=c;\n    if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\n    if (a < Math.abs(c)) { a=c; var s=p/4; }\n    else var s = p/(2*Math.PI) * Math.asin (c/a);\n    return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;\n  },\n  easeInOutElastic: function (x, t, b, c, d) {\n    var s=1.70158;var p=0;var a=c;\n    if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);\n    if (a < Math.abs(c)) { a=c; var s=p/4; }\n    else var s = p/(2*Math.PI) * Math.asin (c/a);\n    if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\n    return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;\n  },\n  easeInBack: function (x, t, b, c, d, s) {\n    if (s == undefined) s = 1.70158;\n    return c*(t/=d)*t*((s+1)*t - s) + b;\n  },\n  easeOutBack: function (x, t, b, c, d, s) {\n    if (s == undefined) s = 1.70158;\n    return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\n  },\n  easeInOutBack: function (x, t, b, c, d, s) {\n    if (s == undefined) s = 1.70158;\n    if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;\n    return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;\n  },\n  easeInBounce: function (x, t, b, c, d) {\n    return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;\n  },\n  easeOutBounce: function (x, t, b, c, d) {\n    if ((t/=d) < (1/2.75)) {\n      return c*(7.5625*t*t) + b;\n    } else if (t < (2/2.75)) {\n      return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;\n    } else if (t < (2.5/2.75)) {\n      return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;\n    } else {\n      return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;\n    }\n  },\n  easeInOutBounce: function (x, t, b, c, d) {\n    if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;\n    return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;\n  }\n});\n", "import * as AppOS from \"../appos\"\n\nconst Component = class extends AppOS.Component {\n  static name = \"TurboBridge\"\n\n  init() {\n    this.active = false\n    this.detached = []\n  }\n\n  documentLoad() {\n    if (window.Turbo) {\n      this.active = true\n      document.addEventListener('turbo:before-render', this.turboBeforeRender)\n    } else if (window.Turbolinks) {\n      this.active = true\n\n    }\n  }\n\n  pageLoad() {\n  }\n\n  turboBeforeRender(ev) {\n    ev.target.querySelectorAll(\"[data-ao-permanent]\").forEach(el => {\n      const pe = el.parentElement\n      const nb = ev.detail.newBody\n      const node = el.parentElement.removeChild(el)\n      if (pe.tagName == \"BODY\") {\n        nb.appendChild(node)\n      } else if (pe.id) {\n        nb.querySelector(`#${pe.id}`).appendChild(node)\n      } else {\n        nb.appendChild(node)\n        this.warn(\"cannot determine parent, will reinsert to body\", el)\n      }\n    })\n  }\n}\n\nAppOS.Application?.availableComponents?.push?.(Component)\nexport { Component }\n", "import * as AppOS from \"../appos\"\n\nconst Component = class extends AppOS.Component {\n  static name = \"ToggleInlineList\"\n\n  documentLoad() {\n    $(document).on(\"click\", `[data-toggle=\"inline-list\"]`, ev => {\n      $(ev.currentTarget).closest(\"ul.toggle-inline-list\").toggleClass(\"expanded\")\n      setTimeout(_ => {\n        $(ev.currentTarget).blur()\n      }, 150)\n      return false\n    })\n  }\n}\n\nAppOS.Application?.availableComponents?.push?.(Component)\nexport { Component }\n", "import * as AppOS from \"../../appos\"\n\nclass ElementRevolver {\n  constructor(elements, opts = {}) {\n    this.elements = elements\n    this.positions = []\n    this.interval = null\n    this.opts = Object.assign({}, {\n      // radius and center coordinates\n      radius: 80,\n      centerX: 150,\n      centerY: 150,\n\n      // time in milliseconds for one revolution (i.e. speed)\n      interval: 60000,\n\n      // direction = 1 for clockwise, -1 for counterclockwise\n      direction: 1,\n\n      // startPosition can be a degree angle\n      // (0 = right, 90 = top, 180 = left, 270 = bottom)\n      startPositionDeg: 270,\n\n      updateInterval: 100,\n      scaleFactor: 0.4,\n      opacityFactor: 0.5,\n\n      // how many degrees to put items apart, null = auto-detect based on items\n      degStep: null,\n\n      // 0 = left\n      // 1 = bottom-left\n      // 2 = bottom\n      // 3 = bottom-right\n      // 4 = right\n      // 5 = top-right\n      // 6 = top\n      // 7 = top-left\n      // let nrad = this.normalizeRad(pos.angle + (Math.PI / 2)) // top-oriented\n      //let nrad = this.normalizeRad(pos.angle + Math.PI + (Math.PI / 2)) // bottom-oriented\n      orientation: 6,\n    }, opts)\n  }\n\n  setOpts(opts = {}) {\n    Object.assign(this.opts, opts)\n    return this\n  }\n\n  start() {\n    this.startTime = Date.now()\n    if(this.interval !== null) this.stop()\n\n    if(this.opts.degStep === null) {\n      this.opts.degStep = 360 / this.elements.length\n      this.opts.radStep = this.opts.degStep / 180 * Math.PI\n    }\n\n    this.elements.each((i, el) => {\n      el.style.position = this.opts.cssPosition || 'absolute'\n      this.positions[i] = { deg: this.opts.startPositionDeg + (i * this.opts.degStep) }\n      this.positions[i].rad = this.positions[i].deg / 180 * Math.PI\n      // if(!this.opts.startPositionRad) this.opts.startPositionRad = this.opts.startPositionDeg / 180 * Math.PI\n    })\n\n    // update twice (first run sets scales)\n    this.update()\n    this.update()\n    setTimeout(_ => {\n      this.elements.parent().addClass(\"transition\")\n      this.interval = setInterval(_ => this.update(), this.opts.updateInterval)\n    }, 1)\n\n    return this\n  }\n\n  stop() {\n    if(this.interval === null) return\n    clearInterval(this.interval)\n    this.observer?.disconnect()\n    this.interval = null\n    return this\n  }\n\n  ease(scale) {\n    return this.easeInOutSine(scale)\n  }\n\n  easeInQuint(x) { return x * x * x * x * x }\n  easeInOutSine(x) { return -(Math.cos(Math.PI * x) - 1) / 2 }\n\n  update() {\n    let firstAngle = null\n    this.elements.each((i, el) => {\n      var pos = this.getPosition(i, el, Date.now() - this.startTime, firstAngle)\n      if(firstAngle === null) firstAngle = pos.angle\n\n      // let nrad = this.normalizeRad(pos.angle + (Math.PI / 2)) // top-oriented\n      let nrad = this.normalizeRad(pos.angle + (Math.PI / 4 * this.opts.orientation))\n      let scale = nrad / (Math.PI)\n      if (scale > 1) scale = 2 - scale\n      let scaleFactor = this.opts.scaleFactor * this.ease(1 - scale)\n      let opacityFactor = this.opts.opacityFactor * (1 - scale)\n\n      el.style.setProperty(\"--scale\", 1 - scaleFactor)\n      el.style.setProperty(\"opacity\", 1 - opacityFactor)\n      el.style.zIndex = Math.round(scale * 100)\n      const rect = el.getBoundingClientRect()\n      el.style.left = (pos.x - el.offsetWidth / 2) + (el.width / 2) + 'px';\n      el.style.top = (pos.y - el.offsetHeight / 2) + (el.height / 2) + 'px';\n\n      firstAngle += this.opts.radStep\n    })\n    // this.stop()\n  }\n\n  getPosition(i, el, ellapsedTime, angle = null) {\n    if(angle === null) { angle = this.getAngle(i, ellapsedTime) }\n\n    let radius = this.opts.radius\n    const rect = el.getBoundingClientRect()\n    radius -= (rect.width / 2) * 1.2\n\n    return {\n      angle: angle,\n      x: this.opts.centerX + radius * Math.cos(angle),\n      y: this.opts.centerY + radius * Math.sin(angle),\n    }\n  }\n\n  getAngle(i, ellapsedTime) {\n    return this.normalizeRad(ellapsedTime / this.opts.interval * 2 * Math.PI * this.opts.direction - this.positions[i].rad)\n  }\n\n  normalizeRad(rad) {\n    while(rad < 0 ) rad += 2 * Math.PI\n    return rad % (Math.PI * 2)\n  }\n}\n\n\n\nclass ThreeD_Carousel {\n  constructor(ctn) {\n    this.ctn = $(ctn)\n    this.vp = this.ctn.find(\".tdc-viewport\")\n    this.imgCtn = this.ctn.find(\".tdc-images\")\n    this.widthCtn = this.ctn.find(\".tdc-width\")\n\n    this.init().start()\n  }\n\n  get imageElements() {\n    return this.ctn.find(\".tdc-images img\")\n  }\n\n  init() {\n    this.initImages()\n    this.updateDimensions()\n    return this\n  }\n\n  initImages() {\n    this.observer = new ResizeObserver((e, o) => this.handleChange(e, o))\n    this.observer.observe(this.widthCtn.get(0), { attributes: true })\n\n    this.revolver?.stop()\n    this.revolver = new ElementRevolver(this.imageElements)\n  }\n\n  async handleChange(entries, observer) {\n    entries.forEach(m => {\n      this.vp.css({ minWidth: `1px`, minHeight: `1px` })\n      this.updateDimensions()\n      // if(m.type != \"attributes\") return\n      // if(m.attributeName != \"open\") return\n      // this.toggle(m.target.dataset.visibilityMarker, m.target.attributes.getNamedItem(\"open\") !== null)\n    })\n  }\n\n  updateDimensions() {\n    const width = this.ctn.width()\n    const height = this.ctn.height()\n    const edge = Math.max(width, height) //Math.floor(width > height ? height : width)\n    const center = edge / 2\n    // const radius = Math.floor(center * 0.9)\n    const radius = center //- ((this.imageElements[0].width / 2) * 1.1)\n\n    this.vp.css({ minWidth: `${edge}px`, minHeight: `${edge}px` })\n    this.revolver.setOpts({ radius: radius, centerX: center, centerY: center })\n\n    return this\n  }\n\n  start() {\n    this.imgCtn.removeClass(\"invisible\")\n    this.revolver.start()\n\n    return this\n  }\n\n  stop() {\n    this.revolver?.stop()\n\n    return this\n  }\n}\n\nconst Component = class extends AppOS.Component {\n  static name = \"ThreeD.Carousel\"\n\n  init() {\n  }\n\n  documentLoad() {\n  }\n\n  pageLoad() {\n    $(\".threed-carousel\").each((i, el) => {\n      if(!$(el).data(\"appos-3d-carousel\")) {\n        $(el).data(\"appos-3d-carousel\", new ThreeD_Carousel(el))\n      }\n    })\n  }\n}\n\nAppOS.Application?.availableComponents?.push?.(Component)\nexport { Component }\n", "import * as AppOS from \"../appos\"\n\nclass ScrollQueue {\n  constructor(opts = {}) {\n    this.opts = Object.assign({}, {\n      tickRate: 200,\n      considerDoneAfter: 300,\n    }, opts)\n    this.lastScroll = Date.now()\n    this.queue = []\n  }\n\n  get timeSinceLastScroll() {\n    return Date.now() - this.lastScroll\n  }\n\n  hook() {\n    if(!this.hooked) {\n      this.hooked = true\n      $(document).on(\"scroll\", ev => { this.lastScroll = Date.now() })\n    }\n    return this\n  }\n\n  start() {\n    if(!this.clock) {\n      this.clock = setInterval(_ => { this.tick() }, this.opts.tickRate)\n    }\n    return this\n  }\n\n  stop() {\n    if(this.clock) {\n      clearInterval(this.clock)\n      delete this.clock\n    }\n    return this\n  }\n\n  tick() {\n    if(!this.queue.length) return\n    if(this.timeSinceLastScroll < this.opts.considerDoneAfter) return\n    this.dequeue()\n  }\n\n  dequeue() {\n    const item = this.queue.shift()\n\n    if(item.opts.ifNeeded) {\n      item.element.scrollIntoViewIfNeeded(true)\n    } else {\n      item.element.scrollIntoView(item.scrollOpts)\n    }\n  }\n\n  enqueue(element, opts = {}, scrollOpts = { behavior: \"smooth\" }) {\n    if(opts.delay) {\n      setTimeout(_ => {\n        this.enqueue(element, Object.assign({}, opts, { delay: false }), scrollOpts)\n      }, opts.delay)\n      return\n    }\n\n    this.queue.push({ element, opts, scrollOpts })\n  }\n}\n\nexport { ScrollQueue }\n", "import * as AppOS from \"../appos/appos\"\n\nconst Component = class extends AppOS.Component {\n  static name = \"FindAThingRenderer\"\n\n  documentLoad() {\n    this.opts.rows ??= 4\n    this.opts.perRow ??= 6\n    this.opts.perPage ??= this.opts.rows * this.opts.perRow\n    // $(document).on(\"click\", `[data-toggle=\"inline-list\"]`, ev => {\n    //   $(ev.currentTarget).closest(\"ul.toggle-inline-list\").toggleClass(\"expanded\")\n    //   setTimeout(_ => {\n    //     $(ev.currentTarget).blur()\n    //   }, 150)\n    //   return false\n    // })\n  }\n\n  pageLoad() {\n    $(`[data-fat-index]`).each((i, _el) => {\n      this.indexOne(_el)\n    })\n    // <div class=\"mb-1\" data-flist-entry data-fat-index=\"<%= hit %>\" data-fat-offset=\"<%= @fat_offset %>\">\n    // <span class=\"text-muted text-smaller\" data-fat-render>\n  }\n\n  async indexOne(_el) {\n    const el = $(_el)\n    const index = el.data(\"fatIndex\")\n    if(index === null || index === undefined) return\n    const offset = el.data(\"fatOffset\") ?? 0\n    const render = el.find(`[data-fat-render]`)\n    const r = $(\"<span>\")\n\n    if (index < 0) {\n      if(render.data(\"fatRender\") == \"compact\") {\n        r.html(` LOOKUP-ERR`).addClass(\"text-danger\")\n      } else {\n        r.html(` LOOKUP-ERROR`).addClass(\"text-danger\")\n      }\n    } else {\n      const a_index = index + offset\n      const page = Math.floor(a_index / this.opts.perPage) + 1\n      const row = Math.floor((a_index % this.opts.perPage) / this.opts.perRow) + 1\n      const col = Math.floor(((a_index % this.opts.perPage) % this.opts.perRow)) + 1\n      if(render.data(\"fatRender\") == \"compact\") {\n        r.html(` P${page} R${row} C${col}`)\n      } else {\n        r.html(` Page ${page} / Row ${row} / Column ${col}`)\n      }\n    }\n\n    const ico = $(\"<i>\").addClass(\"bi bi-geo\").prependTo(r)\n    render.html(\"\")\n    render.append(r)\n  }\n}\n\nAppOS.Application?.availableComponents?.push?.(Component)\nexport { Component }\n", "class TrigramIndex {\n  constructor(inputPhrases = []) {\n    this.ids = []\n    this.phrases = []\n    this.trigramIndex = []\n    this.allowDuplicatePhrases = true\n    inputPhrases.forEach(phrase => { this.index(...phrase) })\n  }\n\n  normalize(string) {\n    return string\n      .toLowerCase()\n      .replace(/[^\\x00-\\x7F]/g, \"\")\n      .replace(/[^a-z\\d]/g, \" \")\n      .replace(/\\s+/g, \"*\")\n      .replace(/^/g, \"**\")\n      .replace(/$/g, \"*\")\n  }\n\n  asTrigrams(phrase, callback) {\n    const rawData = this.normalize(phrase)\n\n    for( let i = rawData.length - 3; i >= 0; i = i - 1 ) {\n      callback(rawData.slice(i, i + 3))\n    }\n  }\n\n  index(phrase, id) {\n    if(Array.isArray(phrase)) {\n      [phrase, id] = phrase\n    }\n    phrase = phrase.toLowerCase()\n\n    if(!phrase || phrase === \"\" || (!this.allowDuplicatePhrases && this.phrases.indexOf(phrase) >= 0)) return\n    const phraseIndex = this.phrases.push(phrase) - 1\n    this.ids.push(id)\n\n    this.asTrigrams(phrase, trigram => {\n      let phrasesForTrigram = this.trigramIndex[`t_${trigram}`]\n      if(!phrasesForTrigram) phrasesForTrigram = []\n      if(phrasesForTrigram.indexOf(phraseIndex) < 0) phrasesForTrigram.push(phraseIndex)\n      this.trigramIndex[`t_${trigram}`] = phrasesForTrigram\n    })\n  }\n\n  find(phrase) {\n    const phraseMatches = []\n    let trigramsInPhrase = 0\n    // const start = Date.now()\n\n    this.asTrigrams(this.normalize(phrase), trigram => {\n      const phrasesForTrigram = this.trigramIndex[`t_${trigram}`]\n      trigramsInPhrase += 1\n      if(phrasesForTrigram) {\n        for(let j in phrasesForTrigram) {\n          const phraseIndex = phrasesForTrigram[j]\n          if(!phraseMatches[phraseIndex]) phraseMatches[phraseIndex] = 0\n          phraseMatches[phraseIndex] += 1\n        }\n      }\n    })\n\n    const result = []\n    for(let i in phraseMatches) {\n      result.push({ id: this.ids[i], phrase: this.phrases[i], matches: phraseMatches[i] })\n    }\n\n\n    result.sort((a, b) => {\n      const diff = b.matches - a.matches\n      return diff// == 0 ? a.phrase.localeCompare(b.phrase) : diff\n    })\n    // console.log(Date.now() - start)\n    return result\n  }\n}\n\nexport { TrigramIndex }\n", "import {TrigramIndex} from \"../appos/lib/trigram_index\"\n\nclass EntitlementMapper {\n  constructor(url, opts = {}) {\n    this.url = url\n    //this.data = data\n    this.opts = opts\n    this.itemClass = this.itemClass(EntitlementItem)\n  }\n\n  buildIndex() {\n    return new TrigramIndex(this.items.map((el, i) => [el, i]))\n  }\n\n  itemClass(base) { return base }\n\n  get populate() {\n    if(this.promise) return this.promise\n    this.promise = new Promise((resolve, reject) => {\n      fetch(this.url).then(r => r.json()).then(json => {\n        this.data = json\n        this.indexer = this.buildIndex()\n        this.loaded = true\n        resolve(this)\n      })\n    })\n    return this.promise\n  }\n\n  async do(func) {\n    return await this.populate.then(func)\n  }\n\n  async findDev(query) {\n    this.do(m => {\n      m.find(query, 10).forEach(el => {\n        console.log(el)\n      })\n    })\n  }\n\n  // Every following method should be wrapped in a do-block\n  //   e.g. mapper.do(map => { map.items[12] })\n  // Alternatively you can check for `mapper.loaded` and/or\n  // trigger data fetching with `mapper.populate`\n\n  get items() {\n    return this.data.items\n  }\n\n  get types() {\n    return this.data.types\n  }\n\n  get typemap() {\n    return this.data.type_map\n  }\n\n  rand(num = 1) {\n    const ary = []\n    for (var i = 0; i < num; i++) {\n      ary.push(this.get(this.items[Math.floor(Math.random() * this.items.length)]))\n    }\n    return ary\n  }\n\n  get(name, matches) {\n    const index = this.items.indexOf(name)\n    if (index < 0) return false\n\n    return new this.itemClass(this, index, matches)\n  }\n\n  levenshteinDistance(s, t) {\n    const d = Array.from({ length: t.length + 1 }, (_, i) => i)\n\n    for (let i = 1; i <= s.length; i++) {\n      let prev = i - 1\n      let current = i\n\n      for (let j = 1; j <= t.length; j++) {\n        const insert = current + 1\n        const deleteScore = d[j] + 1\n        const replaceScore = s[i - 1] === t[j - 1] ? prev : prev + 1\n        current = Math.min(insert, deleteScore, replaceScore)\n        prev = d[j]\n        d[j] = current\n      }\n    }\n\n    return d[t.length]\n  }\n\n  find(query, limit = null, log = false) {\n    const filteredArray = this.indexer.find(query).map(r => {\n      if(log) console.log(r)\n      return this.get(this.items[r.id], r.matches)\n    })\n    // const filteredArray = this.items\n    //   .map(item => {\n    //     const itemLower = item.toLowerCase()\n    //     const queryLower = query.toLowerCase()\n    //     const distance = this.levenshteinDistance(itemLower, queryLower)\n    //     const score = itemLower.indexOf(queryLower) === 0 ? -distance : distance\n    //     return { item, score }\n    //   })\n    //   .filter(({ score }) => score <= query.length)\n    //   .sort((a, b) => a.score - b.score)\n    //   .map(({ item }) => item)\n\n    if(limit !== null) {\n      return filteredArray.slice(0, limit)\n    }\n    return filteredArray\n  }\n\n  findFirst(...args) {\n    return find(...args)?.[0]\n  }\n}\n\nclass EntitlementItem {\n  constructor(mapper, index, matches = null) {\n    this.index = index\n    this.matches = matches\n    this.name = mapper.items[this.index]\n    this.types = mapper.typemap?.[this.index].map(id => mapper.types[id])\n    this.pvBase = mapper.opts.pvBase\n  }\n\n  get profilePath() {\n    return `${this.types[0]}?tab=${this.types[1]}`\n  }\n\n  get profileUrl() {\n    if(this.pvBase) {\n      return `${this.pvBase}/${this.profilePath}`\n    } else {\n      return this.profilePath\n    }\n  }\n\n  toData() {\n    return {\n      index: this.index,\n      name: this.name,\n      types: this.types,\n      profileUrl: this.profileUrl,\n    }\n  }\n}\n\nexport { EntitlementMapper }\n", "import * as AppOS from \"../appos/appos\"\n\nclass EntitlementSearch {\n  static hookClicks(selector) {\n    $(document).on(\"click\", async ev => {\n      if(!$(ev.target).closest(`[data-role=\"searchContainer\"]`).length) {\n        $(selector).each((i, el) => {\n          $(el).data(\"entitlementSearch\")?.hide?.()\n        })\n      }\n    })\n  }\n\n  constructor(app, ctn, mapper) {\n    this.app = app\n    this.ctn = ctn\n    this.mapper = mapper\n    this.ctn.data(\"entitlementSearch\", this)\n\n    this.b_toggle = this.ctn.find(`[data-action=\"toggleSearch\"]`)\n    this.i_query = this.ctn.find(`[data-role=\"query\"]`)\n    this.c_wrapper = this.ctn.find(`[data-role=\"searchContainer\"]`)\n    this.c_empty = this.ctn.find(`[data-role=\"emptySet\"]`)\n    this.c_searching = this.ctn.find(`[data-role=\"searching\"]`)\n    this.c_noquery = this.ctn.find(`[data-role=\"emptyQuery\"]`)\n    this.c_results = this.ctn.find(`[data-role=\"results\"]`)\n\n    this.b_toggle.on(\"click\", ev => {\n      ev.preventDefault()\n      ev.stopPropagation()\n      this.b_toggle.blur()\n      this.toggle()\n      return false\n    })\n\n    this.i_query.on(\"keydown\", ev => {\n      if(ev.keyCode == 27) { // escape\n        this.hide()\n        return false\n      } else if(ev.keyCode == 13) { // enter\n        this.confirmSelection()\n        return false\n      } else if(ev.keyCode == 38) { // arrow up\n        this.selectPreviousResult(ev.shiftKey)\n        return false\n      } else if(ev.keyCode == 40) { // arrow down\n        this.selectNextResult(ev.shiftKey)\n        return false\n      }\n\n      clearTimeout(this.searchTimeout)\n      this.searchTimeout = window.setTimeout(_ => {\n        if(this.open) this.applySearch()\n      }, 150)\n    })\n  }\n\n  get open() {\n    return !this.c_wrapper.hasClass(\"d-none\")\n  }\n\n  get selected() {\n    return this.c_results.find(`.active`)\n  }\n\n  toggle() {\n    return this.open ? this.hide() : this.show()\n  }\n\n  show() {\n    this.c_wrapper.removeClass(\"d-none\")\n    this.c_noquery.removeClass(\"d-none\")\n    let offset = 0\n\n    if(this.ctn.closest(\".is-sticky\").length) {\n      this.ctn.closest(\".is-sticky\").css({\"position\": \"static\"})\n      offset = this.b_toggle.offset().top\n      this.ctn.closest(\".is-sticky\").css({\"position\": \"\"})\n    } else {\n      offset = this.b_toggle.offset().top\n    }\n\n    this.i_query.focus()\n    if(offset < window.pageYOffset) {\n      window.scrollTo({ top: offset, behavior: \"smooth\" })\n    }\n  }\n\n  hide() {\n    this.clearResults()\n    this.i_query.val(\"\")\n    this.c_wrapper.addClass(\"d-none\")\n    this.c_searching.addClass(\"d-none\")\n  }\n\n  clearResults() {\n    this.c_results.find(`[data-role=\"result\"]`).remove()\n    this.c_noquery.toggleClass(\"d-none\", !!this.i_query.val())\n    this.c_empty.addClass(\"d-none\")\n  }\n\n  confirmSelection() {\n    const target = this.selected.attr(\"href\")\n    this.hide()\n    AppOS.Util.visitPage(target)\n  }\n\n  selectPreviousResult(selectFirst = false) {\n    const current = this.selected\n    if(selectFirst) {\n      current.removeClass(\"active\")\n      current.siblings(\":first\").addClass(\"active\")\n    } else if(current.prev().length) {\n      current.removeClass(\"active\")\n      current.prev().addClass(\"active\")\n    }\n  }\n\n  selectNextResult(selectLast = false) {\n    const current = this.selected\n    if(selectLast) {\n      current.removeClass(\"active\")\n      current.siblings(\":last\").addClass(\"active\")\n    } else if(current.next().length) {\n      current.removeClass(\"active\")\n      current.next().addClass(\"active\")\n    }\n  }\n\n  async applySearch() {\n    const query = this.i_query.val()\n    if(query == this.lastQuery) {\n      // probably meta key or rapid undo\n      return\n    }\n    this.lastQuery = query\n\n    if(!query) {\n      this.c_searching.addClass(\"d-none\")\n      this.clearResults()\n      return\n    }\n    this.c_searching.removeClass(\"d-none\")\n    this.c_noquery.addClass(\"d-none\")\n    this.c_empty.addClass(\"d-none\")\n\n    this.mapper.do(map => {\n      let results = []\n      if(query.startsWith(\"%%rand%%\")) {\n        results = map.rand(5)\n      } else {\n        results = map.find(query, 15)\n      }\n      this.c_searching.addClass(\"d-none\")\n      this.clearResults()\n      if(results.length) {\n        results.forEach((el, i) => {\n          //console.log(el.matches, el.name)\n          const l = $(\"<a>\")\n            .addClass(\"list-group-item list-group-item-action d-flex justify-content-between align-items-center text-nowrap\")\n            .attr(\"href\", el.profileUrl + `#jump=${encodeURIComponent(el.name).replace(/'/g, \"%27\")}&forceJumpOnce=true`)\n            .attr(\"data-role\", \"result\")\n            .text(el.name)\n            .appendTo(this.c_results)\n\n          if(i == 0) {\n            l.addClass(\"active\")\n          }\n\n          let bgColor = \"bg-secondary\"\n          if(el.types[0] == \"vanity\") {\n            bgColor = \"bg-info\"\n          } else if(el.types[0] == \"clothing\") {\n            bgColor = \"bg-primary\"\n          } else if(el.types[0] == \"ship\" || el.types[0] == \"ship_decorations\" || el.types[0] == \"ship_trinkets\") {\n            bgColor = \"bg-warning text-black\"\n          } else if(el.types[0] == \"armory\") {\n            bgColor = \"bg-danger text-black\"\n          } else if(el.types[0] == \"pets\") {\n            bgColor = \"bg-success text-black\"\n          }\n\n          $(\"<span>\")\n            .addClass(`badge ${bgColor} badge-pill d-none d-lg-block`)\n            .text(`${el.types.slice(-1)}`)\n            .appendTo(l)\n        })\n      } else {\n        this.c_empty.removeClass(\"d-none\")\n      }\n    })\n  }\n}\n\nexport { EntitlementSearch }\n", "import * as AppOS from \"../appos/appos\"\nimport {TrigramIndex} from \"../appos/lib/trigram_index\"\nimport {EntitlementMapper} from \"./entitlement_mapper\"\n\nclass AchievementMapper extends EntitlementMapper {\n  buildIndex() {\n    return new TrigramIndex(this.items.map((el, i) => [el[0], i]))\n  }\n}\n\nclass PagesMapper extends EntitlementMapper {\n  buildIndex() {\n    return new TrigramIndex(this.items.map((el, i) => [el.name, i]))\n  }\n\n  itemClass(base) {\n    return class extends base {\n      get pageUrl() {\n        let url = this.name.url\n        if(this.pvBase) url = url.replace(\"%profile%\", this.pvBase)\n        return url\n      }\n    }\n  }\n}\n\nclass GotoAnywhere {\n  static hookClicks(selector) {\n    $(document).on(\"click\", async ev => {\n      if(!$(ev.target).closest(`[data-role=\"searchContainer\"]`).length) {\n        $(selector).each((i, el) => {\n          $(el).data(\"gotoAnywhere\")?.hide?.()\n        })\n      }\n    })\n  }\n\n  constructor(app, ctn, mapper) {\n    this.app = app\n    this.ctn = ctn\n    this.container = $(\"#pv-main\")\n    this.mapperEnts = mapper\n    this.mapperAchievements = (this.app.__achievementMapper ||= new AchievementMapper(this.container.data(\"pvBase\") + \"/goto_anywhere?d=achievements\", { pvBase: this.container.data(\"pvBase\") }))\n    this.mapperPages = (this.app.__pagesMapper ||= new PagesMapper(this.container.data(\"pvBase\") + \"/goto_anywhere?d=pages\", { pvBase: this.container.data(\"pvBase\") }))\n    this.ctn.data(\"gotoAnywhere\", this)\n    this.moreResultsModifier = 0\n\n    this.b_toggle = this.container.find(`[data-action=\"gotoAnywhere\"]`)\n    this.i_query = this.ctn.find(`[data-role=\"query\"]`)\n    this.c_wrapper = this.ctn//.find(`[data-role=\"searchContainer\"]`)\n    this.c_empty = this.ctn.find(`[data-role=\"emptySet\"]`)\n    this.c_searching = this.ctn.find(`[data-role=\"searching\"]`)\n    this.c_noquery = this.ctn.find(`[data-role=\"emptyQuery\"]`)\n    this.c_results = this.ctn.find(`[data-role=\"results\"]`)\n    this.c_resultsPages = this.ctn.find(`[data-role=\"resultsPages\"]`)\n    this.c_resultsAchievements = this.ctn.find(`[data-role=\"resultsAchievements\"]`)\n    this.c_resultsEnts = this.ctn.find(`[data-role=\"resultsEnts\"]`)\n  }\n\n  hook() {\n    this.b_toggle.on(\"click\", ev => {\n      ev.preventDefault()\n      ev.stopPropagation()\n      this.b_toggle.blur()\n      this.toggle()\n      return false\n    })\n\n    this.i_query.on(\"keydown\", ev => {\n      if(ev.keyCode == 27) { // escape\n        this.hide()\n        return false\n      } else if(ev.keyCode == 9) { // tab\n        ev.preventDefault()\n        this.moreResultsModifier = Math.max(0, this.moreResultsModifier + (ev.shiftKey ? -1 : 1))\n        this.applySearch(true)\n        return false\n      } else if(ev.keyCode == 13) { // enter\n        this.confirmSelection(ev.shiftKey)\n        return false\n      } else if(ev.keyCode == 38) { // arrow up\n        this.selectPreviousResult(ev.shiftKey)\n        return false\n      } else if(ev.keyCode == 40) { // arrow down\n        this.selectNextResult(ev.shiftKey)\n        return false\n      }// else { console.log(ev.keyCode, ev.code) }\n\n      clearTimeout(this.searchTimeout)\n      this.searchTimeout = window.setTimeout(_ => {\n        if(this.open) this.applySearch()\n      }, 150)\n    })\n\n    const triggerBind = this.container.data(\"kbBind-GotoAnywhere\")\n    if(triggerBind) {\n      this.app.input?.hotkeyThisPage(triggerBind, { global: true }, ev => {\n        ev.preventDefault()\n        this.toggle()\n      })\n    }\n  }\n\n  get open() {\n    return !this.c_wrapper.hasClass(\"d-none\")\n  }\n\n  get selected() {\n    return this.c_results.find(`.active`)\n  }\n\n  toggle() {\n    return this.open ? this.hide() : this.show()\n  }\n\n  show() {\n    this.c_wrapper.removeClass(\"d-none\")\n    this.c_noquery.removeClass(\"d-none\")\n    this.i_query.focus()\n  }\n\n  hide() {\n    delete this.lastQuery\n    this.moreResultsModifier = 0\n    this.clearResults()\n    this.i_query.val(\"\")\n    this.c_wrapper.addClass(\"d-none\")\n    this.c_searching.addClass(\"d-none\")\n    this.c_results.addClass(\"d-none\")\n  }\n\n  clearResults(clearFor = \"results\") {\n    this[`c_${clearFor}`].find(`[data-role=\"result\"]`).remove()\n    this.c_noquery.toggleClass(\"d-none\", !!this.i_query.val())\n    this.c_empty.addClass(\"d-none\")\n  }\n\n  confirmSelection(popup = false) {\n    const target = this.selected.attr(\"href\")\n    if(!target) {\n      return false\n    } else if(target.startsWith(\"jsproc:\")) {\n      const exps = new Map()\n      exps.set(\"gaRef\", this)\n      exps.set(\"gaHide\", _ => this.hide())\n      exps.set(\"popup\", popup)\n      return (new Function(\"env\", ...exps.keys(), target.slice(7)))(exps, ...exps.values())\n    } else {\n      if(this.selected.attr(\"target\") == \"_blank\" ? !popup : popup) {\n        window.open(target, \"_blank\", this.selected.data(\"popopts\") || \"noopener,noreferrer\")\n        this.hide()\n      } else {\n        this.hide()\n        AppOS.Util.visitPage(target)\n      }\n    }\n  }\n\n  selectPreviousResult(selectFirst = false) {\n    const current = this.selected\n    if(current.prevAll(`[data-role=\"result\"]`).length) {\n      current.removeClass(\"active\")\n      if(selectFirst) {\n        current.siblings(`[data-role=\"result\"]:first`).addClass(\"active\")\n      } else {\n        current.prevAll(`[data-role=\"result\"]`).first().addClass(\"active\")\n      }\n    } else {\n      const fuckyoujs = current.parent().prevAll(`[data-is=\"resultSet\"]:not(\".d-none\")`).first().find(`[data-role=\"result\"]:last`)\n      if(fuckyoujs.length) {\n        current.removeClass(\"active\")\n        fuckyoujs.addClass(\"active\")\n      }\n    }\n  }\n\n  selectNextResult(selectLast = false) {\n    const current = this.selected\n    if(current.nextAll(`[data-role=\"result\"]`).length) {\n      current.removeClass(\"active\")\n      if(selectLast) {\n        current.siblings(`[data-role=\"result\"]:last`).addClass(\"active\")\n      } else {\n        current.nextAll(`[data-role=\"result\"]`).first().addClass(\"active\")\n      }\n    } else {\n      const fuckyoujs = current.parent().nextAll(`[data-is=\"resultSet\"]:not(\".d-none\")`).first().find(`[data-role=\"result\"]:first`)\n      if(fuckyoujs.length) {\n        current.removeClass(\"active\")\n        fuckyoujs.addClass(\"active\")\n      }\n    }\n  }\n\n  searchEntitlements(query, maxResults = 6, thresholdRatio = 4) {\n    maxResults += this.moreResultsModifier\n\n    return new Promise((resolve, reject) => { this.mapperEnts.do(map => {\n      let results = []\n      if(query.startsWith(\"%%rand%%\")) {\n        results = map.rand(5)\n      } else {\n        results = map.find(query, maxResults * 3).filter((a) => a.matches > query.length / thresholdRatio).slice(0, maxResults)\n      }\n      this.clearResults(\"resultsEnts\")\n      if(results.length) results.forEach((el, i) => {\n        // console.log(\"ent\", el)\n        const l = $(\"<a>\")\n          .addClass(\"list-group-item list-group-item-action d-flex justify-content-between align-items-center text-nowrap\")\n          .attr(\"href\", el.profileUrl + `#jump=${encodeURIComponent(el.name).replace(/'/g, \"%27\")}&forceJumpOnce=true`)\n          .attr(\"data-role\", \"result\")\n          .appendTo(this.c_resultsEnts)\n\n        const nameCtn = $(`<span class=\"position-relative\">`).appendTo(l)\n\n        // popup icon\n        $(\"<span>\")\n          .addClass(\"position-absolute\")\n          .html(`<i class=\"bi bi-box-arrow-up-right text-warning kb-mod-shift-visible\" title=\"opens in new tab\"></i>`)\n          .appendTo(nameCtn)\n\n        // name\n        $(\"<span>\").addClass(\"ms-4\").text(el.name).appendTo(nameCtn)\n\n        // badge\n        let bgColor = \"bg-secondary\"\n        if(el.types[0] == \"vanity\") {\n          bgColor = \"bg-info\"\n        } else if(el.types[0] == \"clothing\") {\n          bgColor = \"bg-primary\"\n        } else if(el.types[0] == \"ship\" || el.types[0] == \"ship_decorations\" || el.types[0] == \"ship_trinkets\") {\n          bgColor = \"bg-warning text-black\"\n        } else if(el.types[0] == \"armory\") {\n          bgColor = \"bg-danger text-black\"\n        } else if(el.types[0] == \"pets\") {\n          bgColor = \"bg-success text-black\"\n        }\n\n        $(\"<span>\")\n          .addClass(`badge ${bgColor} badge-pill d-none d-lg-block`)\n          .text(`${el.types.slice(-1)}`)\n          .appendTo(l)\n      })\n      resolve(results)\n    })})\n  }\n\n  searchPages(query, maxResults = 5, thresholdRatio = 3) {\n    maxResults += this.moreResultsModifier\n\n    return new Promise((resolve, reject) => { this.mapperPages.do(map => {\n      let results = []\n      if(query.startsWith(\"%%rand%%\")) {\n        results = map.rand(5)\n      } else {\n        results = map.find(query, maxResults * 3).filter((a) => a.matches > query.length / thresholdRatio).slice(0, maxResults)\n      }\n      this.clearResults(\"resultsPages\")\n      this.c_resultsPages.removeClass(\"d-none\")\n      if(results.length) results.forEach((el, i) => {\n        // console.log(\"pag\", el)\n        const l = $(\"<a>\")\n          .addClass(\"list-group-item list-group-item-action d-flex justify-content-between align-items-center text-nowrap\")\n          .attr(\"href\", el.pageUrl)\n          .attr(\"data-role\", \"result\")\n          .appendTo(this.c_resultsPages)\n        if(el.name.popup) l.attr(\"target\", \"_blank\")\n        if(el.name.popopts) l.attr(\"data-popopts\", el.name.popopts)\n\n        const nameCtn = $(`<span class=\"position-relative\">`).appendTo(l)\n\n        // popup icon\n        if(el.name.popup) {\n          $(\"<span>\")\n            .addClass(\"position-absolute\")\n            .html(`<i class=\"bi bi-box-arrow-up-right text-warning kb-mod-shift-hidden\" title=\"opens in new tab\"></i>`)\n            .appendTo(nameCtn)\n        } else {\n          $(\"<span>\")\n            .addClass(\"position-absolute\")\n            .html(`<i class=\"bi bi-box-arrow-up-right text-warning kb-mod-shift-visible\" title=\"opens in new tab\"></i>`)\n            .appendTo(nameCtn)\n        }\n\n        // name\n        $(\"<span>\").addClass(\"ms-4\").text(el.name.name).appendTo(nameCtn)\n\n        // desc\n        if(el.name.desc) {\n          $(\"<span>\").addClass(\"text-muted text-smaller text-truncate ms-2\").text(el.name.desc).appendTo(nameCtn)\n        }\n      })\n      else this.c_resultsPages.addClass(\"d-none\")\n      resolve(results)\n    })})\n  }\n\n  searchAchievements(query, maxResults = 6, thresholdRatio = 4) {\n    maxResults += this.moreResultsModifier\n\n    return new Promise((resolve, reject) => { this.mapperAchievements.do(map => {\n      let results = []\n      if(query.startsWith(\"%%rand%%\")) {\n        results = map.rand(5)\n      } else {\n        results = map.find(query, maxResults * 3).filter((a) => a.matches > query.length / thresholdRatio).slice(0, maxResults)\n      }\n      this.clearResults(\"resultsAchievements\")\n      this.c_resultsAchievements.removeClass(\"d-none\")\n      if(results.length) results.forEach((el, i) => {\n        const l = $(\"<a>\")\n          .addClass(\"list-group-item list-group-item-action d-flex justify-content-between align-items-center text-nowrap\")\n          // .attr(\"href\", el.pageUrl)\n          .attr(\"href\", el.profileUrl + `#jump=${encodeURIComponent(el.name[0]).replace(/'/g, \"%27\")}&forceJumpOnce=true`)\n          .attr(\"data-role\", \"result\")\n          .appendTo(this.c_resultsAchievements)\n\n        const nameCtn = $(\"<span>\").addClass(\"position-relative d-flex mw-100 align-items-baseline\").css({ minWidth: 0 }).appendTo(l)\n\n        // name\n        $(\"<span>\").addClass(\"ms-4\").text(el.name[0]).appendTo(nameCtn)\n\n        // popup icon\n        $(\"<span>\")\n          .addClass(\"position-absolute\")\n          .html(`<i class=\"bi bi-box-arrow-up-right text-warning kb-mod-shift-visible\" title=\"opens in new tab\"></i>`)\n          .appendTo(nameCtn)\n\n        // description\n        if(el.name[1]) {\n          $(\"<span>\").addClass(\"text-muted text-smaller text-truncate ms-2\").text(el.name[1]).appendTo(nameCtn)\n        }\n\n        // badge\n        let bgColor = {\n          BilgeRats: \"--bilgerat-color\",\n          AthenasFortune: \"--athena-color\",\n          ReapersBones: \"--reaper-color\",\n          GoldHoarders: \"--hoarder-color\",\n          MerchantAlliance: \"--merchant-color\",\n          OrderOfSouls: \"--souls-color\",\n          HuntersCall: \"--hunter-color\",\n          PirateLord: \"--guardian-color\",\n          Flameheart: \"--servant-color\",\n          TallTales: \"--talltale-color\",\n          Achievement: \"--achievement-color\",\n        }[el.types[1]] || \"--bs-secondary\"\n        // if(bgColor == \"--bs-secondary\") console.log(\"type?\", el.types[1], bgColor)\n\n        $(\"<span>\")\n          .addClass(`badge badge-pill d-none d-lg-block`)\n          .css({ background: `var(${bgColor})`, color: `var(${bgColor}-contrast)` })\n          .text(`${el.types[2]}`)\n          .appendTo(l)\n      })\n      else this.c_resultsAchievements.addClass(\"d-none\")\n      resolve(results)\n    })})\n  }\n\n  async applySearch(force = false) {\n    const query = this.i_query.val()\n    if(!force && query == this.lastQuery) {\n      // probably meta key or rapid undo\n      return\n    }\n    this.lastQuery = query\n\n    if(!query) {\n      this.c_searching.addClass(\"d-none\")\n      this.c_results.addClass(\"d-none\")\n      this.clearResults()\n      return\n    }\n    this.c_searching.removeClass(\"d-none\")\n    this.c_noquery.addClass(\"d-none\")\n    this.c_empty.addClass(\"d-none\")\n    this.c_results.removeClass(\"d-none\")\n\n    let resultCount = 0\n\n    Promise.all([\n      this.searchPages(query).then(r => { resultCount += r.length }),\n      this.searchAchievements(query).then(r => { resultCount += r.length }),\n      this.searchEntitlements(query).then(r => { resultCount += r.length }),\n    ]).then(_ => {\n      this.c_searching.addClass(\"d-none\")\n      if(resultCount > 0) {\n        this.c_results.find(`[data-role=\"result\"]`).first().addClass(\"active\")\n        this.c_empty.addClass(\"d-none\")\n        this.c_results.removeClass(\"d-none\")\n      } else {\n        this.c_results.addClass(\"d-none\")\n        this.c_empty.removeClass(\"d-none\")\n      }\n    })\n  }\n}\n\nexport { GotoAnywhere }\n", "import * as AppOS from \"../appos\"\n\nexport class Modal {\n  static DEFAULT_EVENTS = [\n    \"hide\",\n    \"hidden\",\n    \"show\",\n    \"shown\",\n    \"destroy\",\n  ]\n\n  evlist() {\n    return this.constructor.DEFAULT_EVENTS\n  }\n\n  constructor(opts = {}) {\n    const evlist = this.evlist()\n\n    AppOS.SimpleEvents.applyOn(this, evlist, opts)\n    evlist.forEach(efn => {\n      const capitalized = `on${efn[0].toUpperCase()}${efn.slice(1)}`\n      if(typeof this[capitalized] == \"function\") this.on(efn, this[capitalized].bind(this))\n    })\n\n    this.dom = this.createDom()\n    this.setupDom()\n\n    this.size = opts.size ?? false\n    this.title = opts.title ?? \"Modal\"\n    this.fade = opts.fade ?? true\n\n    this.init(opts)\n  }\n\n  init(opts) {}\n\n  destroy() {\n    this.destroyed = true\n    this.modal?.dispose()\n    this.dom?.remove()\n    this.fire(\"destroy\", this)\n  }\n\n  get modal() { return bootstrap.Modal.getOrCreateInstance(this.dom) }\n\n  set size(v) {\n    this.dom_dialog.classList.remove(\"modal-sm\", \"modal-lg\", \"modal-xl\")\n    if(v) this.dom_dialog.classList.add(`modal-${v}`)\n  }\n\n  set title(v) {\n    if(!this.dom_title) return false\n    this.dom_title.innerHTML = v\n  }\n\n  set titleText(v) {\n    if(!this.dom_title) return false\n    this.dom_title.innerText = v\n  }\n\n  set fade(v) {\n    this.dom.classList.toggle(\"fade\", v)\n  }\n\n  set backdrop(v) {\n    if(v == \"static\") {\n      this.dom.setAttribute(\"data-bs-backdrop\", \"static\")\n    } else if(v) {\n      this.dom.removeAttribute(\"data-bs-backdrop\")\n    } else {\n      this.dom.setAttribute(\"data-bs-backdrop\", \"false\")\n    }\n  }\n\n  singleUse() {\n    this.on(\"hidden\", _ => this.destroy())\n    return this\n  }\n\n  show() {\n    this.modal.show()\n    return this\n  }\n\n  hide() {\n    this.modal.hide()\n    return this\n  }\n\n  createDom() {\n    const div = document.createElement(\"div\")\n    div.classList.add(\"modal\")\n\n    div.innerHTML = this.domContainer()\n\n    return div\n  }\n\n  setupDom() {\n    this.dom_dialog = this.dom.querySelector(\".modal-dialog\")\n    this.dom_content = this.dom.querySelector(\".modal-content\")\n    this.dom_header = this.dom.querySelector(\".modal-header\")\n    this.dom_title = this.dom.querySelector(\".modal-title\")\n    this.dom_body = this.dom.querySelector(\".modal-body\")\n    this.dom_footer = this.dom.querySelector(\".modal-footer\")\n    this.dom.addEventListener(\"hide.bs.modal\", ev => this.fire(\"hide\", this, ev))\n    this.dom.addEventListener(\"hidden.bs.modal\", ev => this.fire(\"hidden\", this, ev))\n    this.dom.addEventListener(\"show.bs.modal\", ev => this.fire(\"show\", this, ev))\n    this.dom.addEventListener(\"shown.bs.modal\", ev => this.fire(\"shown\", this, ev))\n  }\n\n  domContainer() {\n    return `\n      <div class=\"modal-dialog${this.size ? ` modal-${this.size}` : \"\"}\">\n        <div class=\"modal-content\">${this.domContent()}</div>\n      </div>\n    `\n  }\n\n  domContent() {\n    return `\n      ${this.domHeader()}\n      ${this.domBody()}\n      ${this.domFooter()}\n    `\n  }\n\n  domHeader() {\n    return `<div class=\"modal-header\">${this.headerContent()}</div>`\n  }\n\n  headerContent() {\n    return `\n      <h5 class=\"modal-title\"></h5>\n      <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n    `\n  }\n\n  domBody() {\n    return ` <div class=\"modal-body\">${this.bodyContent()}</div> `\n  }\n\n  bodyContent() { return `` }\n\n  domFooter() {\n    return `<div class=\"modal-footer\">${this.footerContent()}</div>`\n  }\n\n  footerContent() {\n    return `\n      <div class=\"d-flex gap-2 justify-content-between flex-grow-1\">\n        <div>${this.footerLeftContent()}</div>\n        <div>${this.footerRightContent()}</div>\n      </div>\n    `\n  }\n\n  footerLeftContent() {\n    return ``\n  }\n\n  footerRightContent() {\n    return this.btnClose()\n  }\n\n  // ------------\n\n  btnClose(opts = {}) {\n    opts.btn ??= \"secondary\"\n    opts.label ??= \"Close\"\n    return `\n      <button type=\"button\" class=\"btn btn-${opts.btn}\" data-bs-dismiss=\"modal\">${opts.label}</button>\n    `\n  }\n\n  btnSubmit(opts = {}) {\n    opts.btn ??= \"primary\"\n    opts.value ??= \"submit\"\n    opts.label ??= \"Save changes\"\n    return `\n      <button type=\"submit\" class=\"btn btn-${opts.btn}\" value=\"${opts.value}\">${opts.label}</button>\n    `\n  }\n}\n\nexport class FormModal extends Modal {\n  evlist() {\n    return super.evlist().concat([\"submit\"])\n  }\n\n  domContent() {\n    return `<form action=\"\" class=\"modal-form\">${super.domContent()}</form>`\n  }\n\n  setupDom(dom = this.dom) {\n    super.setupDom(dom)\n    this.dom_form = dom.querySelector(\"form.modal-form\")\n    this.dom_form.addEventListener(\"submit\", ev => this.fire(\"submit\", this, ev))\n  }\n\n  footerRightContent() {\n    return super.footerRightContent() + this.btnSubmit()\n  }\n}\n\nexport class YesNoModal extends FormModal {\n  init(opts = {}) {\n    super.init(opts)\n    this.on(\"submit\", (m, ev) => {\n      ev.preventDefault()\n\n      if(ev.submitter.value == \"yes\") {\n        this.fire(\"yes\", this, ev)\n        this.hide()\n      } else if (ev.submitter.value == \"no\") {\n        this.fire(\"no\", this, ev)\n        this.hide()\n      } else {\n        this.hide()\n      }\n    })\n  }\n\n  evlist() {\n    return super.evlist().concat([\"no\", \"yes\"])\n  }\n\n  btnNo(opts = {}) {\n    opts.btn ??= \"danger\"\n    opts.label ??= \"No\"\n    opts.value ??= \"no\"\n    return super.btnSubmit(opts)\n  }\n\n  btnYes(opts = {}) {\n    opts.btn ??= \"success\"\n    opts.label ??= \"Yes\"\n    opts.value ??= \"yes\"\n    return super.btnSubmit(opts)\n  }\n\n  footerRightContent() {\n    return this.btnNo() + this.btnYes()\n  }\n}\n\nexport class EditModal extends FormModal {}\n", "import * as AppOS from \"../appos/appos\"\nimport { YesNoModal } from \"../appos/bootstrap5/modal\"\n\nconst DEV = false\n\nexport class GraphAnything {\n  constructor(app, el, opts = {}) {\n    this.app = app\n    this.el = el\n    this.opts = opts\n    this.fmt = new Intl.NumberFormat('en-US')\n\n    this.lastFetch = Date.now()\n    this.fetchEvery = 3000\n  }\n\n  setStatus(msg, spinner, textColor, sIcon) {\n    this.v_status.html(msg)\n    this.v_status.removeClass((i, c) => (c.match(/(^|\\s)text-\\S+/g) || []).join(' '))\n    if(textColor) this.v_status.addClass(\"text-\" + textColor)\n    if(spinner) this.setSpinner(spinner, sIcon)\n    return this\n  }\n\n  setSpinner(color, sIcon) {\n    this.v_spinner.removeClass(\"animation-paused\")\n    this.v_spinner.removeClass((i, c) => (c.match(/(^|\\s)text-\\S+/g) || []).join(' '))\n    this.v_spinner.addClass(\"text-\" + color)\n    if(sIcon) {\n      this.v_spinner.replaceWith($(`<i class=\"bi bi-${sIcon}\"></i>`))\n    }\n  }\n\n  showData() {\n    if(this.shown) return\n    this.shown = true\n    this.setupGraph()\n    this.v_data.fadeIn(1000, _ => { this.shownReady = true })\n  }\n\n  fetchUpdates(jid, jri) {\n    if(jid != null) {\n      this.job_id = jid\n      this.job_mc = 0\n      this.job_buf = []\n      this.job_started = false\n      this.job_done = false\n      this.job_failed = false\n      if(jri != null) this.job_ri = jri\n      if(!this.shown) this.showData()\n    }\n\n    fetch(this.el.data(\"gatFetch\") + '?' + new URLSearchParams({\n      j: this.job_id,\n      jri: this.job_ri,\n    }), this.postOpts()).then(r => r.json()).then(json => {\n      json.res.forEach(row => {\n        this.job_ri++\n\n        if(row == \"%JOB_STARTED%\") {\n          // console.log(\"job started\")\n          this.job_started = true\n          this.setStatus(\"job started, waiting for data...\", \"warning\", \"info\")\n        } else if (row == \"%JOB_FAILED%\") {\n          // console.log(\"job failed\")\n          this.job_failed = true\n          this.setStatus(\"job failed :( sorry, try again later\", \"danger\", \"danger\", \"x-lg text-danger\")\n        } else if (row == \"%JOB_DONE%\") {\n          this.job_done = true\n        } else if (Array.isArray(row) && row[0] == \"limit_reached\") {\n          this.limit_reached = {\n            limit: row[1],\n            processed: row[2],\n            remaining: row[3],\n            sid: row[4],\n          }\n          this.job_buf.push(row)\n        } else if (Array.isArray(row) && row[0] == \"prog\") {\n          // console.log(\"progress\", row)\n          // this.job_mc = parseFloat(row[1])\n          this.job_mt = parseFloat(row[2])\n          this.setStatus(`processing... ${this.job_mc}/${this.job_mt}`, \"warning\", \"warning\")\n        } else {\n          // console.log(\"row\", row)\n          this.job_buf.push(row)\n        }\n      })\n      this.lastFetch = Date.now()\n      this.bufferOff()\n      // this.v_table.html(JSON.stringify(json.res))\n      if(!this.job_done && !this.job_failed) setTimeout(_ => { this.fetchUpdates() }, this.fetchEvery)\n    }).catch(err => {\n      this.setStatus(\"failed to gather data :( sorry, try again later\", \"danger\", \"danger\", \"x-lg text-danger\")\n      console.error(err)\n    })\n  }\n\n  continueModal() {\n    return new ContinueModal({ ga: this })\n      .show()\n      .on(\"hidden\", m => {\n        if(m.result == \"yesAll\") {\n          this.continueJob(true)\n        } else if (m.result == \"yes\") {\n          this.continueJob()\n        } else {\n          this.finalizeJob()\n        }\n      })\n  }\n\n  continueJob(all = false) {\n    if(!this.limit_reached) return false\n    const lr = this.limit_reached\n    this.limit_reached = false\n\n    const eopts = { continueAt: lr.sid }\n    if(all) eopts.limit = 0\n\n    this.job_done = false\n    this.enqueue(eopts)\n  }\n\n  finalizeJob() {\n    this.limit_reached = false\n    this.job_buf.push([\"noop\"])\n    this.bufferOff()\n    this.enqueue({ cancel: true })\n  }\n\n  bufferOff(internal = false) {\n    if(this.job_bufoff_timer && !internal) {\n      console.log(\"already in loop\")\n      return\n    }\n    let continueBuffering = this.job_buf.length\n\n    while(continueBuffering && this.job_buf.length) {\n      const item = this.job_buf.shift()\n      if (item[0] == \"limit_reached\") {\n        this.setStatus(`PAUSED ${this.job_mc}/${this.job_mt}`, \"warning\", \"warning\")\n        this.continueModal()\n      } else if (item[0] == \"row\") {\n        this.job_mc++\n        this.addRowToGraph(item[1])\n        this.addRowToTable(item[1])\n        continueBuffering = false\n      }\n\n      if(!this.job_failed) {\n        if (this.job_mc >= this.job_mt || (!this.job_buf.length && this.job_done && !this.limit_reached)) {\n          this.setStatus(\"job done :)\", \"success animation-paused\", \"success\", \"check-lg text-success\")\n          this.enableChartZoom()\n          this.setChartMarkers()\n        } else if (!this.limit_reached?.updateBlock) {\n          this.setStatus(`processing... ${this.job_mc}/${this.job_mt}`, \"warning\", \"warning\")\n        }\n      }\n    }\n\n    // reschedule\n    if(!this.job_buf.length) {\n      delete this.job_bufoff_timer\n      return\n    }\n\n    const tdelta = this.fetchEvery - (Date.now() - this.lastFetch)\n    let timeout = 10\n    if (tdelta > 10) {\n      timeout = Math.max(10, parseInt(tdelta / this.job_buf.length))\n    }\n\n    if(this.job_buf.length > 10)  this.timer = Math.max(this.timer - (this.job_buf.length), 10)\n    if(this.job_buf.length <= 10) this.timer = Math.min(this.timer + (this.job_buf.length), 500)\n    // console.log(\"wait\", timeout, this.job_buf.length, tdelta)\n    // let nextTimer = 300\n    // nextTimer -= this.job_buf.length * 10\n    // nextTimer = Math.max(20, nextTimer)\n    // console.log(\"wait\", nextTimer)\n    // if(this.job_buf.length > 100) nextTimer = 10\n    // if(this.job_buf.length > 10) nextTimer = 100\n    this.job_bufoff_timer = setTimeout(_ => { this.bufferOff(true) }, timeout)\n  }\n\n  postOpts() {\n    return {\n      method: \"POST\",\n      headers: {\n        \"X-CSRF-Token\": document.head.querySelector(\"meta[name=csrf-token]\")?.content,\n        Accept: \"application/json\",\n      },\n    }\n  }\n\n  enqueue(opts = {}) {\n    opts.limit ??= null\n    opts.continueAt ??= null\n\n    const urlparams = {\n      k: this.el.data(\"gatKeys\"),\n      e: 1,\n    }\n\n    if(opts.limit != null) {\n      urlparams.limit = opts.limit\n    }\n\n    if(opts.continueAt != null) {\n      urlparams.lsi = opts.continueAt\n      urlparams.j = this.job_id\n      urlparams.e = 2\n    }\n\n    if(opts.cancel) {\n      urlparams.j = this.job_id\n      urlparams.e = 666\n    } else {\n      this.setStatus(\"enqueuing job, please wait...\", \"info\", \"info\")\n    }\n\n    fetch(this.el.data(\"gatFetch\") + '?' + new URLSearchParams(urlparams), this.postOpts()).then(r => r.json()).then(json => {\n      if(json.jid) {\n        if(json.stopped) return false\n        // console.log(\"got job \" + json.jid)\n        this.setStatus(\"job enqueued, waiting for response...\", \"info\", \"info\")\n        if(json.jid == this.job_id) {\n          this.fetchUpdates()\n        } else {\n          this.fetchUpdates(json.jid, 0)\n\n          // update URL\n          const loc = URL.parse(location.href)\n          loc.searchParams.set(\"j\", json.jid)\n          window.history.replaceState(null, \"\", loc.href)\n\n          // update share links\n          document.querySelectorAll(`[data-target=\"pv-pageShareLink\"]`).forEach(el => {\n            const url = URL.parse(el.href)\n            url.searchParams.set(\"j\", json.jid)\n            el.href = url.href\n          })\n        }\n      } else {\n        this.setStatus(\"failed to enqueue job :( sorry, try again later\", \"danger\", \"danger\", \"x-lg text-danger\")\n      }\n    }).catch(err => {\n      this.setStatus(\"failed to enqueue job :( sorry, try again later\", \"danger\", \"danger\", \"x-lg text-danger\")\n      console.error(err)\n    })\n  }\n\n  hook() {\n    if (\"Chartkick\" in window) {\n      this.chartClass = window.Chartkick\n      this.hookRaw()\n    } else {\n      this.app.componentLoader.load(\"charts\").then(([c, exps]) => {\n        this.chartClass = exps.get(\"Chart\")\n        this.hookRaw()\n      })\n    }\n  }\n\n  hookRaw() {\n    this.v_loading = this.find(`[data-view=\"loading\"]`)\n    this.v_spinner = this.find(`[data-view=\"loading-spinner\"]`)\n    this.v_status = this.find(`[data-view=\"status\"]`)\n    this.v_zoomDisabled = this.find(`[data-view=\"zoomDisabled\"]`)\n    this.v_zoomEnabled = this.find(`[data-view=\"zoomEnabled\"]`)\n    this.v_data = this.find(`[data-view=\"data\"]`)\n    this.v_graph = this.find(`[data-view=\"graph\"]`)\n    this.v_table = this.find(`[data-view=\"table\"]`)\n    this.c_graph = this.v_graph.find(`canvas[data-graph]`)\n    this.c_tbody = this.v_table.find(`table tbody`)\n    this.b_resetZoom = this.find(`[data-action=\"resetGraphZoom\"]`)\n    this.b_removeConsecutives = this.find(`[data-action=\"removeConsecutiveValues\"]`)\n\n    this.b_resetZoom.click(ev => {\n      this.chart.resetZoom()\n      ev.currentTarget.blur()\n      ev.preventDefault()\n      return false\n    })\n\n    this.b_removeConsecutives.click(ev => {\n      this.removeConsecutiveValues()\n      ev.currentTarget.remove()\n      ev.preventDefault()\n      return false\n    })\n\n    if(this.el.data(\"gatJid\")) {\n      this.fetchUpdates(this.el.data(\"gatJid\"), 0)\n    } else {\n      this.enqueue()\n    }\n\n    // this.el.on(\"click\", `[data-option]`, ev => {\n    //   this.toggleOpt($(ev.currentTarget).blur())\n    //   ev.stopImmediatePropagation()\n    //   ev.preventDefault()\n    // })\n\n    // this.find(\"turbo-frame\").on(\"turbo:fetch-request-error\", ev => { this.ls.errorOccured(ev) })\n\n    // this.ls.setup()\n\n    return this\n  }\n\n  find(selector) { return this.el.find(selector) }\n\n\n  // ===============\n  // = Graph/Table =\n  // ===============\n\n  addRowToTable(row) {\n    Object.entries(row).forEach(([key, value]) => {\n      const tr = $(\"<tr>\").attr(\"data-gold\", value[0])\n      $(\"<td>\").addClass(\"text-end\").text(value[2]).appendTo(tr) // snap id\n      $(\"<td>\").addClass(\"text-nowrap\").append(\n        $(\"<span>\").addClass(\"local-time\").html(new Date(Date.parse(value[1])).toLocaleString({}, { timeZoneName: \"short\" })).attr(\"title\", value[1])\n      ).appendTo(tr) // date\n      $(\"<td>\").text(key).appendTo(tr) // value (name)\n      $(\"<td>\").addClass(\"text-nowrap text-end\").text(this.fmt.format(value[0])).attr(\"data-sotpf-bdiff\", \"gold\").appendTo(tr) // value\n      this.c_tbody.append(tr)\n\n      if(tr.prev().length) {\n        this.app.diffBalanceAb(tr.prev().get(0), tr.get(0))\n      }\n    })\n  }\n\n  setupGraph() {\n    const datasets = []\n\n    this.el.data(\"gatKeys\").split(\"|\").forEach(gkey => {\n      datasets.push({ label: gkey, data: [] })\n    })\n\n    this.chart = new this.chartClass(this.c_graph.get(0), {\n      type: 'line',\n      data: { datasets: datasets },\n      options: {\n        interaction: {\n          mode: \"nearest\",\n          axis: \"x\",\n          intersect: false,\n          position: \"nearest\",\n        },\n        scales: {\n          x: {\n            type: \"time\",\n            display: true,\n            time: { tooltipFormat: \"yyyy-MM-dd HH:mm X\" },\n          },\n          y: {\n            beginAtZero: true,\n          },\n        },\n        plugins: {\n          annotation: {\n            common: {\n              drawTime: 'beforeDatasetsDraw',\n            },\n            annotations: {\n          //     box1: {\n          //       type: 'box',\n          //       xMin: Date.parse(\"2024-02-24T11:00:00Z\"),\n          //       xMax: Date.parse(\"2024-02-26T11:00:00Z\"),\n          //       backgroundColor: 'rgba(255, 99, 132, 0.25)',\n          //       label: {\n          //         content: \"hi\",\n          //         display: true,\n          //       },\n          //     }\n            },\n          },\n          zoom: {\n            pan: {\n              enabled: true,\n              mode: \"x\",\n              onPanStart: () => { if(!this.chartHasLoaded) return false },\n            },\n            zoom: {\n              mode: \"x\",\n              // zoom options and/or events\n              drag: {\n                enabled: false,\n              },\n              wheel: {\n                enabled: false,\n              },\n            },\n            limits: {\n              x: {min: \"original\", max: \"original\"},\n              y: {min: \"original\", max: \"original\"},\n            },\n          },\n        }\n      },\n    })\n  }\n\n  removeConsecutiveValues() {\n    this.chart.data.datasets.forEach((dset, i) => {\n      const nd = []\n      dset.data.forEach(d => {\n        if (nd.length && nd[nd.length - 1].y == d.y) return\n        nd.push(d)\n      })\n      // dset.data.push({ x: value[1], y: value[0] })\n      dset.data = nd\n      this.updateChartMarkers()\n    })\n\n    this.c_tbody.find(\"tr\").each((i, el) => {\n      if(el.nextElementSibling && el.dataset.gold == el.nextElementSibling.dataset.gold) {\n        el.remove()\n      }\n    })\n  }\n\n  addRowToGraph(row) {\n    let index = 0\n    Object.entries(row).forEach(([key, value]) => {\n      // console.log(index, \"set\", key, \"v\", value[0], \"d\", value[1])\n      this.chart.data.datasets[index].data.push({ x: value[1], y: value[0] })\n      index++\n    })\n    if(index > 0) this.chart.update()\n  }\n\n  enableChartZoom() {\n    this.chartHasLoaded = true\n    this.chart.options.plugins.zoom.zoom.wheel.enabled = true\n    this.chart.update()\n    this.v_zoomDisabled.hide()\n    this.v_zoomEnabled.show()\n  }\n\n  setChartMarkers() {\n    const markers = this.el.data(\"gatMarkers\")\n    if(!markers) return\n\n    let d1 = null\n    let d2 = null\n\n    this.chart.data.datasets.forEach(dset => {\n      const fd = Date.parse(dset.data[0].x)\n      const sd = Date.parse(dset.data[dset.data.length - 1].x)\n\n      if (fd > sd) {\n        if(!d2 || fd > d2) d2 = fd\n        if(!d1 || sd < d1) d1 = sd\n      } else {\n        if(!d2 || sd > d2) d2 = sd\n        if(!d1 || fd < d1) d1 = fd\n      }\n    })\n\n    markers.forEach((marker, mi) => {\n      if(marker[0] == \"game_version\") {\n        const m_date = Date.parse(marker[2])\n        if(m_date < d1 || m_date > d2) {\n          console.log(\"out of bounds\", marker)\n          return\n        }\n\n        const anno = {\n          type: \"line\",\n          scaleID: \"x\",\n          borderWidth: 2,\n          value: m_date,\n        }\n\n        if(marker[1] == \"major\") {\n          anno.borderColor = 'rgba(255, 99, 99, 0.9)'\n        } else if (marker[1] == \"minor\") {\n          anno.borderColor = 'rgba(255, 200, 99, 0.9)'\n        } else if (marker[1] == \"patch\") {\n          anno.borderColor = 'rgba(99, 160, 99, 0.9)'\n        } else {\n          anno.borderColor = 'rgba(99, 99, 99, 0.9)'\n        }\n\n        const label = []\n\n        if(marker[3]) {\n          label.push(marker[3])\n        }\n\n        if(marker[4]) {\n          label.push(marker[4])\n        }\n\n        if(label.length) {\n          anno.label = {\n            display: (ctx) => ctx.hovered,\n            content: label.join(\"\\n\"),\n            drawTime: 'afterDatasetsDraw',\n            position: (ctx) => ctx.hoverPosition,\n          }\n          anno.label.color = anno.borderColor\n          anno.enter = (ctx, event) => {\n            ctx.hovered = true\n            ctx.hoverPosition = (event.y / ctx.chart.chartArea.height * 100) + '%'\n            ctx.chart.update()\n          }\n          anno.leave = (ctx, event) => {\n            ctx.hovered = false\n            ctx.chart.update()\n          }\n        }\n\n        this.chart.options.plugins.annotation.annotations[`marker_${mi}`] = anno\n        // [:game_version, :patch, Tue, 12 Dec 2023 14:43:50.000000000 UTC +00:00, \"2.9.2.1\", \"hotpatch\", {:game=>2, :major=>9, :minor=>2, :patch=>1}]\n        //  0              1       2                                               3          4            5\n      } else {\n        console.warning(\"unknown marker\", marker)\n      }\n    })\n\n    this.chart.update()\n  }\n\n  updateChartMarkers(updateChart = true) {\n    let d1, d2 = null\n    this.chart.data.datasets.forEach(dset => {\n      const fd = Date.parse(dset.data[0].x)\n      const sd = Date.parse(dset.data[dset.data.length - 1].x)\n\n      if (fd > sd) {\n        if(!d2 || fd > d2) d2 = fd\n        if(!d1 || sd < d1) d1 = sd\n      } else {\n        if(!d2 || sd > d2) d2 = sd\n        if(!d1 || fd < d1) d1 = fd\n      }\n    })\n\n    Object.entries(this.chart.options.plugins.annotation.annotations).forEach(([key, marker]) => {\n      if(marker.value < d1 || marker.value > d2) {\n        // console.log(\"out of bounds\", marker)\n        marker.display = false\n      }\n    })\n\n    if(updateChart) this.chart.update()\n  }\n}\n\nexport class ContinueModal extends YesNoModal {\n  init(opts = {}) {\n    super.init(opts)\n    this.singleUse()\n    this.ga = opts.ga\n    this.title = \"Continue processing?\"\n    this.dom_dialog.classList.add(\"pt-4\")\n    // this.size = \"lg\"\n    this.backdrop = \"static\"\n\n    this.result = \"no\"\n    this.setBodyContent()\n\n    this.on(\"submit\", (m, ev) => {\n      ev.preventDefault()\n      this.result = ev.submitter.value\n      this.hide()\n    })\n  }\n\n  setBodyContent() {\n    this.dom_body.innerHTML = `\n      We have processed\n      <strong>${JSON.stringify(this.ga.limit_reached)}</strong>\n    `\n  }\n\n  btnNo(opts = {}) {\n    opts.btn = \"success\"\n    opts.label = \"I'm good\"\n    return super.btnNo(opts)\n  }\n\n  btnYes(opts = {}) {\n    opts.btn = \"primary\"\n    opts.label = \"Continue\"\n    return super.btnYes(opts)\n  }\n\n  btnYesAll(opts = {}) {\n    opts.btn ??= \"outline-primary\"\n    opts.label ??= \"Continue all\"\n    opts.value ??= \"yesAll\"\n    return super.btnYes(opts)\n  }\n\n  footerLeftContent() {\n    return this.btnYes() + this.btnYesAll()\n  }\n\n  footerRightContent() {\n    return this.btnNo()\n  }\n}\n", "import * as AppOS from \"../appos/appos\"\n\nconst DEV = false\n\nclass TracerUI {\n  constructor(app, el, opts = {}) {\n    this.app = app\n    this.el = el\n    this.opts = opts\n    this.fmt = new Intl.NumberFormat('en-US')\n\n    this.lastFetch = Date.now()\n    this.fetchEvery = 3000\n  }\n\n  setStatus(msg, spinner, textColor, sIcon) {\n    this.v_status.html(msg)\n    this.v_status.removeClass((i, c) => (c.match(/(^|\\s)text-\\S+/g) || []).join(' '))\n    if(textColor) this.v_status.addClass(\"text-\" + textColor)\n    if(spinner) this.setSpinner(spinner, sIcon)\n    return this\n  }\n\n  setSpinner(color, sIcon) {\n    this.v_spinner.removeClass(\"animation-paused\")\n    this.v_spinner.removeClass((i, c) => (c.match(/(^|\\s)text-\\S+/g) || []).join(' '))\n    this.v_spinner.addClass(\"text-\" + color)\n    if(sIcon) {\n      this.v_spinner.replaceWith($(`<i class=\"bi bi-${sIcon}\"></i>`))\n    }\n  }\n\n  showData() {\n    if(this.shown) return\n    this.shown = true\n    this.v_data.fadeIn(1000, _ => { this.shownReady = true })\n  }\n\n  fetchUpdates(jid, jri) {\n    if(jid != null) {\n      this.job_id = jid\n      this.job_buf = []\n      this.job_started = false\n      this.job_done = false\n      this.job_failed = false\n      if(jri != null) this.job_ri = jri\n      if(!this.shown) this.showData()\n    }\n\n    fetch(this.el.data(\"tracerFetch\") + '?' + new URLSearchParams({\n      j: this.job_id,\n      jri: this.job_ri,\n    }), this.postOpts()).then(r => r.json()).then(json => {\n      json.res.forEach(row => {\n        this.job_ri++\n\n        if(row == \"%JOB_STARTED%\") {\n          // console.log(\"job started\")\n          this.job_started = true\n          this.setStatus(\"job started, waiting for data...\", \"warning\", \"info\")\n        } else if (row == \"%JOB_FAILED%\") {\n          // console.log(\"job failed\")\n          this.job_failed = true\n          this.setStatus(`job failed :( sorry, try again later`, \"danger\", \"danger\", \"x-lg me-1 text-danger\")\n        } else if (row == \"%JOB_DONE%\") {\n          // console.log(\"job done\")\n          this.job_done = true\n          // if (!this.job_failed) {\n          //   this.setStatus(\"job done :)\", \"success animation-paused\", \"success\", \"check-lg text-success\")\n          // }\n        } else if (Array.isArray(row) && row[0] == \"prog\") {\n          // console.log(\"progress\", row)\n          this.job_mc = parseFloat(row[1])\n          this.job_mt = parseFloat(row[2])\n          this.setStatus(`processing... ${this.job_mc}/${this.job_mt}`, \"warning\", \"warning\")\n        } else {\n          // console.log(\"row\", row)\n          this.job_buf.push(row)\n        }\n      })\n      this.lastFetch = Date.now()\n      this.bufferOff()\n      if(!this.job_done && !this.job_failed) setTimeout(_ => { this.fetchUpdates() }, this.fetchEvery)\n    }).catch(err => {\n      this.setStatus(\"failed to gather data :( sorry, try again later\", \"danger\", \"danger\", \"x-lg me-1 text-danger\")\n      console.error(err)\n    })\n  }\n\n  bufferOff(internal = false) {\n    if(this.job_bufoff_timer && !internal) {\n      console.log(\"already in loop\")\n      return\n    }\n    let continueBuffering = this.job_buf.length\n\n    while(continueBuffering && this.job_buf.length) {\n      const item = this.job_buf.shift()\n      if (item[0] == \"row\") {\n        Object.entries(item[1]).forEach(([event, evdata]) => {\n          const tr = $(\"<tr>\")\n          const ev_date = Date.parse(evdata[0])\n          const ev_snapid = evdata[1]\n          const ev_before = evdata[2]\n          const ev_after = evdata[3]\n\n          $(\"<td>\").addClass(\"text-end\").text(ev_snapid).appendTo(tr) // snap id\n          $(\"<td>\").addClass(\"text-nowrap\").append(\n            $(\"<span>\").addClass(\"local-time\").html(new Date(ev_date).toLocaleString({}, { timeZoneName: \"short\" })).attr(\"title\", ev_date)\n          ).appendTo(tr) // date\n          $(\"<td>\").addClass(\"text-end text-info fw-bold\").text(event).appendTo(tr) // snap id\n\n          const why = [ev_before, ev_after]\n          why.forEach(sub => {\n            const ul = $(\"<ul>\").addClass(\"mb-0 text-monospace\")\n            sub.forEach(el => {\n              $(\"<li>\").html(el).appendTo(ul)\n            })\n            $(\"<td>\").append(ul).appendTo(tr) // snap id\n          })\n\n\n          this.v_out.append(tr)\n        })\n        // if(Object.keys(item[1]).length) console.log(item[1])\n        // console.log(item[1])\n        this.job_mc++\n        // this.addRowToGraph(item[1])\n        // this.addRowToTable(item[1])\n        continueBuffering = false\n        if(!this.job_failed) {\n          if (this.job_mc >= this.job_mt || (!this.job_buf.length && this.job_done)) {\n            this.setStatus(`job done :) -- ${this.job_mc}/${this.job_mt} processed`, \"success animation-paused\", \"success\", \"check-lg text-success\")\n          } else {\n            this.setStatus(`processing... ${this.job_mc}/${this.job_mt}`, \"warning\", \"warning\")\n          }\n        }\n      } else if (item[0] == \"tparams\") {\n        const tr = $(\"<tr>\").addClass(\"text-smaller\")\n        $(\"<td>\").addClass(\"text-end text-muted\").appendTo(tr)\n        $(\"<td>\").addClass(\"text-nowrap text-muted\").append(\n          $(\"<span>\").addClass(\"local-time\").html(new Date().toLocaleString({}, { timeZoneName: \"short\" }))\n        ).appendTo(tr) // date\n        $(\"<td>\").addClass(\"text-end text-info fw-bold\").text(\"tparams\").appendTo(tr) // snap id\n\n        let json = JSON.stringify(item[1], null, 2).split(\"\\n\")\n        if(json[0] == \"{\") json.shift()\n        if(json[json.length - 1] == \"}\") json.pop()\n        json = json.map(l => {\n          let ll = l.slice(2)\n          if (ll.endsWith(\",\")) ll = ll.slice(0, -1)\n          return ll\n        }).join(\"\\n\")\n\n        $(\"<td>\").attr(\"colspan\", 2).append($(\"<pre>\").addClass(\"mb-0\").append($(\"<code>\").addClass(\"text-muted\").text(json))).appendTo(tr)\n        this.v_out.append(tr)\n      } else if (item[0] == \"error\") {\n        const tr = $(\"<tr>\").addClass(\"text-small\")\n        $(\"<td>\").addClass(\"text-end text-muted\").text(item[1]).appendTo(tr)\n        $(\"<td>\").addClass(\"text-nowrap text-muted\").append(\n          $(\"<span>\").addClass(\"local-time\").html(new Date(item[2]).toLocaleString({}, { timeZoneName: \"short\" }))\n        ).appendTo(tr) // date\n        $(\"<td>\").addClass(\"text-end text-danger fw-bold\").text(\"error\").appendTo(tr) // snap id\n        $(\"<td>\").addClass(\"text-danger\").attr(\"colspan\", 2).append(`${item[3]}: ${item[4]}`).appendTo(tr)\n        this.v_out.append(tr)\n      } else {\n        console.warn(\"what is this?\", item)\n      }\n    }\n\n    // reschedule\n    if(!this.job_buf.length) {\n      delete this.job_bufoff_timer\n      return\n    }\n\n    const tdelta = this.fetchEvery - (Date.now() - this.lastFetch)\n    let timeout = 10\n    if (tdelta > 10) {\n      timeout = Math.max(10, parseInt(tdelta / this.job_buf.length))\n    }\n    if (timeout == 10 && this.job_done) timeout = 1\n    this.job_bufoff_timer = setTimeout(_ => { this.bufferOff(true) }, timeout)\n  }\n\n  postOpts() {\n    return {\n      method: \"POST\",\n      headers: {\n        \"X-CSRF-Token\": document.head.querySelector(\"meta[name=csrf-token]\")?.content,\n        Accept: \"application/json\",\n      },\n    }\n  }\n\n  hook() {\n    this.v_loading = this.find(`[data-view=\"loading\"]`)\n    this.v_spinner = this.find(`[data-view=\"loading-spinner\"]`)\n    this.v_status = this.find(`[data-view=\"status\"]`)\n    this.v_data = this.find(`[data-view=\"data\"]`)\n    this.v_out = this.find(`[data-view=\"out\"]`)\n\n    this.fetchUpdates(this.el.data(\"tracerJid\"), 0)\n\n    return this\n  }\n\n  find(selector) { return this.el.find(selector) }\n}\n\nexport { TracerUI }\n", "import * as AppOS from \"../appos/appos\"\n\nconst DEV = false\n\nconst CURRENCIES = {\n  gold: 0,\n  doubloons: 1,\n  ancient_coins: 2,\n}\nconst DELAYS = {\n  loadingFadeIn: 1600,\n  hideOlivia: 4500,\n  hideOliviaIn: 800,\n  showOlivia: 200,\n  showOliviaIn: 800,\n\n  replaceBubbleOut: 600,\n  replaceBubbleWait: 200,\n  replaceBubbleIn: 600,\n}\n\nif(DEV) {\n  Object.entries(DELAYS).forEach(([key, value]) => {\n    DELAYS[key] = 10\n  })\n}\n\nclass LoadingScreen {\n  constructor(ui) {\n    this.ui = ui\n    this.screen = this.ui.find(`[data-role=\"loading_screen\"]`)\n    this.bubble = this.ui.find(`[data-role=\"bubble-text\"]`)\n    this.c_gold = this.ui.find(`[data-displays=\"goldTotal\"]`)\n    this.c_doubloon = this.ui.find(`[data-displays=\"doubloonTotal\"]`)\n    this.c_ancient = this.ui.find(`[data-displays=\"ancientTotal\"]`)\n    this.img = this.screen.find(\"img\")\n  }\n\n  setup() {\n    this.img.on(\"load\", _ => { this.imageLoaded() })\n    this.img.on(\"error\", _ => { this.imageLoaded() })\n    this.img.attr(\"src\", this.img.data(\"src\"))\n\n    return this\n  }\n\n  imageLoaded() {\n    this.screen.fadeIn({ duration: DELAYS.loadingFadeIn, easing: \"easeOutCubic\" })\n    this.ui.loadData()\n  }\n\n  replaceSpinner(currency, error = false) {\n    const spinner = currency.find(\".spinner-grow\")\n    return new Promise((resolve, reject) => {\n      const replaceWith = error ? `<i class=\"bi bi-exclamation-triangle text-danger\"></i>` : \"0\"\n      if(spinner.length) {\n        spinner.on(\"animationiteration\", _ => {\n          resolve(currency.css({ opacity: 0 }).html(replaceWith).fadeTo(600, 1).promise())\n        })\n      } else {\n        resolve(currency.html(replaceWith).promise())\n      }\n    })\n  }\n\n  dataLoaded(result, settings) {\n    if(this.viewportShown) return\n    this.viewportShown = true\n    $(document).trigger(\"appos:bs5:responsiveDetails:openDefault\")\n\n    const replacedSpinners = []\n\n    this.bubble\n      .fadeTo(DELAYS.replaceBubbleOut, 0, \"easeInOutCirc\").promise()\n      .then(el => {\n        el.html(`The beyond! I can see it! ...it's all numbers?!`)\n        replacedSpinners.push(this.replaceSpinner(this.c_gold))\n        replacedSpinners.push(this.replaceSpinner(this.c_doubloon))\n        replacedSpinners.push(this.replaceSpinner(this.c_ancient))\n        return el.delay(DELAYS.replaceBubbleWait).fadeTo(DELAYS.replaceBubbleIn, 1, \"easeInOutCirc\").promise()\n      })\n      .then(el => Promise.all(replacedSpinners))\n      .then(currencies => {\n        this.ui.find(`[data-role=\"viewport\"]`).show()\n\n        return Promise.all([\n          this.ui.countValueUp(currencies[0], result.all[0] + this.ui.balance[0] + this.ui.ships[0], 3000).promise(),\n          this.ui.countValueUp(currencies[1], result.all[1] + this.ui.balance[1] + this.ui.ships[1], 3500).promise(),\n          this.ui.countValueUp(currencies[2], result.all[2] + this.ui.balance[2] + this.ui.ships[2], 4000).promise(),\n\n          // fade out olivia\n          this.screen\n            .delay(DELAYS.hideOlivia)\n            .fadeOut(DELAYS.hideOliviaIn, \"easeInOutQuad\").promise()\n            .then(el => {\n              this.ui.fixTableWidths()\n              return this.ui.find(`[data-role=\"breakdown\"]`).delay(DELAYS.showOlivia).fadeTo(DELAYS.showOliviaIn, 1, \"easeInOutQuad\").promise()\n            })\n        ])\n      })\n      // .then(currencies => {\n      //   console.log(\"all done\")\n      // })\n  }\n\n  errorOccured(ev) {\n    this.ui.find(`[data-role=\"viewport\"]`).hide()\n    this.screen.show()\n\n    this.replaceSpinner(this.c_gold, true)\n    this.replaceSpinner(this.c_doubloon, true)\n    this.replaceSpinner(this.c_ancient, true)\n\n    this.bubble\n      .fadeTo(600, 0, \"easeInOutCirc\").promise()\n      .then(el => {\n        el.addClass(\"text-danger\").html(`Oh no! This skull is mute! <small>Error occured, please come back and try again later.</small>`)\n        return el.delay(200).fadeTo(600, 1, \"easeInOutCirc\").promise()\n      })\n  }\n}\n\nclass NetWorthUI {\n  constructor(app, el, opts = {}) {\n    this.app = app\n    this.el = el\n    this.opts = opts\n    this.fmt = new Intl.NumberFormat('en-US')\n    this.sortByCurrency = 0\n    this.sortByDir = -1\n    this._throttledCalculate = AppOS.Util.debounce(async _ => await this.calculate(), 500)\n    this.ls = new LoadingScreen(this)\n  }\n\n  hook() {\n    this.el.on(\"click\", `[data-option]`, ev => {\n      this.toggleOpt($(ev.currentTarget).blur())\n      ev.stopImmediatePropagation()\n      ev.preventDefault()\n    })\n\n    this.el.on(\"click\", `[data-role=\"ul-group\"]`, ev => {\n      const t = $(ev.currentTarget)\n      const ct = $(ev.target)\n\n      if(ct.hasClass(\"bi\")) {\n        ev.preventDefault()\n        if (ct.hasClass(\"bi-check-square\")) {\n          t.next().find(`[data-option]`).each((i, el) => {\n            this.toggleOpt($(el), false)\n          })\n          this.updateGroupIndicator(t.next().find(`[data-option]`).first())\n        } else { // bi-square or bi-slash-square\n          t.next().find(`[data-option]`).each((i, el) => {\n            this.toggleOpt($(el), true)\n          })\n          this.updateGroupIndicator(t.next().find(`[data-option]`).first())\n        }\n        t.toggleClass(\"text-muted\", ct.hasClass(\"bi-square\"))\n      } else {\n\n      }\n      ev.stopImmediatePropagation()\n    })\n\n    this.el.on(\"click\", `[data-role=\"sortByColumn\"]`, ev => {\n      ev.stopImmediatePropagation()\n      ev.preventDefault()\n      const t = $(ev.currentTarget)\n      const i1 = t.find(`.bi-sort-numeric-up, .bi-sort-alpha-up`)\n      const i2 = t.find(`.bi-sort-numeric-down-alt, .bi-sort-alpha-down-alt`)\n\n      if(i1.hasClass(\"text-warning\") || i2.hasClass(\"text-warning\")) {\n        this.changeSortOrder(t.data(\"column\"), i1.hasClass(\"text-warning\") ? -1 : 1)\n      } else {\n        this.changeSortOrder(t.data(\"column\"), t.data(\"column\") == -1 ? 1 : -1)\n      }\n    })\n\n    this.find(\"turbo-frame\").on(\"turbo:fetch-request-error\", ev => { this.ls.errorOccured(ev) })\n    this.find(\"turbo-frame\").on(\"turbo:frame-missing\", ev => { this.ls.errorOccured(ev) })\n    this.find(\"turbo-frame\").on(\"turbo:frame-load\", ev => {\n      this.map = this.find(`[data-role=\"data\"]`).data(\"map\")\n      this.types = this.find(`[data-role=\"data\"]`).data(\"types\")\n      this.balance = this.find(`[data-role=\"data\"]`).data(\"balance\")\n      this.ships = this.find(`[data-role=\"data\"]`).data(\"ships\")\n      this.spinner = this.find(`[data-indicates=\"loading\"]`)\n      this.currencyIcons = this.find(`[data-role=\"data\"]`).data(\"currencyIcons\")\n      this.refreshTypesCount()\n      this.throttledCalculate()\n    })\n\n    this.ls.setup()\n\n    return this\n  }\n\n  find(selector) { return this.el.find(selector) }\n\n  // ================\n  // = Utils / Data =\n  // ================\n\n  loadData() {\n    this.find(\"turbo-frame\").removeAttr(\"loading\")\n  }\n\n  sortBy(hsh, currency, dir = -1) {\n    if (currency < 0) {\n      return Object.entries(hsh).sort((a, b) => dir < 0 ? b[1].localeCompare(a[1]) : a[1].localeCompare(b[1]))\n    } else {\n      return Object.entries(hsh).sort((a, b) => dir < 0 ? b[1][currency] - a[1][currency] : a[1][currency] - b[1][currency])\n    }\n  }\n\n\n\n  // ======================\n  // = Settings / Options =\n  // ======================\n\n  get settings() {\n    const settings = {}\n    this.find(`[data-option]`).each((i, el) => {\n      const t = $(el)\n      let key = `${t.data(\"option\")}`\n      const sub = t.data(\"tindex\")\n      if(sub !== undefined) { key += `_${sub}` }\n      settings[key] = t.find(\".bi\").hasClass(\"bi-check-square\")\n    })\n    return settings\n  }\n\n  toggleOpt(t, toggle = null) {\n    const ico = t.find(\".bi\")\n    const toggleWasNull = toggle === null\n    if(toggleWasNull) {\n      toggle = !ico.hasClass(\"bi-check-square\")\n    }\n    if (toggle) {\n      ico.removeClass(\"bi-square\").addClass(\"bi-check-square\")\n    } else {\n      ico.removeClass(\"bi-check-square\").addClass(\"bi-square\")\n    }\n    t.toggleClass(\"text-muted\", !ico.hasClass(\"bi-check-square\"))\n\n    if(t.data(\"option\") == \"includebalance\") {\n      if(ico.hasClass(\"bi-check-square\")) {\n        this.find(`[data-role=\"balance\"]`).removeClass(\"text-muted text-strike\")\n      } else {\n        this.find(`[data-role=\"balance\"]`).addClass(\"text-muted text-strike\")\n      }\n    }\n\n    if(t.data(\"option\") == \"includeships\") {\n      if(ico.hasClass(\"bi-check-square\")) {\n        this.find(`[data-role=\"ships\"]`).removeClass(\"text-muted text-strike\")\n      } else {\n        this.find(`[data-role=\"ships\"]`).addClass(\"text-muted text-strike\")\n      }\n    }\n\n    // show or hide net worth\n    if ($(`[data-option=\"includeships\"] .bi`).hasClass(\"bi-check-square\") || $(`[data-option=\"includebalance\"] .bi`).hasClass(\"bi-check-square\")) {\n      this.find(`[data-role=\"net-worth\"]`).fadeIn(500)\n    } else {\n      this.find(`[data-role=\"net-worth\"]`).fadeOut(500)\n    }\n\n    this.refreshTypesCount()\n    this.throttledCalculate()\n    if(toggleWasNull) { this.updateGroupIndicator(t) }\n  }\n\n\n\n  // ===============\n  // = Calculation =\n  // ===============\n\n  throttledCalculate() {\n    this.spinner?.css({ opacity: 1 })\n    this._throttledCalculate()\n  }\n\n  async calculate() {\n    const timeStart = Date.now()\n    const result = {\n      all: [0, 0, 0],\n      chest: {},\n      type: {},\n    }\n    const settings = this.settings\n\n    let i = 0\n    this.map.forEach(item => {\n      const [i_currency, cost, timelimited, seasonitem, i_type, i_chest] = item\n      if(!timelimited && !(settings.seasonitem && seasonitem) && !settings.obtainable) return\n      if(seasonitem && !settings.seasonitem) return\n      if(timelimited && !settings.timelimited && !(settings.seasonitem && seasonitem)) return\n\n      if(!settings[`type_${i_type}`]) return\n      result.type[this.types[i_type]] ||= [0, 0, 0]\n      result.type[this.types[i_type]][i_currency] += cost\n      const chest_name = i_chest === null ? \"No chest / Unknown\" : this.types[i_chest]\n      result.chest[chest_name] ||= [0, 0, 0]\n      result.chest[chest_name][i_currency] += cost\n      result.all[i_currency] += cost\n      i += 1\n    })\n    // console.log(\"calced\", i, \"in\", Date.now() - timeStart, result)\n\n    await this.updateUI(result, settings)\n    this.spinner?.css({ opacity: 0 })\n    // console.log(\"ui\", Date.now() - timeStart)\n  }\n\n\n\n  // ======\n  // = UI =\n  // ======\n\n  async updateUI(result, settings) {\n    this.updateCurrencyRow(this.find(`[data-role=\"balance\"]`), this.balance)\n    this.updateCurrencyRow(this.find(`[data-role=\"ships\"]`), this.ships)\n    this.updateCurrencyRow(this.find(`[data-role=\"item-worth\"]`), result.all)\n\n    const net_worth = [result.all[0], result.all[1], result.all[2]]\n    if(settings.includebalance) {\n      net_worth[0] += this.balance[0]\n      net_worth[1] += this.balance[1]\n      net_worth[2] += this.balance[2]\n    }\n    if(settings.includeships) {\n      net_worth[0] += this.ships[0]\n      net_worth[1] += this.ships[1]\n      net_worth[2] += this.ships[2]\n    }\n    this.updateCurrencyRow(this.find(`[data-role=\"net-worth\"]`), net_worth)\n    this.updateCurrencyRow(this.find(`[data-role=\"doubloon-conversion\"]`), [net_worth[1] * 200, net_worth[1], net_worth[2]])\n\n    const total_worth = [net_worth[0] + net_worth[1] * 200, 0, net_worth[2]]\n    this.updateCurrencyRow(this.find(`[data-role=\"total-worth\"]`), total_worth)\n\n    const chestTable = this.find(`[data-role=\"chest-table\"] tbody`).html(\"\")\n    this.sortBy(result.chest, this.sortByCurrency, this.sortByDir).forEach(([key, value]) => {\n      const tr = $(\"<tr>\").appendTo(chestTable)\n      $(\"<td>\").addClass(\"ps-2\").attr(\"data-currency\", \"-1\").html(key).appendTo(tr)\n      $(\"<td>\").addClass(\"px-2\").attr(\"data-currency\", \"0\").appendTo(tr)\n      $(\"<td>\").addClass(\"px-2\").attr(\"data-currency\", \"1\").appendTo(tr)\n      $(\"<td>\").addClass(\"px-2\").attr(\"data-currency\", \"2\").appendTo(tr)\n      this.updateCurrencyRow(tr, value)\n    })\n\n    const typeTable = this.find(`[data-role=\"type-table\"] tbody`).html(\"\")\n    this.sortBy(result.type, this.sortByCurrency, this.sortByDir).forEach(([key, value]) => {\n      const tr = $(\"<tr>\").appendTo(typeTable)\n      $(\"<td>\").addClass(\"ps-2\").attr(\"data-currency\", \"-1\").html(key).appendTo(tr)\n      $(\"<td>\").addClass(\"px-2\").attr(\"data-currency\", \"0\").appendTo(tr)\n      $(\"<td>\").addClass(\"px-2\").attr(\"data-currency\", \"1\").appendTo(tr)\n      $(\"<td>\").addClass(\"px-2\").attr(\"data-currency\", \"2\").appendTo(tr)\n      this.updateCurrencyRow(tr, value)\n    })\n\n    this.fixTableWidths()\n    this.ls.dataLoaded(result, settings)\n  }\n\n  fixTableWidths() {\n    const w_c0 = this.find(`[data-role=\"main-table\"] [data-currency=\"0\"]`).outerWidth()\n    const w_c1 = this.find(`[data-role=\"main-table\"] [data-ctn=\"currency-1\"]`).outerWidth()\n    const w_c2 = this.find(`[data-role=\"main-table\"] [data-currency=\"2\"]`).outerWidth()\n    this.find(`[data-currency]`).css({ minWidth: `auto` })\n    if(w_c0 > 0) {\n      this.find(`[data-currency=\"0\"]`).css({ minWidth: `${Math.ceil(w_c0)}px` })\n    }\n    if(w_c1 > 0) {\n      this.find(`[data-currency=\"1\"]`).css({ minWidth: `${Math.ceil(w_c1)}px` })\n    }\n    if(w_c2 > 0) {\n      this.find(`[data-currency=\"2\"]`).css({ minWidth: `${Math.ceil(w_c2)}px` })\n    }\n\n\n    const maxWidth = Math.max.apply(null, this.find('[data-currency=\"-1\"]').map((i, el) => $(el).outerWidth()).get())\n    this.find('[data-currency=\"-1\"]').css({ minWidth: `${Math.ceil(maxWidth)}px` })\n    // console.log(w_c1)\n    // this.find(`[data-role=\"chest-table\"] tbody`)\n  }\n\n  updateCurrencyRow(row, values, size = 20) {\n    const r0 = row.find(`[data-currency=\"0\"]`)\n    const r1 = row.find(`[data-currency=\"1\"]`)\n    const r2 = row.find(`[data-currency=\"2\"]`)\n    r0.attr(\"data-value\", values[0]).html(`<div class=\"d-inline-flex align-items-center font-monospace\">${this.fmt.format(values[0])} <img src=\"${this.currencyIcons[0]}\" class=\"p-0 ms-1\" width=\"${r0.data(\"size\") || size}\" height=\"${r0.data(\"size\") || size}\"></div>`)\n    r1.attr(\"data-value\", values[1]).html(`<div class=\"d-inline-flex align-items-center font-monospace\">${this.fmt.format(values[1])} <img src=\"${this.currencyIcons[1]}\" class=\"p-0 ms-1\" width=\"${r1.data(\"size\") || size}\" height=\"${r1.data(\"size\") || size}\"></div>`)\n    r2.attr(\"data-value\", values[2]).html(`<div class=\"d-inline-flex align-items-center font-monospace\">${this.fmt.format(values[2])} <img src=\"${this.currencyIcons[2]}\" class=\"p-0 ms-1\" width=\"${r2.data(\"size\") || size}\" height=\"${r2.data(\"size\") || size}\"></div>`)\n  }\n\n  refreshTypesCount() {\n    let total = 0\n    let active = 0\n    this.find(`[data-tindex]`).each((i, el) => {\n      total += 1\n      if ($(el).find(\".bi\").hasClass(\"bi-check-square\")) active += 1\n    })\n    this.find(`[data-indicates=\"total_types\"]`).html(total)\n    this.find(`[data-indicates=\"active_types\"]`).html(active)\n  }\n\n  updateGroupIndicator(t) {\n    const grp_indicator = t.closest(`details[data-role=\"ul-group-ctn\"]`).find(`[data-role=\"ul-group\"]`)\n    if(grp_indicator.length) {\n      const grp_ico = grp_indicator.find(`.bi`)\n      const total = grp_indicator.next().find(`[data-option] .bi`).length\n      const active = grp_indicator.next().find(`[data-option] .bi-check-square`).length\n\n      if(active == 0) {\n        grp_ico.removeClass(\"bi-slash-square bi-check-square\").addClass(\"bi-square\")\n        grp_indicator.addClass(\"text-muted\")\n      } else if (active < total) {\n        grp_ico.removeClass(\"bi-square bi-check-square\").addClass(\"bi-slash-square\")\n        grp_indicator.removeClass(\"text-muted\")\n      } else {\n        grp_ico.removeClass(\"bi-square bi-slash-square\").addClass(\"bi-check-square\")\n        grp_indicator.removeClass(\"text-muted\")\n      }\n    }\n  }\n\n  countValueUp(el, value, duration = 2000) {\n    return $({ counter: 0 }).delay(1000).animate({ counter: 100 }, {\n      duration: duration,\n      easing: 'slowEaseOutExpo',\n      step: n => {\n        el.text(this.fmt.format(Math.ceil((value / 100) * n)))\n        // el.text(n)\n      }\n    })\n  }\n\n  changeSortOrder(col, dir = -1) {\n    const [c1, c2] = dir < 0 ? [\"text-warning\", \"text-muted\"] : [\"text-muted\", \"text-warning\"]\n    this.find(`[data-role=\"sortByColumn\"][data-column] .bi`).removeClass(\"text-warning\").addClass(\"text-muted\")\n    const rowCol = this.find(`[data-role=\"sortByColumn\"][data-column=\"${col}\"]`)\n    rowCol.find(`.bi-sort-numeric-up, .bi-sort-alpha-up`).removeClass(c1).addClass(c2)\n    rowCol.find(`.bi-sort-numeric-down-alt, .bi-sort-alpha-down-alt`).removeClass(c2).addClass(c1)\n    this.sortByCurrency = col\n    this.sortByDir = dir\n\n    $(`tbody[data-sortable-target]`).each((i, el) => {\n      const tbody = $(el)\n      let items = tbody.find(\"tr\").get()\n      items.sort((a, b) => {\n        const [c, d] = [$(a).find(`td[data-currency=\"${col}\"]`), $(b).find(`td[data-currency=\"${col}\"]`)]\n        if(col < 0) {\n          return dir < 0 ? d.text().localeCompare(c.text()) : c.text().localeCompare(d.text())\n        } else {\n          return dir < 0 ? d.data(\"value\") - c.data(\"value\") : c.data(\"value\") - d.data(\"value\")\n        }\n      })\n\n      items.forEach(item => { tbody.append(item) })\n    })\n  }\n}\n\nexport { NetWorthUI }\n", "import * as AppOS from \"../appos/appos\"\n\nclass EmoteLoadoutUI {\n  constructor(app, el, opts = {}) {\n    this.app = app\n    this.el = el\n    this.opts = opts\n    this.fmt = new Intl.NumberFormat('en-US')\n  }\n\n  hook() {\n    this.v_pagenav = this.find(`[data-role=\"page-selector\"]`)\n    this.v_pages = this.find(`[data-role=\"pages\"]`)\n    this.v_wheel_currentPage = this.find(`[data-role=\"wheelCurrentPage\"]`)\n    this.v_emote_ctn = this.find(`[data-role=\"emotes\"]`)\n    this.v_emote_search = this.find(`[data-role=\"emotes-search\"]`)\n    this.v_emote_search_q = this.find(`[data-flist-q=\"emote\"]`)\n    this.v_emote_list = this.find(`[data-role=\"emotes-list\"]`)\n    this.i_toggle_hideEquipped = this.find(`[data-input=\"toggleHideEquipped\"]`)\n\n    this.v_keyhelp = this.find(`[data-role=\"keyHelp\"]`)\n    this.v_help_modal = this.find(`[data-role=\"loadout:helpModal\"]`)\n    this.v_io_modal = this.find(`[data-role=\"loadout:ioModal\"]`)\n    this.v_io_modal_interface = this.find(`[data-role=\"loadout:io:interface\"]`)\n    this.v_io_modal_apply = this.find(`[data-role=\"loadout:io:apply\"]`)\n\n    this.b_loadout_save = this.find(`[data-ld-act=\"loadout:save\"]`)\n    this.b_loadout_save_msg = this.find(`[data-ld-act=\"loadout:save\"] span`)\n    this.b_loadout_import_export = this.find(`[data-ld-act=\"loadout:import_export\"]`)\n    this.b_loadout_help = this.find(`[data-ld-act=\"loadout:help\"]`)\n    this.form = this.find(`[data-role=\"loadout:updateForm\"]`)\n    this.form_input = this.form.find(`[data-role=\"loadout:updateFormValue\"]`)\n\n    this.loadout = this.el.data(\"emoteLoadout\")\n    this.emotes = this.el.data(\"emoteList\")\n\n    this.b_loadout_import_export.click(ev => {\n      ev.currentTarget.blur()\n      bootstrap.Modal.getOrCreateInstance(this.v_io_modal).show()\n      this.v_io_modal_interface.val(JSON.stringify(this.loadout))\n      return false\n    })\n\n    this.b_loadout_help.click(ev => {\n      ev.currentTarget.blur()\n      bootstrap.Modal.getOrCreateInstance(this.v_help_modal).show()\n      return false\n    })\n\n    this.v_io_modal_apply.click(ev => {\n      let newLD = null\n      try {\n        newLD = JSON.parse(this.v_io_modal_interface.val())\n      } catch(e) {\n        console.error(e)\n        alert(\"FAILED: \" + e.message)\n        return\n      }\n      this.loadout = newLD\n      this.unsavedChanges()\n      this.updateEmotesInTable()\n      this.selectPage(0)\n      this.showKeyHelp()\n      bootstrap.Modal.getOrCreateInstance(this.v_io_modal).hide()\n    })\n\n    this.find(`[data-role=\"loadout:io:ahk:enable\"`).click(ev => {\n      this.find(`[data-role=\"loadout:io:ahk:disabled\"`).addClass(\"d-none\")\n      this.find(`[data-role=\"loadout:io:ahk:enabled\"`).removeClass(\"d-none\")\n    })\n    this.find(`[data-role=\"loadout:io:ahk:equip\"`).click(ev => {\n      this.downloadAhk(this.toEquipAHK().join(\"\\n\"), \"sot_equip_emotes_READ_CONTENTS_BEFORE_RUNNING.ahk\")\n    })\n    this.find(`[data-role=\"loadout:io:ahk:hotstrings\"`).click(ev => {\n      this.downloadAhk(this.toHotstringAHK().join(\"\\n\"), \"sot_emote_hotstrings_READ_CONTENTS_BEFORE_RUNNING.ahk\")\n    })\n    this.find(`[data-role=\"loadout:io:ahk:hotstringsPlugin\"`).click(ev => {\n      this.downloadAhk(this.toHotstringAHK(true).join(\"\\n\"), \"emote_hotstrings_PLUGIN_READ_CONTENTS_BEFORE_RUNNING.ahk\")\n    })\n\n    this.find(`[data-action=\"loadout:selectPage\"]`).click(ev => {\n      ev.currentTarget.blur()\n      this.selectPage(ev.currentTarget.dataset.page)\n      ev.preventDefault()\n    })\n\n    this.v_emote_list.on(\"flist:postFilter\", ev => {\n      if(this.activeSlot.length) {\n        this.v_emote_list.find(`.last-clicked[data-flist-entry]`).each((i, el) => {\n          $(el).removeClass(\"last-clicked\").trigger(\"srec:unclicked\")\n        })\n        this.v_emote_list.find(`[data-flist-entry]:visible`).first().addClass(\"last-clicked\").trigger(\"srec:clicked\")\n      }\n    })\n\n    this.b_loadout_save.click(ev => {\n      ev.currentTarget.blur()\n      this.saveLoadout()\n      return false\n    })\n\n    this.i_toggle_hideEquipped.click(ev => {\n      const t = $(ev.currentTarget)\n      const ico = t.find(\"i\")\n      this.v_emote_list.toggleClass(\"hide-equipped\")\n      t.toggleClass(\"text-warning\")\n      ico.toggleClass(\"bi-eye bi-eye-slash\")\n      t.blur()\n      return false\n    })\n\n    this.v_emote_search_q.on(\"blur\", ev => {\n      const activeWheelSlot = this.activeSlot\n      if(activeWheelSlot.length) this.deactivateWheelSlot(activeWheelSlot)\n    })\n\n    this.v_pages.on(\"srec:clicked\", \"[data-sotid]\", ev => { this.slotSelected(ev.currentTarget) })\n    this.v_pages.on(\"srec:unclicked\", \"[data-sotid]\", ev => { this.slotDeselected(ev.currentTarget) })\n\n    this.app.input?.onKeydownThisPage(ev => this.keyboardEvent(ev))\n\n    this.buildEmoteList()\n    this.selectPage(0)\n    this.showKeyHelp()\n\n    return this\n  }\n\n  toHotstringAHK(scriptPlugin = false, buf = []) {\n    if(scriptPlugin) {\n      buf.push(`; THIS IS SUPPOSED TO BE REQUIRED IN YOUR custom.ahk LIKE THIS (copy to your custom folder):`)\n      buf.push(`;    #Include custom/emote_hotstrings.ahk`)\n      buf.push(`; IF YOU DON'T KNOW WHAT custom MEANS THEN YOU DON'T NEED THE PLUGIN VERSION`)\n    } else {\n      buf.push(`; IMPORTANT: CHECK YOUR KEYBINDS AND CHANGE IF NEEDED!`)\n      buf.push(``)\n      buf.push(`IGB_Emote_Wheel    := \"z\"`)\n      buf.push(`IGB_Emote_NextPage := \"f\"`)\n      buf.push(``)\n      buf.push(``)\n      buf.push(`; End of config`)\n      buf.push(`Menu, Tray, Tip, SoT Emote Hotstrings`)\n      buf.push(`Return`)\n      buf.push(``)\n      buf.push(`; Emote helper`)\n      buf.push(`DoEmote(Page, Slot, Delay = 175) {`)\n      buf.push(`  global`)\n      buf.push(`  sleep Delay`)\n      buf.push(`  Send {%IGB_Emote_Wheel% down}`)\n      buf.push(`  sleep 200`)\n      buf.push(`  Page := Page - 1`)\n      buf.push(`  Loop, %Page% {`)\n      buf.push(`    Send {%IGB_Emote_NextPage%}`)\n      buf.push(`  }`)\n      buf.push(`  Send {%Slot%}`)\n      buf.push(`  Send {%IGB_Emote_Wheel% up}`)\n      buf.push(`}`)\n      buf.push(``)\n      buf.push(`; Hotstrings`)\n    }\n    buf.push(``)\n\n    this.loadout.pages.forEach((page, pi) => {\n      page.forEach((row, ri) => {\n        if(!row) return\n        let name = row\n        if(Array.isArray(row)) name = row[0]\n\n        const [p, r, c] = this.fati2prc(this.emotes[name][2])\n        const hstrings = this.loadout.hotstrings[name]\n\n        if(hstrings?.length) {\n          hstrings.forEach(hstring => {\n            buf.push(`; [${pi + 1}/${ri + 1}] ${name} (ingame location: P${p} R${r} C${c})`)\n            buf.push(`:Zb0*?:${hstring}::`)\n            buf.push(`  DoEmote(${pi + 1}, ${ri + 1})`)\n            buf.push(`  return`)\n            buf.push(``)\n          })\n        } else {\n          buf.push(`; [${pi + 1}/${ri + 1}] ${name} (ingame location: P${p} R${r} C${c})`)\n          buf.push(``)\n        }\n      })\n    })\n\n    return buf\n  }\n\n  toEquipAHK(scriptPlugin = false, buf = []) {\n    // collect emotes\n    let toEquip = []\n    this.loadout.pages.forEach((page, pi) => {\n      page.forEach((row, ri) => {\n        if(!row) return\n        let name = row\n        if(Array.isArray(row)) name = row[0]\n\n        toEquip.push([this.emotes[name][2], name, pi + 1, ri + 1])\n      })\n    })\n    toEquip = toEquip.sort((a, b) => a[0] - b[0])\n\n    // script header\n    buf.push(`; This script is to equip your emotes (from scratch)`)\n    buf.push(`;   1. Check your bindings, then start script`)\n    buf.push(`;   2. Open vanity chest, go to emote tab (first page)`)\n    buf.push(`;   3. Start by pressing F5`)\n    buf.push(`;   4. Wait (hold F5 to cancel), profit`)\n    // show message to go to emote tab (first page)\n\n    buf.push(``)\n    buf.push(`; Key Bindings`)\n    buf.push(`IGB_Slot_Equip          := \"Enter\"`)\n    buf.push(`IGB_Slot_Unequip        := \"1\"`)\n    buf.push(`IGB_Slot_EquipNextPage  := \"1\"`)\n    buf.push(`IGB_InvPagePrev         := \"PgUp\"`)\n    buf.push(`IGB_InvPageNext         := \"PgDn\"`)\n    buf.push(`IGB_Left                := \"Left\"`)\n    buf.push(`IGB_Up                  := \"Up\"`)\n    buf.push(`IGB_Right               := \"Right\"`)\n    buf.push(`IGB_Down                := \"Down\"`)\n    buf.push(``)\n\n    buf.push(``)\n    buf.push(`; End of config`)\n    buf.push(`#MaxThreadsPerHotkey, 1`)\n    buf.push(`#SingleInstance Force`)\n    buf.push(`#NoEnv`)\n    buf.push(`setkeydelay, 200`)\n    buf.push(`SetWorkingDir A_ScriptDir`)\n    buf.push(`Menu, Tray, Tip, SoT Emote Equip`)\n    buf.push(`MsgBox, 0, , 1. Go to your vanity chest\\`n2. Navigate to the emote tab\\`n3. Close this box and press F5 and wait\\`n(hold F5 to cancel), 30`)\n    buf.push(`Return`)\n\n\n    buf.push(``)\n    buf.push(`; bind equip routine`)\n    // buf.push(`F5::`)\n    // buf.push(`  EquipEmote(3, 6)`)\n    // buf.push(`  return`)\n    buf.push(`F5::`)\n    buf.push(`  SplashTextOn, 400, 20, please wait, no touchy!`)\n    buf.push(`  Sleep 500`)\n    buf.push(`  GoSub EquipEmoteRoutine`)\n    buf.push(`  return`)\n    buf.push(``)\n    buf.push(``)\n    buf.push(`; Emote Equip helper`)\n    buf.push(`EquipEmote(Page, Slot) {`)\n    buf.push(`  global`)\n    buf.push(`  sleep 200`)\n    buf.push(`  ; Unequip & equip`)\n    buf.push(`  Send {%IGB_Slot_Unequip%}`)\n    buf.push(`  Send {%IGB_Slot_Equip%}`)\n    buf.push(`  sleep 200`)\n    buf.push(`  `)\n    buf.push(`  ; go to page`)\n    buf.push(`  Page := Page - 1`)\n    buf.push(`  Loop, %Page% {`)\n    buf.push(`    Send {%IGB_Slot_EquipNextPage%}`)\n    buf.push(`  }`)\n    buf.push(`  `)\n    buf.push(`  ; equip to slot`)\n    // buf.push(`  Send {%Slot%}`)\n    buf.push(`  if (Slot = 1)`)\n    buf.push(`    Send {%IGB_Up%}`)\n    buf.push(`  if (Slot = 2)`)\n    buf.push(`    Send {%IGB_Up%}{%IGB_Right%}`)\n    buf.push(`  if (Slot = 3)`)\n    buf.push(`    Send {%IGB_Right%}`)\n    buf.push(`  if (Slot = 4)`)\n    buf.push(`    Send {%IGB_Right%}{%IGB_Down%}`)\n    buf.push(`  if (Slot = 5)`)\n    buf.push(`    Send {%IGB_Down%}`)\n    buf.push(`  if (Slot = 6)`)\n    buf.push(`    Send {%IGB_Down%}{%IGB_Left%}`)\n    buf.push(`  if (Slot = 7)`)\n    buf.push(`    Send {%IGB_Left%}`)\n    buf.push(`  if (Slot = 8)`)\n    buf.push(`    Send {%IGB_Left%}{%IGB_Up%}`)\n    buf.push(`  Send {%IGB_Slot_Equip%}`)\n    buf.push(`  sleep 200`)\n    buf.push(`}`)\n\n    // stop routine check\n    buf.push(``)\n    buf.push(`; Stop routine`)\n    buf.push(`RoutineBreakpoint(ptr) {`)\n    buf.push(`  if !GetKeyState(\"F5\", \"P\")`)\n    buf.push(`    return`)\n    buf.push(`  SplashTextOff`)\n    buf.push(`  MsgBox, 0, , Execution stopped (%ptr%). Script will exit, 10`)\n    buf.push(`  ExitApp`)\n    buf.push(`  return`)\n    buf.push(`}`)\n\n\n    // equip routine\n    let ptr = [1, 1, 1]\n    let delta = 0\n    let imax = toEquip.length\n    buf.push(``)\n    buf.push(`; Equip routine`)\n    buf.push(`EquipEmoteRoutine:`)\n    buf.push(`  ; ensure top left`)\n    buf.push(`  Send {Left 6}{Up 6}`)\n    buf.push(`  sleep 300`)\n    buf.push(`  `)\n\n\n\n    toEquip.forEach(([idx, name, px, sx], i) => {\n      const [p, r, c] = this.fati2prc(idx)\n      buf.push(`  ; (idx ${idx} p ${ptr[0]}/${p} r ${ptr[1]}/${r} c ${ptr[2]}/${c}) ~[${i+1}/${imax}] @[${px}/${sx}] ${name}`)\n      buf.push(`  SplashTextOn, 400, 20, Equipping ${i+1}/${imax}, [${px}/${sx}] ${name.replaceAll(/[^a-z0-9\\s]+/gi, \"\")}`)\n\n      // move pointer\n\n      // page\n      if(ptr[0] > p) {\n        buf.push(`  Send {%IGB_InvPagePrev% ${ptr[1] - r}}`)\n        ptr[0] = p\n      } else if(ptr[0] < p) {\n        // move pointer back to top left or it breaks when next page isn't full\n        if(ptr[1] > 1) {\n          buf.push(`  Send {%IGB_Up% ${ptr[1] - 1}}`)\n          ptr[1] = 1\n        }\n        if(ptr[2] > 1) {\n          buf.push(`  Send {%IGB_Left% ${ptr[2] - 1}}`)\n          ptr[2] = 1\n        }\n\n        buf.push(`  Send {%IGB_InvPageNext% ${p - ptr[0]}}`)\n        ptr[0] = p\n      }\n\n      // col\n      if(ptr[2] > c) {\n        buf.push(`  Send {%IGB_Left% ${ptr[2] - c}}`)\n        ptr[2] = c\n      } else if(ptr[2] < c) {\n        buf.push(`  Send {%IGB_Right% ${c - ptr[2]}}`)\n        ptr[2] = c\n      }\n\n      // row\n      if(ptr[1] > r) {\n        buf.push(`  Send {%IGB_Up% ${ptr[1] - r}}`)\n        ptr[1] = r\n      } else if(ptr[1] < r) {\n        buf.push(`  Send {%IGB_Down% ${r - ptr[1]}}`)\n        ptr[1] = r\n      }\n\n      // equip\n      buf.push(`  EquipEmote(${px}, ${sx})`)\n      buf.push(`  RoutineBreakpoint(\"${i+1}/${imax}\")`)\n    })\n\n    buf.push(`  SplashTextOff`)\n    buf.push(`  MsgBox, 0, , All done (hopefully). Script will exit and you may delete it`)\n    buf.push(`  ExitApp`)\n    buf.push(`  return`)\n    return buf\n  }\n\n  get currentPage() {\n    return this.v_pagenav.find(`.nav-link.active`).data(\"page\")\n  }\n\n  get slots() {\n    return this.v_pages.find(`[data-slot]`)\n  }\n\n  get selectedSlot() {\n    return this.v_pages.find(`.last-clicked[data-slot]`)\n  }\n\n  get activeSlot() {\n    return this.v_pages.find(`.emote-select-active[data-slot]`)\n  }\n\n  saveLoadout() {\n    this.b_loadout_save_msg.text(\"saving\")\n    this.b_loadout_save.removeClass((i, c) => (c.match(/(^|\\s)btn-\\S+/g) || []).join(' ')).addClass(\"btn-info\")\n    this.form_input.val(JSON.stringify(this.loadout))\n    this.form.submit()\n  }\n\n  unsavedChanges() {\n    this.b_loadout_save_msg.text(\"unsaved changes\")\n    this.b_loadout_save.removeClass((i, c) => (c.match(/(^|\\s)btn-\\S+/g) || []).join(' ')).addClass(\"btn-warning\")\n  }\n\n  slot(num) {\n    return this.v_pages.find(`[data-slot=${num}]`)\n  }\n\n  showKeyHelp(scope = \"default\") {\n    this.v_keyhelp.find(\"[data-key-help]\").hide()\n    this.v_keyhelp.find(`[data-key-help=\"${scope}\"]`).show()\n  }\n\n  slotFor(qname) {\n    let res = false\n    this.loadout.pages.forEach((page, pi) => {\n      if(res) return\n      page.forEach((row, ri) => {\n        let name = row\n        if(Array.isArray(row)) name = row[0]\n        if(name == qname) return res = [pi, ri]\n      })\n    })\n    return res\n  }\n\n  static arrowMap = { // left,up,right,down\n    \"default\": [6, 0, 2, 4],\n    \"0\": [7, null, 1, 1],\n    \"1\": [7, 0, 2, 2],\n    \"2\": [6, 1, 3, 3],\n    \"3\": [5, 2, 4, 4],\n    \"4\": [5, 5, 3, null],\n    \"5\": [6, 6, 3, 4],\n    \"6\": [7, 7, 2, 5],\n    \"7\": [0, 0, 1, 6],\n  }\n\n  keyboardEvent(ev) {\n    console.log(ev.keyCode, ev.code, ev.key, ev.keyCode - 37)\n    if(ev.target.tagName == \"TEXTAREA\") return\n\n    if(ev.target.classList.contains(\"hstring-edit\")) {\n      if (ev.code == \"Enter\") {\n        const inp = $(ev.target)\n        const slot = inp.closest(`[data-slot]`)\n        const newHstrings = inp.val().split(/\\s+/).filter(e => e)\n        const targetEmote = slot.data(\"selectedEmote\")\n        if(newHstrings.length) {\n          this.loadout.hotstrings[targetEmote] = newHstrings\n        } else {\n          delete this.loadout.hotstrings[targetEmote]\n        }\n        this.unsavedChanges()\n        ev.target.blur()\n        this.renderSlot(slot, targetEmote)\n        this.updateEmoteInTable(targetEmote)\n        ev.preventDefault()\n        return false\n      }\n      return\n    }\n\n    if(ev.keyCode >= 37 && ev.keyCode <= 40) { // arrow keys\n      const dir = ev.keyCode - 37\n      const activeWheelSlot = this.activeSlot\n      if(activeWheelSlot.length) { // emote list (in select)\n        const selectedEmoteEntry = this.v_emote_list.find(`.last-clicked[data-flist-entry]`)\n        if(!selectedEmoteEntry.length) return\n        if(ev.keyCode == 38) { // up\n          const prev = selectedEmoteEntry.prevAll(\":visible\").first()\n          if(prev.length) {\n            selectedEmoteEntry.click()\n            prev.click()\n            prev.get(0).scrollIntoView({block: \"nearest\", inline: \"nearest\"})\n          }\n          ev.preventDefault()\n          return false\n        } else if(ev.keyCode == 40) { // down\n          const prev = selectedEmoteEntry.nextAll(\":visible\").first()\n          if(prev.length) {\n            selectedEmoteEntry.click()\n            prev.click()\n            prev.get(0).scrollIntoView({block: \"nearest\", inline: \"nearest\"})\n          }\n          ev.preventDefault()\n          return false\n        }\n        return\n      } else if (ev.target.tagName == \"INPUT\") {\n        return\n      } else { // wheel\n        const ss = this.selectedSlot\n        if(ss.length) {\n          const si = ss.data(\"slot\")\n          const amap = this.constructor.arrowMap[si]?.[dir]\n          if(amap != null) { this.slot(amap).click() }\n        } else {\n          this.slot(this.constructor.arrowMap.default[dir]).click()\n        }\n      }\n      ev.preventDefault()\n      return false\n    } else if (ev.code == \"PageUp\") {\n      const cp = this.currentPage\n      if(ev.shiftKey) {\n        if(cp != 0) this.selectPage(0)\n      } else {\n        if(cp > 0) { this.selectPage(cp - 1) }\n      }\n      ev.preventDefault()\n      return false\n    } else if (ev.code == \"PageDown\") {\n      const cp = this.currentPage\n      if(ev.shiftKey) {\n        const mp = this.loadout.pages.length - 1\n        if(cp != mp) this.selectPage(mp)\n      } else {\n        if(cp < 9) { this.selectPage(cp + 1) }\n      }\n      ev.preventDefault()\n      return false\n    } else if (ev.target.tagName != \"INPUT\" && (ev.code == \"Delete\" || ev.code == \"Backspace\")) {\n      if(ev.shiftKey) {\n        this.slots.each((i, slot) => {\n          this.unequipSlot($(slot))\n        })\n      } else {\n        const sels = this.selectedSlot\n        if(sels.length) this.unequipSlot(sels)\n      }\n      ev.preventDefault()\n    } else if (ev.code == \"KeyH\" && ev.target.tagName != \"INPUT\" && this.selectedSlot.length) {\n      const selectedWheelSlot = this.selectedSlot\n      if(!selectedWheelSlot.data(\"selectedEmote\")) return\n      const outer = selectedWheelSlot.find(`[data-slot-v=\"hstringEditOuter\"]`)\n      const inp = $(\"<input>\").attr(\"type\", \"text\").addClass(\"position-absolute form-control text-smaller hstring-edit\")\n      const hstrings = this.loadout.hotstrings[selectedWheelSlot.data(\"selectedEmote\")]\n      outer.removeClass(\"d-none\")\n      inp.blur(ev => {\n        if(!selectedWheelSlot.hasClass(\"last-clicked\")) selectedWheelSlot.click()\n        this.showKeyHelp(selectedWheelSlot.data(\"selectedEmote\") ? \"wheelSlot\" : \"wheelSlotEmpty\")\n        inp.remove()\n        outer.addClass(\"d-none\")\n      })\n      this.showKeyHelp(\"hstringsEdit\")\n      inp.appendTo(outer)\n      inp.val(hstrings ? hstrings.join(\" \") : \"\").focus()\n      ev.preventDefault()\n      return false\n    } else if (ev.code == \"Enter\") {\n      const selectedWheelSlot = this.selectedSlot\n      const activeWheelSlot = this.activeSlot\n      if(selectedWheelSlot.length && !activeWheelSlot.length) {\n        this.activateWheelSlot(selectedWheelSlot)\n        return false\n      } else if (activeWheelSlot.length) {\n        const selectedEmoteEntry = this.v_emote_list.find(`.last-clicked[data-flist-entry]`)\n        if(selectedEmoteEntry.length) {\n          this.equipSlot(activeWheelSlot, selectedEmoteEntry.data(\"emote\"))\n          this.deactivateWheelSlot(activeWheelSlot)\n        } else {\n          console.log(\"???? no emote selected but enter pressed\")\n          this.deactivateWheelSlot(activeWheelSlot)\n        }\n      }\n    } else if(ev.code.match(/^Digit[0-9]$/) && ev.target.tagName != \"INPUT\") {\n      if(ev.ctrlKey || ev.metaKey) return\n      let num = parseInt(ev.code.match(/^Digit([0-9])$/)[1])\n      if(num == 0) num = 10\n\n      const activeWheelSlot = this.activeSlot\n      if(activeWheelSlot.length) { // emote list (in select)\n\n      } else { // wheel\n        if(ev.shiftKey) {\n          this.selectPage(num - 1)\n        } else if (num <= 8) {\n          this.slot(num - 1).click()\n        }\n      }\n      ev.preventDefault()\n      return false\n    }\n  }\n\n  getSlotForName(name) {\n    let coord = false\n    this.loadout.pages.forEach((page, pi) => {\n      page.forEach((emote, si) => {\n        if(Array.isArray(emote)) {\n          if(emote[0] == name) return coord = [pi, si]\n        } else {\n          if(emote == name) return coord = [pi, si]\n        }\n      })\n    })\n    return coord\n  }\n\n  equipSlot(slot, name) {\n    const pnum = this.currentPage\n    const snum = slot.data(\"slot\")\n    const page = this.loadout.pages[this.currentPage]\n\n    const currentPos = this.getSlotForName(name)\n    if(currentPos) {\n      if(currentPos[0] == this.currentPage) {\n        this.unequipSlot(this.slot(currentPos[1]))\n      } else {\n        this.loadout.pages[currentPos[0]][currentPos[1]] = null\n      }\n    }\n\n    if(page[snum]) this.unequipSlot(slot)\n\n    page[snum] = name\n    this.renderSlot(slot, name)\n    this.updateEmoteInTable(name)\n    this.unsavedChanges()\n  }\n\n  unequipSlot(slot) {\n    const name = slot.data(\"selectedEmote\")\n    const page = this.loadout.pages[this.currentPage]\n    const snum = slot.data(\"slot\")\n    page[snum] = null\n    this.renderSlot(slot, null)\n    this.updateEmoteInTable(name)\n    this.unsavedChanges()\n  }\n\n  activateWheelSlot(slot) {\n    this.showKeyHelp(\"wheelSlotActive\")\n    slot.addClass(\"emote-select-active\")\n    this.v_emote_list.trigger(\"flist:postFilter\")\n    this.v_emote_search_q.focus().select()\n  }\n\n  deactivateWheelSlot(slot) {\n    this.v_emote_search_q.get(0).blur()\n    this.v_emote_list.find(`.last-clicked[data-flist-entry]`).click()\n    slot.removeClass(\"emote-select-active\")\n    if(!slot.hasClass(\"last-clicked\")) slot.click()\n    this.showKeyHelp(slot.data(\"selectedEmote\") ? \"wheelSlot\" : \"wheelSlotEmpty\")\n  }\n\n  slotSelected(slot) {\n    console.log(\"selected\", slot)\n    this.showKeyHelp($(slot).data(\"selectedEmote\") ? \"wheelSlot\" : \"wheelSlotEmpty\")\n  }\n\n  slotDeselected(t) {\n    if(!this.activeSlot.length) this.showKeyHelp()\n    //disable buttons\n    console.log(\"deselected\", t)\n  }\n\n  updateEmoteInTable(name) {\n    const em = this.v_emote_list.find(`[data-emote=\"${name}\"]`)\n    const sf = this.slotFor(name)\n    if(sf) {\n      em.addClass(\"emote-equipped\")\n      em.find(`[data-slot-v=\"equippedSlot\"]`).html(`${sf[0] + 1}&thinsp;/&thinsp;${sf[1] + 1}`)\n    } else {\n      em.removeClass(\"emote-equipped\")\n      em.find(`[data-slot-v=\"equippedSlot\"]`).html(\"\")\n    }\n\n    const hstrings = this.loadout.hotstrings[name]\n    if(hstrings) {\n      const slot_hstrings = em.find(`[data-slot-v=\"hotstrings\"]`).html(\"\")\n      hstrings.forEach(hs => {\n        const span = $(\"<span>\").addClass(\"me-1 badge bg-dark\").text(hs)\n        slot_hstrings.append(span)\n      })\n    }\n  }\n\n  downloadAhk(payload, filename = \"download.ahk\") {\n    var element = document.createElement('a')\n    element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(payload))\n    element.setAttribute('download', filename)\n    element.style.display = 'none'\n    document.body.appendChild(element)\n    element.click()\n    document.body.removeChild(element)\n  }\n\n  updateEmotesInTable() {\n    Object.entries(this.emotes).forEach(([name, data]) => {\n      this.updateEmoteInTable(name)\n    })\n  }\n\n  buildEmoteList() {\n    const tpl = $(`template[data-tpl=\"emote-list-entry\"]`)\n    Object.entries(this.emotes).forEach(([name, data]) => {\n      const _clone = tpl.get(0).content.cloneNode(true)\n      const clone = $(_clone.children[0])\n      clone.attr(\"data-emote\", name).attr(\"data-fat-index\", data[2])\n      clone.find(`[data-slot-v=\"name\"]`).text(name).attr(\"title\", name)\n      clone.find(`[data-slot-v=\"description\"]`).text(data[0]).attr(\"title\", data[0])\n      const [p,r,c] = this.fati2prc(data[2])\n      clone.find(`[data-slot-v=\"image\"]`).attr(\"title\", `${p} Page\\n${r} Row\\n${c} Col\\n(ingame location)`).removeAttr(\"src\").attr(\"src\", data[1])//.parent().attr(\"href\", data[1])\n\n      this.v_emote_list.append(clone)\n      this.updateEmoteInTable(name)\n    })\n  }\n\n  fati2prc(fati) {\n    const prc = []\n    const c_rows = 4\n    const c_perRow = 6\n    const c_perPage = c_rows * c_perRow\n    prc[0] = Math.floor(fati / c_perPage) + 1\n    prc[1] = Math.floor((fati % c_perPage) / c_perRow) + 1\n    prc[2] = Math.floor(((fati % c_perPage) % c_perRow)) + 1\n    return prc\n  }\n\n  selectPage(pnum) {\n    this.v_pagenav.find(`.nav-link.active`).removeClass(\"active\")\n    this.v_pagenav.find(`.nav-link[data-page=${pnum}]`).addClass(\"active\")\n\n    this.renderCurrentPage()\n  }\n\n  renderCurrentPage() {\n    const cp = this.currentPage\n    const rows = this.loadout.pages[cp]\n    this.v_wheel_currentPage.text(cp + 1)\n\n    rows.forEach((row, i) => {\n      let name = null\n      if(Array.isArray(row)) {\n        name = row[0]\n      } else {\n        name = row\n        row = []\n      }\n\n      const slot = this.slot(i)\n      this.renderSlot(slot, name)\n    })\n  }\n\n  renderSlot(slot, name) {\n    const slot_name = slot.find(`[data-slot-v=\"name\"]`)\n    const slot_desc = slot.find(`[data-slot-v=\"description\"]`)\n    const slot_img = slot.find(`[data-slot-v=\"image\"]`)\n    const slot_hstrings = slot.find(`[data-slot-v=\"hotstrings\"]`)\n    slot.removeClass(\"empty-slot\").removeClass(\"failed-slot\")\n    slot.removeData(\"selectedEmote\")\n    slot_hstrings.html(\"\")\n\n    if(!name) {\n      slot.addClass(\"empty-slot\")\n      slot_name.text(\"empty slot\").attr(\"title\", \"\")\n      slot_desc.html(\"\").attr(\"title\", \"\")\n      slot_img.removeAttr(\"title\").removeAttr(\"src\")//.attr(\"src\", emote[1])\n      return\n    }\n\n    const emote = this.emotes[name]\n    if(emote) {\n      slot.data(\"selectedEmote\", name)\n      slot_name.text(name).attr(\"title\", name)\n      slot_desc.text(emote[0]).attr(\"title\", emote[0])\n      const [p,r,c] = this.fati2prc(emote[2])\n      slot_img.removeAttr(\"src\").attr(\"src\", emote[1]).attr(\"title\", `${p} Page\\n${r} Row\\n${c} Col\\n(ingame location)`)\n\n      const hstrings = this.loadout.hotstrings[name]\n      if(hstrings) {\n        hstrings.forEach(hs => {\n          const span = $(\"<span>\").addClass(\"me-1 badge bg-dark\").text(hs)\n          slot_hstrings.append(span)\n        })\n      }\n    } else {\n      slot.addClass(\"failed-slot\")\n      slot_name.text(name).attr(\"title\", name)\n      const emsg = `Could not find this emote for some reason`\n      slot_desc.text(emsg).attr(\"title\", emsg)\n      slot_img.removeAttr(\"title\").removeAttr(\"src\")\n      console.error(\"failed to find emote: \" + name)\n    }\n  }\n\n  find(selector) { return this.el.find(selector) }\n}\n\nexport { EmoteLoadoutUI }\n", "import * as AppOS from \"../appos/appos\"\n\nconst DEV = false\n\nclass TwitchDrops {\n  constructor(app, el, mapper, opts = {}) {\n    this.opts = Object.assign({}, { is: \"ui\" }, opts)\n    this.app = app\n    this.el = el\n    this.mapper = mapper\n  }\n\n  hook() {\n    if (this.opts.is == \"ui\") {\n\n    } else if (this.opts.is == \"overview\") {\n      this.el.find(`[data-drop]`).each((i, el) => {\n        const dropEl = $(el)\n        const drop = dropEl.data(\"drop\")\n        const tip = bootstrap.Tooltip.getInstance(dropEl)\n        const indicator = dropEl.find(`.spinner-grow`)\n        const vOwned = dropEl.find(`[data-v=\"owned\"]`)\n        const vOwnedPercent = dropEl.find(`[data-v=\"ownedPercent\"]`)\n\n        indicator.removeClass(\"spinner-grow spinner-grow-sm\").addClass(\"spinner-border spinner-border-sm\")\n        this.mapper.do(map => {\n          indicator.remove()\n          const owned = drop.items.filter(i => map.items.includes(i))\n          const perc = owned.length / drop.items.length * 100\n          const startsIn = new Date(drop.start_at) - new Date()\n          const timeRemaining = new Date(drop.end_at) - new Date()\n          let percStr = `${perc.toFixed(0)}%`\n          if(percStr == \"100%\" && owned.length < drop.items.length) percStr = \"99%\"\n\n          vOwned.text(owned.length)\n          vOwnedPercent.text(`(${percStr})`)\n\n          if (owned.length == drop.items.length) {\n            dropEl.addClass(\"text-success\")\n            dropEl.attr(\"data-bs-original-title\", `you own all items<br>\u2013 click for info \u2013`)\n          } else if (startsIn > 0) {\n            const lessThan12Hours = startsIn < (12 * 60 * 60 * 1000)\n            dropEl.addClass(`text-${lessThan12Hours ? \"info\" : \"muted\"} fw-bold`)\n            dropEl.attr(\"data-bs-original-title\", `UPCOMING DROP<br>starts in ${this.humanizeSeconds(startsIn /  1000)}<br>\u2013 click for info \u2013`)\n          } else {\n            const lessThan12Hours = timeRemaining < (12 * 60 * 60 * 1000)\n            dropEl.addClass(`text-${lessThan12Hours ? \"danger\" : \"warning\"} fw-bold`)\n            dropEl.attr(\"data-bs-original-title\", `ends in ${this.humanizeSeconds(timeRemaining /  1000)}<br>\u2013 click for info \u2013`)\n          }\n        })\n      })\n    }\n\n    return this\n  }\n\n  humanizeSeconds(seconds) {\n    let res = []\n\n    res.push(Math.floor(seconds / (86400 * 365)))\n    seconds -= res[res.length - 1] * (86400 * 365)\n\n    res.push(Math.floor(seconds / 86400))\n    seconds -= res[res.length - 1] * 86400\n\n    res.push(Math.floor(seconds / 3600))\n    seconds -= res[res.length - 1] * 3600\n\n    res.push(Math.floor(seconds / 60))\n    seconds -= res[res.length - 1] * 60\n\n    res.push(Math.floor(seconds))\n    while(res[0] == 0) { res.shift() }\n\n    const stra = []\n    res.reverse().forEach((el, i) => {\n      switch (i) {\n        case 0: // seconds\n          if(res.length < 2) stra.push(`${el}s`)\n          break;\n        case 1: // minutes\n          stra.push(`${el}m`)\n          break;\n        case 2: // hours\n          stra.push(`${el}h`)\n          break;\n        case 3: // days\n          stra.push(`${el}d`)\n          break;\n        case 4: // years?\n          stra.push(`${el}y`)\n          break;\n      }\n    })\n\n    return stra.reverse().join(\" \")\n  }\n}\n\nexport { TwitchDrops }\n", "import * as AppOS from \"../appos/appos\"\n\nconst DEV = false\n\nclass InsiderTimer {\n  constructor(app, el, opts = {}) {\n    this.app = app\n    this.el = el\n    this.opts = opts\n    this.fmt = new Intl.NumberFormat('en-US')\n\n    this.countdownMillis = 60 * 60 * 1000\n    this.tickRate = 250\n    this.saveRate = 10 * 1000\n  }\n\n  hook() {\n    this.b_start = this.find(`[data-sotpf-act=\"timer:start\"]`)\n    this.b_pause = this.find(`[data-sotpf-act=\"timer:pause\"]`)\n    this.b_reset = this.find(`[data-sotpf-act=\"timer:reset\"]`)\n    this.p_timing = this.find(`.progress-bar[data-timer-progress-timing]`).get(0)\n    this.p_done = this.find(`.progress-bar[data-timer-progress-done]`).get(0)\n    this.v_elapsed = this.find(`[data-timer-elapsed]`)\n    this.v_remain = this.find(`[data-timer-remain]`)\n    this.v_percent = this.find(`[data-timer-percent]`)\n    this.i_save = this.find(`[data-timer-save-indicator]`)\n    this.i_autosave = this.find(`[data-timer-autosave-indicator]`)\n    this.i_load = this.find(`[data-timer-load-indicator]`)\n    this.i_destroy = this.find(`[data-timer-destroy-indicator]`)\n\n    this.b_start.click(ev => {\n      ev.preventDefault()\n      ev.currentTarget.blur()\n      this.start()\n    })\n    this.b_pause.click(ev => {\n      ev.preventDefault()\n      ev.currentTarget.blur()\n      this.pause()\n    })\n    this.b_reset.click(ev => {\n      ev.preventDefault()\n      ev.currentTarget.blur()\n      this.reset()\n    })\n\n    if(!this.restoreState()) this.reset()\n\n    return this\n  }\n\n  LSsave(key, value) {\n    localStorage.setItem(`sotpv_${key}`, JSON.stringify(value))\n    return localStorage.setItem(`sotpv_${key}`, JSON.stringify(value))\n  }\n\n  LSload(key, defVal) {\n    try {\n      return JSON.parse(localStorage.getItem(`sotpv_${key}`)) ?? defVal\n    } catch(e) {\n      console.error(e)\n      return defVal\n    }\n  }\n\n  LSdestroy(key) {\n    return localStorage.removeItem(`sotpv_${key}`)\n  }\n\n  stopIndicators() {\n    this.i_destroy.stop(true, true).hide()\n    this.i_load.stop(true, true).hide()\n    this.i_save.stop(true, true).hide()\n    this.i_autosave.stop(true, true).hide()\n  }\n\n  saveState(fakePause = false) {\n    if(!this._t_state) return false\n    let data = this._t_state\n    if (fakePause) {\n      data = Object.assign({}, data, { paused_at: Date.now() })\n    }\n    this.lastSaved = Date.now()\n    this.stopIndicators()\n    if(fakePause) {\n      this.i_autosave.fadeIn(300).delay(1250).fadeOut(300)\n    } else {\n      this.i_save.fadeIn(300).delay(1250).fadeOut(300)\n    }\n    return this.LSsave(\"insider_timer.state\", data)\n  }\n\n  getState() {\n    return this.LSload(\"insider_timer.state\")\n  }\n\n  deleteState() {\n    if(!this.getState()) return false\n    this.stopIndicators()\n    this.i_destroy.fadeIn(300).delay(1250).fadeOut(300)\n    return this.LSdestroy(\"insider_timer.state\")\n  }\n\n  restoreState() {\n    const state = this.getState()\n    if(!state) return false\n\n    this.stopIndicators()\n    this.i_load.fadeIn(300).delay(1250).fadeOut(300)\n\n    clearTimeout(this._t_tick)\n    this._t_state = state\n    this.tick()\n    return true\n  }\n\n  initCountdown() {\n    // this.countdownTarget\n    clearTimeout(this._t_tick)\n    this._t_state = {\n      done: false,\n      elapsed: 0,\n      target: this.countdownMillis,\n      remain: this.countdownMillis,\n      paused_for: 0,\n      paused_at: 0,\n    }\n  }\n\n  get running() {\n    return (this._t_state?.elapsed ?? 0) > 0\n  }\n\n  get paused() {\n    return !!this._t_state?.paused_at\n  }\n\n  get done() {\n    return !!this._t_state?.done\n  }\n\n  start() {\n    this.b_pause.show()\n    this.b_start.hide()\n    this.b_reset.hide()\n    this.lastSaved = Date.now()\n\n    if(this.paused) {\n      this._t_state.paused_for += Date.now() - this._t_state.paused_at\n      delete this._t_state.paused_at\n    } else {\n      this._t_state.started_at = Date.now()\n      this.tick()\n    }\n  }\n\n  pause() {\n    this._t_state.paused_at = Date.now()\n    this.saveState()\n    this.b_pause.hide()\n    this.b_start.show()\n    this.b_reset.show()\n  }\n\n  reset() {\n    this.deleteState()\n    this.initCountdown()\n    this.render()\n  }\n\n  tick(reschedule = true) {\n    this.update()\n    this.render()\n\n    if(!this.paused && Date.now() - this.lastSaved > this.saveRate) {\n      this.saveState(true)\n    }\n\n    if(reschedule) this._t_tick = setTimeout(_ => this.tick(), this.tickRate)\n  }\n\n  update() {\n    let t_delta = Date.now() - this._t_state.started_at\n    t_delta -= this._t_state.paused_for\n    if(this.paused) {\n      t_delta -= Date.now() - this._t_state.paused_at\n    }\n\n    this._t_state.elapsed = t_delta\n    this._t_state.remain = this._t_state.target - t_delta\n    this._t_state.done = this._t_state.remain < 0\n  }\n\n  render() {\n    if(this.running) {\n      if(this.done) {\n        if(this.p_timing.style.display != \"none\") this.p_timing.style.display = \"none\"\n        if(this.p_done.style.display != \"block\") this.p_done.style.display = \"block\"\n      } else {\n        if(this.p_timing.style.display != \"block\") this.p_timing.style.display = \"block\"\n        if(this.p_done.style.display != \"none\") this.p_done.style.display = \"none\"\n      }\n    } else {\n      if(this.p_timing.style.display != \"none\") this.p_timing.style.display = \"none\"\n      if(this.p_done.style.display != \"none\") this.p_done.style.display = \"none\"\n    }\n\n    const perc = this._t_state.elapsed / this._t_state.target * 100.0\n    this.v_elapsed.html(this.formatMillis(this._t_state.elapsed))\n    this.v_remain.html(this.formatMillis(this._t_state.remain))\n    this.v_percent.html(this.formatPercent(perc))\n    this.p_timing.style.width = `${perc.toFixed(6)}%`\n  }\n\n  formatMillis(ms) {\n    let neg = ms < 0\n    let fms = Math.abs(Math.round(ms / 1000))\n    let h = false\n    if(this._t_state.done) {\n      h = fms / (60 * 60)\n      fms = fms % (60 * 60)\n    }\n    const m = fms / (60)\n    fms = fms % (60)\n    const s = fms // (1000)\n    // fms = fms % (1000)\n    let f_h = Math.floor(h).toFixed(0)\n    let f_m = Math.floor(m).toFixed(0)\n    if(f_m.length < 2) f_m = \"0\" + f_m\n    let f_s = Math.floor(s).toFixed(0)\n    if(f_s.length < 2) f_s = \"0\" + f_s\n    return `${neg ? \"-\" : \"\"}${f_h && f_h != \"0\" ? `${f_h}:` : \"\"}${f_m}:${f_s}`\n  }\n\n  formatPercent(rat) {\n    return rat.toFixed(2) + \"%\"\n  }\n\n  find(selector) { return this.el.find(selector) }\n}\n\nexport { InsiderTimer }\n", "\nclass KeyModal {\n  constructor(parent, opts = {}) {\n    this.opts = opts\n  }\n\n  modal() {\n    return bootstrap.Modal.getOrCreateInstance(this.div, this.opts)\n  }\n\n  open(d) {\n    this.build(d)\n    this.modal().show()\n    return this\n  }\n\n  close(d) {\n    this.build(d)\n    this.modal().hide()\n    return this\n  }\n\n  destroy() {\n    this.modal().dispose()\n    delete this._modal\n    this.div.remove()\n    delete this.div\n  }\n\n  build(d) {\n    if (this.div) return this\n    this.div = this._buildDOM()\n\n    this.submitBtn = this.div.find('[type=\"submit\"]') //.attr(\"disabled\", \"disabled\")\n    this.iToken = this.div.find('input[name=authenticity_token]').val($(\"meta[name=csrf-token]\").attr(\"content\"))\n    this.iReturnUrl = this.div.find('input[name=return_url]').val(window.location.href)\n    this.iRefresh = this.div.find('select[name=refresh_interval]').val(d.refresh_interval)\n    this.iKey = this.div.find('input[name=refresh_token]').val(d.refresh_token)\n    this.iPollBalance = this.div.find('input[name=poll_balance]')\n    if(d.poll_balance) this.iPollBalance.attr(\"checked\", d.poll_balance)\n\n    if(d.refresh_error) {\n      this.div.find('.api-error code').text(d.refresh_error)\n      this.div.find('.api-error').show()\n    }\n\n    // this.div.on \"show.bs.modal\", (ev) => this.cmenu?.close()\n    // this.div.on \"shown.bs.modal\", (ev) => this.initMedia()\n    this.div.on(\"hidden.bs.modal\", ev => this.destroy())\n    this.div.find(\"form\").attr(\"action\", d.update_url)\n\n    this.div.appendTo($(\"body\"))\n    return this\n  }\n\n  _buildDOM() {\n    return $(`\n      <div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n        <div class=\"modal-dialog modal-lg\" role=\"document\">\n          <div class=\"modal-content\">\n            <form action=\"\" method=\"post\" class=\"form-horizontal m-0\" data-turbo=\"false\">\n              <input type=\"hidden\" name=\"authenticity_token\" value=\"\" />\n              <div class=\"modal-header\">\n                <h5 class=\"modal-title\">Refresh token</h5>\n                <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n              </div>\n              <div class=\"modal-body pb-0\">\n                <p>\n                  You can optionally provide us with your rat-cookie which allows us to automatically update\n                  your data\n                </p>\n                <p class=\"text-center\">\n                  <small class=\"form-text text-warning fw-bold\">\n                    <i class=\"bi bi-exclamation-triangle\"></i> You should generally not do this, I don't even know what I <em>could</em> do with this cookie. I know that I trust myself but do you? For security reasons (like sharing your non-sharing link) the cookie will not be displayed again. To remove it clear the pseudo-key and save it empty.\n                  </small>\n                </p>\n\n                <div class=\"api-error text-center\" style=\"display: none\">\n                  <hr>\n                  <span class=\"form-text text-danger fw-bold\">\n                    <i class=\"bi bi-exclamation-triangle bi-large\"></i> <big>Failed to query API!</big>\n                    <br><code></code>\n                  </span>\n                </div>\n\n                <div class=\"modal-footer mt-3 py-0 justify-content-center\">\n                </div>\n\n                <div class=\"mt-3 row\">\n                  <label class=\"col-4 col-lg-3 col-form-label text-right\" for=\"spf_key\">rat-cookie</label>\n                  <div class=\"col-8 col-lg-9\">\n                    <input class=\"form-control\" type=\"text\" name=\"refresh_token\" id=\"spf_key\" placeholder=\"<rat cookie value>\">\n                    <small class=\"form-text text-muted\">\n                      leave empty to remove and disable this feature\n                    </small>\n                  </div>\n                </div>\n\n                <div class=\"mt-3 row\">\n                  <label class=\"col-4 col-lg-3 col-form-label text-right\" for=\"spf_refresh\">auto-refresh</label>\n                  <div class=\"col-8 col-lg-9\">\n                    <select class=\"form-select\" name=\"refresh_interval\" id=\"spf_refresh\">\n                      <option value=\"\">disabled</option>\n                      <option value=\"1440\">once a day</option>\n                      <option value=\"10080\">once a week</option>\n                      <option value=\"43800\">once a month</option>\n                    </select>\n                    <small class=\"form-text text-info\">\n                      <i class=\"bi bi-info-circle\"></i> you can trigger manual refreshes on demand\n                    </small>\n                  </div>\n                </div>\n\n                <div class=\"mt-3 row\">\n                  <div class=\"col-4 col-lg-3 text-right\">Poll currencies</div>\n                  <div class=\"col-8 col-lg-9\">\n                    <div class=\"form-check\">\n                      <input class=\"form-check-input\" type=\"checkbox\" value=\"1\" name=\"poll_balance\" id=\"spf_poll_balance\">\n                      <label class=\"form-check-label\" for=\"spf_poll_balance\">\n                        periodically query your ingame currencies\n                      </label>\n                    </div>\n                    <small class=\"form-text text-muted\">\n                      (for the purpose of graphing)\n                    </small>\n                  </div>\n                </div>\n\n                <div class=\"modal-footer mt-3 py-2 justify-content-center\">\n                  <small class=\"form-text text-danger text-center\">\n                    <i class=\"bi bi-exclamation-circle\"></i> Token used to be valid for 14 days but Rare changed it to <strong>3 days</strong> which makes this rather annoying :(\n                  </small>\n\n                  <small class=\"form-text text-info text-center\">\n                    <i class=\"bi bi-info-circle\"></i> The token is valid for <strike>14 days</strike> <strong class=\"text-warning\">3 days</strong>, starting from the moment you log in to the SoT website.<br>Check frequently (key button will turn red) and update when needed!\n                  </small>\n                </div>\n\n              <div class=\"modal-footer d-flex justify-content-between\">\n                <span></span>\n                <div>\n                  <button type=\"submit\" class=\"btn btn-primary\">Apply</button>\n                  <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button>\n                </div>\n              </div>\n            </form>\n         </div>\n        </div>\n      </div>\n    `)\n  }\n}\n\nexport { KeyModal }\n", "\nclass FavModal {\n  constructor(parent, opts = {}) {\n    this.opts = opts\n  }\n\n  modal() {\n    return bootstrap.Modal.getOrCreateInstance(this.div, this.opts)\n  }\n\n  open(d) {\n    this.build(d)\n    this.modal().show()\n    return this\n  }\n\n  close(d) {\n    this.build(d)\n    this.modal().hide()\n    return this\n  }\n\n  destroy() {\n    this.modal().dispose()\n    delete this._modal\n    this.div.remove()\n    delete this.div\n  }\n\n  build(d) {\n    if (this.div) return this\n    this.div = this._buildDOM()\n\n    console.log(d)\n    this.submitBtn = this.div.find('[type=\"submit\"]') //.attr(\"disabled\", \"disabled\")\n    this.iToken = this.div.find('input[name=authenticity_token]').val($(\"meta[name=csrf-token]\").attr(\"content\"))\n    this.iReturnUrl = this.div.find('input[name=return_url]').val(window.location.href)\n    this.iFavs = this.div.find('textarea[name=favs]').val(d.favorites.join(\"\\n\"))\n\n    // this.div.on \"show.bs.modal\", (ev) => this.cmenu?.close()\n    // this.div.on \"shown.bs.modal\", (ev) => this.initMedia()\n    this.div.on(\"hidden.bs.modal\", ev => this.destroy())\n    this.div.find(\"form\").attr(\"action\", d.update_url)\n\n    this.div.appendTo($(\"body\"))\n    return this\n  }\n\n  _buildDOM() {\n    return $(`\n      <div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n        <div class=\"modal-dialog modal-lg\" role=\"document\">\n          <div class=\"modal-content\">\n            <form action=\"\" method=\"post\" class=\"form-horizontal m-0\" data-turbo=\"false\">\n              <input type=\"hidden\" name=\"authenticity_token\" value=\"\" />\n              <input type=\"hidden\" name=\"push\" value=\"true\" />\n              <div class=\"modal-header\">\n                <h5 class=\"modal-title\">Edit Favorites</h5>\n                <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n              </div>\n              <div class=\"modal-body\">\n                <div class=\"row\">\n                  <div class=\"col-12\">\n                    <textarea class=\"form-control text-nowrap\" type=\"text\" name=\"favs\" id=\"spf_favs\" style=\"height: 300px\"></textarea>\n                  </div>\n\n                  <div class=\"mt-2 text-small\">\n                    <details>\n                      <summary>advanced formatting</summary>\n                      <div class=\"text-muted\">\n                        You can use markdown or simple HTML to create headings or whatever you fancy. Start a line with a <kbd>~</kbd> (tilde) and remember that only one-liners work!\n                        Try these examples:\n                        <pre class=\"mb-0 mt-2\"><code>~# this is a big heading (h1)<br>~### it goes down<br>~###### all the way down to a h6<br>~*italic* **bold** _underline_ ~~strike~~ ==highlight==</code><br>~&lt;div class=\"alert alert-danger\"&gt;pretty lenient HTML support, don't make me take it away :)&lt;/div&gt;<br>~&lt;span class=\"badge bg-primary text-large\"&gt;Commendations&lt;/span&gt;<br>~&lt;a href=\"%profile%/reputation?tab=BilgeRats&hideCompleted=1\" class=\"btn btn-info\"&gt;Missing Bilge Rats commendations&lt;/a&gt;<br>*~ hidden in shared view, * works for other favorites too</pre>\n                        <p class=\"mb-0 mt-1 text-small\">\n                          Only within a-href you can use <code>%profile%</code> to replace with your profile base URL (which is either your private or share token or \"<span class=\"text-nowrap\">my-profile</span>\" depending on view context). You can use <a href=\"https://getbootstrap.com/docs/5.3/utilities/text/\" target=\"_blank\" rel=\"noreferrer noopener\">all of bootstrap</a>!\n                        </p>\n                      </div>\n                    </details>\n                  </div>\n                </div>\n              </div>\n\n              <div class=\"modal-footer d-flex justify-content-between\">\n                <span class=\"text-info\">\n                  <i class=\"bi bi-info-circle\"></i>\n                  <span class=\"text-small\"> reorder or remove lines, empty lines will be ignored</span>\n                </span>\n                <div>\n                  <button type=\"submit\" class=\"btn btn-primary\">Apply</button>\n                  <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button>\n                </div>\n              </div>\n            </form>\n         </div>\n        </div>\n      </div>\n    `)\n  }\n}\n\nexport { FavModal }\n", "\nclass FatHelpModal {\n  constructor(parent, opts = {}) {\n    this.opts = opts\n  }\n\n  modal() {\n    return bootstrap.Modal.getOrCreateInstance(this.div, this.opts)\n  }\n\n  open(d) {\n    this.build(d)\n    this.modal().show()\n    return this\n  }\n\n  close(d) {\n    this.build(d)\n    this.modal().hide()\n    return this\n  }\n\n  destroy() {\n    this.modal().dispose()\n    delete this._modal\n    this.div.remove()\n    delete this.div\n  }\n\n  build(d) {\n    if (this.div) return this\n    this.div = this._buildDOM()\n    this.div.appendTo($(\"body\"))\n    return this\n  }\n\n  _buildDOM() {\n    return $(`\n      <div class=\"modal fade\" tabindex=\"-1\" role=\"dialog\">\n        <div class=\"modal-dialog modal-lg\" role=\"document\">\n          <div class=\"modal-content\">\n            <div class=\"modal-header\">\n              <h3 class=\"modal-title\">Find-A-Thing\u2122</h4>\n              <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n            </div>\n            <div class=\"modal-body\">\n              <div class=\"row\">\n                <div class=\"col-12 text-big\">\n                  <p>If we have mapped a given category you might find something like this:</p>\n                  <p class=\"text-big\"><code><i class=\"bi bi-geo pe-1\" style=\"white-space: nowrap\"></i> P3 R2 C1</code></p>\n                  <p>This tells you where you will find a given item ingame, for the example above:</p>\n                  <ul>\n                    <li><code>P</code>age <code>3</code></li>\n                    <li><code>R</code>ow <code>2</code></li>\n                    <li><code>C</code>olumn <code>1</code></li>\n                  </ul>\n                  <p>Please note that these \"coordinates\" are relative! That means a coordinate on an <code>all</code>-tab is different to a filtered sub-tab like <code>banjos</code>.</p>\n                  <p class=\"text-danger\">\n                    Important: This relies on your profile data being up to date!\n                  </p>\n                  <p class=\"text-small m-0\">\n                    If a category is mapped it will also tell you how many items exist in that\n                    category (obtainable or not) and how much (in %) you own. You may also sort\n                    after game order.\n                  </p>\n                </div>\n                <div class=\"col-12 text-muted text-small\">\n                  <hr>\n                  <p>\n                    Please note that these mappings will become outdated with a game content update. This should however\n                    only result in missing \"coordinates\" as new items are typically appended to the lists.\n                    <span class=\"text-warning\">So if you are missing a coordinate look at the last page(s) ingame!</span>\n                  </p>\n                  <p>\n                    Sometimes the SoT website returns strange data (translation errors probably) that temporarily break\n                    the mapping and lookup process. You must update your data once Rare fixed their site to get it back\n                    to working. Remember that you can also view older snapshots.\n                  </p>\n                  <p class=\"m-0\">\n                    If something isn't right, please let me know (see footer)\n                  </p>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"modal-footer d-flex justify-content-between\">\n              <span></span>\n              <div>\n                <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\n              </div>\n            </div>\n         </div>\n        </div>\n      </div>\n    `)\n  }\n}\n\nexport { FatHelpModal }\n", "// canvas-confetti v1.9.4 built on 2025-10-25T05:14:56.640Z\nvar module = {};\n\n// source content\n/* globals Map */\n\n(function main(global, module, isWorker, workerSize) {\n  var canUseWorker = !!(\n    global.Worker &&\n    global.Blob &&\n    global.Promise &&\n    global.OffscreenCanvas &&\n    global.OffscreenCanvasRenderingContext2D &&\n    global.HTMLCanvasElement &&\n    global.HTMLCanvasElement.prototype.transferControlToOffscreen &&\n    global.URL &&\n    global.URL.createObjectURL);\n\n  var canUsePaths = typeof Path2D === 'function' && typeof DOMMatrix === 'function';\n  var canDrawBitmap = (function () {\n    // this mostly supports ssr\n    if (!global.OffscreenCanvas) {\n      return false;\n    }\n\n    try {\n      var canvas = new OffscreenCanvas(1, 1);\n      var ctx = canvas.getContext('2d');\n      ctx.fillRect(0, 0, 1, 1);\n      var bitmap = canvas.transferToImageBitmap();\n      ctx.createPattern(bitmap, 'no-repeat');\n    } catch (e) {\n      return false;\n    }\n\n    return true;\n  })();\n\n  function noop() {}\n\n  // create a promise if it exists, otherwise, just\n  // call the function directly\n  function promise(func) {\n    var ModulePromise = module.exports.Promise;\n    var Prom = ModulePromise !== void 0 ? ModulePromise : global.Promise;\n\n    if (typeof Prom === 'function') {\n      return new Prom(func);\n    }\n\n    func(noop, noop);\n\n    return null;\n  }\n\n  var bitmapMapper = (function (skipTransform, map) {\n    // see https://github.com/catdad/canvas-confetti/issues/209\n    // creating canvases is actually pretty expensive, so we should create a\n    // 1:1 map for bitmap:canvas, so that we can animate the confetti in\n    // a performant manner, but also not store them forever so that we don't\n    // have a memory leak\n    return {\n      transform: function(bitmap) {\n        if (skipTransform) {\n          return bitmap;\n        }\n\n        if (map.has(bitmap)) {\n          return map.get(bitmap);\n        }\n\n        var canvas = new OffscreenCanvas(bitmap.width, bitmap.height);\n        var ctx = canvas.getContext('2d');\n        ctx.drawImage(bitmap, 0, 0);\n\n        map.set(bitmap, canvas);\n\n        return canvas;\n      },\n      clear: function () {\n        map.clear();\n      }\n    };\n  })(canDrawBitmap, new Map());\n\n  var raf = (function () {\n    var TIME = Math.floor(1000 / 60);\n    var frame, cancel;\n    var frames = {};\n    var lastFrameTime = 0;\n\n    if (typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function') {\n      frame = function (cb) {\n        var id = Math.random();\n\n        frames[id] = requestAnimationFrame(function onFrame(time) {\n          if (lastFrameTime === time || lastFrameTime + TIME - 1 < time) {\n            lastFrameTime = time;\n            delete frames[id];\n\n            cb();\n          } else {\n            frames[id] = requestAnimationFrame(onFrame);\n          }\n        });\n\n        return id;\n      };\n      cancel = function (id) {\n        if (frames[id]) {\n          cancelAnimationFrame(frames[id]);\n        }\n      };\n    } else {\n      frame = function (cb) {\n        return setTimeout(cb, TIME);\n      };\n      cancel = function (timer) {\n        return clearTimeout(timer);\n      };\n    }\n\n    return { frame: frame, cancel: cancel };\n  }());\n\n  var getWorker = (function () {\n    var worker;\n    var prom;\n    var resolves = {};\n\n    function decorate(worker) {\n      function execute(options, callback) {\n        worker.postMessage({ options: options || {}, callback: callback });\n      }\n      worker.init = function initWorker(canvas) {\n        var offscreen = canvas.transferControlToOffscreen();\n        worker.postMessage({ canvas: offscreen }, [offscreen]);\n      };\n\n      worker.fire = function fireWorker(options, size, done) {\n        if (prom) {\n          execute(options, null);\n          return prom;\n        }\n\n        var id = Math.random().toString(36).slice(2);\n\n        prom = promise(function (resolve) {\n          function workerDone(msg) {\n            if (msg.data.callback !== id) {\n              return;\n            }\n\n            delete resolves[id];\n            worker.removeEventListener('message', workerDone);\n\n            prom = null;\n\n            bitmapMapper.clear();\n\n            done();\n            resolve();\n          }\n\n          worker.addEventListener('message', workerDone);\n          execute(options, id);\n\n          resolves[id] = workerDone.bind(null, { data: { callback: id }});\n        });\n\n        return prom;\n      };\n\n      worker.reset = function resetWorker() {\n        worker.postMessage({ reset: true });\n\n        for (var id in resolves) {\n          resolves[id]();\n          delete resolves[id];\n        }\n      };\n    }\n\n    return function () {\n      if (worker) {\n        return worker;\n      }\n\n      if (!isWorker && canUseWorker) {\n        var code = [\n          'var CONFETTI, SIZE = {}, module = {};',\n          '(' + main.toString() + ')(this, module, true, SIZE);',\n          'onmessage = function(msg) {',\n          '  if (msg.data.options) {',\n          '    CONFETTI(msg.data.options).then(function () {',\n          '      if (msg.data.callback) {',\n          '        postMessage({ callback: msg.data.callback });',\n          '      }',\n          '    });',\n          '  } else if (msg.data.reset) {',\n          '    CONFETTI && CONFETTI.reset();',\n          '  } else if (msg.data.resize) {',\n          '    SIZE.width = msg.data.resize.width;',\n          '    SIZE.height = msg.data.resize.height;',\n          '  } else if (msg.data.canvas) {',\n          '    SIZE.width = msg.data.canvas.width;',\n          '    SIZE.height = msg.data.canvas.height;',\n          '    CONFETTI = module.exports.create(msg.data.canvas);',\n          '  }',\n          '}',\n        ].join('\\n');\n        try {\n          worker = new Worker(URL.createObjectURL(new Blob([code])));\n        } catch (e) {\n          // eslint-disable-next-line no-console\n          typeof console !== 'undefined' && typeof console.warn === 'function' ? console.warn('\uD83C\uDF8A Could not load worker', e) : null;\n\n          return null;\n        }\n\n        decorate(worker);\n      }\n\n      return worker;\n    };\n  })();\n\n  var defaults = {\n    particleCount: 50,\n    angle: 90,\n    spread: 45,\n    startVelocity: 45,\n    decay: 0.9,\n    gravity: 1,\n    drift: 0,\n    ticks: 200,\n    x: 0.5,\n    y: 0.5,\n    shapes: ['square', 'circle'],\n    zIndex: 100,\n    colors: [\n      '#26ccff',\n      '#a25afd',\n      '#ff5e7e',\n      '#88ff5a',\n      '#fcff42',\n      '#ffa62d',\n      '#ff36ff'\n    ],\n    // probably should be true, but back-compat\n    disableForReducedMotion: false,\n    scalar: 1\n  };\n\n  function convert(val, transform) {\n    return transform ? transform(val) : val;\n  }\n\n  function isOk(val) {\n    return !(val === null || val === undefined);\n  }\n\n  function prop(options, name, transform) {\n    return convert(\n      options && isOk(options[name]) ? options[name] : defaults[name],\n      transform\n    );\n  }\n\n  function onlyPositiveInt(number){\n    return number < 0 ? 0 : Math.floor(number);\n  }\n\n  function randomInt(min, max) {\n    // [min, max)\n    return Math.floor(Math.random() * (max - min)) + min;\n  }\n\n  function toDecimal(str) {\n    return parseInt(str, 16);\n  }\n\n  function colorsToRgb(colors) {\n    return colors.map(hexToRgb);\n  }\n\n  function hexToRgb(str) {\n    var val = String(str).replace(/[^0-9a-f]/gi, '');\n\n    if (val.length < 6) {\n        val = val[0]+val[0]+val[1]+val[1]+val[2]+val[2];\n    }\n\n    return {\n      r: toDecimal(val.substring(0,2)),\n      g: toDecimal(val.substring(2,4)),\n      b: toDecimal(val.substring(4,6))\n    };\n  }\n\n  function getOrigin(options) {\n    var origin = prop(options, 'origin', Object);\n    origin.x = prop(origin, 'x', Number);\n    origin.y = prop(origin, 'y', Number);\n\n    return origin;\n  }\n\n  function setCanvasWindowSize(canvas) {\n    canvas.width = document.documentElement.clientWidth;\n    canvas.height = document.documentElement.clientHeight;\n  }\n\n  function setCanvasRectSize(canvas) {\n    var rect = canvas.getBoundingClientRect();\n    canvas.width = rect.width;\n    canvas.height = rect.height;\n  }\n\n  function getCanvas(zIndex) {\n    var canvas = document.createElement('canvas');\n\n    canvas.style.position = 'fixed';\n    canvas.style.top = '0px';\n    canvas.style.left = '0px';\n    canvas.style.pointerEvents = 'none';\n    canvas.style.zIndex = zIndex;\n\n    return canvas;\n  }\n\n  function ellipse(context, x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) {\n    context.save();\n    context.translate(x, y);\n    context.rotate(rotation);\n    context.scale(radiusX, radiusY);\n    context.arc(0, 0, 1, startAngle, endAngle, antiClockwise);\n    context.restore();\n  }\n\n  function randomPhysics(opts) {\n    var radAngle = opts.angle * (Math.PI / 180);\n    var radSpread = opts.spread * (Math.PI / 180);\n\n    return {\n      x: opts.x,\n      y: opts.y,\n      wobble: Math.random() * 10,\n      wobbleSpeed: Math.min(0.11, Math.random() * 0.1 + 0.05),\n      velocity: (opts.startVelocity * 0.5) + (Math.random() * opts.startVelocity),\n      angle2D: -radAngle + ((0.5 * radSpread) - (Math.random() * radSpread)),\n      tiltAngle: (Math.random() * (0.75 - 0.25) + 0.25) * Math.PI,\n      color: opts.color,\n      shape: opts.shape,\n      tick: 0,\n      totalTicks: opts.ticks,\n      decay: opts.decay,\n      drift: opts.drift,\n      random: Math.random() + 2,\n      tiltSin: 0,\n      tiltCos: 0,\n      wobbleX: 0,\n      wobbleY: 0,\n      gravity: opts.gravity * 3,\n      ovalScalar: 0.6,\n      scalar: opts.scalar,\n      flat: opts.flat\n    };\n  }\n\n  function updateFetti(context, fetti) {\n    fetti.x += Math.cos(fetti.angle2D) * fetti.velocity + fetti.drift;\n    fetti.y += Math.sin(fetti.angle2D) * fetti.velocity + fetti.gravity;\n    fetti.velocity *= fetti.decay;\n\n    if (fetti.flat) {\n      fetti.wobble = 0;\n      fetti.wobbleX = fetti.x + (10 * fetti.scalar);\n      fetti.wobbleY = fetti.y + (10 * fetti.scalar);\n\n      fetti.tiltSin = 0;\n      fetti.tiltCos = 0;\n      fetti.random = 1;\n    } else {\n      fetti.wobble += fetti.wobbleSpeed;\n      fetti.wobbleX = fetti.x + ((10 * fetti.scalar) * Math.cos(fetti.wobble));\n      fetti.wobbleY = fetti.y + ((10 * fetti.scalar) * Math.sin(fetti.wobble));\n\n      fetti.tiltAngle += 0.1;\n      fetti.tiltSin = Math.sin(fetti.tiltAngle);\n      fetti.tiltCos = Math.cos(fetti.tiltAngle);\n      fetti.random = Math.random() + 2;\n    }\n\n    var progress = (fetti.tick++) / fetti.totalTicks;\n\n    var x1 = fetti.x + (fetti.random * fetti.tiltCos);\n    var y1 = fetti.y + (fetti.random * fetti.tiltSin);\n    var x2 = fetti.wobbleX + (fetti.random * fetti.tiltCos);\n    var y2 = fetti.wobbleY + (fetti.random * fetti.tiltSin);\n\n    context.fillStyle = 'rgba(' + fetti.color.r + ', ' + fetti.color.g + ', ' + fetti.color.b + ', ' + (1 - progress) + ')';\n\n    context.beginPath();\n\n    if (canUsePaths && fetti.shape.type === 'path' && typeof fetti.shape.path === 'string' && Array.isArray(fetti.shape.matrix)) {\n      context.fill(transformPath2D(\n        fetti.shape.path,\n        fetti.shape.matrix,\n        fetti.x,\n        fetti.y,\n        Math.abs(x2 - x1) * 0.1,\n        Math.abs(y2 - y1) * 0.1,\n        Math.PI / 10 * fetti.wobble\n      ));\n    } else if (fetti.shape.type === 'bitmap') {\n      var rotation = Math.PI / 10 * fetti.wobble;\n      var scaleX = Math.abs(x2 - x1) * 0.1;\n      var scaleY = Math.abs(y2 - y1) * 0.1;\n      var width = fetti.shape.bitmap.width * fetti.scalar;\n      var height = fetti.shape.bitmap.height * fetti.scalar;\n\n      var matrix = new DOMMatrix([\n        Math.cos(rotation) * scaleX,\n        Math.sin(rotation) * scaleX,\n        -Math.sin(rotation) * scaleY,\n        Math.cos(rotation) * scaleY,\n        fetti.x,\n        fetti.y\n      ]);\n\n      // apply the transform matrix from the confetti shape\n      matrix.multiplySelf(new DOMMatrix(fetti.shape.matrix));\n\n      var pattern = context.createPattern(bitmapMapper.transform(fetti.shape.bitmap), 'no-repeat');\n      pattern.setTransform(matrix);\n\n      context.globalAlpha = (1 - progress);\n      context.fillStyle = pattern;\n      context.fillRect(\n        fetti.x - (width / 2),\n        fetti.y - (height / 2),\n        width,\n        height\n      );\n      context.globalAlpha = 1;\n    } else if (fetti.shape === 'circle') {\n      context.ellipse ?\n        context.ellipse(fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI) :\n        ellipse(context, fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI);\n    } else if (fetti.shape === 'star') {\n      var rot = Math.PI / 2 * 3;\n      var innerRadius = 4 * fetti.scalar;\n      var outerRadius = 8 * fetti.scalar;\n      var x = fetti.x;\n      var y = fetti.y;\n      var spikes = 5;\n      var step = Math.PI / spikes;\n\n      while (spikes--) {\n        x = fetti.x + Math.cos(rot) * outerRadius;\n        y = fetti.y + Math.sin(rot) * outerRadius;\n        context.lineTo(x, y);\n        rot += step;\n\n        x = fetti.x + Math.cos(rot) * innerRadius;\n        y = fetti.y + Math.sin(rot) * innerRadius;\n        context.lineTo(x, y);\n        rot += step;\n      }\n    } else {\n      context.moveTo(Math.floor(fetti.x), Math.floor(fetti.y));\n      context.lineTo(Math.floor(fetti.wobbleX), Math.floor(y1));\n      context.lineTo(Math.floor(x2), Math.floor(y2));\n      context.lineTo(Math.floor(x1), Math.floor(fetti.wobbleY));\n    }\n\n    context.closePath();\n    context.fill();\n\n    return fetti.tick < fetti.totalTicks;\n  }\n\n  function animate(canvas, fettis, resizer, size, done) {\n    var animatingFettis = fettis.slice();\n    var context = canvas.getContext('2d');\n    var animationFrame;\n    var destroy;\n\n    var prom = promise(function (resolve) {\n      function onDone() {\n        animationFrame = destroy = null;\n\n        context.clearRect(0, 0, size.width, size.height);\n        bitmapMapper.clear();\n\n        done();\n        resolve();\n      }\n\n      function update() {\n        if (isWorker && !(size.width === workerSize.width && size.height === workerSize.height)) {\n          size.width = canvas.width = workerSize.width;\n          size.height = canvas.height = workerSize.height;\n        }\n\n        if (!size.width && !size.height) {\n          resizer(canvas);\n          size.width = canvas.width;\n          size.height = canvas.height;\n        }\n\n        context.clearRect(0, 0, size.width, size.height);\n\n        animatingFettis = animatingFettis.filter(function (fetti) {\n          return updateFetti(context, fetti);\n        });\n\n        if (animatingFettis.length) {\n          animationFrame = raf.frame(update);\n        } else {\n          onDone();\n        }\n      }\n\n      animationFrame = raf.frame(update);\n      destroy = onDone;\n    });\n\n    return {\n      addFettis: function (fettis) {\n        animatingFettis = animatingFettis.concat(fettis);\n\n        return prom;\n      },\n      canvas: canvas,\n      promise: prom,\n      reset: function () {\n        if (animationFrame) {\n          raf.cancel(animationFrame);\n        }\n\n        if (destroy) {\n          destroy();\n        }\n      }\n    };\n  }\n\n  function confettiCannon(canvas, globalOpts) {\n    var isLibCanvas = !canvas;\n    var allowResize = !!prop(globalOpts || {}, 'resize');\n    var hasResizeEventRegistered = false;\n    var globalDisableForReducedMotion = prop(globalOpts, 'disableForReducedMotion', Boolean);\n    var shouldUseWorker = canUseWorker && !!prop(globalOpts || {}, 'useWorker');\n    var worker = shouldUseWorker ? getWorker() : null;\n    var resizer = isLibCanvas ? setCanvasWindowSize : setCanvasRectSize;\n    var initialized = (canvas && worker) ? !!canvas.__confetti_initialized : false;\n    var preferLessMotion = typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion)').matches;\n    var animationObj;\n\n    function fireLocal(options, size, done) {\n      var particleCount = prop(options, 'particleCount', onlyPositiveInt);\n      var angle = prop(options, 'angle', Number);\n      var spread = prop(options, 'spread', Number);\n      var startVelocity = prop(options, 'startVelocity', Number);\n      var decay = prop(options, 'decay', Number);\n      var gravity = prop(options, 'gravity', Number);\n      var drift = prop(options, 'drift', Number);\n      var colors = prop(options, 'colors', colorsToRgb);\n      var ticks = prop(options, 'ticks', Number);\n      var shapes = prop(options, 'shapes');\n      var scalar = prop(options, 'scalar');\n      var flat = !!prop(options, 'flat');\n      var origin = getOrigin(options);\n\n      var temp = particleCount;\n      var fettis = [];\n\n      var startX = canvas.width * origin.x;\n      var startY = canvas.height * origin.y;\n\n      while (temp--) {\n        fettis.push(\n          randomPhysics({\n            x: startX,\n            y: startY,\n            angle: angle,\n            spread: spread,\n            startVelocity: startVelocity,\n            color: colors[temp % colors.length],\n            shape: shapes[randomInt(0, shapes.length)],\n            ticks: ticks,\n            decay: decay,\n            gravity: gravity,\n            drift: drift,\n            scalar: scalar,\n            flat: flat\n          })\n        );\n      }\n\n      // if we have a previous canvas already animating,\n      // add to it\n      if (animationObj) {\n        return animationObj.addFettis(fettis);\n      }\n\n      animationObj = animate(canvas, fettis, resizer, size , done);\n\n      return animationObj.promise;\n    }\n\n    function fire(options) {\n      var disableForReducedMotion = globalDisableForReducedMotion || prop(options, 'disableForReducedMotion', Boolean);\n      var zIndex = prop(options, 'zIndex', Number);\n\n      if (disableForReducedMotion && preferLessMotion) {\n        return promise(function (resolve) {\n          resolve();\n        });\n      }\n\n      if (isLibCanvas && animationObj) {\n        // use existing canvas from in-progress animation\n        canvas = animationObj.canvas;\n      } else if (isLibCanvas && !canvas) {\n        // create and initialize a new canvas\n        canvas = getCanvas(zIndex);\n        document.body.appendChild(canvas);\n      }\n\n      if (allowResize && !initialized) {\n        // initialize the size of a user-supplied canvas\n        resizer(canvas);\n      }\n\n      var size = {\n        width: canvas.width,\n        height: canvas.height\n      };\n\n      if (worker && !initialized) {\n        worker.init(canvas);\n      }\n\n      initialized = true;\n\n      if (worker) {\n        canvas.__confetti_initialized = true;\n      }\n\n      function onResize() {\n        if (worker) {\n          // TODO this really shouldn't be immediate, because it is expensive\n          var obj = {\n            getBoundingClientRect: function () {\n              if (!isLibCanvas) {\n                return canvas.getBoundingClientRect();\n              }\n            }\n          };\n\n          resizer(obj);\n\n          worker.postMessage({\n            resize: {\n              width: obj.width,\n              height: obj.height\n            }\n          });\n          return;\n        }\n\n        // don't actually query the size here, since this\n        // can execute frequently and rapidly\n        size.width = size.height = null;\n      }\n\n      function done() {\n        animationObj = null;\n\n        if (allowResize) {\n          hasResizeEventRegistered = false;\n          global.removeEventListener('resize', onResize);\n        }\n\n        if (isLibCanvas && canvas) {\n          if (document.body.contains(canvas)) {\n            document.body.removeChild(canvas);\n          }\n          canvas = null;\n          initialized = false;\n        }\n      }\n\n      if (allowResize && !hasResizeEventRegistered) {\n        hasResizeEventRegistered = true;\n        global.addEventListener('resize', onResize, false);\n      }\n\n      if (worker) {\n        return worker.fire(options, size, done);\n      }\n\n      return fireLocal(options, size, done);\n    }\n\n    fire.reset = function () {\n      if (worker) {\n        worker.reset();\n      }\n\n      if (animationObj) {\n        animationObj.reset();\n      }\n    };\n\n    return fire;\n  }\n\n  // Make default export lazy to defer worker creation until called.\n  var defaultFire;\n  function getDefaultFire() {\n    if (!defaultFire) {\n      defaultFire = confettiCannon(null, { useWorker: true, resize: true });\n    }\n    return defaultFire;\n  }\n\n  function transformPath2D(pathString, pathMatrix, x, y, scaleX, scaleY, rotation) {\n    var path2d = new Path2D(pathString);\n\n    var t1 = new Path2D();\n    t1.addPath(path2d, new DOMMatrix(pathMatrix));\n\n    var t2 = new Path2D();\n    // see https://developer.mozilla.org/en-US/docs/Web/API/DOMMatrix/DOMMatrix\n    t2.addPath(t1, new DOMMatrix([\n      Math.cos(rotation) * scaleX,\n      Math.sin(rotation) * scaleX,\n      -Math.sin(rotation) * scaleY,\n      Math.cos(rotation) * scaleY,\n      x,\n      y\n    ]));\n\n    return t2;\n  }\n\n  function shapeFromPath(pathData) {\n    if (!canUsePaths) {\n      throw new Error('path confetti are not supported in this browser');\n    }\n\n    var path, matrix;\n\n    if (typeof pathData === 'string') {\n      path = pathData;\n    } else {\n      path = pathData.path;\n      matrix = pathData.matrix;\n    }\n\n    var path2d = new Path2D(path);\n    var tempCanvas = document.createElement('canvas');\n    var tempCtx = tempCanvas.getContext('2d');\n\n    if (!matrix) {\n      // attempt to figure out the width of the path, up to 1000x1000\n      var maxSize = 1000;\n      var minX = maxSize;\n      var minY = maxSize;\n      var maxX = 0;\n      var maxY = 0;\n      var width, height;\n\n      // do some line skipping... this is faster than checking\n      // every pixel and will be mostly still correct\n      for (var x = 0; x < maxSize; x += 2) {\n        for (var y = 0; y < maxSize; y += 2) {\n          if (tempCtx.isPointInPath(path2d, x, y, 'nonzero')) {\n            minX = Math.min(minX, x);\n            minY = Math.min(minY, y);\n            maxX = Math.max(maxX, x);\n            maxY = Math.max(maxY, y);\n          }\n        }\n      }\n\n      width = maxX - minX;\n      height = maxY - minY;\n\n      var maxDesiredSize = 10;\n      var scale = Math.min(maxDesiredSize/width, maxDesiredSize/height);\n\n      matrix = [\n        scale, 0, 0, scale,\n        -Math.round((width/2) + minX) * scale,\n        -Math.round((height/2) + minY) * scale\n      ];\n    }\n\n    return {\n      type: 'path',\n      path: path,\n      matrix: matrix\n    };\n  }\n\n  function shapeFromText(textData) {\n    var text,\n        scalar = 1,\n        color = '#000000',\n        // see https://nolanlawson.com/2022/04/08/the-struggle-of-using-native-emoji-on-the-web/\n        fontFamily = '\"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\", \"EmojiOne Color\", \"Android Emoji\", \"Twemoji Mozilla\", \"system emoji\", sans-serif';\n\n    if (typeof textData === 'string') {\n      text = textData;\n    } else {\n      text = textData.text;\n      scalar = 'scalar' in textData ? textData.scalar : scalar;\n      fontFamily = 'fontFamily' in textData ? textData.fontFamily : fontFamily;\n      color = 'color' in textData ? textData.color : color;\n    }\n\n    // all other confetti are 10 pixels,\n    // so this pixel size is the de-facto 100% scale confetti\n    var fontSize = 10 * scalar;\n    var font = '' + fontSize + 'px ' + fontFamily;\n\n    var canvas = new OffscreenCanvas(fontSize, fontSize);\n    var ctx = canvas.getContext('2d');\n\n    ctx.font = font;\n    var size = ctx.measureText(text);\n    var width = Math.ceil(size.actualBoundingBoxRight + size.actualBoundingBoxLeft);\n    var height = Math.ceil(size.actualBoundingBoxAscent + size.actualBoundingBoxDescent);\n\n    var padding = 2;\n    var x = size.actualBoundingBoxLeft + padding;\n    var y = size.actualBoundingBoxAscent + padding;\n    width += padding + padding;\n    height += padding + padding;\n\n    canvas = new OffscreenCanvas(width, height);\n    ctx = canvas.getContext('2d');\n    ctx.font = font;\n    ctx.fillStyle = color;\n\n    ctx.fillText(text, x, y);\n\n    var scale = 1 / scalar;\n\n    return {\n      type: 'bitmap',\n      // TODO these probably need to be transfered for workers\n      bitmap: canvas.transferToImageBitmap(),\n      matrix: [scale, 0, 0, scale, -width * scale / 2, -height * scale / 2]\n    };\n  }\n\n  module.exports = function() {\n    return getDefaultFire().apply(this, arguments);\n  };\n  module.exports.reset = function() {\n    getDefaultFire().reset();\n  };\n  module.exports.create = confettiCannon;\n  module.exports.shapeFromPath = shapeFromPath;\n  module.exports.shapeFromText = shapeFromText;\n}((function () {\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n\n  return this || {};\n})(), module, false));\n\n// end source content\n\nexport default module.exports;\nexport var create = module.exports.create;\n", "// const confetti1 = new Confetti({emoji: \"\uD83C\uDF89\"})\n// confetti1.start()\n// const confetti2 = new Confetti()\n// confetti2.start()\nexport class Confetti {\n  constructor(options = {}) {\n    this.maxCount = options.maxCount || 150\n    this.speed = options.speed || 2\n    this.frameInterval = options.frameInterval || 15\n    this.alpha = options.alpha || 1.0\n    this.gradient = options.gradient || false\n    this.emoji = options.emoji || null // set to \"\uD83C\uDF89\" or [\"\uD83C\uDF89\",\"\u2728\"] to use emojis\n\n    this.particles = []\n    this.running = false\n    this.paused = false\n    this.waveAngle = 0\n    this.lastFrameTime = Date.now()\n    this.animationTimer = null\n\n    this.colors = [\n      \"rgba(30,144,255,\", \"rgba(107,142,35,\", \"rgba(255,215,0,\",\n      \"rgba(255,192,203,\", \"rgba(106,90,205,\", \"rgba(173,216,230,\",\n      \"rgba(238,130,238,\", \"rgba(152,251,152,\", \"rgba(70,130,180,\",\n      \"rgba(244,164,96,\", \"rgba(210,105,30,\", \"rgba(220,20,60,\"\n    ]\n\n    this._createCanvas(options.canvas)\n    if(options.start) this.start()\n  }\n\n  _createCanvas(existingCanvas) {\n    if (existingCanvas instanceof HTMLCanvasElement) {\n      this.canvas = existingCanvas\n    } else {\n      this.canvas = document.createElement(\"canvas\")\n      this.canvas.style.display = \"block\"\n      this.canvas.style.zIndex = 999999\n      this.canvas.style.pointerEvents = \"none\"\n      this.canvas.style.position = \"fixed\"\n      this.canvas.style.top = 0\n      document.body.prepend(this.canvas)\n    }\n\n    this.ctx = this.canvas.getContext(\"2d\")\n\n    this._resize()\n    window.addEventListener(\"resize\", () => this._resize())\n  }\n\n  _resize() {\n    this.width = window.innerWidth\n    this.height = window.innerHeight\n    this.canvas.width = this.width\n    this.canvas.height = this.height\n  }\n\n  _resetParticle(p) {\n    p.color = this.colors[(Math.random() * this.colors.length) | 0] + this.alpha + \")\"\n    p.color2 = this.colors[(Math.random() * this.colors.length) | 0] + this.alpha + \")\"\n    p.x = Math.random() * this.width\n    p.y = Math.random() * this.height - this.height\n    p.diameter = Math.random() * 10 + 5\n    p.tilt = Math.random() * 10 - 10\n    p.tiltAngleIncrement = Math.random() * 0.07 + 0.05\n    p.tiltAngle = Math.random() * Math.PI\n    if (this.emoji) {\n      const emojis = Array.isArray(this.emoji) ? this.emoji : [this.emoji]\n      p.emoji = emojis[(Math.random() * emojis.length) | 0]\n      p.fontSize = p.diameter * 2\n    }\n    return p\n  }\n\n  emitAt(x, y, count = 10) {\n    for (let i = 0; i < count; i++) {\n      const p = this._resetParticle({})\n      p.x = x\n      p.y = y\n      this.particles.push(p)\n    }\n    if (!this.animationTimer) this._runAnimation()\n  }\n\n  start(timeout, min, max) {\n    let count = this.maxCount\n    if (min !== undefined) count = min\n    if (max !== undefined) count = Math.max(min || 0, max)\n\n    while (this.particles.length < count) {\n      this.particles.push(this._resetParticle({}))\n    }\n\n    this.running = true\n    this.paused = false\n    this._runAnimation()\n\n    if (timeout) setTimeout(() => this.stop(), timeout)\n\n    return this\n  }\n\n  stop() {\n    this.running = false\n    return this\n  }\n\n  remove() {\n    this.stop()\n    this.paused = false\n    this.particles = []\n    this.ctx.clearRect(0, 0, this.width, this.height)\n    return this\n  }\n\n  pause() {\n    this.paused = true\n    return this\n  }\n\n  resume() {\n    if (!this.paused) return\n    this.paused = false\n    this._runAnimation()\n    return this\n  }\n\n  togglePause() {\n    return this.paused ? this.resume() : this.pause()\n  }\n\n  _runAnimation() {\n    if (this.paused) return\n    if (this.particles.length === 0) {\n      this.ctx.clearRect(0, 0, this.width, this.height)\n      return\n    }\n\n    this.lastBodyCheck ??= new Date()\n    if(new Date() - this.lastBodyCheck > 1000) {\n      if(!document.body.contains(this.canvas)) return false\n      this.lastBodyCheck = new Date()\n    }\n\n    const now = Date.now()\n    const delta = now - this.lastFrameTime\n    if (delta > this.frameInterval) {\n      this.ctx.clearRect(0, 0, this.width, this.height)\n      this._updateParticles()\n      this._drawParticles()\n      this.lastFrameTime = now - (delta % this.frameInterval)\n    }\n\n    this.animationTimer = requestAnimationFrame(() => this._runAnimation())\n  }\n\n  _updateParticles() {\n    this.waveAngle += 0.01\n    for (let i = 0; i < this.particles.length; i++) {\n      const p = this.particles[i]\n      if (!this.running && p.y < -15) {\n        p.y = this.height + 100\n      } else {\n        p.tiltAngle += p.tiltAngleIncrement\n        p.x += Math.sin(this.waveAngle) - 0.5\n        p.y += (Math.cos(this.waveAngle) + p.diameter + this.speed) * 0.5\n        p.tilt = Math.sin(p.tiltAngle) * 15\n      }\n\n      if (p.x > this.width + 20 || p.x < -20 || p.y > this.height) {\n        if (this.running && this.particles.length <= this.maxCount) {\n          this._resetParticle(p)\n        } else {\n          this.particles.splice(i, 1)\n          i--\n        }\n      }\n    }\n  }\n\n  _drawParticles() {\n    for (const p of this.particles) {\n      if (this.emoji) {\n        this.ctx.font = `${p.fontSize}px serif`\n        this.ctx.fillText(p.emoji, p.x, p.y)\n      } else {\n        const x2 = p.x + p.tilt\n        const y2 = p.y + p.tilt + p.diameter / 2\n        this.ctx.beginPath()\n        this.ctx.lineWidth = p.diameter\n        if (this.gradient) {\n          const grad = this.ctx.createLinearGradient(p.x, p.y, x2, y2)\n          grad.addColorStop(0, p.color)\n          grad.addColorStop(1, p.color2)\n          this.ctx.strokeStyle = grad\n        } else {\n          this.ctx.strokeStyle = p.color\n        }\n        this.ctx.moveTo(p.x + p.diameter / 2 + p.tilt, p.y)\n        this.ctx.lineTo(x2, y2)\n        this.ctx.stroke()\n      }\n    }\n  }\n}\n", "import * as AppOS from \"../appos/appos\"\n\nexport class InlineCompare {\n  static hookClicks(selectors = {}) {\n    selectors.commWithFriends ??= `[data-action=\"compareCommendationWithFriends\"]`\n\n    $(document).on(\"click\", selectors.commWithFriends, ev => {\n      ev.preventDefault()\n      ev.currentTarget.blur()\n      bootstrap.Tooltip.getInstance(ev.currentTarget)?.hide()\n      this.toggleCompareOn(ev.currentTarget)\n    })\n  }\n\n  static toggleCompareOn(clicked) {\n    const parent = clicked.closest(`[data-sotid]`)\n    if(!parent) return false\n\n    const instance = $(parent).data(\"InlineCompare\")\n    if(instance) {\n      instance.destroy()\n    } else {\n      const inst = new this(parent).load()\n      $(parent).data(\"InlineCompare\", inst)\n    }\n  }\n\n  constructor(dom) {\n    this.pvBase = document.getElementById(\"pv-main\").dataset.pvBase\n    this.dom = dom\n    this.dom_toggle = dom.querySelector(`[data-action=\"compareCommendationWithFriends\"]`)\n    this.dom_compare = this.createCompare()\n    this.dom_loading = this.dom_compare.querySelector(`[data-target=\"loading\"]`)\n    this.dom_error = this.dom_compare.querySelector(`[data-target=\"error\"]`)\n    this.dom_result = this.dom_compare.querySelector(`[data-target=\"result\"]`)\n    this.dom_table = this.dom_result.querySelector(`table`)\n\n    this.dom_toggle.classList.add(\"text-warning\")\n  }\n\n  destroy() {\n    $(this.dom).removeData(\"InlineCompare\")\n    this.dom_toggle.classList.remove(\"text-warning\")\n    this.dom_compare.remove()\n  }\n\n  createCompare() {\n    const div = document.createElement(\"div\")\n    div.classList.add(\"inline-compare-container\", \"d-flex\", \"align-items-center\", \"mb-1\")\n    div.innerHTML = `\n      <div class=\"text-info mx-auto fw-bold d-flex align-items-center gap-2 my-2 d-none\" data-target=\"loading\">\n        <div class=\"spinner-grow spinner-grow-sm text-info\"></div>\n        loading data of your friends...\n      </div>\n      <div class=\"text-danger mx-auto fw-bold d-flex align-items-center gap-2 my-2 d-none\" data-target=\"error\">\n        <i class=\"bi bi-exclamation-triangle-fill\"></i>\n        something went wrong :/\n      </div>\n      <div class=\"d-none flex-grow-1\" data-target=\"result\">\n        <table class=\"table table-sm mb-0\"></table>\n      </div>\n    `\n    this.dom.after(div)\n    return div\n  }\n\n  loadData() {\n    const favkey = this.dom.querySelector(\"[data-sotpv-togglefav]\").dataset.sotpvTogglefav\n    const params = {\n      favkey: favkey,\n    }\n    return fetch(`${this.pvBase}/favv_data?${new URLSearchParams(params)}`).then(r => r.json())\n  }\n\n  load() {\n    this.setLoading()\n    this.loadData().then(j => {\n      this.buildTable(j)\n      this.setResult()\n    }).catch(err => {\n      console.error(err)\n      this.setError(err)\n    })\n    return this\n  }\n\n  setLoading() {\n    this.dom_result.classList.add(\"d-none\")\n    this.dom_error.classList.add(\"d-none\")\n    this.dom_loading.classList.remove(\"d-none\")\n    return this\n  }\n\n  setError() {\n    this.dom_result.classList.add(\"d-none\")\n    this.dom_loading.classList.add(\"d-none\")\n    this.dom_error.classList.remove(\"d-none\")\n    return this\n  }\n\n  setResult() {\n    this.dom_loading.classList.add(\"d-none\")\n    this.dom_error.classList.add(\"d-none\")\n    this.dom_result.classList.remove(\"d-none\")\n    return this\n  }\n\n  buildTable(j) {\n    j.friends.forEach((friend, fi) => {\n      this.addRowToTable(friend, j.values.at(fi).at(0), j.meta.at(0))\n    })\n  }\n\n  addRowToTable(friend, value, meta = {}) {\n    const tr = document.createElement(\"tr\")\n\n    const td_gt = document.createElement(\"td\"); tr.append(td_gt)\n    td_gt.classList.add(\"text-end\")\n    // last_snapshot_at: \"2025-09-09T20:39:42.536Z\"\n    if(friend.favorite) {\n      const favico = document.createElement(\"span\"); td_gt.append(favico)\n      favico.classList.add(\"text-gold\")\n      favico.innerHTML = `\u2605`\n    }\n    const gt_a = document.createElement(\"a\"); td_gt.append(gt_a)\n    if(friend.favorite) gt_a.classList.add(\"text-gold\")\n    gt_a.href = `/games/sot/profile-viewer/${friend.share_token}`\n    gt_a.target = \"_blank\"\n    gt_a.innerText = `${friend.gamertag}`\n\n    const td_img = document.createElement(\"td\"); tr.append(td_img)\n    if(friend.image_url) {\n      const td_img_el = document.createElement(\"img\"); td_img.append(td_img_el)\n      td_img_el.width = \"32\"\n      td_img_el.height = \"32\"\n      td_img_el.src = `https://ip.geekya.com/32x32/${friend.image_url}`\n    }\n\n    const td_prog = document.createElement(\"td\"); tr.append(td_prog)\n    td_prog.classList.add(\"w-100\")\n    const prog = document.createElement(\"div\"); td_prog.append(prog)\n    prog.setAttribute(\"data-controller\", \"games--sot--progress\")\n    prog.setAttribute(\"data-games--sot--progress-current-value\", value)\n    prog.setAttribute(\"data-games--sot--progress-thresholds-value\", JSON.stringify(meta.thrs))\n    prog.setAttribute(\"data-games--sot--progress-graded-value\", meta.graded)\n    prog.setAttribute(\"data-games--sot--progress-boolish-value\", meta.boolish)\n    prog.setAttribute(\"data-games--sot--progress-format-value\", JSON.stringify([\"compactBarStatus\"]))\n\n    this.dom_table.append(tr)\n  }\n}\n", "export class ExternalPromise {\n  constructor() {\n    this.resolved = false\n    this.raw = new Promise((resolve, reject) => {\n      this.resolve = resolve\n      this.reject = reject\n    })\n    this.raw.finally(_ => { this.resolved = true })\n  }\n\n  get promise() { return this.raw }\n  then(...args) { return this.raw.then(...args) }\n  catch(...args) { return this.raw.catch(...args) }\n  finally(...args) { return this.raw.finally(...args) }\n}\n", "import * as AppOS from \"../appos/appos\"\nimport { ExternalPromise } from \"../appos/lib/external_promise\"\n\nclass Util {\n  static normalizeName(str) {\n    return str?.toLowerCase().trim()\n  }\n\n  static utf8ToBase64(str) {\n      const encoder = new TextEncoder()\n      const data = encoder.encode(str)\n\n      const binaryString = String.fromCharCode.apply(null, data)\n      return btoa(binaryString)\n  }\n\n  static base64ToUtf8(b64) {\n      const binaryString = atob(b64)\n      const bytes = new Uint8Array(binaryString.length)\n      for (let i = 0; i < binaryString.length; i++) {\n          bytes[i] = binaryString.charCodeAt(i)\n      }\n      const decoder = new TextDecoder()\n      return decoder.decode(bytes)\n  }\n\n  static nameToNumber(str) {\n    const q = str.toLowerCase()\n    if(q.match(/^\\d+$/)) return parseInt(q)\n    if(q == \"one\") return 1\n    if(q == \"two\") return 2\n    if(q == \"three\") return 3\n    if(q == \"four\") return 4\n    if(q == \"five\") return 5\n    if(q == \"six\") return 6\n    if(q == \"seven\") return 7\n    if(q == \"eight\") return 8\n    if(q == \"nine\") return 9\n    if(q == \"ten\") return 10\n    if(q == \"eleven\") return 11\n    return q\n  }\n\n  static parameterize(\n    string,\n    {\n      separator = \"-\",\n      preserveCase = false,\n      locale = null // kept for API parity, unused\n    } = {}\n  ) {\n    if (string == null) return \"\"\n\n    // Transliterate accented chars \u2192 ASCII\n    let parameterized = string\n      .normalize(\"NFD\")\n      .replace(/[\\u0300-\\u036f]/g, \"\")\n\n    // Turn unwanted chars into the separator\n    parameterized = parameterized.replace(/[^a-z0-9\\-_]+/gi, separator)\n\n    if (separator) {\n      const escaped = separator === \"-\"\n        ? \"-\"\n        : separator.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n\n      const reDuplicate = new RegExp(`${escaped}{2,}`, \"g\")\n      const reTrim = new RegExp(`^${escaped}|${escaped}$`, \"g\")\n\n      // Collapse duplicate separators\n      parameterized = parameterized.replace(reDuplicate, separator)\n      // Trim leading/trailing separator\n      parameterized = parameterized.replace(reTrim, \"\")\n    }\n\n    if (!preserveCase) {\n      parameterized = parameterized.toLowerCase()\n    }\n\n    return parameterized\n  }\n\n  static ledgerTiername(company, tier) {\n    if(company == \"Athena's Fortune\") return tier == 1 ? \"Legend\" : \"Guardian\"\n    if(company == \"Merchant Alliance\") return tier == 1 ? \"Admiral\" : \"Commander\"\n    if(company == \"Gold Hoarders\") return tier == 1 ? \"Captain\" : \"Marauder\"\n    if(company == \"Order of Souls\") return tier == 1 ? \"Grandee\" : \"Chief\"\n    if(company == \"Reaper's Bones\") return tier == 1 ? \"Master\" : \"Keeper\"\n    if(company == \"Hunter's Call\") return tier == 1 ? \"Master Hunter\" : \"Deft Hunter\"\n    if(company == \"Guilds\") return tier == 1 ? \"Legendary\" : \"Esteemed\"\n  }\n\n  static ordinalize(int) {\n    if(int == 1) return \"st\"\n    if(int == 2) return \"nd\"\n    if(int == 3) return \"rd\"\n    return \"th\"\n  }\n\n  static humanize(str) {\n    return `${str}`.replace(/_/g, \" \").trimLeft().replace(/^\\w/, l => l.toUpperCase())\n  }\n}\n\nclass SerializeParams {\n  static getHashParams(...args) { return AppOS.Util.getHashParams(...args) }\n  static updateHashParams(...args) { return AppOS.Util.updateHashParams(...args) }\n  static serializeHashParams(...args) { return AppOS.Util.serializeHashParams(...args) }\n  static setHashParams(...args) { return AppOS.Util.setHashParams(...args) }\n\n  static serializeDomToParams(dom) {\n    const params = {}\n    dom.querySelectorAll(`[data-filter-key]`).forEach(el => {\n      if(el.dataset.filterKey == \"_TPL_\") return false\n      const vel = el.querySelector(`[data-selected=\"true\"]`)\n      const v = vel?.dataset.role\n      const d = el.dataset.default ?? \"nil\"\n      if(v != d) params[el.dataset.filterKey] = v\n    })\n\n    const scriptSelectors = [\n      `[data-role=\"fcode\"]`,\n      `[data-role=\"scode\"]`,\n    ]\n    scriptSelectors.forEach(ss => {\n      const t = dom.querySelector(ss)\n      if(!t) return false\n      const ta = t.querySelector(\"textarea\")\n      if(!ta?.value) return false\n      params[t.dataset.role] = Util.utf8ToBase64(ta.value)\n    })\n\n    this.setHashParams(params)\n\n    return params\n  }\n\n  static parseParamsToDom(parent) {\n    const hparams = this.getHashParams()\n    Object.entries(hparams).forEach(([key, value]) => {\n      if(key == \"fcode\" || key == \"scode\") {\n        const t = parent.dom.querySelector(`[data-role=\"${key}\"]`)\n        if(!t) return false\n        const ta = t.querySelector(\"textarea\")\n        if(!ta) return false\n        t.setAttribute(\"open\", \"open\")\n        ta.value = Util.base64ToUtf8(value)\n        $(ta).change()\n      } else {\n        parent.setYnn(key, value)\n      }\n    })\n  }\n}\n\nexport class MissingEntitlements {\n  static hookClicks(selectors = {}) {\n    // selectors.commWithFriends ??= `[data-action=\"compareCommendationWithFriends\"]`\n\n    // $(document).on(\"click\", selectors.commWithFriends, ev => {\n    //   ev.preventDefault()\n    //   ev.currentTarget.blur()\n    //   bootstrap.Tooltip.getInstance(ev.currentTarget)?.hide()\n    //   this.toggleCompareOn(ev.currentTarget)\n    // })\n  }\n\n  constructor(app, dom) {\n    this.pvBase = document.getElementById(\"pv-main\").dataset.pvBase\n    this.app = app\n    this.dom = dom\n    this.filterAgainPromises = []\n\n    this.opts = {\n      defaultTags: this.dom.dataset.optDefaultTags == \"true\",\n      postprocess: this.dom.dataset.optPostprocess == \"true\",\n    }\n\n    setTimeout(async _ => {\n      try {\n        this.setStepStatus(\"load-main\", \"loading\", \"loading\u2026\")\n        await Promise.all([\n          this.loadEntitlements(),\n          await this.loadItemDb()\n        ])\n        await this.filterMissing()\n        await this.renderItems()\n        this.setStepStatus(\"load-main\", \"success\", \"done\")\n      } catch(err) {\n        console.error(err)\n        this.setStepStatus(\"load-main\", \"error\", err?.message ?? err?.statusText ?? err)\n      }\n    }, 1000)\n  }\n\n  hook() {\n    window.lol = this\n\n    $(this.dom).on(\"click\", `[data-role=\"filters-ynn\"] [type=\"button\"][data-role]`, ev => {\n      ev.preventDefault()\n      this.setYnn(ev.currentTarget.closest(`[data-filter-key]`), ev.currentTarget.dataset.role)\n      return false\n    })\n\n    $(this.dom).find(`[data-role=\"scode\"] textarea`).on(\"change\", ev => {\n      const tarea = ev.currentTarget\n      this.resetStatFuncResult()\n      this.resetStatFuncError()\n      if(tarea.value.trim() == \"help\") {\n        const help = this.statFunctionHelp()\n        tarea.rows = help.length\n        tarea.value = help.join(\"\\n\")\n      }\n      this.setStatFunction(tarea.value, true)\n    })//.change()\n\n    $(this.dom).find(`[data-role=\"fcode\"] textarea`).on(\"change\", ev => {\n      const tarea = ev.currentTarget\n      this.resetFilterFuncError()\n      if(tarea.value.trim() == \"help\") {\n        const help = this.filterFunctionHelp()\n        tarea.rows = help.length\n        tarea.value = help.join(\"\\n\")\n      }\n      this.setFilterFunction(tarea.value, true)\n    })//.change()\n\n    return this\n  }\n\n\n\n  // ========\n  // = Data =\n  // ========\n  tagItem(dbitem) {\n    dbitem.tags = new Set()\n    dbitem.owned = this.entitlementData.qitems.indexOf(dbitem.qname) > -1 || this.entitlementData.qwiki_names.indexOf(dbitem.qname) > -1\n\n    if(this.opts.defaultTags) {\n      dbitem.vtypes_from_preload.forEach(vtype => dbitem.tags.add(`__type:${vtype}`))\n\n      if(dbitem.cost != null) dbitem.tags.add(`__cost:gold`)\n      if(dbitem.cost_d != null) dbitem.tags.add(`__cost:doubloon`)\n      if(dbitem.cost_a != null) dbitem.tags.add(`__cost:ancient_coin`)\n      if(dbitem.cost_irl != null) dbitem.tags.add(`__cost:irl`)\n      if(dbitem.owned) dbitem.tags.add(`__meta:owned`)\n      if(dbitem.social) dbitem.tags.add(`__meta:social`)\n      if(dbitem.event) dbitem.tags.add(`__meta:event`)\n      if(dbitem.promobundle) dbitem.tags.add(`__meta:promobundle`)\n      if(dbitem.platform) dbitem.tags.add(`__meta:platform`)\n      if(dbitem.exclusive) dbitem.tags.add(`__meta:exclusive`)\n      if(dbitem.twitch_drop) dbitem.tags.add(`__meta:twitch_drop`)\n      if(dbitem.ledger_tier) dbitem.tags.add(`__meta:ledger`)\n      if(dbitem.insider_week != null) dbitem.tags.add(`__meta:insider`)\n      if(dbitem.timelimited != null) dbitem.tags.add(`__meta:timelimited`)\n      if(dbitem.commendation != null) dbitem.tags.add(`__meta:commendation`)\n      if(dbitem.chest != null) dbitem.tags.add(`__chest:${dbitem.chest}`)\n      if(dbitem.qsource != null) dbitem.tags.add(`__source:${dbitem.qsource}`)\n      if(dbitem.shop != null) dbitem.tags.add(`__shop:${dbitem.shop}`)\n      if(dbitem.company != null) dbitem.tags.add(`__company:${dbitem.company}`)\n    }\n\n    return dbitem.tags\n  }\n\n  updateIndices() {\n    this.missing.types = this.createIndices()\n    if(!this.initialTypeCounts) {\n      this.initialTypeCounts = {}\n      Object.entries(this.missing.types).forEach(([t, i]) => this.initialTypeCounts[t] = i.length)\n      Object.entries(this.missing.filtered).forEach(([t, i]) => this.initialTypeCounts[t] = i)\n    }\n  }\n\n  createIndices() {\n    const types = {}\n\n    this.missing.items.forEach(dbitem => {\n      (dbitem.tags ?? this.tagItem(dbitem)).forEach(tag => {\n        types[tag] ??= []\n        types[tag].push(dbitem.id)\n      })\n    })\n\n    return types\n  }\n\n  sortCountFor(el) {\n    const v = el.querySelector(`[data-selected=\"true\"]`)?.dataset.role\n    if(v == \"no\") return this.initialTypeCounts[el.dataset.filterKey] ?? 0\n    return this.missing.types[el.dataset.filterKey]?.length ?? 0\n  }\n\n\n\n  // =========\n  // = Steps =\n  // =========\n  loadEntitlements() {\n    const step = this.setStepStatus(1, \"loading\")\n    const promise = new Promise((resolve, reject) => {\n      setTimeout(_ => {\n        fetch(this.dom.dataset.entitlementUrl).then(r => r.ok ? r.json() : reject(r)).then(json => {\n          this.entitlementData = json\n          this.entitlementData.qitems = this.entitlementData.items.map(s => Util.normalizeName(s))\n          this.entitlementData.qwiki_names = this.entitlementData.wiki_names.map(s => Util.normalizeName(s))\n          this.setStepStatus(step, \"success\", `(${AppOS.Util.formatNumber(this.entitlementData.items.length)})`)\n          resolve(this.entitlementData)\n        }).catch(reject)\n      }, 50)\n    })\n\n    promise.catch(err => {\n      this.setStepStatus(step, \"error\", err?.message ?? err?.statusText ?? err)\n    })\n\n    return promise\n  }\n\n  loadItemDb() {\n    const step = this.setStepStatus(2, \"loading\")\n    // const ficken = {}\n    const promise = new Promise((resolve, reject) => {\n      setTimeout(_ => {\n        fetch(this.dom.dataset.itemdbUrl).then(r => r.ok ? r.json() : reject(r)).then(json => {\n          this.itemdbData = json\n          this.itemdbData.qsocial = this.itemdbData.social.map(s => Util.normalizeName(s))\n          this.itemdbData.qplatform = this.itemdbData.platform.map(s => Util.normalizeName(s))\n          this.itemdbData.qexclusive = this.itemdbData.exclusive.map(s => Util.normalizeName(s))\n          this.itemdbData.qtwitch_drops = this.itemdbData.twitch_drops.map(s => Util.normalizeName(s))\n          this.itemdbData.knownKeys = [\"owned\", \"tags\"]\n          this.itemdbData.items.forEach(i => {\n            i.qname ??= Util.normalizeName(i.fullname)\n            // if(i.source?.match(/^[a-z0-9\\s()']+$/i)) i.qsource = i.source\n            // else if (i.source) { ficken[i.source] ??= 0; ficken[i.source]++ }\n            if(this.opts.postprocess) {\n              if(i.vrnttype == \"Title\" && i.event?.startsWith(\"img:\")) delete i.event\n              if(i.season) i.season = Util.nameToNumber(i.season)\n              if(i.cost_irl) i.cost_irl = parseFloat(i.cost_irl)\n            }\n            if(this.itemdbData.qsocial.includes(i.qname)) i.social = true\n            if(this.itemdbData.qplatform.includes(i.qname)) i.platform = true\n            if(this.itemdbData.qexclusive.includes(i.qname)) i.exclusive = true\n            if(this.itemdbData.qtwitch_drops.includes(i.qname)) i.twitch_drop = true\n            Object.entries(i).forEach(([k, v]) => {\n              if(!this.itemdbData.knownKeys.includes(k)) this.itemdbData.knownKeys.push(k)\n            })\n          })\n          this.setStepStatus(step, \"success\", `(${AppOS.Util.formatNumber(this.itemdbData.items.length)})`)\n          // console.log(ficken)\n          resolve(this.entitlementData)\n        }).catch(reject)\n      }, 50)\n    })\n\n    promise.catch(err => {\n      this.setStepStatus(step, \"error\", err?.message ?? err?.statusText ?? err)\n    })\n\n    return promise\n  }\n\n  filterMissing() {\n    const step = this.setStepStatus(3, \"loading\")\n    const promise = new Promise((resolve, reject) => {\n      setTimeout(async _ => {\n        try {\n          this.missing = {\n            done: false,\n            i: 0,\n            items: [],\n            types: {},\n            query: this.itemdbData.items.slice(),\n            filters: new Map(),\n            filtered: {},\n            stats: {},\n            renderLimit: 500,\n            filterErrors: 0,\n            statErrors: 0,\n          }\n\n          this.dom.querySelectorAll(`[data-role=\"filters-ynn\"] [data-filter-key]`).forEach(qa => {\n            const v = qa.querySelector(`[data-selected=\"true\"]`)?.dataset.role\n            if(v != \"nil\") this.missing.filters.set(qa.dataset.filterKey, v == \"yes\")\n          })\n\n          const f_total = AppOS.Util.formatNumber(this.itemdbData.items.length)\n\n          // clear temp tags\n          this.itemdbData.items.forEach(item => {\n            if(item.tags) item.tags.forEach(t => {\n              if(!(t.startsWith(\"__\") || t.startsWith(\"$\"))) {\n                item.tags.delete(t)\n              }\n            })\n          })\n\n          await new Promise((ppresolve, ppreject) => {\n            this.filterUntilDone(ppresolve, i => {\n              // this.setStepStatus(step, null, `${AppOS.Util.formatNumber(this.missing.i)}/${f_total} (-${this.itemdbData.items.length - this.missing.i}) -- ${AppOS.Util.formatNumber(this.missing.items.length + this.missing.query.length)} missing`)\n              this.setStepStatus(step, null, `(${AppOS.Util.formatNumber(this.missing.items.length + this.missing.query.length)} -- <${AppOS.Util.formatNumber(this.itemdbData.items.length - this.missing.i)})`)\n            })\n          })\n\n          this.setStepStatus(step, \"success\", `(${AppOS.Util.formatNumber(this.missing.items.length)})`)\n          resolve()\n        } catch (err) { reject(err) }\n      }, 50)\n    })\n\n    promise.catch(err => {\n      this.setStepStatus(step, \"error\", err?.message ?? err?.statusText ?? err)\n    })\n\n    return promise\n  }\n\n  renderItems() {\n    const step = this.setStepStatus(4, \"loading\")\n\n    const promise = new Promise((resolve, reject) => {\n      setTimeout(_ => {\n        try {\n          this.createFilters()\n\n          if(!this.hasEverFiltered) {\n            this.hasEverFiltered = true\n            SerializeParams.parseParamsToDom(this)\n            if(this.filterAgainTimer) return resolve()\n          }\n\n          const entTarget = this.dom.querySelector(`[data-flist=\"entitlements\"]`)\n          const tplEl = this.dom.querySelector(`[data-role=\"template+entitlement\"]`)\n\n          // clear target (unobserve existing)\n          // const observer = window.app?.components?.ImagePerformance?.performance?.imagePerformanceObserver\n          // if(observer) this.dom.querySelectorAll(`[data-sotid]`).forEach(el => observer.unobserve(el))\n          window.app?.components?.ImagePerformance?.performance?.imagePerformanceObserver.disconnect()\n          entTarget.innerHTML = \"\"\n\n          let itemsToRender = this.missing.items\n          if(this.missing.renderLimit) itemsToRender = itemsToRender.slice(0, this.missing.renderLimit)\n          let sliced = this.missing.items.length - itemsToRender.length\n\n          const ico_gold = this.dom.querySelector(`[data-role=\"icon+gold\"]`).cloneNode(); ico_gold.classList.add(\"ms-1\")\n          const ico_doubloons = this.dom.querySelector(`[data-role=\"icon+doubloons\"]`).cloneNode(); ico_doubloons.classList.add(\"ms-1\")\n          const ico_ancient_coins = this.dom.querySelector(`[data-role=\"icon+ancient_coins\"]`).cloneNode(); ico_ancient_coins.classList.add(\"ms-1\")\n          const ico_factions = {}\n          this.dom.querySelectorAll(`[data-role=\"icon+faction\"]`).forEach(el => {\n            ico_factions[el.dataset.faction] = el.cloneNode()\n            ico_factions[el.dataset.faction].classList.add(\"me-1\")\n          })\n\n          const factionMap = [\n            [\"hoarderlevel\", \"GoldHoarders\"],\n            [\"merchantlevel\", \"MerchantAlliance\"],\n            [\"soulslevel\", \"OrderOfSouls\"],\n            [\"hunterlevel\", \"HuntersCall\"],\n            [\"seadoglevel\", \"SeaDogs\"],\n            [\"reaperlevel\", \"ReapersBones\"],\n            [\"athenalevel\", \"AthenasFortune\"],\n          ]\n\n\n          itemsToRender.forEach(item => {\n            const clone = tplEl.cloneNode(true)\n            clone.removeAttribute(\"data-role\")\n            clone.setAttribute(\"data-sotid\", `gi:${item.id}`)\n            clone.classList.remove(\"d-none\")\n\n            // generic values\n            clone.querySelectorAll(`[data-val]`).forEach(el => el.innerText = item[el.dataset.val] ?? \"\")\n            clone.querySelectorAll(`[data-vala=\"itemdb_url\"]`).forEach(el => el.href = `/games/sot/items/${item.slug}`)\n            clone.querySelectorAll(`[data-vala=\"wiki_url\"]`).forEach(el => el.href = `/games/sot/items/${item.slug}/wiki`)\n\n            // indicate owned\n            clone.querySelector(`[data-val=\"fullname\"]`).classList.toggle(\"text-success\", item.owned)\n\n            // shop + price\n            const cPrice = clone.querySelector(`[data-valc=\"price\"]`)\n            if(cPrice) {\n              if(item.shop) {\n                $(\"<span>\").html(`<i class=\"bi bi-cart4\"></i> ${item.shop}`).appendTo(cPrice)\n                if(item.cost || item.cost_d || item.cost_a || item.cost_irl) cPrice.append(\" | \")\n              }\n\n              if(item.cost) {\n                cPrice.append(AppOS.Util.formatNumber(item.cost), ico_gold.cloneNode())\n              } else if (item.cost_d) {\n                cPrice.append(AppOS.Util.formatNumber(item.cost_d), ico_doubloons.cloneNode())\n              } else if (item.cost_a) {\n                cPrice.append(AppOS.Util.formatNumber(item.cost_a), ico_ancient_coins.cloneNode())\n              } else if (item.cost_irl) {\n                cPrice.append(`${AppOS.Util.formatNumber(item.cost_irl)} $`)\n              }\n            }\n\n            // reqs\n            const cReqs = clone.querySelector(`[data-valc=\"reqs\"]`)\n            if(cReqs) {\n              if(item.bundleonly) $(\"<span>\").html(`<i class=\"bi bi-stack\"></i>`).addClass(\"ps-1 text-danger\").attr(\"title\", `bundle only: ${item.bundle}`).appendTo(cReqs)\n              if(item.bundle && !item.bundleonly) $(\"<span>\").html(`<i class=\"bi bi-stack\"></i>`).addClass(\"ps-1 text-success\").attr(\"title\", `part of bundle: ${item.bundle}`).appendTo(cReqs)\n              if(item.timelimited) $(\"<span>\").html(`<i class=\"bi bi-clock\"></i>`).addClass(\"ps-1 text-danger\").attr(\"title\", `time limited: ${item.limited_reason || \"see requirements\"}`).appendTo(cReqs)\n              if(item.insider_week) $(\"<span>\").html(`<i class=\"bi bi-eye\"></i> ${item.insider_week}`).addClass(\"ps-1 text-muted\").attr(\"title\", `insider week: ${item.insider_week}`).appendTo(cReqs)\n\n              factionMap.forEach(([key, name]) => {\n                if(item[key] == null) return false\n                $(\"<span>\")\n                  .addClass(\"d-inline-flex align-items-center ps-1 text-muted text-small\")\n                  .append(ico_factions[name]?.cloneNode(), item[key])\n                  .appendTo(cReqs)\n              })\n\n              if(item.allegiance) {\n                $(\"<span>\")\n                  .addClass(\"d-inline-flex align-items-center ps-1 text-muted text-small\")\n                  .append(ico_factions[item.faction == \"Guardians of Fortune\" ? \"PirateLord\" : \"Flameheart\"]?.cloneNode(), item.allegiance)\n                  .appendTo(cReqs)\n              }\n\n              if(item.season) {\n                $(\"<span>\")\n                  .addClass(\"ps-1 text-info\")\n                  .append(`S${item.season} @${item.season_level}`)\n                  .appendTo(cReqs)\n              }\n            }\n\n            const cDetails = clone.querySelector(`[data-valc=\"details\"]`)\n            if(cDetails) {\n              // commendation + comm_grade\n              if(item.commendation) {\n                const commLink = $(\"<a>\").attr(\"href\", `/games/sot/commendations/${Util.parameterize(item.commendation)}`).text(item.commendation)\n                if(item.comm_grade != null) {\n                  $(\"<div>\").append(`requires commendation `, commLink, ` grade ${item.comm_grade}`).appendTo(cDetails)\n                } else {\n                  $(\"<div>\").append(`requires commendation `, commLink).appendTo(cDetails)\n                }\n              }\n\n              // ledger_tier + ledger_level\n              if(item.ledger_tier) {\n                $(\"<div>\").append(`${item.company} ledger reward for reaching tier (${item.ledger_tier}) ${Util.ledgerTiername(item.company, item.ledger_tier)} for ${item.ledger_level}${Util.ordinalize(item.ledger_level)} time`).appendTo(cDetails)\n              }\n\n              // source / event / promobundle\n              if(item.source) $(\"<div>\").append($(\"<strong>\").text(\"Source: \"), `${item.source}`).appendTo(cDetails)\n              if(item.event) $(\"<div>\").append($(\"<strong>\").text(\"Event: \"), `${item.event}`).appendTo(cDetails)\n              if(item.promobundle) $(\"<div>\").append($(\"<strong>\").text(\"Promo bundle: \"), `${item.promobundle}`).appendTo(cDetails)\n\n              // requires\n              if(item.requires) {\n                const limit = 100\n                if(item.requires.length > limit) {\n                  $(\"<details>\").append(\n                    $(\"<summary>\").append($(\"<strong>\").text(\"Requires: \"), $(\"<span>\").addClass(\"visible-when-closed\").text(item.requires.slice(0, limit) + \"...\")),\n                    item.requires,\n                  ).appendTo(cDetails)\n                } else {\n                  $(\"<div>\").append($(\"<strong>\").text(\"Requires: \"), item.requires).appendTo(cDetails)\n                }\n              }\n\n              // title + title2 + legendlevel\n              if(item.legendlevel) $(\"<div>\").append(`requires title \"Pirate Legend\"`).appendTo(cDetails)\n              if(item.title) $(\"<div>\").append(`requires title \"${item.title}\"`).appendTo(cDetails)\n              if(item.title2) $(\"<div>\").append(`requires title \"${item.title2}\"`).appendTo(cDetails)\n\n              // pre-attrs\n              const pre = document.createElement(\"pre\")\n              pre.classList.add(\"mb-0\")\n              pre.innerText = JSON.stringify(item, null, 2)\n              const pre_details = document.createElement(\"details\")\n              pre_details.innerHTML = `<summary>attrs</summar>`\n              pre_details.append(pre)\n              cDetails.append(pre_details)\n            }\n\n            // ao-image\n            const aoLink = clone.querySelector(`[data-ao-spotlight=\"image\"]`)\n            const aoImage = aoLink.querySelector(`[data-ao-preview]`)\n            aoLink.setAttribute(\"href\", item.__image)\n            const observer = window.app?.components?.ImagePerformance?.performance?.imagePerformanceObserver\n\n            entTarget.append(clone)\n            if(observer) {\n              clone.classList.add(\"contains-pimage\")\n              aoImage.setAttribute(\"data-src\", `https://ip.geekya.com/96x96/${item.__image}`)\n              observer.observe(clone)\n            } else {\n              aoImage.setAttribute(\"src\", `https://ip.geekya.com/96x96/${item.__image}`)\n            }\n\n            // const div = document.createElement(\"div\")\n            // div.classList.add(\"d-flex\", \"gap-2\")\n            // const span = document.createElement(\"span\")\n            // span.classList.add(\"text-nowrap\")\n            // span.innerText = `${item.fullname}:`\n\n            // div.append(span, pre)\n            // entTarget.append(div)\n          })\n\n          if(sliced) {\n            entTarget.prepend(this.createSliceWarning(sliced))\n            entTarget.append(this.createSliceWarning(sliced))\n          }\n\n          this.setStepStatus(step, \"success\")\n          resolve()\n        } catch (err) { reject(err) }\n      }, 50)\n    })\n\n    promise.catch(err => {\n      this.setStepStatus(step, \"error\", err?.message ?? err?.statusText ?? err)\n    })\n\n    return promise\n  }\n\n\n  // ==========\n  // = Filter =\n  // ==========\n  filterAgain() {\n    if(!this.missing || !this.missing.done) return Promise.reject()\n\n    if(this.filterAgainTimer) clearTimeout(this.filterAgainTimer)\n    this.filterAgainTimer = setTimeout(async _ => {\n      delete this.filterAgainTimer\n      this.dom.querySelector(`[data-role=\"filters\"]`).classList.add(\"no-pointer-events\", \"opacity-25\")\n      this.setStepStatus(\"load-main\", \"loading\", \"loading\u2026\")\n      this.setStepStatus(3, \"loading\")\n      this.setStepStatus(4, \"waiting\")\n      await this.filterMissing()\n      await this.renderItems()\n      this.filterAgainPromises.forEach(p => p.resolve())\n      this.filterAgainPromises = []\n      this.setStepStatus(\"load-main\", \"success\", \"done\")\n    }, 10)\n\n    const promise = new ExternalPromise()\n    this.filterAgainPromises.push(promise)\n\n    return promise\n  }\n\n  filterUntilDone(resolve, progress) {\n    const filterPerFrame = 10000\n    const maxrt = 4\n    const now = performance.now()\n    let i = 0\n\n    while(this.missing.query.length && i <= filterPerFrame && (performance.now() - now <= maxrt)) {\n      const dbitem = this.missing.query.shift()\n      let filterExclusion = false\n\n      if(this.missing.filters.size && !dbitem.tags) this.tagItem(dbitem)\n\n      if(this.filterFunction) {\n        try {\n          filterExclusion = this.filterFunction(dbitem)\n        } catch (err) {\n          this.missing.filterErrors++\n          console.error(\"filterFunction failed\", err)\n          if(this.missing.filterErrors > 10) {\n            this.setFilterFuncError(err?.message ?? err?.statusText ?? err, \"FATAL 10+\")\n            this.missing.done = true\n            return resolve()\n          } else {\n            this.setFilterFuncError(err?.message ?? err?.statusText ?? err, this.missing.filterErrors)\n          }\n        }\n      }\n\n      if(!filterExclusion) {\n        this.missing.filters.forEach((v, f) => {\n          if(filterExclusion) return false\n          const tagged = dbitem.tags.has(f)\n          filterExclusion = v !== tagged\n          if(filterExclusion) {\n            this.missing.filtered[f] ??= 0\n            this.missing.filtered[f]++\n          }\n        })\n      }\n\n      if(!filterExclusion) {\n        this.missing.items.push(dbitem)\n\n        if(this.statFunction) {\n          try {\n            this.statFunction(dbitem)\n          } catch (err) {\n            this.missing.statErrors++\n            console.error(\"statFunction failed\", err)\n            if(this.missing.statErrors > 10) {\n              this.setStatFuncError(err?.message ?? err?.statusText ?? err, \"FATAL 10+\")\n              this.missing.done = true\n              return resolve()\n            } else {\n              this.setStatFuncError(err?.message ?? err?.statusText ?? err, this.missing.statErrors)\n            }\n          }\n        }\n      }\n\n      // console.log(i, dbitem.fullname, nix, wix)\n      this.missing.i++\n      i++\n    }\n    progress?.(i)\n    // console.log(\"frame\", \"i\", i, \"rt\", performance.now() - now, this.missing.query.length)\n    if(this.missing.query.length) {\n      // setTimeout(_ => {\n        requestAnimationFrame(_ => this.filterUntilDone(resolve, progress))\n      // }, 100)\n    } else {\n      this.missing.done = true\n      if(this.statFunction) this.setStatFuncResult(this.missing.stats)\n      this.updateIndices()\n      if(this.hasEverFiltered) SerializeParams.serializeDomToParams(this.dom)\n      resolve()\n    }\n  }\n\n  setFilterFunction(fbody, filterAgain = false) {\n    if(!fbody) {\n      delete this.filterFunction\n      if(filterAgain) this.filterAgain()\n      return this\n    }\n\n    this.filterFunction = item => {\n      const fenv = new Map()\n\n      fenv.set(\"_i\", this.missing.i)\n      fenv.set(\"_caller\", this)\n      fenv.set(\"_app\", this.app)\n      fenv.set(\"item\", item)\n\n      fenv.set(\"tag\", (...tags) => {\n        for (var i = 0; i < tags.length; i++) {\n          if(item.tags.has(tags[i])) return true\n        }\n        return false\n      })\n\n      fenv.set(\"tagOn\", (...fields) => {\n        const includeNull = typeof fields.at(-1) == \"boolean\" ? fields.pop() : false\n\n        for (var i = 0; i < fields.length; i++) {\n          let field = fields[i]\n          if(field[0] == \"$\") field = field.slice(1)\n          if(includeNull || item[field] != null) item.tags.add(`${fields[i]}:${item[field]}`)\n        }\n        return true\n      })\n\n      this.itemdbData.knownKeys.forEach(key => fenv.set(key, item[key]))\n      // Object.entries(item).forEach(([k, v]) => fenv.set(k, v))\n\n      return (new Function(\"env\", ...fenv.keys(), fbody))(fenv, ...fenv.values())\n    }\n\n    if(filterAgain) this.filterAgain()\n    return this\n  }\n\n  filterFunctionHelp() {\n    return [\n      `_i || console.log(env) // log env once to console, it shows you what you can access`,\n      `// console.log(_i, item) // log all items (with index) to console`,\n      `return timelimited // return true to remove from list`,\n      `return !(timelimited || exclusive) // easier to think from \"keep this\" standpoint`,\n    ]\n  }\n\n  setStatFunction(fbody, filterAgain = false) {\n    if(!fbody) {\n      delete this.statFunction\n      if(filterAgain) this.filterAgain()\n      return this\n    }\n\n    this.statFunction = item => {\n      const fenv = new Map()\n\n      fenv.set(\"_i\", this.missing.i)\n      fenv.set(\"_caller\", this)\n      fenv.set(\"_app\", this.app)\n      fenv.set(\"item\", item)\n\n      fenv.set(\"prices\", _ => fenv.get(\"sum\")(\"cost\", \"cost_d\", \"cost_a\", \"cost_irl\"))\n\n      fenv.set(\"sum\", (...fields) => {\n        for (var i = 0; i < fields.length; i++) {\n          this.missing.stats.sum ??= {}\n          this.missing.stats.sum[fields[i]] ??= 0\n          if(item[fields[i]] != null) this.missing.stats.sum[fields[i]] += item[fields[i]]\n        }\n        return true\n      })\n\n      fenv.set(\"group\", (...fields) => {\n        this.missing.stats.group ??= {}\n\n        for (var i = 0; i < fields.length; i++) {\n          const v = item[fields[i]]\n          let ptr = this.missing.stats.group\n          ptr = ptr[fields[i]] ??= {}\n\n          if(Array.isArray(v)) {\n            v.forEach(vv => {\n              ptr[vv] ??= 0\n              ptr[vv]++\n            })\n          } else {//if(item[fields[i]] != null) {\n            ptr[v] ??= 0\n            ptr[v]++\n          }\n        }\n        return true\n      })\n\n      fenv.set(\"has\", (...fields) => {\n        this.missing.stats.has ??= {}\n\n        for (var i = 0; i < fields.length; i++) {\n          const v = !!item[fields[i]]\n          let ptr = this.missing.stats.has\n          ptr = ptr[fields[i]] ??= {}\n          ptr[v] ??= 0\n          ptr[v]++\n        }\n        return true\n      })\n\n      fenv.set(\"count\", (...args) => {\n        const value = args.pop()\n        let ptr = this.missing.stats.count ??= {}\n        args.forEach(arg => { ptr = ptr[arg] ??= {} })\n        ptr[value] ??= 0\n        ptr[value]++\n        return true\n      })\n\n      this.itemdbData.knownKeys.forEach(key => fenv.set(key, item[key]))\n      // Object.entries(item).forEach(([k, v]) => fenv.set(k, v))\n\n      return (new Function(\"env\", ...fenv.keys(), fbody))(fenv, ...fenv.values())\n    }\n\n    if(filterAgain) this.filterAgain()\n    return this\n  }\n\n  statFunctionHelp() {\n    return [\n      `_i || console.log(env) // log env once to console, it shows you what you can access`,\n      `has(\"insider_week\", \"commendation\") // stat on field-exists?`,\n      `group(\"shop\") // count on field-value`,\n      `if(insider_week) count(\"generic\", \"has_insider\") // generic count, used by group`,\n      `sum(\"cost\", \"cost_d\") // sum on field-value(numeric)`,\n      `prices() // shorthand to sum all costs`,\n    ]\n  }\n\n\n\n  // =======\n  // = DOM =\n  // =======\n  createFilters() {\n    const fCtn = this.dom.querySelector(`[data-role=\"filters\"]`)\n    const tplEl = this.dom.querySelector(`[data-role=\"template+filter+ynn\"]`)\n    const filterGroups = {}\n    fCtn.classList.remove(\"d-none\", \"no-pointer-events\", \"opacity-25\")\n\n    Object.entries(this.missing.types).forEach(([type, items]) => {\n      const [t_type, t_arg] = type.split(\":\")\n      filterGroups[t_type] ??= []\n      if(t_arg) filterGroups[t_type].push(t_arg)\n    })\n\n    // reset\n    fCtn.querySelectorAll(`[data-role=\"labelCount\"]`).forEach(el => el.innerText = \"\")\n    fCtn.querySelectorAll(`[data-filter-key]`).forEach(el => {\n      // target.classList.toggle(\"opacity-50\", subs.length == 0)\n      if(el.querySelector(`[data-selected=\"true\"]`)?.dataset.role == \"nil\") el.classList.add(\"opacity-50\")\n    })\n\n    // remove temps\n    fCtn.querySelectorAll(`[data-role=\"filters-ynn\"]`).forEach(el => {\n      const ynn = el.dataset.ynn\n      if(!(ynn.startsWith(\"__\") || ynn.startsWith(\"$\"))) el.remove()\n    })\n\n    // create or update\n    Object.entries(filterGroups).toSorted((a, b) => a[0].localeCompare(b[0])).forEach(([type, subs]) => {\n      let target = fCtn.querySelector(`[data-role=\"filters-ynn\"][data-ynn=\"${type}\"]`)\n      let listTarget = null\n      if(target) {\n        listTarget = target.querySelector(`[data-role=\"filter-ynn-list\"]`)\n      } else {\n        target = document.createElement(\"details\")\n        target.open = type != \"__type\"\n        target.setAttribute(\"data-role\", \"filters-ynn\")\n        target.setAttribute(\"data-ynn\", type)\n\n        const label = document.createElement(\"summary\")\n        label.classList.add(\"fw-bold\", \"text-muted\", \"text-small\", \"mb-1\")\n        label.innerText = Util.humanize(type[0] == \"$\" ? type.slice(1) : type)\n        target.append(label)\n\n        listTarget = document.createElement(\"div\")\n        listTarget.setAttribute(\"data-role\", \"filter-ynn-list\")\n        listTarget.classList.add(\"d-flex\", \"flex-wrap\", \"gap-2\", \"w-100\")\n        target.append(listTarget)\n\n        fCtn.append(target)\n      }\n\n      subs.forEach(sub => {\n        const skey = `${type}:${sub}`\n        let clone = listTarget.querySelector(`[data-filter-key=\"${skey}\"]`)\n        if(!clone) {\n          clone = tplEl.cloneNode(true)\n          clone.removeAttribute(\"data-role\")\n          clone.setAttribute(\"data-filter-key\", skey)\n          clone.querySelector(`[data-role=\"label\"]`).innerText = sub\n          listTarget.append(clone)\n        }\n        clone.querySelector(`[data-role=\"delLabelCount\"]`).innerText = \"\"\n        clone.querySelector(`[data-role=\"labelCount\"]`).innerText = this.missing.types[skey].length\n        clone.classList.remove(\"d-none\", \"opacity-50\")\n      })\n    })\n\n    // filtered\n    Object.entries(this.missing.filtered).forEach(([skey, c]) => {\n      const fk = fCtn.querySelector(`[data-filter-key=\"${skey}\"]`)\n      const label = fk.querySelector(`[data-role=\"delLabelCount\"]`)\n      label.innerText = `-${this.missing.filtered[skey]}`\n    })\n\n    // sort by count\n    this.dom.querySelectorAll(`[data-ynn] [data-role=\"filter-ynn-list\"]`).forEach(el => {\n      $(el).find(`[data-filter-key]`).sort((a, b) => this.sortCountFor(b) - this.sortCountFor(a)).appendTo(el)\n    })\n  }\n\n  createSliceWarning(sliced) {\n    const warning = document.createElement(\"div\")\n    warning.classList.add(\"alert\", \"alert-warning\")\n    warning.innerHTML = `${sliced} results truncated!`\n    // const link = document.createElement(\"a\")\n    // link.classList.add(\"ms-2\")\n    // link.innerText = \"render +100\"\n    // link.href = \"javascript:renderAll()\"\n    // link.addEventListener(\"click\", ev => {\n    //   ev.preventDefault()\n    //   this.missing.renderLimit ??= 100\n    //   this.missing.renderLimit += 100\n    //   this.renderItems()\n    // })\n    // warning.append(link)\n\n    const link2 = document.createElement(\"a\")\n    link2.classList.add(\"ms-2\")\n    link2.innerText = \"render all\"\n    link2.href = \"javascript:renderAll()\"\n    link2.addEventListener(\"click\", ev => {\n      ev.preventDefault()\n      this.missing.renderLimit = null\n      this.renderItems()\n    })\n    warning.append(link2)\n\n    return warning\n  }\n\n  setYnn(ynn, state, filter = true) {\n    if(typeof ynn == \"string\") ynn = this.dom.querySelector(`[data-filter-key=\"${ynn}\"]`)\n    const t = $(ynn)\n    state ??= ynn.querySelector(`[data-selected=\"true\"]`)?.dataset.role\n\n    t.find(`[data-role=\"no\"]`).toggleClass(\"btn-danger\", state == \"no\").toggleClass(\"btn-outline-danger\", state != \"no\").attr(\"data-selected\", state == \"no\")\n    t.find(`[data-role=\"yes\"]`).toggleClass(\"btn-success\", state == \"yes\").toggleClass(\"btn-outline-success\", state != \"yes\").attr(\"data-selected\", state == \"yes\")\n    t.find(`[data-role=\"nil\"]`).toggleClass(\"btn-warning\", state == \"nil\").toggleClass(\"btn-outline-warning\", state != \"nil\").attr(\"data-selected\", state == \"nil\")\n\n    t.find(`[data-role=\"label\"]`).toggleClass(\"bg-danger-subtle\", state == \"no\").toggleClass(\"text-danger\", state == \"no\")\n    t.find(`[data-role=\"label\"]`).toggleClass(\"bg-success-subtle\", state == \"yes\").toggleClass(\"text-success\", state == \"yes\")\n\n    // open parent\n    if(state != \"nil\") {\n      t.closest(`[data-role=\"filters-ynn\"]`).prop(\"open\", \"open\")\n    }\n\n    if(filter) this.filterAgain()\n    return this\n  }\n\n  setStatFuncResult(obj) {\n    const outer = this.dom.querySelector(`[data-role=\"statFuncResult\"]`)\n    if(!outer) return this\n    const pre = outer.querySelector(\"pre\")\n    if(!pre) return this\n\n    pre.innerText = JSON.stringify(obj, null, 2)\n    outer.classList.remove(\"d-none\")\n    return this\n  }\n\n  resetStatFuncResult() {\n    const outer = this.dom.querySelector(`[data-role=\"statFuncResult\"]`)\n    if(!outer) return this\n    const pre = outer.querySelector(\"pre\")\n    if(!pre) return this\n\n    pre.innerText = \"\"\n    outer.classList.add(\"d-none\")\n    return this\n  }\n\n  setStatFuncError(msg, ecount) {\n    const emsg = this.dom.querySelector(`[data-role=\"statFuncError\"]`)\n    if(!emsg) return this\n\n    emsg.classList.remove(\"d-none\")\n    if(ecount != null) msg = `(${ecount}) ${msg}`\n    emsg.innerText = msg\n    return this\n  }\n\n  resetStatFuncError() {\n    const emsg = this.dom.querySelector(`[data-role=\"statFuncError\"]`)\n    if(!emsg) return this\n\n    emsg.classList.add(\"d-none\")\n    emsg.innerText = \"\"\n    return this\n  }\n\n  setFilterFuncError(msg, ecount) {\n    const emsg = this.dom.querySelector(`[data-role=\"filterFuncError\"]`)\n    if(!emsg) return this\n\n    emsg.classList.remove(\"d-none\")\n    if(ecount != null) msg = `(${ecount}) ${msg}`\n    emsg.innerText = msg\n    return this\n  }\n\n  resetFilterFuncError() {\n    const emsg = this.dom.querySelector(`[data-role=\"filterFuncError\"]`)\n    if(!emsg) return this\n\n    emsg.classList.add(\"d-none\")\n    emsg.innerText = \"\"\n    return this\n  }\n\n  setStepStatus(step, status = \"loading\", text) {\n    if(typeof step == \"number\" || typeof step == \"string\") step = this.dom.querySelector(`[data-step=\"${step}\"]`)\n    const icon = step.querySelector(`[data-role=\"statusIcon\"]`)\n    const stext = step.querySelector(`[data-role=\"statusText\"]`)\n\n    if(stext && text != null) {\n      stext.innerHTML = text\n      if(status === null) return step\n    }\n\n    if(status == \"loading\") {\n      icon.innerHTML = `<div class=\"spinner spinner-border spinner-border-sm\"></div>`\n    } else if (status == \"success\") {\n      icon.innerHTML = `<i class=\"bi bi-check-lg text-success\"></i>`\n    } else if (status == \"error\") {\n      icon.innerHTML = `<i class=\"bi bi-x-lg text-danger\"></i>`\n    } else if (status == \"waiting\") {\n      icon.innerHTML = `<i class=\"bi bi-hourglass-split text-muted\"></i>`\n    } else {\n      console.error(\"unknown status\", status, \"for\", step)\n    }\n    return step\n  }\n}\n", "import * as AppOS from \"./appos/appos\"\n\nimport \"./appos/component/jquery/easings\"\nimport \"./appos/component/turbo_bridge\"\nimport \"./appos/component/toggle_inline_list\"\nimport \"./appos/component/anim/threed_carousel\"\nimport {ScrollQueue} from \"./appos/lib/scroll_queue\"\nimport \"./sot_profile_viewer/find_a_thing_renderer\"\n\nimport {EntitlementMapper} from \"./sot_profile_viewer/entitlement_mapper\"\nimport {EntitlementSearch} from \"./sot_profile_viewer/entitlement_search\"\nimport {GotoAnywhere} from \"./sot_profile_viewer/goto_anywhere\"\nimport {GraphAnything} from \"./sot_profile_viewer/graph_anything\"\nimport {TracerUI} from \"./sot_profile_viewer/tracer_ui\"\nimport {NetWorthUI} from \"./sot_profile_viewer/net_worth_ui\"\nimport {EmoteLoadoutUI} from \"./sot_profile_viewer/emote_loadout_ui\"\nimport {TwitchDrops} from \"./sot_profile_viewer/twitch_drops\"\nimport {InsiderTimer} from \"./sot_profile_viewer/insider_timer\"\nimport {KeyModal} from \"./sot_profile_viewer/key_modal\"\nimport {FavModal} from \"./sot_profile_viewer/fav_modal\"\nimport {FatHelpModal} from \"./sot_profile_viewer/fat_help_modal\"\nimport confetti from \"canvas-confetti\"\n// import {confetti} from './sot_profile_viewer/confetti'\nimport {Confetti} from './sot_profile_viewer/confetti_class'\nimport {InlineCompare} from './sot_profile_viewer/inline_compare'\nimport {MissingEntitlements} from './sot_profile_viewer/missing_entitlements'\n\nclass SotProfileViewerApp extends AppOS.Application {\n  instance = \"SotProfileViewer\"\n\n  init() {\n    this.constructor.availableComponents.forEach(c => this.use(c))\n\n    if(window?.app?.components?.Spotlight?.opts) {\n      window.app.components.Spotlight.opts.captureVoidSpace = false\n    }\n\n    if(window?.app?.input) {\n      this.input = window.app.input\n    }\n  }\n\n  boot() {\n  }\n\n  documentLoad() {\n    this.scrollQueue = new ScrollQueue().hook().start()\n\n    $(document).on(\"click\", ev => {\n      let target = $(ev.target).closest(`[data-sotid]`)\n      if(!target.length) {\n        target = $(ev.target).closest(`[data-missing-item]`)\n      }\n      const hadClass = target.hasClass(\"last-clicked\")\n      if(!(ev.metaKey || ev.ctrlKey)) {\n        $(\".last-clicked\").each((i, el) => { $(el).removeClass(\"last-clicked\").trigger(\"srec:unclicked\") })\n      }\n      if(!hadClass) {\n        target.addClass(\"last-clicked\").trigger(\"srec:clicked\")\n      }\n      return true\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"open_changelog\"]`, ev => {\n      window.open($(ev.currentTarget).data(\"changelogUrl\"))\n      return true\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"snapdiff-select\"]`, ev => {\n      const _t = ev.currentTarget\n      const t = $(_t).blur()\n      const tip = bootstrap.Tooltip.getInstance(_t)\n      const tr = t.closest(\"tr\")\n      const table = t.closest(\"table\")\n      const selected = table.find(\"tr.snapdiff-selected\")\n\n      if(selected.length == 1) {\n        if(selected.is(tr)) {\n          // clicked same row, cancel\n          tr.removeClass(\"snapdiff-selected\")\n          t.removeClass(\"btn-warning\").addClass(\"btn-outline-secondary\")\n\n          // dispose of tooltip and show original one\n          tip.enable()\n          tr.data(\"snapdiffTooltip\")?.dispose()\n          tr.removeData(\"snapdiffTooltip\")\n        } else {\n          selected.removeClass(\"snapdiff-selected\")\n          const sbtn = selected.find(`[data-sotpf-act=\"snapdiff-select\"]`)\n          sbtn.removeClass(\"btn-warning\").addClass(\"btn-outline-secondary\")\n          bootstrap.Tooltip.getInstance(sbtn.get(0))?.enable()\n          selected.data(\"snapdiffTooltip\")?.dispose()\n          selected.removeData(\"snapdiffTooltip\")\n          window.open(t.attr(\"href\").replace(\"__i__\", selected.data(\"sid\")))\n        }\n      } else {\n        tip?.hide()\n        tip?.disable()\n        t.addClass(\"btn-warning\").removeClass(\"btn-outline-secondary\")\n        tr.addClass(\"snapdiff-selected\")\n        const tooltip = new bootstrap.Tooltip(_t.parentNode, {\n          trigger: \"manual\",\n          html: true,\n          placement: \"left\",\n          customClass: \"tooltip-fluid\",\n          title: `<strong>click the diff-button on a different snapshot</strong><br><small class=\"text-mutedx\">click this diff button again to cancel</span>`,\n        })\n        tooltip.show()\n        tr.data(\"snapdiffTooltip\", tooltip)\n      }\n      return false\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"profmerge-select\"]`, ev => {\n      const _t = ev.currentTarget\n      const t = $(_t).blur()\n      const tip = bootstrap.Tooltip.getInstance(_t)\n      const tr = t.closest(\"tr\")\n      const table = t.closest(\"table\")\n      const selected = table.find(\"tr.profmerge-selected\")\n\n      if(selected.length == 1) {\n        if(selected.is(tr)) {\n          // clicked same row, cancel\n          tr.removeClass(\"profmerge-selected\")\n          t.removeClass(\"btn-warning\").addClass(\"btn-outline-info\")\n\n          // dispose of tooltip and show original one\n          tip.enable()\n          tr.data(\"profmergeTooltip\")?.dispose()\n          tr.removeData(\"profmergeTooltip\")\n        } else {\n          selected.removeClass(\"profmerge-selected\")\n          const sbtn = selected.find(`[data-sotpf-act=\"profmerge-select\"]`)\n          sbtn.removeClass(\"btn-warning\").addClass(\"btn-outline-info\")\n          bootstrap.Tooltip.getInstance(sbtn.get(0))?.enable()\n          selected.data(\"profmergeTooltip\")?.dispose()\n          selected.removeData(\"profmergeTooltip\")\n          Turbo.visit(t.attr(\"href\").replace(\"__i__\", selected.data(\"sid\")))\n        }\n      } else {\n        tip?.hide()\n        tip?.disable()\n        t.addClass(\"btn-warning\").removeClass(\"btn-outline-info\")\n        tr.addClass(\"profmerge-selected\")\n        const tooltip = new bootstrap.Tooltip(_t.parentNode, {\n          trigger: \"manual\",\n          html: true,\n          placement: \"left\",\n          customClass: \"tooltip-fluid\",\n          title: `<strong>click the merge button on a different profile</strong><br><small class=\"text-mutedx\">click this merge button again to cancel</span>`,\n        })\n        tooltip.show()\n        tr.data(\"profmergeTooltip\", tooltip)\n      }\n      return false\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"setkey\"]`, ev => {\n      const btn = $(ev.currentTarget)\n      const furl = btn.data(\"fetchUrl\")\n      btn.attr(\"disabled\", \"disabled\")\n      fetch(furl).then(r => r.json()).then(j => {\n        new KeyModal(this).open(Object.assign({}, j, { update_url: furl }))\n        btn.removeAttr(\"disabled\")\n      })\n      return false\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"editfavs\"]`, ev => {\n      const btn = $(ev.currentTarget)\n      const furl = btn.data(\"fetchUrl\")\n      btn.attr(\"disabled\", \"disabled\")\n      fetch(furl).then(r => r.json()).then(j => {\n        new FavModal(this).open(Object.assign({}, j, { update_url: furl }))\n        btn.removeAttr(\"disabled\")\n      })\n      return false\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"fat_help_modal\"]`, ev => {\n      new FatHelpModal(this).open()\n      return false\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"ctn:jumpToMarker\"]`, ev => {\n      const l = $(ev.currentTarget).blur()\n      const m = l.closest(\".sot-data-container\").find(\".rec-marker\")\n      if(m.length) {\n        if(m.data(\"clickSotid\")) m.find(`[data-sotid]`).click()\n        m.get(0).scrollIntoView({ block: \"center\", inline: \"nearest\", behavior: \"smooth\" })\n      }\n      return false\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"ctn:toggleCompleted\"]`, ev => {\n      const l = $(ev.currentTarget).blur()\n      const s = l.find(\"span\")\n      const i = l.find(\"i\")\n      if (l.hasClass(\"btn-warning\")) {\n        l.removeClass(\"btn-warning\").addClass(\"btn-dark\")\n        i.removeClass(\"bi-eye\").addClass(\"bi-eye-slash\")\n        s.text(\"hide completed\")\n        l.closest(\".sot-data-container\").find(\".hide-completed\").show()\n      } else {\n        l.removeClass(\"btn-dark\").addClass(\"btn-warning\")\n        i.removeClass(\"bi-eye-slash\").addClass(\"bi-eye\")\n        s.text(\"show completed\")\n        l.closest(\".sot-data-container\").find(\".hide-completed\").hide()\n      }\n      return false\n    })\n    $(`[data-sotpf-act=\"ctn:toggleCompleted\"][data-sotpf-clickinitial]`).click()\n\n    $(document).on(\"click\", `[data-sotpf-act=\"ctn:toggleCurrency\"]`, ev => {\n      const l = $(ev.currentTarget).blur()\n      const s = l.find(\"span\")\n      const i = l.find(\"i\")\n      if (l.hasClass(\"btn-warning\")) {\n        l.removeClass(\"btn-warning\").addClass(\"btn-dark\")\n        s.text(\"hide currency\")\n        l.closest(\".sot-data-container\").find(\".hide-currency\").show()\n      } else {\n        l.removeClass(\"btn-dark\").addClass(\"btn-warning\")\n        s.text(\"show currency\")\n        l.closest(\".sot-data-container\").find(\".hide-currency\").hide()\n      }\n      return false\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"ctn:toggleExpand\"]`, ev => {\n      const l = $(ev.currentTarget).blur()\n      const s = l.find(\"span\")\n      const i = l.find(\"i\")\n      if (l.hasClass(\"btn-secondary\")) {\n        l.removeClass(\"btn-secondary\").addClass(\"btn-dark\")\n        i.removeClass(\"bi-arrows-angle-contract\").addClass(\"bi-arrows-angle-expand\")\n        s.text(\"expand all\")\n        l.closest(\".sot-data-container\").find(\"details\").prop(\"open\", false)\n      } else {\n        l.removeClass(\"btn-dark\").addClass(\"btn-secondary\")\n        i.removeClass(\"bi-arrows-angle-expand\").addClass(\"bi-arrows-angle-contract\")\n        s.text(\"collapse all\")\n        l.closest(\".sot-data-container\").find(\"details\").prop(\"open\", true)\n      }\n      return false\n    })\n\n    $(document).on(\"click\", `[data-sotpf-act=\"createHotlinkPodal\"]`, ev => {\n      ev.preventDefault()\n\n      const tooltip = bootstrap.Tooltip.getOrCreateInstance(ev.currentTarget)\n      tooltip.hide()\n      tooltip.disable()\n      ev.currentTarget.parentElement.addEventListener(\"hidden.bs.dropdown\", ev => tooltip.enable(), { once: true })\n    })\n\n    $(window).on(\"hashchange\", ev => {\n      const hp = AppOS.Util.getHashParams(true, new URL(ev.originalEvent.newURL))\n      if(hp.forceJumpOnce) {\n        AppOS.Util.updateHashParams({ forceJumpOnce: undefined })\n        delete this.lastJumpedToNamedAnchor\n      }\n      if(hp.jump && hp.jump != this.lastJumpedToNamedAnchor) {\n        this.jumpToNamedAnchor(hp.jump)\n      }\n    })\n\n    EntitlementSearch.hookClicks(`[data-entitlement-search]`)\n    GotoAnywhere.hookClicks(`[data-goto-anywhere]`)\n    InlineCompare.hookClicks()\n    MissingEntitlements.hookClicks()\n  }\n\n  pageLoad() {\n    if (window.location.hash == \"#api-error\") {\n      $(`[data-sotpf-act=\"setkey\"]`).click()\n      window.location.hash = \"\"\n    }\n\n    this.container = $(\"#pv-main\")\n    if(this.container.length && !this.entmapper) {\n      this.entmapper = new EntitlementMapper(this.container.data(\"pvBase\") + \"/entitlements\", {\n        pvBase: this.container.data(\"pvBase\"),\n      })\n    }\n\n    const scrollTarget = document.querySelector(`[data-scroll-to-this]`)\n    if(scrollTarget) this.scrollQueue.enqueue(scrollTarget, { delay: 200 })\n\n    this.setupConfetti()\n\n    if(document.querySelector(`[data-flist=\"encounters\"]`)) {\n      $(`[data-flist=\"encounters\"] details.sot-compactable-encounter`).on(\"toggle\", ev => {\n        const parent = $(ev.currentTarget).closest(`[data-sotid]`)\n        parent.find(\".ratio-outer\").css({ minWidth: `${ev.currentTarget.open ? 96 : 48}px` })\n      })\n    }\n\n    $(`[data-entitlement-search]`).each((i, el) => { new EntitlementSearch(this, $(el), this.entmapper) })\n    $(`[data-goto-anywhere]`).each((i, el) => { new GotoAnywhere(this, $(el), this.entmapper).hook() })\n    $(`[data-graph-anything]`).each((i, el) => { new GraphAnything(this, $(el)).hook() })\n    $(`[data-tracer-ui]`).each((i, el) => { new TracerUI(this, $(el)).hook() })\n    $(`[data-net-worth-ui]`).each((i, el) => { new NetWorthUI(this, $(el)).hook() })\n    $(`[data-emote-loadout]`).each((i, el) => { new EmoteLoadoutUI(this, $(el)).hook() })\n    // $(`[data-twitch-drops-ui]`).each((i, el) => { new TwitchDrops(this, $(el), this.entmapper, { is: \"ui\" }).hook() })\n    $(`[data-twitch-drop-overview]`).each((i, el) => { new TwitchDrops(this, $(el), this.entmapper, { is: \"overview\" }).hook() })\n    $(`[data-insider-timer]`).each((i, el) => { new InsiderTimer(this, $(el)).hook() })\n    $(`[data-missing-entitlements]`).each((i, el) => { new MissingEntitlements(this, el).hook() })\n\n    this.setupRefreshButton()\n    this.setupBalanceDiff()\n    this.setupFavoriteToggles()\n\n    const hp = AppOS.Util.getHashParams()\n    if(hp.forceJumpOnce) {\n      AppOS.Util.updateHashParams({ forceJumpOnce: undefined })\n      delete this.lastJumpedToNamedAnchor\n    }\n    this.jumpToNamedAnchor(hp.jump)\n  }\n\n  setupConfetti() {\n    const confetti_canvas = document.getElementById(\"confetti-canvas\")\n    if(confetti_canvas) new Confetti({ canvas: confetti_canvas, start: true })\n    // const confetti = new Confetti({emoji: \"\uD83C\uDF89\"})\n    // confetti.start()\n    // document.addEventListener(\"click\", e => {\n    //   confetti.emitAt(e.clientX, e.clientY, 15)\n    // })\n    // if(confetti_canvas) {\n    //   confetti_canvas.confetti ||= confetti.create(confetti_canvas, { resize: true })\n\n    //   var defaults = { startVelocity: 30, spread: 360, ticks: 60, zIndex: 0 }\n    //   const randomInRange = (min, max) => Math.random() * (max - min) + min\n    //   var interval = setInterval(() => {\n    //     var particleCount = 50\n    //     confetti({ ...defaults, particleCount, origin: { x: randomInRange(0.1, 0.3), y: Math.random() - 0.2 } })\n    //     confetti({ ...defaults, particleCount, origin: { x: randomInRange(0.7, 0.9), y: Math.random() - 0.2 } })\n    //   }, 250)\n    // }\n\n    this.goatConfetti()\n  }\n\n  goatConfetti() {\n    var canvas = document.getElementById(\"goat-canvas\")\n    if(!canvas) return\n    canvas.confetti ??= confetti.create(canvas, { resize: true })\n    canvas.confetti.reset()\n\n    // if(document.goatRunning) {\n    //   // return setTimeout(_ => {\n    //   //   this.goatConfetti()\n    //   //   console.log(\"retrying\")\n    //   // }, 2000)\n    // }\n    // document.goatRunning = true\n    var duration = 2 * 1000\n    var animationEnd = Date.now() + duration\n    var skew = 1\n    var scalar = 20\n    var goat = null\n    const randomInRange = (min, max) => Math.random() * (max - min) + min;\n\n\n    (function frame() {\n      var timeLeft = animationEnd - Date.now()\n      var ticks = 100//Math.max(10, 500 * (timeLeft / duration))\n      goat ??= confetti.shapeFromText({ text: `\uD83D\uDC10`, scalar })\n      skew = Math.max(0.8, skew - 0.001)\n\n      canvas.confetti({\n        particleCount: 1,\n        startVelocity: 0,\n        ticks: ticks,\n        origin: {\n          x: Math.random(),\n          // since particles fall down, skew start toward the top\n          y: (Math.random() * skew) - 0.2\n        },\n        colors: ['#ffffff'],\n        shapes: [goat],\n        gravity: randomInRange(0.3, 0.6),\n        scalar: randomInRange(3, 5),\n        drift: randomInRange(-0.1, 0.1),\n      })\n\n      if (timeLeft > 0) return requestAnimationFrame(frame)\n      // document.goatRunning = false\n    }())\n  }\n\n  jumpToNamedAnchor(name) {\n    if(!name) return\n    this.lastJumpedToNamedAnchor = name\n    let jumpTo = document.querySelector(`[data-jump=\"${name.replace(/\"/g, '\\\\\"')}\"]`)\n    if(!jumpTo) return\n\n    $(\".last-clicked[data-jump]\").removeClass(\"last-clicked\")\n    if(jumpTo.dataset.jumpTarget) {\n      if(jumpTo.dataset.jumpTarget == \"::parent\") {\n        jumpTo = jumpTo.parentElement\n      } else {\n        jumpTo = document.querySelector(jumpTo.dataset.jumpTarget)\n      }\n    }\n    jumpTo.classList.add(\"last-clicked\")\n    this.scrollQueue.enqueue(jumpTo, { delay: 200, ifNeeded: true })\n  }\n\n  async setupFavoriteToggles() {\n    $(`[data-sotpv-togglefav]`).each((i, _el) => {\n      const el = $(_el)\n      if(el.data(\"togglefavInitialized\")) return\n      el.data(\"togglefavInitialized\", true)\n      const ico = $(`<i class=\"bi bi-star text-muted\"></i>`)\n      let failInstance = null\n      el.data(\"togglefavPrepend\") ? el.prepend(ico) : el.append(ico)\n      el.css({ cursor: \"pointer\" })\n      el.attr(\"title\", \"toggle favorite\")\n      const ttinst = new bootstrap.Tooltip(_el, { delay: { show: 400, hide: 100 } })\n      this.updateFavtoggle(el, ico, el.data(\"sotpvFaved\"))\n\n      el.click(ev => {\n        const title = ttinst.tip?.querySelector(\".tooltip-inner\")\n\n        if(ev.altKey) {\n          navigator.clipboard.writeText(el.data(\"sotpvTogglefav\"))\n          .then(_ => {\n            if(title) title.textContent = \"copied to clipboard\"\n            ttinst.update()\n          })\n          .catch(err => {\n            alert(\"failed to copy to clipboard\")\n          })\n          return false\n        }\n\n        failInstance?.dispose()\n        failInstance = null\n        ttinst.enable()\n\n        if($(`.fav-disabled[data-sotpv-togglefav]`).length) {\n          failInstance = new bootstrap.Tooltip(ico.get(0), { trigger: \"manual\", html: true, title: `<strong class=\"text-danger\">too fast, try again</strong>` })\n          failInstance.show()\n          ttinst.disable()\n          this.updateFavtoggle(el, ico, \"error\")\n          return false\n        }\n\n        this.updateFavtoggle(el, ico, \"progress\")\n\n        const formData = new FormData()\n        formData.append(\"toggle\", el.data(\"sotpvTogglefav\"))\n\n        el.addClass(\"fav-disabled\")\n        if (title) {\n          title.textContent = \"please wait\"\n          ttinst.update()\n        }\n\n        fetch(el.data(\"sotpvFavep\"), {\n          method: 'POST',\n          body: formData,\n          headers: {\n            \"X-CSRF-Token\": $(\"meta[name=csrf-token]\").attr(\"content\"),\n          }\n        }).then(r => r.json()).then(j => {\n          this.updateFavtoggle(el, ico, j.toggled)\n        }).catch(err => {\n          this.updateFavtoggle(el, ico, \"error\")\n          alert(\"Request failed :( Sorry about that, maybe try again\")\n        }).finally(_ => {\n          el.removeClass(\"fav-disabled\")\n          if (title) {\n            title.textContent = \"toggle favorite\"\n            ttinst.update()\n          }\n        })\n        return false\n      })\n    })\n  }\n\n  async updateFavtoggle(el, ico, toggle) {\n    ico.removeClass(\"text-muted text-info text-warning text-success text-danger bi-star bi-star-fill bi-arrow-repeat\")\n    if(toggle == \"progress\") {\n      ico.addClass(\"text-info bi-arrow-repeat\")\n    } else if (toggle == \"error\") {\n      ico.addClass(`text-danger bi-star${el.data(\"sotpvFaved\") ? \"-fill\" : \"\"}`)\n    } else if (toggle) {\n      el.attr(\"data-sotpv-faved\", true)\n      ico.addClass(\"text-warning bi-star-fill\")\n    } else {\n      el.attr(\"data-sotpv-faved\", false)\n      ico.addClass(\"text-muted bi-star\")\n    }\n  }\n\n  async setupBalanceDiff() {\n    $(`div[data-sotpf-ctn=\"balance-diff\"] [data-sotpf-bdiff]`).html(\"\")\n    $(`div[data-sotpf-ctn=\"balance-diff\"] table tbody tr`).each((i, el) => {\n      this.diffBalanceAb(el, el.nextElementSibling)\n    })\n\n    $(`div[data-sotpf-ctn=\"balance-diff\"] table`).on(\"click\", \"tr\", ev => {\n      const tr = $(ev.currentTarget)\n      const tb = tr.closest(\"tbody\")\n      const ctn = tb.closest(`[data-sotpf-ctn=\"balance-diff\"]`)\n      let sr = tb.find(\"tr.hash-active\")\n\n      if(ctn.data(\"interactive\") === false) {\n        return true\n      }\n\n      if (sr.length == 2) {\n        const a_index = tb.find(\"tr\").index(sr.eq(0))\n        const b_index = tb.find(\"tr\").index(sr.eq(1))\n\n        tb.find(`tr`).each((i, el) => {\n          if ((i > a_index && i < b_index) || (i == a_index || i == b_index)) {\n            this.diffBalanceAb(el, el.nextElementSibling)\n            $(el).removeClass(\"text-muted\")\n          }\n        })\n\n        sr.removeClass(\"hash-active\")\n        return false\n      }\n\n      if (sr.length < 2) {\n        tr.toggleClass(\"hash-active\")\n        sr = tb.find(\"tr.hash-active\")\n      }\n\n      if (sr.length == 2) {\n        //$(`div[data-sotpf-ctn=\"balance-diff\"] [data-sotpf-bdiff] .delta`).html(\"\")\n        const a_index = tb.find(\"tr\").index(sr.eq(0))\n        const b_index = tb.find(\"tr\").index(sr.eq(1))\n\n        tb.find(`tr`).each((i, el) => {\n          if (i > a_index && i < b_index) {\n            $(el).addClass(\"text-muted\")\n            $(el).find(`[data-sotpf-bdiff] .delta`).html(\"\")\n          // } else if (i < a_index || i > b_index) {\n            //this.diffBalanceAb(el, el.nextElementSibling)\n          } else if (i == a_index) {\n            this.diffBalanceAb(sr.get(0), sr.get(1))\n          }\n        })\n      }\n      return false\n    })\n  }\n\n  async diffBalanceAb(a, b) {\n    const fmt = new Intl.NumberFormat('en-US')\n    const skipCompare = $(a).closest(`[data-sotpf-ctn=\"balance-diff\"]`).data(\"skipInitial\")\n    const prepend = $(a).closest(`[data-sotpf-ctn=\"balance-diff\"]`).data(\"prependDiff\")\n\n    const d = {\n      gold: a.dataset.gold - (b?.dataset?.gold ?? 0),\n      doubloons: a.dataset.doubloons - (b?.dataset?.doubloons ?? 0),\n      ancientCoins: a.dataset.ancientCoins - (b?.dataset?.ancientCoins ?? 0),\n    }\n\n    for (const [k, v] of Object.entries(d)) {\n      const par = $(a).find(`[data-sotpf-bdiff=\"${k}\"]`).html(\"\")\n\n      $(`<span>`)\n        .addClass(\"value\")\n        .text(fmt.format(a.dataset[k]))\n        .appendTo(par)\n\n      if(b || !skipCompare) {\n        const small = $(`<small>`)\n          .addClass(\"delta\")\n          .text((prepend ? \"\" : \" \") + (v == 0 ? \"~\" : v > 0 ? `+${fmt.format(v)}` : fmt.format(v)) + (prepend ? \" \" : \"\"))\n          .addClass(v > 0 ? \"text-success\" : v < 0 ? \"text-danger\" : \"text-muted\")\n        prepend ? small.prependTo(par) : small.appendTo(par)\n      }\n    }\n  }\n\n  refreshBtnTimeoutTick(btn, bbtn, status, throttled_for = null) {\n    if(throttled_for) {\n      btn.data(\"refreshTimeoutIntervalRemain\", throttled_for)\n    }\n    const v = btn.data(\"refreshTimeoutIntervalRemain\")\n    if (v > 60) {\n      const m = parseInt(v/60)\n      status.html(`wait ${m} minute${m == 1 ? \"\" : \"s\"}`)\n    } else if (v > 0) {\n      const s = parseInt(v)\n      status.html(`wait ${s} second${s == 1 ? \"\" : \"s\"}`)\n    } else {\n      return this.initRefreshButton(btn, bbtn)\n    }\n\n    btn.data(\"refreshTimeoutIntervalRemain\", v - 1)\n    setTimeout(_ => this.refreshBtnTimeoutTick(btn, bbtn, status), 1000)\n  }\n\n  setupRefreshButton() {\n    $(\".poll-profile-btn\").each((i, _el) => {\n      const btn = $(_el)\n      const balance_btn = btn.next(\".poll-balance-btn\")\n      const status = btn.find(`[stopf-val=\"refresh_status\"]`)\n      const icon = btn.find(\"i.bi\")\n      this.initRefreshButton(btn, balance_btn)\n\n      btn.click(ev => {\n        if(btn.prop(\"disabled\")) return false\n\n        btn.attr(\"disabled\", \"disabled\")\n        bootstrap.Tooltip.getOrCreateInstance(btn.get(0)).hide()\n        btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-warning\")\n        icon.get(0).classList = \"bi bi-cloud-arrow-down\"\n        status.html(`updating (1/${btn.data(\"endpoints\").length})...`)\n\n        this.refreshFetchLoop(btn, balance_btn, status, btn.data(\"fetchUrl\"))\n        return false\n      })\n\n      balance_btn.click(ev => {\n        if(balance_btn.prop(\"disabled\")) return false\n\n        btn.attr(\"disabled\", \"disabled\")\n        balance_btn.attr(\"disabled\", \"disabled\")\n        bootstrap.Tooltip.getOrCreateInstance(balance_btn.get(0)).hide()\n        balance_btn.find(\"i.bi\").get(0).classList = \"bi bi-cloud-arrow-down\"\n        btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-warning\")\n        status.html(`fetching balance...`)\n\n        fetch(balance_btn.data(\"fetchUrl\"), {\n          method: 'POST',\n          headers: {\n            \"X-CSRF-Token\": $(\"meta[name=csrf-token]\").attr(\"content\"),\n          }\n        }).then(r => r.json()).then(j => {\n          if (j.success) {\n            if (j.changed) {\n              btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-success\")\n              status.html(\"SUCCESS! reloading...\")\n              setTimeout(_ => window.location.reload(), 2000)\n            } else {\n              btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-info\")\n              status.html(\"balance has not changed\")\n              setTimeout(_ => this.initRefreshButton(btn, balance_btn), 5000)\n            }\n          } else {\n            status.html(j.error)\n            btn.removeAttr(\"disabled\")\n            balance_btn.removeAttr(\"disabled\")\n            btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-danger\")\n            setTimeout(_ => this.initRefreshButton(btn, balance_btn), 5000)\n          }\n        })\n        return false\n      })\n    })\n  }\n\n  refreshFetchLoop(btn, bbtn, status, furl) {\n    fetch(furl, {\n      method: 'POST',\n      headers: {\n        \"X-CSRF-Token\": $(\"meta[name=csrf-token]\").attr(\"content\"),\n      }\n    }).then(r => r.json()).then(j => {\n      if (j.fetch_url) {\n        status.html(`updating (${btn.data(\"endpoints\").length + j.status + 1}/${btn.data(\"endpoints\").length})...`)\n        setTimeout(_ => this.refreshFetchLoop(btn, bbtn, status, j.fetch_url), 500)\n      } else if (j.success) {\n        btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-success\")\n        status.html(\"SUCCESS! reloading...\")\n        setTimeout(_ => window.location.reload(), 2000)\n      } else {\n        status.html(j.error)\n        btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-danger\")\n        setTimeout(_ => this.initRefreshButton(btn), 5000)\n      }\n    })\n  }\n\n  initRefreshButton(btn, bbtn) {\n    const furl = btn.data(\"fetchUrl\")\n    const status = btn.find(`[stopf-val=\"refresh_status\"]`)\n    const icon = btn.find(\"i.bi\")\n\n    icon.get(0).classList = \"bi bi-hourglass-split\"\n    fetch(furl).then(r => r.json()).then(j => {\n      if(!j.has_key) {\n        btn.attr(\"disabled\", \"disabled\")\n        bbtn?.remove()\n        btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-secondary\")\n        icon.get(0).classList = \"bi bi-infinity\"\n        status.html(\"no key\")\n      } else if (j.api_error) {\n        btn.attr(\"disabled\", \"disabled\")\n        bbtn?.remove()\n        btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-warning\")\n        icon.get(0).classList = \"bi bi-alert-triangle\"\n        status.html(\"api error\")\n      } else if (j.throttled) {\n        btn.attr(\"disabled\", \"disabled\")\n        bbtn?.addClass(\"d-none\")\n        btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-secondary\")\n        icon.get(0).classList = \"bi bi-clock-history\"\n        this.refreshBtnTimeoutTick(btn, bbtn, status, j.throttled)\n      } else {\n        btn.removeClass(\"btn-secondary btn-primary btn-dark btn-danger btn-warning btn-success btn-info\").addClass(\"btn-primary\")\n        btn.removeClass(\"rounded-end\").css({ minWidth: \"114px\" }).removeAttr(\"disabled\")\n        bbtn?.removeClass(\"d-none\")?.removeAttr(\"disabled\")\n        icon.get(0).classList = \"bi bi-arrow-repeat\"\n        status.html(\"update data\")\n      }\n    })\n  }\n}\n\nwindow.spfapp = SotProfileViewerApp.boot({ debug: document.querySelector(\"html\")?.dataset.env == \"development\" })\n"],
  "mappings": ";;;;;;;;;AAEA,MAAM,cAAN,MAAkB;AAAA,IAGhB,OAAO,KAAK,MAAM;AAChB,aAAa,aAAK,IAAI,KAAK,IAAI,CAAC;AAAA,IAClC;AAAA,IAoCA,YAAY,OAAO,CAAC,GAAG;AACrB,WAAK,MAAM;AACX,WAAK,mBAAmB,CAAC;AACzB,WAAK,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,YAAY,iBAAiB,IAAI;AAGpE,MAAM,kBAAkB,QAAQ,MAAM;AAAA,QACpC,aAAa,KAAK;AAAA,QAClB,YAAY,CAAC,SAAS,CAAC,MAAM,UAAU,CAAC;AAAA,MAC1C,CAAC;AAGD,WAAK,MAAM,IAAU,SAAS,IAAI,EAAE,SAAS;AAG7C,MAAM,aAAa,QAAQ,MAAM,KAAK,YAAY,gBAAgB,KAAK,IAAI;AAE3E,WAAK,YAAY,eAAe,QAAQ,SAAO;AAC7C,YAAG,OAAO,KAAK,QAAQ;AAAY,eAAK,GAAG,KAAK,KAAK,IAAI;AAAA,MAC3D,CAAC;AAAA,IACH;AAAA,IAEA,IAAI,KAAK,MAAM;AACb,YAAM,MAAM,IAAI,IAAI,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK;AACrD,WAAK,MAAM,oBAAoB,IAAI,IAAI;AACvC,WAAK,iBAAiB,KAAK,GAAG;AAC9B,UAAI,OAAO;AACX,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,aAAa;AACf,YAAM,MAAM,CAAC;AACb,WAAK,iBAAiB,QAAQ,UAAQ;AACpC,YAAI,KAAK,QAAQ;AAAA,MACnB,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,kBAAkB;AACpB,aAAO,OAAO;AAAA,IAChB;AAAA,EASF;AAzFE,gBADI,aACG,uBAAsB,CAAC;AAM9B,gBAPI,aAOG,kBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,gBAdI,aAcG,mBAAkB;AAAA,IACvB,UAAU;AAAA,IACV,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC;AAAA,IACP,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,aAAa,SAAO;AAClB,UAAI,OAAO,SAAS,OAAO,YAAY;AACrC,iBAAS,iBAAiB,oBAAoB,OAAK,IAAI,KAAK,gBAAgB,GAAG,GAAG,EAAE,MAAM,KAAK,CAAC;AAChG,YAAG,OAAO,OAAO;AACf,cAAI,MAAM,gBAAgB;AAC1B,mBAAS,iBAAiB,cAAc,OAAK,IAAI,KAAK,YAAY,GAAG,GAAG,KAAK;AAAA,QAC/E;AACA,YAAG,OAAO,YAAY;AACpB,cAAI,MAAM,qBAAqB;AAC/B,mBAAS,iBAAiB,mBAAmB,OAAK,IAAI,KAAK,YAAY,GAAG,GAAG,KAAK;AAAA,QACpF;AAAA,MACF,OAAO;AACL,iBAAS,iBAAiB,oBAAoB,OAAK;AACjD,cAAI,KAAK,gBAAgB,GAAG;AAC5B,cAAI,KAAK,YAAY,GAAG;AAAA,QAC1B,GAAG,KAAK;AAAA,MACV;AAAA,IACF;AAAA,EACF;;;ACzCK,MAAM,kBAAN,MAAsB;AAAA,IAC3B,YAAY,KAAK;AACf,WAAK,MAAM;AACX,WAAK,WAAW,oBAAI,IAAI;AACxB,WAAK,YAAY,oBAAI,IAAI;AACzB,WAAK,UAAU,oBAAI,IAAI;AAAA,IACzB;AAAA,IAEA,UAAU;AACR,aAAO,KAAK;AACZ,aAAO,KAAK;AACZ,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,iBAAiB;AACf,WAAK,YAAY,oBAAI,IAAI;AACzB,UAAG,SAAS,MAAM,QAAQ,mBAAmB;AAC3C,aAAK,YAAY,IAAI,IAAI,OAAO,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ,iBAAiB,CAAC,CAAC;AAAA,MAC9F;AACA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,MAAM,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG;AAChC,UAAG,CAAC,KAAK,QAAQ,IAAI,IAAI;AAAG,aAAK,QAAQ,IAAI,MAAM,oBAAI,IAAI,CAAC;AAC5D,YAAM,OAAO,KAAK,QAAQ,IAAI,IAAI;AAClC,aAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,KAAK,IAAI,MAAM,GAAG,CAAC;AAEjE,eAAS,KAAK;AAAA,QACZ,IAAI,YAAY,0BAA0B;AAAA,UACxC,SAAS;AAAA,UACT,QAAQ,EAAE,WAAW,MAAM,SAAS,KAAK;AAAA,QAC3C,CAAC;AAAA,MACH;AAEA,UAAI,QAAQ,SAAO;AACjB,cAAM,MAAM,KAAK,KAAK,IAAI,GAAG;AAC7B,YAAI,OAAO;AACX,YAAI,eAAe;AACnB,YAAI,WAAW;AAAA,MACjB,CAAC;AAAA,IACH;AAAA,IAEA,SAAS;AACP,WAAK,eAAe;AACpB,YAAM,WAAW,oBAAI,IAAI;AACzB,eAAS,iBAAiB,gCAAgC,EAAE,QAAQ,QAAM;AACxE,YAAG,CAAC,GAAG,QAAQ;AAAuB,iBAAO;AAC7C,WAAG,QAAQ,sBAAsB,MAAM,GAAG,EAAE,QAAQ,UAAQ;AAC1D,cAAG,QAAQ,CAAC,SAAS,IAAI,IAAI;AAAG,qBAAS,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC;AAAA,QACpE,CAAC;AAAA,MACH,CAAC;AACD,aAAO,QAAQ,IAAI,SAAS,OAAO,CAAC;AAAA,IACtC;AAAA,IAEA,KAAK,WAAW;AACd,UAAG,CAAC,KAAK,SAAS,IAAI,SAAS,GAAG;AAChC,YAAG,KAAK,UAAU,IAAI,SAAS,GAAG;AAChC,eAAK,SAAS,IAAI,WAAW,KAAK,2BAA2B,WAAW,KAAK,UAAU,IAAI,SAAS,CAAC,CAAC;AAAA,QACxG,OAAO;AACL,kBAAQ,KAAK,iDAAiD,SAAS;AAAA,QACzE;AAAA,MACF;AACA,aAAO,KAAK,SAAS,IAAI,SAAS;AAAA,IACpC;AAAA,IAEA,2BAA2B,WAAW,KAAK;AACzC,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,cAAM,SAAS,SAAS,cAAc,QAAQ;AAC9C,eAAO,OAAO;AACd,eAAO,MAAM;AACb,eAAO,QAAQ;AACf,eAAO,aAAa,wBAAwB,SAAS;AAErD,eAAO,SAAS,QAAM,QAAQ,CAAC,WAAW,KAAK,QAAQ,IAAI,SAAS,GAAG,KAAK,QAAQ,EAAE,CAAC;AACvF,iBAAS,KAAK,OAAO,MAAM;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,EACF;;;AC3EA,MAAM,YAAN,MAAgB;AAAA,IAYd,YAAY,KAAK,OAAO,CAAC,GAAG;AAC1B,WAAK,MAAM;AACX,WAAK,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,YAAY,iBAAiB,IAAI;AACpE,UAAG,IAAI;AAAM,aAAK,KAAK,QAAQ,KAAK,IAAI,KAAK;AAG7C,MAAM,kBAAkB,QAAQ,MAAM,EAAE,MAAM,KAAK,KAAK,WAAW,CAAC,MAAM,MAAM,EAAE,CAAC;AAGnF,WAAK,YAAY,eAAe,QAAQ,SAAO;AAC7C,YAAG,OAAO,KAAK,QAAQ;AAAY,eAAK,IAAI,GAAG,KAAK,KAAK,KAAK,KAAK,IAAI,CAAC;AAAA,MAC1E,CAAC;AAAA,IACH;AAAA,IAEA,IAAI,OAAO;AACT,aAAO,KAAK,YAAY;AAAA,IAC1B;AAAA,IAEA,IAAI,kBAAkB;AACpB,aAAO,OAAO;AAAA,IAChB;AAAA,IAEA,aAAaA,OAAM;AACjB,MAAM,KAAK,UAAU,GAAGA,KAAI;AAAA,IAC9B;AAAA,IAEA,cAAeA,OAAM;AACnB,MAAM,KAAK,WAAW,GAAGA,KAAI;AAAA,IAC/B;AAAA,EACF;AAxCE,gBADI,WACG,mBAAkB;AAAA,IACvB,OAAO;AAAA,EACT;AAEA,gBALI,WAKG,kBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;;;ACZF,MAAM,oBAAN,MAAwB;AAAA,IACtB,OAAO,QAAQ,QAAQ,OAAO,CAAC,GAAG;AAChC,YAAM,UAAU,KAAK,MAAM;AAC3B,UAAI,SAAS;AACX,aAAK,aAAa,QAAQ,WAAW,MAAM,CAAC;AAC5C,aAAK,aAAa,QAAQ;AAC1B,aAAK,QAAQ,QAAQ;AACrB,aAAK,cAAc,QAAQ;AAC3B,aAAK,iBAAiB,QAAQ;AAAA,MAChC;AAEA,WAAK,UAAU;AACf,WAAK,mBAAmB;AACxB,WAAK,eAAe;AACpB,WAAK,eAAe,CAAC;AACrB,UAAI,KAAK;AAAW,aAAK,WAAW,KAAK,KAAK,SAAS;AAEvD,WAAK,cAAc,OAAK;AACtB,eAAO,KAAK,cAAc,KAAK,YAAY,KAAK,kBAAkB,KAAK;AAAA,MACzE;AAEA,YAAM,YAAY,OAAK;AACrB,YAAG,CAAC,KAAK;AAAY,iBAAO;AAC5B,YAAI,QAAQ;AACZ,aAAK,WAAW,QAAQ,QAAM;AAC5B,mBAAS,KAAK,MAAM,QAAQ,EAAE,IAAI,GAAG,GAAG,GAAG,MAAO,OAAO,MAAM,aAAa,GAAG,IAAI,OAAQ,KAAK;AAAA,QAClG,CAAC;AACD,eAAO;AAAA,MACT;AAEA,aAAO,4BAA4B;AAEnC,aAAO,QAAS,YAAa,KAAK;AAChC,YAAG,CAAC,KAAK,YAAY;AAAG;AACxB,YAAI,QAAQ,UAAU,CAAC;AACvB,YAAG,CAAC,IAAI;AAAI,cAAI,MAAM;AACtB,gBAAQ,MAAM,MAAM,SAAS,GAAG;AAAA,MAClC,EAAG,KAAK,MAAM;AAEd,aAAO,OAAQ,YAAa,KAAK;AAC/B,YAAI,QAAQ,UAAU,CAAC;AACvB,YAAG,CAAC,IAAI;AAAI,cAAI,MAAM;AACtB,gBAAQ,KAAK,MAAM,SAAS,GAAG;AAAA,MACjC,EAAG,KAAK,MAAM;AAEd,aAAO,UAAW,YAAa,KAAK;AAClC,YAAI,QAAQ,UAAU,CAAC;AACvB,YAAG,CAAC,IAAI;AAAI,cAAI,MAAM;AACtB,gBAAQ,KAAK,MAAM,SAAS,GAAG;AAAA,MACjC,EAAG,KAAK,MAAM;AAEd,aAAO,QAAS,YAAa,KAAK;AAChC,YAAI,QAAQ,UAAU,CAAC;AACvB,YAAG,CAAC,IAAI;AAAI,cAAI,MAAM;AACtB,gBAAQ,MAAM,MAAM,SAAS,GAAG;AAAA,MAClC,EAAG,KAAK,MAAM;AAAA,IAChB;AAAA,EACF;;;ACzDA,MAAM,eAAN,MAAmB;AAAA,IACjB,OAAO,QAAQ,QAAQ,SAAS,CAAC,GAAG,MAAM;AACxC,UAAG,CAAC,MAAM,QAAQ,MAAM;AAAG,iBAAS,MAAM,MAAM;AAChD,UAAG,OAAO,UAAU;AAAG,eAAO,KAAK,QAAQ;AAC3C,UAAG,CAAC,OAAO,GAAG,OAAO;AAAK,eAAO,GAAG,OAAO,MAAM,IAAI,aAAa,OAAO,OAAO,EAAE;AAElF,YAAM,MAAM,OAAO,GAAG,OAAO;AAC7B,aAAO,GAAG,KAAK,IAAI,GAAG,KAAK,GAAG;AAC9B,aAAO,GAAG,MAAM,IAAI,IAAI,KAAK,GAAG;AAChC,aAAO,GAAG,OAAO,IAAI,KAAK,KAAK,GAAG;AAElC,aAAO,QAAQ,SAAO,OAAO,GAAG,OAAO,IAAI,SAAS,KAAK,IAAI,CAAC;AAAA,IAChE;AAAA,EACF;AAEA,eAAa,SAAS,MAAM;AAAA,IAC1B,YAAY,QAAQ;AAClB,WAAK,SAAS;AACd,WAAK,YAAY,CAAC;AAAA,IACpB;AAAA,IAEA,GAAG,KAAK,IAAI;AACV,UAAG,CAAC,KAAK,UAAU;AAAM,cAAM,iBAAiB;AAChD,WAAK,UAAU,KAAK,KAAK,EAAE;AAC3B,SAAG,SAAS,OAAK,KAAK,IAAI,KAAK,EAAE;AACjC,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,KAAK,IAAI;AACX,UAAG,CAAC,KAAK,UAAU;AAAM,cAAM,iBAAiB;AAChD,YAAM,QAAQ,KAAK,UAAU,KAAK,QAAQ,EAAE;AAC5C,UAAG,QAAQ;AAAG,cAAM,sBAAsB;AAC1C,WAAK,UAAU,KAAK,OAAO,OAAO,CAAC;AACnC,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,KAAK,QAAQC,OAAM;AACjB,UAAG,CAAC,KAAK,UAAU;AAAM,cAAM,iBAAiB;AAChD,WAAK,UAAU,KAAK,QAAQ,QAAM,GAAG,MAAM,KAAK,QAAQA,KAAI,CAAC;AAC7D,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,SAAS,KAAK,MAAM;AAClB,UAAG,CAAC,KAAK,UAAU;AAAM,aAAK,UAAU,OAAO,CAAC;AAChD,UAAG,MAAM;AACP,cAAM,cAAc,GAAG,IAAI,GAAG,YAAY,IAAI,IAAI,MAAM,CAAC;AACzD,YAAG,KAAK,KAAK;AAAgB,eAAK,GAAG,KAAK,KAAK,KAAK,cAAc;AAAA,MACpE;AAAA,IACF;AAAA,EAkBF;;;AChEA,MAAM,WAAN,MAAe;AAAA,IACb,YAAY,KAAK;AACf,WAAK,MAAM;AACX,WAAK,aAAa,CAAC;AACnB,MAAM,kBAAkB,QAAQ,MAAM,EAAE,MAAM,KAAK,KAAK,WAAW,WAAW,CAAC;AAAA,IACjF;AAAA,IAEA,WAAW;AACT,WAAK,QAAQ,IAAI,MAAM,MAAM;AAAA,QAC3B,IAAI,QAAQ,MAAM,UAAU;AAC1B,cAAG,OAAO,OAAO,SAAS;AAAY,mBAAO,OAAO,MAAM,KAAK,MAAM;AACrE,cAAG,QAAQ;AAAY,mBAAO;AAC9B,cAAI,KAAK,QAAQ,IAAI,OAAO,YAAY,MAAM,QAAQ;AACtD,iBAAO,KAAK,GAAG,SAAS,IAAI;AAAA,QAC9B;AAAA,MACF,CAAC;AAED,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,UAAU,IAAI,MAAM,QAAQ;AAC1B,UAAG,CAAC,KAAK,WAAW,KAAK;AACvB,aAAK,WAAW,MAAM,IAAI,SAAS,UAAU,IAAI,IAAI;AAAA,MACvD;AACA,WAAK,WAAW,IAAI,eAAe,MAAM,MAAM;AAAA,IACjD;AAAA,IAEA,SAAS;AACP,aAAO,QAAQ,KAAK,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM;AACtD,eAAO,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC,CAACC,OAAM,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC;AAAA,MAC9D,CAAC;AAAA,IACH;AAAA,IAEA,UAAU;AACR,aAAO,QAAQ,KAAK,UAAU,EAAE,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM;AACtD,eAAO,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC,CAACA,OAAM,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC;AAAA,MAC/D,CAAC;AAAA,IACH;AAAA,EACF;AAEA,WAAS,YAAY,MAAM;AAAA,IACzB,YAAY,MAAM,KAAK;AACrB,WAAK,MAAM,IAAI;AACf,WAAK,OAAO;AACZ,WAAK,MAAM;AACX,WAAK,SAAS,CAAC;AAAA,IACjB;AAAA,IAEA,WAAW;AACT,aAAO,KAAK,QAAQ,IAAI,MAAM,MAAM;AAAA,QAClC,IAAI,QAAQ,MAAM,UAAU;AAC1B,iBAAO,QAAQ,IAAI,OAAO,QAAQ,MAAM,QAAQ;AAAA,QAClD;AAAA,QACA,IAAI,QAAQ,MAAM,KAAK;AACrB,cAAI,KAAK,QAAQ,IAAI,OAAO,QAAQ,IAAI;AACxC,eAAK,GAAG,IAAI,GAAG,IAAI,QAAQ,MAAM,sBAAsB,MAAM,UAAU,MAAM;AAAA,QAC/E;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,eAAe,MAAM,QAAQ;AAC3B,YAAM,OAAO,IAAI,OAAO,MAAM,IAAI;AAClC,WAAK,OAAO,QAAQ;AACpB,WAAK,OAAO;AAAA,IACd;AAAA,EACF;AAEA,WAAS,QAAQ,MAAM;AAAA,IACrB,YAAY,IAAI,MAAM;AACpB,WAAK,MAAM,GAAG;AACd,WAAK,KAAK;AACV,WAAK,OAAO;AACZ,WAAK,QAAQ;AACb,MAAM,aAAa,QAAQ,MAAM,CAAC,QAAQ,CAAC;AAC3C,MAAM,kBAAkB,QAAQ,MAAM,EAAE,MAAM,KAAK,GAAG,KAAK,WAAW,OAAK,CAAC,KAAK,GAAG,MAAM,KAAK,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;AAAA,IAClH;AAAA,IAEA,IAAI,GAAG;AACL,UAAI,KAAK,SAAS,GAAG;AACnB,aAAK,OAAO,KAAK,UAAU,MAAM,GAAG,KAAK,KAAK;AAC9C,aAAK,SAAS,GAAG,KAAK,KAAK;AAC3B,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAAA,IAEA,OAAO;AAAE,WAAK,IAAI,IAAI;AAAA,IAAE;AAAA,IACxB,MAAM;AAAE,WAAK,IAAI,IAAI;AAAA,IAAE;AAAA,IACvB,QAAQ;AAAE,WAAK,IAAI,KAAK;AAAA,IAAE;AAAA,IAC1B,KAAK;AAAE,WAAK,IAAI,KAAK;AAAA,IAAE;AAAA,EACzB;;;AC3FA,MAAM,OAAN,MAAW;AAAA,IACT,OAAO,UAAU,KAAK,mBAAmB,MAAM;AAC7C,UAAG,OAAO,SAAS,EAAE,oBAAoB,QAAQ,CAAC,mBAAmB;AACnE,cAAM,MAAM,GAAG;AAAA,MACjB,WAAW,OAAO,cAAc,EAAE,oBAAoB,QAAQ,CAAC,mBAAmB;AAChF,mBAAW,MAAM,GAAG;AAAA,MACtB,OAAO;AACL,eAAO,SAAS,OAAO;AAAA,MACzB;AAAA,IACF;AAAA,IAEA,OAAO,aAAa;AAClB,YAAM,KAAK,UAAU,GAAG,IAAI;AAC5B,WAAK,UAAU,OAAO,QAAQ;AAAA,IAChC;AAAA,IAEA,OAAO,WAAY,KAAK;AACtB,aAAO,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAAA,IAClD;AAAA,IAEA,OAAO,QAAQ,GAAG,QAAQ;AACxB,UAAG,CAAC,MAAM,QAAQ,KAAK,KAAK,KAAK,OAAO,IAAI,EAAE,SAAS,CAAC,GAAG;AACzD,eAAO;AAAA,MACT,WAAU,CAAC,OAAO,SAAS,KAAK,KAAK,KAAK,MAAM,KAAK,EAAE,SAAS,CAAC,GAAG;AAClE,eAAO;AAAA,MACT,OAAO;AACL,YAAG,UAAU;AAAM,iBAAO;AAC1B,cAAM,mBAAmB;AAAA,MAC3B;AAAA,IACF;AAAA,IAEA,OAAO,aAAa,GAAG,WAAW,GAAG;AACnC,UAAI,UAAU;AACZ,eAAO,EAAE,QAAQ,QAAQ,EAAE,QAAQ,qBAAqB,KAAK;AAAA,MAC/D,OAAO;AACL,eAAO,EAAE,QAAQ,CAAC,EAAE,QAAQ,qBAAqB,KAAK,EAAE,QAAQ,SAAS,EAAE;AAAA,MAC7E;AAAA,IACF;AAAA,IAEA,OAAO,cAAc,YAAY,MAAM,SAAS,OAAO,UAAU;AAC/D,YAAM,SAAS,CAAC;AAChB,UAAI,CAAC,OAAO;AAAM,eAAO;AAEzB,UAAI,MAAM,OAAO,KAAK,OAAO,CAAC;AAC9B,UAAG;AAAW,cAAM,mBAAmB,GAAG;AAC1C,YAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,YAAM,QAAQ,QAAM;AAClB,cAAM,MAAM,GAAG,MAAM,GAAG;AACxB,cAAM,MAAM,IAAI,MAAM;AACtB,eAAO,OAAO,IAAI,KAAK,GAAG;AAAA,MAC5B,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,iBAAiB,UAAU,CAAC,GAAG,MAAM;AAC1C,WAAK,cAAc,OAAO,OAAO,CAAC,GAAG,KAAK,cAAc,GAAG,OAAO,GAAG,IAAI;AAAA,IAC3E;AAAA,IAEA,OAAO,oBAAoB,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG;AAClD,YAAM,MAAM,CAAC;AACb,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,OAAO,GAAG;AAC5C,YAAG,MAAM;AAAW;AACpB,YAAG,MAAM,MAAM,KAAK;AAAa;AACjC,YAAG,MAAM;AACP,cAAI,KAAK,GAAG,GAAG;AAAA;AAEf,cAAI,KAAK,GAAG,KAAK,GAAG;AAAA,MACxB;AACA,aAAO,IAAI,KAAK,GAAG;AAAA,IACrB;AAAA,IAEA,OAAO,cAAc,UAAU,CAAC,GAAG,OAAO,CAAC,GAAG;AAE5C,cAAQ,aAAa,QAAW,QAAW,IAAI,KAAK,oBAAoB,OAAO,GAAG;AAAA,IACpF;AAAA,IAEA,OAAO,kBAAkB,IAAI,OAAO,CAAC,GAAG,UAAU;AAChD,UAAG,CAAC,sBAAsB;AACxB,gBAAQ,KAAK,oCAAoC;AACjD,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,QAAQ,YAAY;AAC7B,mBAAW;AACX,eAAO,CAAC;AAAA,MACV;AAEA,WAAK,EAAE,EAAE,EAAE,IAAI,CAAC;AAChB,WAAK,SAAS,SAAS;AAEvB,YAAM,WAAW,IAAI,qBAAsB,CAAC,SAASC,cAAa;AAChE,gBAAQ,QAAQ,WAAS,WAAW,MAAM,oBAAoB,GAAGA,SAAQ,CAAC;AAAA,MAC5E,GAAI,IAAI;AAER,eAAS,QAAQ,EAAE;AACnB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,SAAS,MAAM,UAAU,KAAK;AACnC,UAAI;AACJ,aAAO,IAAIC,UAAS;AAClB,qBAAa,KAAK;AAClB,gBAAQ,WAAW,MAAM;AAAE,eAAK,MAAM,MAAMA,KAAI;AAAA,QAAE,GAAG,OAAO;AAAA,MAC9D;AAAA,IACF;AAAA,IAEA,OAAO,iBAAiB,MAAM,UAAU,KAAK;AAC3C,UAAI;AACJ,aAAO,IAAIA,UAAS;AAClB,YAAI,CAAC,OAAO;AACV,eAAK,MAAM,MAAMA,KAAI;AAAA,QACvB;AACA,qBAAa,KAAK;AAClB,gBAAQ,WAAW,MAAM;AACvB,kBAAQ;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,IACF;AAAA,IAEA,OAAO,SAAS,MAAM,UAAU,KAAK;AACnC,UAAI;AAEJ,aAAO,IAAIA,UAAS;AAClB,YAAG;AAAO;AAEV,gBAAQ,WAAW,MAAM;AACvB,eAAK,MAAM,MAAMA,KAAI;AACrB,kBAAQ;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,IACF;AAAA,IAEA,OAAO,iBAAiB,MAAM,UAAU,KAAK;AAC3C,UAAI;AAEJ,aAAO,IAAIA,UAAS;AAClB,YAAG;AAAO;AAEV,aAAK,MAAM,MAAMA,KAAI;AACrB,gBAAQ,WAAW,MAAM;AACvB,kBAAQ;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,IACF;AAAA,IAEA,OAAO,kBAAkB,MAAM,UAAU,KAAK;AAC5C,UAAI;AACJ,UAAI;AAEJ,aAAO,IAAIA,UAAS;AAClB,qBAAa,MAAM;AACnB,iBAAS,WAAW,MAAM;AAAE,eAAK,MAAM,MAAMA,KAAI;AAAA,QAAE,GAAG,OAAO;AAE7D,YAAG;AAAO;AAEV,aAAK,MAAM,MAAMA,KAAI;AACrB,gBAAQ,WAAW,MAAM;AACvB,kBAAQ;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,IACF;AAAA,IAEA,OAAO,0BAA0B,MAAM,UAAU,KAAK;AACpD,UAAI;AACJ,UAAI;AAEJ,aAAO,IAAIA,UAAS;AAClB,YAAG,CAAC;AAAQ,eAAK,MAAM,MAAMA,KAAI;AACjC,qBAAa,MAAM;AACnB,iBAAS,WAAW,MAAM;AAAE,eAAK,MAAM,MAAMA,KAAI;AAAA,QAAE,GAAG,OAAO;AAE7D,YAAG;AAAO;AAEV,aAAK,MAAM,MAAMA,KAAI;AACrB,gBAAQ,WAAW,MAAM;AACvB,kBAAQ;AAAA,QACV,GAAG,OAAO;AAAA,MACZ;AAAA,IACF;AAAA,IAEA,OAAO,aAAa,IAAI,eAAe;AACrC,YAAM,WAAW,EAAE,EAAE,EAAE,IAAK,UAAW;AACvC,YAAM,sBAAsB,aAAa;AACzC,YAAM,gBAAgB,gBAAgB,yBAAyB;AAC/D,YAAM,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,WAAW;AACrD,cAAM,SAAS,EAAG,IAAK;AACvB,YAAI,uBAAuB,OAAO,IAAK,UAAW,MAAM,UAAU;AAChE,iBAAO;AAAA,QACT;AACA,eAAO,cAAc,KAAK,OAAO,IAAK,UAAW,IAAI,OAAO,IAAK,YAAa,IAAI,OAAO,IAAK,YAAa,CAAC;AAAA,MAC9G,CAAC,EAAE,GAAG,CAAC;AAEP,aAAO,aAAa,WAAW,CAAC,aAAa,SAC3C,EAAG,EAAE,EAAE,EAAE,GAAG,iBAAiB,QAAS,IACtC;AAAA,IACJ;AAAA,IAEA,OAAO,uBAAuB,QAAQ,OAAO,CAAC,GAAG;AAC/C,eAAS,EAAE,MAAM;AACjB,WAAK,YAAY;AACjB,WAAK,WAAW,OAAO,OAAO;AAC9B,WAAK,YAAY,KAAK,aAAa,MAAM;AACzC,WAAK,aAAa;AAElB,YAAM,OAAO,OAAO,OAAO;AAC3B,YAAM,OAAO,KAAK,QAAQ,OAAO;AACjC,YAAM,OAAO,KAAK,QAAQ,UAAU;AAEpC,UAAI,IAAI,GAAG,IAAI;AACf,UAAI,eAAe,KAAK,QAAQ,YAAY,IAAI,OAAO,YAAY;AACnE,UAAI,KAAK,MAAM,KAAK;AAEpB,UAAI,KAAK,iBAAiB,CAAC,MAAM,QAAQ,KAAK,aAAa,GAAG;AAC5D,aAAK,gBAAgB,CAAC,KAAK,aAAa;AAAA,MAC1C;AACA,UAAI,KAAK,eAAe;AACtB,aAAK,cAAc,QAAQ,QAAM;AAC/B,gBAAM,KAAK,EAAE,EAAE,EAAE,YAAY;AAC7B,eAAK;AACL,0BAAgB;AAAA,QAClB,CAAC;AAAA,MACH;AAEA,UAAG,IAAI,GAAG;AACR,YAAI,UAAU,IAAI;AAClB,YAAI,KAAK,SAAS;AAChB,qBAAW,KAAK,MAAM,eAAe,CAAC;AAAA,QACxC;AACA,aAAK,QAAQ,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS,MAAM,GAAG,UAAU,KAAK,SAAS,CAAC;AAAA,MACjF,WAAW,IAAI,GAAG;AAChB,YAAI,UAAU;AACd,YAAG,IAAI,eAAe,GAAG;AACvB,qBAAY,IAAI;AAChB,cAAI,KAAK,SAAS;AAChB,uBAAW,KAAK,MAAM,eAAe,CAAC;AAAA,UACxC;AACA,eAAK,QAAQ,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,SAAS,MAAM,GAAG,UAAU,KAAK,SAAS,CAAC;AAAA,QACjF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO,SAAS,OAAO,MAAM,SAAS,GAAG;AACvC,YAAM,MAAM,IAAI,MAAM,w/HAAw/H;AAC9gI,UAAI,SAAS;AACb,UAAG;AAAM,YAAI,KAAK;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,UAAU,MAAM,QAAQ,QAAQ;AACrC,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAI;AACF,gBAAM,UAAU,IAAI,aAAa;AACjC,gBAAM,aAAa,QAAQ,iBAAiB;AAC5C,gBAAM,WAAW,QAAQ,WAAW;AAEpC,qBAAW,OAAO;AAClB,qBAAW,UAAU,QAAQ;AAC7B,mBAAS,KAAK,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC;AAErD,qBAAW,QAAQ,QAAQ;AAC3B,mBAAS,QAAQ,QAAQ,WAAW;AAEpC,qBAAW,MAAM;AAEjB,gBAAM,WAAW,QAAM;AACrB,uBAAW,KAAK;AAChB,oBAAQ,MAAM;AACd,qBAAS;AACT,iBAAK;AAAA,UACP;AAEA,kBAAQ,EAAE,YAAwB,MAAM,UAAU,UAAoB,MAAM,SAAS,MAAM,QAAiB,CAAC;AAAA,QAC/G,SAAQ,KAAN;AACA,iBAAO,GAAG;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,OAAO,KAAK,OAAO,KAAM,WAAW,KAAK,SAAS,GAAG;AACnD,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,aAAK,UAAU,MAAM,MAAM,EAAE,KAAK,UAAQ;AACxC,cAAG,YAAY,MAAM;AACnB,oBAAQ,IAAI;AAAA,UACd,OAAO;AACL,uBAAW,OAAK;AAAE,mBAAK,KAAK,OAAO;AAAA,YAAE,GAAG,QAAQ;AAAA,UAClD;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAEA,OAAO,QAAQ,KAAK,OAAO,CAAC,GAAG;AAC7B,WAAK,WAAW;AAChB,WAAK,aAAa;AAClB,WAAK,SAAS;AACd,WAAK,SAAS;AAEd,UAAI,MAAM,KAAK;AACf,UAAI,MAAM,KAAK;AACf,UAAI,OAAO,KAAK;AAChB,UAAI,OAAO,KAAK;AAChB,UAAI,OAAO;AACX,UAAI,MAAM,KAAK,UAAU,GAAG,GAAG;AAC/B,UAAI,KAAK,OAAK;AACZ,eAAO;AACP,aAAK,KAAK,QAAQ;AAAA,MACpB,CAAC;AAED,UAAI,MAAM,GAAG,EAAE,QAAQ,QAAM;AAC3B,cAAM,SAAS,GAAG,MAAM,GAAG;AAE3B,cAAM,IAAI,KAAK,OAAK;AAClB,cAAG,OAAO,MAAM,QAAQ;AACtB,mBAAO,SAAS,OAAO,EAAE;AACzB,mBAAO,QAAQ,QAAQ;AAAA,UACzB,WAAU,OAAO,MAAM,OAAO;AAC5B,kBAAM,SAAS,OAAO,EAAE;AACxB,mBAAO,QAAQ,QAAQ;AAAA,UACzB,WAAU,OAAO,MAAM,OAAO;AAC5B,kBAAM,WAAW,OAAO,EAAE;AAC1B,gBAAG;AAAM,mBAAK,KAAK,QAAQ;AAC3B,mBAAO,QAAQ,QAAQ;AAAA,UACzB,WAAU,OAAO,MAAM,QAAQ;AAC7B,mBAAO,OAAO;AACd,gBAAG;AAAM,mBAAK,WAAW,OAAO;AAChC,mBAAO,QAAQ,QAAQ;AAAA,UACzB,WAAU,OAAO,MAAM,KAAK;AAC1B,kBAAM,UAAU,KAAK,WAAW,UAAU;AAC1C,iBAAK,WAAW,UAAU,QAAQ;AAClC,kBAAM,OAAO,KAAK,KAAK,SAAS,OAAO,MAAM,GAAG,CAAC;AACjD,iBAAK,KAAK,CAAAC,OAAK,KAAK,WAAW,UAAU,QAAQ,OAAO;AACxD,mBAAO;AAAA,UACT,OAAO;AACL,gBAAI,OAAO,QAAQ,QAAQ;AAC3B,gBAAI,CAAC,MAAM,OAAO,IAAI,OAAO,GAAG,MAAM,GAAG;AACzC,wBAAY;AACZ,kBAAM,UAAU,CAAC,UAAU;AACzB,mBAAK,WAAW,UAAU,QAAQ,SAAS,IAAI;AAC/C,qBAAO,KAAK,KAAK,KAAK;AAAA,YACxB;AAEA,qBAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,kBAAG,MAAM;AACP,uBAAO,KAAK,KAAK,CAAAA,OAAK;AACpB,wBAAM,UAAU,KAAK,WAAW,UAAU;AAC1C,uBAAK,WAAW,UAAU,QAAQ;AAClC,yBAAO,KAAK,KAAK,IAAI,EAAE,KAAK,CAAAA,OAAK,QAAQ,SAAS,OAAO,MAAM,GAAG,CAAC,CAAC;AAAA,gBACtE,CAAC;AAAA,cACH,OAAO;AACL,uBAAO,KAAK,KAAK,CAAAA,OAAK,QAAQ,SAAS,OAAO,MAAM,GAAG,CAAC,CAAC;AAAA,cAC3D;AAAA,YACF;AAEA,mBAAO;AAAA,UACT;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAED,YAAM,IAAI,KAAK,OAAK,KAAK,KAAK,CAAC;AAE/B,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,KAAK,IAAI;AACd,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW,WAAW,SAAS,EAAE,CAAC;AAAA,IACjE;AAAA,IAEA,OAAO,aAAa,KAAK;AACvB,aAAO,IACJ,YAAY,EACZ,KAAK,EACL,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE;AAAA,IAC3B;AAAA,EACF;;;AC5WA,MAAMC,SAAN,MAAY;AAAA,IACV,OAAO,KAAK,KAAK;AACf,UAAI,OAAO,KAAK,QAAQ,IAAI;AAC5B,UAAI,KAAK,aAAa,MAAM,KAAK,CAAC,GAAG,CAAC;AAEtC,MAAAA,OAAM,4BAA4B,GAAG;AAErC,MAAAA,OAAM,8BAA8B,GAAG;AAEvC,UAAI,OAAO,KAAK,QAAQ,GAAG;AAC3B,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,4BAA4B,KAAK;AACtC,UAAG,CAAC,OAAO,wCAAwC;AACjD,aAAK,mBAAmB,GAAG;AAC3B,eAAO,yCAAyC;AAAA,MAClD;AAAA,IACF;AAAA,IAEA,OAAO,mBAAmB,KAAK;AAC7B,UAAI,OAAO,GAAG,QAAQ,OAAK;AAAE,QAAAA,OAAM,iBAAiB,YAAY,EAAE,IAAS,CAAC;AAAA,MAAE,CAAC;AAC/E,UAAI,OAAO,GAAG,gBAAgB,OAAK;AAAE,QAAAA,OAAM,iBAAiB,iBAAiB,EAAE,IAAS,CAAC;AAAA,MAAE,CAAC;AAC5F,UAAI,OAAO,GAAG,YAAY,OAAK;AAAE,QAAAA,OAAM,iBAAiB,aAAa,EAAE,IAAS,CAAC;AAAA,MAAE,CAAC;AAAA,IACtF;AAAA,IAEA,OAAO,8BAA8B,KAAK;AACxC,UAAG,CAAC,OAAO,+BAA+B;AACxC,aAAK,qBAAqB,GAAG;AAAA,MAC/B;AAAA,IACF;AAAA,IAEA,OAAO,qBAAqB,KAAK;AAC/B,aAAO,+BAA+B,QAAQ;AAC9C,aAAO,gCAAgC,IAAI,gBAAgB,GAAG;AAC9D,aAAO,2BAA2B,OAAO,8BAA8B,OAAO,KAAK,OAAO,6BAA6B;AACvH,WAAK,OAAO,GAAG,YAAY,OAAK;AAAE,eAAO,8BAA8B,OAAO;AAAA,MAAE,CAAC;AAAA,IACnF;AAAA,IAeA,OAAO,iBAAiB,MAAM,MAAM,CAAC,GAAG;AACtC,eAAS,iBAAiB,kBAAkB,OAAO,EAAE,QAAQ,SAAO;AAClE,cAAM,IAAI,IAAI,SAAS,OAAO,IAAI,QAAQ,kBAAkB,WAAW;AACvE,YAAG,OAAO,KAAK,KAAK,SAAS;AAAY,cAAI,IAAI,MAAM,oBAAoB,MAAM,GAAG;AACpF,UAAE,GAAG;AACL,YAAI,OAAO;AAAA,MACb,CAAC;AAAA,IACH;AAAA,IAEA,OAAO,gBAAgB,OAAO;AAC5B,YAAM,MAAM;AAAA,QACV,cAAc;AACZ,gBAAM,QAAQ,UAAQ,OAAO,OAAO,MAAM,IAAI,KAAK,CAAC,CAAC;AAAA,QACvD;AAAA,MACF;AACA,YAAM,QAAQ,UAAQ;AACpB,eAAO,oBAAoB,KAAK,SAAS,EACxC,OAAO,UAAQ,QAAQ,aAAa,EACpC,QAAQ,UAAQ,MAAM,UAAU,QAAQ,KAAK,UAAU,KAAK;AAAA,MAC/D,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,wBAAwB,OAAO;AACpC,YAAM,MAAM;AAAA,MAAC;AACb,YAAM,QAAQ,UAAQ;AACpB,eAAO,oBAAoB,KAAK,SAAS,EACxC,OAAO,UAAQ,QAAQ,aAAa,EACpC,QAAQ,UAAQ,MAAM,UAAU,QAAQ,KAAK,UAAU,KAAK;AAAA,MAC/D,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,KAAK,KAAK;AACf,YAAM,WAAW,SAAS,cAAc,UAAU;AAClD,eAAS,YAAY;AACrB,aAAO,SAAS,QAAQ;AAAA,IAC1B;AAAA,IAEA,OAAO,QAAQ,KAAK;AAClB,YAAM,WAAW,SAAS,cAAc,UAAU;AAClD,eAAS,YAAY;AACrB,aAAO,SAAS,QAAQ;AAAA,IAC1B;AAAA,EACF;AAEA,MAAM,eAAeA,OAAM;AAC3B,MAAM,uBAAuBA,OAAM;AACnC,MAAM,+BAA+BA,OAAM;;;AC5G3C,SAAO,OAAO,YAAY,OAAO,OAAO;AAExC,SAAO;AAAA,IAAQ,OAAO;AAAA,IACtB;AAAA,MACE,KAAK;AAAA,MACL,OAAO,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AAE9B,eAAO,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,MACvD;AAAA,MACA,YAAY,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACnC,eAAO,KAAG,KAAG,KAAG,IAAI;AAAA,MACtB;AAAA,MACA,aAAa,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,eAAO,CAAC,KAAI,KAAG,MAAI,IAAE,KAAK;AAAA,MAC5B;AAAA,MACA,eAAe,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACtC,aAAK,KAAG,IAAE,KAAK;AAAG,iBAAO,IAAE,IAAE,IAAE,IAAI;AACnC,eAAO,CAAC,IAAE,KAAM,EAAE,KAAI,IAAE,KAAK,KAAK;AAAA,MACpC;AAAA,MACA,aAAa,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,eAAO,KAAG,KAAG,KAAG,IAAE,IAAI;AAAA,MACxB;AAAA,MACA,cAAc,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACrC,eAAO,MAAI,IAAE,IAAE,IAAE,KAAG,IAAE,IAAI,KAAK;AAAA,MACjC;AAAA,MACA,gBAAgB,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACvC,aAAK,KAAG,IAAE,KAAK;AAAG,iBAAO,IAAE,IAAE,IAAE,IAAE,IAAI;AACrC,eAAO,IAAE,MAAI,KAAG,KAAG,IAAE,IAAI,KAAK;AAAA,MAChC;AAAA,MACA,aAAa,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,eAAO,KAAG,KAAG,KAAG,IAAE,IAAE,IAAI;AAAA,MAC1B;AAAA,MACA,cAAc,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACrC,eAAO,CAAC,MAAM,IAAE,IAAE,IAAE,KAAG,IAAE,IAAE,IAAI,KAAK;AAAA,MACtC;AAAA,MACA,gBAAgB,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACvC,aAAK,KAAG,IAAE,KAAK;AAAG,iBAAO,IAAE,IAAE,IAAE,IAAE,IAAE,IAAI;AACvC,eAAO,CAAC,IAAE,MAAM,KAAG,KAAG,IAAE,IAAE,IAAI,KAAK;AAAA,MACrC;AAAA,MACA,aAAa,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,eAAO,KAAG,KAAG,KAAG,IAAE,IAAE,IAAE,IAAI;AAAA,MAC5B;AAAA,MACA,cAAc,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACrC,eAAO,MAAI,IAAE,IAAE,IAAE,KAAG,IAAE,IAAE,IAAE,IAAI,KAAK;AAAA,MACrC;AAAA,MACA,gBAAgB,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACvC,aAAK,KAAG,IAAE,KAAK;AAAG,iBAAO,IAAE,IAAE,IAAE,IAAE,IAAE,IAAE,IAAI;AACzC,eAAO,IAAE,MAAI,KAAG,KAAG,IAAE,IAAE,IAAE,IAAI,KAAK;AAAA,MACpC;AAAA,MACA,YAAY,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACnC,eAAO,CAAC,IAAI,KAAK,IAAI,IAAE,KAAK,KAAK,KAAG,EAAE,IAAI,IAAI;AAAA,MAChD;AAAA,MACA,aAAa,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,eAAO,IAAI,KAAK,IAAI,IAAE,KAAK,KAAK,KAAG,EAAE,IAAI;AAAA,MAC3C;AAAA,MACA,eAAe,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACtC,eAAO,CAAC,IAAE,KAAK,KAAK,IAAI,KAAK,KAAG,IAAE,CAAC,IAAI,KAAK;AAAA,MAC9C;AAAA,MACA,YAAY,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACnC,eAAQ,KAAG,IAAK,IAAI,IAAI,KAAK,IAAI,GAAG,MAAM,IAAE,IAAI,EAAE,IAAI;AAAA,MACxD;AAAA,MACA,aAAa,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,eAAQ,KAAG,IAAK,IAAE,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,MAAM,IAAE,CAAC,IAAI,KAAK;AAAA,MAC5D;AAAA,MACA,iBAAiB,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACxC,YAAI,OAAO,CAAC,KAAK,IAAI,GAAG,MAAM,IAAE,CAAC,IAAI;AACrC,YAAI,WAAW,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC;AACvC,eAAO,IAAI,IAAI;AAAA,MACjB;AAAA,MACA,eAAe,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACtC,YAAI,KAAG;AAAG,iBAAO;AACjB,YAAI,KAAG;AAAG,iBAAO,IAAE;AACnB,aAAK,KAAG,IAAE,KAAK;AAAG,iBAAO,IAAE,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,EAAE,IAAI;AAC3D,eAAO,IAAE,KAAK,CAAC,KAAK,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,KAAK;AAAA,MAC/C;AAAA,MACA,YAAY,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACnC,eAAO,CAAC,KAAK,KAAK,KAAK,KAAK,KAAG,KAAG,CAAC,IAAI,KAAK;AAAA,MAC9C;AAAA,MACA,aAAa,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACpC,eAAO,IAAI,KAAK,KAAK,KAAK,IAAE,IAAE,IAAE,KAAG,CAAC,IAAI;AAAA,MAC1C;AAAA,MACA,eAAe,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACtC,aAAK,KAAG,IAAE,KAAK;AAAG,iBAAO,CAAC,IAAE,KAAK,KAAK,KAAK,IAAI,IAAE,CAAC,IAAI,KAAK;AAC3D,eAAO,IAAE,KAAK,KAAK,KAAK,KAAK,KAAG,KAAG,CAAC,IAAI,KAAK;AAAA,MAC/C;AAAA,MACA,eAAe,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACtC,YAAI,IAAE;AAAQ,YAAI,IAAE;AAAE,YAAI,IAAE;AAC5B,YAAI,KAAG;AAAG,iBAAO;AAAI,aAAK,KAAG,MAAI;AAAG,iBAAO,IAAE;AAAI,YAAI,CAAC;AAAG,cAAE,IAAE;AAC7D,YAAI,IAAI,KAAK,IAAI,CAAC,GAAG;AAAE,cAAE;AAAG,cAAI,IAAE,IAAE;AAAA,QAAG;AAClC,cAAI,IAAI,KAAG,IAAE,KAAK,MAAM,KAAK,KAAM,IAAE,CAAC;AAC3C,eAAO,EAAE,IAAE,KAAK,IAAI,GAAE,MAAI,KAAG,EAAE,IAAI,KAAK,KAAM,IAAE,IAAE,MAAI,IAAE,KAAK,MAAI,CAAE,KAAK;AAAA,MAC1E;AAAA,MACA,gBAAgB,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACvC,YAAI,IAAE;AAAQ,YAAI,IAAE;AAAE,YAAI,IAAE;AAC5B,YAAI,KAAG;AAAG,iBAAO;AAAI,aAAK,KAAG,MAAI;AAAG,iBAAO,IAAE;AAAI,YAAI,CAAC;AAAG,cAAE,IAAE;AAC7D,YAAI,IAAI,KAAK,IAAI,CAAC,GAAG;AAAE,cAAE;AAAG,cAAI,IAAE,IAAE;AAAA,QAAG;AAClC,cAAI,IAAI,KAAG,IAAE,KAAK,MAAM,KAAK,KAAM,IAAE,CAAC;AAC3C,eAAO,IAAE,KAAK,IAAI,GAAE,MAAI,CAAC,IAAI,KAAK,KAAM,IAAE,IAAE,MAAI,IAAE,KAAK,MAAI,CAAE,IAAI,IAAI;AAAA,MACvE;AAAA,MACA,kBAAkB,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACzC,YAAI,IAAE;AAAQ,YAAI,IAAE;AAAE,YAAI,IAAE;AAC5B,YAAI,KAAG;AAAG,iBAAO;AAAI,aAAK,KAAG,IAAE,MAAI;AAAG,iBAAO,IAAE;AAAI,YAAI,CAAC;AAAG,cAAE,KAAG,MAAG;AACnE,YAAI,IAAI,KAAK,IAAI,CAAC,GAAG;AAAE,cAAE;AAAG,cAAI,IAAE,IAAE;AAAA,QAAG;AAClC,cAAI,IAAI,KAAG,IAAE,KAAK,MAAM,KAAK,KAAM,IAAE,CAAC;AAC3C,YAAI,IAAI;AAAG,iBAAO,QAAK,IAAE,KAAK,IAAI,GAAE,MAAI,KAAG,EAAE,IAAI,KAAK,KAAM,IAAE,IAAE,MAAI,IAAE,KAAK,MAAI,CAAE,KAAK;AACtF,eAAO,IAAE,KAAK,IAAI,GAAE,OAAK,KAAG,EAAE,IAAI,KAAK,KAAM,IAAE,IAAE,MAAI,IAAE,KAAK,MAAI,CAAE,IAAE,MAAK,IAAI;AAAA,MAC/E;AAAA,MACA,YAAY,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACtC,YAAI,KAAK;AAAW,cAAI;AACxB,eAAO,KAAG,KAAG,KAAG,MAAI,IAAE,KAAG,IAAI,KAAK;AAAA,MACpC;AAAA,MACA,aAAa,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACvC,YAAI,KAAK;AAAW,cAAI;AACxB,eAAO,MAAI,IAAE,IAAE,IAAE,KAAG,MAAI,IAAE,KAAG,IAAI,KAAK,KAAK;AAAA,MAC7C;AAAA,MACA,eAAe,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AACzC,YAAI,KAAK;AAAW,cAAI;AACxB,aAAK,KAAG,IAAE,KAAK;AAAG,iBAAO,IAAE,KAAG,IAAE,OAAK,KAAI,SAAQ,KAAG,IAAI,MAAM;AAC9D,eAAO,IAAE,MAAI,KAAG,KAAG,OAAK,KAAI,SAAQ,KAAG,IAAI,KAAK,KAAK;AAAA,MACvD;AAAA,MACA,cAAc,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACrC,eAAO,IAAI,OAAO,OAAO,cAAe,GAAG,IAAE,GAAG,GAAG,GAAG,CAAC,IAAI;AAAA,MAC7D;AAAA,MACA,eAAe,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACtC,aAAK,KAAG,KAAM,IAAE,MAAO;AACrB,iBAAO,KAAG,SAAO,IAAE,KAAK;AAAA,QAC1B,WAAW,IAAK,IAAE,MAAO;AACvB,iBAAO,KAAG,UAAQ,KAAI,MAAI,QAAO,IAAI,QAAO;AAAA,QAC9C,WAAW,IAAK,MAAI,MAAO;AACzB,iBAAO,KAAG,UAAQ,KAAI,OAAK,QAAO,IAAI,UAAS;AAAA,QACjD,OAAO;AACL,iBAAO,KAAG,UAAQ,KAAI,QAAM,QAAO,IAAI,YAAW;AAAA,QACpD;AAAA,MACF;AAAA,MACA,iBAAiB,SAAU,GAAG,GAAG,GAAG,GAAG,GAAG;AACxC,YAAI,IAAI,IAAE;AAAG,iBAAO,OAAO,OAAO,aAAc,GAAG,IAAE,GAAG,GAAG,GAAG,CAAC,IAAI,MAAK;AACxE,eAAO,OAAO,OAAO,cAAe,GAAG,IAAE,IAAE,GAAG,GAAG,GAAG,CAAC,IAAI,MAAK,IAAE,MAAK;AAAA,MACvE;AAAA,IACF;AAAA,EAAC;;;AC3ID;AAEA,MAAMC,cAAY,mBAAoB,UAAU;AAAA,IAG9C,OAAO;AACL,WAAK,SAAS;AACd,WAAK,WAAW,CAAC;AAAA,IACnB;AAAA,IAEA,eAAe;AACb,UAAI,OAAO,OAAO;AAChB,aAAK,SAAS;AACd,iBAAS,iBAAiB,uBAAuB,KAAK,iBAAiB;AAAA,MACzE,WAAW,OAAO,YAAY;AAC5B,aAAK,SAAS;AAAA,MAEhB;AAAA,IACF;AAAA,IAEA,WAAW;AAAA,IACX;AAAA,IAEA,kBAAkB,IAAI;AACpB,SAAG,OAAO,iBAAiB,qBAAqB,EAAE,QAAQ,QAAM;AAC9D,cAAM,KAAK,GAAG;AACd,cAAM,KAAK,GAAG,OAAO;AACrB,cAAM,OAAO,GAAG,cAAc,YAAY,EAAE;AAC5C,YAAI,GAAG,WAAW,QAAQ;AACxB,aAAG,YAAY,IAAI;AAAA,QACrB,WAAW,GAAG,IAAI;AAChB,aAAG,cAAc,IAAI,GAAG,IAAI,EAAE,YAAY,IAAI;AAAA,QAChD,OAAO;AACL,aAAG,YAAY,IAAI;AACnB,eAAK,KAAK,kDAAkD,EAAE;AAAA,QAChE;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,GAnCE,cADgB,IACT,QAAO,gBADE;AAsClB,EAAM,aAAa,qBAAqB,OAAOA,UAAS;;;ACxCxD,MAAAC;AAEA,MAAMC,cAAYD,MAAA,cAAoB,UAAU;AAAA,IAG9C,eAAe;AACb,QAAE,QAAQ,EAAE,GAAG,SAAS,+BAA+B,QAAM;AAC3D,UAAE,GAAG,aAAa,EAAE,QAAQ,uBAAuB,EAAE,YAAY,UAAU;AAC3E,mBAAW,OAAK;AACd,YAAE,GAAG,aAAa,EAAE,KAAK;AAAA,QAC3B,GAAG,GAAG;AACN,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,EACF,GAXE,cADgBA,KACT,QAAO,qBADEA;AAclB,EAAM,aAAa,qBAAqB,OAAOC,UAAS;;;ACdxD,MAAM,kBAAN,MAAsB;AAAA,IACpB,YAAY,UAAU,OAAO,CAAC,GAAG;AAC/B,WAAK,WAAW;AAChB,WAAK,YAAY,CAAC;AAClB,WAAK,WAAW;AAChB,WAAK,OAAO,OAAO,OAAO,CAAC,GAAG;AAAA,QAE5B,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QAGT,UAAU;AAAA,QAGV,WAAW;AAAA,QAIX,kBAAkB;AAAA,QAElB,gBAAgB;AAAA,QAChB,aAAa;AAAA,QACb,eAAe;AAAA,QAGf,SAAS;AAAA,QAYT,aAAa;AAAA,MACf,GAAG,IAAI;AAAA,IACT;AAAA,IAEA,QAAQ,OAAO,CAAC,GAAG;AACjB,aAAO,OAAO,KAAK,MAAM,IAAI;AAC7B,aAAO;AAAA,IACT;AAAA,IAEA,QAAQ;AACN,WAAK,YAAY,KAAK,IAAI;AAC1B,UAAG,KAAK,aAAa;AAAM,aAAK,KAAK;AAErC,UAAG,KAAK,KAAK,YAAY,MAAM;AAC7B,aAAK,KAAK,UAAU,MAAM,KAAK,SAAS;AACxC,aAAK,KAAK,UAAU,KAAK,KAAK,UAAU,MAAM,KAAK;AAAA,MACrD;AAEA,WAAK,SAAS,KAAK,CAAC,GAAG,OAAO;AAC5B,WAAG,MAAM,WAAW,KAAK,KAAK,eAAe;AAC7C,aAAK,UAAU,KAAK,EAAE,KAAK,KAAK,KAAK,mBAAoB,IAAI,KAAK,KAAK,QAAS;AAChF,aAAK,UAAU,GAAG,MAAM,KAAK,UAAU,GAAG,MAAM,MAAM,KAAK;AAAA,MAE7D,CAAC;AAGD,WAAK,OAAO;AACZ,WAAK,OAAO;AACZ,iBAAW,OAAK;AACd,aAAK,SAAS,OAAO,EAAE,SAAS,YAAY;AAC5C,aAAK,WAAW,YAAY,CAAAC,OAAK,KAAK,OAAO,GAAG,KAAK,KAAK,cAAc;AAAA,MAC1E,GAAG,CAAC;AAEJ,aAAO;AAAA,IACT;AAAA,IAEA,OAAO;AACL,UAAG,KAAK,aAAa;AAAM;AAC3B,oBAAc,KAAK,QAAQ;AAC3B,WAAK,UAAU,WAAW;AAC1B,WAAK,WAAW;AAChB,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,OAAO;AACV,aAAO,KAAK,cAAc,KAAK;AAAA,IACjC;AAAA,IAEA,YAAY,GAAG;AAAE,aAAO,IAAI,IAAI,IAAI,IAAI;AAAA,IAAE;AAAA,IAC1C,cAAc,GAAG;AAAE,aAAO,EAAE,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK;AAAA,IAAE;AAAA,IAE3D,SAAS;AACP,UAAI,aAAa;AACjB,WAAK,SAAS,KAAK,CAAC,GAAG,OAAO;AAC5B,YAAI,MAAM,KAAK,YAAY,GAAG,IAAI,KAAK,IAAI,IAAI,KAAK,WAAW,UAAU;AACzE,YAAG,eAAe;AAAM,uBAAa,IAAI;AAGzC,YAAI,OAAO,KAAK,aAAa,IAAI,QAAS,KAAK,KAAK,IAAI,KAAK,KAAK,WAAY;AAC9E,YAAI,QAAQ,OAAQ,KAAK;AACzB,YAAI,QAAQ;AAAG,kBAAQ,IAAI;AAC3B,YAAI,cAAc,KAAK,KAAK,cAAc,KAAK,KAAK,IAAI,KAAK;AAC7D,YAAI,gBAAgB,KAAK,KAAK,iBAAiB,IAAI;AAEnD,WAAG,MAAM,YAAY,WAAW,IAAI,WAAW;AAC/C,WAAG,MAAM,YAAY,WAAW,IAAI,aAAa;AACjD,WAAG,MAAM,SAAS,KAAK,MAAM,QAAQ,GAAG;AACxC,cAAM,OAAO,GAAG,sBAAsB;AACtC,WAAG,MAAM,OAAQ,IAAI,IAAI,GAAG,cAAc,IAAM,GAAG,QAAQ,IAAK;AAChE,WAAG,MAAM,MAAO,IAAI,IAAI,GAAG,eAAe,IAAM,GAAG,SAAS,IAAK;AAEjE,sBAAc,KAAK,KAAK;AAAA,MAC1B,CAAC;AAAA,IAEH;AAAA,IAEA,YAAY,GAAG,IAAI,cAAc,QAAQ,MAAM;AAC7C,UAAG,UAAU,MAAM;AAAE,gBAAQ,KAAK,SAAS,GAAG,YAAY;AAAA,MAAE;AAE5D,UAAI,SAAS,KAAK,KAAK;AACvB,YAAM,OAAO,GAAG,sBAAsB;AACtC,gBAAW,KAAK,QAAQ,IAAK;AAE7B,aAAO;AAAA,QACL;AAAA,QACA,GAAG,KAAK,KAAK,UAAU,SAAS,KAAK,IAAI,KAAK;AAAA,QAC9C,GAAG,KAAK,KAAK,UAAU,SAAS,KAAK,IAAI,KAAK;AAAA,MAChD;AAAA,IACF;AAAA,IAEA,SAAS,GAAG,cAAc;AACxB,aAAO,KAAK,aAAa,eAAe,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,KAAK,KAAK,YAAY,KAAK,UAAU,GAAG,GAAG;AAAA,IACxH;AAAA,IAEA,aAAa,KAAK;AAChB,aAAM,MAAM;AAAI,eAAO,IAAI,KAAK;AAChC,aAAO,OAAO,KAAK,KAAK;AAAA,IAC1B;AAAA,EACF;AAIA,MAAM,kBAAN,MAAsB;AAAA,IACpB,YAAY,KAAK;AACf,WAAK,MAAM,EAAE,GAAG;AAChB,WAAK,KAAK,KAAK,IAAI,KAAK,eAAe;AACvC,WAAK,SAAS,KAAK,IAAI,KAAK,aAAa;AACzC,WAAK,WAAW,KAAK,IAAI,KAAK,YAAY;AAE1C,WAAK,KAAK,EAAE,MAAM;AAAA,IACpB;AAAA,IAEA,IAAI,gBAAgB;AAClB,aAAO,KAAK,IAAI,KAAK,iBAAiB;AAAA,IACxC;AAAA,IAEA,OAAO;AACL,WAAK,WAAW;AAChB,WAAK,iBAAiB;AACtB,aAAO;AAAA,IACT;AAAA,IAEA,aAAa;AACX,WAAK,WAAW,IAAI,eAAe,CAAC,GAAG,MAAM,KAAK,aAAa,GAAG,CAAC,CAAC;AACpE,WAAK,SAAS,QAAQ,KAAK,SAAS,IAAI,CAAC,GAAG,EAAE,YAAY,KAAK,CAAC;AAEhE,WAAK,UAAU,KAAK;AACpB,WAAK,WAAW,IAAI,gBAAgB,KAAK,aAAa;AAAA,IACxD;AAAA,IAEA,MAAM,aAAa,SAAS,UAAU;AACpC,cAAQ,QAAQ,OAAK;AACnB,aAAK,GAAG,IAAI,EAAE,UAAU,OAAO,WAAW,MAAM,CAAC;AACjD,aAAK,iBAAiB;AAAA,MAIxB,CAAC;AAAA,IACH;AAAA,IAEA,mBAAmB;AACjB,YAAM,QAAQ,KAAK,IAAI,MAAM;AAC7B,YAAM,SAAS,KAAK,IAAI,OAAO;AAC/B,YAAM,OAAO,KAAK,IAAI,OAAO,MAAM;AACnC,YAAM,SAAS,OAAO;AAEtB,YAAM,SAAS;AAEf,WAAK,GAAG,IAAI,EAAE,UAAU,GAAG,UAAU,WAAW,GAAG,SAAS,CAAC;AAC7D,WAAK,SAAS,QAAQ,EAAE,QAAgB,SAAS,QAAQ,SAAS,OAAO,CAAC;AAE1E,aAAO;AAAA,IACT;AAAA,IAEA,QAAQ;AACN,WAAK,OAAO,YAAY,WAAW;AACnC,WAAK,SAAS,MAAM;AAEpB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO;AACL,WAAK,UAAU,KAAK;AAEpB,aAAO;AAAA,IACT;AAAA,EACF;AA9MA,MAAAC;AAgNA,MAAMC,cAAYD,MAAA,cAAoB,UAAU;AAAA,IAG9C,OAAO;AAAA,IACP;AAAA,IAEA,eAAe;AAAA,IACf;AAAA,IAEA,WAAW;AACT,QAAE,kBAAkB,EAAE,KAAK,CAAC,GAAG,OAAO;AACpC,YAAG,CAAC,EAAE,EAAE,EAAE,KAAK,mBAAmB,GAAG;AACnC,YAAE,EAAE,EAAE,KAAK,qBAAqB,IAAI,gBAAgB,EAAE,CAAC;AAAA,QACzD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF,GAfE,cADgBA,KACT,QAAO,oBADEA;AAkBlB,EAAM,aAAa,qBAAqB,OAAOC,UAAS;;;AChOxD,MAAM,cAAN,MAAkB;AAAA,IAChB,YAAY,OAAO,CAAC,GAAG;AACrB,WAAK,OAAO,OAAO,OAAO,CAAC,GAAG;AAAA,QAC5B,UAAU;AAAA,QACV,mBAAmB;AAAA,MACrB,GAAG,IAAI;AACP,WAAK,aAAa,KAAK,IAAI;AAC3B,WAAK,QAAQ,CAAC;AAAA,IAChB;AAAA,IAEA,IAAI,sBAAsB;AACxB,aAAO,KAAK,IAAI,IAAI,KAAK;AAAA,IAC3B;AAAA,IAEA,OAAO;AACL,UAAG,CAAC,KAAK,QAAQ;AACf,aAAK,SAAS;AACd,UAAE,QAAQ,EAAE,GAAG,UAAU,QAAM;AAAE,eAAK,aAAa,KAAK,IAAI;AAAA,QAAE,CAAC;AAAA,MACjE;AACA,aAAO;AAAA,IACT;AAAA,IAEA,QAAQ;AACN,UAAG,CAAC,KAAK,OAAO;AACd,aAAK,QAAQ,YAAY,OAAK;AAAE,eAAK,KAAK;AAAA,QAAE,GAAG,KAAK,KAAK,QAAQ;AAAA,MACnE;AACA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO;AACL,UAAG,KAAK,OAAO;AACb,sBAAc,KAAK,KAAK;AACxB,eAAO,KAAK;AAAA,MACd;AACA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO;AACL,UAAG,CAAC,KAAK,MAAM;AAAQ;AACvB,UAAG,KAAK,sBAAsB,KAAK,KAAK;AAAmB;AAC3D,WAAK,QAAQ;AAAA,IACf;AAAA,IAEA,UAAU;AACR,YAAM,OAAO,KAAK,MAAM,MAAM;AAE9B,UAAG,KAAK,KAAK,UAAU;AACrB,aAAK,QAAQ,uBAAuB,IAAI;AAAA,MAC1C,OAAO;AACL,aAAK,QAAQ,eAAe,KAAK,UAAU;AAAA,MAC7C;AAAA,IACF;AAAA,IAEA,QAAQ,SAAS,OAAO,CAAC,GAAG,aAAa,EAAE,UAAU,SAAS,GAAG;AAC/D,UAAG,KAAK,OAAO;AACb,mBAAW,OAAK;AACd,eAAK,QAAQ,SAAS,OAAO,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,MAAM,CAAC,GAAG,UAAU;AAAA,QAC7E,GAAG,KAAK,KAAK;AACb;AAAA,MACF;AAEA,WAAK,MAAM,KAAK,EAAE,SAAS,MAAM,WAAW,CAAC;AAAA,IAC/C;AAAA,EACF;;;ACjEA,MAAAC;AAEA,MAAMC,cAAYD,MAAA,cAAoB,UAAU;AAAA,IAG9C,eAAe;AACb,WAAK,KAAK,SAAS;AACnB,WAAK,KAAK,WAAW;AACrB,WAAK,KAAK,YAAY,KAAK,KAAK,OAAO,KAAK,KAAK;AAAA,IAQnD;AAAA,IAEA,WAAW;AACT,QAAE,kBAAkB,EAAE,KAAK,CAAC,GAAG,QAAQ;AACrC,aAAK,SAAS,GAAG;AAAA,MACnB,CAAC;AAAA,IAGH;AAAA,IAEA,MAAM,SAAS,KAAK;AAClB,YAAM,KAAK,EAAE,GAAG;AAChB,YAAM,QAAQ,GAAG,KAAK,UAAU;AAChC,UAAG,UAAU,QAAQ,UAAU;AAAW;AAC1C,YAAM,SAAS,GAAG,KAAK,WAAW,KAAK;AACvC,YAAM,SAAS,GAAG,KAAK,mBAAmB;AAC1C,YAAM,IAAI,EAAE,QAAQ;AAEpB,UAAI,QAAQ,GAAG;AACb,YAAG,OAAO,KAAK,WAAW,KAAK,WAAW;AACxC,YAAE,KAAK,aAAa,EAAE,SAAS,aAAa;AAAA,QAC9C,OAAO;AACL,YAAE,KAAK,eAAe,EAAE,SAAS,aAAa;AAAA,QAChD;AAAA,MACF,OAAO;AACL,cAAM,UAAU,QAAQ;AACxB,cAAM,OAAO,KAAK,MAAM,UAAU,KAAK,KAAK,OAAO,IAAI;AACvD,cAAM,MAAM,KAAK,MAAO,UAAU,KAAK,KAAK,UAAW,KAAK,KAAK,MAAM,IAAI;AAC3E,cAAM,MAAM,KAAK,MAAQ,UAAU,KAAK,KAAK,UAAW,KAAK,KAAK,MAAO,IAAI;AAC7E,YAAG,OAAO,KAAK,WAAW,KAAK,WAAW;AACxC,YAAE,KAAK,KAAK,SAAS,QAAQ,KAAK;AAAA,QACpC,OAAO;AACL,YAAE,KAAK,SAAS,cAAc,gBAAgB,KAAK;AAAA,QACrD;AAAA,MACF;AAEA,YAAM,MAAM,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,UAAU,CAAC;AACtD,aAAO,KAAK,EAAE;AACd,aAAO,OAAO,CAAC;AAAA,IACjB;AAAA,EACF,GArDE,cADgBA,KACT,QAAO,uBADEA;AAwDlB,EAAM,aAAa,qBAAqB,OAAOC,UAAS;;;AC1DxD,MAAM,eAAN,MAAmB;AAAA,IACjB,YAAY,eAAe,CAAC,GAAG;AAC7B,WAAK,MAAM,CAAC;AACZ,WAAK,UAAU,CAAC;AAChB,WAAK,eAAe,CAAC;AACrB,WAAK,wBAAwB;AAC7B,mBAAa,QAAQ,YAAU;AAAE,aAAK,MAAM,GAAG,MAAM;AAAA,MAAE,CAAC;AAAA,IAC1D;AAAA,IAEA,UAAU,QAAQ;AAChB,aAAO,OACJ,YAAY,EACZ,QAAQ,iBAAiB,EAAE,EAC3B,QAAQ,aAAa,GAAG,EACxB,QAAQ,QAAQ,GAAG,EACnB,QAAQ,MAAM,IAAI,EAClB,QAAQ,MAAM,GAAG;AAAA,IACtB;AAAA,IAEA,WAAW,QAAQ,UAAU;AAC3B,YAAM,UAAU,KAAK,UAAU,MAAM;AAErC,eAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,IAAI,IAAI,GAAI;AACnD,iBAAS,QAAQ,MAAM,GAAG,IAAI,CAAC,CAAC;AAAA,MAClC;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,IAAI;AAChB,UAAG,MAAM,QAAQ,MAAM,GAAG;AACxB,SAAC,QAAQ,EAAE,IAAI;AAAA,MACjB;AACA,eAAS,OAAO,YAAY;AAE5B,UAAG,CAAC,UAAU,WAAW,MAAO,CAAC,KAAK,yBAAyB,KAAK,QAAQ,QAAQ,MAAM,KAAK;AAAI;AACnG,YAAM,cAAc,KAAK,QAAQ,KAAK,MAAM,IAAI;AAChD,WAAK,IAAI,KAAK,EAAE;AAEhB,WAAK,WAAW,QAAQ,aAAW;AACjC,YAAI,oBAAoB,KAAK,aAAa,KAAK;AAC/C,YAAG,CAAC;AAAmB,8BAAoB,CAAC;AAC5C,YAAG,kBAAkB,QAAQ,WAAW,IAAI;AAAG,4BAAkB,KAAK,WAAW;AACjF,aAAK,aAAa,KAAK,aAAa;AAAA,MACtC,CAAC;AAAA,IACH;AAAA,IAEA,KAAK,QAAQ;AACX,YAAM,gBAAgB,CAAC;AACvB,UAAI,mBAAmB;AAGvB,WAAK,WAAW,KAAK,UAAU,MAAM,GAAG,aAAW;AACjD,cAAM,oBAAoB,KAAK,aAAa,KAAK;AACjD,4BAAoB;AACpB,YAAG,mBAAmB;AACpB,mBAAQ,KAAK,mBAAmB;AAC9B,kBAAM,cAAc,kBAAkB;AACtC,gBAAG,CAAC,cAAc;AAAc,4BAAc,eAAe;AAC7D,0BAAc,gBAAgB;AAAA,UAChC;AAAA,QACF;AAAA,MACF,CAAC;AAED,YAAM,SAAS,CAAC;AAChB,eAAQ,KAAK,eAAe;AAC1B,eAAO,KAAK,EAAE,IAAI,KAAK,IAAI,IAAI,QAAQ,KAAK,QAAQ,IAAI,SAAS,cAAc,GAAG,CAAC;AAAA,MACrF;AAGA,aAAO,KAAK,CAAC,GAAG,MAAM;AACpB,cAAM,OAAO,EAAE,UAAU,EAAE;AAC3B,eAAO;AAAA,MACT,CAAC;AAED,aAAO;AAAA,IACT;AAAA,EACF;;;ACzEA,MAAM,oBAAN,MAAwB;AAAA,IACtB,YAAY,KAAK,OAAO,CAAC,GAAG;AAC1B,WAAK,MAAM;AAEX,WAAK,OAAO;AACZ,WAAK,YAAY,KAAK,UAAU,eAAe;AAAA,IACjD;AAAA,IAEA,aAAa;AACX,aAAO,IAAI,aAAa,KAAK,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAAA,IAC5D;AAAA,IAEA,UAAU,MAAM;AAAE,aAAO;AAAA,IAAK;AAAA,IAE9B,IAAI,WAAW;AACb,UAAG,KAAK;AAAS,eAAO,KAAK;AAC7B,WAAK,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC9C,cAAM,KAAK,GAAG,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,UAAQ;AAC/C,eAAK,OAAO;AACZ,eAAK,UAAU,KAAK,WAAW;AAC/B,eAAK,SAAS;AACd,kBAAQ,IAAI;AAAA,QACd,CAAC;AAAA,MACH,CAAC;AACD,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,MAAM,GAAG,MAAM;AACb,aAAO,MAAM,KAAK,SAAS,KAAK,IAAI;AAAA,IACtC;AAAA,IAEA,MAAM,QAAQ,OAAO;AACnB,WAAK,GAAG,OAAK;AACX,UAAE,KAAK,OAAO,EAAE,EAAE,QAAQ,QAAM;AAC9B,kBAAQ,IAAI,EAAE;AAAA,QAChB,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAOA,IAAI,QAAQ;AACV,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,IAEA,IAAI,QAAQ;AACV,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,IAEA,IAAI,UAAU;AACZ,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,IAEA,KAAK,MAAM,GAAG;AACZ,YAAM,MAAM,CAAC;AACb,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC5B,YAAI,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,IAAI,KAAK,MAAM,MAAM,EAAE,CAAC;AAAA,MAC9E;AACA,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,MAAM,SAAS;AACjB,YAAM,QAAQ,KAAK,MAAM,QAAQ,IAAI;AACrC,UAAI,QAAQ;AAAG,eAAO;AAEtB,aAAO,IAAI,KAAK,UAAU,MAAM,OAAO,OAAO;AAAA,IAChD;AAAA,IAEA,oBAAoB,GAAG,GAAG;AACxB,YAAM,IAAI,MAAM,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AAE1D,eAAS,IAAI,GAAG,KAAK,EAAE,QAAQ,KAAK;AAClC,YAAI,OAAO,IAAI;AACf,YAAI,UAAU;AAEd,iBAAS,IAAI,GAAG,KAAK,EAAE,QAAQ,KAAK;AAClC,gBAAM,SAAS,UAAU;AACzB,gBAAM,cAAc,EAAE,KAAK;AAC3B,gBAAM,eAAe,EAAE,IAAI,OAAO,EAAE,IAAI,KAAK,OAAO,OAAO;AAC3D,oBAAU,KAAK,IAAI,QAAQ,aAAa,YAAY;AACpD,iBAAO,EAAE;AACT,YAAE,KAAK;AAAA,QACT;AAAA,MACF;AAEA,aAAO,EAAE,EAAE;AAAA,IACb;AAAA,IAEA,KAAK,OAAO,QAAQ,MAAM,MAAM,OAAO;AACrC,YAAM,gBAAgB,KAAK,QAAQ,KAAK,KAAK,EAAE,IAAI,OAAK;AACtD,YAAG;AAAK,kBAAQ,IAAI,CAAC;AACrB,eAAO,KAAK,IAAI,KAAK,MAAM,EAAE,KAAK,EAAE,OAAO;AAAA,MAC7C,CAAC;AAaD,UAAG,UAAU,MAAM;AACjB,eAAO,cAAc,MAAM,GAAG,KAAK;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AAAA,IAEA,aAAaC,OAAM;AACjB,aAAO,KAAK,GAAGA,KAAI,IAAI;AAAA,IACzB;AAAA,EACF;AAEA,MAAM,kBAAN,MAAsB;AAAA,IACpB,YAAY,QAAQ,OAAO,UAAU,MAAM;AACzC,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,WAAK,OAAO,OAAO,MAAM,KAAK;AAC9B,WAAK,QAAQ,OAAO,UAAU,KAAK,OAAO,IAAI,QAAM,OAAO,MAAM,GAAG;AACpE,WAAK,SAAS,OAAO,KAAK;AAAA,IAC5B;AAAA,IAEA,IAAI,cAAc;AAChB,aAAO,GAAG,KAAK,MAAM,UAAU,KAAK,MAAM;AAAA,IAC5C;AAAA,IAEA,IAAI,aAAa;AACf,UAAG,KAAK,QAAQ;AACd,eAAO,GAAG,KAAK,UAAU,KAAK;AAAA,MAChC,OAAO;AACL,eAAO,KAAK;AAAA,MACd;AAAA,IACF;AAAA,IAEA,SAAS;AACP,aAAO;AAAA,QACL,OAAO,KAAK;AAAA,QACZ,MAAM,KAAK;AAAA,QACX,OAAO,KAAK;AAAA,QACZ,YAAY,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,EACF;;;ACpJA,MAAM,oBAAN,MAAwB;AAAA,IACtB,OAAO,WAAW,UAAU;AAC1B,QAAE,QAAQ,EAAE,GAAG,SAAS,OAAM,OAAM;AAClC,YAAG,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,+BAA+B,EAAE,QAAQ;AAChE,YAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,OAAO;AAC1B,cAAE,EAAE,EAAE,KAAK,mBAAmB,GAAG,OAAO;AAAA,UAC1C,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,KAAK,KAAK,QAAQ;AAC5B,WAAK,MAAM;AACX,WAAK,MAAM;AACX,WAAK,SAAS;AACd,WAAK,IAAI,KAAK,qBAAqB,IAAI;AAEvC,WAAK,WAAW,KAAK,IAAI,KAAK,8BAA8B;AAC5D,WAAK,UAAU,KAAK,IAAI,KAAK,qBAAqB;AAClD,WAAK,YAAY,KAAK,IAAI,KAAK,+BAA+B;AAC9D,WAAK,UAAU,KAAK,IAAI,KAAK,wBAAwB;AACrD,WAAK,cAAc,KAAK,IAAI,KAAK,yBAAyB;AAC1D,WAAK,YAAY,KAAK,IAAI,KAAK,0BAA0B;AACzD,WAAK,YAAY,KAAK,IAAI,KAAK,uBAAuB;AAEtD,WAAK,SAAS,GAAG,SAAS,QAAM;AAC9B,WAAG,eAAe;AAClB,WAAG,gBAAgB;AACnB,aAAK,SAAS,KAAK;AACnB,aAAK,OAAO;AACZ,eAAO;AAAA,MACT,CAAC;AAED,WAAK,QAAQ,GAAG,WAAW,QAAM;AAC/B,YAAG,GAAG,WAAW,IAAI;AACnB,eAAK,KAAK;AACV,iBAAO;AAAA,QACT,WAAU,GAAG,WAAW,IAAI;AAC1B,eAAK,iBAAiB;AACtB,iBAAO;AAAA,QACT,WAAU,GAAG,WAAW,IAAI;AAC1B,eAAK,qBAAqB,GAAG,QAAQ;AACrC,iBAAO;AAAA,QACT,WAAU,GAAG,WAAW,IAAI;AAC1B,eAAK,iBAAiB,GAAG,QAAQ;AACjC,iBAAO;AAAA,QACT;AAEA,qBAAa,KAAK,aAAa;AAC/B,aAAK,gBAAgB,OAAO,WAAW,OAAK;AAC1C,cAAG,KAAK;AAAM,iBAAK,YAAY;AAAA,QACjC,GAAG,GAAG;AAAA,MACR,CAAC;AAAA,IACH;AAAA,IAEA,IAAI,OAAO;AACT,aAAO,CAAC,KAAK,UAAU,SAAS,QAAQ;AAAA,IAC1C;AAAA,IAEA,IAAI,WAAW;AACb,aAAO,KAAK,UAAU,KAAK,SAAS;AAAA,IACtC;AAAA,IAEA,SAAS;AACP,aAAO,KAAK,OAAO,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IAC7C;AAAA,IAEA,OAAO;AACL,WAAK,UAAU,YAAY,QAAQ;AACnC,WAAK,UAAU,YAAY,QAAQ;AACnC,UAAI,SAAS;AAEb,UAAG,KAAK,IAAI,QAAQ,YAAY,EAAE,QAAQ;AACxC,aAAK,IAAI,QAAQ,YAAY,EAAE,IAAI,EAAC,YAAY,SAAQ,CAAC;AACzD,iBAAS,KAAK,SAAS,OAAO,EAAE;AAChC,aAAK,IAAI,QAAQ,YAAY,EAAE,IAAI,EAAC,YAAY,GAAE,CAAC;AAAA,MACrD,OAAO;AACL,iBAAS,KAAK,SAAS,OAAO,EAAE;AAAA,MAClC;AAEA,WAAK,QAAQ,MAAM;AACnB,UAAG,SAAS,OAAO,aAAa;AAC9B,eAAO,SAAS,EAAE,KAAK,QAAQ,UAAU,SAAS,CAAC;AAAA,MACrD;AAAA,IACF;AAAA,IAEA,OAAO;AACL,WAAK,aAAa;AAClB,WAAK,QAAQ,IAAI,EAAE;AACnB,WAAK,UAAU,SAAS,QAAQ;AAChC,WAAK,YAAY,SAAS,QAAQ;AAAA,IACpC;AAAA,IAEA,eAAe;AACb,WAAK,UAAU,KAAK,sBAAsB,EAAE,OAAO;AACnD,WAAK,UAAU,YAAY,UAAU,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC;AACzD,WAAK,QAAQ,SAAS,QAAQ;AAAA,IAChC;AAAA,IAEA,mBAAmB;AACjB,YAAM,SAAS,KAAK,SAAS,KAAK,MAAM;AACxC,WAAK,KAAK;AACV,MAAM,KAAK,UAAU,MAAM;AAAA,IAC7B;AAAA,IAEA,qBAAqB,cAAc,OAAO;AACxC,YAAM,UAAU,KAAK;AACrB,UAAG,aAAa;AACd,gBAAQ,YAAY,QAAQ;AAC5B,gBAAQ,SAAS,QAAQ,EAAE,SAAS,QAAQ;AAAA,MAC9C,WAAU,QAAQ,KAAK,EAAE,QAAQ;AAC/B,gBAAQ,YAAY,QAAQ;AAC5B,gBAAQ,KAAK,EAAE,SAAS,QAAQ;AAAA,MAClC;AAAA,IACF;AAAA,IAEA,iBAAiB,aAAa,OAAO;AACnC,YAAM,UAAU,KAAK;AACrB,UAAG,YAAY;AACb,gBAAQ,YAAY,QAAQ;AAC5B,gBAAQ,SAAS,OAAO,EAAE,SAAS,QAAQ;AAAA,MAC7C,WAAU,QAAQ,KAAK,EAAE,QAAQ;AAC/B,gBAAQ,YAAY,QAAQ;AAC5B,gBAAQ,KAAK,EAAE,SAAS,QAAQ;AAAA,MAClC;AAAA,IACF;AAAA,IAEA,MAAM,cAAc;AAClB,YAAM,QAAQ,KAAK,QAAQ,IAAI;AAC/B,UAAG,SAAS,KAAK,WAAW;AAE1B;AAAA,MACF;AACA,WAAK,YAAY;AAEjB,UAAG,CAAC,OAAO;AACT,aAAK,YAAY,SAAS,QAAQ;AAClC,aAAK,aAAa;AAClB;AAAA,MACF;AACA,WAAK,YAAY,YAAY,QAAQ;AACrC,WAAK,UAAU,SAAS,QAAQ;AAChC,WAAK,QAAQ,SAAS,QAAQ;AAE9B,WAAK,OAAO,GAAG,SAAO;AACpB,YAAI,UAAU,CAAC;AACf,YAAG,MAAM,WAAW,UAAU,GAAG;AAC/B,oBAAU,IAAI,KAAK,CAAC;AAAA,QACtB,OAAO;AACL,oBAAU,IAAI,KAAK,OAAO,EAAE;AAAA,QAC9B;AACA,aAAK,YAAY,SAAS,QAAQ;AAClC,aAAK,aAAa;AAClB,YAAG,QAAQ,QAAQ;AACjB,kBAAQ,QAAQ,CAAC,IAAI,MAAM;AAEzB,kBAAM,IAAI,EAAE,KAAK,EACd,SAAS,sGAAsG,EAC/G,KAAK,QAAQ,GAAG,aAAa,SAAS,mBAAmB,GAAG,IAAI,EAAE,QAAQ,MAAM,KAAK,sBAAsB,EAC3G,KAAK,aAAa,QAAQ,EAC1B,KAAK,GAAG,IAAI,EACZ,SAAS,KAAK,SAAS;AAE1B,gBAAG,KAAK,GAAG;AACT,gBAAE,SAAS,QAAQ;AAAA,YACrB;AAEA,gBAAI,UAAU;AACd,gBAAG,GAAG,MAAM,MAAM,UAAU;AAC1B,wBAAU;AAAA,YACZ,WAAU,GAAG,MAAM,MAAM,YAAY;AACnC,wBAAU;AAAA,YACZ,WAAU,GAAG,MAAM,MAAM,UAAU,GAAG,MAAM,MAAM,sBAAsB,GAAG,MAAM,MAAM,iBAAiB;AACtG,wBAAU;AAAA,YACZ,WAAU,GAAG,MAAM,MAAM,UAAU;AACjC,wBAAU;AAAA,YACZ,WAAU,GAAG,MAAM,MAAM,QAAQ;AAC/B,wBAAU;AAAA,YACZ;AAEA,cAAE,QAAQ,EACP,SAAS,SAAS,sCAAsC,EACxD,KAAK,GAAG,GAAG,MAAM,MAAM,EAAE,GAAG,EAC5B,SAAS,CAAC;AAAA,UACf,CAAC;AAAA,QACH,OAAO;AACL,eAAK,QAAQ,YAAY,QAAQ;AAAA,QACnC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;;;AC5LA,MAAM,oBAAN,cAAgC,kBAAkB;AAAA,IAChD,aAAa;AACX,aAAO,IAAI,aAAa,KAAK,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAAA,IAC/D;AAAA,EACF;AAEA,MAAM,cAAN,cAA0B,kBAAkB;AAAA,IAC1C,aAAa;AACX,aAAO,IAAI,aAAa,KAAK,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAAA,IACjE;AAAA,IAEA,UAAU,MAAM;AACd,aAAO,cAAc,KAAK;AAAA,QACxB,IAAI,UAAU;AACZ,cAAI,MAAM,KAAK,KAAK;AACpB,cAAG,KAAK;AAAQ,kBAAM,IAAI,QAAQ,aAAa,KAAK,MAAM;AAC1D,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAM,eAAN,MAAmB;AAAA,IACjB,OAAO,WAAW,UAAU;AAC1B,QAAE,QAAQ,EAAE,GAAG,SAAS,OAAM,OAAM;AAClC,YAAG,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,+BAA+B,EAAE,QAAQ;AAChE,YAAE,QAAQ,EAAE,KAAK,CAAC,GAAG,OAAO;AAC1B,cAAE,EAAE,EAAE,KAAK,cAAc,GAAG,OAAO;AAAA,UACrC,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,YAAY,KAAK,KAAK,QAAQ;AAC5B,WAAK,MAAM;AACX,WAAK,MAAM;AACX,WAAK,YAAY,EAAE,UAAU;AAC7B,WAAK,aAAa;AAClB,WAAK,qBAAsB,KAAK,IAAI,wBAAwB,IAAI,kBAAkB,KAAK,UAAU,KAAK,QAAQ,IAAI,iCAAiC,EAAE,QAAQ,KAAK,UAAU,KAAK,QAAQ,EAAE,CAAC;AAC5L,WAAK,cAAe,KAAK,IAAI,kBAAkB,IAAI,YAAY,KAAK,UAAU,KAAK,QAAQ,IAAI,0BAA0B,EAAE,QAAQ,KAAK,UAAU,KAAK,QAAQ,EAAE,CAAC;AAClK,WAAK,IAAI,KAAK,gBAAgB,IAAI;AAClC,WAAK,sBAAsB;AAE3B,WAAK,WAAW,KAAK,UAAU,KAAK,8BAA8B;AAClE,WAAK,UAAU,KAAK,IAAI,KAAK,qBAAqB;AAClD,WAAK,YAAY,KAAK;AACtB,WAAK,UAAU,KAAK,IAAI,KAAK,wBAAwB;AACrD,WAAK,cAAc,KAAK,IAAI,KAAK,yBAAyB;AAC1D,WAAK,YAAY,KAAK,IAAI,KAAK,0BAA0B;AACzD,WAAK,YAAY,KAAK,IAAI,KAAK,uBAAuB;AACtD,WAAK,iBAAiB,KAAK,IAAI,KAAK,4BAA4B;AAChE,WAAK,wBAAwB,KAAK,IAAI,KAAK,mCAAmC;AAC9E,WAAK,gBAAgB,KAAK,IAAI,KAAK,2BAA2B;AAAA,IAChE;AAAA,IAEA,OAAO;AACL,WAAK,SAAS,GAAG,SAAS,QAAM;AAC9B,WAAG,eAAe;AAClB,WAAG,gBAAgB;AACnB,aAAK,SAAS,KAAK;AACnB,aAAK,OAAO;AACZ,eAAO;AAAA,MACT,CAAC;AAED,WAAK,QAAQ,GAAG,WAAW,QAAM;AAC/B,YAAG,GAAG,WAAW,IAAI;AACnB,eAAK,KAAK;AACV,iBAAO;AAAA,QACT,WAAU,GAAG,WAAW,GAAG;AACzB,aAAG,eAAe;AAClB,eAAK,sBAAsB,KAAK,IAAI,GAAG,KAAK,uBAAuB,GAAG,WAAW,KAAK,EAAE;AACxF,eAAK,YAAY,IAAI;AACrB,iBAAO;AAAA,QACT,WAAU,GAAG,WAAW,IAAI;AAC1B,eAAK,iBAAiB,GAAG,QAAQ;AACjC,iBAAO;AAAA,QACT,WAAU,GAAG,WAAW,IAAI;AAC1B,eAAK,qBAAqB,GAAG,QAAQ;AACrC,iBAAO;AAAA,QACT,WAAU,GAAG,WAAW,IAAI;AAC1B,eAAK,iBAAiB,GAAG,QAAQ;AACjC,iBAAO;AAAA,QACT;AAEA,qBAAa,KAAK,aAAa;AAC/B,aAAK,gBAAgB,OAAO,WAAW,OAAK;AAC1C,cAAG,KAAK;AAAM,iBAAK,YAAY;AAAA,QACjC,GAAG,GAAG;AAAA,MACR,CAAC;AAED,YAAM,cAAc,KAAK,UAAU,KAAK,qBAAqB;AAC7D,UAAG,aAAa;AACd,aAAK,IAAI,OAAO,eAAe,aAAa,EAAE,QAAQ,KAAK,GAAG,QAAM;AAClE,aAAG,eAAe;AAClB,eAAK,OAAO;AAAA,QACd,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,IAAI,OAAO;AACT,aAAO,CAAC,KAAK,UAAU,SAAS,QAAQ;AAAA,IAC1C;AAAA,IAEA,IAAI,WAAW;AACb,aAAO,KAAK,UAAU,KAAK,SAAS;AAAA,IACtC;AAAA,IAEA,SAAS;AACP,aAAO,KAAK,OAAO,KAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IAC7C;AAAA,IAEA,OAAO;AACL,WAAK,UAAU,YAAY,QAAQ;AACnC,WAAK,UAAU,YAAY,QAAQ;AACnC,WAAK,QAAQ,MAAM;AAAA,IACrB;AAAA,IAEA,OAAO;AACL,aAAO,KAAK;AACZ,WAAK,sBAAsB;AAC3B,WAAK,aAAa;AAClB,WAAK,QAAQ,IAAI,EAAE;AACnB,WAAK,UAAU,SAAS,QAAQ;AAChC,WAAK,YAAY,SAAS,QAAQ;AAClC,WAAK,UAAU,SAAS,QAAQ;AAAA,IAClC;AAAA,IAEA,aAAa,WAAW,WAAW;AACjC,WAAK,KAAK,YAAY,KAAK,sBAAsB,EAAE,OAAO;AAC1D,WAAK,UAAU,YAAY,UAAU,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC;AACzD,WAAK,QAAQ,SAAS,QAAQ;AAAA,IAChC;AAAA,IAEA,iBAAiB,QAAQ,OAAO;AAC9B,YAAM,SAAS,KAAK,SAAS,KAAK,MAAM;AACxC,UAAG,CAAC,QAAQ;AACV,eAAO;AAAA,MACT,WAAU,OAAO,WAAW,SAAS,GAAG;AACtC,cAAM,OAAO,oBAAI,IAAI;AACrB,aAAK,IAAI,SAAS,IAAI;AACtB,aAAK,IAAI,UAAU,OAAK,KAAK,KAAK,CAAC;AACnC,aAAK,IAAI,SAAS,KAAK;AACvB,eAAQ,IAAI,SAAS,OAAO,GAAG,KAAK,KAAK,GAAG,OAAO,MAAM,CAAC,CAAC,EAAG,MAAM,GAAG,KAAK,OAAO,CAAC;AAAA,MACtF,OAAO;AACL,YAAG,KAAK,SAAS,KAAK,QAAQ,KAAK,WAAW,CAAC,QAAQ,OAAO;AAC5D,iBAAO,KAAK,QAAQ,UAAU,KAAK,SAAS,KAAK,SAAS,KAAK,qBAAqB;AACpF,eAAK,KAAK;AAAA,QACZ,OAAO;AACL,eAAK,KAAK;AACV,UAAM,KAAK,UAAU,MAAM;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,IAEA,qBAAqB,cAAc,OAAO;AACxC,YAAM,UAAU,KAAK;AACrB,UAAG,QAAQ,QAAQ,sBAAsB,EAAE,QAAQ;AACjD,gBAAQ,YAAY,QAAQ;AAC5B,YAAG,aAAa;AACd,kBAAQ,SAAS,4BAA4B,EAAE,SAAS,QAAQ;AAAA,QAClE,OAAO;AACL,kBAAQ,QAAQ,sBAAsB,EAAE,MAAM,EAAE,SAAS,QAAQ;AAAA,QACnE;AAAA,MACF,OAAO;AACL,cAAM,YAAY,QAAQ,OAAO,EAAE,QAAQ,sCAAsC,EAAE,MAAM,EAAE,KAAK,2BAA2B;AAC3H,YAAG,UAAU,QAAQ;AACnB,kBAAQ,YAAY,QAAQ;AAC5B,oBAAU,SAAS,QAAQ;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,IAEA,iBAAiB,aAAa,OAAO;AACnC,YAAM,UAAU,KAAK;AACrB,UAAG,QAAQ,QAAQ,sBAAsB,EAAE,QAAQ;AACjD,gBAAQ,YAAY,QAAQ;AAC5B,YAAG,YAAY;AACb,kBAAQ,SAAS,2BAA2B,EAAE,SAAS,QAAQ;AAAA,QACjE,OAAO;AACL,kBAAQ,QAAQ,sBAAsB,EAAE,MAAM,EAAE,SAAS,QAAQ;AAAA,QACnE;AAAA,MACF,OAAO;AACL,cAAM,YAAY,QAAQ,OAAO,EAAE,QAAQ,sCAAsC,EAAE,MAAM,EAAE,KAAK,4BAA4B;AAC5H,YAAG,UAAU,QAAQ;AACnB,kBAAQ,YAAY,QAAQ;AAC5B,oBAAU,SAAS,QAAQ;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,IAEA,mBAAmB,OAAO,aAAa,GAAG,iBAAiB,GAAG;AAC5D,oBAAc,KAAK;AAEnB,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAE,aAAK,WAAW,GAAG,SAAO;AAClE,cAAI,UAAU,CAAC;AACf,cAAG,MAAM,WAAW,UAAU,GAAG;AAC/B,sBAAU,IAAI,KAAK,CAAC;AAAA,UACtB,OAAO;AACL,sBAAU,IAAI,KAAK,OAAO,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,MAAM,SAAS,cAAc,EAAE,MAAM,GAAG,UAAU;AAAA,UACxH;AACA,eAAK,aAAa,aAAa;AAC/B,cAAG,QAAQ;AAAQ,oBAAQ,QAAQ,CAAC,IAAI,MAAM;AAE5C,oBAAM,IAAI,EAAE,KAAK,EACd,SAAS,sGAAsG,EAC/G,KAAK,QAAQ,GAAG,aAAa,SAAS,mBAAmB,GAAG,IAAI,EAAE,QAAQ,MAAM,KAAK,sBAAsB,EAC3G,KAAK,aAAa,QAAQ,EAC1B,SAAS,KAAK,aAAa;AAE9B,oBAAM,UAAU,EAAE,kCAAkC,EAAE,SAAS,CAAC;AAGhE,gBAAE,QAAQ,EACP,SAAS,mBAAmB,EAC5B,KAAK,qGAAqG,EAC1G,SAAS,OAAO;AAGnB,gBAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,KAAK,GAAG,IAAI,EAAE,SAAS,OAAO;AAG3D,kBAAI,UAAU;AACd,kBAAG,GAAG,MAAM,MAAM,UAAU;AAC1B,0BAAU;AAAA,cACZ,WAAU,GAAG,MAAM,MAAM,YAAY;AACnC,0BAAU;AAAA,cACZ,WAAU,GAAG,MAAM,MAAM,UAAU,GAAG,MAAM,MAAM,sBAAsB,GAAG,MAAM,MAAM,iBAAiB;AACtG,0BAAU;AAAA,cACZ,WAAU,GAAG,MAAM,MAAM,UAAU;AACjC,0BAAU;AAAA,cACZ,WAAU,GAAG,MAAM,MAAM,QAAQ;AAC/B,0BAAU;AAAA,cACZ;AAEA,gBAAE,QAAQ,EACP,SAAS,SAAS,sCAAsC,EACxD,KAAK,GAAG,GAAG,MAAM,MAAM,EAAE,GAAG,EAC5B,SAAS,CAAC;AAAA,YACf,CAAC;AACD,kBAAQ,OAAO;AAAA,QACjB,CAAC;AAAA,MAAC,CAAC;AAAA,IACL;AAAA,IAEA,YAAY,OAAO,aAAa,GAAG,iBAAiB,GAAG;AACrD,oBAAc,KAAK;AAEnB,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAE,aAAK,YAAY,GAAG,SAAO;AACnE,cAAI,UAAU,CAAC;AACf,cAAG,MAAM,WAAW,UAAU,GAAG;AAC/B,sBAAU,IAAI,KAAK,CAAC;AAAA,UACtB,OAAO;AACL,sBAAU,IAAI,KAAK,OAAO,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,MAAM,SAAS,cAAc,EAAE,MAAM,GAAG,UAAU;AAAA,UACxH;AACA,eAAK,aAAa,cAAc;AAChC,eAAK,eAAe,YAAY,QAAQ;AACxC,cAAG,QAAQ;AAAQ,oBAAQ,QAAQ,CAAC,IAAI,MAAM;AAE5C,oBAAM,IAAI,EAAE,KAAK,EACd,SAAS,sGAAsG,EAC/G,KAAK,QAAQ,GAAG,OAAO,EACvB,KAAK,aAAa,QAAQ,EAC1B,SAAS,KAAK,cAAc;AAC/B,kBAAG,GAAG,KAAK;AAAO,kBAAE,KAAK,UAAU,QAAQ;AAC3C,kBAAG,GAAG,KAAK;AAAS,kBAAE,KAAK,gBAAgB,GAAG,KAAK,OAAO;AAE1D,oBAAM,UAAU,EAAE,kCAAkC,EAAE,SAAS,CAAC;AAGhE,kBAAG,GAAG,KAAK,OAAO;AAChB,kBAAE,QAAQ,EACP,SAAS,mBAAmB,EAC5B,KAAK,oGAAoG,EACzG,SAAS,OAAO;AAAA,cACrB,OAAO;AACL,kBAAE,QAAQ,EACP,SAAS,mBAAmB,EAC5B,KAAK,qGAAqG,EAC1G,SAAS,OAAO;AAAA,cACrB;AAGA,gBAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,KAAK,GAAG,KAAK,IAAI,EAAE,SAAS,OAAO;AAGhE,kBAAG,GAAG,KAAK,MAAM;AACf,kBAAE,QAAQ,EAAE,SAAS,4CAA4C,EAAE,KAAK,GAAG,KAAK,IAAI,EAAE,SAAS,OAAO;AAAA,cACxG;AAAA,YACF,CAAC;AAAA;AACI,iBAAK,eAAe,SAAS,QAAQ;AAC1C,kBAAQ,OAAO;AAAA,QACjB,CAAC;AAAA,MAAC,CAAC;AAAA,IACL;AAAA,IAEA,mBAAmB,OAAO,aAAa,GAAG,iBAAiB,GAAG;AAC5D,oBAAc,KAAK;AAEnB,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAE,aAAK,mBAAmB,GAAG,SAAO;AAC1E,cAAI,UAAU,CAAC;AACf,cAAG,MAAM,WAAW,UAAU,GAAG;AAC/B,sBAAU,IAAI,KAAK,CAAC;AAAA,UACtB,OAAO;AACL,sBAAU,IAAI,KAAK,OAAO,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,MAAM,SAAS,cAAc,EAAE,MAAM,GAAG,UAAU;AAAA,UACxH;AACA,eAAK,aAAa,qBAAqB;AACvC,eAAK,sBAAsB,YAAY,QAAQ;AAC/C,cAAG,QAAQ;AAAQ,oBAAQ,QAAQ,CAAC,IAAI,MAAM;AAC5C,oBAAM,IAAI,EAAE,KAAK,EACd,SAAS,sGAAsG,EAE/G,KAAK,QAAQ,GAAG,aAAa,SAAS,mBAAmB,GAAG,KAAK,EAAE,EAAE,QAAQ,MAAM,KAAK,sBAAsB,EAC9G,KAAK,aAAa,QAAQ,EAC1B,SAAS,KAAK,qBAAqB;AAEtC,oBAAM,UAAU,EAAE,QAAQ,EAAE,SAAS,sDAAsD,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,CAAC;AAG5H,gBAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,SAAS,OAAO;AAG9D,gBAAE,QAAQ,EACP,SAAS,mBAAmB,EAC5B,KAAK,qGAAqG,EAC1G,SAAS,OAAO;AAGnB,kBAAG,GAAG,KAAK,IAAI;AACb,kBAAE,QAAQ,EAAE,SAAS,4CAA4C,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,SAAS,OAAO;AAAA,cACtG;AAGA,kBAAI,UAAU;AAAA,gBACZ,WAAW;AAAA,gBACX,gBAAgB;AAAA,gBAChB,cAAc;AAAA,gBACd,cAAc;AAAA,gBACd,kBAAkB;AAAA,gBAClB,cAAc;AAAA,gBACd,aAAa;AAAA,gBACb,YAAY;AAAA,gBACZ,YAAY;AAAA,gBACZ,WAAW;AAAA,gBACX,aAAa;AAAA,cACf,EAAE,GAAG,MAAM,OAAO;AAGlB,gBAAE,QAAQ,EACP,SAAS,oCAAoC,EAC7C,IAAI,EAAE,YAAY,OAAO,YAAY,OAAO,OAAO,oBAAoB,CAAC,EACxE,KAAK,GAAG,GAAG,MAAM,IAAI,EACrB,SAAS,CAAC;AAAA,YACf,CAAC;AAAA;AACI,iBAAK,sBAAsB,SAAS,QAAQ;AACjD,kBAAQ,OAAO;AAAA,QACjB,CAAC;AAAA,MAAC,CAAC;AAAA,IACL;AAAA,IAEA,MAAM,YAAY,QAAQ,OAAO;AAC/B,YAAM,QAAQ,KAAK,QAAQ,IAAI;AAC/B,UAAG,CAAC,SAAS,SAAS,KAAK,WAAW;AAEpC;AAAA,MACF;AACA,WAAK,YAAY;AAEjB,UAAG,CAAC,OAAO;AACT,aAAK,YAAY,SAAS,QAAQ;AAClC,aAAK,UAAU,SAAS,QAAQ;AAChC,aAAK,aAAa;AAClB;AAAA,MACF;AACA,WAAK,YAAY,YAAY,QAAQ;AACrC,WAAK,UAAU,SAAS,QAAQ;AAChC,WAAK,QAAQ,SAAS,QAAQ;AAC9B,WAAK,UAAU,YAAY,QAAQ;AAEnC,UAAI,cAAc;AAElB,cAAQ,IAAI;AAAA,QACV,KAAK,YAAY,KAAK,EAAE,KAAK,OAAK;AAAE,yBAAe,EAAE;AAAA,QAAO,CAAC;AAAA,QAC7D,KAAK,mBAAmB,KAAK,EAAE,KAAK,OAAK;AAAE,yBAAe,EAAE;AAAA,QAAO,CAAC;AAAA,QACpE,KAAK,mBAAmB,KAAK,EAAE,KAAK,OAAK;AAAE,yBAAe,EAAE;AAAA,QAAO,CAAC;AAAA,MACtE,CAAC,EAAE,KAAK,OAAK;AACX,aAAK,YAAY,SAAS,QAAQ;AAClC,YAAG,cAAc,GAAG;AAClB,eAAK,UAAU,KAAK,sBAAsB,EAAE,MAAM,EAAE,SAAS,QAAQ;AACrE,eAAK,QAAQ,SAAS,QAAQ;AAC9B,eAAK,UAAU,YAAY,QAAQ;AAAA,QACrC,OAAO;AACL,eAAK,UAAU,SAAS,QAAQ;AAChC,eAAK,QAAQ,YAAY,QAAQ;AAAA,QACnC;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;;;AC3YO,MAAM,QAAN,MAAY;AAAA,IASjB,SAAS;AACP,aAAO,KAAK,YAAY;AAAA,IAC1B;AAAA,IAEA,YAAY,OAAO,CAAC,GAAG;AACrB,YAAM,SAAS,KAAK,OAAO;AAE3B,MAAM,aAAa,QAAQ,MAAM,QAAQ,IAAI;AAC7C,aAAO,QAAQ,SAAO;AACpB,cAAM,cAAc,KAAK,IAAI,GAAG,YAAY,IAAI,IAAI,MAAM,CAAC;AAC3D,YAAG,OAAO,KAAK,gBAAgB;AAAY,eAAK,GAAG,KAAK,KAAK,aAAa,KAAK,IAAI,CAAC;AAAA,MACtF,CAAC;AAED,WAAK,MAAM,KAAK,UAAU;AAC1B,WAAK,SAAS;AAEd,WAAK,OAAO,KAAK,QAAQ;AACzB,WAAK,QAAQ,KAAK,SAAS;AAC3B,WAAK,OAAO,KAAK,QAAQ;AAEzB,WAAK,KAAK,IAAI;AAAA,IAChB;AAAA,IAEA,KAAK,MAAM;AAAA,IAAC;AAAA,IAEZ,UAAU;AACR,WAAK,YAAY;AACjB,WAAK,OAAO,QAAQ;AACpB,WAAK,KAAK,OAAO;AACjB,WAAK,KAAK,WAAW,IAAI;AAAA,IAC3B;AAAA,IAEA,IAAI,QAAQ;AAAE,aAAO,UAAU,MAAM,oBAAoB,KAAK,GAAG;AAAA,IAAE;AAAA,IAEnE,IAAI,KAAK,GAAG;AACV,WAAK,WAAW,UAAU,OAAO,YAAY,YAAY,UAAU;AACnE,UAAG;AAAG,aAAK,WAAW,UAAU,IAAI,SAAS,GAAG;AAAA,IAClD;AAAA,IAEA,IAAI,MAAM,GAAG;AACX,UAAG,CAAC,KAAK;AAAW,eAAO;AAC3B,WAAK,UAAU,YAAY;AAAA,IAC7B;AAAA,IAEA,IAAI,UAAU,GAAG;AACf,UAAG,CAAC,KAAK;AAAW,eAAO;AAC3B,WAAK,UAAU,YAAY;AAAA,IAC7B;AAAA,IAEA,IAAI,KAAK,GAAG;AACV,WAAK,IAAI,UAAU,OAAO,QAAQ,CAAC;AAAA,IACrC;AAAA,IAEA,IAAI,SAAS,GAAG;AACd,UAAG,KAAK,UAAU;AAChB,aAAK,IAAI,aAAa,oBAAoB,QAAQ;AAAA,MACpD,WAAU,GAAG;AACX,aAAK,IAAI,gBAAgB,kBAAkB;AAAA,MAC7C,OAAO;AACL,aAAK,IAAI,aAAa,oBAAoB,OAAO;AAAA,MACnD;AAAA,IACF;AAAA,IAEA,YAAY;AACV,WAAK,GAAG,UAAU,OAAK,KAAK,QAAQ,CAAC;AACrC,aAAO;AAAA,IACT;AAAA,IAEA,OAAO;AACL,WAAK,MAAM,KAAK;AAChB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO;AACL,WAAK,MAAM,KAAK;AAChB,aAAO;AAAA,IACT;AAAA,IAEA,YAAY;AACV,YAAM,MAAM,SAAS,cAAc,KAAK;AACxC,UAAI,UAAU,IAAI,OAAO;AAEzB,UAAI,YAAY,KAAK,aAAa;AAElC,aAAO;AAAA,IACT;AAAA,IAEA,WAAW;AACT,WAAK,aAAa,KAAK,IAAI,cAAc,eAAe;AACxD,WAAK,cAAc,KAAK,IAAI,cAAc,gBAAgB;AAC1D,WAAK,aAAa,KAAK,IAAI,cAAc,eAAe;AACxD,WAAK,YAAY,KAAK,IAAI,cAAc,cAAc;AACtD,WAAK,WAAW,KAAK,IAAI,cAAc,aAAa;AACpD,WAAK,aAAa,KAAK,IAAI,cAAc,eAAe;AACxD,WAAK,IAAI,iBAAiB,iBAAiB,QAAM,KAAK,KAAK,QAAQ,MAAM,EAAE,CAAC;AAC5E,WAAK,IAAI,iBAAiB,mBAAmB,QAAM,KAAK,KAAK,UAAU,MAAM,EAAE,CAAC;AAChF,WAAK,IAAI,iBAAiB,iBAAiB,QAAM,KAAK,KAAK,QAAQ,MAAM,EAAE,CAAC;AAC5E,WAAK,IAAI,iBAAiB,kBAAkB,QAAM,KAAK,KAAK,SAAS,MAAM,EAAE,CAAC;AAAA,IAChF;AAAA,IAEA,eAAe;AACb,aAAO;AAAA,gCACqB,KAAK,OAAO,UAAU,KAAK,SAAS;AAAA,qCAC/B,KAAK,WAAW;AAAA;AAAA;AAAA,IAGnD;AAAA,IAEA,aAAa;AACX,aAAO;AAAA,QACH,KAAK,UAAU;AAAA,QACf,KAAK,QAAQ;AAAA,QACb,KAAK,UAAU;AAAA;AAAA,IAErB;AAAA,IAEA,YAAY;AACV,aAAO,6BAA6B,KAAK,cAAc;AAAA,IACzD;AAAA,IAEA,gBAAgB;AACd,aAAO;AAAA;AAAA;AAAA;AAAA,IAIT;AAAA,IAEA,UAAU;AACR,aAAO,4BAA4B,KAAK,YAAY;AAAA,IACtD;AAAA,IAEA,cAAc;AAAE,aAAO;AAAA,IAAG;AAAA,IAE1B,YAAY;AACV,aAAO,6BAA6B,KAAK,cAAc;AAAA,IACzD;AAAA,IAEA,gBAAgB;AACd,aAAO;AAAA;AAAA,eAEI,KAAK,kBAAkB;AAAA,eACvB,KAAK,mBAAmB;AAAA;AAAA;AAAA,IAGrC;AAAA,IAEA,oBAAoB;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,qBAAqB;AACnB,aAAO,KAAK,SAAS;AAAA,IACvB;AAAA,IAIA,SAAS,OAAO,CAAC,GAAG;AAClB,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,aAAO;AAAA,6CACkC,KAAK,gCAAgC,KAAK;AAAA;AAAA,IAErF;AAAA,IAEA,UAAU,OAAO,CAAC,GAAG;AACnB,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,WAAK,UAAU;AACf,aAAO;AAAA,6CACkC,KAAK,eAAe,KAAK,UAAU,KAAK;AAAA;AAAA,IAEnF;AAAA,EACF;AApLE,gBADW,OACJ,kBAAiB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAgLK,MAAM,YAAN,cAAwB,MAAM;AAAA,IACnC,SAAS;AACP,aAAO,MAAM,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;AAAA,IACzC;AAAA,IAEA,aAAa;AACX,aAAO,sCAAsC,MAAM,WAAW;AAAA,IAChE;AAAA,IAEA,SAAS,MAAM,KAAK,KAAK;AACvB,YAAM,SAAS,GAAG;AAClB,WAAK,WAAW,IAAI,cAAc,iBAAiB;AACnD,WAAK,SAAS,iBAAiB,UAAU,QAAM,KAAK,KAAK,UAAU,MAAM,EAAE,CAAC;AAAA,IAC9E;AAAA,IAEA,qBAAqB;AACnB,aAAO,MAAM,mBAAmB,IAAI,KAAK,UAAU;AAAA,IACrD;AAAA,EACF;AAEO,MAAM,aAAN,cAAyB,UAAU;AAAA,IACxC,KAAK,OAAO,CAAC,GAAG;AACd,YAAM,KAAK,IAAI;AACf,WAAK,GAAG,UAAU,CAAC,GAAG,OAAO;AAC3B,WAAG,eAAe;AAElB,YAAG,GAAG,UAAU,SAAS,OAAO;AAC9B,eAAK,KAAK,OAAO,MAAM,EAAE;AACzB,eAAK,KAAK;AAAA,QACZ,WAAW,GAAG,UAAU,SAAS,MAAM;AACrC,eAAK,KAAK,MAAM,MAAM,EAAE;AACxB,eAAK,KAAK;AAAA,QACZ,OAAO;AACL,eAAK,KAAK;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,SAAS;AACP,aAAO,MAAM,OAAO,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;AAAA,IAC5C;AAAA,IAEA,MAAM,OAAO,CAAC,GAAG;AACf,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,WAAK,UAAU;AACf,aAAO,MAAM,UAAU,IAAI;AAAA,IAC7B;AAAA,IAEA,OAAO,OAAO,CAAC,GAAG;AAChB,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,WAAK,UAAU;AACf,aAAO,MAAM,UAAU,IAAI;AAAA,IAC7B;AAAA,IAEA,qBAAqB;AACnB,aAAO,KAAK,MAAM,IAAI,KAAK,OAAO;AAAA,IACpC;AAAA,EACF;;;AC/OO,MAAM,gBAAN,MAAoB;AAAA,IACzB,YAAY,KAAK,IAAI,OAAO,CAAC,GAAG;AAC9B,WAAK,MAAM;AACX,WAAK,KAAK;AACV,WAAK,OAAO;AACZ,WAAK,MAAM,IAAI,KAAK,aAAa,OAAO;AAExC,WAAK,YAAY,KAAK,IAAI;AAC1B,WAAK,aAAa;AAAA,IACpB;AAAA,IAEA,UAAU,KAAK,SAAS,WAAW,OAAO;AACxC,WAAK,SAAS,KAAK,GAAG;AACtB,WAAK,SAAS,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,iBAAiB,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AAChF,UAAG;AAAW,aAAK,SAAS,SAAS,UAAU,SAAS;AACxD,UAAG;AAAS,aAAK,WAAW,SAAS,KAAK;AAC1C,aAAO;AAAA,IACT;AAAA,IAEA,WAAW,OAAO,OAAO;AACvB,WAAK,UAAU,YAAY,kBAAkB;AAC7C,WAAK,UAAU,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,iBAAiB,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AACjF,WAAK,UAAU,SAAS,UAAU,KAAK;AACvC,UAAG,OAAO;AACR,aAAK,UAAU,YAAY,EAAE,mBAAmB,aAAa,CAAC;AAAA,MAChE;AAAA,IACF;AAAA,IAEA,WAAW;AACT,UAAG,KAAK;AAAO;AACf,WAAK,QAAQ;AACb,WAAK,WAAW;AAChB,WAAK,OAAO,OAAO,KAAM,OAAK;AAAE,aAAK,aAAa;AAAA,MAAK,CAAC;AAAA,IAC1D;AAAA,IAEA,aAAa,KAAK,KAAK;AACrB,UAAG,OAAO,MAAM;AACd,aAAK,SAAS;AACd,aAAK,SAAS;AACd,aAAK,UAAU,CAAC;AAChB,aAAK,cAAc;AACnB,aAAK,WAAW;AAChB,aAAK,aAAa;AAClB,YAAG,OAAO;AAAM,eAAK,SAAS;AAC9B,YAAG,CAAC,KAAK;AAAO,eAAK,SAAS;AAAA,MAChC;AAEA,YAAM,KAAK,GAAG,KAAK,UAAU,IAAI,MAAM,IAAI,gBAAgB;AAAA,QACzD,GAAG,KAAK;AAAA,QACR,KAAK,KAAK;AAAA,MACZ,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,UAAQ;AACpD,aAAK,IAAI,QAAQ,SAAO;AACtB,eAAK;AAEL,cAAG,OAAO,iBAAiB;AAEzB,iBAAK,cAAc;AACnB,iBAAK,UAAU,oCAAoC,WAAW,MAAM;AAAA,UACtE,WAAW,OAAO,gBAAgB;AAEhC,iBAAK,aAAa;AAClB,iBAAK,UAAU,wCAAwC,UAAU,UAAU,kBAAkB;AAAA,UAC/F,WAAW,OAAO,cAAc;AAC9B,iBAAK,WAAW;AAAA,UAClB,WAAW,MAAM,QAAQ,GAAG,KAAK,IAAI,MAAM,iBAAiB;AAC1D,iBAAK,gBAAgB;AAAA,cACnB,OAAO,IAAI;AAAA,cACX,WAAW,IAAI;AAAA,cACf,WAAW,IAAI;AAAA,cACf,KAAK,IAAI;AAAA,YACX;AACA,iBAAK,QAAQ,KAAK,GAAG;AAAA,UACvB,WAAW,MAAM,QAAQ,GAAG,KAAK,IAAI,MAAM,QAAQ;AAGjD,iBAAK,SAAS,WAAW,IAAI,EAAE;AAC/B,iBAAK,UAAU,iBAAiB,KAAK,UAAU,KAAK,UAAU,WAAW,SAAS;AAAA,UACpF,OAAO;AAEL,iBAAK,QAAQ,KAAK,GAAG;AAAA,UACvB;AAAA,QACF,CAAC;AACD,aAAK,YAAY,KAAK,IAAI;AAC1B,aAAK,UAAU;AAEf,YAAG,CAAC,KAAK,YAAY,CAAC,KAAK;AAAY,qBAAW,OAAK;AAAE,iBAAK,aAAa;AAAA,UAAE,GAAG,KAAK,UAAU;AAAA,MACjG,CAAC,EAAE,MAAM,SAAO;AACd,aAAK,UAAU,mDAAmD,UAAU,UAAU,kBAAkB;AACxG,gBAAQ,MAAM,GAAG;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,IAEA,gBAAgB;AACd,aAAO,IAAI,cAAc,EAAE,IAAI,KAAK,CAAC,EAClC,KAAK,EACL,GAAG,UAAU,OAAK;AACjB,YAAG,EAAE,UAAU,UAAU;AACvB,eAAK,YAAY,IAAI;AAAA,QACvB,WAAW,EAAE,UAAU,OAAO;AAC5B,eAAK,YAAY;AAAA,QACnB,OAAO;AACL,eAAK,YAAY;AAAA,QACnB;AAAA,MACF,CAAC;AAAA,IACL;AAAA,IAEA,YAAY,MAAM,OAAO;AACvB,UAAG,CAAC,KAAK;AAAe,eAAO;AAC/B,YAAM,KAAK,KAAK;AAChB,WAAK,gBAAgB;AAErB,YAAM,QAAQ,EAAE,YAAY,GAAG,IAAI;AACnC,UAAG;AAAK,cAAM,QAAQ;AAEtB,WAAK,WAAW;AAChB,WAAK,QAAQ,KAAK;AAAA,IACpB;AAAA,IAEA,cAAc;AACZ,WAAK,gBAAgB;AACrB,WAAK,QAAQ,KAAK,CAAC,MAAM,CAAC;AAC1B,WAAK,UAAU;AACf,WAAK,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAAA,IAC/B;AAAA,IAEA,UAAU,WAAW,OAAO;AAC1B,UAAG,KAAK,oBAAoB,CAAC,UAAU;AACrC,gBAAQ,IAAI,iBAAiB;AAC7B;AAAA,MACF;AACA,UAAI,oBAAoB,KAAK,QAAQ;AAErC,aAAM,qBAAqB,KAAK,QAAQ,QAAQ;AAC9C,cAAM,OAAO,KAAK,QAAQ,MAAM;AAChC,YAAI,KAAK,MAAM,iBAAiB;AAC9B,eAAK,UAAU,UAAU,KAAK,UAAU,KAAK,UAAU,WAAW,SAAS;AAC3E,eAAK,cAAc;AAAA,QACrB,WAAW,KAAK,MAAM,OAAO;AAC3B,eAAK;AACL,eAAK,cAAc,KAAK,EAAE;AAC1B,eAAK,cAAc,KAAK,EAAE;AAC1B,8BAAoB;AAAA,QACtB;AAEA,YAAG,CAAC,KAAK,YAAY;AACnB,cAAI,KAAK,UAAU,KAAK,UAAW,CAAC,KAAK,QAAQ,UAAU,KAAK,YAAY,CAAC,KAAK,eAAgB;AAChG,iBAAK,UAAU,eAAe,4BAA4B,WAAW,uBAAuB;AAC5F,iBAAK,gBAAgB;AACrB,iBAAK,gBAAgB;AAAA,UACvB,WAAW,CAAC,KAAK,eAAe,aAAa;AAC3C,iBAAK,UAAU,iBAAiB,KAAK,UAAU,KAAK,UAAU,WAAW,SAAS;AAAA,UACpF;AAAA,QACF;AAAA,MACF;AAGA,UAAG,CAAC,KAAK,QAAQ,QAAQ;AACvB,eAAO,KAAK;AACZ;AAAA,MACF;AAEA,YAAM,SAAS,KAAK,cAAc,KAAK,IAAI,IAAI,KAAK;AACpD,UAAI,UAAU;AACd,UAAI,SAAS,IAAI;AACf,kBAAU,KAAK,IAAI,IAAI,SAAS,SAAS,KAAK,QAAQ,MAAM,CAAC;AAAA,MAC/D;AAEA,UAAG,KAAK,QAAQ,SAAS;AAAK,aAAK,QAAQ,KAAK,IAAI,KAAK,QAAS,KAAK,QAAQ,QAAS,EAAE;AAC1F,UAAG,KAAK,QAAQ,UAAU;AAAI,aAAK,QAAQ,KAAK,IAAI,KAAK,QAAS,KAAK,QAAQ,QAAS,GAAG;AAQ3F,WAAK,mBAAmB,WAAW,OAAK;AAAE,aAAK,UAAU,IAAI;AAAA,MAAE,GAAG,OAAO;AAAA,IAC3E;AAAA,IAEA,WAAW;AACT,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB,SAAS,KAAK,cAAc,uBAAuB,GAAG;AAAA,UACtE,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,QAAQ,OAAO,CAAC,GAAG;AACjB,WAAK,UAAU;AACf,WAAK,eAAe;AAEpB,YAAM,YAAY;AAAA,QAChB,GAAG,KAAK,GAAG,KAAK,SAAS;AAAA,QACzB,GAAG;AAAA,MACL;AAEA,UAAG,KAAK,SAAS,MAAM;AACrB,kBAAU,QAAQ,KAAK;AAAA,MACzB;AAEA,UAAG,KAAK,cAAc,MAAM;AAC1B,kBAAU,MAAM,KAAK;AACrB,kBAAU,IAAI,KAAK;AACnB,kBAAU,IAAI;AAAA,MAChB;AAEA,UAAG,KAAK,QAAQ;AACd,kBAAU,IAAI,KAAK;AACnB,kBAAU,IAAI;AAAA,MAChB,OAAO;AACL,aAAK,UAAU,iCAAiC,QAAQ,MAAM;AAAA,MAChE;AAEA,YAAM,KAAK,GAAG,KAAK,UAAU,IAAI,MAAM,IAAI,gBAAgB,SAAS,GAAG,KAAK,SAAS,CAAC,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,UAAQ;AACvH,YAAG,KAAK,KAAK;AACX,cAAG,KAAK;AAAS,mBAAO;AAExB,eAAK,UAAU,yCAAyC,QAAQ,MAAM;AACtE,cAAG,KAAK,OAAO,KAAK,QAAQ;AAC1B,iBAAK,aAAa;AAAA,UACpB,OAAO;AACL,iBAAK,aAAa,KAAK,KAAK,CAAC;AAG7B,kBAAM,MAAM,IAAI,MAAM,SAAS,IAAI;AACnC,gBAAI,aAAa,IAAI,KAAK,KAAK,GAAG;AAClC,mBAAO,QAAQ,aAAa,MAAM,IAAI,IAAI,IAAI;AAG9C,qBAAS,iBAAiB,kCAAkC,EAAE,QAAQ,QAAM;AAC1E,oBAAM,MAAM,IAAI,MAAM,GAAG,IAAI;AAC7B,kBAAI,aAAa,IAAI,KAAK,KAAK,GAAG;AAClC,iBAAG,OAAO,IAAI;AAAA,YAChB,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,eAAK,UAAU,mDAAmD,UAAU,UAAU,kBAAkB;AAAA,QAC1G;AAAA,MACF,CAAC,EAAE,MAAM,SAAO;AACd,aAAK,UAAU,mDAAmD,UAAU,UAAU,kBAAkB;AACxG,gBAAQ,MAAM,GAAG;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,IAEA,OAAO;AACL,UAAI,eAAe,QAAQ;AACzB,aAAK,aAAa,OAAO;AACzB,aAAK,QAAQ;AAAA,MACf,OAAO;AACL,aAAK,IAAI,gBAAgB,KAAK,QAAQ,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,MAAM;AAC1D,eAAK,aAAa,KAAK,IAAI,OAAO;AAClC,eAAK,QAAQ;AAAA,QACf,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,UAAU;AACR,WAAK,YAAY,KAAK,KAAK,uBAAuB;AAClD,WAAK,YAAY,KAAK,KAAK,+BAA+B;AAC1D,WAAK,WAAW,KAAK,KAAK,sBAAsB;AAChD,WAAK,iBAAiB,KAAK,KAAK,4BAA4B;AAC5D,WAAK,gBAAgB,KAAK,KAAK,2BAA2B;AAC1D,WAAK,SAAS,KAAK,KAAK,oBAAoB;AAC5C,WAAK,UAAU,KAAK,KAAK,qBAAqB;AAC9C,WAAK,UAAU,KAAK,KAAK,qBAAqB;AAC9C,WAAK,UAAU,KAAK,QAAQ,KAAK,oBAAoB;AACrD,WAAK,UAAU,KAAK,QAAQ,KAAK,aAAa;AAC9C,WAAK,cAAc,KAAK,KAAK,gCAAgC;AAC7D,WAAK,uBAAuB,KAAK,KAAK,yCAAyC;AAE/E,WAAK,YAAY,MAAM,QAAM;AAC3B,aAAK,MAAM,UAAU;AACrB,WAAG,cAAc,KAAK;AACtB,WAAG,eAAe;AAClB,eAAO;AAAA,MACT,CAAC;AAED,WAAK,qBAAqB,MAAM,QAAM;AACpC,aAAK,wBAAwB;AAC7B,WAAG,cAAc,OAAO;AACxB,WAAG,eAAe;AAClB,eAAO;AAAA,MACT,CAAC;AAED,UAAG,KAAK,GAAG,KAAK,QAAQ,GAAG;AACzB,aAAK,aAAa,KAAK,GAAG,KAAK,QAAQ,GAAG,CAAC;AAAA,MAC7C,OAAO;AACL,aAAK,QAAQ;AAAA,MACf;AAYA,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,UAAU;AAAE,aAAO,KAAK,GAAG,KAAK,QAAQ;AAAA,IAAE;AAAA,IAO/C,cAAc,KAAK;AACjB,aAAO,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC5C,cAAM,KAAK,EAAE,MAAM,EAAE,KAAK,aAAa,MAAM,EAAE;AAC/C,UAAE,MAAM,EAAE,SAAS,UAAU,EAAE,KAAK,MAAM,EAAE,EAAE,SAAS,EAAE;AACzD,UAAE,MAAM,EAAE,SAAS,aAAa,EAAE;AAAA,UAChC,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE,KAAK,IAAI,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,QAAQ,CAAC,CAAC,EAAE,KAAK,SAAS,MAAM,EAAE;AAAA,QAC9I,EAAE,SAAS,EAAE;AACb,UAAE,MAAM,EAAE,KAAK,GAAG,EAAE,SAAS,EAAE;AAC/B,UAAE,MAAM,EAAE,SAAS,sBAAsB,EAAE,KAAK,KAAK,IAAI,OAAO,MAAM,EAAE,CAAC,EAAE,KAAK,oBAAoB,MAAM,EAAE,SAAS,EAAE;AACvH,aAAK,QAAQ,OAAO,EAAE;AAEtB,YAAG,GAAG,KAAK,EAAE,QAAQ;AACnB,eAAK,IAAI,cAAc,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AAAA,QACpD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,aAAa;AACX,YAAM,WAAW,CAAC;AAElB,WAAK,GAAG,KAAK,SAAS,EAAE,MAAM,GAAG,EAAE,QAAQ,UAAQ;AACjD,iBAAS,KAAK,EAAE,OAAO,MAAM,MAAM,CAAC,EAAE,CAAC;AAAA,MACzC,CAAC;AAED,WAAK,QAAQ,IAAI,KAAK,WAAW,KAAK,QAAQ,IAAI,CAAC,GAAG;AAAA,QACpD,MAAM;AAAA,QACN,MAAM,EAAE,SAAmB;AAAA,QAC3B,SAAS;AAAA,UACP,aAAa;AAAA,YACX,MAAM;AAAA,YACN,MAAM;AAAA,YACN,WAAW;AAAA,YACX,UAAU;AAAA,UACZ;AAAA,UACA,QAAQ;AAAA,YACN,GAAG;AAAA,cACD,MAAM;AAAA,cACN,SAAS;AAAA,cACT,MAAM,EAAE,eAAe,qBAAqB;AAAA,YAC9C;AAAA,YACA,GAAG;AAAA,cACD,aAAa;AAAA,YACf;AAAA,UACF;AAAA,UACA,SAAS;AAAA,YACP,YAAY;AAAA,cACV,QAAQ;AAAA,gBACN,UAAU;AAAA,cACZ;AAAA,cACA,aAAa,CAWb;AAAA,YACF;AAAA,YACA,MAAM;AAAA,cACJ,KAAK;AAAA,gBACH,SAAS;AAAA,gBACT,MAAM;AAAA,gBACN,YAAY,MAAM;AAAE,sBAAG,CAAC,KAAK;AAAgB,2BAAO;AAAA,gBAAM;AAAA,cAC5D;AAAA,cACA,MAAM;AAAA,gBACJ,MAAM;AAAA,gBAEN,MAAM;AAAA,kBACJ,SAAS;AAAA,gBACX;AAAA,gBACA,OAAO;AAAA,kBACL,SAAS;AAAA,gBACX;AAAA,cACF;AAAA,cACA,QAAQ;AAAA,gBACN,GAAG,EAAC,KAAK,YAAY,KAAK,WAAU;AAAA,gBACpC,GAAG,EAAC,KAAK,YAAY,KAAK,WAAU;AAAA,cACtC;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,0BAA0B;AACxB,WAAK,MAAM,KAAK,SAAS,QAAQ,CAAC,MAAM,MAAM;AAC5C,cAAM,KAAK,CAAC;AACZ,aAAK,KAAK,QAAQ,OAAK;AACrB,cAAI,GAAG,UAAU,GAAG,GAAG,SAAS,GAAG,KAAK,EAAE;AAAG;AAC7C,aAAG,KAAK,CAAC;AAAA,QACX,CAAC;AAED,aAAK,OAAO;AACZ,aAAK,mBAAmB;AAAA,MAC1B,CAAC;AAED,WAAK,QAAQ,KAAK,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO;AACtC,YAAG,GAAG,sBAAsB,GAAG,QAAQ,QAAQ,GAAG,mBAAmB,QAAQ,MAAM;AACjF,aAAG,OAAO;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,cAAc,KAAK;AACjB,UAAI,QAAQ;AACZ,aAAO,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAE5C,aAAK,MAAM,KAAK,SAAS,OAAO,KAAK,KAAK,EAAE,GAAG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC;AACtE;AAAA,MACF,CAAC;AACD,UAAG,QAAQ;AAAG,aAAK,MAAM,OAAO;AAAA,IAClC;AAAA,IAEA,kBAAkB;AAChB,WAAK,iBAAiB;AACtB,WAAK,MAAM,QAAQ,QAAQ,KAAK,KAAK,MAAM,UAAU;AACrD,WAAK,MAAM,OAAO;AAClB,WAAK,eAAe,KAAK;AACzB,WAAK,cAAc,KAAK;AAAA,IAC1B;AAAA,IAEA,kBAAkB;AAChB,YAAM,UAAU,KAAK,GAAG,KAAK,YAAY;AACzC,UAAG,CAAC;AAAS;AAEb,UAAI,KAAK;AACT,UAAI,KAAK;AAET,WAAK,MAAM,KAAK,SAAS,QAAQ,UAAQ;AACvC,cAAM,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG,CAAC;AACpC,cAAM,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,SAAS,GAAG,CAAC;AAEvD,YAAI,KAAK,IAAI;AACX,cAAG,CAAC,MAAM,KAAK;AAAI,iBAAK;AACxB,cAAG,CAAC,MAAM,KAAK;AAAI,iBAAK;AAAA,QAC1B,OAAO;AACL,cAAG,CAAC,MAAM,KAAK;AAAI,iBAAK;AACxB,cAAG,CAAC,MAAM,KAAK;AAAI,iBAAK;AAAA,QAC1B;AAAA,MACF,CAAC;AAED,cAAQ,QAAQ,CAAC,QAAQ,OAAO;AAC9B,YAAG,OAAO,MAAM,gBAAgB;AAC9B,gBAAM,SAAS,KAAK,MAAM,OAAO,EAAE;AACnC,cAAG,SAAS,MAAM,SAAS,IAAI;AAC7B,oBAAQ,IAAI,iBAAiB,MAAM;AACnC;AAAA,UACF;AAEA,gBAAM,OAAO;AAAA,YACX,MAAM;AAAA,YACN,SAAS;AAAA,YACT,aAAa;AAAA,YACb,OAAO;AAAA,UACT;AAEA,cAAG,OAAO,MAAM,SAAS;AACvB,iBAAK,cAAc;AAAA,UACrB,WAAW,OAAO,MAAM,SAAS;AAC/B,iBAAK,cAAc;AAAA,UACrB,WAAW,OAAO,MAAM,SAAS;AAC/B,iBAAK,cAAc;AAAA,UACrB,OAAO;AACL,iBAAK,cAAc;AAAA,UACrB;AAEA,gBAAM,QAAQ,CAAC;AAEf,cAAG,OAAO,IAAI;AACZ,kBAAM,KAAK,OAAO,EAAE;AAAA,UACtB;AAEA,cAAG,OAAO,IAAI;AACZ,kBAAM,KAAK,OAAO,EAAE;AAAA,UACtB;AAEA,cAAG,MAAM,QAAQ;AACf,iBAAK,QAAQ;AAAA,cACX,SAAS,CAAC,QAAQ,IAAI;AAAA,cACtB,SAAS,MAAM,KAAK,IAAI;AAAA,cACxB,UAAU;AAAA,cACV,UAAU,CAAC,QAAQ,IAAI;AAAA,YACzB;AACA,iBAAK,MAAM,QAAQ,KAAK;AACxB,iBAAK,QAAQ,CAAC,KAAK,UAAU;AAC3B,kBAAI,UAAU;AACd,kBAAI,gBAAiB,MAAM,IAAI,IAAI,MAAM,UAAU,SAAS,MAAO;AACnE,kBAAI,MAAM,OAAO;AAAA,YACnB;AACA,iBAAK,QAAQ,CAAC,KAAK,UAAU;AAC3B,kBAAI,UAAU;AACd,kBAAI,MAAM,OAAO;AAAA,YACnB;AAAA,UACF;AAEA,eAAK,MAAM,QAAQ,QAAQ,WAAW,YAAY,UAAU,QAAQ;AAAA,QAGtE,OAAO;AACL,kBAAQ,QAAQ,kBAAkB,MAAM;AAAA,QAC1C;AAAA,MACF,CAAC;AAED,WAAK,MAAM,OAAO;AAAA,IACpB;AAAA,IAEA,mBAAmB,cAAc,MAAM;AACrC,UAAI,IAAI,KAAK;AACb,WAAK,MAAM,KAAK,SAAS,QAAQ,UAAQ;AACvC,cAAM,KAAK,KAAK,MAAM,KAAK,KAAK,GAAG,CAAC;AACpC,cAAM,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,SAAS,GAAG,CAAC;AAEvD,YAAI,KAAK,IAAI;AACX,cAAG,CAAC,MAAM,KAAK;AAAI,iBAAK;AACxB,cAAG,CAAC,MAAM,KAAK;AAAI,iBAAK;AAAA,QAC1B,OAAO;AACL,cAAG,CAAC,MAAM,KAAK;AAAI,iBAAK;AACxB,cAAG,CAAC,MAAM,KAAK;AAAI,iBAAK;AAAA,QAC1B;AAAA,MACF,CAAC;AAED,aAAO,QAAQ,KAAK,MAAM,QAAQ,QAAQ,WAAW,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,MAAM,MAAM;AAC3F,YAAG,OAAO,QAAQ,MAAM,OAAO,QAAQ,IAAI;AAEzC,iBAAO,UAAU;AAAA,QACnB;AAAA,MACF,CAAC;AAED,UAAG;AAAa,aAAK,MAAM,OAAO;AAAA,IACpC;AAAA,EACF;AAEO,MAAM,gBAAN,cAA4B,WAAW;AAAA,IAC5C,KAAK,OAAO,CAAC,GAAG;AACd,YAAM,KAAK,IAAI;AACf,WAAK,UAAU;AACf,WAAK,KAAK,KAAK;AACf,WAAK,QAAQ;AACb,WAAK,WAAW,UAAU,IAAI,MAAM;AAEpC,WAAK,WAAW;AAEhB,WAAK,SAAS;AACd,WAAK,eAAe;AAEpB,WAAK,GAAG,UAAU,CAAC,GAAG,OAAO;AAC3B,WAAG,eAAe;AAClB,aAAK,SAAS,GAAG,UAAU;AAC3B,aAAK,KAAK;AAAA,MACZ,CAAC;AAAA,IACH;AAAA,IAEA,iBAAiB;AACf,WAAK,SAAS,YAAY;AAAA;AAAA,gBAEd,KAAK,UAAU,KAAK,GAAG,aAAa;AAAA;AAAA,IAElD;AAAA,IAEA,MAAM,OAAO,CAAC,GAAG;AACf,WAAK,MAAM;AACX,WAAK,QAAQ;AACb,aAAO,MAAM,MAAM,IAAI;AAAA,IACzB;AAAA,IAEA,OAAO,OAAO,CAAC,GAAG;AAChB,WAAK,MAAM;AACX,WAAK,QAAQ;AACb,aAAO,MAAM,OAAO,IAAI;AAAA,IAC1B;AAAA,IAEA,UAAU,OAAO,CAAC,GAAG;AACnB,WAAK,QAAQ;AACb,WAAK,UAAU;AACf,WAAK,UAAU;AACf,aAAO,MAAM,OAAO,IAAI;AAAA,IAC1B;AAAA,IAEA,oBAAoB;AAClB,aAAO,KAAK,OAAO,IAAI,KAAK,UAAU;AAAA,IACxC;AAAA,IAEA,qBAAqB;AACnB,aAAO,KAAK,MAAM;AAAA,IACpB;AAAA,EACF;;;AC1lBA,MAAM,WAAN,MAAe;AAAA,IACb,YAAY,KAAK,IAAI,OAAO,CAAC,GAAG;AAC9B,WAAK,MAAM;AACX,WAAK,KAAK;AACV,WAAK,OAAO;AACZ,WAAK,MAAM,IAAI,KAAK,aAAa,OAAO;AAExC,WAAK,YAAY,KAAK,IAAI;AAC1B,WAAK,aAAa;AAAA,IACpB;AAAA,IAEA,UAAU,KAAK,SAAS,WAAW,OAAO;AACxC,WAAK,SAAS,KAAK,GAAG;AACtB,WAAK,SAAS,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,iBAAiB,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AAChF,UAAG;AAAW,aAAK,SAAS,SAAS,UAAU,SAAS;AACxD,UAAG;AAAS,aAAK,WAAW,SAAS,KAAK;AAC1C,aAAO;AAAA,IACT;AAAA,IAEA,WAAW,OAAO,OAAO;AACvB,WAAK,UAAU,YAAY,kBAAkB;AAC7C,WAAK,UAAU,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,iBAAiB,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AACjF,WAAK,UAAU,SAAS,UAAU,KAAK;AACvC,UAAG,OAAO;AACR,aAAK,UAAU,YAAY,EAAE,mBAAmB,aAAa,CAAC;AAAA,MAChE;AAAA,IACF;AAAA,IAEA,WAAW;AACT,UAAG,KAAK;AAAO;AACf,WAAK,QAAQ;AACb,WAAK,OAAO,OAAO,KAAM,OAAK;AAAE,aAAK,aAAa;AAAA,MAAK,CAAC;AAAA,IAC1D;AAAA,IAEA,aAAa,KAAK,KAAK;AACrB,UAAG,OAAO,MAAM;AACd,aAAK,SAAS;AACd,aAAK,UAAU,CAAC;AAChB,aAAK,cAAc;AACnB,aAAK,WAAW;AAChB,aAAK,aAAa;AAClB,YAAG,OAAO;AAAM,eAAK,SAAS;AAC9B,YAAG,CAAC,KAAK;AAAO,eAAK,SAAS;AAAA,MAChC;AAEA,YAAM,KAAK,GAAG,KAAK,aAAa,IAAI,MAAM,IAAI,gBAAgB;AAAA,QAC5D,GAAG,KAAK;AAAA,QACR,KAAK,KAAK;AAAA,MACZ,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,UAAQ;AACpD,aAAK,IAAI,QAAQ,SAAO;AACtB,eAAK;AAEL,cAAG,OAAO,iBAAiB;AAEzB,iBAAK,cAAc;AACnB,iBAAK,UAAU,oCAAoC,WAAW,MAAM;AAAA,UACtE,WAAW,OAAO,gBAAgB;AAEhC,iBAAK,aAAa;AAClB,iBAAK,UAAU,wCAAwC,UAAU,UAAU,uBAAuB;AAAA,UACpG,WAAW,OAAO,cAAc;AAE9B,iBAAK,WAAW;AAAA,UAIlB,WAAW,MAAM,QAAQ,GAAG,KAAK,IAAI,MAAM,QAAQ;AAEjD,iBAAK,SAAS,WAAW,IAAI,EAAE;AAC/B,iBAAK,SAAS,WAAW,IAAI,EAAE;AAC/B,iBAAK,UAAU,iBAAiB,KAAK,UAAU,KAAK,UAAU,WAAW,SAAS;AAAA,UACpF,OAAO;AAEL,iBAAK,QAAQ,KAAK,GAAG;AAAA,UACvB;AAAA,QACF,CAAC;AACD,aAAK,YAAY,KAAK,IAAI;AAC1B,aAAK,UAAU;AACf,YAAG,CAAC,KAAK,YAAY,CAAC,KAAK;AAAY,qBAAW,OAAK;AAAE,iBAAK,aAAa;AAAA,UAAE,GAAG,KAAK,UAAU;AAAA,MACjG,CAAC,EAAE,MAAM,SAAO;AACd,aAAK,UAAU,mDAAmD,UAAU,UAAU,uBAAuB;AAC7G,gBAAQ,MAAM,GAAG;AAAA,MACnB,CAAC;AAAA,IACH;AAAA,IAEA,UAAU,WAAW,OAAO;AAC1B,UAAG,KAAK,oBAAoB,CAAC,UAAU;AACrC,gBAAQ,IAAI,iBAAiB;AAC7B;AAAA,MACF;AACA,UAAI,oBAAoB,KAAK,QAAQ;AAErC,aAAM,qBAAqB,KAAK,QAAQ,QAAQ;AAC9C,cAAM,OAAO,KAAK,QAAQ,MAAM;AAChC,YAAI,KAAK,MAAM,OAAO;AACpB,iBAAO,QAAQ,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC,OAAO,MAAM,MAAM;AACnD,kBAAM,KAAK,EAAE,MAAM;AACnB,kBAAM,UAAU,KAAK,MAAM,OAAO,EAAE;AACpC,kBAAM,YAAY,OAAO;AACzB,kBAAM,YAAY,OAAO;AACzB,kBAAM,WAAW,OAAO;AAExB,cAAE,MAAM,EAAE,SAAS,UAAU,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE;AAC1D,cAAE,MAAM,EAAE,SAAS,aAAa,EAAE;AAAA,cAChC,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE,KAAK,IAAI,KAAK,OAAO,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,QAAQ,CAAC,CAAC,EAAE,KAAK,SAAS,OAAO;AAAA,YAChI,EAAE,SAAS,EAAE;AACb,cAAE,MAAM,EAAE,SAAS,4BAA4B,EAAE,KAAK,KAAK,EAAE,SAAS,EAAE;AAExE,kBAAM,MAAM,CAAC,WAAW,QAAQ;AAChC,gBAAI,QAAQ,SAAO;AACjB,oBAAM,KAAK,EAAE,MAAM,EAAE,SAAS,qBAAqB;AACnD,kBAAI,QAAQ,QAAM;AAChB,kBAAE,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE;AAAA,cAChC,CAAC;AACD,gBAAE,MAAM,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE;AAAA,YAClC,CAAC;AAGD,iBAAK,MAAM,OAAO,EAAE;AAAA,UACtB,CAAC;AAGD,eAAK;AAGL,8BAAoB;AACpB,cAAG,CAAC,KAAK,YAAY;AACnB,gBAAI,KAAK,UAAU,KAAK,UAAW,CAAC,KAAK,QAAQ,UAAU,KAAK,UAAW;AACzE,mBAAK,UAAU,kBAAkB,KAAK,UAAU,KAAK,oBAAoB,4BAA4B,WAAW,uBAAuB;AAAA,YACzI,OAAO;AACL,mBAAK,UAAU,iBAAiB,KAAK,UAAU,KAAK,UAAU,WAAW,SAAS;AAAA,YACpF;AAAA,UACF;AAAA,QACF,WAAW,KAAK,MAAM,WAAW;AAC/B,gBAAM,KAAK,EAAE,MAAM,EAAE,SAAS,cAAc;AAC5C,YAAE,MAAM,EAAE,SAAS,qBAAqB,EAAE,SAAS,EAAE;AACrD,YAAE,MAAM,EAAE,SAAS,wBAAwB,EAAE;AAAA,YAC3C,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE,KAAK,IAAI,KAAK,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,QAAQ,CAAC,CAAC;AAAA,UAClG,EAAE,SAAS,EAAE;AACb,YAAE,MAAM,EAAE,SAAS,4BAA4B,EAAE,KAAK,SAAS,EAAE,SAAS,EAAE;AAE5E,cAAI,OAAO,KAAK,UAAU,KAAK,IAAI,MAAM,CAAC,EAAE,MAAM,IAAI;AACtD,cAAG,KAAK,MAAM;AAAK,iBAAK,MAAM;AAC9B,cAAG,KAAK,KAAK,SAAS,MAAM;AAAK,iBAAK,IAAI;AAC1C,iBAAO,KAAK,IAAI,OAAK;AACnB,gBAAI,KAAK,EAAE,MAAM,CAAC;AAClB,gBAAI,GAAG,SAAS,GAAG;AAAG,mBAAK,GAAG,MAAM,GAAG,EAAE;AACzC,mBAAO;AAAA,UACT,CAAC,EAAE,KAAK,IAAI;AAEZ,YAAE,MAAM,EAAE,KAAK,WAAW,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE;AAClI,eAAK,MAAM,OAAO,EAAE;AAAA,QACtB,WAAW,KAAK,MAAM,SAAS;AAC7B,gBAAM,KAAK,EAAE,MAAM,EAAE,SAAS,YAAY;AAC1C,YAAE,MAAM,EAAE,SAAS,qBAAqB,EAAE,KAAK,KAAK,EAAE,EAAE,SAAS,EAAE;AACnE,YAAE,MAAM,EAAE,SAAS,wBAAwB,EAAE;AAAA,YAC3C,EAAE,QAAQ,EAAE,SAAS,YAAY,EAAE,KAAK,IAAI,KAAK,KAAK,EAAE,EAAE,eAAe,CAAC,GAAG,EAAE,cAAc,QAAQ,CAAC,CAAC;AAAA,UACzG,EAAE,SAAS,EAAE;AACb,YAAE,MAAM,EAAE,SAAS,8BAA8B,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE;AAC5E,YAAE,MAAM,EAAE,SAAS,aAAa,EAAE,KAAK,WAAW,CAAC,EAAE,OAAO,GAAG,KAAK,OAAO,KAAK,IAAI,EAAE,SAAS,EAAE;AACjG,eAAK,MAAM,OAAO,EAAE;AAAA,QACtB,OAAO;AACL,kBAAQ,KAAK,iBAAiB,IAAI;AAAA,QACpC;AAAA,MACF;AAGA,UAAG,CAAC,KAAK,QAAQ,QAAQ;AACvB,eAAO,KAAK;AACZ;AAAA,MACF;AAEA,YAAM,SAAS,KAAK,cAAc,KAAK,IAAI,IAAI,KAAK;AACpD,UAAI,UAAU;AACd,UAAI,SAAS,IAAI;AACf,kBAAU,KAAK,IAAI,IAAI,SAAS,SAAS,KAAK,QAAQ,MAAM,CAAC;AAAA,MAC/D;AACA,UAAI,WAAW,MAAM,KAAK;AAAU,kBAAU;AAC9C,WAAK,mBAAmB,WAAW,OAAK;AAAE,aAAK,UAAU,IAAI;AAAA,MAAE,GAAG,OAAO;AAAA,IAC3E;AAAA,IAEA,WAAW;AACT,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB,SAAS,KAAK,cAAc,uBAAuB,GAAG;AAAA,UACtE,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IAEA,OAAO;AACL,WAAK,YAAY,KAAK,KAAK,uBAAuB;AAClD,WAAK,YAAY,KAAK,KAAK,+BAA+B;AAC1D,WAAK,WAAW,KAAK,KAAK,sBAAsB;AAChD,WAAK,SAAS,KAAK,KAAK,oBAAoB;AAC5C,WAAK,QAAQ,KAAK,KAAK,mBAAmB;AAE1C,WAAK,aAAa,KAAK,GAAG,KAAK,WAAW,GAAG,CAAC;AAE9C,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,UAAU;AAAE,aAAO,KAAK,GAAG,KAAK,QAAQ;AAAA,IAAE;AAAA,EACjD;;;AC9MA,MAAM,MAAM;AAOZ,MAAM,SAAS;AAAA,IACb,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,cAAc;AAAA,IAEd,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACnB;AAEA,MAAG,KAAK;AACN,WAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,aAAO,OAAO;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,MAAM,gBAAN,MAAoB;AAAA,IAClB,YAAY,IAAI;AACd,WAAK,KAAK;AACV,WAAK,SAAS,KAAK,GAAG,KAAK,8BAA8B;AACzD,WAAK,SAAS,KAAK,GAAG,KAAK,2BAA2B;AACtD,WAAK,SAAS,KAAK,GAAG,KAAK,6BAA6B;AACxD,WAAK,aAAa,KAAK,GAAG,KAAK,iCAAiC;AAChE,WAAK,YAAY,KAAK,GAAG,KAAK,gCAAgC;AAC9D,WAAK,MAAM,KAAK,OAAO,KAAK,KAAK;AAAA,IACnC;AAAA,IAEA,QAAQ;AACN,WAAK,IAAI,GAAG,QAAQ,OAAK;AAAE,aAAK,YAAY;AAAA,MAAE,CAAC;AAC/C,WAAK,IAAI,GAAG,SAAS,OAAK;AAAE,aAAK,YAAY;AAAA,MAAE,CAAC;AAChD,WAAK,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK,KAAK,CAAC;AAEzC,aAAO;AAAA,IACT;AAAA,IAEA,cAAc;AACZ,WAAK,OAAO,OAAO,EAAE,UAAU,OAAO,eAAe,QAAQ,eAAe,CAAC;AAC7E,WAAK,GAAG,SAAS;AAAA,IACnB;AAAA,IAEA,eAAe,UAAU,QAAQ,OAAO;AACtC,YAAM,UAAU,SAAS,KAAK,eAAe;AAC7C,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,cAAM,cAAc,QAAQ,2DAA2D;AACvF,YAAG,QAAQ,QAAQ;AACjB,kBAAQ,GAAG,sBAAsB,OAAK;AACpC,oBAAQ,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,WAAW,EAAE,OAAO,KAAK,CAAC,EAAE,QAAQ,CAAC;AAAA,UACjF,CAAC;AAAA,QACH,OAAO;AACL,kBAAQ,SAAS,KAAK,WAAW,EAAE,QAAQ,CAAC;AAAA,QAC9C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,WAAW,QAAQ,UAAU;AAC3B,UAAG,KAAK;AAAe;AACvB,WAAK,gBAAgB;AACrB,QAAE,QAAQ,EAAE,QAAQ,yCAAyC;AAE7D,YAAM,mBAAmB,CAAC;AAE1B,WAAK,OACF,OAAO,OAAO,kBAAkB,GAAG,eAAe,EAAE,QAAQ,EAC5D,KAAK,QAAM;AACV,WAAG,KAAK,iDAAiD;AACzD,yBAAiB,KAAK,KAAK,eAAe,KAAK,MAAM,CAAC;AACtD,yBAAiB,KAAK,KAAK,eAAe,KAAK,UAAU,CAAC;AAC1D,yBAAiB,KAAK,KAAK,eAAe,KAAK,SAAS,CAAC;AACzD,eAAO,GAAG,MAAM,OAAO,iBAAiB,EAAE,OAAO,OAAO,iBAAiB,GAAG,eAAe,EAAE,QAAQ;AAAA,MACvG,CAAC,EACA,KAAK,QAAM,QAAQ,IAAI,gBAAgB,CAAC,EACxC,KAAK,gBAAc;AAClB,aAAK,GAAG,KAAK,wBAAwB,EAAE,KAAK;AAE5C,eAAO,QAAQ,IAAI;AAAA,UACjB,KAAK,GAAG,aAAa,WAAW,IAAI,OAAO,IAAI,KAAK,KAAK,GAAG,QAAQ,KAAK,KAAK,GAAG,MAAM,IAAI,GAAI,EAAE,QAAQ;AAAA,UACzG,KAAK,GAAG,aAAa,WAAW,IAAI,OAAO,IAAI,KAAK,KAAK,GAAG,QAAQ,KAAK,KAAK,GAAG,MAAM,IAAI,IAAI,EAAE,QAAQ;AAAA,UACzG,KAAK,GAAG,aAAa,WAAW,IAAI,OAAO,IAAI,KAAK,KAAK,GAAG,QAAQ,KAAK,KAAK,GAAG,MAAM,IAAI,GAAI,EAAE,QAAQ;AAAA,UAGzG,KAAK,OACF,MAAM,OAAO,UAAU,EACvB,QAAQ,OAAO,cAAc,eAAe,EAAE,QAAQ,EACtD,KAAK,QAAM;AACV,iBAAK,GAAG,eAAe;AACvB,mBAAO,KAAK,GAAG,KAAK,yBAAyB,EAAE,MAAM,OAAO,UAAU,EAAE,OAAO,OAAO,cAAc,GAAG,eAAe,EAAE,QAAQ;AAAA,UAClI,CAAC;AAAA,QACL,CAAC;AAAA,MACH,CAAC;AAAA,IAIL;AAAA,IAEA,aAAa,IAAI;AACf,WAAK,GAAG,KAAK,wBAAwB,EAAE,KAAK;AAC5C,WAAK,OAAO,KAAK;AAEjB,WAAK,eAAe,KAAK,QAAQ,IAAI;AACrC,WAAK,eAAe,KAAK,YAAY,IAAI;AACzC,WAAK,eAAe,KAAK,WAAW,IAAI;AAExC,WAAK,OACF,OAAO,KAAK,GAAG,eAAe,EAAE,QAAQ,EACxC,KAAK,QAAM;AACV,WAAG,SAAS,aAAa,EAAE,KAAK,gGAAgG;AAChI,eAAO,GAAG,MAAM,GAAG,EAAE,OAAO,KAAK,GAAG,eAAe,EAAE,QAAQ;AAAA,MAC/D,CAAC;AAAA,IACL;AAAA,EACF;AAEA,MAAM,aAAN,MAAiB;AAAA,IACf,YAAY,KAAK,IAAI,OAAO,CAAC,GAAG;AAC9B,WAAK,MAAM;AACX,WAAK,KAAK;AACV,WAAK,OAAO;AACZ,WAAK,MAAM,IAAI,KAAK,aAAa,OAAO;AACxC,WAAK,iBAAiB;AACtB,WAAK,YAAY;AACjB,WAAK,sBAA4B,KAAK,SAAS,OAAM,MAAK,MAAM,KAAK,UAAU,GAAG,GAAG;AACrF,WAAK,KAAK,IAAI,cAAc,IAAI;AAAA,IAClC;AAAA,IAEA,OAAO;AACL,WAAK,GAAG,GAAG,SAAS,iBAAiB,QAAM;AACzC,aAAK,UAAU,EAAE,GAAG,aAAa,EAAE,KAAK,CAAC;AACzC,WAAG,yBAAyB;AAC5B,WAAG,eAAe;AAAA,MACpB,CAAC;AAED,WAAK,GAAG,GAAG,SAAS,0BAA0B,QAAM;AAClD,cAAM,IAAI,EAAE,GAAG,aAAa;AAC5B,cAAM,KAAK,EAAE,GAAG,MAAM;AAEtB,YAAG,GAAG,SAAS,IAAI,GAAG;AACpB,aAAG,eAAe;AAClB,cAAI,GAAG,SAAS,iBAAiB,GAAG;AAClC,cAAE,KAAK,EAAE,KAAK,eAAe,EAAE,KAAK,CAAC,GAAG,OAAO;AAC7C,mBAAK,UAAU,EAAE,EAAE,GAAG,KAAK;AAAA,YAC7B,CAAC;AACD,iBAAK,qBAAqB,EAAE,KAAK,EAAE,KAAK,eAAe,EAAE,MAAM,CAAC;AAAA,UAClE,OAAO;AACL,cAAE,KAAK,EAAE,KAAK,eAAe,EAAE,KAAK,CAAC,GAAG,OAAO;AAC7C,mBAAK,UAAU,EAAE,EAAE,GAAG,IAAI;AAAA,YAC5B,CAAC;AACD,iBAAK,qBAAqB,EAAE,KAAK,EAAE,KAAK,eAAe,EAAE,MAAM,CAAC;AAAA,UAClE;AACA,YAAE,YAAY,cAAc,GAAG,SAAS,WAAW,CAAC;AAAA,QACtD,OAAO;AAAA,QAEP;AACA,WAAG,yBAAyB;AAAA,MAC9B,CAAC;AAED,WAAK,GAAG,GAAG,SAAS,8BAA8B,QAAM;AACtD,WAAG,yBAAyB;AAC5B,WAAG,eAAe;AAClB,cAAM,IAAI,EAAE,GAAG,aAAa;AAC5B,cAAM,KAAK,EAAE,KAAK,wCAAwC;AAC1D,cAAM,KAAK,EAAE,KAAK,oDAAoD;AAEtE,YAAG,GAAG,SAAS,cAAc,KAAK,GAAG,SAAS,cAAc,GAAG;AAC7D,eAAK,gBAAgB,EAAE,KAAK,QAAQ,GAAG,GAAG,SAAS,cAAc,IAAI,KAAK,CAAC;AAAA,QAC7E,OAAO;AACL,eAAK,gBAAgB,EAAE,KAAK,QAAQ,GAAG,EAAE,KAAK,QAAQ,KAAK,KAAK,IAAI,EAAE;AAAA,QACxE;AAAA,MACF,CAAC;AAED,WAAK,KAAK,aAAa,EAAE,GAAG,6BAA6B,QAAM;AAAE,aAAK,GAAG,aAAa,EAAE;AAAA,MAAE,CAAC;AAC3F,WAAK,KAAK,aAAa,EAAE,GAAG,uBAAuB,QAAM;AAAE,aAAK,GAAG,aAAa,EAAE;AAAA,MAAE,CAAC;AACrF,WAAK,KAAK,aAAa,EAAE,GAAG,oBAAoB,QAAM;AACpD,aAAK,MAAM,KAAK,KAAK,oBAAoB,EAAE,KAAK,KAAK;AACrD,aAAK,QAAQ,KAAK,KAAK,oBAAoB,EAAE,KAAK,OAAO;AACzD,aAAK,UAAU,KAAK,KAAK,oBAAoB,EAAE,KAAK,SAAS;AAC7D,aAAK,QAAQ,KAAK,KAAK,oBAAoB,EAAE,KAAK,OAAO;AACzD,aAAK,UAAU,KAAK,KAAK,4BAA4B;AACrD,aAAK,gBAAgB,KAAK,KAAK,oBAAoB,EAAE,KAAK,eAAe;AACzE,aAAK,kBAAkB;AACvB,aAAK,mBAAmB;AAAA,MAC1B,CAAC;AAED,WAAK,GAAG,MAAM;AAEd,aAAO;AAAA,IACT;AAAA,IAEA,KAAK,UAAU;AAAE,aAAO,KAAK,GAAG,KAAK,QAAQ;AAAA,IAAE;AAAA,IAM/C,WAAW;AACT,WAAK,KAAK,aAAa,EAAE,WAAW,SAAS;AAAA,IAC/C;AAAA,IAEA,OAAO,KAAK,UAAU,MAAM,IAAI;AAC9B,UAAI,WAAW,GAAG;AAChB,eAAO,OAAO,QAAQ,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,MAAM,IAAI,EAAE,GAAG,cAAc,EAAE,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC;AAAA,MACzG,OAAO;AACL,eAAO,OAAO,QAAQ,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,MAAM,IAAI,EAAE,GAAG,YAAY,EAAE,GAAG,YAAY,EAAE,GAAG,YAAY,EAAE,GAAG,SAAS;AAAA,MACvH;AAAA,IACF;AAAA,IAQA,IAAI,WAAW;AACb,YAAM,WAAW,CAAC;AAClB,WAAK,KAAK,eAAe,EAAE,KAAK,CAAC,GAAG,OAAO;AACzC,cAAM,IAAI,EAAE,EAAE;AACd,YAAI,MAAM,GAAG,EAAE,KAAK,QAAQ;AAC5B,cAAM,MAAM,EAAE,KAAK,QAAQ;AAC3B,YAAG,QAAQ,QAAW;AAAE,iBAAO,IAAI;AAAA,QAAM;AACzC,iBAAS,OAAO,EAAE,KAAK,KAAK,EAAE,SAAS,iBAAiB;AAAA,MAC1D,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,UAAU,GAAG,SAAS,MAAM;AAC1B,YAAM,MAAM,EAAE,KAAK,KAAK;AACxB,YAAM,gBAAgB,WAAW;AACjC,UAAG,eAAe;AAChB,iBAAS,CAAC,IAAI,SAAS,iBAAiB;AAAA,MAC1C;AACA,UAAI,QAAQ;AACV,YAAI,YAAY,WAAW,EAAE,SAAS,iBAAiB;AAAA,MACzD,OAAO;AACL,YAAI,YAAY,iBAAiB,EAAE,SAAS,WAAW;AAAA,MACzD;AACA,QAAE,YAAY,cAAc,CAAC,IAAI,SAAS,iBAAiB,CAAC;AAE5D,UAAG,EAAE,KAAK,QAAQ,KAAK,kBAAkB;AACvC,YAAG,IAAI,SAAS,iBAAiB,GAAG;AAClC,eAAK,KAAK,uBAAuB,EAAE,YAAY,wBAAwB;AAAA,QACzE,OAAO;AACL,eAAK,KAAK,uBAAuB,EAAE,SAAS,wBAAwB;AAAA,QACtE;AAAA,MACF;AAEA,UAAG,EAAE,KAAK,QAAQ,KAAK,gBAAgB;AACrC,YAAG,IAAI,SAAS,iBAAiB,GAAG;AAClC,eAAK,KAAK,qBAAqB,EAAE,YAAY,wBAAwB;AAAA,QACvE,OAAO;AACL,eAAK,KAAK,qBAAqB,EAAE,SAAS,wBAAwB;AAAA,QACpE;AAAA,MACF;AAGA,UAAI,EAAE,kCAAkC,EAAE,SAAS,iBAAiB,KAAK,EAAE,oCAAoC,EAAE,SAAS,iBAAiB,GAAG;AAC5I,aAAK,KAAK,yBAAyB,EAAE,OAAO,GAAG;AAAA,MACjD,OAAO;AACL,aAAK,KAAK,yBAAyB,EAAE,QAAQ,GAAG;AAAA,MAClD;AAEA,WAAK,kBAAkB;AACvB,WAAK,mBAAmB;AACxB,UAAG,eAAe;AAAE,aAAK,qBAAqB,CAAC;AAAA,MAAE;AAAA,IACnD;AAAA,IAQA,qBAAqB;AACnB,WAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;AAChC,WAAK,oBAAoB;AAAA,IAC3B;AAAA,IAEA,MAAM,YAAY;AAChB,YAAM,YAAY,KAAK,IAAI;AAC3B,YAAM,SAAS;AAAA,QACb,KAAK,CAAC,GAAG,GAAG,CAAC;AAAA,QACb,OAAO,CAAC;AAAA,QACR,MAAM,CAAC;AAAA,MACT;AACA,YAAM,WAAW,KAAK;AAEtB,UAAI,IAAI;AACR,WAAK,IAAI,QAAQ,UAAQ;AACvB,cAAM,CAAC,YAAY,MAAM,aAAa,YAAY,QAAQ,OAAO,IAAI;AACrE,YAAG,CAAC,eAAe,EAAE,SAAS,cAAc,eAAe,CAAC,SAAS;AAAY;AACjF,YAAG,cAAc,CAAC,SAAS;AAAY;AACvC,YAAG,eAAe,CAAC,SAAS,eAAe,EAAE,SAAS,cAAc;AAAa;AAEjF,YAAG,CAAC,SAAS,QAAQ;AAAW;AAChC,eAAO,KAAK,KAAK,MAAM,aAAa,CAAC,GAAG,GAAG,CAAC;AAC5C,eAAO,KAAK,KAAK,MAAM,SAAS,eAAe;AAC/C,cAAM,aAAa,YAAY,OAAO,uBAAuB,KAAK,MAAM;AACxE,eAAO,MAAM,gBAAgB,CAAC,GAAG,GAAG,CAAC;AACrC,eAAO,MAAM,YAAY,eAAe;AACxC,eAAO,IAAI,eAAe;AAC1B,aAAK;AAAA,MACP,CAAC;AAGD,YAAM,KAAK,SAAS,QAAQ,QAAQ;AACpC,WAAK,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;AAAA,IAElC;AAAA,IAQA,MAAM,SAAS,QAAQ,UAAU;AAC/B,WAAK,kBAAkB,KAAK,KAAK,uBAAuB,GAAG,KAAK,OAAO;AACvE,WAAK,kBAAkB,KAAK,KAAK,qBAAqB,GAAG,KAAK,KAAK;AACnE,WAAK,kBAAkB,KAAK,KAAK,0BAA0B,GAAG,OAAO,GAAG;AAExE,YAAM,YAAY,CAAC,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,OAAO,IAAI,EAAE;AAC9D,UAAG,SAAS,gBAAgB;AAC1B,kBAAU,MAAM,KAAK,QAAQ;AAC7B,kBAAU,MAAM,KAAK,QAAQ;AAC7B,kBAAU,MAAM,KAAK,QAAQ;AAAA,MAC/B;AACA,UAAG,SAAS,cAAc;AACxB,kBAAU,MAAM,KAAK,MAAM;AAC3B,kBAAU,MAAM,KAAK,MAAM;AAC3B,kBAAU,MAAM,KAAK,MAAM;AAAA,MAC7B;AACA,WAAK,kBAAkB,KAAK,KAAK,yBAAyB,GAAG,SAAS;AACtE,WAAK,kBAAkB,KAAK,KAAK,mCAAmC,GAAG,CAAC,UAAU,KAAK,KAAK,UAAU,IAAI,UAAU,EAAE,CAAC;AAEvH,YAAM,cAAc,CAAC,UAAU,KAAK,UAAU,KAAK,KAAK,GAAG,UAAU,EAAE;AACvE,WAAK,kBAAkB,KAAK,KAAK,2BAA2B,GAAG,WAAW;AAE1E,YAAM,aAAa,KAAK,KAAK,iCAAiC,EAAE,KAAK,EAAE;AACvE,WAAK,OAAO,OAAO,OAAO,KAAK,gBAAgB,KAAK,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACvF,cAAM,KAAK,EAAE,MAAM,EAAE,SAAS,UAAU;AACxC,UAAE,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,iBAAiB,IAAI,EAAE,KAAK,GAAG,EAAE,SAAS,EAAE;AAC5E,UAAE,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,iBAAiB,GAAG,EAAE,SAAS,EAAE;AACjE,UAAE,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,iBAAiB,GAAG,EAAE,SAAS,EAAE;AACjE,UAAE,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,iBAAiB,GAAG,EAAE,SAAS,EAAE;AACjE,aAAK,kBAAkB,IAAI,KAAK;AAAA,MAClC,CAAC;AAED,YAAM,YAAY,KAAK,KAAK,gCAAgC,EAAE,KAAK,EAAE;AACrE,WAAK,OAAO,OAAO,MAAM,KAAK,gBAAgB,KAAK,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtF,cAAM,KAAK,EAAE,MAAM,EAAE,SAAS,SAAS;AACvC,UAAE,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,iBAAiB,IAAI,EAAE,KAAK,GAAG,EAAE,SAAS,EAAE;AAC5E,UAAE,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,iBAAiB,GAAG,EAAE,SAAS,EAAE;AACjE,UAAE,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,iBAAiB,GAAG,EAAE,SAAS,EAAE;AACjE,UAAE,MAAM,EAAE,SAAS,MAAM,EAAE,KAAK,iBAAiB,GAAG,EAAE,SAAS,EAAE;AACjE,aAAK,kBAAkB,IAAI,KAAK;AAAA,MAClC,CAAC;AAED,WAAK,eAAe;AACpB,WAAK,GAAG,WAAW,QAAQ,QAAQ;AAAA,IACrC;AAAA,IAEA,iBAAiB;AACf,YAAM,OAAO,KAAK,KAAK,8CAA8C,EAAE,WAAW;AAClF,YAAM,OAAO,KAAK,KAAK,kDAAkD,EAAE,WAAW;AACtF,YAAM,OAAO,KAAK,KAAK,8CAA8C,EAAE,WAAW;AAClF,WAAK,KAAK,iBAAiB,EAAE,IAAI,EAAE,UAAU,OAAO,CAAC;AACrD,UAAG,OAAO,GAAG;AACX,aAAK,KAAK,qBAAqB,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MAC3E;AACA,UAAG,OAAO,GAAG;AACX,aAAK,KAAK,qBAAqB,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MAC3E;AACA,UAAG,OAAO,GAAG;AACX,aAAK,KAAK,qBAAqB,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,KAAK,IAAI,MAAM,CAAC;AAAA,MAC3E;AAGA,YAAM,WAAW,KAAK,IAAI,MAAM,MAAM,KAAK,KAAK,sBAAsB,EAAE,IAAI,CAAC,GAAG,OAAO,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC;AAChH,WAAK,KAAK,sBAAsB,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,KAAK,QAAQ,MAAM,CAAC;AAAA,IAGhF;AAAA,IAEA,kBAAkB,KAAK,QAAQ,OAAO,IAAI;AACxC,YAAM,KAAK,IAAI,KAAK,qBAAqB;AACzC,YAAM,KAAK,IAAI,KAAK,qBAAqB;AACzC,YAAM,KAAK,IAAI,KAAK,qBAAqB;AACzC,SAAG,KAAK,cAAc,OAAO,EAAE,EAAE,KAAK,gEAAgE,KAAK,IAAI,OAAO,OAAO,EAAE,eAAe,KAAK,cAAc,+BAA+B,GAAG,KAAK,MAAM,KAAK,iBAAiB,GAAG,KAAK,MAAM,KAAK,cAAc;AACrQ,SAAG,KAAK,cAAc,OAAO,EAAE,EAAE,KAAK,gEAAgE,KAAK,IAAI,OAAO,OAAO,EAAE,eAAe,KAAK,cAAc,+BAA+B,GAAG,KAAK,MAAM,KAAK,iBAAiB,GAAG,KAAK,MAAM,KAAK,cAAc;AACrQ,SAAG,KAAK,cAAc,OAAO,EAAE,EAAE,KAAK,gEAAgE,KAAK,IAAI,OAAO,OAAO,EAAE,eAAe,KAAK,cAAc,+BAA+B,GAAG,KAAK,MAAM,KAAK,iBAAiB,GAAG,KAAK,MAAM,KAAK,cAAc;AAAA,IACvQ;AAAA,IAEA,oBAAoB;AAClB,UAAI,QAAQ;AACZ,UAAI,SAAS;AACb,WAAK,KAAK,eAAe,EAAE,KAAK,CAAC,GAAG,OAAO;AACzC,iBAAS;AACT,YAAI,EAAE,EAAE,EAAE,KAAK,KAAK,EAAE,SAAS,iBAAiB;AAAG,oBAAU;AAAA,MAC/D,CAAC;AACD,WAAK,KAAK,gCAAgC,EAAE,KAAK,KAAK;AACtD,WAAK,KAAK,iCAAiC,EAAE,KAAK,MAAM;AAAA,IAC1D;AAAA,IAEA,qBAAqB,GAAG;AACtB,YAAM,gBAAgB,EAAE,QAAQ,mCAAmC,EAAE,KAAK,wBAAwB;AAClG,UAAG,cAAc,QAAQ;AACvB,cAAM,UAAU,cAAc,KAAK,KAAK;AACxC,cAAM,QAAQ,cAAc,KAAK,EAAE,KAAK,mBAAmB,EAAE;AAC7D,cAAM,SAAS,cAAc,KAAK,EAAE,KAAK,gCAAgC,EAAE;AAE3E,YAAG,UAAU,GAAG;AACd,kBAAQ,YAAY,iCAAiC,EAAE,SAAS,WAAW;AAC3E,wBAAc,SAAS,YAAY;AAAA,QACrC,WAAW,SAAS,OAAO;AACzB,kBAAQ,YAAY,2BAA2B,EAAE,SAAS,iBAAiB;AAC3E,wBAAc,YAAY,YAAY;AAAA,QACxC,OAAO;AACL,kBAAQ,YAAY,2BAA2B,EAAE,SAAS,iBAAiB;AAC3E,wBAAc,YAAY,YAAY;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAAA,IAEA,aAAa,IAAI,OAAO,WAAW,KAAM;AACvC,aAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAI,EAAE,QAAQ,EAAE,SAAS,IAAI,GAAG;AAAA,QAC7D;AAAA,QACA,QAAQ;AAAA,QACR,MAAM,OAAK;AACT,aAAG,KAAK,KAAK,IAAI,OAAO,KAAK,KAAM,QAAQ,MAAO,CAAC,CAAC,CAAC;AAAA,QAEvD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,gBAAgB,KAAK,MAAM,IAAI;AAC7B,YAAM,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,CAAC,gBAAgB,YAAY,IAAI,CAAC,cAAc,cAAc;AACzF,WAAK,KAAK,6CAA6C,EAAE,YAAY,cAAc,EAAE,SAAS,YAAY;AAC1G,YAAM,SAAS,KAAK,KAAK,2CAA2C,OAAO;AAC3E,aAAO,KAAK,wCAAwC,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE;AACjF,aAAO,KAAK,oDAAoD,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE;AAC7F,WAAK,iBAAiB;AACtB,WAAK,YAAY;AAEjB,QAAE,6BAA6B,EAAE,KAAK,CAAC,GAAG,OAAO;AAC/C,cAAM,QAAQ,EAAE,EAAE;AAClB,YAAI,QAAQ,MAAM,KAAK,IAAI,EAAE,IAAI;AACjC,cAAM,KAAK,CAAC,GAAG,MAAM;AACnB,gBAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,qBAAqB,OAAO,GAAG,EAAE,CAAC,EAAE,KAAK,qBAAqB,OAAO,CAAC;AAChG,cAAG,MAAM,GAAG;AACV,mBAAO,MAAM,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC;AAAA,UACrF,OAAO;AACL,mBAAO,MAAM,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,OAAO;AAAA,UACvF;AAAA,QACF,CAAC;AAED,cAAM,QAAQ,UAAQ;AAAE,gBAAM,OAAO,IAAI;AAAA,QAAE,CAAC;AAAA,MAC9C,CAAC;AAAA,IACH;AAAA,EACF;;;AChdA,MAAM,iBAAN,MAAqB;AAAA,IACnB,YAAY,KAAK,IAAI,OAAO,CAAC,GAAG;AAC9B,WAAK,MAAM;AACX,WAAK,KAAK;AACV,WAAK,OAAO;AACZ,WAAK,MAAM,IAAI,KAAK,aAAa,OAAO;AAAA,IAC1C;AAAA,IAEA,OAAO;AACL,WAAK,YAAY,KAAK,KAAK,6BAA6B;AACxD,WAAK,UAAU,KAAK,KAAK,qBAAqB;AAC9C,WAAK,sBAAsB,KAAK,KAAK,gCAAgC;AACrE,WAAK,cAAc,KAAK,KAAK,sBAAsB;AACnD,WAAK,iBAAiB,KAAK,KAAK,6BAA6B;AAC7D,WAAK,mBAAmB,KAAK,KAAK,wBAAwB;AAC1D,WAAK,eAAe,KAAK,KAAK,2BAA2B;AACzD,WAAK,wBAAwB,KAAK,KAAK,mCAAmC;AAE1E,WAAK,YAAY,KAAK,KAAK,uBAAuB;AAClD,WAAK,eAAe,KAAK,KAAK,iCAAiC;AAC/D,WAAK,aAAa,KAAK,KAAK,+BAA+B;AAC3D,WAAK,uBAAuB,KAAK,KAAK,oCAAoC;AAC1E,WAAK,mBAAmB,KAAK,KAAK,gCAAgC;AAElE,WAAK,iBAAiB,KAAK,KAAK,8BAA8B;AAC9D,WAAK,qBAAqB,KAAK,KAAK,mCAAmC;AACvE,WAAK,0BAA0B,KAAK,KAAK,uCAAuC;AAChF,WAAK,iBAAiB,KAAK,KAAK,8BAA8B;AAC9D,WAAK,OAAO,KAAK,KAAK,kCAAkC;AACxD,WAAK,aAAa,KAAK,KAAK,KAAK,uCAAuC;AAExE,WAAK,UAAU,KAAK,GAAG,KAAK,cAAc;AAC1C,WAAK,SAAS,KAAK,GAAG,KAAK,WAAW;AAEtC,WAAK,wBAAwB,MAAM,QAAM;AACvC,WAAG,cAAc,KAAK;AACtB,kBAAU,MAAM,oBAAoB,KAAK,UAAU,EAAE,KAAK;AAC1D,aAAK,qBAAqB,IAAI,KAAK,UAAU,KAAK,OAAO,CAAC;AAC1D,eAAO;AAAA,MACT,CAAC;AAED,WAAK,eAAe,MAAM,QAAM;AAC9B,WAAG,cAAc,KAAK;AACtB,kBAAU,MAAM,oBAAoB,KAAK,YAAY,EAAE,KAAK;AAC5D,eAAO;AAAA,MACT,CAAC;AAED,WAAK,iBAAiB,MAAM,QAAM;AAChC,YAAI,QAAQ;AACZ,YAAI;AACF,kBAAQ,KAAK,MAAM,KAAK,qBAAqB,IAAI,CAAC;AAAA,QACpD,SAAQ,GAAN;AACA,kBAAQ,MAAM,CAAC;AACf,gBAAM,aAAa,EAAE,OAAO;AAC5B;AAAA,QACF;AACA,aAAK,UAAU;AACf,aAAK,eAAe;AACpB,aAAK,oBAAoB;AACzB,aAAK,WAAW,CAAC;AACjB,aAAK,YAAY;AACjB,kBAAU,MAAM,oBAAoB,KAAK,UAAU,EAAE,KAAK;AAAA,MAC5D,CAAC;AAED,WAAK,KAAK,oCAAoC,EAAE,MAAM,QAAM;AAC1D,aAAK,KAAK,sCAAsC,EAAE,SAAS,QAAQ;AACnE,aAAK,KAAK,qCAAqC,EAAE,YAAY,QAAQ;AAAA,MACvE,CAAC;AACD,WAAK,KAAK,mCAAmC,EAAE,MAAM,QAAM;AACzD,aAAK,YAAY,KAAK,WAAW,EAAE,KAAK,IAAI,GAAG,mDAAmD;AAAA,MACpG,CAAC;AACD,WAAK,KAAK,wCAAwC,EAAE,MAAM,QAAM;AAC9D,aAAK,YAAY,KAAK,eAAe,EAAE,KAAK,IAAI,GAAG,uDAAuD;AAAA,MAC5G,CAAC;AACD,WAAK,KAAK,8CAA8C,EAAE,MAAM,QAAM;AACpE,aAAK,YAAY,KAAK,eAAe,IAAI,EAAE,KAAK,IAAI,GAAG,0DAA0D;AAAA,MACnH,CAAC;AAED,WAAK,KAAK,oCAAoC,EAAE,MAAM,QAAM;AAC1D,WAAG,cAAc,KAAK;AACtB,aAAK,WAAW,GAAG,cAAc,QAAQ,IAAI;AAC7C,WAAG,eAAe;AAAA,MACpB,CAAC;AAED,WAAK,aAAa,GAAG,oBAAoB,QAAM;AAC7C,YAAG,KAAK,WAAW,QAAQ;AACzB,eAAK,aAAa,KAAK,iCAAiC,EAAE,KAAK,CAAC,GAAG,OAAO;AACxE,cAAE,EAAE,EAAE,YAAY,cAAc,EAAE,QAAQ,gBAAgB;AAAA,UAC5D,CAAC;AACD,eAAK,aAAa,KAAK,4BAA4B,EAAE,MAAM,EAAE,SAAS,cAAc,EAAE,QAAQ,cAAc;AAAA,QAC9G;AAAA,MACF,CAAC;AAED,WAAK,eAAe,MAAM,QAAM;AAC9B,WAAG,cAAc,KAAK;AACtB,aAAK,YAAY;AACjB,eAAO;AAAA,MACT,CAAC;AAED,WAAK,sBAAsB,MAAM,QAAM;AACrC,cAAM,IAAI,EAAE,GAAG,aAAa;AAC5B,cAAM,MAAM,EAAE,KAAK,GAAG;AACtB,aAAK,aAAa,YAAY,eAAe;AAC7C,UAAE,YAAY,cAAc;AAC5B,YAAI,YAAY,qBAAqB;AACrC,UAAE,KAAK;AACP,eAAO;AAAA,MACT,CAAC;AAED,WAAK,iBAAiB,GAAG,QAAQ,QAAM;AACrC,cAAM,kBAAkB,KAAK;AAC7B,YAAG,gBAAgB;AAAQ,eAAK,oBAAoB,eAAe;AAAA,MACrE,CAAC;AAED,WAAK,QAAQ,GAAG,gBAAgB,gBAAgB,QAAM;AAAE,aAAK,aAAa,GAAG,aAAa;AAAA,MAAE,CAAC;AAC7F,WAAK,QAAQ,GAAG,kBAAkB,gBAAgB,QAAM;AAAE,aAAK,eAAe,GAAG,aAAa;AAAA,MAAE,CAAC;AAEjG,WAAK,IAAI,OAAO,kBAAkB,QAAM,KAAK,cAAc,EAAE,CAAC;AAE9D,WAAK,eAAe;AACpB,WAAK,WAAW,CAAC;AACjB,WAAK,YAAY;AAEjB,aAAO;AAAA,IACT;AAAA,IAEA,eAAe,eAAe,OAAO,MAAM,CAAC,GAAG;AAC7C,UAAG,cAAc;AACf,YAAI,KAAK,8FAA8F;AACvG,YAAI,KAAK,2CAA2C;AACpD,YAAI,KAAK,8EAA8E;AAAA,MACzF,OAAO;AACL,YAAI,KAAK,wDAAwD;AACjE,YAAI,KAAK,EAAE;AACX,YAAI,KAAK,2BAA2B;AACpC,YAAI,KAAK,2BAA2B;AACpC,YAAI,KAAK,EAAE;AACX,YAAI,KAAK,EAAE;AACX,YAAI,KAAK,iBAAiB;AAC1B,YAAI,KAAK,uCAAuC;AAChD,YAAI,KAAK,QAAQ;AACjB,YAAI,KAAK,EAAE;AACX,YAAI,KAAK,gBAAgB;AACzB,YAAI,KAAK,oCAAoC;AAC7C,YAAI,KAAK,UAAU;AACnB,YAAI,KAAK,eAAe;AACxB,YAAI,KAAK,iCAAiC;AAC1C,YAAI,KAAK,aAAa;AACtB,YAAI,KAAK,oBAAoB;AAC7B,YAAI,KAAK,kBAAkB;AAC3B,YAAI,KAAK,iCAAiC;AAC1C,YAAI,KAAK,KAAK;AACd,YAAI,KAAK,iBAAiB;AAC1B,YAAI,KAAK,+BAA+B;AACxC,YAAI,KAAK,GAAG;AACZ,YAAI,KAAK,EAAE;AACX,YAAI,KAAK,cAAc;AAAA,MACzB;AACA,UAAI,KAAK,EAAE;AAEX,WAAK,QAAQ,MAAM,QAAQ,CAAC,MAAM,OAAO;AACvC,aAAK,QAAQ,CAAC,KAAK,OAAO;AACxB,cAAG,CAAC;AAAK;AACT,cAAI,OAAO;AACX,cAAG,MAAM,QAAQ,GAAG;AAAG,mBAAO,IAAI;AAElC,gBAAM,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,SAAS,KAAK,OAAO,MAAM,EAAE;AACpD,gBAAM,WAAW,KAAK,QAAQ,WAAW;AAEzC,cAAG,UAAU,QAAQ;AACnB,qBAAS,QAAQ,aAAW;AAC1B,kBAAI,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,2BAA2B,MAAM,MAAM,IAAI;AAC/E,kBAAI,KAAK,UAAU,WAAW;AAC9B,kBAAI,KAAK,aAAa,KAAK,MAAM,KAAK,IAAI;AAC1C,kBAAI,KAAK,UAAU;AACnB,kBAAI,KAAK,EAAE;AAAA,YACb,CAAC;AAAA,UACH,OAAO;AACL,gBAAI,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,2BAA2B,MAAM,MAAM,IAAI;AAC/E,gBAAI,KAAK,EAAE;AAAA,UACb;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IAEA,WAAW,eAAe,OAAO,MAAM,CAAC,GAAG;AAEzC,UAAI,UAAU,CAAC;AACf,WAAK,QAAQ,MAAM,QAAQ,CAAC,MAAM,OAAO;AACvC,aAAK,QAAQ,CAAC,KAAK,OAAO;AACxB,cAAG,CAAC;AAAK;AACT,cAAI,OAAO;AACX,cAAG,MAAM,QAAQ,GAAG;AAAG,mBAAO,IAAI;AAElC,kBAAQ,KAAK,CAAC,KAAK,OAAO,MAAM,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC;AAAA,QAC3D,CAAC;AAAA,MACH,CAAC;AACD,gBAAU,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,EAAE;AAG5C,UAAI,KAAK,sDAAsD;AAC/D,UAAI,KAAK,+CAA+C;AACxD,UAAI,KAAK,wDAAwD;AACjE,UAAI,KAAK,6BAA6B;AACtC,UAAI,KAAK,yCAAyC;AAGlD,UAAI,KAAK,EAAE;AACX,UAAI,KAAK,gBAAgB;AACzB,UAAI,KAAK,oCAAoC;AAC7C,UAAI,KAAK,gCAAgC;AACzC,UAAI,KAAK,gCAAgC;AACzC,UAAI,KAAK,mCAAmC;AAC5C,UAAI,KAAK,mCAAmC;AAC5C,UAAI,KAAK,mCAAmC;AAC5C,UAAI,KAAK,iCAAiC;AAC1C,UAAI,KAAK,oCAAoC;AAC7C,UAAI,KAAK,mCAAmC;AAC5C,UAAI,KAAK,EAAE;AAEX,UAAI,KAAK,EAAE;AACX,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,yBAAyB;AAClC,UAAI,KAAK,uBAAuB;AAChC,UAAI,KAAK,QAAQ;AACjB,UAAI,KAAK,kBAAkB;AAC3B,UAAI,KAAK,2BAA2B;AACpC,UAAI,KAAK,kCAAkC;AAC3C,UAAI,KAAK,4IAA4I;AACrJ,UAAI,KAAK,QAAQ;AAGjB,UAAI,KAAK,EAAE;AACX,UAAI,KAAK,sBAAsB;AAI/B,UAAI,KAAK,MAAM;AACf,UAAI,KAAK,kDAAkD;AAC3D,UAAI,KAAK,aAAa;AACtB,UAAI,KAAK,2BAA2B;AACpC,UAAI,KAAK,UAAU;AACnB,UAAI,KAAK,EAAE;AACX,UAAI,KAAK,EAAE;AACX,UAAI,KAAK,sBAAsB;AAC/B,UAAI,KAAK,0BAA0B;AACnC,UAAI,KAAK,UAAU;AACnB,UAAI,KAAK,aAAa;AACtB,UAAI,KAAK,qBAAqB;AAC9B,UAAI,KAAK,6BAA6B;AACtC,UAAI,KAAK,2BAA2B;AACpC,UAAI,KAAK,aAAa;AACtB,UAAI,KAAK,IAAI;AACb,UAAI,KAAK,gBAAgB;AACzB,UAAI,KAAK,oBAAoB;AAC7B,UAAI,KAAK,kBAAkB;AAC3B,UAAI,KAAK,qCAAqC;AAC9C,UAAI,KAAK,KAAK;AACd,UAAI,KAAK,IAAI;AACb,UAAI,KAAK,mBAAmB;AAE5B,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,qBAAqB;AAC9B,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,kCAAkC;AAC3C,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,wBAAwB;AACjC,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,oCAAoC;AAC7C,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,uBAAuB;AAChC,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,mCAAmC;AAC5C,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,uBAAuB;AAChC,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,iCAAiC;AAC1C,UAAI,KAAK,2BAA2B;AACpC,UAAI,KAAK,aAAa;AACtB,UAAI,KAAK,GAAG;AAGZ,UAAI,KAAK,EAAE;AACX,UAAI,KAAK,gBAAgB;AACzB,UAAI,KAAK,0BAA0B;AACnC,UAAI,KAAK,8BAA8B;AACvC,UAAI,KAAK,YAAY;AACrB,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,gEAAgE;AACzE,UAAI,KAAK,WAAW;AACpB,UAAI,KAAK,UAAU;AACnB,UAAI,KAAK,GAAG;AAIZ,UAAI,MAAM,CAAC,GAAG,GAAG,CAAC;AAClB,UAAI,QAAQ;AACZ,UAAI,OAAO,QAAQ;AACnB,UAAI,KAAK,EAAE;AACX,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,oBAAoB;AAC7B,UAAI,KAAK,qBAAqB;AAC9B,UAAI,KAAK,uBAAuB;AAChC,UAAI,KAAK,aAAa;AACtB,UAAI,KAAK,IAAI;AAIb,cAAQ,QAAQ,CAAC,CAAC,KAAK,MAAM,IAAI,EAAE,GAAG,MAAM;AAC1C,cAAM,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,SAAS,GAAG;AACnC,YAAI,KAAK,YAAY,SAAS,IAAI,MAAM,OAAO,IAAI,MAAM,OAAO,IAAI,MAAM,QAAQ,IAAE,KAAK,WAAW,MAAM,OAAO,MAAM;AACvH,YAAI,KAAK,sCAAsC,IAAE,KAAK,UAAU,MAAM,OAAO,KAAK,WAAW,kBAAkB,EAAE,GAAG;AAKpH,YAAG,IAAI,KAAK,GAAG;AACb,cAAI,KAAK,6BAA6B,IAAI,KAAK,IAAI;AACnD,cAAI,KAAK;AAAA,QACX,WAAU,IAAI,KAAK,GAAG;AAEpB,cAAG,IAAI,KAAK,GAAG;AACb,gBAAI,KAAK,oBAAoB,IAAI,KAAK,IAAI;AAC1C,gBAAI,KAAK;AAAA,UACX;AACA,cAAG,IAAI,KAAK,GAAG;AACb,gBAAI,KAAK,sBAAsB,IAAI,KAAK,IAAI;AAC5C,gBAAI,KAAK;AAAA,UACX;AAEA,cAAI,KAAK,6BAA6B,IAAI,IAAI,KAAK;AACnD,cAAI,KAAK;AAAA,QACX;AAGA,YAAG,IAAI,KAAK,GAAG;AACb,cAAI,KAAK,sBAAsB,IAAI,KAAK,IAAI;AAC5C,cAAI,KAAK;AAAA,QACX,WAAU,IAAI,KAAK,GAAG;AACpB,cAAI,KAAK,uBAAuB,IAAI,IAAI,KAAK;AAC7C,cAAI,KAAK;AAAA,QACX;AAGA,YAAG,IAAI,KAAK,GAAG;AACb,cAAI,KAAK,oBAAoB,IAAI,KAAK,IAAI;AAC1C,cAAI,KAAK;AAAA,QACX,WAAU,IAAI,KAAK,GAAG;AACpB,cAAI,KAAK,sBAAsB,IAAI,IAAI,KAAK;AAC5C,cAAI,KAAK;AAAA,QACX;AAGA,YAAI,KAAK,gBAAgB,OAAO,KAAK;AACrC,YAAI,KAAK,wBAAwB,IAAE,KAAK,QAAQ;AAAA,MAClD,CAAC;AAED,UAAI,KAAK,iBAAiB;AAC1B,UAAI,KAAK,6EAA6E;AACtF,UAAI,KAAK,WAAW;AACpB,UAAI,KAAK,UAAU;AACnB,aAAO;AAAA,IACT;AAAA,IAEA,IAAI,cAAc;AAChB,aAAO,KAAK,UAAU,KAAK,kBAAkB,EAAE,KAAK,MAAM;AAAA,IAC5D;AAAA,IAEA,IAAI,QAAQ;AACV,aAAO,KAAK,QAAQ,KAAK,aAAa;AAAA,IACxC;AAAA,IAEA,IAAI,eAAe;AACjB,aAAO,KAAK,QAAQ,KAAK,0BAA0B;AAAA,IACrD;AAAA,IAEA,IAAI,aAAa;AACf,aAAO,KAAK,QAAQ,KAAK,iCAAiC;AAAA,IAC5D;AAAA,IAEA,cAAc;AACZ,WAAK,mBAAmB,KAAK,QAAQ;AACrC,WAAK,eAAe,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,gBAAgB,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,SAAS,UAAU;AAC1G,WAAK,WAAW,IAAI,KAAK,UAAU,KAAK,OAAO,CAAC;AAChD,WAAK,KAAK,OAAO;AAAA,IACnB;AAAA,IAEA,iBAAiB;AACf,WAAK,mBAAmB,KAAK,iBAAiB;AAC9C,WAAK,eAAe,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,gBAAgB,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,SAAS,aAAa;AAAA,IAC/G;AAAA,IAEA,KAAK,KAAK;AACR,aAAO,KAAK,QAAQ,KAAK,cAAc,MAAM;AAAA,IAC/C;AAAA,IAEA,YAAY,QAAQ,WAAW;AAC7B,WAAK,UAAU,KAAK,iBAAiB,EAAE,KAAK;AAC5C,WAAK,UAAU,KAAK,mBAAmB,SAAS,EAAE,KAAK;AAAA,IACzD;AAAA,IAEA,QAAQ,OAAO;AACb,UAAI,MAAM;AACV,WAAK,QAAQ,MAAM,QAAQ,CAAC,MAAM,OAAO;AACvC,YAAG;AAAK;AACR,aAAK,QAAQ,CAAC,KAAK,OAAO;AACxB,cAAI,OAAO;AACX,cAAG,MAAM,QAAQ,GAAG;AAAG,mBAAO,IAAI;AAClC,cAAG,QAAQ;AAAO,mBAAO,MAAM,CAAC,IAAI,EAAE;AAAA,QACxC,CAAC;AAAA,MACH,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAcA,cAAc,IAAI;AAChB,cAAQ,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,EAAE;AACxD,UAAG,GAAG,OAAO,WAAW;AAAY;AAEpC,UAAG,GAAG,OAAO,UAAU,SAAS,cAAc,GAAG;AAC/C,YAAI,GAAG,QAAQ,SAAS;AACtB,gBAAM,MAAM,EAAE,GAAG,MAAM;AACvB,gBAAM,OAAO,IAAI,QAAQ,aAAa;AACtC,gBAAM,cAAc,IAAI,IAAI,EAAE,MAAM,KAAK,EAAE,OAAO,OAAK,CAAC;AACxD,gBAAM,cAAc,KAAK,KAAK,eAAe;AAC7C,cAAG,YAAY,QAAQ;AACrB,iBAAK,QAAQ,WAAW,eAAe;AAAA,UACzC,OAAO;AACL,mBAAO,KAAK,QAAQ,WAAW;AAAA,UACjC;AACA,eAAK,eAAe;AACpB,aAAG,OAAO,KAAK;AACf,eAAK,WAAW,MAAM,WAAW;AACjC,eAAK,mBAAmB,WAAW;AACnC,aAAG,eAAe;AAClB,iBAAO;AAAA,QACT;AACA;AAAA,MACF;AAEA,UAAG,GAAG,WAAW,MAAM,GAAG,WAAW,IAAI;AACvC,cAAM,MAAM,GAAG,UAAU;AACzB,cAAM,kBAAkB,KAAK;AAC7B,YAAG,gBAAgB,QAAQ;AACzB,gBAAM,qBAAqB,KAAK,aAAa,KAAK,iCAAiC;AACnF,cAAG,CAAC,mBAAmB;AAAQ;AAC/B,cAAG,GAAG,WAAW,IAAI;AACnB,kBAAM,OAAO,mBAAmB,QAAQ,UAAU,EAAE,MAAM;AAC1D,gBAAG,KAAK,QAAQ;AACd,iCAAmB,MAAM;AACzB,mBAAK,MAAM;AACX,mBAAK,IAAI,CAAC,EAAE,eAAe,EAAC,OAAO,WAAW,QAAQ,UAAS,CAAC;AAAA,YAClE;AACA,eAAG,eAAe;AAClB,mBAAO;AAAA,UACT,WAAU,GAAG,WAAW,IAAI;AAC1B,kBAAM,OAAO,mBAAmB,QAAQ,UAAU,EAAE,MAAM;AAC1D,gBAAG,KAAK,QAAQ;AACd,iCAAmB,MAAM;AACzB,mBAAK,MAAM;AACX,mBAAK,IAAI,CAAC,EAAE,eAAe,EAAC,OAAO,WAAW,QAAQ,UAAS,CAAC;AAAA,YAClE;AACA,eAAG,eAAe;AAClB,mBAAO;AAAA,UACT;AACA;AAAA,QACF,WAAW,GAAG,OAAO,WAAW,SAAS;AACvC;AAAA,QACF,OAAO;AACL,gBAAM,KAAK,KAAK;AAChB,cAAG,GAAG,QAAQ;AACZ,kBAAM,KAAK,GAAG,KAAK,MAAM;AACzB,kBAAM,OAAO,KAAK,YAAY,SAAS,MAAM;AAC7C,gBAAG,QAAQ,MAAM;AAAE,mBAAK,KAAK,IAAI,EAAE,MAAM;AAAA,YAAE;AAAA,UAC7C,OAAO;AACL,iBAAK,KAAK,KAAK,YAAY,SAAS,QAAQ,IAAI,EAAE,MAAM;AAAA,UAC1D;AAAA,QACF;AACA,WAAG,eAAe;AAClB,eAAO;AAAA,MACT,WAAW,GAAG,QAAQ,UAAU;AAC9B,cAAM,KAAK,KAAK;AAChB,YAAG,GAAG,UAAU;AACd,cAAG,MAAM;AAAG,iBAAK,WAAW,CAAC;AAAA,QAC/B,OAAO;AACL,cAAG,KAAK,GAAG;AAAE,iBAAK,WAAW,KAAK,CAAC;AAAA,UAAE;AAAA,QACvC;AACA,WAAG,eAAe;AAClB,eAAO;AAAA,MACT,WAAW,GAAG,QAAQ,YAAY;AAChC,cAAM,KAAK,KAAK;AAChB,YAAG,GAAG,UAAU;AACd,gBAAM,KAAK,KAAK,QAAQ,MAAM,SAAS;AACvC,cAAG,MAAM;AAAI,iBAAK,WAAW,EAAE;AAAA,QACjC,OAAO;AACL,cAAG,KAAK,GAAG;AAAE,iBAAK,WAAW,KAAK,CAAC;AAAA,UAAE;AAAA,QACvC;AACA,WAAG,eAAe;AAClB,eAAO;AAAA,MACT,WAAW,GAAG,OAAO,WAAW,YAAY,GAAG,QAAQ,YAAY,GAAG,QAAQ,cAAc;AAC1F,YAAG,GAAG,UAAU;AACd,eAAK,MAAM,KAAK,CAAC,GAAG,SAAS;AAC3B,iBAAK,YAAY,EAAE,IAAI,CAAC;AAAA,UAC1B,CAAC;AAAA,QACH,OAAO;AACL,gBAAM,OAAO,KAAK;AAClB,cAAG,KAAK;AAAQ,iBAAK,YAAY,IAAI;AAAA,QACvC;AACA,WAAG,eAAe;AAAA,MACpB,WAAW,GAAG,QAAQ,UAAU,GAAG,OAAO,WAAW,WAAW,KAAK,aAAa,QAAQ;AACxF,cAAM,oBAAoB,KAAK;AAC/B,YAAG,CAAC,kBAAkB,KAAK,eAAe;AAAG;AAC7C,cAAM,QAAQ,kBAAkB,KAAK,kCAAkC;AACvE,cAAM,MAAM,EAAE,SAAS,EAAE,KAAK,QAAQ,MAAM,EAAE,SAAS,0DAA0D;AACjH,cAAM,WAAW,KAAK,QAAQ,WAAW,kBAAkB,KAAK,eAAe;AAC/E,cAAM,YAAY,QAAQ;AAC1B,YAAI,KAAK,CAAAC,QAAM;AACb,cAAG,CAAC,kBAAkB,SAAS,cAAc;AAAG,8BAAkB,MAAM;AACxE,eAAK,YAAY,kBAAkB,KAAK,eAAe,IAAI,cAAc,gBAAgB;AACzF,cAAI,OAAO;AACX,gBAAM,SAAS,QAAQ;AAAA,QACzB,CAAC;AACD,aAAK,YAAY,cAAc;AAC/B,YAAI,SAAS,KAAK;AAClB,YAAI,IAAI,WAAW,SAAS,KAAK,GAAG,IAAI,EAAE,EAAE,MAAM;AAClD,WAAG,eAAe;AAClB,eAAO;AAAA,MACT,WAAW,GAAG,QAAQ,SAAS;AAC7B,cAAM,oBAAoB,KAAK;AAC/B,cAAM,kBAAkB,KAAK;AAC7B,YAAG,kBAAkB,UAAU,CAAC,gBAAgB,QAAQ;AACtD,eAAK,kBAAkB,iBAAiB;AACxC,iBAAO;AAAA,QACT,WAAW,gBAAgB,QAAQ;AACjC,gBAAM,qBAAqB,KAAK,aAAa,KAAK,iCAAiC;AACnF,cAAG,mBAAmB,QAAQ;AAC5B,iBAAK,UAAU,iBAAiB,mBAAmB,KAAK,OAAO,CAAC;AAChE,iBAAK,oBAAoB,eAAe;AAAA,UAC1C,OAAO;AACL,oBAAQ,IAAI,0CAA0C;AACtD,iBAAK,oBAAoB,eAAe;AAAA,UAC1C;AAAA,QACF;AAAA,MACF,WAAU,GAAG,KAAK,MAAM,cAAc,KAAK,GAAG,OAAO,WAAW,SAAS;AACvE,YAAG,GAAG,WAAW,GAAG;AAAS;AAC7B,YAAI,MAAM,SAAS,GAAG,KAAK,MAAM,gBAAgB,EAAE,EAAE;AACrD,YAAG,OAAO;AAAG,gBAAM;AAEnB,cAAM,kBAAkB,KAAK;AAC7B,YAAG,gBAAgB,QAAQ;AAAA,QAE3B,OAAO;AACL,cAAG,GAAG,UAAU;AACd,iBAAK,WAAW,MAAM,CAAC;AAAA,UACzB,WAAW,OAAO,GAAG;AACnB,iBAAK,KAAK,MAAM,CAAC,EAAE,MAAM;AAAA,UAC3B;AAAA,QACF;AACA,WAAG,eAAe;AAClB,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,eAAe,MAAM;AACnB,UAAI,QAAQ;AACZ,WAAK,QAAQ,MAAM,QAAQ,CAAC,MAAM,OAAO;AACvC,aAAK,QAAQ,CAAC,OAAO,OAAO;AAC1B,cAAG,MAAM,QAAQ,KAAK,GAAG;AACvB,gBAAG,MAAM,MAAM;AAAM,qBAAO,QAAQ,CAAC,IAAI,EAAE;AAAA,UAC7C,OAAO;AACL,gBAAG,SAAS;AAAM,qBAAO,QAAQ,CAAC,IAAI,EAAE;AAAA,UAC1C;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,UAAU,MAAM,MAAM;AACpB,YAAM,OAAO,KAAK;AAClB,YAAM,OAAO,KAAK,KAAK,MAAM;AAC7B,YAAM,OAAO,KAAK,QAAQ,MAAM,KAAK;AAErC,YAAM,aAAa,KAAK,eAAe,IAAI;AAC3C,UAAG,YAAY;AACb,YAAG,WAAW,MAAM,KAAK,aAAa;AACpC,eAAK,YAAY,KAAK,KAAK,WAAW,EAAE,CAAC;AAAA,QAC3C,OAAO;AACL,eAAK,QAAQ,MAAM,WAAW,IAAI,WAAW,MAAM;AAAA,QACrD;AAAA,MACF;AAEA,UAAG,KAAK;AAAO,aAAK,YAAY,IAAI;AAEpC,WAAK,QAAQ;AACb,WAAK,WAAW,MAAM,IAAI;AAC1B,WAAK,mBAAmB,IAAI;AAC5B,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,YAAY,MAAM;AAChB,YAAM,OAAO,KAAK,KAAK,eAAe;AACtC,YAAM,OAAO,KAAK,QAAQ,MAAM,KAAK;AACrC,YAAM,OAAO,KAAK,KAAK,MAAM;AAC7B,WAAK,QAAQ;AACb,WAAK,WAAW,MAAM,IAAI;AAC1B,WAAK,mBAAmB,IAAI;AAC5B,WAAK,eAAe;AAAA,IACtB;AAAA,IAEA,kBAAkB,MAAM;AACtB,WAAK,YAAY,iBAAiB;AAClC,WAAK,SAAS,qBAAqB;AACnC,WAAK,aAAa,QAAQ,kBAAkB;AAC5C,WAAK,iBAAiB,MAAM,EAAE,OAAO;AAAA,IACvC;AAAA,IAEA,oBAAoB,MAAM;AACxB,WAAK,iBAAiB,IAAI,CAAC,EAAE,KAAK;AAClC,WAAK,aAAa,KAAK,iCAAiC,EAAE,MAAM;AAChE,WAAK,YAAY,qBAAqB;AACtC,UAAG,CAAC,KAAK,SAAS,cAAc;AAAG,aAAK,MAAM;AAC9C,WAAK,YAAY,KAAK,KAAK,eAAe,IAAI,cAAc,gBAAgB;AAAA,IAC9E;AAAA,IAEA,aAAa,MAAM;AACjB,cAAQ,IAAI,YAAY,IAAI;AAC5B,WAAK,YAAY,EAAE,IAAI,EAAE,KAAK,eAAe,IAAI,cAAc,gBAAgB;AAAA,IACjF;AAAA,IAEA,eAAe,GAAG;AAChB,UAAG,CAAC,KAAK,WAAW;AAAQ,aAAK,YAAY;AAE7C,cAAQ,IAAI,cAAc,CAAC;AAAA,IAC7B;AAAA,IAEA,mBAAmB,MAAM;AACvB,YAAM,KAAK,KAAK,aAAa,KAAK,gBAAgB,QAAQ;AAC1D,YAAM,KAAK,KAAK,QAAQ,IAAI;AAC5B,UAAG,IAAI;AACL,WAAG,SAAS,gBAAgB;AAC5B,WAAG,KAAK,8BAA8B,EAAE,KAAK,GAAG,GAAG,KAAK,qBAAqB,GAAG,KAAK,GAAG;AAAA,MAC1F,OAAO;AACL,WAAG,YAAY,gBAAgB;AAC/B,WAAG,KAAK,8BAA8B,EAAE,KAAK,EAAE;AAAA,MACjD;AAEA,YAAM,WAAW,KAAK,QAAQ,WAAW;AACzC,UAAG,UAAU;AACX,cAAM,gBAAgB,GAAG,KAAK,4BAA4B,EAAE,KAAK,EAAE;AACnE,iBAAS,QAAQ,QAAM;AACrB,gBAAM,OAAO,EAAE,QAAQ,EAAE,SAAS,oBAAoB,EAAE,KAAK,EAAE;AAC/D,wBAAc,OAAO,IAAI;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,YAAY,SAAS,WAAW,gBAAgB;AAC9C,UAAI,UAAU,SAAS,cAAc,GAAG;AACxC,cAAQ,aAAa,QAAQ,mCAAmC,mBAAmB,OAAO,CAAC;AAC3F,cAAQ,aAAa,YAAY,QAAQ;AACzC,cAAQ,MAAM,UAAU;AACxB,eAAS,KAAK,YAAY,OAAO;AACjC,cAAQ,MAAM;AACd,eAAS,KAAK,YAAY,OAAO;AAAA,IACnC;AAAA,IAEA,sBAAsB;AACpB,aAAO,QAAQ,KAAK,MAAM,EAAE,QAAQ,CAAC,CAAC,MAAM,IAAI,MAAM;AACpD,aAAK,mBAAmB,IAAI;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IAEA,iBAAiB;AACf,YAAM,MAAM,EAAE,uCAAuC;AACrD,aAAO,QAAQ,KAAK,MAAM,EAAE,QAAQ,CAAC,CAAC,MAAM,IAAI,MAAM;AACpD,cAAM,SAAS,IAAI,IAAI,CAAC,EAAE,QAAQ,UAAU,IAAI;AAChD,cAAM,QAAQ,EAAE,OAAO,SAAS,EAAE;AAClC,cAAM,KAAK,cAAc,IAAI,EAAE,KAAK,kBAAkB,KAAK,EAAE;AAC7D,cAAM,KAAK,sBAAsB,EAAE,KAAK,IAAI,EAAE,KAAK,SAAS,IAAI;AAChE,cAAM,KAAK,6BAA6B,EAAE,KAAK,KAAK,EAAE,EAAE,KAAK,SAAS,KAAK,EAAE;AAC7E,cAAM,CAAC,GAAE,GAAE,CAAC,IAAI,KAAK,SAAS,KAAK,EAAE;AACrC,cAAM,KAAK,uBAAuB,EAAE,KAAK,SAAS,GAAG;AAAA,EAAW;AAAA,EAAU;AAAA,kBAA0B,EAAE,WAAW,KAAK,EAAE,KAAK,OAAO,KAAK,EAAE;AAE3I,aAAK,aAAa,OAAO,KAAK;AAC9B,aAAK,mBAAmB,IAAI;AAAA,MAC9B,CAAC;AAAA,IACH;AAAA,IAEA,SAAS,MAAM;AACb,YAAM,MAAM,CAAC;AACb,YAAM,SAAS;AACf,YAAM,WAAW;AACjB,YAAM,YAAY,SAAS;AAC3B,UAAI,KAAK,KAAK,MAAM,OAAO,SAAS,IAAI;AACxC,UAAI,KAAK,KAAK,MAAO,OAAO,YAAa,QAAQ,IAAI;AACrD,UAAI,KAAK,KAAK,MAAQ,OAAO,YAAa,QAAS,IAAI;AACvD,aAAO;AAAA,IACT;AAAA,IAEA,WAAW,MAAM;AACf,WAAK,UAAU,KAAK,kBAAkB,EAAE,YAAY,QAAQ;AAC5D,WAAK,UAAU,KAAK,uBAAuB,OAAO,EAAE,SAAS,QAAQ;AAErE,WAAK,kBAAkB;AAAA,IACzB;AAAA,IAEA,oBAAoB;AAClB,YAAM,KAAK,KAAK;AAChB,YAAM,OAAO,KAAK,QAAQ,MAAM;AAChC,WAAK,oBAAoB,KAAK,KAAK,CAAC;AAEpC,WAAK,QAAQ,CAAC,KAAK,MAAM;AACvB,YAAI,OAAO;AACX,YAAG,MAAM,QAAQ,GAAG,GAAG;AACrB,iBAAO,IAAI;AAAA,QACb,OAAO;AACL,iBAAO;AACP,gBAAM,CAAC;AAAA,QACT;AAEA,cAAM,OAAO,KAAK,KAAK,CAAC;AACxB,aAAK,WAAW,MAAM,IAAI;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,IAEA,WAAW,MAAM,MAAM;AACrB,YAAM,YAAY,KAAK,KAAK,sBAAsB;AAClD,YAAM,YAAY,KAAK,KAAK,6BAA6B;AACzD,YAAM,WAAW,KAAK,KAAK,uBAAuB;AAClD,YAAM,gBAAgB,KAAK,KAAK,4BAA4B;AAC5D,WAAK,YAAY,YAAY,EAAE,YAAY,aAAa;AACxD,WAAK,WAAW,eAAe;AAC/B,oBAAc,KAAK,EAAE;AAErB,UAAG,CAAC,MAAM;AACR,aAAK,SAAS,YAAY;AAC1B,kBAAU,KAAK,YAAY,EAAE,KAAK,SAAS,EAAE;AAC7C,kBAAU,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE;AACnC,iBAAS,WAAW,OAAO,EAAE,WAAW,KAAK;AAC7C;AAAA,MACF;AAEA,YAAM,QAAQ,KAAK,OAAO;AAC1B,UAAG,OAAO;AACR,aAAK,KAAK,iBAAiB,IAAI;AAC/B,kBAAU,KAAK,IAAI,EAAE,KAAK,SAAS,IAAI;AACvC,kBAAU,KAAK,MAAM,EAAE,EAAE,KAAK,SAAS,MAAM,EAAE;AAC/C,cAAM,CAAC,GAAE,GAAE,CAAC,IAAI,KAAK,SAAS,MAAM,EAAE;AACtC,iBAAS,WAAW,KAAK,EAAE,KAAK,OAAO,MAAM,EAAE,EAAE,KAAK,SAAS,GAAG;AAAA,EAAW;AAAA,EAAU;AAAA,kBAA0B;AAEjH,cAAM,WAAW,KAAK,QAAQ,WAAW;AACzC,YAAG,UAAU;AACX,mBAAS,QAAQ,QAAM;AACrB,kBAAM,OAAO,EAAE,QAAQ,EAAE,SAAS,oBAAoB,EAAE,KAAK,EAAE;AAC/D,0BAAc,OAAO,IAAI;AAAA,UAC3B,CAAC;AAAA,QACH;AAAA,MACF,OAAO;AACL,aAAK,SAAS,aAAa;AAC3B,kBAAU,KAAK,IAAI,EAAE,KAAK,SAAS,IAAI;AACvC,cAAM,OAAO;AACb,kBAAU,KAAK,IAAI,EAAE,KAAK,SAAS,IAAI;AACvC,iBAAS,WAAW,OAAO,EAAE,WAAW,KAAK;AAC7C,gBAAQ,MAAM,2BAA2B,IAAI;AAAA,MAC/C;AAAA,IACF;AAAA,IAEA,KAAK,UAAU;AAAE,aAAO,KAAK,GAAG,KAAK,QAAQ;AAAA,IAAE;AAAA,EACjD;AA7WE,gBAhaI,gBAgaG,YAAW;AAAA,IAChB,WAAW,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACtB,KAAK,CAAC,GAAG,MAAM,GAAG,CAAC;AAAA,IACnB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IAChB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IAChB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IAChB,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI;AAAA,IACnB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IAChB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IAChB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,EAClB;;;ACxaF,MAAM,cAAN,MAAkB;AAAA,IAChB,YAAY,KAAK,IAAI,QAAQ,OAAO,CAAC,GAAG;AACtC,WAAK,OAAO,OAAO,OAAO,CAAC,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI;AAChD,WAAK,MAAM;AACX,WAAK,KAAK;AACV,WAAK,SAAS;AAAA,IAChB;AAAA,IAEA,OAAO;AACL,UAAI,KAAK,KAAK,MAAM,MAAM;AAAA,MAE1B,WAAW,KAAK,KAAK,MAAM,YAAY;AACrC,aAAK,GAAG,KAAK,aAAa,EAAE,KAAK,CAAC,GAAG,OAAO;AAC1C,gBAAM,SAAS,EAAE,EAAE;AACnB,gBAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,gBAAM,MAAM,UAAU,QAAQ,YAAY,MAAM;AAChD,gBAAM,YAAY,OAAO,KAAK,eAAe;AAC7C,gBAAM,SAAS,OAAO,KAAK,kBAAkB;AAC7C,gBAAM,gBAAgB,OAAO,KAAK,yBAAyB;AAE3D,oBAAU,YAAY,8BAA8B,EAAE,SAAS,kCAAkC;AACjG,eAAK,OAAO,GAAG,SAAO;AACpB,sBAAU,OAAO;AACjB,kBAAM,QAAQ,KAAK,MAAM,OAAO,CAAAC,OAAK,IAAI,MAAM,SAASA,EAAC,CAAC;AAC1D,kBAAM,OAAO,MAAM,SAAS,KAAK,MAAM,SAAS;AAChD,kBAAM,WAAW,IAAI,KAAK,KAAK,QAAQ,IAAI,IAAI,KAAK;AACpD,kBAAM,gBAAgB,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,KAAK;AACvD,gBAAI,UAAU,GAAG,KAAK,QAAQ,CAAC;AAC/B,gBAAG,WAAW,UAAU,MAAM,SAAS,KAAK,MAAM;AAAQ,wBAAU;AAEpE,mBAAO,KAAK,MAAM,MAAM;AACxB,0BAAc,KAAK,IAAI,UAAU;AAEjC,gBAAI,MAAM,UAAU,KAAK,MAAM,QAAQ;AACrC,qBAAO,SAAS,cAAc;AAC9B,qBAAO,KAAK,0BAA0B,mDAAyC;AAAA,YACjF,WAAW,WAAW,GAAG;AACvB,oBAAM,kBAAkB,WAAY,KAAK,KAAK,KAAK;AACnD,qBAAO,SAAS,QAAQ,kBAAkB,SAAS,iBAAiB;AACpE,qBAAO,KAAK,0BAA0B,8BAA8B,KAAK,gBAAgB,WAAY,GAAI,mCAAyB;AAAA,YACpI,OAAO;AACL,oBAAM,kBAAkB,gBAAiB,KAAK,KAAK,KAAK;AACxD,qBAAO,SAAS,QAAQ,kBAAkB,WAAW,mBAAmB;AACxE,qBAAO,KAAK,0BAA0B,WAAW,KAAK,gBAAgB,gBAAiB,GAAI,mCAAyB;AAAA,YACtH;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB,SAAS;AACvB,UAAI,MAAM,CAAC;AAEX,UAAI,KAAK,KAAK,MAAM,WAAW,QAAQ,IAAI,CAAC;AAC5C,iBAAW,IAAI,IAAI,SAAS,MAAM,QAAQ;AAE1C,UAAI,KAAK,KAAK,MAAM,UAAU,KAAK,CAAC;AACpC,iBAAW,IAAI,IAAI,SAAS,KAAK;AAEjC,UAAI,KAAK,KAAK,MAAM,UAAU,IAAI,CAAC;AACnC,iBAAW,IAAI,IAAI,SAAS,KAAK;AAEjC,UAAI,KAAK,KAAK,MAAM,UAAU,EAAE,CAAC;AACjC,iBAAW,IAAI,IAAI,SAAS,KAAK;AAEjC,UAAI,KAAK,KAAK,MAAM,OAAO,CAAC;AAC5B,aAAM,IAAI,MAAM,GAAG;AAAE,YAAI,MAAM;AAAA,MAAE;AAEjC,YAAM,OAAO,CAAC;AACd,UAAI,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM;AAC/B,gBAAQ;AAAA,eACD;AACH,gBAAG,IAAI,SAAS;AAAG,mBAAK,KAAK,GAAG,KAAK;AACrC;AAAA,eACG;AACH,iBAAK,KAAK,GAAG,KAAK;AAClB;AAAA,eACG;AACH,iBAAK,KAAK,GAAG,KAAK;AAClB;AAAA,eACG;AACH,iBAAK,KAAK,GAAG,KAAK;AAClB;AAAA,eACG;AACH,iBAAK,KAAK,GAAG,KAAK;AAClB;AAAA;AAAA,MAEN,CAAC;AAED,aAAO,KAAK,QAAQ,EAAE,KAAK,GAAG;AAAA,IAChC;AAAA,EACF;;;AC7FA,MAAM,eAAN,MAAmB;AAAA,IACjB,YAAY,KAAK,IAAI,OAAO,CAAC,GAAG;AAC9B,WAAK,MAAM;AACX,WAAK,KAAK;AACV,WAAK,OAAO;AACZ,WAAK,MAAM,IAAI,KAAK,aAAa,OAAO;AAExC,WAAK,kBAAkB,KAAK,KAAK;AACjC,WAAK,WAAW;AAChB,WAAK,WAAW,KAAK;AAAA,IACvB;AAAA,IAEA,OAAO;AACL,WAAK,UAAU,KAAK,KAAK,gCAAgC;AACzD,WAAK,UAAU,KAAK,KAAK,gCAAgC;AACzD,WAAK,UAAU,KAAK,KAAK,gCAAgC;AACzD,WAAK,WAAW,KAAK,KAAK,2CAA2C,EAAE,IAAI,CAAC;AAC5E,WAAK,SAAS,KAAK,KAAK,yCAAyC,EAAE,IAAI,CAAC;AACxE,WAAK,YAAY,KAAK,KAAK,sBAAsB;AACjD,WAAK,WAAW,KAAK,KAAK,qBAAqB;AAC/C,WAAK,YAAY,KAAK,KAAK,sBAAsB;AACjD,WAAK,SAAS,KAAK,KAAK,6BAA6B;AACrD,WAAK,aAAa,KAAK,KAAK,iCAAiC;AAC7D,WAAK,SAAS,KAAK,KAAK,6BAA6B;AACrD,WAAK,YAAY,KAAK,KAAK,gCAAgC;AAE3D,WAAK,QAAQ,MAAM,QAAM;AACvB,WAAG,eAAe;AAClB,WAAG,cAAc,KAAK;AACtB,aAAK,MAAM;AAAA,MACb,CAAC;AACD,WAAK,QAAQ,MAAM,QAAM;AACvB,WAAG,eAAe;AAClB,WAAG,cAAc,KAAK;AACtB,aAAK,MAAM;AAAA,MACb,CAAC;AACD,WAAK,QAAQ,MAAM,QAAM;AACvB,WAAG,eAAe;AAClB,WAAG,cAAc,KAAK;AACtB,aAAK,MAAM;AAAA,MACb,CAAC;AAED,UAAG,CAAC,KAAK,aAAa;AAAG,aAAK,MAAM;AAEpC,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,KAAK,OAAO;AACjB,mBAAa,QAAQ,SAAS,OAAO,KAAK,UAAU,KAAK,CAAC;AAC1D,aAAO,aAAa,QAAQ,SAAS,OAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IACnE;AAAA,IAEA,OAAO,KAAK,QAAQ;AAClB,UAAI;AACF,eAAO,KAAK,MAAM,aAAa,QAAQ,SAAS,KAAK,CAAC,KAAK;AAAA,MAC7D,SAAQ,GAAN;AACA,gBAAQ,MAAM,CAAC;AACf,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,UAAU,KAAK;AACb,aAAO,aAAa,WAAW,SAAS,KAAK;AAAA,IAC/C;AAAA,IAEA,iBAAiB;AACf,WAAK,UAAU,KAAK,MAAM,IAAI,EAAE,KAAK;AACrC,WAAK,OAAO,KAAK,MAAM,IAAI,EAAE,KAAK;AAClC,WAAK,OAAO,KAAK,MAAM,IAAI,EAAE,KAAK;AAClC,WAAK,WAAW,KAAK,MAAM,IAAI,EAAE,KAAK;AAAA,IACxC;AAAA,IAEA,UAAU,YAAY,OAAO;AAC3B,UAAG,CAAC,KAAK;AAAU,eAAO;AAC1B,UAAI,OAAO,KAAK;AAChB,UAAI,WAAW;AACb,eAAO,OAAO,OAAO,CAAC,GAAG,MAAM,EAAE,WAAW,KAAK,IAAI,EAAE,CAAC;AAAA,MAC1D;AACA,WAAK,YAAY,KAAK,IAAI;AAC1B,WAAK,eAAe;AACpB,UAAG,WAAW;AACZ,aAAK,WAAW,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,QAAQ,GAAG;AAAA,MACrD,OAAO;AACL,aAAK,OAAO,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,QAAQ,GAAG;AAAA,MACjD;AACA,aAAO,KAAK,OAAO,uBAAuB,IAAI;AAAA,IAChD;AAAA,IAEA,WAAW;AACT,aAAO,KAAK,OAAO,qBAAqB;AAAA,IAC1C;AAAA,IAEA,cAAc;AACZ,UAAG,CAAC,KAAK,SAAS;AAAG,eAAO;AAC5B,WAAK,eAAe;AACpB,WAAK,UAAU,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,QAAQ,GAAG;AAClD,aAAO,KAAK,UAAU,qBAAqB;AAAA,IAC7C;AAAA,IAEA,eAAe;AACb,YAAM,QAAQ,KAAK,SAAS;AAC5B,UAAG,CAAC;AAAO,eAAO;AAElB,WAAK,eAAe;AACpB,WAAK,OAAO,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,QAAQ,GAAG;AAE/C,mBAAa,KAAK,OAAO;AACzB,WAAK,WAAW;AAChB,WAAK,KAAK;AACV,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB;AAEd,mBAAa,KAAK,OAAO;AACzB,WAAK,WAAW;AAAA,QACd,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ,KAAK;AAAA,QACb,QAAQ,KAAK;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IAEA,IAAI,UAAU;AACZ,cAAQ,KAAK,UAAU,WAAW,KAAK;AAAA,IACzC;AAAA,IAEA,IAAI,SAAS;AACX,aAAO,CAAC,CAAC,KAAK,UAAU;AAAA,IAC1B;AAAA,IAEA,IAAI,OAAO;AACT,aAAO,CAAC,CAAC,KAAK,UAAU;AAAA,IAC1B;AAAA,IAEA,QAAQ;AACN,WAAK,QAAQ,KAAK;AAClB,WAAK,QAAQ,KAAK;AAClB,WAAK,QAAQ,KAAK;AAClB,WAAK,YAAY,KAAK,IAAI;AAE1B,UAAG,KAAK,QAAQ;AACd,aAAK,SAAS,cAAc,KAAK,IAAI,IAAI,KAAK,SAAS;AACvD,eAAO,KAAK,SAAS;AAAA,MACvB,OAAO;AACL,aAAK,SAAS,aAAa,KAAK,IAAI;AACpC,aAAK,KAAK;AAAA,MACZ;AAAA,IACF;AAAA,IAEA,QAAQ;AACN,WAAK,SAAS,YAAY,KAAK,IAAI;AACnC,WAAK,UAAU;AACf,WAAK,QAAQ,KAAK;AAClB,WAAK,QAAQ,KAAK;AAClB,WAAK,QAAQ,KAAK;AAAA,IACpB;AAAA,IAEA,QAAQ;AACN,WAAK,YAAY;AACjB,WAAK,cAAc;AACnB,WAAK,OAAO;AAAA,IACd;AAAA,IAEA,KAAK,aAAa,MAAM;AACtB,WAAK,OAAO;AACZ,WAAK,OAAO;AAEZ,UAAG,CAAC,KAAK,UAAU,KAAK,IAAI,IAAI,KAAK,YAAY,KAAK,UAAU;AAC9D,aAAK,UAAU,IAAI;AAAA,MACrB;AAEA,UAAG;AAAY,aAAK,UAAU,WAAW,OAAK,KAAK,KAAK,GAAG,KAAK,QAAQ;AAAA,IAC1E;AAAA,IAEA,SAAS;AACP,UAAI,UAAU,KAAK,IAAI,IAAI,KAAK,SAAS;AACzC,iBAAW,KAAK,SAAS;AACzB,UAAG,KAAK,QAAQ;AACd,mBAAW,KAAK,IAAI,IAAI,KAAK,SAAS;AAAA,MACxC;AAEA,WAAK,SAAS,UAAU;AACxB,WAAK,SAAS,SAAS,KAAK,SAAS,SAAS;AAC9C,WAAK,SAAS,OAAO,KAAK,SAAS,SAAS;AAAA,IAC9C;AAAA,IAEA,SAAS;AACP,UAAG,KAAK,SAAS;AACf,YAAG,KAAK,MAAM;AACZ,cAAG,KAAK,SAAS,MAAM,WAAW;AAAQ,iBAAK,SAAS,MAAM,UAAU;AACxE,cAAG,KAAK,OAAO,MAAM,WAAW;AAAS,iBAAK,OAAO,MAAM,UAAU;AAAA,QACvE,OAAO;AACL,cAAG,KAAK,SAAS,MAAM,WAAW;AAAS,iBAAK,SAAS,MAAM,UAAU;AACzE,cAAG,KAAK,OAAO,MAAM,WAAW;AAAQ,iBAAK,OAAO,MAAM,UAAU;AAAA,QACtE;AAAA,MACF,OAAO;AACL,YAAG,KAAK,SAAS,MAAM,WAAW;AAAQ,eAAK,SAAS,MAAM,UAAU;AACxE,YAAG,KAAK,OAAO,MAAM,WAAW;AAAQ,eAAK,OAAO,MAAM,UAAU;AAAA,MACtE;AAEA,YAAM,OAAO,KAAK,SAAS,UAAU,KAAK,SAAS,SAAS;AAC5D,WAAK,UAAU,KAAK,KAAK,aAAa,KAAK,SAAS,OAAO,CAAC;AAC5D,WAAK,SAAS,KAAK,KAAK,aAAa,KAAK,SAAS,MAAM,CAAC;AAC1D,WAAK,UAAU,KAAK,KAAK,cAAc,IAAI,CAAC;AAC5C,WAAK,SAAS,MAAM,QAAQ,GAAG,KAAK,QAAQ,CAAC;AAAA,IAC/C;AAAA,IAEA,aAAa,IAAI;AACf,UAAI,MAAM,KAAK;AACf,UAAI,MAAM,KAAK,IAAI,KAAK,MAAM,KAAK,GAAI,CAAC;AACxC,UAAI,IAAI;AACR,UAAG,KAAK,SAAS,MAAM;AACrB,YAAI,OAAO,KAAK;AAChB,cAAM,OAAO,KAAK;AAAA,MACpB;AACA,YAAM,IAAI,MAAO;AACjB,YAAM,MAAO;AACb,YAAM,IAAI;AAEV,UAAI,MAAM,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC;AACjC,UAAI,MAAM,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC;AACjC,UAAG,IAAI,SAAS;AAAG,cAAM,MAAM;AAC/B,UAAI,MAAM,KAAK,MAAM,CAAC,EAAE,QAAQ,CAAC;AACjC,UAAG,IAAI,SAAS;AAAG,cAAM,MAAM;AAC/B,aAAO,GAAG,MAAM,MAAM,KAAK,OAAO,OAAO,MAAM,GAAG,SAAS,KAAK,OAAO;AAAA,IACzE;AAAA,IAEA,cAAc,KAAK;AACjB,aAAO,IAAI,QAAQ,CAAC,IAAI;AAAA,IAC1B;AAAA,IAEA,KAAK,UAAU;AAAE,aAAO,KAAK,GAAG,KAAK,QAAQ;AAAA,IAAE;AAAA,EACjD;;;AC9OA,MAAM,WAAN,MAAe;AAAA,IACb,YAAY,QAAQ,OAAO,CAAC,GAAG;AAC7B,WAAK,OAAO;AAAA,IACd;AAAA,IAEA,QAAQ;AACN,aAAO,UAAU,MAAM,oBAAoB,KAAK,KAAK,KAAK,IAAI;AAAA,IAChE;AAAA,IAEA,KAAK,GAAG;AACN,WAAK,MAAM,CAAC;AACZ,WAAK,MAAM,EAAE,KAAK;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,GAAG;AACP,WAAK,MAAM,CAAC;AACZ,WAAK,MAAM,EAAE,KAAK;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,UAAU;AACR,WAAK,MAAM,EAAE,QAAQ;AACrB,aAAO,KAAK;AACZ,WAAK,IAAI,OAAO;AAChB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,MAAM,GAAG;AACP,UAAI,KAAK;AAAK,eAAO;AACrB,WAAK,MAAM,KAAK,UAAU;AAE1B,WAAK,YAAY,KAAK,IAAI,KAAK,iBAAiB;AAChD,WAAK,SAAS,KAAK,IAAI,KAAK,gCAAgC,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,SAAS,CAAC;AAC5G,WAAK,aAAa,KAAK,IAAI,KAAK,wBAAwB,EAAE,IAAI,OAAO,SAAS,IAAI;AAClF,WAAK,WAAW,KAAK,IAAI,KAAK,+BAA+B,EAAE,IAAI,EAAE,gBAAgB;AACrF,WAAK,OAAO,KAAK,IAAI,KAAK,2BAA2B,EAAE,IAAI,EAAE,aAAa;AAC1E,WAAK,eAAe,KAAK,IAAI,KAAK,0BAA0B;AAC5D,UAAG,EAAE;AAAc,aAAK,aAAa,KAAK,WAAW,EAAE,YAAY;AAEnE,UAAG,EAAE,eAAe;AAClB,aAAK,IAAI,KAAK,iBAAiB,EAAE,KAAK,EAAE,aAAa;AACrD,aAAK,IAAI,KAAK,YAAY,EAAE,KAAK;AAAA,MACnC;AAIA,WAAK,IAAI,GAAG,mBAAmB,QAAM,KAAK,QAAQ,CAAC;AACnD,WAAK,IAAI,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,UAAU;AAEjD,WAAK,IAAI,SAAS,EAAE,MAAM,CAAC;AAC3B,aAAO;AAAA,IACT;AAAA,IAEA,YAAY;AACV,aAAO,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA6FR;AAAA,IACH;AAAA,EACF;;;ACtJA,MAAM,WAAN,MAAe;AAAA,IACb,YAAY,QAAQ,OAAO,CAAC,GAAG;AAC7B,WAAK,OAAO;AAAA,IACd;AAAA,IAEA,QAAQ;AACN,aAAO,UAAU,MAAM,oBAAoB,KAAK,KAAK,KAAK,IAAI;AAAA,IAChE;AAAA,IAEA,KAAK,GAAG;AACN,WAAK,MAAM,CAAC;AACZ,WAAK,MAAM,EAAE,KAAK;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,GAAG;AACP,WAAK,MAAM,CAAC;AACZ,WAAK,MAAM,EAAE,KAAK;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,UAAU;AACR,WAAK,MAAM,EAAE,QAAQ;AACrB,aAAO,KAAK;AACZ,WAAK,IAAI,OAAO;AAChB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,MAAM,GAAG;AACP,UAAI,KAAK;AAAK,eAAO;AACrB,WAAK,MAAM,KAAK,UAAU;AAE1B,cAAQ,IAAI,CAAC;AACb,WAAK,YAAY,KAAK,IAAI,KAAK,iBAAiB;AAChD,WAAK,SAAS,KAAK,IAAI,KAAK,gCAAgC,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,SAAS,CAAC;AAC5G,WAAK,aAAa,KAAK,IAAI,KAAK,wBAAwB,EAAE,IAAI,OAAO,SAAS,IAAI;AAClF,WAAK,QAAQ,KAAK,IAAI,KAAK,qBAAqB,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;AAI5E,WAAK,IAAI,GAAG,mBAAmB,QAAM,KAAK,QAAQ,CAAC;AACnD,WAAK,IAAI,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,UAAU;AAEjD,WAAK,IAAI,SAAS,EAAE,MAAM,CAAC;AAC3B,aAAO;AAAA,IACT;AAAA,IAEA,YAAY;AACV,aAAO,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KA+CR;AAAA,IACH;AAAA,EACF;;;ACjGA,MAAM,eAAN,MAAmB;AAAA,IACjB,YAAY,QAAQ,OAAO,CAAC,GAAG;AAC7B,WAAK,OAAO;AAAA,IACd;AAAA,IAEA,QAAQ;AACN,aAAO,UAAU,MAAM,oBAAoB,KAAK,KAAK,KAAK,IAAI;AAAA,IAChE;AAAA,IAEA,KAAK,GAAG;AACN,WAAK,MAAM,CAAC;AACZ,WAAK,MAAM,EAAE,KAAK;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,GAAG;AACP,WAAK,MAAM,CAAC;AACZ,WAAK,MAAM,EAAE,KAAK;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,UAAU;AACR,WAAK,MAAM,EAAE,QAAQ;AACrB,aAAO,KAAK;AACZ,WAAK,IAAI,OAAO;AAChB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,MAAM,GAAG;AACP,UAAI,KAAK;AAAK,eAAO;AACrB,WAAK,MAAM,KAAK,UAAU;AAC1B,WAAK,IAAI,SAAS,EAAE,MAAM,CAAC;AAC3B,aAAO;AAAA,IACT;AAAA,IAEA,YAAY;AACV,aAAO,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAyDR;AAAA,IACH;AAAA,EACF;;;AC/FA,MAAI,SAAS,CAAC;AAKd,GAAC,SAAS,KAAK,QAAQC,SAAQ,UAAU,YAAY;AACnD,QAAI,eAAe,CAAC,EAClB,OAAO,UACP,OAAO,QACP,OAAO,WACP,OAAO,mBACP,OAAO,qCACP,OAAO,qBACP,OAAO,kBAAkB,UAAU,8BACnC,OAAO,OACP,OAAO,IAAI;AAEb,QAAI,cAAc,OAAO,WAAW,cAAc,OAAO,cAAc;AACvE,QAAI,gBAAiB,WAAY;AAE/B,UAAI,CAAC,OAAO,iBAAiB;AAC3B,eAAO;AAAA,MACT;AAEA,UAAI;AACF,YAAI,SAAS,IAAI,gBAAgB,GAAG,CAAC;AACrC,YAAI,MAAM,OAAO,WAAW,IAAI;AAChC,YAAI,SAAS,GAAG,GAAG,GAAG,CAAC;AACvB,YAAI,SAAS,OAAO,sBAAsB;AAC1C,YAAI,cAAc,QAAQ,WAAW;AAAA,MACvC,SAAS,GAAP;AACA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT,EAAG;AAEH,aAAS,OAAO;AAAA,IAAC;AAIjB,aAAS,QAAQ,MAAM;AACrB,UAAI,gBAAgBA,QAAO,QAAQ;AACnC,UAAI,OAAO,kBAAkB,SAAS,gBAAgB,OAAO;AAE7D,UAAI,OAAO,SAAS,YAAY;AAC9B,eAAO,IAAI,KAAK,IAAI;AAAA,MACtB;AAEA,WAAK,MAAM,IAAI;AAEf,aAAO;AAAA,IACT;AAEA,QAAI,eAAgB,SAAU,eAAe,KAAK;AAMhD,aAAO;AAAA,QACL,WAAW,SAAS,QAAQ;AAC1B,cAAI,eAAe;AACjB,mBAAO;AAAA,UACT;AAEA,cAAI,IAAI,IAAI,MAAM,GAAG;AACnB,mBAAO,IAAI,IAAI,MAAM;AAAA,UACvB;AAEA,cAAI,SAAS,IAAI,gBAAgB,OAAO,OAAO,OAAO,MAAM;AAC5D,cAAI,MAAM,OAAO,WAAW,IAAI;AAChC,cAAI,UAAU,QAAQ,GAAG,CAAC;AAE1B,cAAI,IAAI,QAAQ,MAAM;AAEtB,iBAAO;AAAA,QACT;AAAA,QACA,OAAO,WAAY;AACjB,cAAI,MAAM;AAAA,QACZ;AAAA,MACF;AAAA,IACF,EAAG,eAAe,oBAAI,IAAI,CAAC;AAE3B,QAAI,MAAO,WAAY;AACrB,UAAI,OAAO,KAAK,MAAM,MAAO,EAAE;AAC/B,UAAI,OAAO;AACX,UAAI,SAAS,CAAC;AACd,UAAI,gBAAgB;AAEpB,UAAI,OAAO,0BAA0B,cAAc,OAAO,yBAAyB,YAAY;AAC7F,gBAAQ,SAAU,IAAI;AACpB,cAAI,KAAK,KAAK,OAAO;AAErB,iBAAO,MAAM,sBAAsB,SAAS,QAAQ,MAAM;AACxD,gBAAI,kBAAkB,QAAQ,gBAAgB,OAAO,IAAI,MAAM;AAC7D,8BAAgB;AAChB,qBAAO,OAAO;AAEd,iBAAG;AAAA,YACL,OAAO;AACL,qBAAO,MAAM,sBAAsB,OAAO;AAAA,YAC5C;AAAA,UACF,CAAC;AAED,iBAAO;AAAA,QACT;AACA,iBAAS,SAAU,IAAI;AACrB,cAAI,OAAO,KAAK;AACd,iCAAqB,OAAO,GAAG;AAAA,UACjC;AAAA,QACF;AAAA,MACF,OAAO;AACL,gBAAQ,SAAU,IAAI;AACpB,iBAAO,WAAW,IAAI,IAAI;AAAA,QAC5B;AACA,iBAAS,SAAU,OAAO;AACxB,iBAAO,aAAa,KAAK;AAAA,QAC3B;AAAA,MACF;AAEA,aAAO,EAAE,OAAc,OAAe;AAAA,IACxC,EAAE;AAEF,QAAI,YAAa,WAAY;AAC3B,UAAI;AACJ,UAAI;AACJ,UAAI,WAAW,CAAC;AAEhB,eAAS,SAASC,SAAQ;AACxB,iBAAS,QAAQ,SAAS,UAAU;AAClC,UAAAA,QAAO,YAAY,EAAE,SAAS,WAAW,CAAC,GAAG,SAAmB,CAAC;AAAA,QACnE;AACA,QAAAA,QAAO,OAAO,SAAS,WAAW,QAAQ;AACxC,cAAI,YAAY,OAAO,2BAA2B;AAClD,UAAAA,QAAO,YAAY,EAAE,QAAQ,UAAU,GAAG,CAAC,SAAS,CAAC;AAAA,QACvD;AAEA,QAAAA,QAAO,OAAO,SAAS,WAAW,SAAS,MAAM,MAAM;AACrD,cAAI,MAAM;AACR,oBAAQ,SAAS,IAAI;AACrB,mBAAO;AAAA,UACT;AAEA,cAAI,KAAK,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAE3C,iBAAO,QAAQ,SAAU,SAAS;AAChC,qBAAS,WAAW,KAAK;AACvB,kBAAI,IAAI,KAAK,aAAa,IAAI;AAC5B;AAAA,cACF;AAEA,qBAAO,SAAS;AAChB,cAAAA,QAAO,oBAAoB,WAAW,UAAU;AAEhD,qBAAO;AAEP,2BAAa,MAAM;AAEnB,mBAAK;AACL,sBAAQ;AAAA,YACV;AAEA,YAAAA,QAAO,iBAAiB,WAAW,UAAU;AAC7C,oBAAQ,SAAS,EAAE;AAEnB,qBAAS,MAAM,WAAW,KAAK,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,EAAC,CAAC;AAAA,UAChE,CAAC;AAED,iBAAO;AAAA,QACT;AAEA,QAAAA,QAAO,QAAQ,SAAS,cAAc;AACpC,UAAAA,QAAO,YAAY,EAAE,OAAO,KAAK,CAAC;AAElC,mBAAS,MAAM,UAAU;AACvB,qBAAS,IAAI;AACb,mBAAO,SAAS;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAEA,aAAO,WAAY;AACjB,YAAI,QAAQ;AACV,iBAAO;AAAA,QACT;AAEA,YAAI,CAAC,YAAY,cAAc;AAC7B,cAAI,OAAO;AAAA,YACT;AAAA,YACA,MAAM,KAAK,SAAS,IAAI;AAAA,YACxB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF,EAAE,KAAK,IAAI;AACX,cAAI;AACF,qBAAS,IAAI,OAAO,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAAA,UAC3D,SAAS,GAAP;AAEA,mBAAO,YAAY,eAAe,OAAO,QAAQ,SAAS,aAAa,QAAQ,KAAK,mCAA4B,CAAC,IAAI;AAErH,mBAAO;AAAA,UACT;AAEA,mBAAS,MAAM;AAAA,QACjB;AAEA,eAAO;AAAA,MACT;AAAA,IACF,EAAG;AAEH,QAAI,WAAW;AAAA,MACb,eAAe;AAAA,MACf,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,eAAe;AAAA,MACf,OAAO;AAAA,MACP,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,GAAG;AAAA,MACH,GAAG;AAAA,MACH,QAAQ,CAAC,UAAU,QAAQ;AAAA,MAC3B,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAEA,yBAAyB;AAAA,MACzB,QAAQ;AAAA,IACV;AAEA,aAAS,QAAQ,KAAK,WAAW;AAC/B,aAAO,YAAY,UAAU,GAAG,IAAI;AAAA,IACtC;AAEA,aAAS,KAAK,KAAK;AACjB,aAAO,EAAE,QAAQ,QAAQ,QAAQ;AAAA,IACnC;AAEA,aAAS,KAAK,SAAS,MAAM,WAAW;AACtC,aAAO;AAAA,QACL,WAAW,KAAK,QAAQ,KAAK,IAAI,QAAQ,QAAQ,SAAS;AAAA,QAC1D;AAAA,MACF;AAAA,IACF;AAEA,aAAS,gBAAgB,QAAO;AAC9B,aAAO,SAAS,IAAI,IAAI,KAAK,MAAM,MAAM;AAAA,IAC3C;AAEA,aAAS,UAAU,KAAK,KAAK;AAE3B,aAAO,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,IAAI,IAAI;AAAA,IACnD;AAEA,aAAS,UAAU,KAAK;AACtB,aAAO,SAAS,KAAK,EAAE;AAAA,IACzB;AAEA,aAAS,YAAY,QAAQ;AAC3B,aAAO,OAAO,IAAI,QAAQ;AAAA,IAC5B;AAEA,aAAS,SAAS,KAAK;AACrB,UAAI,MAAM,OAAO,GAAG,EAAE,QAAQ,eAAe,EAAE;AAE/C,UAAI,IAAI,SAAS,GAAG;AAChB,cAAM,IAAI,KAAG,IAAI,KAAG,IAAI,KAAG,IAAI,KAAG,IAAI,KAAG,IAAI;AAAA,MACjD;AAEA,aAAO;AAAA,QACL,GAAG,UAAU,IAAI,UAAU,GAAE,CAAC,CAAC;AAAA,QAC/B,GAAG,UAAU,IAAI,UAAU,GAAE,CAAC,CAAC;AAAA,QAC/B,GAAG,UAAU,IAAI,UAAU,GAAE,CAAC,CAAC;AAAA,MACjC;AAAA,IACF;AAEA,aAAS,UAAU,SAAS;AAC1B,UAAI,SAAS,KAAK,SAAS,UAAU,MAAM;AAC3C,aAAO,IAAI,KAAK,QAAQ,KAAK,MAAM;AACnC,aAAO,IAAI,KAAK,QAAQ,KAAK,MAAM;AAEnC,aAAO;AAAA,IACT;AAEA,aAAS,oBAAoB,QAAQ;AACnC,aAAO,QAAQ,SAAS,gBAAgB;AACxC,aAAO,SAAS,SAAS,gBAAgB;AAAA,IAC3C;AAEA,aAAS,kBAAkB,QAAQ;AACjC,UAAI,OAAO,OAAO,sBAAsB;AACxC,aAAO,QAAQ,KAAK;AACpB,aAAO,SAAS,KAAK;AAAA,IACvB;AAEA,aAAS,UAAU,QAAQ;AACzB,UAAI,SAAS,SAAS,cAAc,QAAQ;AAE5C,aAAO,MAAM,WAAW;AACxB,aAAO,MAAM,MAAM;AACnB,aAAO,MAAM,OAAO;AACpB,aAAO,MAAM,gBAAgB;AAC7B,aAAO,MAAM,SAAS;AAEtB,aAAO;AAAA,IACT;AAEA,aAAS,QAAQ,SAAS,GAAG,GAAG,SAAS,SAAS,UAAU,YAAY,UAAU,eAAe;AAC/F,cAAQ,KAAK;AACb,cAAQ,UAAU,GAAG,CAAC;AACtB,cAAQ,OAAO,QAAQ;AACvB,cAAQ,MAAM,SAAS,OAAO;AAC9B,cAAQ,IAAI,GAAG,GAAG,GAAG,YAAY,UAAU,aAAa;AACxD,cAAQ,QAAQ;AAAA,IAClB;AAEA,aAAS,cAAc,MAAM;AAC3B,UAAI,WAAW,KAAK,SAAS,KAAK,KAAK;AACvC,UAAI,YAAY,KAAK,UAAU,KAAK,KAAK;AAEzC,aAAO;AAAA,QACL,GAAG,KAAK;AAAA,QACR,GAAG,KAAK;AAAA,QACR,QAAQ,KAAK,OAAO,IAAI;AAAA,QACxB,aAAa,KAAK,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,IAAI;AAAA,QACtD,UAAW,KAAK,gBAAgB,MAAQ,KAAK,OAAO,IAAI,KAAK;AAAA,QAC7D,SAAS,CAAC,YAAa,MAAM,YAAc,KAAK,OAAO,IAAI;AAAA,QAC3D,YAAY,KAAK,OAAO,KAAK,OAAO,QAAQ,QAAQ,KAAK;AAAA,QACzD,OAAO,KAAK;AAAA,QACZ,OAAO,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,YAAY,KAAK;AAAA,QACjB,OAAO,KAAK;AAAA,QACZ,OAAO,KAAK;AAAA,QACZ,QAAQ,KAAK,OAAO,IAAI;AAAA,QACxB,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS;AAAA,QACT,SAAS,KAAK,UAAU;AAAA,QACxB,YAAY;AAAA,QACZ,QAAQ,KAAK;AAAA,QACb,MAAM,KAAK;AAAA,MACb;AAAA,IACF;AAEA,aAAS,YAAY,SAAS,OAAO;AACnC,YAAM,KAAK,KAAK,IAAI,MAAM,OAAO,IAAI,MAAM,WAAW,MAAM;AAC5D,YAAM,KAAK,KAAK,IAAI,MAAM,OAAO,IAAI,MAAM,WAAW,MAAM;AAC5D,YAAM,YAAY,MAAM;AAExB,UAAI,MAAM,MAAM;AACd,cAAM,SAAS;AACf,cAAM,UAAU,MAAM,IAAK,KAAK,MAAM;AACtC,cAAM,UAAU,MAAM,IAAK,KAAK,MAAM;AAEtC,cAAM,UAAU;AAChB,cAAM,UAAU;AAChB,cAAM,SAAS;AAAA,MACjB,OAAO;AACL,cAAM,UAAU,MAAM;AACtB,cAAM,UAAU,MAAM,IAAM,KAAK,MAAM,SAAU,KAAK,IAAI,MAAM,MAAM;AACtE,cAAM,UAAU,MAAM,IAAM,KAAK,MAAM,SAAU,KAAK,IAAI,MAAM,MAAM;AAEtE,cAAM,aAAa;AACnB,cAAM,UAAU,KAAK,IAAI,MAAM,SAAS;AACxC,cAAM,UAAU,KAAK,IAAI,MAAM,SAAS;AACxC,cAAM,SAAS,KAAK,OAAO,IAAI;AAAA,MACjC;AAEA,UAAI,WAAY,MAAM,SAAU,MAAM;AAEtC,UAAI,KAAK,MAAM,IAAK,MAAM,SAAS,MAAM;AACzC,UAAI,KAAK,MAAM,IAAK,MAAM,SAAS,MAAM;AACzC,UAAI,KAAK,MAAM,UAAW,MAAM,SAAS,MAAM;AAC/C,UAAI,KAAK,MAAM,UAAW,MAAM,SAAS,MAAM;AAE/C,cAAQ,YAAY,UAAU,MAAM,MAAM,IAAI,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM,MAAM,IAAI,QAAQ,IAAI,YAAY;AAEpH,cAAQ,UAAU;AAElB,UAAI,eAAe,MAAM,MAAM,SAAS,UAAU,OAAO,MAAM,MAAM,SAAS,YAAY,MAAM,QAAQ,MAAM,MAAM,MAAM,GAAG;AAC3H,gBAAQ,KAAK;AAAA,UACX,MAAM,MAAM;AAAA,UACZ,MAAM,MAAM;AAAA,UACZ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAK,IAAI,KAAK,EAAE,IAAI;AAAA,UACpB,KAAK,IAAI,KAAK,EAAE,IAAI;AAAA,UACpB,KAAK,KAAK,KAAK,MAAM;AAAA,QACvB,CAAC;AAAA,MACH,WAAW,MAAM,MAAM,SAAS,UAAU;AACxC,YAAI,WAAW,KAAK,KAAK,KAAK,MAAM;AACpC,YAAI,SAAS,KAAK,IAAI,KAAK,EAAE,IAAI;AACjC,YAAI,SAAS,KAAK,IAAI,KAAK,EAAE,IAAI;AACjC,YAAI,QAAQ,MAAM,MAAM,OAAO,QAAQ,MAAM;AAC7C,YAAI,SAAS,MAAM,MAAM,OAAO,SAAS,MAAM;AAE/C,YAAI,SAAS,IAAI,UAAU;AAAA,UACzB,KAAK,IAAI,QAAQ,IAAI;AAAA,UACrB,KAAK,IAAI,QAAQ,IAAI;AAAA,UACrB,CAAC,KAAK,IAAI,QAAQ,IAAI;AAAA,UACtB,KAAK,IAAI,QAAQ,IAAI;AAAA,UACrB,MAAM;AAAA,UACN,MAAM;AAAA,QACR,CAAC;AAGD,eAAO,aAAa,IAAI,UAAU,MAAM,MAAM,MAAM,CAAC;AAErD,YAAI,UAAU,QAAQ,cAAc,aAAa,UAAU,MAAM,MAAM,MAAM,GAAG,WAAW;AAC3F,gBAAQ,aAAa,MAAM;AAE3B,gBAAQ,cAAe,IAAI;AAC3B,gBAAQ,YAAY;AACpB,gBAAQ;AAAA,UACN,MAAM,IAAK,QAAQ;AAAA,UACnB,MAAM,IAAK,SAAS;AAAA,UACpB;AAAA,UACA;AAAA,QACF;AACA,gBAAQ,cAAc;AAAA,MACxB,WAAW,MAAM,UAAU,UAAU;AACnC,gBAAQ,UACN,QAAQ,QAAQ,MAAM,GAAG,MAAM,GAAG,KAAK,IAAI,KAAK,EAAE,IAAI,MAAM,YAAY,KAAK,IAAI,KAAK,EAAE,IAAI,MAAM,YAAY,KAAK,KAAK,KAAK,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAE,IACzJ,QAAQ,SAAS,MAAM,GAAG,MAAM,GAAG,KAAK,IAAI,KAAK,EAAE,IAAI,MAAM,YAAY,KAAK,IAAI,KAAK,EAAE,IAAI,MAAM,YAAY,KAAK,KAAK,KAAK,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAE;AAAA,MAC9J,WAAW,MAAM,UAAU,QAAQ;AACjC,YAAI,MAAM,KAAK,KAAK,IAAI;AACxB,YAAI,cAAc,IAAI,MAAM;AAC5B,YAAI,cAAc,IAAI,MAAM;AAC5B,YAAI,IAAI,MAAM;AACd,YAAI,IAAI,MAAM;AACd,YAAI,SAAS;AACb,YAAI,OAAO,KAAK,KAAK;AAErB,eAAO,UAAU;AACf,cAAI,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI;AAC9B,cAAI,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI;AAC9B,kBAAQ,OAAO,GAAG,CAAC;AACnB,iBAAO;AAEP,cAAI,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI;AAC9B,cAAI,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI;AAC9B,kBAAQ,OAAO,GAAG,CAAC;AACnB,iBAAO;AAAA,QACT;AAAA,MACF,OAAO;AACL,gBAAQ,OAAO,KAAK,MAAM,MAAM,CAAC,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AACvD,gBAAQ,OAAO,KAAK,MAAM,MAAM,OAAO,GAAG,KAAK,MAAM,EAAE,CAAC;AACxD,gBAAQ,OAAO,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC;AAC7C,gBAAQ,OAAO,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM,MAAM,OAAO,CAAC;AAAA,MAC1D;AAEA,cAAQ,UAAU;AAClB,cAAQ,KAAK;AAEb,aAAO,MAAM,OAAO,MAAM;AAAA,IAC5B;AAEA,aAAS,QAAQ,QAAQ,QAAQ,SAAS,MAAM,MAAM;AACpD,UAAI,kBAAkB,OAAO,MAAM;AACnC,UAAI,UAAU,OAAO,WAAW,IAAI;AACpC,UAAI;AACJ,UAAI;AAEJ,UAAI,OAAO,QAAQ,SAAU,SAAS;AACpC,iBAAS,SAAS;AAChB,2BAAiB,UAAU;AAE3B,kBAAQ,UAAU,GAAG,GAAG,KAAK,OAAO,KAAK,MAAM;AAC/C,uBAAa,MAAM;AAEnB,eAAK;AACL,kBAAQ;AAAA,QACV;AAEA,iBAAS,SAAS;AAChB,cAAI,YAAY,EAAE,KAAK,UAAU,WAAW,SAAS,KAAK,WAAW,WAAW,SAAS;AACvF,iBAAK,QAAQ,OAAO,QAAQ,WAAW;AACvC,iBAAK,SAAS,OAAO,SAAS,WAAW;AAAA,UAC3C;AAEA,cAAI,CAAC,KAAK,SAAS,CAAC,KAAK,QAAQ;AAC/B,oBAAQ,MAAM;AACd,iBAAK,QAAQ,OAAO;AACpB,iBAAK,SAAS,OAAO;AAAA,UACvB;AAEA,kBAAQ,UAAU,GAAG,GAAG,KAAK,OAAO,KAAK,MAAM;AAE/C,4BAAkB,gBAAgB,OAAO,SAAU,OAAO;AACxD,mBAAO,YAAY,SAAS,KAAK;AAAA,UACnC,CAAC;AAED,cAAI,gBAAgB,QAAQ;AAC1B,6BAAiB,IAAI,MAAM,MAAM;AAAA,UACnC,OAAO;AACL,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,yBAAiB,IAAI,MAAM,MAAM;AACjC,kBAAU;AAAA,MACZ,CAAC;AAED,aAAO;AAAA,QACL,WAAW,SAAUC,SAAQ;AAC3B,4BAAkB,gBAAgB,OAAOA,OAAM;AAE/C,iBAAO;AAAA,QACT;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,OAAO,WAAY;AACjB,cAAI,gBAAgB;AAClB,gBAAI,OAAO,cAAc;AAAA,UAC3B;AAEA,cAAI,SAAS;AACX,oBAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,aAAS,eAAe,QAAQ,YAAY;AAC1C,UAAI,cAAc,CAAC;AACnB,UAAI,cAAc,CAAC,CAAC,KAAK,cAAc,CAAC,GAAG,QAAQ;AACnD,UAAI,2BAA2B;AAC/B,UAAI,gCAAgC,KAAK,YAAY,2BAA2B,OAAO;AACvF,UAAI,kBAAkB,gBAAgB,CAAC,CAAC,KAAK,cAAc,CAAC,GAAG,WAAW;AAC1E,UAAI,SAAS,kBAAkB,UAAU,IAAI;AAC7C,UAAI,UAAU,cAAc,sBAAsB;AAClD,UAAI,cAAe,UAAU,SAAU,CAAC,CAAC,OAAO,yBAAyB;AACzE,UAAI,mBAAmB,OAAO,eAAe,cAAc,WAAW,0BAA0B,EAAE;AAClG,UAAI;AAEJ,eAAS,UAAU,SAAS,MAAM,MAAM;AACtC,YAAI,gBAAgB,KAAK,SAAS,iBAAiB,eAAe;AAClE,YAAI,QAAQ,KAAK,SAAS,SAAS,MAAM;AACzC,YAAI,SAAS,KAAK,SAAS,UAAU,MAAM;AAC3C,YAAI,gBAAgB,KAAK,SAAS,iBAAiB,MAAM;AACzD,YAAI,QAAQ,KAAK,SAAS,SAAS,MAAM;AACzC,YAAI,UAAU,KAAK,SAAS,WAAW,MAAM;AAC7C,YAAI,QAAQ,KAAK,SAAS,SAAS,MAAM;AACzC,YAAI,SAAS,KAAK,SAAS,UAAU,WAAW;AAChD,YAAI,QAAQ,KAAK,SAAS,SAAS,MAAM;AACzC,YAAI,SAAS,KAAK,SAAS,QAAQ;AACnC,YAAI,SAAS,KAAK,SAAS,QAAQ;AACnC,YAAI,OAAO,CAAC,CAAC,KAAK,SAAS,MAAM;AACjC,YAAI,SAAS,UAAU,OAAO;AAE9B,YAAI,OAAO;AACX,YAAI,SAAS,CAAC;AAEd,YAAI,SAAS,OAAO,QAAQ,OAAO;AACnC,YAAI,SAAS,OAAO,SAAS,OAAO;AAEpC,eAAO,QAAQ;AACb,iBAAO;AAAA,YACL,cAAc;AAAA,cACZ,GAAG;AAAA,cACH,GAAG;AAAA,cACH;AAAA,cACA;AAAA,cACA;AAAA,cACA,OAAO,OAAO,OAAO,OAAO;AAAA,cAC5B,OAAO,OAAO,UAAU,GAAG,OAAO,MAAM;AAAA,cACxC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF;AAIA,YAAI,cAAc;AAChB,iBAAO,aAAa,UAAU,MAAM;AAAA,QACtC;AAEA,uBAAe,QAAQ,QAAQ,QAAQ,SAAS,MAAO,IAAI;AAE3D,eAAO,aAAa;AAAA,MACtB;AAEA,eAAS,KAAK,SAAS;AACrB,YAAI,0BAA0B,iCAAiC,KAAK,SAAS,2BAA2B,OAAO;AAC/G,YAAI,SAAS,KAAK,SAAS,UAAU,MAAM;AAE3C,YAAI,2BAA2B,kBAAkB;AAC/C,iBAAO,QAAQ,SAAU,SAAS;AAChC,oBAAQ;AAAA,UACV,CAAC;AAAA,QACH;AAEA,YAAI,eAAe,cAAc;AAE/B,mBAAS,aAAa;AAAA,QACxB,WAAW,eAAe,CAAC,QAAQ;AAEjC,mBAAS,UAAU,MAAM;AACzB,mBAAS,KAAK,YAAY,MAAM;AAAA,QAClC;AAEA,YAAI,eAAe,CAAC,aAAa;AAE/B,kBAAQ,MAAM;AAAA,QAChB;AAEA,YAAI,OAAO;AAAA,UACT,OAAO,OAAO;AAAA,UACd,QAAQ,OAAO;AAAA,QACjB;AAEA,YAAI,UAAU,CAAC,aAAa;AAC1B,iBAAO,KAAK,MAAM;AAAA,QACpB;AAEA,sBAAc;AAEd,YAAI,QAAQ;AACV,iBAAO,yBAAyB;AAAA,QAClC;AAEA,iBAAS,WAAW;AAClB,cAAI,QAAQ;AAEV,gBAAI,MAAM;AAAA,cACR,uBAAuB,WAAY;AACjC,oBAAI,CAAC,aAAa;AAChB,yBAAO,OAAO,sBAAsB;AAAA,gBACtC;AAAA,cACF;AAAA,YACF;AAEA,oBAAQ,GAAG;AAEX,mBAAO,YAAY;AAAA,cACjB,QAAQ;AAAA,gBACN,OAAO,IAAI;AAAA,gBACX,QAAQ,IAAI;AAAA,cACd;AAAA,YACF,CAAC;AACD;AAAA,UACF;AAIA,eAAK,QAAQ,KAAK,SAAS;AAAA,QAC7B;AAEA,iBAAS,OAAO;AACd,yBAAe;AAEf,cAAI,aAAa;AACf,uCAA2B;AAC3B,mBAAO,oBAAoB,UAAU,QAAQ;AAAA,UAC/C;AAEA,cAAI,eAAe,QAAQ;AACzB,gBAAI,SAAS,KAAK,SAAS,MAAM,GAAG;AAClC,uBAAS,KAAK,YAAY,MAAM;AAAA,YAClC;AACA,qBAAS;AACT,0BAAc;AAAA,UAChB;AAAA,QACF;AAEA,YAAI,eAAe,CAAC,0BAA0B;AAC5C,qCAA2B;AAC3B,iBAAO,iBAAiB,UAAU,UAAU,KAAK;AAAA,QACnD;AAEA,YAAI,QAAQ;AACV,iBAAO,OAAO,KAAK,SAAS,MAAM,IAAI;AAAA,QACxC;AAEA,eAAO,UAAU,SAAS,MAAM,IAAI;AAAA,MACtC;AAEA,WAAK,QAAQ,WAAY;AACvB,YAAI,QAAQ;AACV,iBAAO,MAAM;AAAA,QACf;AAEA,YAAI,cAAc;AAChB,uBAAa,MAAM;AAAA,QACrB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAGA,QAAI;AACJ,aAAS,iBAAiB;AACxB,UAAI,CAAC,aAAa;AAChB,sBAAc,eAAe,MAAM,EAAE,WAAW,MAAM,QAAQ,KAAK,CAAC;AAAA,MACtE;AACA,aAAO;AAAA,IACT;AAEA,aAAS,gBAAgB,YAAY,YAAY,GAAG,GAAG,QAAQ,QAAQ,UAAU;AAC/E,UAAI,SAAS,IAAI,OAAO,UAAU;AAElC,UAAI,KAAK,IAAI,OAAO;AACpB,SAAG,QAAQ,QAAQ,IAAI,UAAU,UAAU,CAAC;AAE5C,UAAI,KAAK,IAAI,OAAO;AAEpB,SAAG,QAAQ,IAAI,IAAI,UAAU;AAAA,QAC3B,KAAK,IAAI,QAAQ,IAAI;AAAA,QACrB,KAAK,IAAI,QAAQ,IAAI;AAAA,QACrB,CAAC,KAAK,IAAI,QAAQ,IAAI;AAAA,QACtB,KAAK,IAAI,QAAQ,IAAI;AAAA,QACrB;AAAA,QACA;AAAA,MACF,CAAC,CAAC;AAEF,aAAO;AAAA,IACT;AAEA,aAAS,cAAc,UAAU;AAC/B,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI,MAAM,iDAAiD;AAAA,MACnE;AAEA,UAAI,MAAM;AAEV,UAAI,OAAO,aAAa,UAAU;AAChC,eAAO;AAAA,MACT,OAAO;AACL,eAAO,SAAS;AAChB,iBAAS,SAAS;AAAA,MACpB;AAEA,UAAI,SAAS,IAAI,OAAO,IAAI;AAC5B,UAAI,aAAa,SAAS,cAAc,QAAQ;AAChD,UAAI,UAAU,WAAW,WAAW,IAAI;AAExC,UAAI,CAAC,QAAQ;AAEX,YAAI,UAAU;AACd,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,OAAO;AAIX,iBAAS,IAAI,GAAG,IAAI,SAAS,KAAK,GAAG;AACnC,mBAAS,IAAI,GAAG,IAAI,SAAS,KAAK,GAAG;AACnC,gBAAI,QAAQ,cAAc,QAAQ,GAAG,GAAG,SAAS,GAAG;AAClD,qBAAO,KAAK,IAAI,MAAM,CAAC;AACvB,qBAAO,KAAK,IAAI,MAAM,CAAC;AACvB,qBAAO,KAAK,IAAI,MAAM,CAAC;AACvB,qBAAO,KAAK,IAAI,MAAM,CAAC;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAEA,gBAAQ,OAAO;AACf,iBAAS,OAAO;AAEhB,YAAI,iBAAiB;AACrB,YAAI,QAAQ,KAAK,IAAI,iBAAe,OAAO,iBAAe,MAAM;AAEhE,iBAAS;AAAA,UACP;AAAA,UAAO;AAAA,UAAG;AAAA,UAAG;AAAA,UACb,CAAC,KAAK,MAAO,QAAM,IAAK,IAAI,IAAI;AAAA,UAChC,CAAC,KAAK,MAAO,SAAO,IAAK,IAAI,IAAI;AAAA,QACnC;AAAA,MACF;AAEA,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,aAAS,cAAc,UAAU;AAC/B,UAAI,MACA,SAAS,GACT,QAAQ,WAER,aAAa;AAEjB,UAAI,OAAO,aAAa,UAAU;AAChC,eAAO;AAAA,MACT,OAAO;AACL,eAAO,SAAS;AAChB,iBAAS,YAAY,WAAW,SAAS,SAAS;AAClD,qBAAa,gBAAgB,WAAW,SAAS,aAAa;AAC9D,gBAAQ,WAAW,WAAW,SAAS,QAAQ;AAAA,MACjD;AAIA,UAAI,WAAW,KAAK;AACpB,UAAI,OAAO,KAAK,WAAW,QAAQ;AAEnC,UAAI,SAAS,IAAI,gBAAgB,UAAU,QAAQ;AACnD,UAAI,MAAM,OAAO,WAAW,IAAI;AAEhC,UAAI,OAAO;AACX,UAAI,OAAO,IAAI,YAAY,IAAI;AAC/B,UAAI,QAAQ,KAAK,KAAK,KAAK,yBAAyB,KAAK,qBAAqB;AAC9E,UAAI,SAAS,KAAK,KAAK,KAAK,0BAA0B,KAAK,wBAAwB;AAEnF,UAAI,UAAU;AACd,UAAI,IAAI,KAAK,wBAAwB;AACrC,UAAI,IAAI,KAAK,0BAA0B;AACvC,eAAS,UAAU;AACnB,gBAAU,UAAU;AAEpB,eAAS,IAAI,gBAAgB,OAAO,MAAM;AAC1C,YAAM,OAAO,WAAW,IAAI;AAC5B,UAAI,OAAO;AACX,UAAI,YAAY;AAEhB,UAAI,SAAS,MAAM,GAAG,CAAC;AAEvB,UAAI,QAAQ,IAAI;AAEhB,aAAO;AAAA,QACL,MAAM;AAAA,QAEN,QAAQ,OAAO,sBAAsB;AAAA,QACrC,QAAQ,CAAC,OAAO,GAAG,GAAG,OAAO,CAAC,QAAQ,QAAQ,GAAG,CAAC,SAAS,QAAQ,CAAC;AAAA,MACtE;AAAA,IACF;AAEA,IAAAF,QAAO,UAAU,WAAW;AAC1B,aAAO,eAAe,EAAE,MAAM,MAAM,SAAS;AAAA,IAC/C;AACA,IAAAA,QAAO,QAAQ,QAAQ,WAAW;AAChC,qBAAe,EAAE,MAAM;AAAA,IACzB;AACA,IAAAA,QAAO,QAAQ,SAAS;AACxB,IAAAA,QAAO,QAAQ,gBAAgB;AAC/B,IAAAA,QAAO,QAAQ,gBAAgB;AAAA,EACjC,GAAG,WAAY;AACb,QAAI,OAAO,WAAW,aAAa;AACjC,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,SAAS,aAAa;AAC/B,aAAO;AAAA,IACT;AAEA,WAAO,QAAQ,CAAC;AAAA,EAClB,EAAG,GAAG,QAAQ,KAAK;AAInB,MAAO,0BAAQ,OAAO;AACf,MAAI,SAAS,OAAO,QAAQ;;;ACl3B5B,MAAM,WAAN,MAAe;AAAA,IACpB,YAAY,UAAU,CAAC,GAAG;AACxB,WAAK,WAAW,QAAQ,YAAY;AACpC,WAAK,QAAQ,QAAQ,SAAS;AAC9B,WAAK,gBAAgB,QAAQ,iBAAiB;AAC9C,WAAK,QAAQ,QAAQ,SAAS;AAC9B,WAAK,WAAW,QAAQ,YAAY;AACpC,WAAK,QAAQ,QAAQ,SAAS;AAE9B,WAAK,YAAY,CAAC;AAClB,WAAK,UAAU;AACf,WAAK,SAAS;AACd,WAAK,YAAY;AACjB,WAAK,gBAAgB,KAAK,IAAI;AAC9B,WAAK,iBAAiB;AAEtB,WAAK,SAAS;AAAA,QACZ;AAAA,QAAoB;AAAA,QAAoB;AAAA,QACxC;AAAA,QAAqB;AAAA,QAAoB;AAAA,QACzC;AAAA,QAAqB;AAAA,QAAqB;AAAA,QAC1C;AAAA,QAAoB;AAAA,QAAoB;AAAA,MAC1C;AAEA,WAAK,cAAc,QAAQ,MAAM;AACjC,UAAG,QAAQ;AAAO,aAAK,MAAM;AAAA,IAC/B;AAAA,IAEA,cAAc,gBAAgB;AAC5B,UAAI,0BAA0B,mBAAmB;AAC/C,aAAK,SAAS;AAAA,MAChB,OAAO;AACL,aAAK,SAAS,SAAS,cAAc,QAAQ;AAC7C,aAAK,OAAO,MAAM,UAAU;AAC5B,aAAK,OAAO,MAAM,SAAS;AAC3B,aAAK,OAAO,MAAM,gBAAgB;AAClC,aAAK,OAAO,MAAM,WAAW;AAC7B,aAAK,OAAO,MAAM,MAAM;AACxB,iBAAS,KAAK,QAAQ,KAAK,MAAM;AAAA,MACnC;AAEA,WAAK,MAAM,KAAK,OAAO,WAAW,IAAI;AAEtC,WAAK,QAAQ;AACb,aAAO,iBAAiB,UAAU,MAAM,KAAK,QAAQ,CAAC;AAAA,IACxD;AAAA,IAEA,UAAU;AACR,WAAK,QAAQ,OAAO;AACpB,WAAK,SAAS,OAAO;AACrB,WAAK,OAAO,QAAQ,KAAK;AACzB,WAAK,OAAO,SAAS,KAAK;AAAA,IAC5B;AAAA,IAEA,eAAe,GAAG;AAChB,QAAE,QAAQ,KAAK,OAAQ,KAAK,OAAO,IAAI,KAAK,OAAO,SAAU,KAAK,KAAK,QAAQ;AAC/E,QAAE,SAAS,KAAK,OAAQ,KAAK,OAAO,IAAI,KAAK,OAAO,SAAU,KAAK,KAAK,QAAQ;AAChF,QAAE,IAAI,KAAK,OAAO,IAAI,KAAK;AAC3B,QAAE,IAAI,KAAK,OAAO,IAAI,KAAK,SAAS,KAAK;AACzC,QAAE,WAAW,KAAK,OAAO,IAAI,KAAK;AAClC,QAAE,OAAO,KAAK,OAAO,IAAI,KAAK;AAC9B,QAAE,qBAAqB,KAAK,OAAO,IAAI,OAAO;AAC9C,QAAE,YAAY,KAAK,OAAO,IAAI,KAAK;AACnC,UAAI,KAAK,OAAO;AACd,cAAM,SAAS,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK,QAAQ,CAAC,KAAK,KAAK;AACnE,UAAE,QAAQ,OAAQ,KAAK,OAAO,IAAI,OAAO,SAAU;AACnD,UAAE,WAAW,EAAE,WAAW;AAAA,MAC5B;AACA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,GAAG,GAAG,QAAQ,IAAI;AACvB,eAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,cAAM,IAAI,KAAK,eAAe,CAAC,CAAC;AAChC,UAAE,IAAI;AACN,UAAE,IAAI;AACN,aAAK,UAAU,KAAK,CAAC;AAAA,MACvB;AACA,UAAI,CAAC,KAAK;AAAgB,aAAK,cAAc;AAAA,IAC/C;AAAA,IAEA,MAAM,SAAS,KAAK,KAAK;AACvB,UAAI,QAAQ,KAAK;AACjB,UAAI,QAAQ;AAAW,gBAAQ;AAC/B,UAAI,QAAQ;AAAW,gBAAQ,KAAK,IAAI,OAAO,GAAG,GAAG;AAErD,aAAO,KAAK,UAAU,SAAS,OAAO;AACpC,aAAK,UAAU,KAAK,KAAK,eAAe,CAAC,CAAC,CAAC;AAAA,MAC7C;AAEA,WAAK,UAAU;AACf,WAAK,SAAS;AACd,WAAK,cAAc;AAEnB,UAAI;AAAS,mBAAW,MAAM,KAAK,KAAK,GAAG,OAAO;AAElD,aAAO;AAAA,IACT;AAAA,IAEA,OAAO;AACL,WAAK,UAAU;AACf,aAAO;AAAA,IACT;AAAA,IAEA,SAAS;AACP,WAAK,KAAK;AACV,WAAK,SAAS;AACd,WAAK,YAAY,CAAC;AAClB,WAAK,IAAI,UAAU,GAAG,GAAG,KAAK,OAAO,KAAK,MAAM;AAChD,aAAO;AAAA,IACT;AAAA,IAEA,QAAQ;AACN,WAAK,SAAS;AACd,aAAO;AAAA,IACT;AAAA,IAEA,SAAS;AACP,UAAI,CAAC,KAAK;AAAQ;AAClB,WAAK,SAAS;AACd,WAAK,cAAc;AACnB,aAAO;AAAA,IACT;AAAA,IAEA,cAAc;AACZ,aAAO,KAAK,SAAS,KAAK,OAAO,IAAI,KAAK,MAAM;AAAA,IAClD;AAAA,IAEA,gBAAgB;AACd,UAAI,KAAK;AAAQ;AACjB,UAAI,KAAK,UAAU,WAAW,GAAG;AAC/B,aAAK,IAAI,UAAU,GAAG,GAAG,KAAK,OAAO,KAAK,MAAM;AAChD;AAAA,MACF;AAEA,WAAK,kBAAkB,IAAI,KAAK;AAChC,UAAG,IAAI,KAAK,IAAI,KAAK,gBAAgB,KAAM;AACzC,YAAG,CAAC,SAAS,KAAK,SAAS,KAAK,MAAM;AAAG,iBAAO;AAChD,aAAK,gBAAgB,IAAI,KAAK;AAAA,MAChC;AAEA,YAAM,MAAM,KAAK,IAAI;AACrB,YAAM,QAAQ,MAAM,KAAK;AACzB,UAAI,QAAQ,KAAK,eAAe;AAC9B,aAAK,IAAI,UAAU,GAAG,GAAG,KAAK,OAAO,KAAK,MAAM;AAChD,aAAK,iBAAiB;AACtB,aAAK,eAAe;AACpB,aAAK,gBAAgB,MAAO,QAAQ,KAAK;AAAA,MAC3C;AAEA,WAAK,iBAAiB,sBAAsB,MAAM,KAAK,cAAc,CAAC;AAAA,IACxE;AAAA,IAEA,mBAAmB;AACjB,WAAK,aAAa;AAClB,eAAS,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;AAC9C,cAAM,IAAI,KAAK,UAAU;AACzB,YAAI,CAAC,KAAK,WAAW,EAAE,IAAI,KAAK;AAC9B,YAAE,IAAI,KAAK,SAAS;AAAA,QACtB,OAAO;AACL,YAAE,aAAa,EAAE;AACjB,YAAE,KAAK,KAAK,IAAI,KAAK,SAAS,IAAI;AAClC,YAAE,MAAM,KAAK,IAAI,KAAK,SAAS,IAAI,EAAE,WAAW,KAAK,SAAS;AAC9D,YAAE,OAAO,KAAK,IAAI,EAAE,SAAS,IAAI;AAAA,QACnC;AAEA,YAAI,EAAE,IAAI,KAAK,QAAQ,MAAM,EAAE,IAAI,OAAO,EAAE,IAAI,KAAK,QAAQ;AAC3D,cAAI,KAAK,WAAW,KAAK,UAAU,UAAU,KAAK,UAAU;AAC1D,iBAAK,eAAe,CAAC;AAAA,UACvB,OAAO;AACL,iBAAK,UAAU,OAAO,GAAG,CAAC;AAC1B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,iBAAiB;AACf,iBAAW,KAAK,KAAK,WAAW;AAC9B,YAAI,KAAK,OAAO;AACd,eAAK,IAAI,OAAO,GAAG,EAAE;AACrB,eAAK,IAAI,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAAA,QACrC,OAAO;AACL,gBAAM,KAAK,EAAE,IAAI,EAAE;AACnB,gBAAM,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW;AACvC,eAAK,IAAI,UAAU;AACnB,eAAK,IAAI,YAAY,EAAE;AACvB,cAAI,KAAK,UAAU;AACjB,kBAAM,OAAO,KAAK,IAAI,qBAAqB,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE;AAC3D,iBAAK,aAAa,GAAG,EAAE,KAAK;AAC5B,iBAAK,aAAa,GAAG,EAAE,MAAM;AAC7B,iBAAK,IAAI,cAAc;AAAA,UACzB,OAAO;AACL,iBAAK,IAAI,cAAc,EAAE;AAAA,UAC3B;AACA,eAAK,IAAI,OAAO,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE,MAAM,EAAE,CAAC;AAClD,eAAK,IAAI,OAAO,IAAI,EAAE;AACtB,eAAK,IAAI,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;AC1MO,MAAM,gBAAN,MAAoB;AAAA,IACzB,OAAO,WAAW,YAAY,CAAC,GAAG;AAChC,gBAAU,oBAAoB;AAE9B,QAAE,QAAQ,EAAE,GAAG,SAAS,UAAU,iBAAiB,QAAM;AACvD,WAAG,eAAe;AAClB,WAAG,cAAc,KAAK;AACtB,kBAAU,QAAQ,YAAY,GAAG,aAAa,GAAG,KAAK;AACtD,aAAK,gBAAgB,GAAG,aAAa;AAAA,MACvC,CAAC;AAAA,IACH;AAAA,IAEA,OAAO,gBAAgB,SAAS;AAC9B,YAAM,SAAS,QAAQ,QAAQ,cAAc;AAC7C,UAAG,CAAC;AAAQ,eAAO;AAEnB,YAAM,WAAW,EAAE,MAAM,EAAE,KAAK,eAAe;AAC/C,UAAG,UAAU;AACX,iBAAS,QAAQ;AAAA,MACnB,OAAO;AACL,cAAM,OAAO,IAAI,KAAK,MAAM,EAAE,KAAK;AACnC,UAAE,MAAM,EAAE,KAAK,iBAAiB,IAAI;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,YAAY,KAAK;AACf,WAAK,SAAS,SAAS,eAAe,SAAS,EAAE,QAAQ;AACzD,WAAK,MAAM;AACX,WAAK,aAAa,IAAI,cAAc,gDAAgD;AACpF,WAAK,cAAc,KAAK,cAAc;AACtC,WAAK,cAAc,KAAK,YAAY,cAAc,yBAAyB;AAC3E,WAAK,YAAY,KAAK,YAAY,cAAc,uBAAuB;AACvE,WAAK,aAAa,KAAK,YAAY,cAAc,wBAAwB;AACzE,WAAK,YAAY,KAAK,WAAW,cAAc,OAAO;AAEtD,WAAK,WAAW,UAAU,IAAI,cAAc;AAAA,IAC9C;AAAA,IAEA,UAAU;AACR,QAAE,KAAK,GAAG,EAAE,WAAW,eAAe;AACtC,WAAK,WAAW,UAAU,OAAO,cAAc;AAC/C,WAAK,YAAY,OAAO;AAAA,IAC1B;AAAA,IAEA,gBAAgB;AACd,YAAM,MAAM,SAAS,cAAc,KAAK;AACxC,UAAI,UAAU,IAAI,4BAA4B,UAAU,sBAAsB,MAAM;AACpF,UAAI,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAahB,WAAK,IAAI,MAAM,GAAG;AAClB,aAAO;AAAA,IACT;AAAA,IAEA,WAAW;AACT,YAAM,SAAS,KAAK,IAAI,cAAc,wBAAwB,EAAE,QAAQ;AACxE,YAAM,SAAS;AAAA,QACb;AAAA,MACF;AACA,aAAO,MAAM,GAAG,KAAK,oBAAoB,IAAI,gBAAgB,MAAM,GAAG,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC;AAAA,IAC5F;AAAA,IAEA,OAAO;AACL,WAAK,WAAW;AAChB,WAAK,SAAS,EAAE,KAAK,OAAK;AACxB,aAAK,WAAW,CAAC;AACjB,aAAK,UAAU;AAAA,MACjB,CAAC,EAAE,MAAM,SAAO;AACd,gBAAQ,MAAM,GAAG;AACjB,aAAK,SAAS,GAAG;AAAA,MACnB,CAAC;AACD,aAAO;AAAA,IACT;AAAA,IAEA,aAAa;AACX,WAAK,WAAW,UAAU,IAAI,QAAQ;AACtC,WAAK,UAAU,UAAU,IAAI,QAAQ;AACrC,WAAK,YAAY,UAAU,OAAO,QAAQ;AAC1C,aAAO;AAAA,IACT;AAAA,IAEA,WAAW;AACT,WAAK,WAAW,UAAU,IAAI,QAAQ;AACtC,WAAK,YAAY,UAAU,IAAI,QAAQ;AACvC,WAAK,UAAU,UAAU,OAAO,QAAQ;AACxC,aAAO;AAAA,IACT;AAAA,IAEA,YAAY;AACV,WAAK,YAAY,UAAU,IAAI,QAAQ;AACvC,WAAK,UAAU,UAAU,IAAI,QAAQ;AACrC,WAAK,WAAW,UAAU,OAAO,QAAQ;AACzC,aAAO;AAAA,IACT;AAAA,IAEA,WAAW,GAAG;AACZ,QAAE,QAAQ,QAAQ,CAAC,QAAQ,OAAO;AAChC,aAAK,cAAc,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC;AAAA,MAChE,CAAC;AAAA,IACH;AAAA,IAEA,cAAc,QAAQ,OAAO,OAAO,CAAC,GAAG;AACtC,YAAM,KAAK,SAAS,cAAc,IAAI;AAEtC,YAAM,QAAQ,SAAS,cAAc,IAAI;AAAG,SAAG,OAAO,KAAK;AAC3D,YAAM,UAAU,IAAI,UAAU;AAE9B,UAAG,OAAO,UAAU;AAClB,cAAM,SAAS,SAAS,cAAc,MAAM;AAAG,cAAM,OAAO,MAAM;AAClE,eAAO,UAAU,IAAI,WAAW;AAChC,eAAO,YAAY;AAAA,MACrB;AACA,YAAM,OAAO,SAAS,cAAc,GAAG;AAAG,YAAM,OAAO,IAAI;AAC3D,UAAG,OAAO;AAAU,aAAK,UAAU,IAAI,WAAW;AAClD,WAAK,OAAO,6BAA6B,OAAO;AAChD,WAAK,SAAS;AACd,WAAK,YAAY,GAAG,OAAO;AAE3B,YAAM,SAAS,SAAS,cAAc,IAAI;AAAG,SAAG,OAAO,MAAM;AAC7D,UAAG,OAAO,WAAW;AACnB,cAAM,YAAY,SAAS,cAAc,KAAK;AAAG,eAAO,OAAO,SAAS;AACxE,kBAAU,QAAQ;AAClB,kBAAU,SAAS;AACnB,kBAAU,MAAM,+BAA+B,OAAO;AAAA,MACxD;AAEA,YAAM,UAAU,SAAS,cAAc,IAAI;AAAG,SAAG,OAAO,OAAO;AAC/D,cAAQ,UAAU,IAAI,OAAO;AAC7B,YAAM,OAAO,SAAS,cAAc,KAAK;AAAG,cAAQ,OAAO,IAAI;AAC/D,WAAK,aAAa,mBAAmB,sBAAsB;AAC3D,WAAK,aAAa,2CAA2C,KAAK;AAClE,WAAK,aAAa,8CAA8C,KAAK,UAAU,KAAK,IAAI,CAAC;AACzF,WAAK,aAAa,0CAA0C,KAAK,MAAM;AACvE,WAAK,aAAa,2CAA2C,KAAK,OAAO;AACzE,WAAK,aAAa,0CAA0C,KAAK,UAAU,CAAC,kBAAkB,CAAC,CAAC;AAEhG,WAAK,UAAU,OAAO,EAAE;AAAA,IAC1B;AAAA,EACF;;;ACtJO,MAAM,kBAAN,MAAsB;AAAA,IAC3B,cAAc;AACZ,WAAK,WAAW;AAChB,WAAK,MAAM,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC1C,aAAK,UAAU;AACf,aAAK,SAAS;AAAA,MAChB,CAAC;AACD,WAAK,IAAI,QAAQ,OAAK;AAAE,aAAK,WAAW;AAAA,MAAK,CAAC;AAAA,IAChD;AAAA,IAEA,IAAI,UAAU;AAAE,aAAO,KAAK;AAAA,IAAI;AAAA,IAChC,QAAQG,OAAM;AAAE,aAAO,KAAK,IAAI,KAAK,GAAGA,KAAI;AAAA,IAAE;AAAA,IAC9C,SAASA,OAAM;AAAE,aAAO,KAAK,IAAI,MAAM,GAAGA,KAAI;AAAA,IAAE;AAAA,IAChD,WAAWA,OAAM;AAAE,aAAO,KAAK,IAAI,QAAQ,GAAGA,KAAI;AAAA,IAAE;AAAA,EACtD;;;ACXA,MAAMC,QAAN,MAAW;AAAA,IACT,OAAO,cAAc,KAAK;AACxB,aAAO,KAAK,YAAY,EAAE,KAAK;AAAA,IACjC;AAAA,IAEA,OAAO,aAAa,KAAK;AACrB,YAAM,UAAU,IAAI,YAAY;AAChC,YAAM,OAAO,QAAQ,OAAO,GAAG;AAE/B,YAAM,eAAe,OAAO,aAAa,MAAM,MAAM,IAAI;AACzD,aAAO,KAAK,YAAY;AAAA,IAC5B;AAAA,IAEA,OAAO,aAAa,KAAK;AACrB,YAAM,eAAe,KAAK,GAAG;AAC7B,YAAM,QAAQ,IAAI,WAAW,aAAa,MAAM;AAChD,eAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,cAAM,KAAK,aAAa,WAAW,CAAC;AAAA,MACxC;AACA,YAAM,UAAU,IAAI,YAAY;AAChC,aAAO,QAAQ,OAAO,KAAK;AAAA,IAC/B;AAAA,IAEA,OAAO,aAAa,KAAK;AACvB,YAAM,IAAI,IAAI,YAAY;AAC1B,UAAG,EAAE,MAAM,OAAO;AAAG,eAAO,SAAS,CAAC;AACtC,UAAG,KAAK;AAAO,eAAO;AACtB,UAAG,KAAK;AAAO,eAAO;AACtB,UAAG,KAAK;AAAS,eAAO;AACxB,UAAG,KAAK;AAAQ,eAAO;AACvB,UAAG,KAAK;AAAQ,eAAO;AACvB,UAAG,KAAK;AAAO,eAAO;AACtB,UAAG,KAAK;AAAS,eAAO;AACxB,UAAG,KAAK;AAAS,eAAO;AACxB,UAAG,KAAK;AAAQ,eAAO;AACvB,UAAG,KAAK;AAAO,eAAO;AACtB,UAAG,KAAK;AAAU,eAAO;AACzB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,aACL,QACA;AAAA,MACE,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,SAAS;AAAA,IACX,IAAI,CAAC,GACL;AACA,UAAI,UAAU;AAAM,eAAO;AAG3B,UAAI,gBAAgB,OACjB,UAAU,KAAK,EACf,QAAQ,oBAAoB,EAAE;AAGjC,sBAAgB,cAAc,QAAQ,mBAAmB,SAAS;AAElE,UAAI,WAAW;AACb,cAAM,UAAU,cAAc,MAC1B,MACA,UAAU,QAAQ,uBAAuB,MAAM;AAEnD,cAAM,cAAc,IAAI,OAAO,GAAG,eAAe,GAAG;AACpD,cAAM,SAAS,IAAI,OAAO,IAAI,WAAW,YAAY,GAAG;AAGxD,wBAAgB,cAAc,QAAQ,aAAa,SAAS;AAE5D,wBAAgB,cAAc,QAAQ,QAAQ,EAAE;AAAA,MAClD;AAEA,UAAI,CAAC,cAAc;AACjB,wBAAgB,cAAc,YAAY;AAAA,MAC5C;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,eAAe,SAAS,MAAM;AACnC,UAAG,WAAW;AAAoB,eAAO,QAAQ,IAAI,WAAW;AAChE,UAAG,WAAW;AAAqB,eAAO,QAAQ,IAAI,YAAY;AAClE,UAAG,WAAW;AAAiB,eAAO,QAAQ,IAAI,YAAY;AAC9D,UAAG,WAAW;AAAkB,eAAO,QAAQ,IAAI,YAAY;AAC/D,UAAG,WAAW;AAAkB,eAAO,QAAQ,IAAI,WAAW;AAC9D,UAAG,WAAW;AAAiB,eAAO,QAAQ,IAAI,kBAAkB;AACpE,UAAG,WAAW;AAAU,eAAO,QAAQ,IAAI,cAAc;AAAA,IAC3D;AAAA,IAEA,OAAO,WAAW,KAAK;AACrB,UAAG,OAAO;AAAG,eAAO;AACpB,UAAG,OAAO;AAAG,eAAO;AACpB,UAAG,OAAO;AAAG,eAAO;AACpB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,SAAS,KAAK;AACnB,aAAO,GAAG,MAAM,QAAQ,MAAM,GAAG,EAAE,SAAS,EAAE,QAAQ,OAAO,OAAK,EAAE,YAAY,CAAC;AAAA,IACnF;AAAA,EACF;AAEA,MAAM,kBAAN,MAAsB;AAAA,IACpB,OAAO,iBAAiBC,OAAM;AAAE,aAAa,KAAK,cAAc,GAAGA,KAAI;AAAA,IAAE;AAAA,IACzE,OAAO,oBAAoBA,OAAM;AAAE,aAAa,KAAK,iBAAiB,GAAGA,KAAI;AAAA,IAAE;AAAA,IAC/E,OAAO,uBAAuBA,OAAM;AAAE,aAAa,KAAK,oBAAoB,GAAGA,KAAI;AAAA,IAAE;AAAA,IACrF,OAAO,iBAAiBA,OAAM;AAAE,aAAa,KAAK,cAAc,GAAGA,KAAI;AAAA,IAAE;AAAA,IAEzE,OAAO,qBAAqB,KAAK;AAC/B,YAAM,SAAS,CAAC;AAChB,UAAI,iBAAiB,mBAAmB,EAAE,QAAQ,QAAM;AACtD,YAAG,GAAG,QAAQ,aAAa;AAAS,iBAAO;AAC3C,cAAM,MAAM,GAAG,cAAc,wBAAwB;AACrD,cAAM,IAAI,KAAK,QAAQ;AACvB,cAAM,IAAI,GAAG,QAAQ,WAAW;AAChC,YAAG,KAAK;AAAG,iBAAO,GAAG,QAAQ,aAAa;AAAA,MAC5C,CAAC;AAED,YAAM,kBAAkB;AAAA,QACtB;AAAA,QACA;AAAA,MACF;AACA,sBAAgB,QAAQ,QAAM;AAC5B,cAAM,IAAI,IAAI,cAAc,EAAE;AAC9B,YAAG,CAAC;AAAG,iBAAO;AACd,cAAM,KAAK,EAAE,cAAc,UAAU;AACrC,YAAG,CAAC,IAAI;AAAO,iBAAO;AACtB,eAAO,EAAE,QAAQ,QAAQD,MAAK,aAAa,GAAG,KAAK;AAAA,MACrD,CAAC;AAED,WAAK,cAAc,MAAM;AAEzB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,iBAAiB,QAAQ;AAC9B,YAAM,UAAU,KAAK,cAAc;AACnC,aAAO,QAAQ,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChD,YAAG,OAAO,WAAW,OAAO,SAAS;AACnC,gBAAM,IAAI,OAAO,IAAI,cAAc,eAAe,OAAO;AACzD,cAAG,CAAC;AAAG,mBAAO;AACd,gBAAM,KAAK,EAAE,cAAc,UAAU;AACrC,cAAG,CAAC;AAAI,mBAAO;AACf,YAAE,aAAa,QAAQ,MAAM;AAC7B,aAAG,QAAQA,MAAK,aAAa,KAAK;AAClC,YAAE,EAAE,EAAE,OAAO;AAAA,QACf,OAAO;AACL,iBAAO,OAAO,KAAK,KAAK;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEO,MAAM,sBAAN,MAA0B;AAAA,IAC/B,OAAO,WAAW,YAAY,CAAC,GAAG;AAAA,IASlC;AAAA,IAEA,YAAY,KAAK,KAAK;AACpB,WAAK,SAAS,SAAS,eAAe,SAAS,EAAE,QAAQ;AACzD,WAAK,MAAM;AACX,WAAK,MAAM;AACX,WAAK,sBAAsB,CAAC;AAE5B,WAAK,OAAO;AAAA,QACV,aAAa,KAAK,IAAI,QAAQ,kBAAkB;AAAA,QAChD,aAAa,KAAK,IAAI,QAAQ,kBAAkB;AAAA,MAClD;AAEA,iBAAW,OAAM,MAAK;AACpB,YAAI;AACF,eAAK,cAAc,aAAa,WAAW,eAAU;AACrD,gBAAM,QAAQ,IAAI;AAAA,YAChB,KAAK,iBAAiB;AAAA,YACtB,MAAM,KAAK,WAAW;AAAA,UACxB,CAAC;AACD,gBAAM,KAAK,cAAc;AACzB,gBAAM,KAAK,YAAY;AACvB,eAAK,cAAc,aAAa,WAAW,MAAM;AAAA,QACnD,SAAQ,KAAN;AACA,kBAAQ,MAAM,GAAG;AACjB,eAAK,cAAc,aAAa,SAAS,KAAK,WAAW,KAAK,cAAc,GAAG;AAAA,QACjF;AAAA,MACF,GAAG,GAAI;AAAA,IACT;AAAA,IAEA,OAAO;AACL,aAAO,MAAM;AAEb,QAAE,KAAK,GAAG,EAAE,GAAG,SAAS,wDAAwD,QAAM;AACpF,WAAG,eAAe;AAClB,aAAK,OAAO,GAAG,cAAc,QAAQ,mBAAmB,GAAG,GAAG,cAAc,QAAQ,IAAI;AACxF,eAAO;AAAA,MACT,CAAC;AAED,QAAE,KAAK,GAAG,EAAE,KAAK,8BAA8B,EAAE,GAAG,UAAU,QAAM;AAClE,cAAM,QAAQ,GAAG;AACjB,aAAK,oBAAoB;AACzB,aAAK,mBAAmB;AACxB,YAAG,MAAM,MAAM,KAAK,KAAK,QAAQ;AAC/B,gBAAM,OAAO,KAAK,iBAAiB;AACnC,gBAAM,OAAO,KAAK;AAClB,gBAAM,QAAQ,KAAK,KAAK,IAAI;AAAA,QAC9B;AACA,aAAK,gBAAgB,MAAM,OAAO,IAAI;AAAA,MACxC,CAAC;AAED,QAAE,KAAK,GAAG,EAAE,KAAK,8BAA8B,EAAE,GAAG,UAAU,QAAM;AAClE,cAAM,QAAQ,GAAG;AACjB,aAAK,qBAAqB;AAC1B,YAAG,MAAM,MAAM,KAAK,KAAK,QAAQ;AAC/B,gBAAM,OAAO,KAAK,mBAAmB;AACrC,gBAAM,OAAO,KAAK;AAClB,gBAAM,QAAQ,KAAK,KAAK,IAAI;AAAA,QAC9B;AACA,aAAK,kBAAkB,MAAM,OAAO,IAAI;AAAA,MAC1C,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IAOA,QAAQ,QAAQ;AACd,aAAO,OAAO,oBAAI,IAAI;AACtB,aAAO,QAAQ,KAAK,gBAAgB,OAAO,QAAQ,OAAO,KAAK,IAAI,MAAM,KAAK,gBAAgB,YAAY,QAAQ,OAAO,KAAK,IAAI;AAElI,UAAG,KAAK,KAAK,aAAa;AACxB,eAAO,oBAAoB,QAAQ,WAAS,OAAO,KAAK,IAAI,UAAU,OAAO,CAAC;AAE9E,YAAG,OAAO,QAAQ;AAAM,iBAAO,KAAK,IAAI,aAAa;AACrD,YAAG,OAAO,UAAU;AAAM,iBAAO,KAAK,IAAI,iBAAiB;AAC3D,YAAG,OAAO,UAAU;AAAM,iBAAO,KAAK,IAAI,qBAAqB;AAC/D,YAAG,OAAO,YAAY;AAAM,iBAAO,KAAK,IAAI,YAAY;AACxD,YAAG,OAAO;AAAO,iBAAO,KAAK,IAAI,cAAc;AAC/C,YAAG,OAAO;AAAQ,iBAAO,KAAK,IAAI,eAAe;AACjD,YAAG,OAAO;AAAO,iBAAO,KAAK,IAAI,cAAc;AAC/C,YAAG,OAAO;AAAa,iBAAO,KAAK,IAAI,oBAAoB;AAC3D,YAAG,OAAO;AAAU,iBAAO,KAAK,IAAI,iBAAiB;AACrD,YAAG,OAAO;AAAW,iBAAO,KAAK,IAAI,kBAAkB;AACvD,YAAG,OAAO;AAAa,iBAAO,KAAK,IAAI,oBAAoB;AAC3D,YAAG,OAAO;AAAa,iBAAO,KAAK,IAAI,eAAe;AACtD,YAAG,OAAO,gBAAgB;AAAM,iBAAO,KAAK,IAAI,gBAAgB;AAChE,YAAG,OAAO,eAAe;AAAM,iBAAO,KAAK,IAAI,oBAAoB;AACnE,YAAG,OAAO,gBAAgB;AAAM,iBAAO,KAAK,IAAI,qBAAqB;AACrE,YAAG,OAAO,SAAS;AAAM,iBAAO,KAAK,IAAI,WAAW,OAAO,OAAO;AAClE,YAAG,OAAO,WAAW;AAAM,iBAAO,KAAK,IAAI,YAAY,OAAO,SAAS;AACvE,YAAG,OAAO,QAAQ;AAAM,iBAAO,KAAK,IAAI,UAAU,OAAO,MAAM;AAC/D,YAAG,OAAO,WAAW;AAAM,iBAAO,KAAK,IAAI,aAAa,OAAO,SAAS;AAAA,MAC1E;AAEA,aAAO,OAAO;AAAA,IAChB;AAAA,IAEA,gBAAgB;AACd,WAAK,QAAQ,QAAQ,KAAK,cAAc;AACxC,UAAG,CAAC,KAAK,mBAAmB;AAC1B,aAAK,oBAAoB,CAAC;AAC1B,eAAO,QAAQ,KAAK,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,kBAAkB,KAAK,EAAE,MAAM;AAC3F,eAAO,QAAQ,KAAK,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,kBAAkB,KAAK,CAAC;AAAA,MACzF;AAAA,IACF;AAAA,IAEA,gBAAgB;AACd,YAAM,QAAQ,CAAC;AAEf,WAAK,QAAQ,MAAM,QAAQ,YAAU;AACnC,SAAC,OAAO,QAAQ,KAAK,QAAQ,MAAM,GAAG,QAAQ,SAAO;AACnD,gBAAM,SAAS,CAAC;AAChB,gBAAM,KAAK,KAAK,OAAO,EAAE;AAAA,QAC3B,CAAC;AAAA,MACH,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IAEA,aAAa,IAAI;AACf,YAAM,IAAI,GAAG,cAAc,wBAAwB,GAAG,QAAQ;AAC9D,UAAG,KAAK;AAAM,eAAO,KAAK,kBAAkB,GAAG,QAAQ,cAAc;AACrE,aAAO,KAAK,QAAQ,MAAM,GAAG,QAAQ,YAAY,UAAU;AAAA,IAC7D;AAAA,IAOA,mBAAmB;AACjB,YAAM,OAAO,KAAK,cAAc,GAAG,SAAS;AAC5C,YAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/C,mBAAW,OAAK;AACd,gBAAM,KAAK,IAAI,QAAQ,cAAc,EAAE,KAAK,OAAK,EAAE,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,UAAQ;AACzF,iBAAK,kBAAkB;AACvB,iBAAK,gBAAgB,SAAS,KAAK,gBAAgB,MAAM,IAAI,OAAKA,MAAK,cAAc,CAAC,CAAC;AACvF,iBAAK,gBAAgB,cAAc,KAAK,gBAAgB,WAAW,IAAI,OAAKA,MAAK,cAAc,CAAC,CAAC;AACjG,iBAAK,cAAc,MAAM,WAAW,IAAU,KAAK,aAAa,KAAK,gBAAgB,MAAM,MAAM,IAAI;AACrG,oBAAQ,KAAK,eAAe;AAAA,UAC9B,CAAC,EAAE,MAAM,MAAM;AAAA,QACjB,GAAG,EAAE;AAAA,MACP,CAAC;AAED,cAAQ,MAAM,SAAO;AACnB,aAAK,cAAc,MAAM,SAAS,KAAK,WAAW,KAAK,cAAc,GAAG;AAAA,MAC1E,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IAEA,aAAa;AACX,YAAM,OAAO,KAAK,cAAc,GAAG,SAAS;AAE5C,YAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/C,mBAAW,OAAK;AACd,gBAAM,KAAK,IAAI,QAAQ,SAAS,EAAE,KAAK,OAAK,EAAE,KAAK,EAAE,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,UAAQ;AACpF,iBAAK,aAAa;AAClB,iBAAK,WAAW,UAAU,KAAK,WAAW,OAAO,IAAI,OAAKA,MAAK,cAAc,CAAC,CAAC;AAC/E,iBAAK,WAAW,YAAY,KAAK,WAAW,SAAS,IAAI,OAAKA,MAAK,cAAc,CAAC,CAAC;AACnF,iBAAK,WAAW,aAAa,KAAK,WAAW,UAAU,IAAI,OAAKA,MAAK,cAAc,CAAC,CAAC;AACrF,iBAAK,WAAW,gBAAgB,KAAK,WAAW,aAAa,IAAI,OAAKA,MAAK,cAAc,CAAC,CAAC;AAC3F,iBAAK,WAAW,YAAY,CAAC,SAAS,MAAM;AAC5C,iBAAK,WAAW,MAAM,QAAQ,OAAK;AACjC,gBAAE,UAAUA,MAAK,cAAc,EAAE,QAAQ;AAGzC,kBAAG,KAAK,KAAK,aAAa;AACxB,oBAAG,EAAE,YAAY,WAAW,EAAE,OAAO,WAAW,MAAM;AAAG,yBAAO,EAAE;AAClE,oBAAG,EAAE;AAAQ,oBAAE,SAASA,MAAK,aAAa,EAAE,MAAM;AAClD,oBAAG,EAAE;AAAU,oBAAE,WAAW,WAAW,EAAE,QAAQ;AAAA,cACnD;AACA,kBAAG,KAAK,WAAW,QAAQ,SAAS,EAAE,KAAK;AAAG,kBAAE,SAAS;AACzD,kBAAG,KAAK,WAAW,UAAU,SAAS,EAAE,KAAK;AAAG,kBAAE,WAAW;AAC7D,kBAAG,KAAK,WAAW,WAAW,SAAS,EAAE,KAAK;AAAG,kBAAE,YAAY;AAC/D,kBAAG,KAAK,WAAW,cAAc,SAAS,EAAE,KAAK;AAAG,kBAAE,cAAc;AACpE,qBAAO,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM;AACpC,oBAAG,CAAC,KAAK,WAAW,UAAU,SAAS,CAAC;AAAG,uBAAK,WAAW,UAAU,KAAK,CAAC;AAAA,cAC7E,CAAC;AAAA,YACH,CAAC;AACD,iBAAK,cAAc,MAAM,WAAW,IAAU,KAAK,aAAa,KAAK,WAAW,MAAM,MAAM,IAAI;AAEhG,oBAAQ,KAAK,eAAe;AAAA,UAC9B,CAAC,EAAE,MAAM,MAAM;AAAA,QACjB,GAAG,EAAE;AAAA,MACP,CAAC;AAED,cAAQ,MAAM,SAAO;AACnB,aAAK,cAAc,MAAM,SAAS,KAAK,WAAW,KAAK,cAAc,GAAG;AAAA,MAC1E,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB;AACd,YAAM,OAAO,KAAK,cAAc,GAAG,SAAS;AAC5C,YAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/C,mBAAW,OAAM,MAAK;AACpB,cAAI;AACF,iBAAK,UAAU;AAAA,cACb,MAAM;AAAA,cACN,GAAG;AAAA,cACH,OAAO,CAAC;AAAA,cACR,OAAO,CAAC;AAAA,cACR,OAAO,KAAK,WAAW,MAAM,MAAM;AAAA,cACnC,SAAS,oBAAI,IAAI;AAAA,cACjB,UAAU,CAAC;AAAA,cACX,OAAO,CAAC;AAAA,cACR,aAAa;AAAA,cACb,cAAc;AAAA,cACd,YAAY;AAAA,YACd;AAEA,iBAAK,IAAI,iBAAiB,6CAA6C,EAAE,QAAQ,QAAM;AACrF,oBAAM,IAAI,GAAG,cAAc,wBAAwB,GAAG,QAAQ;AAC9D,kBAAG,KAAK;AAAO,qBAAK,QAAQ,QAAQ,IAAI,GAAG,QAAQ,WAAW,KAAK,KAAK;AAAA,YAC1E,CAAC;AAED,kBAAM,UAAgB,KAAK,aAAa,KAAK,WAAW,MAAM,MAAM;AAGpE,iBAAK,WAAW,MAAM,QAAQ,UAAQ;AACpC,kBAAG,KAAK;AAAM,qBAAK,KAAK,QAAQ,OAAK;AACnC,sBAAG,EAAE,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,GAAG,IAAI;AAC7C,yBAAK,KAAK,OAAO,CAAC;AAAA,kBACpB;AAAA,gBACF,CAAC;AAAA,YACH,CAAC;AAED,kBAAM,IAAI,QAAQ,CAAC,WAAW,aAAa;AACzC,mBAAK,gBAAgB,WAAW,OAAK;AAEnC,qBAAK,cAAc,MAAM,MAAM,IAAU,KAAK,aAAa,KAAK,QAAQ,MAAM,SAAS,KAAK,QAAQ,MAAM,MAAM,SAAe,KAAK,aAAa,KAAK,WAAW,MAAM,SAAS,KAAK,QAAQ,CAAC,IAAI;AAAA,cACpM,CAAC;AAAA,YACH,CAAC;AAED,iBAAK,cAAc,MAAM,WAAW,IAAU,KAAK,aAAa,KAAK,QAAQ,MAAM,MAAM,IAAI;AAC7F,oBAAQ;AAAA,UACV,SAAS,KAAP;AAAc,mBAAO,GAAG;AAAA,UAAE;AAAA,QAC9B,GAAG,EAAE;AAAA,MACP,CAAC;AAED,cAAQ,MAAM,SAAO;AACnB,aAAK,cAAc,MAAM,SAAS,KAAK,WAAW,KAAK,cAAc,GAAG;AAAA,MAC1E,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IAEA,cAAc;AACZ,YAAM,OAAO,KAAK,cAAc,GAAG,SAAS;AAE5C,YAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC/C,mBAAW,OAAK;AACd,cAAI;AACF,iBAAK,cAAc;AAEnB,gBAAG,CAAC,KAAK,iBAAiB;AACxB,mBAAK,kBAAkB;AACvB,8BAAgB,iBAAiB,IAAI;AACrC,kBAAG,KAAK;AAAkB,uBAAO,QAAQ;AAAA,YAC3C;AAEA,kBAAM,YAAY,KAAK,IAAI,cAAc,6BAA6B;AACtE,kBAAM,QAAQ,KAAK,IAAI,cAAc,oCAAoC;AAKzE,mBAAO,KAAK,YAAY,kBAAkB,aAAa,yBAAyB,WAAW;AAC3F,sBAAU,YAAY;AAEtB,gBAAI,gBAAgB,KAAK,QAAQ;AACjC,gBAAG,KAAK,QAAQ;AAAa,8BAAgB,cAAc,MAAM,GAAG,KAAK,QAAQ,WAAW;AAC5F,gBAAI,SAAS,KAAK,QAAQ,MAAM,SAAS,cAAc;AAEvD,kBAAM,WAAW,KAAK,IAAI,cAAc,yBAAyB,EAAE,UAAU;AAAG,qBAAS,UAAU,IAAI,MAAM;AAC7G,kBAAM,gBAAgB,KAAK,IAAI,cAAc,8BAA8B,EAAE,UAAU;AAAG,0BAAc,UAAU,IAAI,MAAM;AAC5H,kBAAM,oBAAoB,KAAK,IAAI,cAAc,kCAAkC,EAAE,UAAU;AAAG,8BAAkB,UAAU,IAAI,MAAM;AACxI,kBAAM,eAAe,CAAC;AACtB,iBAAK,IAAI,iBAAiB,4BAA4B,EAAE,QAAQ,QAAM;AACpE,2BAAa,GAAG,QAAQ,WAAW,GAAG,UAAU;AAChD,2BAAa,GAAG,QAAQ,SAAS,UAAU,IAAI,MAAM;AAAA,YACvD,CAAC;AAED,kBAAM,aAAa;AAAA,cACjB,CAAC,gBAAgB,cAAc;AAAA,cAC/B,CAAC,iBAAiB,kBAAkB;AAAA,cACpC,CAAC,cAAc,cAAc;AAAA,cAC7B,CAAC,eAAe,aAAa;AAAA,cAC7B,CAAC,eAAe,SAAS;AAAA,cACzB,CAAC,eAAe,cAAc;AAAA,cAC9B,CAAC,eAAe,gBAAgB;AAAA,YAClC;AAGA,0BAAc,QAAQ,UAAQ;AAC5B,oBAAM,QAAQ,MAAM,UAAU,IAAI;AAClC,oBAAM,gBAAgB,WAAW;AACjC,oBAAM,aAAa,cAAc,MAAM,KAAK,IAAI;AAChD,oBAAM,UAAU,OAAO,QAAQ;AAG/B,oBAAM,iBAAiB,YAAY,EAAE,QAAQ,QAAM,GAAG,YAAY,KAAK,GAAG,QAAQ,QAAQ,EAAE;AAC5F,oBAAM,iBAAiB,0BAA0B,EAAE,QAAQ,QAAM,GAAG,OAAO,oBAAoB,KAAK,MAAM;AAC1G,oBAAM,iBAAiB,wBAAwB,EAAE,QAAQ,QAAM,GAAG,OAAO,oBAAoB,KAAK,WAAW;AAG7G,oBAAM,cAAc,uBAAuB,EAAE,UAAU,OAAO,gBAAgB,KAAK,KAAK;AAGxF,oBAAM,SAAS,MAAM,cAAc,qBAAqB;AACxD,kBAAG,QAAQ;AACT,oBAAG,KAAK,MAAM;AACZ,oBAAE,QAAQ,EAAE,KAAK,+BAA+B,KAAK,MAAM,EAAE,SAAS,MAAM;AAC5E,sBAAG,KAAK,QAAQ,KAAK,UAAU,KAAK,UAAU,KAAK;AAAU,2BAAO,OAAO,KAAK;AAAA,gBAClF;AAEA,oBAAG,KAAK,MAAM;AACZ,yBAAO,OAAa,KAAK,aAAa,KAAK,IAAI,GAAG,SAAS,UAAU,CAAC;AAAA,gBACxE,WAAW,KAAK,QAAQ;AACtB,yBAAO,OAAa,KAAK,aAAa,KAAK,MAAM,GAAG,cAAc,UAAU,CAAC;AAAA,gBAC/E,WAAW,KAAK,QAAQ;AACtB,yBAAO,OAAa,KAAK,aAAa,KAAK,MAAM,GAAG,kBAAkB,UAAU,CAAC;AAAA,gBACnF,WAAW,KAAK,UAAU;AACxB,yBAAO,OAAO,GAAS,KAAK,aAAa,KAAK,QAAQ,KAAK;AAAA,gBAC7D;AAAA,cACF;AAGA,oBAAM,QAAQ,MAAM,cAAc,oBAAoB;AACtD,kBAAG,OAAO;AACR,oBAAG,KAAK;AAAY,oBAAE,QAAQ,EAAE,KAAK,6BAA6B,EAAE,SAAS,kBAAkB,EAAE,KAAK,SAAS,gBAAgB,KAAK,QAAQ,EAAE,SAAS,KAAK;AAC5J,oBAAG,KAAK,UAAU,CAAC,KAAK;AAAY,oBAAE,QAAQ,EAAE,KAAK,6BAA6B,EAAE,SAAS,mBAAmB,EAAE,KAAK,SAAS,mBAAmB,KAAK,QAAQ,EAAE,SAAS,KAAK;AAChL,oBAAG,KAAK;AAAa,oBAAE,QAAQ,EAAE,KAAK,6BAA6B,EAAE,SAAS,kBAAkB,EAAE,KAAK,SAAS,iBAAiB,KAAK,kBAAkB,oBAAoB,EAAE,SAAS,KAAK;AAC5L,oBAAG,KAAK;AAAc,oBAAE,QAAQ,EAAE,KAAK,6BAA6B,KAAK,cAAc,EAAE,SAAS,iBAAiB,EAAE,KAAK,SAAS,iBAAiB,KAAK,cAAc,EAAE,SAAS,KAAK;AAEvL,2BAAW,QAAQ,CAAC,CAAC,KAAK,IAAI,MAAM;AAClC,sBAAG,KAAK,QAAQ;AAAM,2BAAO;AAC7B,oBAAE,QAAQ,EACP,SAAS,6DAA6D,EACtE,OAAO,aAAa,OAAO,UAAU,GAAG,KAAK,IAAI,EACjD,SAAS,KAAK;AAAA,gBACnB,CAAC;AAED,oBAAG,KAAK,YAAY;AAClB,oBAAE,QAAQ,EACP,SAAS,6DAA6D,EACtE,OAAO,aAAa,KAAK,WAAW,yBAAyB,eAAe,eAAe,UAAU,GAAG,KAAK,UAAU,EACvH,SAAS,KAAK;AAAA,gBACnB;AAEA,oBAAG,KAAK,QAAQ;AACd,oBAAE,QAAQ,EACP,SAAS,gBAAgB,EACzB,OAAO,IAAI,KAAK,WAAW,KAAK,cAAc,EAC9C,SAAS,KAAK;AAAA,gBACnB;AAAA,cACF;AAEA,oBAAM,WAAW,MAAM,cAAc,uBAAuB;AAC5D,kBAAG,UAAU;AAEX,oBAAG,KAAK,cAAc;AACpB,wBAAM,WAAW,EAAE,KAAK,EAAE,KAAK,QAAQ,4BAA4BA,MAAK,aAAa,KAAK,YAAY,GAAG,EAAE,KAAK,KAAK,YAAY;AACjI,sBAAG,KAAK,cAAc,MAAM;AAC1B,sBAAE,OAAO,EAAE,OAAO,0BAA0B,UAAU,UAAU,KAAK,YAAY,EAAE,SAAS,QAAQ;AAAA,kBACtG,OAAO;AACL,sBAAE,OAAO,EAAE,OAAO,0BAA0B,QAAQ,EAAE,SAAS,QAAQ;AAAA,kBACzE;AAAA,gBACF;AAGA,oBAAG,KAAK,aAAa;AACnB,oBAAE,OAAO,EAAE,OAAO,GAAG,KAAK,4CAA4C,KAAK,gBAAgBA,MAAK,eAAe,KAAK,SAAS,KAAK,WAAW,SAAS,KAAK,eAAeA,MAAK,WAAW,KAAK,YAAY,QAAQ,EAAE,SAAS,QAAQ;AAAA,gBACxO;AAGA,oBAAG,KAAK;AAAQ,oBAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,GAAG,GAAG,KAAK,QAAQ,EAAE,SAAS,QAAQ;AACrG,oBAAG,KAAK;AAAO,oBAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,SAAS,GAAG,GAAG,KAAK,OAAO,EAAE,SAAS,QAAQ;AAClG,oBAAG,KAAK;AAAa,oBAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,GAAG,GAAG,KAAK,aAAa,EAAE,SAAS,QAAQ;AAGrH,oBAAG,KAAK,UAAU;AAChB,wBAAM,QAAQ;AACd,sBAAG,KAAK,SAAS,SAAS,OAAO;AAC/B,sBAAE,WAAW,EAAE;AAAA,sBACb,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,GAAG,EAAE,QAAQ,EAAE,SAAS,qBAAqB,EAAE,KAAK,KAAK,SAAS,MAAM,GAAG,KAAK,IAAI,KAAK,CAAC;AAAA,sBAC/I,KAAK;AAAA,oBACP,EAAE,SAAS,QAAQ;AAAA,kBACrB,OAAO;AACL,sBAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,GAAG,KAAK,QAAQ,EAAE,SAAS,QAAQ;AAAA,kBACtF;AAAA,gBACF;AAGA,oBAAG,KAAK;AAAa,oBAAE,OAAO,EAAE,OAAO,gCAAgC,EAAE,SAAS,QAAQ;AAC1F,oBAAG,KAAK;AAAO,oBAAE,OAAO,EAAE,OAAO,mBAAmB,KAAK,QAAQ,EAAE,SAAS,QAAQ;AACpF,oBAAG,KAAK;AAAQ,oBAAE,OAAO,EAAE,OAAO,mBAAmB,KAAK,SAAS,EAAE,SAAS,QAAQ;AAGtF,sBAAM,MAAM,SAAS,cAAc,KAAK;AACxC,oBAAI,UAAU,IAAI,MAAM;AACxB,oBAAI,YAAY,KAAK,UAAU,MAAM,MAAM,CAAC;AAC5C,sBAAM,cAAc,SAAS,cAAc,SAAS;AACpD,4BAAY,YAAY;AACxB,4BAAY,OAAO,GAAG;AACtB,yBAAS,OAAO,WAAW;AAAA,cAC7B;AAGA,oBAAM,SAAS,MAAM,cAAc,6BAA6B;AAChE,oBAAM,UAAU,OAAO,cAAc,mBAAmB;AACxD,qBAAO,aAAa,QAAQ,KAAK,OAAO;AACxC,oBAAM,WAAW,OAAO,KAAK,YAAY,kBAAkB,aAAa;AAExE,wBAAU,OAAO,KAAK;AACtB,kBAAG,UAAU;AACX,sBAAM,UAAU,IAAI,iBAAiB;AACrC,wBAAQ,aAAa,YAAY,+BAA+B,KAAK,SAAS;AAC9E,yBAAS,QAAQ,KAAK;AAAA,cACxB,OAAO;AACL,wBAAQ,aAAa,OAAO,+BAA+B,KAAK,SAAS;AAAA,cAC3E;AAAA,YAUF,CAAC;AAED,gBAAG,QAAQ;AACT,wBAAU,QAAQ,KAAK,mBAAmB,MAAM,CAAC;AACjD,wBAAU,OAAO,KAAK,mBAAmB,MAAM,CAAC;AAAA,YAClD;AAEA,iBAAK,cAAc,MAAM,SAAS;AAClC,oBAAQ;AAAA,UACV,SAAS,KAAP;AAAc,mBAAO,GAAG;AAAA,UAAE;AAAA,QAC9B,GAAG,EAAE;AAAA,MACP,CAAC;AAED,cAAQ,MAAM,SAAO;AACnB,aAAK,cAAc,MAAM,SAAS,KAAK,WAAW,KAAK,cAAc,GAAG;AAAA,MAC1E,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IAMA,cAAc;AACZ,UAAG,CAAC,KAAK,WAAW,CAAC,KAAK,QAAQ;AAAM,eAAO,QAAQ,OAAO;AAE9D,UAAG,KAAK;AAAkB,qBAAa,KAAK,gBAAgB;AAC5D,WAAK,mBAAmB,WAAW,OAAM,MAAK;AAC5C,eAAO,KAAK;AACZ,aAAK,IAAI,cAAc,uBAAuB,EAAE,UAAU,IAAI,qBAAqB,YAAY;AAC/F,aAAK,cAAc,aAAa,WAAW,eAAU;AACrD,aAAK,cAAc,GAAG,SAAS;AAC/B,aAAK,cAAc,GAAG,SAAS;AAC/B,cAAM,KAAK,cAAc;AACzB,cAAM,KAAK,YAAY;AACvB,aAAK,oBAAoB,QAAQ,OAAK,EAAE,QAAQ,CAAC;AACjD,aAAK,sBAAsB,CAAC;AAC5B,aAAK,cAAc,aAAa,WAAW,MAAM;AAAA,MACnD,GAAG,EAAE;AAEL,YAAM,UAAU,IAAI,gBAAgB;AACpC,WAAK,oBAAoB,KAAK,OAAO;AAErC,aAAO;AAAA,IACT;AAAA,IAEA,gBAAgB,SAAS,UAAU;AACjC,YAAM,iBAAiB;AACvB,YAAM,QAAQ;AACd,YAAM,MAAM,YAAY,IAAI;AAC5B,UAAI,IAAI;AAER,aAAM,KAAK,QAAQ,MAAM,UAAU,KAAK,kBAAmB,YAAY,IAAI,IAAI,OAAO,OAAQ;AAC5F,cAAM,SAAS,KAAK,QAAQ,MAAM,MAAM;AACxC,YAAI,kBAAkB;AAEtB,YAAG,KAAK,QAAQ,QAAQ,QAAQ,CAAC,OAAO;AAAM,eAAK,QAAQ,MAAM;AAEjE,YAAG,KAAK,gBAAgB;AACtB,cAAI;AACF,8BAAkB,KAAK,eAAe,MAAM;AAAA,UAC9C,SAAS,KAAP;AACA,iBAAK,QAAQ;AACb,oBAAQ,MAAM,yBAAyB,GAAG;AAC1C,gBAAG,KAAK,QAAQ,eAAe,IAAI;AACjC,mBAAK,mBAAmB,KAAK,WAAW,KAAK,cAAc,KAAK,WAAW;AAC3E,mBAAK,QAAQ,OAAO;AACpB,qBAAO,QAAQ;AAAA,YACjB,OAAO;AACL,mBAAK,mBAAmB,KAAK,WAAW,KAAK,cAAc,KAAK,KAAK,QAAQ,YAAY;AAAA,YAC3F;AAAA,UACF;AAAA,QACF;AAEA,YAAG,CAAC,iBAAiB;AACnB,eAAK,QAAQ,QAAQ,QAAQ,CAAC,GAAG,MAAM;AACrC,gBAAG;AAAiB,qBAAO;AAC3B,kBAAM,SAAS,OAAO,KAAK,IAAI,CAAC;AAChC,8BAAkB,MAAM;AACxB,gBAAG,iBAAiB;AAClB,mBAAK,QAAQ,SAAS,OAAO;AAC7B,mBAAK,QAAQ,SAAS;AAAA,YACxB;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAG,CAAC,iBAAiB;AACnB,eAAK,QAAQ,MAAM,KAAK,MAAM;AAE9B,cAAG,KAAK,cAAc;AACpB,gBAAI;AACF,mBAAK,aAAa,MAAM;AAAA,YAC1B,SAAS,KAAP;AACA,mBAAK,QAAQ;AACb,sBAAQ,MAAM,uBAAuB,GAAG;AACxC,kBAAG,KAAK,QAAQ,aAAa,IAAI;AAC/B,qBAAK,iBAAiB,KAAK,WAAW,KAAK,cAAc,KAAK,WAAW;AACzE,qBAAK,QAAQ,OAAO;AACpB,uBAAO,QAAQ;AAAA,cACjB,OAAO;AACL,qBAAK,iBAAiB,KAAK,WAAW,KAAK,cAAc,KAAK,KAAK,QAAQ,UAAU;AAAA,cACvF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,aAAK,QAAQ;AACb;AAAA,MACF;AACA,iBAAW,CAAC;AAEZ,UAAG,KAAK,QAAQ,MAAM,QAAQ;AAE1B,8BAAsB,OAAK,KAAK,gBAAgB,SAAS,QAAQ,CAAC;AAAA,MAEtE,OAAO;AACL,aAAK,QAAQ,OAAO;AACpB,YAAG,KAAK;AAAc,eAAK,kBAAkB,KAAK,QAAQ,KAAK;AAC/D,aAAK,cAAc;AACnB,YAAG,KAAK;AAAiB,0BAAgB,qBAAqB,KAAK,GAAG;AACtE,gBAAQ;AAAA,MACV;AAAA,IACF;AAAA,IAEA,kBAAkB,OAAO,cAAc,OAAO;AAC5C,UAAG,CAAC,OAAO;AACT,eAAO,KAAK;AACZ,YAAG;AAAa,eAAK,YAAY;AACjC,eAAO;AAAA,MACT;AAEA,WAAK,iBAAiB,UAAQ;AAC5B,cAAM,OAAO,oBAAI,IAAI;AAErB,aAAK,IAAI,MAAM,KAAK,QAAQ,CAAC;AAC7B,aAAK,IAAI,WAAW,IAAI;AACxB,aAAK,IAAI,QAAQ,KAAK,GAAG;AACzB,aAAK,IAAI,QAAQ,IAAI;AAErB,aAAK,IAAI,OAAO,IAAI,SAAS;AAC3B,mBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,gBAAG,KAAK,KAAK,IAAI,KAAK,EAAE;AAAG,qBAAO;AAAA,UACpC;AACA,iBAAO;AAAA,QACT,CAAC;AAED,aAAK,IAAI,SAAS,IAAI,WAAW;AAC/B,gBAAM,cAAc,OAAO,OAAO,GAAG,EAAE,KAAK,YAAY,OAAO,IAAI,IAAI;AAEvE,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,gBAAI,QAAQ,OAAO;AACnB,gBAAG,MAAM,MAAM;AAAK,sBAAQ,MAAM,MAAM,CAAC;AACzC,gBAAG,eAAe,KAAK,UAAU;AAAM,mBAAK,KAAK,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ;AAAA,UACpF;AACA,iBAAO;AAAA,QACT,CAAC;AAED,aAAK,WAAW,UAAU,QAAQ,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC;AAGjE,eAAQ,IAAI,SAAS,OAAO,GAAG,KAAK,KAAK,GAAG,KAAK,EAAG,MAAM,GAAG,KAAK,OAAO,CAAC;AAAA,MAC5E;AAEA,UAAG;AAAa,aAAK,YAAY;AACjC,aAAO;AAAA,IACT;AAAA,IAEA,qBAAqB;AACnB,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,gBAAgB,OAAO,cAAc,OAAO;AAC1C,UAAG,CAAC,OAAO;AACT,eAAO,KAAK;AACZ,YAAG;AAAa,eAAK,YAAY;AACjC,eAAO;AAAA,MACT;AAEA,WAAK,eAAe,UAAQ;AAC1B,cAAM,OAAO,oBAAI,IAAI;AAErB,aAAK,IAAI,MAAM,KAAK,QAAQ,CAAC;AAC7B,aAAK,IAAI,WAAW,IAAI;AACxB,aAAK,IAAI,QAAQ,KAAK,GAAG;AACzB,aAAK,IAAI,QAAQ,IAAI;AAErB,aAAK,IAAI,UAAU,OAAK,KAAK,IAAI,KAAK,EAAE,QAAQ,UAAU,UAAU,UAAU,CAAC;AAE/E,aAAK,IAAI,OAAO,IAAI,WAAW;AAC7B,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,iBAAK,QAAQ,MAAM,QAAQ,CAAC;AAC5B,iBAAK,QAAQ,MAAM,IAAI,OAAO,QAAQ;AACtC,gBAAG,KAAK,OAAO,OAAO;AAAM,mBAAK,QAAQ,MAAM,IAAI,OAAO,OAAO,KAAK,OAAO;AAAA,UAC/E;AACA,iBAAO;AAAA,QACT,CAAC;AAED,aAAK,IAAI,SAAS,IAAI,WAAW;AAC/B,eAAK,QAAQ,MAAM,UAAU,CAAC;AAE9B,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,kBAAM,IAAI,KAAK,OAAO;AACtB,gBAAI,MAAM,KAAK,QAAQ,MAAM;AAC7B,kBAAM,IAAI,OAAO,QAAQ,CAAC;AAE1B,gBAAG,MAAM,QAAQ,CAAC,GAAG;AACnB,gBAAE,QAAQ,QAAM;AACd,oBAAI,QAAQ;AACZ,oBAAI;AAAA,cACN,CAAC;AAAA,YACH,OAAO;AACL,kBAAI,OAAO;AACX,kBAAI;AAAA,YACN;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAED,aAAK,IAAI,OAAO,IAAI,WAAW;AAC7B,eAAK,QAAQ,MAAM,QAAQ,CAAC;AAE5B,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,kBAAM,IAAI,CAAC,CAAC,KAAK,OAAO;AACxB,gBAAI,MAAM,KAAK,QAAQ,MAAM;AAC7B,kBAAM,IAAI,OAAO,QAAQ,CAAC;AAC1B,gBAAI,OAAO;AACX,gBAAI;AAAA,UACN;AACA,iBAAO;AAAA,QACT,CAAC;AAED,aAAK,IAAI,SAAS,IAAIC,UAAS;AAC7B,gBAAM,QAAQA,MAAK,IAAI;AACvB,cAAI,MAAM,KAAK,QAAQ,MAAM,UAAU,CAAC;AACxC,UAAAA,MAAK,QAAQ,SAAO;AAAE,kBAAM,IAAI,SAAS,CAAC;AAAA,UAAE,CAAC;AAC7C,cAAI,WAAW;AACf,cAAI;AACJ,iBAAO;AAAA,QACT,CAAC;AAED,aAAK,WAAW,UAAU,QAAQ,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC;AAGjE,eAAQ,IAAI,SAAS,OAAO,GAAG,KAAK,KAAK,GAAG,KAAK,EAAG,MAAM,GAAG,KAAK,OAAO,CAAC;AAAA,MAC5E;AAEA,UAAG;AAAa,aAAK,YAAY;AACjC,aAAO;AAAA,IACT;AAAA,IAEA,mBAAmB;AACjB,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAOA,gBAAgB;AACd,YAAM,OAAO,KAAK,IAAI,cAAc,uBAAuB;AAC3D,YAAM,QAAQ,KAAK,IAAI,cAAc,mCAAmC;AACxE,YAAM,eAAe,CAAC;AACtB,WAAK,UAAU,OAAO,UAAU,qBAAqB,YAAY;AAEjE,aAAO,QAAQ,KAAK,QAAQ,KAAK,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAM;AAC5D,cAAM,CAAC,QAAQ,KAAK,IAAI,KAAK,MAAM,GAAG;AACtC,qBAAa,YAAY,CAAC;AAC1B,YAAG;AAAO,uBAAa,QAAQ,KAAK,KAAK;AAAA,MAC3C,CAAC;AAGD,WAAK,iBAAiB,0BAA0B,EAAE,QAAQ,QAAM,GAAG,YAAY,EAAE;AACjF,WAAK,iBAAiB,mBAAmB,EAAE,QAAQ,QAAM;AAEvD,YAAG,GAAG,cAAc,wBAAwB,GAAG,QAAQ,QAAQ;AAAO,aAAG,UAAU,IAAI,YAAY;AAAA,MACrG,CAAC;AAGD,WAAK,iBAAiB,2BAA2B,EAAE,QAAQ,QAAM;AAC/D,cAAM,MAAM,GAAG,QAAQ;AACvB,YAAG,EAAE,IAAI,WAAW,IAAI,KAAK,IAAI,WAAW,GAAG;AAAI,aAAG,OAAO;AAAA,MAC/D,CAAC;AAGD,aAAO,QAAQ,YAAY,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,IAAI,MAAM;AAClG,YAAI,SAAS,KAAK,cAAc,uCAAuC,QAAQ;AAC/E,YAAI,aAAa;AACjB,YAAG,QAAQ;AACT,uBAAa,OAAO,cAAc,+BAA+B;AAAA,QACnE,OAAO;AACL,mBAAS,SAAS,cAAc,SAAS;AACzC,iBAAO,OAAO,QAAQ;AACtB,iBAAO,aAAa,aAAa,aAAa;AAC9C,iBAAO,aAAa,YAAY,IAAI;AAEpC,gBAAM,QAAQ,SAAS,cAAc,SAAS;AAC9C,gBAAM,UAAU,IAAI,WAAW,cAAc,cAAc,MAAM;AACjE,gBAAM,YAAYD,MAAK,SAAS,KAAK,MAAM,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI;AACrE,iBAAO,OAAO,KAAK;AAEnB,uBAAa,SAAS,cAAc,KAAK;AACzC,qBAAW,aAAa,aAAa,iBAAiB;AACtD,qBAAW,UAAU,IAAI,UAAU,aAAa,SAAS,OAAO;AAChE,iBAAO,OAAO,UAAU;AAExB,eAAK,OAAO,MAAM;AAAA,QACpB;AAEA,aAAK,QAAQ,SAAO;AAClB,gBAAM,OAAO,GAAG,QAAQ;AACxB,cAAI,QAAQ,WAAW,cAAc,qBAAqB,QAAQ;AAClE,cAAG,CAAC,OAAO;AACT,oBAAQ,MAAM,UAAU,IAAI;AAC5B,kBAAM,gBAAgB,WAAW;AACjC,kBAAM,aAAa,mBAAmB,IAAI;AAC1C,kBAAM,cAAc,qBAAqB,EAAE,YAAY;AACvD,uBAAW,OAAO,KAAK;AAAA,UACzB;AACA,gBAAM,cAAc,6BAA6B,EAAE,YAAY;AAC/D,gBAAM,cAAc,0BAA0B,EAAE,YAAY,KAAK,QAAQ,MAAM,MAAM;AACrF,gBAAM,UAAU,OAAO,UAAU,YAAY;AAAA,QAC/C,CAAC;AAAA,MACH,CAAC;AAGD,aAAO,QAAQ,KAAK,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM;AAC3D,cAAM,KAAK,KAAK,cAAc,qBAAqB,QAAQ;AAC3D,cAAM,QAAQ,GAAG,cAAc,6BAA6B;AAC5D,cAAM,YAAY,IAAI,KAAK,QAAQ,SAAS;AAAA,MAC9C,CAAC;AAGD,WAAK,IAAI,iBAAiB,0CAA0C,EAAE,QAAQ,QAAM;AAClF,UAAE,EAAE,EAAE,KAAK,mBAAmB,EAAE,KAAK,CAAC,GAAG,MAAM,KAAK,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE;AAAA,MACzG,CAAC;AAAA,IACH;AAAA,IAEA,mBAAmB,QAAQ;AACzB,YAAM,UAAU,SAAS,cAAc,KAAK;AAC5C,cAAQ,UAAU,IAAI,SAAS,eAAe;AAC9C,cAAQ,YAAY,GAAG;AAavB,YAAM,QAAQ,SAAS,cAAc,GAAG;AACxC,YAAM,UAAU,IAAI,MAAM;AAC1B,YAAM,YAAY;AAClB,YAAM,OAAO;AACb,YAAM,iBAAiB,SAAS,QAAM;AACpC,WAAG,eAAe;AAClB,aAAK,QAAQ,cAAc;AAC3B,aAAK,YAAY;AAAA,MACnB,CAAC;AACD,cAAQ,OAAO,KAAK;AAEpB,aAAO;AAAA,IACT;AAAA,IAEA,OAAO,KAAK,OAAO,SAAS,MAAM;AAChC,UAAG,OAAO,OAAO;AAAU,cAAM,KAAK,IAAI,cAAc,qBAAqB,OAAO;AACpF,YAAM,IAAI,EAAE,GAAG;AACf,gBAAU,IAAI,cAAc,wBAAwB,GAAG,QAAQ;AAE/D,QAAE,KAAK,kBAAkB,EAAE,YAAY,cAAc,SAAS,IAAI,EAAE,YAAY,sBAAsB,SAAS,IAAI,EAAE,KAAK,iBAAiB,SAAS,IAAI;AACxJ,QAAE,KAAK,mBAAmB,EAAE,YAAY,eAAe,SAAS,KAAK,EAAE,YAAY,uBAAuB,SAAS,KAAK,EAAE,KAAK,iBAAiB,SAAS,KAAK;AAC9J,QAAE,KAAK,mBAAmB,EAAE,YAAY,eAAe,SAAS,KAAK,EAAE,YAAY,uBAAuB,SAAS,KAAK,EAAE,KAAK,iBAAiB,SAAS,KAAK;AAE9J,QAAE,KAAK,qBAAqB,EAAE,YAAY,oBAAoB,SAAS,IAAI,EAAE,YAAY,eAAe,SAAS,IAAI;AACrH,QAAE,KAAK,qBAAqB,EAAE,YAAY,qBAAqB,SAAS,KAAK,EAAE,YAAY,gBAAgB,SAAS,KAAK;AAGzH,UAAG,SAAS,OAAO;AACjB,UAAE,QAAQ,2BAA2B,EAAE,KAAK,QAAQ,MAAM;AAAA,MAC5D;AAEA,UAAG;AAAQ,aAAK,YAAY;AAC5B,aAAO;AAAA,IACT;AAAA,IAEA,kBAAkB,KAAK;AACrB,YAAM,QAAQ,KAAK,IAAI,cAAc,8BAA8B;AACnE,UAAG,CAAC;AAAO,eAAO;AAClB,YAAM,MAAM,MAAM,cAAc,KAAK;AACrC,UAAG,CAAC;AAAK,eAAO;AAEhB,UAAI,YAAY,KAAK,UAAU,KAAK,MAAM,CAAC;AAC3C,YAAM,UAAU,OAAO,QAAQ;AAC/B,aAAO;AAAA,IACT;AAAA,IAEA,sBAAsB;AACpB,YAAM,QAAQ,KAAK,IAAI,cAAc,8BAA8B;AACnE,UAAG,CAAC;AAAO,eAAO;AAClB,YAAM,MAAM,MAAM,cAAc,KAAK;AACrC,UAAG,CAAC;AAAK,eAAO;AAEhB,UAAI,YAAY;AAChB,YAAM,UAAU,IAAI,QAAQ;AAC5B,aAAO;AAAA,IACT;AAAA,IAEA,iBAAiB,KAAK,QAAQ;AAC5B,YAAM,OAAO,KAAK,IAAI,cAAc,6BAA6B;AACjE,UAAG,CAAC;AAAM,eAAO;AAEjB,WAAK,UAAU,OAAO,QAAQ;AAC9B,UAAG,UAAU;AAAM,cAAM,IAAI,WAAW;AACxC,WAAK,YAAY;AACjB,aAAO;AAAA,IACT;AAAA,IAEA,qBAAqB;AACnB,YAAM,OAAO,KAAK,IAAI,cAAc,6BAA6B;AACjE,UAAG,CAAC;AAAM,eAAO;AAEjB,WAAK,UAAU,IAAI,QAAQ;AAC3B,WAAK,YAAY;AACjB,aAAO;AAAA,IACT;AAAA,IAEA,mBAAmB,KAAK,QAAQ;AAC9B,YAAM,OAAO,KAAK,IAAI,cAAc,+BAA+B;AACnE,UAAG,CAAC;AAAM,eAAO;AAEjB,WAAK,UAAU,OAAO,QAAQ;AAC9B,UAAG,UAAU;AAAM,cAAM,IAAI,WAAW;AACxC,WAAK,YAAY;AACjB,aAAO;AAAA,IACT;AAAA,IAEA,uBAAuB;AACrB,YAAM,OAAO,KAAK,IAAI,cAAc,+BAA+B;AACnE,UAAG,CAAC;AAAM,eAAO;AAEjB,WAAK,UAAU,IAAI,QAAQ;AAC3B,WAAK,YAAY;AACjB,aAAO;AAAA,IACT;AAAA,IAEA,cAAc,MAAM,SAAS,WAAW,MAAM;AAC5C,UAAG,OAAO,QAAQ,YAAY,OAAO,QAAQ;AAAU,eAAO,KAAK,IAAI,cAAc,eAAe,QAAQ;AAC5G,YAAM,OAAO,KAAK,cAAc,0BAA0B;AAC1D,YAAM,QAAQ,KAAK,cAAc,0BAA0B;AAE3D,UAAG,SAAS,QAAQ,MAAM;AACxB,cAAM,YAAY;AAClB,YAAG,WAAW;AAAM,iBAAO;AAAA,MAC7B;AAEA,UAAG,UAAU,WAAW;AACtB,aAAK,YAAY;AAAA,MACnB,WAAW,UAAU,WAAW;AAC9B,aAAK,YAAY;AAAA,MACnB,WAAW,UAAU,SAAS;AAC5B,aAAK,YAAY;AAAA,MACnB,WAAW,UAAU,WAAW;AAC9B,aAAK,YAAY;AAAA,MACnB,OAAO;AACL,gBAAQ,MAAM,kBAAkB,QAAQ,OAAO,IAAI;AAAA,MACrD;AACA,aAAO;AAAA,IACT;AAAA,EACF;;;ACriCA,MAAM,sBAAN,cAAwC,YAAY;AAAA,IAClD,WAAW;AAAA,IAEX,OAAO;AACL,WAAK,YAAY,oBAAoB,QAAQ,OAAK,KAAK,IAAI,CAAC,CAAC;AAE7D,UAAG,QAAQ,KAAK,YAAY,WAAW,MAAM;AAC3C,eAAO,IAAI,WAAW,UAAU,KAAK,mBAAmB;AAAA,MAC1D;AAEA,UAAG,QAAQ,KAAK,OAAO;AACrB,aAAK,QAAQ,OAAO,IAAI;AAAA,MAC1B;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,IACP;AAAA,IAEA,eAAe;AACb,WAAK,cAAc,IAAI,YAAY,EAAE,KAAK,EAAE,MAAM;AAElD,QAAE,QAAQ,EAAE,GAAG,SAAS,QAAM;AAC5B,YAAI,SAAS,EAAE,GAAG,MAAM,EAAE,QAAQ,cAAc;AAChD,YAAG,CAAC,OAAO,QAAQ;AACjB,mBAAS,EAAE,GAAG,MAAM,EAAE,QAAQ,qBAAqB;AAAA,QACrD;AACA,cAAM,WAAW,OAAO,SAAS,cAAc;AAC/C,YAAG,EAAE,GAAG,WAAW,GAAG,UAAU;AAC9B,YAAE,eAAe,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,cAAE,EAAE,EAAE,YAAY,cAAc,EAAE,QAAQ,gBAAgB;AAAA,UAAE,CAAC;AAAA,QACpG;AACA,YAAG,CAAC,UAAU;AACZ,iBAAO,SAAS,cAAc,EAAE,QAAQ,cAAc;AAAA,QACxD;AACA,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,qCAAqC,QAAM;AACjE,eAAO,KAAK,EAAE,GAAG,aAAa,EAAE,KAAK,cAAc,CAAC;AACpD,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,sCAAsC,QAAM;AAClE,cAAM,KAAK,GAAG;AACd,cAAM,IAAI,EAAE,EAAE,EAAE,KAAK;AACrB,cAAM,MAAM,UAAU,QAAQ,YAAY,EAAE;AAC5C,cAAM,KAAK,EAAE,QAAQ,IAAI;AACzB,cAAM,QAAQ,EAAE,QAAQ,OAAO;AAC/B,cAAM,WAAW,MAAM,KAAK,sBAAsB;AAElD,YAAG,SAAS,UAAU,GAAG;AACvB,cAAG,SAAS,GAAG,EAAE,GAAG;AAElB,eAAG,YAAY,mBAAmB;AAClC,cAAE,YAAY,aAAa,EAAE,SAAS,uBAAuB;AAG7D,gBAAI,OAAO;AACX,eAAG,KAAK,iBAAiB,GAAG,QAAQ;AACpC,eAAG,WAAW,iBAAiB;AAAA,UACjC,OAAO;AACL,qBAAS,YAAY,mBAAmB;AACxC,kBAAM,OAAO,SAAS,KAAK,oCAAoC;AAC/D,iBAAK,YAAY,aAAa,EAAE,SAAS,uBAAuB;AAChE,sBAAU,QAAQ,YAAY,KAAK,IAAI,CAAC,CAAC,GAAG,OAAO;AACnD,qBAAS,KAAK,iBAAiB,GAAG,QAAQ;AAC1C,qBAAS,WAAW,iBAAiB;AACrC,mBAAO,KAAK,EAAE,KAAK,MAAM,EAAE,QAAQ,SAAS,SAAS,KAAK,KAAK,CAAC,CAAC;AAAA,UACnE;AAAA,QACF,OAAO;AACL,eAAK,KAAK;AACV,eAAK,QAAQ;AACb,YAAE,SAAS,aAAa,EAAE,YAAY,uBAAuB;AAC7D,aAAG,SAAS,mBAAmB;AAC/B,gBAAM,UAAU,IAAI,UAAU,QAAQ,GAAG,YAAY;AAAA,YACnD,SAAS;AAAA,YACT,MAAM;AAAA,YACN,WAAW;AAAA,YACX,aAAa;AAAA,YACb,OAAO;AAAA,UACT,CAAC;AACD,kBAAQ,KAAK;AACb,aAAG,KAAK,mBAAmB,OAAO;AAAA,QACpC;AACA,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,uCAAuC,QAAM;AACnE,cAAM,KAAK,GAAG;AACd,cAAM,IAAI,EAAE,EAAE,EAAE,KAAK;AACrB,cAAM,MAAM,UAAU,QAAQ,YAAY,EAAE;AAC5C,cAAM,KAAK,EAAE,QAAQ,IAAI;AACzB,cAAM,QAAQ,EAAE,QAAQ,OAAO;AAC/B,cAAM,WAAW,MAAM,KAAK,uBAAuB;AAEnD,YAAG,SAAS,UAAU,GAAG;AACvB,cAAG,SAAS,GAAG,EAAE,GAAG;AAElB,eAAG,YAAY,oBAAoB;AACnC,cAAE,YAAY,aAAa,EAAE,SAAS,kBAAkB;AAGxD,gBAAI,OAAO;AACX,eAAG,KAAK,kBAAkB,GAAG,QAAQ;AACrC,eAAG,WAAW,kBAAkB;AAAA,UAClC,OAAO;AACL,qBAAS,YAAY,oBAAoB;AACzC,kBAAM,OAAO,SAAS,KAAK,qCAAqC;AAChE,iBAAK,YAAY,aAAa,EAAE,SAAS,kBAAkB;AAC3D,sBAAU,QAAQ,YAAY,KAAK,IAAI,CAAC,CAAC,GAAG,OAAO;AACnD,qBAAS,KAAK,kBAAkB,GAAG,QAAQ;AAC3C,qBAAS,WAAW,kBAAkB;AACtC,kBAAM,MAAM,EAAE,KAAK,MAAM,EAAE,QAAQ,SAAS,SAAS,KAAK,KAAK,CAAC,CAAC;AAAA,UACnE;AAAA,QACF,OAAO;AACL,eAAK,KAAK;AACV,eAAK,QAAQ;AACb,YAAE,SAAS,aAAa,EAAE,YAAY,kBAAkB;AACxD,aAAG,SAAS,oBAAoB;AAChC,gBAAM,UAAU,IAAI,UAAU,QAAQ,GAAG,YAAY;AAAA,YACnD,SAAS;AAAA,YACT,MAAM;AAAA,YACN,WAAW;AAAA,YACX,aAAa;AAAA,YACb,OAAO;AAAA,UACT,CAAC;AACD,kBAAQ,KAAK;AACb,aAAG,KAAK,oBAAoB,OAAO;AAAA,QACrC;AACA,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,6BAA6B,QAAM;AACzD,cAAM,MAAM,EAAE,GAAG,aAAa;AAC9B,cAAM,OAAO,IAAI,KAAK,UAAU;AAChC,YAAI,KAAK,YAAY,UAAU;AAC/B,cAAM,IAAI,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,OAAK;AACxC,cAAI,SAAS,IAAI,EAAE,KAAK,OAAO,OAAO,CAAC,GAAG,GAAG,EAAE,YAAY,KAAK,CAAC,CAAC;AAClE,cAAI,WAAW,UAAU;AAAA,QAC3B,CAAC;AACD,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,+BAA+B,QAAM;AAC3D,cAAM,MAAM,EAAE,GAAG,aAAa;AAC9B,cAAM,OAAO,IAAI,KAAK,UAAU;AAChC,YAAI,KAAK,YAAY,UAAU;AAC/B,cAAM,IAAI,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,OAAK;AACxC,cAAI,SAAS,IAAI,EAAE,KAAK,OAAO,OAAO,CAAC,GAAG,GAAG,EAAE,YAAY,KAAK,CAAC,CAAC;AAClE,cAAI,WAAW,UAAU;AAAA,QAC3B,CAAC;AACD,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,qCAAqC,QAAM;AACjE,YAAI,aAAa,IAAI,EAAE,KAAK;AAC5B,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,uCAAuC,QAAM;AACnE,cAAM,IAAI,EAAE,GAAG,aAAa,EAAE,KAAK;AACnC,cAAM,IAAI,EAAE,QAAQ,qBAAqB,EAAE,KAAK,aAAa;AAC7D,YAAG,EAAE,QAAQ;AACX,cAAG,EAAE,KAAK,YAAY;AAAG,cAAE,KAAK,cAAc,EAAE,MAAM;AACtD,YAAE,IAAI,CAAC,EAAE,eAAe,EAAE,OAAO,UAAU,QAAQ,WAAW,UAAU,SAAS,CAAC;AAAA,QACpF;AACA,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,0CAA0C,QAAM;AACtE,cAAM,IAAI,EAAE,GAAG,aAAa,EAAE,KAAK;AACnC,cAAM,IAAI,EAAE,KAAK,MAAM;AACvB,cAAM,IAAI,EAAE,KAAK,GAAG;AACpB,YAAI,EAAE,SAAS,aAAa,GAAG;AAC7B,YAAE,YAAY,aAAa,EAAE,SAAS,UAAU;AAChD,YAAE,YAAY,QAAQ,EAAE,SAAS,cAAc;AAC/C,YAAE,KAAK,gBAAgB;AACvB,YAAE,QAAQ,qBAAqB,EAAE,KAAK,iBAAiB,EAAE,KAAK;AAAA,QAChE,OAAO;AACL,YAAE,YAAY,UAAU,EAAE,SAAS,aAAa;AAChD,YAAE,YAAY,cAAc,EAAE,SAAS,QAAQ;AAC/C,YAAE,KAAK,gBAAgB;AACvB,YAAE,QAAQ,qBAAqB,EAAE,KAAK,iBAAiB,EAAE,KAAK;AAAA,QAChE;AACA,eAAO;AAAA,MACT,CAAC;AACD,QAAE,iEAAiE,EAAE,MAAM;AAE3E,QAAE,QAAQ,EAAE,GAAG,SAAS,yCAAyC,QAAM;AACrE,cAAM,IAAI,EAAE,GAAG,aAAa,EAAE,KAAK;AACnC,cAAM,IAAI,EAAE,KAAK,MAAM;AACvB,cAAM,IAAI,EAAE,KAAK,GAAG;AACpB,YAAI,EAAE,SAAS,aAAa,GAAG;AAC7B,YAAE,YAAY,aAAa,EAAE,SAAS,UAAU;AAChD,YAAE,KAAK,eAAe;AACtB,YAAE,QAAQ,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,KAAK;AAAA,QAC/D,OAAO;AACL,YAAE,YAAY,UAAU,EAAE,SAAS,aAAa;AAChD,YAAE,KAAK,eAAe;AACtB,YAAE,QAAQ,qBAAqB,EAAE,KAAK,gBAAgB,EAAE,KAAK;AAAA,QAC/D;AACA,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,uCAAuC,QAAM;AACnE,cAAM,IAAI,EAAE,GAAG,aAAa,EAAE,KAAK;AACnC,cAAM,IAAI,EAAE,KAAK,MAAM;AACvB,cAAM,IAAI,EAAE,KAAK,GAAG;AACpB,YAAI,EAAE,SAAS,eAAe,GAAG;AAC/B,YAAE,YAAY,eAAe,EAAE,SAAS,UAAU;AAClD,YAAE,YAAY,0BAA0B,EAAE,SAAS,wBAAwB;AAC3E,YAAE,KAAK,YAAY;AACnB,YAAE,QAAQ,qBAAqB,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,KAAK;AAAA,QACrE,OAAO;AACL,YAAE,YAAY,UAAU,EAAE,SAAS,eAAe;AAClD,YAAE,YAAY,wBAAwB,EAAE,SAAS,0BAA0B;AAC3E,YAAE,KAAK,cAAc;AACrB,YAAE,QAAQ,qBAAqB,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,IAAI;AAAA,QACpE;AACA,eAAO;AAAA,MACT,CAAC;AAED,QAAE,QAAQ,EAAE,GAAG,SAAS,yCAAyC,QAAM;AACrE,WAAG,eAAe;AAElB,cAAM,UAAU,UAAU,QAAQ,oBAAoB,GAAG,aAAa;AACtE,gBAAQ,KAAK;AACb,gBAAQ,QAAQ;AAChB,WAAG,cAAc,cAAc,iBAAiB,sBAAsB,CAAAE,QAAM,QAAQ,OAAO,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,MAC9G,CAAC;AAED,QAAE,MAAM,EAAE,GAAG,cAAc,QAAM;AAC/B,cAAM,KAAW,KAAK,cAAc,MAAM,IAAI,IAAI,GAAG,cAAc,MAAM,CAAC;AAC1E,YAAG,GAAG,eAAe;AACnB,UAAM,KAAK,iBAAiB,EAAE,eAAe,OAAU,CAAC;AACxD,iBAAO,KAAK;AAAA,QACd;AACA,YAAG,GAAG,QAAQ,GAAG,QAAQ,KAAK,yBAAyB;AACrD,eAAK,kBAAkB,GAAG,IAAI;AAAA,QAChC;AAAA,MACF,CAAC;AAED,wBAAkB,WAAW,2BAA2B;AACxD,mBAAa,WAAW,sBAAsB;AAC9C,oBAAc,WAAW;AACzB,0BAAoB,WAAW;AAAA,IACjC;AAAA,IAEA,WAAW;AACT,UAAI,OAAO,SAAS,QAAQ,cAAc;AACxC,UAAE,2BAA2B,EAAE,MAAM;AACrC,eAAO,SAAS,OAAO;AAAA,MACzB;AAEA,WAAK,YAAY,EAAE,UAAU;AAC7B,UAAG,KAAK,UAAU,UAAU,CAAC,KAAK,WAAW;AAC3C,aAAK,YAAY,IAAI,kBAAkB,KAAK,UAAU,KAAK,QAAQ,IAAI,iBAAiB;AAAA,UACtF,QAAQ,KAAK,UAAU,KAAK,QAAQ;AAAA,QACtC,CAAC;AAAA,MACH;AAEA,YAAM,eAAe,SAAS,cAAc,uBAAuB;AACnE,UAAG;AAAc,aAAK,YAAY,QAAQ,cAAc,EAAE,OAAO,IAAI,CAAC;AAEtE,WAAK,cAAc;AAEnB,UAAG,SAAS,cAAc,2BAA2B,GAAG;AACtD,UAAE,6DAA6D,EAAE,GAAG,UAAU,QAAM;AAClF,gBAAM,SAAS,EAAE,GAAG,aAAa,EAAE,QAAQ,cAAc;AACzD,iBAAO,KAAK,cAAc,EAAE,IAAI,EAAE,UAAU,GAAG,GAAG,cAAc,OAAO,KAAK,OAAO,CAAC;AAAA,QACtF,CAAC;AAAA,MACH;AAEA,QAAE,2BAA2B,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,YAAI,kBAAkB,MAAM,EAAE,EAAE,GAAG,KAAK,SAAS;AAAA,MAAE,CAAC;AACrG,QAAE,sBAAsB,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,YAAI,aAAa,MAAM,EAAE,EAAE,GAAG,KAAK,SAAS,EAAE,KAAK;AAAA,MAAE,CAAC;AAClG,QAAE,uBAAuB,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,YAAI,cAAc,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK;AAAA,MAAE,CAAC;AACpF,QAAE,kBAAkB,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,YAAI,SAAS,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK;AAAA,MAAE,CAAC;AAC1E,QAAE,qBAAqB,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,YAAI,WAAW,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK;AAAA,MAAE,CAAC;AAC/E,QAAE,sBAAsB,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,YAAI,eAAe,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK;AAAA,MAAE,CAAC;AAEpF,QAAE,6BAA6B,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,YAAI,YAAY,MAAM,EAAE,EAAE,GAAG,KAAK,WAAW,EAAE,IAAI,WAAW,CAAC,EAAE,KAAK;AAAA,MAAE,CAAC;AAC5H,QAAE,sBAAsB,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,YAAI,aAAa,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK;AAAA,MAAE,CAAC;AAClF,QAAE,6BAA6B,EAAE,KAAK,CAAC,GAAG,OAAO;AAAE,YAAI,oBAAoB,MAAM,EAAE,EAAE,KAAK;AAAA,MAAE,CAAC;AAE7F,WAAK,mBAAmB;AACxB,WAAK,iBAAiB;AACtB,WAAK,qBAAqB;AAE1B,YAAM,KAAW,KAAK,cAAc;AACpC,UAAG,GAAG,eAAe;AACnB,QAAM,KAAK,iBAAiB,EAAE,eAAe,OAAU,CAAC;AACxD,eAAO,KAAK;AAAA,MACd;AACA,WAAK,kBAAkB,GAAG,IAAI;AAAA,IAChC;AAAA,IAEA,gBAAgB;AACd,YAAM,kBAAkB,SAAS,eAAe,iBAAiB;AACjE,UAAG;AAAiB,YAAI,SAAS,EAAE,QAAQ,iBAAiB,OAAO,KAAK,CAAC;AAkBzE,WAAK,aAAa;AAAA,IACpB;AAAA,IAEA,eAAe;AACb,UAAI,SAAS,SAAS,eAAe,aAAa;AAClD,UAAG,CAAC;AAAQ;AACZ,aAAO,aAAa,wBAAS,OAAO,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAC5D,aAAO,SAAS,MAAM;AAStB,UAAI,WAAW,IAAI;AACnB,UAAI,eAAe,KAAK,IAAI,IAAI;AAChC,UAAI,OAAO;AACX,UAAI,SAAS;AACb,UAAI,OAAO;AACX,YAAM,gBAAgB,CAAC,KAAK,QAAQ,KAAK,OAAO,KAAK,MAAM,OAAO;AAGlE,OAAC,SAAS,QAAQ;AAChB,YAAI,WAAW,eAAe,KAAK,IAAI;AACvC,YAAI,QAAQ;AACZ,iBAAS,wBAAS,cAAc,EAAE,MAAM,aAAM,OAAO,CAAC;AACtD,eAAO,KAAK,IAAI,KAAK,OAAO,IAAK;AAEjC,eAAO,SAAS;AAAA,UACd,eAAe;AAAA,UACf,eAAe;AAAA,UACf;AAAA,UACA,QAAQ;AAAA,YACN,GAAG,KAAK,OAAO;AAAA,YAEf,GAAI,KAAK,OAAO,IAAI,OAAQ;AAAA,UAC9B;AAAA,UACA,QAAQ,CAAC,SAAS;AAAA,UAClB,QAAQ,CAAC,IAAI;AAAA,UACb,SAAS,cAAc,KAAK,GAAG;AAAA,UAC/B,QAAQ,cAAc,GAAG,CAAC;AAAA,UAC1B,OAAO,cAAc,MAAM,GAAG;AAAA,QAChC,CAAC;AAED,YAAI,WAAW;AAAG,iBAAO,sBAAsB,KAAK;AAAA,MAEtD,GAAE;AAAA,IACJ;AAAA,IAEA,kBAAkB,MAAM;AACtB,UAAG,CAAC;AAAM;AACV,WAAK,0BAA0B;AAC/B,UAAI,SAAS,SAAS,cAAc,eAAe,KAAK,QAAQ,MAAM,KAAK,KAAK;AAChF,UAAG,CAAC;AAAQ;AAEZ,QAAE,0BAA0B,EAAE,YAAY,cAAc;AACxD,UAAG,OAAO,QAAQ,YAAY;AAC5B,YAAG,OAAO,QAAQ,cAAc,YAAY;AAC1C,mBAAS,OAAO;AAAA,QAClB,OAAO;AACL,mBAAS,SAAS,cAAc,OAAO,QAAQ,UAAU;AAAA,QAC3D;AAAA,MACF;AACA,aAAO,UAAU,IAAI,cAAc;AACnC,WAAK,YAAY,QAAQ,QAAQ,EAAE,OAAO,KAAK,UAAU,KAAK,CAAC;AAAA,IACjE;AAAA,IAEA,MAAM,uBAAuB;AAC3B,QAAE,wBAAwB,EAAE,KAAK,CAAC,GAAG,QAAQ;AAC3C,cAAM,KAAK,EAAE,GAAG;AAChB,YAAG,GAAG,KAAK,sBAAsB;AAAG;AACpC,WAAG,KAAK,wBAAwB,IAAI;AACpC,cAAM,MAAM,EAAE,uCAAuC;AACrD,YAAI,eAAe;AACnB,WAAG,KAAK,kBAAkB,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG;AAC7D,WAAG,IAAI,EAAE,QAAQ,UAAU,CAAC;AAC5B,WAAG,KAAK,SAAS,iBAAiB;AAClC,cAAM,SAAS,IAAI,UAAU,QAAQ,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,EAAE,CAAC;AAC7E,aAAK,gBAAgB,IAAI,KAAK,GAAG,KAAK,YAAY,CAAC;AAEnD,WAAG,MAAM,QAAM;AACb,gBAAM,QAAQ,OAAO,KAAK,cAAc,gBAAgB;AAExD,cAAG,GAAG,QAAQ;AACZ,sBAAU,UAAU,UAAU,GAAG,KAAK,gBAAgB,CAAC,EACtD,KAAK,OAAK;AACT,kBAAG;AAAO,sBAAM,cAAc;AAC9B,qBAAO,OAAO;AAAA,YAChB,CAAC,EACA,MAAM,SAAO;AACZ,oBAAM,6BAA6B;AAAA,YACrC,CAAC;AACD,mBAAO;AAAA,UACT;AAEA,wBAAc,QAAQ;AACtB,yBAAe;AACf,iBAAO,OAAO;AAEd,cAAG,EAAE,qCAAqC,EAAE,QAAQ;AAClD,2BAAe,IAAI,UAAU,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,SAAS,UAAU,MAAM,MAAM,OAAO,2DAA2D,CAAC;AACrJ,yBAAa,KAAK;AAClB,mBAAO,QAAQ;AACf,iBAAK,gBAAgB,IAAI,KAAK,OAAO;AACrC,mBAAO;AAAA,UACT;AAEA,eAAK,gBAAgB,IAAI,KAAK,UAAU;AAExC,gBAAM,WAAW,IAAI,SAAS;AAC9B,mBAAS,OAAO,UAAU,GAAG,KAAK,gBAAgB,CAAC;AAEnD,aAAG,SAAS,cAAc;AAC1B,cAAI,OAAO;AACT,kBAAM,cAAc;AACpB,mBAAO,OAAO;AAAA,UAChB;AAEA,gBAAM,GAAG,KAAK,YAAY,GAAG;AAAA,YAC3B,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,SAAS;AAAA,cACP,gBAAgB,EAAE,uBAAuB,EAAE,KAAK,SAAS;AAAA,YAC3D;AAAA,UACF,CAAC,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,OAAK;AAC/B,iBAAK,gBAAgB,IAAI,KAAK,EAAE,OAAO;AAAA,UACzC,CAAC,EAAE,MAAM,SAAO;AACd,iBAAK,gBAAgB,IAAI,KAAK,OAAO;AACrC,kBAAM,qDAAqD;AAAA,UAC7D,CAAC,EAAE,QAAQ,OAAK;AACd,eAAG,YAAY,cAAc;AAC7B,gBAAI,OAAO;AACT,oBAAM,cAAc;AACpB,qBAAO,OAAO;AAAA,YAChB;AAAA,UACF,CAAC;AACD,iBAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,gBAAgB,IAAI,KAAK,QAAQ;AACrC,UAAI,YAAY,iGAAiG;AACjH,UAAG,UAAU,YAAY;AACvB,YAAI,SAAS,2BAA2B;AAAA,MAC1C,WAAW,UAAU,SAAS;AAC5B,YAAI,SAAS,sBAAsB,GAAG,KAAK,YAAY,IAAI,UAAU,IAAI;AAAA,MAC3E,WAAW,QAAQ;AACjB,WAAG,KAAK,oBAAoB,IAAI;AAChC,YAAI,SAAS,2BAA2B;AAAA,MAC1C,OAAO;AACL,WAAG,KAAK,oBAAoB,KAAK;AACjC,YAAI,SAAS,oBAAoB;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,MAAM,mBAAmB;AACvB,QAAE,uDAAuD,EAAE,KAAK,EAAE;AAClE,QAAE,mDAAmD,EAAE,KAAK,CAAC,GAAG,OAAO;AACrE,aAAK,cAAc,IAAI,GAAG,kBAAkB;AAAA,MAC9C,CAAC;AAED,QAAE,0CAA0C,EAAE,GAAG,SAAS,MAAM,QAAM;AACpE,cAAM,KAAK,EAAE,GAAG,aAAa;AAC7B,cAAM,KAAK,GAAG,QAAQ,OAAO;AAC7B,cAAM,MAAM,GAAG,QAAQ,iCAAiC;AACxD,YAAI,KAAK,GAAG,KAAK,gBAAgB;AAEjC,YAAG,IAAI,KAAK,aAAa,MAAM,OAAO;AACpC,iBAAO;AAAA,QACT;AAEA,YAAI,GAAG,UAAU,GAAG;AAClB,gBAAM,UAAU,GAAG,KAAK,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;AAC5C,gBAAM,UAAU,GAAG,KAAK,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;AAE5C,aAAG,KAAK,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO;AAC5B,gBAAK,IAAI,WAAW,IAAI,YAAa,KAAK,WAAW,KAAK,UAAU;AAClE,mBAAK,cAAc,IAAI,GAAG,kBAAkB;AAC5C,gBAAE,EAAE,EAAE,YAAY,YAAY;AAAA,YAChC;AAAA,UACF,CAAC;AAED,aAAG,YAAY,aAAa;AAC5B,iBAAO;AAAA,QACT;AAEA,YAAI,GAAG,SAAS,GAAG;AACjB,aAAG,YAAY,aAAa;AAC5B,eAAK,GAAG,KAAK,gBAAgB;AAAA,QAC/B;AAEA,YAAI,GAAG,UAAU,GAAG;AAElB,gBAAM,UAAU,GAAG,KAAK,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;AAC5C,gBAAM,UAAU,GAAG,KAAK,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;AAE5C,aAAG,KAAK,IAAI,EAAE,KAAK,CAAC,GAAG,OAAO;AAC5B,gBAAI,IAAI,WAAW,IAAI,SAAS;AAC9B,gBAAE,EAAE,EAAE,SAAS,YAAY;AAC3B,gBAAE,EAAE,EAAE,KAAK,2BAA2B,EAAE,KAAK,EAAE;AAAA,YAGjD,WAAW,KAAK,SAAS;AACvB,mBAAK,cAAc,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AAAA,YACzC;AAAA,UACF,CAAC;AAAA,QACH;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,cAAc,GAAG,GAAG;AACxB,YAAM,MAAM,IAAI,KAAK,aAAa,OAAO;AACzC,YAAM,cAAc,EAAE,CAAC,EAAE,QAAQ,iCAAiC,EAAE,KAAK,aAAa;AACtF,YAAM,UAAU,EAAE,CAAC,EAAE,QAAQ,iCAAiC,EAAE,KAAK,aAAa;AAElF,YAAM,IAAI;AAAA,QACR,MAAM,EAAE,QAAQ,QAAQ,GAAG,SAAS,QAAQ;AAAA,QAC5C,WAAW,EAAE,QAAQ,aAAa,GAAG,SAAS,aAAa;AAAA,QAC3D,cAAc,EAAE,QAAQ,gBAAgB,GAAG,SAAS,gBAAgB;AAAA,MACtE;AAEA,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,CAAC,GAAG;AACtC,cAAM,MAAM,EAAE,CAAC,EAAE,KAAK,sBAAsB,KAAK,EAAE,KAAK,EAAE;AAE1D,UAAE,QAAQ,EACP,SAAS,OAAO,EAChB,KAAK,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC,EAC7B,SAAS,GAAG;AAEf,YAAG,KAAK,CAAC,aAAa;AACpB,gBAAM,QAAQ,EAAE,SAAS,EACtB,SAAS,OAAO,EAChB,MAAM,UAAU,KAAK,QAAQ,KAAK,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,UAAU,MAAM,GAAG,EAC/G,SAAS,IAAI,IAAI,iBAAiB,IAAI,IAAI,gBAAgB,YAAY;AACzE,oBAAU,MAAM,UAAU,GAAG,IAAI,MAAM,SAAS,GAAG;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,IAEA,sBAAsB,KAAK,MAAM,QAAQ,gBAAgB,MAAM;AAC7D,UAAG,eAAe;AAChB,YAAI,KAAK,gCAAgC,aAAa;AAAA,MACxD;AACA,YAAM,IAAI,IAAI,KAAK,8BAA8B;AACjD,UAAI,IAAI,IAAI;AACV,cAAM,IAAI,SAAS,IAAE,EAAE;AACvB,eAAO,KAAK,QAAQ,WAAW,KAAK,IAAI,KAAK,KAAK;AAAA,MACpD,WAAW,IAAI,GAAG;AAChB,cAAM,IAAI,SAAS,CAAC;AACpB,eAAO,KAAK,QAAQ,WAAW,KAAK,IAAI,KAAK,KAAK;AAAA,MACpD,OAAO;AACL,eAAO,KAAK,kBAAkB,KAAK,IAAI;AAAA,MACzC;AAEA,UAAI,KAAK,gCAAgC,IAAI,CAAC;AAC9C,iBAAW,OAAK,KAAK,sBAAsB,KAAK,MAAM,MAAM,GAAG,GAAI;AAAA,IACrE;AAAA,IAEA,qBAAqB;AACnB,QAAE,mBAAmB,EAAE,KAAK,CAAC,GAAG,QAAQ;AACtC,cAAM,MAAM,EAAE,GAAG;AACjB,cAAM,cAAc,IAAI,KAAK,mBAAmB;AAChD,cAAM,SAAS,IAAI,KAAK,8BAA8B;AACtD,cAAM,OAAO,IAAI,KAAK,MAAM;AAC5B,aAAK,kBAAkB,KAAK,WAAW;AAEvC,YAAI,MAAM,QAAM;AACd,cAAG,IAAI,KAAK,UAAU;AAAG,mBAAO;AAEhC,cAAI,KAAK,YAAY,UAAU;AAC/B,oBAAU,QAAQ,oBAAoB,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK;AACvD,cAAI,YAAY,gFAAgF,EAAE,SAAS,aAAa;AACxH,eAAK,IAAI,CAAC,EAAE,YAAY;AACxB,iBAAO,KAAK,eAAe,IAAI,KAAK,WAAW,EAAE,YAAY;AAE7D,eAAK,iBAAiB,KAAK,aAAa,QAAQ,IAAI,KAAK,UAAU,CAAC;AACpE,iBAAO;AAAA,QACT,CAAC;AAED,oBAAY,MAAM,QAAM;AACtB,cAAG,YAAY,KAAK,UAAU;AAAG,mBAAO;AAExC,cAAI,KAAK,YAAY,UAAU;AAC/B,sBAAY,KAAK,YAAY,UAAU;AACvC,oBAAU,QAAQ,oBAAoB,YAAY,IAAI,CAAC,CAAC,EAAE,KAAK;AAC/D,sBAAY,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY;AAC5C,cAAI,YAAY,gFAAgF,EAAE,SAAS,aAAa;AACxH,iBAAO,KAAK,qBAAqB;AAEjC,gBAAM,YAAY,KAAK,UAAU,GAAG;AAAA,YAClC,QAAQ;AAAA,YACR,SAAS;AAAA,cACP,gBAAgB,EAAE,uBAAuB,EAAE,KAAK,SAAS;AAAA,YAC3D;AAAA,UACF,CAAC,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,OAAK;AAC/B,gBAAI,EAAE,SAAS;AACb,kBAAI,EAAE,SAAS;AACb,oBAAI,YAAY,gFAAgF,EAAE,SAAS,aAAa;AACxH,uBAAO,KAAK,uBAAuB;AACnC,2BAAW,OAAK,OAAO,SAAS,OAAO,GAAG,GAAI;AAAA,cAChD,OAAO;AACL,oBAAI,YAAY,gFAAgF,EAAE,SAAS,UAAU;AACrH,uBAAO,KAAK,yBAAyB;AACrC,2BAAW,OAAK,KAAK,kBAAkB,KAAK,WAAW,GAAG,GAAI;AAAA,cAChE;AAAA,YACF,OAAO;AACL,qBAAO,KAAK,EAAE,KAAK;AACnB,kBAAI,WAAW,UAAU;AACzB,0BAAY,WAAW,UAAU;AACjC,kBAAI,YAAY,gFAAgF,EAAE,SAAS,YAAY;AACvH,yBAAW,OAAK,KAAK,kBAAkB,KAAK,WAAW,GAAG,GAAI;AAAA,YAChE;AAAA,UACF,CAAC;AACD,iBAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,IAEA,iBAAiB,KAAK,MAAM,QAAQ,MAAM;AACxC,YAAM,MAAM;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB,EAAE,uBAAuB,EAAE,KAAK,SAAS;AAAA,QAC3D;AAAA,MACF,CAAC,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,OAAK;AAC/B,YAAI,EAAE,WAAW;AACf,iBAAO,KAAK,aAAa,IAAI,KAAK,WAAW,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,KAAK,WAAW,EAAE,YAAY;AAC1G,qBAAW,OAAK,KAAK,iBAAiB,KAAK,MAAM,QAAQ,EAAE,SAAS,GAAG,GAAG;AAAA,QAC5E,WAAW,EAAE,SAAS;AACpB,cAAI,YAAY,gFAAgF,EAAE,SAAS,aAAa;AACxH,iBAAO,KAAK,uBAAuB;AACnC,qBAAW,OAAK,OAAO,SAAS,OAAO,GAAG,GAAI;AAAA,QAChD,OAAO;AACL,iBAAO,KAAK,EAAE,KAAK;AACnB,cAAI,YAAY,gFAAgF,EAAE,SAAS,YAAY;AACvH,qBAAW,OAAK,KAAK,kBAAkB,GAAG,GAAG,GAAI;AAAA,QACnD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,kBAAkB,KAAK,MAAM;AAC3B,YAAM,OAAO,IAAI,KAAK,UAAU;AAChC,YAAM,SAAS,IAAI,KAAK,8BAA8B;AACtD,YAAM,OAAO,IAAI,KAAK,MAAM;AAE5B,WAAK,IAAI,CAAC,EAAE,YAAY;AACxB,YAAM,IAAI,EAAE,KAAK,OAAK,EAAE,KAAK,CAAC,EAAE,KAAK,OAAK;AACxC,YAAG,CAAC,EAAE,SAAS;AACb,cAAI,KAAK,YAAY,UAAU;AAC/B,gBAAM,OAAO;AACb,cAAI,YAAY,gFAAgF,EAAE,SAAS,eAAe;AAC1H,eAAK,IAAI,CAAC,EAAE,YAAY;AACxB,iBAAO,KAAK,QAAQ;AAAA,QACtB,WAAW,EAAE,WAAW;AACtB,cAAI,KAAK,YAAY,UAAU;AAC/B,gBAAM,OAAO;AACb,cAAI,YAAY,gFAAgF,EAAE,SAAS,aAAa;AACxH,eAAK,IAAI,CAAC,EAAE,YAAY;AACxB,iBAAO,KAAK,WAAW;AAAA,QACzB,WAAW,EAAE,WAAW;AACtB,cAAI,KAAK,YAAY,UAAU;AAC/B,gBAAM,SAAS,QAAQ;AACvB,cAAI,YAAY,gFAAgF,EAAE,SAAS,eAAe;AAC1H,eAAK,IAAI,CAAC,EAAE,YAAY;AACxB,eAAK,sBAAsB,KAAK,MAAM,QAAQ,EAAE,SAAS;AAAA,QAC3D,OAAO;AACL,cAAI,YAAY,gFAAgF,EAAE,SAAS,aAAa;AACxH,cAAI,YAAY,aAAa,EAAE,IAAI,EAAE,UAAU,QAAQ,CAAC,EAAE,WAAW,UAAU;AAC/E,gBAAM,YAAY,QAAQ,GAAG,WAAW,UAAU;AAClD,eAAK,IAAI,CAAC,EAAE,YAAY;AACxB,iBAAO,KAAK,aAAa;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,SAAS,oBAAoB,KAAK,EAAE,OAAO,SAAS,cAAc,MAAM,GAAG,QAAQ,OAAO,cAAc,CAAC;",
  "names": ["args", "args", "name", "observer", "args", "_", "AppOS", "Component", "_a", "Component", "_", "_a", "Component", "_a", "Component", "args", "ev", "i", "module", "worker", "fettis", "args", "Util", "args", "ev"]
}
