{
  "version": 3,
  "sources": ["/cdn/shop/t/59/assets/theme.js?sections=header"],
  "sourcesContent": ["(function ($) {\n  var $ = (jQuery = $);\n\n  var cc = {\n    sections: [],\n  };\n\n  theme.cartNoteMonitor = {\n    load: function load($notes) {\n      $notes.on(\n        \"change.themeCartNoteMonitor paste.themeCartNoteMonitor keyup.themeCartNoteMonitor\",\n        function () {\n          theme.cartNoteMonitor.postUpdate($(this).val());\n        }\n      );\n    },\n\n    unload: function unload($notes) {\n      $notes.off(\".themeCartNoteMonitor\");\n    },\n\n    updateThrottleTimeoutId: -1,\n    updateThrottleInterval: 500,\n\n    postUpdate: function postUpdate(val) {\n      clearTimeout(theme.cartNoteMonitor.updateThrottleTimeoutId);\n      theme.cartNoteMonitor.updateThrottleTimeoutId = setTimeout(function () {\n        $.post(\n          theme.routes.cart_url + \"/update.js\",\n          {\n            note: val,\n          },\n          function (data) {},\n          \"json\"\n        );\n      }, theme.cartNoteMonitor.updateThrottleInterval);\n    },\n  };\n  theme.Shopify = {\n    formatMoney: function formatMoney(t, r) {\n      function e(t, r) {\n        return void 0 === t ? r : t;\n      }\n      function a(t, r, a, o) {\n        if (\n          ((r = e(r, 2)),\n          (a = e(a, \",\")),\n          (o = e(o, \".\")),\n          isNaN(t) || null == t)\n        )\n          return 0;\n        t = (t / 100).toFixed(r);\n        var n = t.split(\".\");\n        return (\n          n[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1\" + a) +\n          (n[1] ? o + n[1] : \"\")\n        );\n      }\n      \"string\" == typeof t && (t = t.replace(\".\", \"\"));\n      var o = \"\",\n        n = /\\{\\{\\s*(\\w+)\\s*\\}\\}/,\n        i = r || this.money_format;\n      switch (i.match(n)[1]) {\n        case \"amount\":\n          o = a(t, 2);\n          break;\n        case \"amount_no_decimals\":\n          o = a(t, 0);\n          break;\n        case \"amount_with_comma_separator\":\n          o = a(t, 2, \".\", \",\");\n          break;\n        case \"amount_with_space_separator\":\n          o = a(t, 2, \" \", \",\");\n          break;\n        case \"amount_with_period_and_space_separator\":\n          o = a(t, 2, \" \", \".\");\n          break;\n        case \"amount_no_decimals_with_comma_separator\":\n          o = a(t, 0, \".\", \",\");\n          break;\n        case \"amount_no_decimals_with_space_separator\":\n          o = a(t, 0, \" \", \"\");\n          break;\n        case \"amount_with_apostrophe_separator\":\n          o = a(t, 2, \"'\", \".\");\n          break;\n        case \"amount_with_decimal_separator\":\n          o = a(t, 2, \".\", \".\");\n      }\n\n      return i.replace(n, o);\n    },\n    formatImage: function formatImage(originalImageUrl, format) {\n      return originalImageUrl\n        ? originalImageUrl.replace(/^(.*)\\.([^\\.]*)$/g, \"$1_\" + format + \".$2\")\n        : \"\";\n    },\n    Image: {\n      imageSize: function imageSize(t) {\n        var e = t.match(\n          /.+_((?:pico|icon|thumb|small|compact|medium|large|grande)|\\d{1,4}x\\d{0,4}|x\\d{1,4})[_\\.@]/\n        );\n        return null !== e ? e[1] : null;\n      },\n      getSizedImageUrl: function getSizedImageUrl(t, e) {\n        if (null == e) return t;\n        if (\"master\" == e) return this.removeProtocol(t);\n        var o = t.match(/\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?$/i);\n        if (null != o) {\n          var i = t.split(o[0]),\n            r = o[0];\n          return this.removeProtocol(i[0] + \"_\" + e + r);\n        }\n        return null;\n      },\n      removeProtocol: function removeProtocol(t) {\n        return t.replace(/http(s)?:/, \"\");\n      },\n    },\n  };\n  theme.Disclosure = (function () {\n    var selectors = {\n      disclosureList: \"[data-disclosure-list]\",\n      disclosureToggle: \"[data-disclosure-toggle]\",\n      disclosureInput: \"[data-disclosure-input]\",\n      disclosureOptions: \"[data-disclosure-option]\",\n    };\n\n    var classes = {\n      listVisible: \"disclosure-list--visible\",\n    };\n\n    function Disclosure($disclosure) {\n      this.$container = $disclosure;\n      this.cache = {};\n      this._cacheSelectors();\n      this._connectOptions();\n      this._connectToggle();\n      this._onFocusOut();\n    }\n\n    Disclosure.prototype = $.extend({}, Disclosure.prototype, {\n      _cacheSelectors: function _cacheSelectors() {\n        this.cache = {\n          $disclosureList: this.$container.find(selectors.disclosureList),\n          $disclosureToggle: this.$container.find(selectors.disclosureToggle),\n          $disclosureInput: this.$container.find(selectors.disclosureInput),\n          $disclosureOptions: this.$container.find(selectors.disclosureOptions),\n        };\n      },\n\n      _connectToggle: function _connectToggle() {\n        this.cache.$disclosureToggle.on(\n          \"click\",\n          function (evt) {\n            var ariaExpanded =\n              $(evt.currentTarget).attr(\"aria-expanded\") === \"true\";\n            $(evt.currentTarget).attr(\"aria-expanded\", !ariaExpanded);\n\n            this.cache.$disclosureList.toggleClass(classes.listVisible);\n          }.bind(this)\n        );\n      },\n\n      _connectOptions: function _connectOptions() {\n        this.cache.$disclosureOptions.on(\n          \"click\",\n          function (evt) {\n            evt.preventDefault();\n            this._submitForm($(evt.currentTarget).data(\"value\"));\n          }.bind(this)\n        );\n      },\n\n      _onFocusOut: function _onFocusOut() {\n        this.cache.$disclosureToggle.on(\n          \"focusout\",\n          function (evt) {\n            var disclosureLostFocus =\n              this.$container.has(evt.relatedTarget).length === 0;\n\n            if (disclosureLostFocus) {\n              this._hideList();\n            }\n          }.bind(this)\n        );\n\n        this.cache.$disclosureList.on(\n          \"focusout\",\n          function (evt) {\n            var childInFocus =\n              $(evt.currentTarget).has(evt.relatedTarget).length > 0;\n            var isVisible = this.cache.$disclosureList.hasClass(\n              classes.listVisible\n            );\n\n            if (isVisible && !childInFocus) {\n              this._hideList();\n            }\n          }.bind(this)\n        );\n\n        this.$container.on(\n          \"keyup\",\n          function (evt) {\n            if (evt.which !== 27) return; // escape\n            this._hideList();\n            this.cache.$disclosureToggle.focus();\n          }.bind(this)\n        );\n\n        this.bodyOnClick = function (evt) {\n          var isOption = this.$container.has(evt.target).length > 0;\n          var isVisible = this.cache.$disclosureList.hasClass(\n            classes.listVisible\n          );\n\n          if (isVisible && !isOption) {\n            this._hideList();\n          }\n        }.bind(this);\n\n        $(\"body\").on(\"click\", this.bodyOnClick);\n      },\n\n      _submitForm: function _submitForm(value) {\n        this.cache.$disclosureInput.val(value);\n        this.$container.parents(\"form\").submit();\n      },\n\n      _hideList: function _hideList() {\n        this.cache.$disclosureList.removeClass(classes.listVisible);\n        this.cache.$disclosureToggle.attr(\"aria-expanded\", false);\n      },\n\n      unload: function unload() {\n        $(\"body\").off(\"click\", this.bodyOnClick);\n        this.cache.$disclosureOptions.off();\n        this.cache.$disclosureToggle.off();\n        this.cache.$disclosureList.off();\n        this.$container.off();\n      },\n    });\n\n    return Disclosure;\n  })();\n  (function () {\n    function throttle(callback, threshold) {\n      var debounceTimeoutId = -1;\n      var tick = false;\n\n      return function () {\n        clearTimeout(debounceTimeoutId);\n        debounceTimeoutId = setTimeout(callback, threshold);\n\n        if (!tick) {\n          callback.call();\n          tick = true;\n          setTimeout(function () {\n            tick = false;\n          }, threshold);\n        }\n      };\n    }\n\n    var scrollEvent = document.createEvent(\"Event\");\n    scrollEvent.initEvent(\"throttled-scroll\", true, true);\n\n    window.addEventListener(\n      \"scroll\",\n      throttle(function () {\n        window.dispatchEvent(scrollEvent);\n      }, 200)\n    );\n  })();\n  // Source: https://davidwalsh.name/javascript-debounce-function\n  // Returns a function, that, as long as it continues to be invoked, will not\n  // be triggered. The function will be called after it stops being called for\n  // N milliseconds. If `immediate` is passed, trigger the function on the\n  // leading edge, instead of the trailing.\n  theme.debounce = function (func) {\n    var wait =\n      arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 700;\n    var immediate = arguments.length > 2 ? arguments[2] : undefined;\n    var timeout;\n    return function () {\n      var context = this,\n        args = arguments;\n      var later = function later() {\n        timeout = null;\n        if (!immediate) func.apply(context, args);\n      };\n      var callNow = immediate && !timeout;\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n      if (callNow) func.apply(context, args);\n    };\n  };\n  // requires: throttled-scroll, debouncedresize\n\n  /*\n    Define a section by creating a new function object and registering it with the section handler.\n    The section handler manages:\n      Instantiation for all sections on the current page\n      Theme editor lifecycle events\n      Deferred initialisation\n      Event cleanup\n\n    There are two ways to register a section.\n    In a theme:\n      theme.Sections.register('slideshow', theme.SlideshowSection);\n      theme.Sections.register('header', theme.HeaderSection, { deferredLoad: false });\n      theme.Sections.register('background-video', theme.VideoManager, { deferredLoadViewportExcess: 800 });\n\n    As a component:\n      cc.sections.push({ name: 'faq', section: theme.Faq });\n\n    Assign any of these to receive Shopify section lifecycle events:\n      this.onSectionLoad\n      this.afterSectionLoadCallback\n      this.onSectionSelect\n      this.onSectionDeselect\n      this.onBlockSelect\n      this.onBlockDeselect\n      this.onSectionUnload\n      this.afterSectionUnloadCallback\n      this.onSectionReorder\n\n    If you add any events using the manager's registerEventListener,\n    e.g. this.registerEventListener(element, 'click', this.functions.handleClick.bind(this)),\n    these will be automatically cleaned up after onSectionUnload.\n   */\n\n  theme.Sections = new (function () {\n    var _ = this;\n\n    _._instances = [];\n    _._deferredSectionTargets = [];\n    _._sections = [];\n    _._deferredLoadViewportExcess = 300; // load defferred sections within this many px of viewport\n    _._deferredWatcherRunning = false;\n\n    _.init = function () {\n      $(document)\n        .on(\"shopify:section:load\", function (e) {\n          // load a new section\n          var target = _._themeSectionTargetFromShopifySectionTarget(e.target);\n          if (target) {\n            _.sectionLoad(target);\n          }\n        })\n        .on(\"shopify:section:unload\", function (e) {\n          // unload existing section\n          var target = _._themeSectionTargetFromShopifySectionTarget(e.target);\n          if (target) {\n            _.sectionUnload(target);\n          }\n        })\n        .on(\"shopify:section:reorder\", function (e) {\n          // unload existing section\n          var target = _._themeSectionTargetFromShopifySectionTarget(e.target);\n          if (target) {\n            _.sectionReorder(target);\n          }\n        });\n      $(window).on(\n        \"throttled-scroll.themeSectionDeferredLoader debouncedresize.themeSectionDeferredLoader\",\n        _._processDeferredSections\n      );\n      _._deferredWatcherRunning = true;\n    };\n\n    // register a type of section\n    _.register = function (type, section, options) {\n      _._sections.push({\n        type: type,\n        section: section,\n        afterSectionLoadCallback: options ? options.afterLoad : null,\n        afterSectionUnloadCallback: options ? options.afterUnload : null,\n      });\n\n      // load now\n      $('[data-section-type=\"' + type + '\"]').each(function () {\n        if (\n          Shopify.designMode ||\n          (options && options.deferredLoad === false) ||\n          !_._deferredWatcherRunning\n        ) {\n          _.sectionLoad(this);\n        } else {\n          _.sectionDeferredLoad(this, options);\n        }\n      });\n    };\n\n    // prepare a section to load later\n    _.sectionDeferredLoad = function (target, options) {\n      _._deferredSectionTargets.push({\n        target: target,\n        deferredLoadViewportExcess:\n          options && options.deferredLoadViewportExcess\n            ? options.deferredLoadViewportExcess\n            : _._deferredLoadViewportExcess,\n      });\n      _._processDeferredSections(true);\n    };\n\n    // load deferred sections if in/near viewport\n    _._processDeferredSections = function (firstRunCheck) {\n      if (_._deferredSectionTargets.length) {\n        var viewportTop = $(window).scrollTop(),\n          viewportBottom = viewportTop + $(window).height(),\n          loopStart =\n            firstRunCheck === true ? _._deferredSectionTargets.length - 1 : 0;\n        for (var i = loopStart; i < _._deferredSectionTargets.length; i++) {\n          var target = _._deferredSectionTargets[i].target,\n            viewportExcess =\n              _._deferredSectionTargets[i].deferredLoadViewportExcess,\n            sectionTop = $(target).offset().top - viewportExcess,\n            doLoad = sectionTop > viewportTop && sectionTop < viewportBottom;\n          if (!doLoad) {\n            var sectionBottom =\n              sectionTop + $(target).outerHeight() + viewportExcess * 2;\n            doLoad =\n              sectionBottom > viewportTop && sectionBottom < viewportBottom;\n          }\n          if (\n            doLoad ||\n            (sectionTop < viewportTop && sectionBottom > viewportBottom)\n          ) {\n            // in viewport, load\n            _.sectionLoad(target);\n            // remove from deferred queue and resume checks\n            _._deferredSectionTargets.splice(i, 1);\n            i--;\n          }\n        }\n      }\n\n      // remove event if no more deferred targets left, if not on first run\n      if (firstRunCheck !== true && _._deferredSectionTargets.length === 0) {\n        _._deferredWatcherRunning = false;\n        $(window).off(\".themeSectionDeferredLoader\");\n      }\n    };\n\n    // load in a section\n    _.sectionLoad = function (target) {\n      var target = target,\n        sectionObj = _._sectionForTarget(target),\n        section = false;\n\n      if (sectionObj.section) {\n        section = sectionObj.section;\n      } else {\n        section = sectionObj;\n      }\n\n      if (section !== false) {\n        var instance = {\n          target: target,\n          section: section,\n          $shopifySectionContainer: $(target).closest(\".shopify-section\"),\n          thisContext: {\n            functions: section.functions,\n            registeredEventListeners: [],\n          },\n        };\n        instance.thisContext.registerEventListener =\n          _._registerEventListener.bind(instance.thisContext);\n        _._instances.push(instance);\n\n        //Initialise any components\n        if ($(target).data(\"components\")) {\n          //Init each component\n          var components = $(target).data(\"components\").split(\",\");\n          components.forEach((component) => {\n            $(document).trigger(\"cc:component:load\", [component, target]);\n          });\n        }\n\n        _._callSectionWith(\n          section,\n          \"onSectionLoad\",\n          target,\n          instance.thisContext\n        );\n        _._callSectionWith(\n          section,\n          \"afterSectionLoadCallback\",\n          target,\n          instance.thisContext\n        );\n\n        // attach additional UI events if defined\n        if (section.onSectionSelect) {\n          instance.$shopifySectionContainer.on(\n            \"shopify:section:select\",\n            function (e) {\n              _._callSectionWith(\n                section,\n                \"onSectionSelect\",\n                e.target,\n                instance.thisContext\n              );\n            }\n          );\n        }\n        if (section.onSectionDeselect) {\n          instance.$shopifySectionContainer.on(\n            \"shopify:section:deselect\",\n            function (e) {\n              _._callSectionWith(\n                section,\n                \"onSectionDeselect\",\n                e.target,\n                instance.thisContext\n              );\n            }\n          );\n        }\n        if (section.onBlockSelect) {\n          $(target).on(\"shopify:block:select\", function (e) {\n            _._callSectionWith(\n              section,\n              \"onBlockSelect\",\n              e.target,\n              instance.thisContext\n            );\n          });\n        }\n        if (section.onBlockDeselect) {\n          $(target).on(\"shopify:block:deselect\", function (e) {\n            _._callSectionWith(\n              section,\n              \"onBlockDeselect\",\n              e.target,\n              instance.thisContext\n            );\n          });\n        }\n      }\n    };\n\n    // unload a section\n    _.sectionUnload = function (target) {\n      var sectionObj = _._sectionForTarget(target);\n      var instanceIndex = -1;\n      for (var i = 0; i < _._instances.length; i++) {\n        if (_._instances[i].target == target) {\n          instanceIndex = i;\n        }\n      }\n      if (instanceIndex > -1) {\n        var instance = _._instances[instanceIndex];\n        // remove events and call unload, if loaded\n        $(target).off(\"shopify:block:select shopify:block:deselect\");\n        instance.$shopifySectionContainer.off(\n          \"shopify:section:select shopify:section:deselect\"\n        );\n        _._callSectionWith(\n          instance.section,\n          \"onSectionUnload\",\n          target,\n          instance.thisContext\n        );\n        _._unloadRegisteredEventListeners(\n          instance.thisContext.registeredEventListeners\n        );\n        _._callSectionWith(\n          sectionObj,\n          \"afterSectionUnloadCallback\",\n          target,\n          instance.thisContext\n        );\n        _._instances.splice(instanceIndex);\n\n        //Destroy any components\n        if ($(target).data(\"components\")) {\n          //Init each component\n          var components = $(target).data(\"components\").split(\",\");\n          components.forEach((component) => {\n            $(document).trigger(\"cc:component:unload\", [component, target]);\n          });\n        }\n      } else {\n        // check if it was a deferred section\n        for (var i = 0; i < _._deferredSectionTargets.length; i++) {\n          if (_._deferredSectionTargets[i].target == target) {\n            _._deferredSectionTargets[i].splice(i, 1);\n            break;\n          }\n        }\n      }\n    };\n\n    _.sectionReorder = function (target) {\n      var instanceIndex = -1;\n      for (var i = 0; i < _._instances.length; i++) {\n        if (_._instances[i].target == target) {\n          instanceIndex = i;\n        }\n      }\n      if (instanceIndex > -1) {\n        var instance = _._instances[instanceIndex];\n        _._callSectionWith(\n          instance.section,\n          \"onSectionReorder\",\n          target,\n          instance.thisContext\n        );\n      }\n    };\n\n    // Helpers\n    _._registerEventListener = function (element, eventType, callback) {\n      element.addEventListener(eventType, callback);\n      this.registeredEventListeners.push({\n        element,\n        eventType,\n        callback,\n      });\n    };\n\n    _._unloadRegisteredEventListeners = function (registeredEventListeners) {\n      registeredEventListeners.forEach((rel) => {\n        rel.element.removeEventListener(rel.eventType, rel.callback);\n      });\n    };\n\n    _._callSectionWith = function (section, method, container, thisContext) {\n      if (typeof section[method] === \"function\") {\n        try {\n          if (thisContext) {\n            section[method].bind(thisContext)(container);\n          } else {\n            section[method](container);\n          }\n        } catch (ex) {\n          var sectionType = container.dataset[\"sectionType\"];\n          console.warn(\n            \"Theme warning: '\"\n              .concat(method, \"' failed for section '\")\n              .concat(sectionType, \"'\")\n          );\n          console.debug(container, ex);\n        }\n      }\n    };\n\n    _._themeSectionTargetFromShopifySectionTarget = function (target) {\n      var $target = $(\"[data-section-type]:first\", target);\n      if ($target.length > 0) {\n        return $target[0];\n      } else {\n        return false;\n      }\n    };\n\n    _._sectionForTarget = function (target) {\n      var type = $(target).attr(\"data-section-type\");\n      for (var i = 0; i < _._sections.length; i++) {\n        if (_._sections[i].type == type) {\n          return _._sections[i];\n        }\n      }\n      return false;\n    };\n\n    _._sectionAlreadyRegistered = function (type) {\n      for (var i = 0; i < _._sections.length; i++) {\n        if (_._sections[i].type == type) {\n          return true;\n        }\n      }\n      return false;\n    };\n  })();\n  // Loading third party scripts\n  theme.scriptsLoaded = {};\n  theme.loadScriptOnce = function (src, callback, beforeRun, sync) {\n    if (typeof theme.scriptsLoaded[src] === \"undefined\") {\n      theme.scriptsLoaded[src] = [];\n      var tag = document.createElement(\"script\");\n      tag.src = src;\n\n      if (sync || beforeRun) {\n        tag.async = false;\n      }\n\n      if (beforeRun) {\n        beforeRun();\n      }\n\n      if (typeof callback === \"function\") {\n        theme.scriptsLoaded[src].push(callback);\n        if (tag.readyState) {\n          // IE, incl. IE9\n          tag.onreadystatechange = function () {\n            if (tag.readyState == \"loaded\" || tag.readyState == \"complete\") {\n              tag.onreadystatechange = null;\n              for (var i = 0; i < theme.scriptsLoaded[this].length; i++) {\n                theme.scriptsLoaded[this][i]();\n              }\n              theme.scriptsLoaded[this] = true;\n            }\n          }.bind(src);\n        } else {\n          tag.onload = function () {\n            // Other browsers\n            for (var i = 0; i < theme.scriptsLoaded[this].length; i++) {\n              theme.scriptsLoaded[this][i]();\n            }\n            theme.scriptsLoaded[this] = true;\n          }.bind(src);\n        }\n      }\n\n      var firstScriptTag = document.getElementsByTagName(\"script\")[0];\n      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n      return true;\n    } else if (\n      typeof theme.scriptsLoaded[src] === \"object\" &&\n      typeof callback === \"function\"\n    ) {\n      theme.scriptsLoaded[src].push(callback);\n    } else {\n      if (typeof callback === \"function\") {\n        callback();\n      }\n      return false;\n    }\n  };\n\n  theme.loadStyleOnce = function (src) {\n    var srcWithoutProtocol = src.replace(/^https?:/, \"\");\n    if (\n      !document.querySelector(\n        'link[href=\"' + encodeURI(srcWithoutProtocol) + '\"]'\n      )\n    ) {\n      var tag = document.createElement(\"link\");\n      tag.href = srcWithoutProtocol;\n      tag.rel = \"stylesheet\";\n      tag.type = \"text/css\";\n      var firstTag = document.getElementsByTagName(\"link\")[0];\n      firstTag.parentNode.insertBefore(tag, firstTag);\n    }\n  }; /// Show a short-lived text popup above an element\n  theme.showQuickPopup = function (message, $origin) {\n    var $popup = $('<div class=\"simple-popup\"/>');\n    var offs = $origin.offset();\n    $popup.html(message).css({ left: offs.left, top: offs.top }).hide();\n    $(\"body\").append($popup);\n    $popup.css({\n      marginTop: -$popup.outerHeight() - 10,\n      marginLeft: -($popup.outerWidth() - $origin.outerWidth()) / 2,\n    });\n    $popup\n      .fadeIn(200)\n      .delay(3500)\n      .fadeOut(400, function () {\n        $(this).remove();\n      });\n  };\n  class ccComponent {\n    constructor(name) {\n      var cssSelector =\n        arguments.length > 1 && arguments[1] !== undefined\n          ? arguments[1]\n          : \".cc-\".concat(name);\n      var _this = this;\n      this.instances = [];\n\n      // Initialise any instance of this component within a section\n      $(document).on(\"cc:component:load\", function (event, component, target) {\n        if (component === name) {\n          $(target)\n            .find(\"\".concat(cssSelector, \":not(.cc-initialized)\"))\n            .each(function () {\n              _this.init(this);\n            });\n        }\n      });\n\n      // Destroy any instance of this component within a section\n      $(document).on(\n        \"cc:component:unload\",\n        function (event, component, target) {\n          if (component === name) {\n            $(target)\n              .find(cssSelector)\n              .each(function () {\n                _this.destroy(this);\n              });\n          }\n        }\n      );\n\n      // Initialise any instance of this component\n      $(cssSelector).each(function () {\n        _this.init(this);\n      });\n    }\n\n    init(container) {\n      $(container).addClass(\"cc-initialized\");\n    }\n\n    destroy(container) {\n      $(container).removeClass(\"cc-initialized\");\n    }\n\n    registerInstance(container, instance) {\n      this.instances.push({\n        container,\n        instance,\n      });\n    }\n\n    destroyInstance(container) {\n      this.instances = this.instances.filter((item) => {\n        if (item.container === container) {\n          if (typeof item.instance.destroy === \"function\") {\n            item.instance.destroy();\n          }\n\n          return item.container !== container;\n        }\n      });\n    }\n  }\n  /**\n   * Use with template literals to build HTML with correct escaping.\n   *\n   * Example:\n   *\n   * const tve = theme.createTemplateVariableEncoder();\n   * tve.add('className', className, 'attribute');\n   * tve.add('title', title, 'html');\n   * tve.add('richText', richText, 'raw');\n   * const template = `\n   *   <div class=\"${tve.values.className}\">\n   *     <h1>${tve.values.title}</h1>\n   *     <div class=\"rte\">${tve.values.richText}</div>\n   *   </div>\n   * `;\n   */\n  theme.createTemplateVariableEncoder = function () {\n    return {\n      utilityElement: document.createElement(\"div\"),\n      values: {},\n      /**\n       * Add a new value to sanitise.\n       * @param {String} key - key used to retrieve this value\n       * @param {String} value - the value to encode and store\n       * @param {String} type - possible values: [attribute, html, raw] - the type of encoding to use\n       */\n      add: function add(key, value, type) {\n        switch (type) {\n          case \"attribute\":\n            this.utilityElement.innerHTML = \"\";\n            this.utilityElement.setAttribute(\"util\", value);\n            this.values[key] =\n              this.utilityElement.outerHTML.match(/util=\"([^\"]*)\"/)[1];\n            break;\n          case \"html\":\n            this.utilityElement.innerText = value;\n            this.values[key] = this.utilityElement.innerHTML;\n            break;\n          case \"raw\":\n            this.values[key] = value;\n            break;\n          default:\n            throw \"Type '\".concat(type, \"' not handled\");\n        }\n      },\n    };\n  };\n  theme.suffixIds = function (container, suffix) {\n    var refAttrs = [\"aria-describedby\", \"aria-controls\"];\n    suffix = \"-\" + suffix;\n    container.querySelectorAll(\"[id]\").forEach((el) => {\n      var oldId = el.id,\n        newId = oldId + suffix;\n      el.id = newId;\n      refAttrs.forEach((attr) => {\n        container\n          .querySelectorAll(\"[\".concat(attr, '=\"').concat(oldId, '\"]'))\n          .forEach((refEl) => {\n            refEl.setAttribute(attr, newId);\n          });\n      });\n    });\n  };\n  theme.renderUnitPrice = function (\n    unit_price,\n    unit_price_measurement,\n    money_format\n  ) {\n    console.log(\"money_format\", money_format);\n    if (unit_price && unit_price_measurement) {\n      var unitPriceHtml = '<div class=\"unit-price\">';\n      unitPriceHtml += '<span class=\"unit-price__price theme-money\">'.concat(\n        theme.Shopify.formatMoney(unit_price, money_format),\n        \"</span>\"\n      );\n      unitPriceHtml += '<span class=\"unit-price__separator\">'.concat(\n        theme.strings.products_product_unit_price_separator,\n        \"</span>\"\n      );\n      var unit = unit_price_measurement.reference_unit;\n      if (unit_price_measurement.reference_value != 1) {\n        unit = unit_price_measurement.reference_value + unit;\n      }\n      unitPriceHtml += '<span class=\"unit-price__unit\">'.concat(\n        unit,\n        \"</span>\"\n      );\n      unitPriceHtml += \"</div>\";\n      return unitPriceHtml;\n    } else {\n      return \"\";\n    }\n  };\n  class ccPopup {\n    constructor($container, namespace) {\n      this.$container = $container;\n      this.namespace = namespace;\n      this.cssClasses = {\n        visible: \"cc-popup--visible\",\n        bodyNoScroll: \"cc-popup-no-scroll\",\n        bodyNoScrollPadRight: \"cc-popup-no-scroll-pad-right\",\n      };\n    }\n\n    /**\n     * Open popup on timer / local storage - move focus to input ensure you can tab to submit and close\n     * Add the cc-popup--visible class\n     * Update aria to visible\n     */\n    open(callback) {\n      // Prevent the body from scrolling\n      if (this.$container.data(\"freeze-scroll\")) {\n        clearTimeout(theme.ccPopupRemoveScrollFreezeTimeoutId);\n        $(\"body\").addClass(this.cssClasses.bodyNoScroll);\n\n        // Add any padding necessary to the body to compensate for the scrollbar that just disappeared\n        var scrollDiv = document.createElement(\"div\");\n        scrollDiv.className = \"popup-scrollbar-measure\";\n        document.body.appendChild(scrollDiv);\n        var scrollbarWidth =\n          scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n        document.body.removeChild(scrollDiv);\n        if (scrollbarWidth > 0) {\n          $(\"body\")\n            .css(\"padding-right\", scrollbarWidth + \"px\")\n            .addClass(this.cssClasses.bodyNoScrollPadRight);\n        }\n      }\n\n      // Add reveal class\n      this.$container.addClass(this.cssClasses.visible);\n\n      // Track previously focused element\n      this.previouslyActiveElement = document.activeElement;\n\n      // Focus on the close button after the animation in has completed\n      setTimeout(() => {\n        this.$container.find(\".cc-popup-close\")[0].focus();\n      }, 500);\n\n      // Pressing escape closes the modal\n      $(window).on(\"keydown\" + this.namespace, (event) => {\n        if (event.keyCode === 27) {\n          this.close();\n        }\n      });\n\n      if (callback) {\n        callback();\n      }\n    }\n\n    /**\n     * Close popup on click of close button or background - where does the focus go back to?\n     * Remove the cc-popup--visible class\n     */\n    close(callback) {\n      // Remove reveal class\n      this.$container.removeClass(this.cssClasses.visible);\n\n      // Revert focus\n      if (this.previouslyActiveElement) {\n        $(this.previouslyActiveElement).focus();\n      }\n\n      // Destroy the escape event listener\n      $(window).off(\"keydown\" + this.namespace);\n\n      // Allow the body to scroll and remove any scrollbar-compensating padding, if no other scroll-freeze popups are visible\n      var $visibleFreezePopups = $(\".\" + this.cssClasses.visible).filter(() => {\n        return this.$container.data(\"freeze-scroll\");\n      });\n      if ($visibleFreezePopups.length === 0) {\n        var transitionDuration = 500;\n\n        var $innerModal = this.$container.find(\".cc-popup-modal\");\n        if ($innerModal.length) {\n          transitionDuration = parseFloat(\n            getComputedStyle($innerModal[0])[\"transitionDuration\"]\n          );\n          if (transitionDuration && transitionDuration > 0) {\n            transitionDuration *= 1000;\n          }\n        }\n\n        theme.ccPopupRemoveScrollFreezeTimeoutId = setTimeout(() => {\n          $(\"body\")\n            .removeClass(this.cssClasses.bodyNoScroll)\n            .removeClass(this.cssClasses.bodyNoScrollPadRight)\n            .css(\"padding-right\", \"0\");\n        }, transitionDuration);\n      }\n\n      if (callback) {\n        callback();\n      }\n    }\n  }\n  (() => {\n    theme.initAnimateOnScroll = function () {\n      if (\n        document.body.classList.contains(\"cc-animate-enabled\") &&\n        window.innerWidth >= 768\n      ) {\n        var animationTimeout =\n          typeof document.body.dataset.ccAnimateTimeout !== \"undefined\"\n            ? document.body.dataset.ccAnimateTimeout\n            : 200;\n\n        if (\"IntersectionObserver\" in window) {\n          var intersectionObserver = new IntersectionObserver(\n            (entries, observer) => {\n              entries.forEach((entry) => {\n                // In view and hasn't been animated yet\n                if (\n                  entry.isIntersecting &&\n                  !entry.target.classList.contains(\"cc-animate-complete\")\n                ) {\n                  setTimeout(() => {\n                    entry.target.classList.add(\"-in\", \"cc-animate-complete\");\n                  }, animationTimeout);\n\n                  setTimeout(() => {\n                    //Once the animation is complete (assume 5 seconds), remove the animate attribute to remove all css\n                    entry.target.classList.remove(\"data-cc-animate\");\n                    entry.target.style.transitionDuration = null;\n                    entry.target.style.transitionDelay = null;\n                  }, 5000);\n\n                  // Remove observer after animation\n                  observer.unobserve(entry.target);\n                }\n              });\n            }\n          );\n\n          document\n            .querySelectorAll(\"[data-cc-animate]:not(.cc-animate-init)\")\n            .forEach((elem) => {\n              //Set the animation delay\n              if (elem.dataset.ccAnimateDelay) {\n                elem.style.transitionDelay = elem.dataset.ccAnimateDelay;\n              }\n\n              ///Set the animation duration\n              if (elem.dataset.ccAnimateDuration) {\n                elem.style.transitionDuration = elem.dataset.ccAnimateDuration;\n              }\n\n              //Init the animation\n              if (elem.dataset.ccAnimate) {\n                elem.classList.add(elem.dataset.ccAnimate);\n              }\n\n              elem.classList.add(\"cc-animate-init\");\n\n              //Watch for elem\n              intersectionObserver.observe(elem);\n            });\n        } else {\n          //Fallback, load all the animations now\n          var elems = document.querySelectorAll(\n            \"[data-cc-animate]:not(.cc-animate-init)\"\n          );\n          for (var i = 0; i < elems.length; i++) {\n            elems[i].classList.add(\"-in\", \"cc-animate-complete\");\n          }\n        }\n      }\n    };\n\n    theme.initAnimateOnScroll();\n\n    document.addEventListener(\"shopify:section:load\", () => {\n      setTimeout(theme.initAnimateOnScroll, 100);\n    });\n\n    //Reload animations when changing from mobile to desktop\n    try {\n      window\n        .matchMedia(\"(min-width: 768px)\")\n        .addEventListener(\"change\", (event) => {\n          if (event.matches) {\n            setTimeout(theme.initAnimateOnScroll, 100);\n          }\n        });\n    } catch (e) {}\n  })();\n\n  class AccordionInstance {\n    constructor(container) {\n      this.accordion = container;\n      this.itemClass = \".cc-accordion-item\";\n      this.titleClass = \".cc-accordion-item__title\";\n      this.panelClass = \".cc-accordion-item__panel\";\n      this.allowMultiOpen = this.accordion.dataset.allowMultiOpen === \"true\";\n\n      // If multiple open items not allowed, set open item as active (if there is one)\n      if (!this.allowMultiOpen) {\n        this.activeItem = this.accordion.querySelector(\n          \"\".concat(this.itemClass, \"[open]\")\n        );\n      }\n\n      this.bindEvents();\n    }\n\n    /**\n     * Adds inline 'height' style to a panel, to trigger open transition\n     * @param {HTMLDivElement} panel - The accordion item content panel\n     */\n    static addPanelHeight(panel) {\n      panel.style.height = \"\".concat(panel.scrollHeight, \"px\");\n    }\n\n    /**\n     * Removes inline 'height' style from a panel, to trigger close transition\n     * @param {HTMLDivElement} panel - The accordion item content panel\n     */\n    static removePanelHeight(panel) {\n      panel.getAttribute(\"style\"); // Fix Safari bug (doesn't remove attribute without this first!)\n      panel.removeAttribute(\"style\");\n    }\n\n    /**\n     * Opens an accordion item\n     * @param {HTMLDetailsElement} item - The accordion item\n     * @param {HTMLDivElement} panel - The accordion item content panel\n     */\n    open(item, panel) {\n      panel.style.height = \"0\";\n\n      // Set item to open. Blocking the default click action and opening it this way prevents a\n      // slight delay which causes the panel height to be set to '0' (because item's not open yet)\n      item.open = true;\n\n      AccordionInstance.addPanelHeight(panel);\n\n      // Slight delay required before starting transitions\n      setTimeout(() => {\n        item.classList.add(\"is-open\");\n      }, 10);\n\n      if (!this.allowMultiOpen) {\n        // If there's an active item and it's not the opened item, close it\n        if (this.activeItem && this.activeItem !== item) {\n          var activePanel = this.activeItem.querySelector(this.panelClass);\n          this.close(this.activeItem, activePanel);\n        }\n\n        this.activeItem = item;\n      }\n    }\n\n    /**\n     * Closes an accordion item\n     * @param {HTMLDetailsElement} item - The accordion item\n     * @param {HTMLDivElement} panel - The accordion item content panel\n     */\n    close(item, panel) {\n      AccordionInstance.addPanelHeight(panel);\n\n      item.classList.remove(\"is-open\");\n      item.classList.add(\"is-closing\");\n\n      if (this.activeItem === item) {\n        this.activeItem = null;\n      }\n\n      // Slight delay required to allow scroll height to be applied before changing to '0'\n      setTimeout(() => {\n        panel.style.height = \"0\";\n      }, 10);\n    }\n\n    /**\n     * Handles 'click' event on the accordion\n     * @param {Object} e - The event object\n     */\n    handleClick(e) {\n      // Ignore clicks outside a toggle (<summary> element)\n      var toggle = e.target.closest(this.titleClass);\n      if (!toggle) return;\n\n      // Prevent the default action\n      // We'll trigger it manually after open transition initiated or close transition complete\n      e.preventDefault();\n\n      var item = toggle.parentNode;\n      var panel = toggle.nextElementSibling;\n\n      if (item.open) {\n        this.close(item, panel);\n      } else {\n        this.open(item, panel);\n      }\n    }\n\n    /**\n     * Handles 'transitionend' event in the accordion\n     * @param {Object} e - The event object\n     */\n    handleTransition(e) {\n      // Ignore transitions not on a panel element\n      if (!e.target.matches(this.panelClass)) return;\n\n      var panel = e.target;\n      var item = panel.parentNode;\n\n      if (item.classList.contains(\"is-closing\")) {\n        item.classList.remove(\"is-closing\");\n        item.open = false;\n      }\n\n      AccordionInstance.removePanelHeight(panel);\n    }\n\n    bindEvents() {\n      // Need to assign the function calls to variables because bind creates a new function,\n      // which means the event listeners can't be removed in the usual way\n      this.clickHandler = this.handleClick.bind(this);\n      this.transitionHandler = this.handleTransition.bind(this);\n\n      this.accordion.addEventListener(\"click\", this.clickHandler);\n      this.accordion.addEventListener(\"transitionend\", this.transitionHandler);\n    }\n\n    destroy() {\n      this.accordion.removeEventListener(\"click\", this.clickHandler);\n      this.accordion.removeEventListener(\n        \"transitionend\",\n        this.transitionHandler\n      );\n    }\n  }\n\n  class Accordion extends ccComponent {\n    constructor() {\n      var name =\n        arguments.length > 0 && arguments[0] !== undefined\n          ? arguments[0]\n          : \"accordion\";\n      var cssSelector =\n        arguments.length > 1 && arguments[1] !== undefined\n          ? arguments[1]\n          : \".cc-\".concat(name);\n      super(name, cssSelector);\n    }\n\n    init(container) {\n      super.init(container);\n      this.registerInstance(container, new AccordionInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }\n  }\n\n  new Accordion();\n  class CustomSelectInstance {\n    constructor(el) {\n      this.el = el;\n      this.button = el.querySelector(\".cc-select__btn\");\n      this.listbox = el.querySelector(\".cc-select__listbox\");\n      this.options = el.querySelectorAll(\".cc-select__option\");\n      this.selectedOption = el.querySelector('[aria-selected=\"true\"]');\n      this.nativeSelect = document.getElementById(\"\".concat(el.id, \"-native\"));\n      this.swatches = \"swatch\" in this.options[this.options.length - 1].dataset;\n      this.focusedClass = \"is-focused\";\n      this.searchString = \"\";\n      this.listboxOpen = false;\n\n      // Set the selected option\n      if (!this.selectedOption) {\n        this.selectedOption = this.listbox.firstElementChild;\n      }\n\n      this.bindEvents();\n      this.setButtonWidth();\n    }\n\n    bindEvents() {\n      this.el.addEventListener(\"keydown\", this.handleKeydown.bind(this));\n      this.el.addEventListener(\n        \"selectOption\",\n        this.handleSelectOption.bind(this)\n      );\n      this.button.addEventListener(\n        \"mousedown\",\n        this.handleMousedown.bind(this)\n      );\n    }\n\n    /**\n     * Adds event listeners when the options list is visible\n     */\n    addListboxOpenEvents() {\n      this.mouseoverHandler = this.handleMouseover.bind(this);\n      this.mouseleaveHandler = this.handleMouseleave.bind(this);\n      this.clickHandler = this.handleClick.bind(this);\n      this.blurHandler = this.handleBlur.bind(this);\n\n      this.listbox.addEventListener(\"mouseover\", this.mouseoverHandler);\n      this.listbox.addEventListener(\"mouseleave\", this.mouseleaveHandler);\n      this.listbox.addEventListener(\"click\", this.clickHandler);\n      this.listbox.addEventListener(\"blur\", this.blurHandler);\n    }\n\n    /**\n     * Removes event listeners added when the options list was visible\n     */\n    removeListboxOpenEvents() {\n      this.listbox.removeEventListener(\"mouseover\", this.mouseoverHandler);\n      this.listbox.removeEventListener(\"mouseleave\", this.mouseleaveHandler);\n      this.listbox.removeEventListener(\"click\", this.clickHandler);\n      this.listbox.removeEventListener(\"blur\", this.blurHandler);\n    }\n\n    /**\n     * Handles a 'keydown' event on the custom select element\n     * @param {Object} e - The event object\n     */\n    handleKeydown(e) {\n      if (this.listboxOpen) {\n        this.handleKeyboardNav(e);\n      } else if (\n        e.key === \"ArrowUp\" ||\n        e.key === \"ArrowDown\" ||\n        e.key === \" \"\n      ) {\n        e.preventDefault();\n        this.showListbox();\n      }\n    }\n\n    /**\n     * Handles a 'mousedown' event on the button element\n     * @param {Object} e - The event object\n     */\n    handleMousedown(e) {\n      if (!this.listboxOpen && e.button === 0) {\n        this.showListbox();\n      }\n    }\n\n    /**\n     * Handles a 'mouseover' event on the options list\n     * @param {Object} e - The event object\n     */\n    handleMouseover(e) {\n      if (e.target.matches(\"li\")) {\n        this.focusOption(e.target);\n      }\n    }\n\n    /**\n     * Handles a 'mouseleave' event on the options list\n     */\n    handleMouseleave() {\n      this.focusOption(this.selectedOption);\n    }\n\n    /**\n     * Handles a 'click' event on the options list\n     * @param {Object} e - The event object\n     */\n    handleClick(e) {\n      if (e.target.matches(\".js-option\")) {\n        this.selectOption(e.target);\n      }\n    }\n\n    /**\n     * Handles a 'blur' event on the options list\n     */\n    handleBlur() {\n      if (this.listboxOpen) {\n        this.hideListbox();\n      }\n    }\n\n    /**\n     * Handles a 'keydown' event on the options list\n     * @param {Object} e - The event object\n     */\n    handleKeyboardNav(e) {\n      var optionToFocus;\n\n      // Disable tabbing if options list is open (as per native select element)\n      if (e.key === \"Tab\") {\n        e.preventDefault();\n      }\n\n      switch (e.key) {\n        // Focus an option\n        case \"ArrowUp\":\n        case \"ArrowDown\":\n          e.preventDefault();\n\n          if (e.key === \"ArrowUp\") {\n            optionToFocus = this.focusedOption.previousElementSibling;\n          } else {\n            optionToFocus = this.focusedOption.nextElementSibling;\n          }\n\n          if (\n            optionToFocus &&\n            !optionToFocus.classList.contains(\"is-disabled\")\n          ) {\n            this.focusOption(optionToFocus);\n          }\n          break;\n\n        // Select an option\n        case \"Enter\":\n        case \" \":\n          e.preventDefault();\n          this.selectOption(this.focusedOption);\n          break;\n\n        // Cancel and close the options list\n        case \"Escape\":\n          e.preventDefault();\n          this.hideListbox();\n          break;\n\n        // Search for an option and focus the first match (if one exists)\n        default:\n          optionToFocus = this.findOption(e.key);\n\n          if (optionToFocus) {\n            this.focusOption(optionToFocus);\n          }\n          break;\n      }\n    }\n\n    /**\n     * Sets the button width to the same as the longest option, to prevent\n     * the button width from changing depending on the option selected\n     */\n    setButtonWidth() {\n      // Get the width of an element without side padding\n      var getUnpaddedWidth = (el) => {\n        var elStyle = getComputedStyle(el);\n        return (\n          parseFloat(elStyle.paddingLeft) + parseFloat(elStyle.paddingRight)\n        );\n      };\n\n      var buttonPadding = getUnpaddedWidth(this.button);\n      var optionPadding = getUnpaddedWidth(this.selectedOption);\n      var buttonBorder = this.button.offsetWidth - this.button.clientWidth;\n      var optionWidth = Math.ceil(\n        this.selectedOption.getBoundingClientRect().width\n      );\n\n      this.button.style.width = \"\".concat(\n        optionWidth - optionPadding + buttonPadding + buttonBorder,\n        \"px\"\n      );\n    }\n\n    /**\n     * Shows the options list\n     */\n    showListbox() {\n      this.listbox.hidden = false;\n      this.listboxOpen = true;\n\n      this.el.classList.add(\"is-open\");\n      this.button.setAttribute(\"aria-expanded\", \"true\");\n      this.listbox.setAttribute(\"aria-hidden\", \"false\");\n\n      // Slight delay required to prevent blur event being fired immediately\n      setTimeout(() => {\n        this.focusOption(this.selectedOption);\n        this.listbox.focus();\n\n        this.addListboxOpenEvents();\n      }, 10);\n    }\n\n    /**\n     * Hides the options list\n     */\n    hideListbox() {\n      if (!this.listboxOpen) return;\n\n      this.listbox.hidden = true;\n      this.listboxOpen = false;\n\n      this.el.classList.remove(\"is-open\");\n      this.button.setAttribute(\"aria-expanded\", \"false\");\n      this.listbox.setAttribute(\"aria-hidden\", \"true\");\n\n      if (this.focusedOption) {\n        this.focusedOption.classList.remove(this.focusedClass);\n        this.focusedOption = null;\n      }\n\n      this.button.focus();\n      this.removeListboxOpenEvents();\n    }\n\n    /**\n     * Finds a matching option from a typed string\n     * @param {string} key - The key pressed\n     * @returns {?HTMLElement}\n     */\n    findOption(key) {\n      this.searchString += key;\n\n      // If there's a timer already running, clear it\n      if (this.searchTimer) {\n        clearTimeout(this.searchTimer);\n      }\n\n      // Wait 500ms to see if another key is pressed, if not then clear the search string\n      this.searchTimer = setTimeout(() => {\n        this.searchString = \"\";\n      }, 500);\n\n      // Find an option that contains the search string (if there is one)\n      var matchingOption = [...this.options].find((option) => {\n        var label = option.innerText.toLowerCase();\n        return (\n          label.includes(this.searchString) &&\n          !option.classList.contains(\"is-disabled\")\n        );\n      });\n\n      return matchingOption;\n    }\n\n    /**\n     * Focuses an option\n     * @param {HTMLElement} option - The <li> element of the option to focus\n     */\n    focusOption(option) {\n      // Remove focus on currently focused option (if there is one)\n      if (this.focusedOption) {\n        this.focusedOption.classList.remove(this.focusedClass);\n      }\n\n      // Set focus on the option\n      this.focusedOption = option;\n      this.focusedOption.classList.add(this.focusedClass);\n\n      // If option is out of view, scroll the list\n      if (this.listbox.scrollHeight > this.listbox.clientHeight) {\n        var scrollBottom = this.listbox.clientHeight + this.listbox.scrollTop;\n        var optionBottom = option.offsetTop + option.offsetHeight;\n\n        if (optionBottom > scrollBottom) {\n          this.listbox.scrollTop = optionBottom - this.listbox.clientHeight;\n        } else if (option.offsetTop < this.listbox.scrollTop) {\n          this.listbox.scrollTop = option.offsetTop;\n        }\n      }\n    }\n\n    /**\n     * Handles a 'selectOption' event on the custom select element\n     * @param {Object} e - The event object (pass value in detail.value)\n     */\n    handleSelectOption(e) {\n      var matchingOption = [...this.options].find(\n        (option) => option.dataset.value === e.detail.value\n      );\n      if (matchingOption) {\n        this.selectOption(matchingOption);\n      }\n    }\n\n    /**\n     * Selects an option\n     * @param {HTMLElement} option - The option <li> element\n     */\n    selectOption(option) {\n      if (option !== this.selectedOption) {\n        // Switch aria-selected attribute to selected option\n        option.setAttribute(\"aria-selected\", \"true\");\n        this.selectedOption.setAttribute(\"aria-selected\", \"false\");\n\n        // Update swatch colour in the button\n        if (this.swatches) {\n          if (option.dataset.swatch) {\n            this.button.dataset.swatch = option.dataset.swatch;\n          } else {\n            this.button.removeAttribute(\"data-swatch\");\n          }\n        }\n\n        // Update the button text and set the option as active\n        this.button.firstChild.textContent =\n          option.firstElementChild.textContent;\n        this.listbox.setAttribute(\"aria-activedescendant\", option.id);\n        this.selectedOption = document.getElementById(option.id);\n\n        // If a native select element exists, update its selected value and trigger a 'change' event\n        if (this.nativeSelect) {\n          this.nativeSelect.value = option.dataset.value;\n          this.nativeSelect.dispatchEvent(\n            new Event(\"change\", { bubbles: true })\n          );\n        } else {\n          // Trigger a 'change' event on the custom select element\n          var detail = { selectedValue: option.dataset.value };\n          this.el.dispatchEvent(\n            new CustomEvent(\"change\", { bubbles: true, detail })\n          );\n        }\n      }\n\n      this.hideListbox();\n    }\n  }\n\n  class CustomSelect extends ccComponent {\n    constructor() {\n      var name =\n        arguments.length > 0 && arguments[0] !== undefined\n          ? arguments[0]\n          : \"custom-select\";\n      var cssSelector =\n        arguments.length > 1 && arguments[1] !== undefined\n          ? arguments[1]\n          : \".cc-select\";\n      super(name, cssSelector);\n    }\n\n    init(container) {\n      super.init(container);\n      this.registerInstance(container, new CustomSelectInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }\n  }\n\n  new CustomSelect();\n  /**\n   * Display a modal window on-click. It's a lightbox.\n   * To use:\n   * Add 'cc-modal' class to a clickable element.\n   *\n   * Configure with:\n   * - data-cc-modal-contentelement - selector for element containing content to show, innerHTML of element is copied into the modal\n   * - data-cc-modal-size (optional) - 'small' or 'medium', defaults to 'medium'\n   * - data-cc-modal-launch (optional) - 'true' if we want to open the modal immediately\n   *\n   * Example:\n   * <a href=\"#password-login\" class=\"cc-modal\" data-cc-modal-contentelement=\"#password-login\" data-cc-modal-size=\"small\">\n   * <div id=\"password-login\" class=\"js-hidden\">\n   */\n  class ModalInstance {\n    constructor(container) {\n      this.container = container;\n      this.size = container.dataset.ccModalSize || \"medium\";\n      this.contentElement = document.querySelector(\n        container.dataset.ccModalContentelement\n      );\n\n      this.container.addEventListener(\"click\", this.handleClick.bind(this));\n\n      if (container.dataset.ccModalLaunch === \"true\") {\n        setTimeout(this.open.bind(this), 10);\n      }\n    }\n\n    /**\n     * Handles 'click' event on the container\n     * @param {Object} e - The event object\n     */\n    handleClick(e) {\n      e.preventDefault();\n      this.open();\n      this.opener = e.target;\n    }\n\n    /**\n     * Create the modal and add it to the page.\n     */\n    open() {\n      var tve = theme.createTemplateVariableEncoder();\n      tve.add(\"size\", this.size, \"attribute\");\n      tve.add(\"content\", this.contentElement.innerHTML, \"raw\");\n      tve.add(\n        \"button_close_label\",\n        theme.strings.general_accessibility_labels_close,\n        \"attribute\"\n      );\n      tve.add(\"button_close_icon\", theme.icons.close, \"raw\");\n\n      var html =\n        '\\n      <div class=\"cc-modal-window cc-modal-window--pre-reveal cc-modal-window--size-'\n          .concat(\n            tve.values.size,\n            '\">\\n        <div class=\"cc-modal-window__background\"></div>\\n        <div class=\"cc-modal-window__foreground\" role=\"dialog\" aria-modal=\"true\">\\n          <div class=\"cc-modal-window__content-container\">\\n            <button class=\"cc-modal-window__close\" aria-label=\"'\n          )\n          .concat(tve.values.button_close_label, '\">')\n          .concat(\n            tve.values.button_close_icon,\n            '</button>\\n            <div class=\"cc-modal-window__content\">'\n          )\n          .concat(\n            tve.values.content,\n            \"</div>\\n          </div>\\n        </div>\\n      </div>\\n    \"\n          );\n\n      var modalElementFragment = document\n        .createRange()\n        .createContextualFragment(html);\n      document.body.appendChild(modalElementFragment);\n\n      document.body.classList.add(\"cc-modal-visible\");\n      this.modalElement = document.body.lastElementChild;\n\n      this.modalElement\n        .querySelector(\".cc-modal-window__background\")\n        .addEventListener(\"click\", this.close.bind(this));\n      this.modalElement\n        .querySelector(\".cc-modal-window__close\")\n        .addEventListener(\"click\", this.close.bind(this));\n\n      setTimeout(() => {\n        this.modalElement.classList.remove(\"cc-modal-window--pre-reveal\");\n        this.modalElement.querySelector(\".cc-modal-window__close\").focus();\n      }, 10);\n    }\n\n    close() {\n      this.modalElement.classList.add(\"cc-modal-window--closing\");\n      if (\n        !document.querySelector(\n          \".cc-modal-window:not(.cc-modal-window--closing)\"\n        )\n      ) {\n        document.body.classList.remove(\"cc-modal-visible\");\n      }\n\n      if (this.opener) {\n        setTimeout(() => {\n          this.opener.focus();\n        }, 10);\n      }\n\n      // give transitions 5s to do their thing before we tidy up (note: this.modalElement may be reassigned during this timeout)\n      setTimeout(\n        function () {\n          this.remove();\n        }.bind(this.modalElement),\n        5000\n      );\n    }\n  }\n\n  class Modal extends ccComponent {\n    constructor() {\n      var name =\n        arguments.length > 0 && arguments[0] !== undefined\n          ? arguments[0]\n          : \"modal\";\n      var cssSelector =\n        arguments.length > 1 && arguments[1] !== undefined\n          ? arguments[1]\n          : \".cc-\".concat(name);\n      super(name, cssSelector);\n    }\n\n    init(container) {\n      super.init(container);\n      this.registerInstance(container, new ModalInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }\n  }\n\n  new Modal();\n  class PriceRangeInstance {\n    constructor(container) {\n      this.container = container;\n      this.selectors = {\n        inputMin: \".cc-price-range__input--min\",\n        inputMax: \".cc-price-range__input--max\",\n        control: \".cc-price-range__control\",\n        controlMin: \".cc-price-range__control--min\",\n        controlMax: \".cc-price-range__control--max\",\n        bar: \".cc-price-range__bar\",\n        activeBar: \".cc-price-range__bar-active\",\n      };\n      this.controls = {\n        min: {\n          barControl: container.querySelector(this.selectors.controlMin),\n          input: container.querySelector(this.selectors.inputMin),\n        },\n        max: {\n          barControl: container.querySelector(this.selectors.controlMax),\n          input: container.querySelector(this.selectors.inputMax),\n        },\n      };\n      this.controls.min.value = parseInt(\n        this.controls.min.input.value === \"\"\n          ? this.controls.min.input.placeholder\n          : this.controls.min.input.value\n      );\n      this.controls.max.value = parseInt(\n        this.controls.max.input.value === \"\"\n          ? this.controls.max.input.placeholder\n          : this.controls.max.input.value\n      );\n      this.valueMin = this.controls.min.input.min;\n      this.valueMax = this.controls.min.input.max;\n      this.valueRange = this.valueMax - this.valueMin;\n\n      [this.controls.min, this.controls.max].forEach((item) => {\n        item.barControl.setAttribute(\"aria-valuemin\", this.valueMin);\n        item.barControl.setAttribute(\"aria-valuemax\", this.valueMax);\n        item.barControl.setAttribute(\"tabindex\", 0);\n      });\n      this.controls.min.barControl.setAttribute(\n        \"aria-valuenow\",\n        this.controls.min.value\n      );\n      this.controls.max.barControl.setAttribute(\n        \"aria-valuenow\",\n        this.controls.max.value\n      );\n\n      this.bar = container.querySelector(this.selectors.bar);\n      this.activeBar = container.querySelector(this.selectors.activeBar);\n      this.inDrag = false;\n      this.rtl = document.querySelector(\"html[dir=rtl]\");\n\n      this.bindEvents();\n      this.render();\n    }\n\n    getPxToValueRatio() {\n      var r = this.bar.clientWidth / (this.valueMax - this.valueMin);\n      if (this.rtl) {\n        return -r;\n      } else {\n        return r;\n      }\n    }\n\n    getPcToValueRatio() {\n      return 100.0 / (this.valueMax - this.valueMin);\n    }\n\n    setActiveControlValue(value) {\n      // only accept valid numbers\n      if (isNaN(parseInt(value))) return;\n\n      // clamp & default\n      if (this.activeControl === this.controls.min) {\n        if (value === \"\") {\n          value = this.valueMin;\n        }\n        value = Math.max(this.valueMin, value);\n        value = Math.min(value, this.controls.max.value);\n      } else {\n        if (value === \"\") {\n          value = this.valueMax;\n        }\n        value = Math.min(this.valueMax, value);\n        value = Math.max(value, this.controls.min.value);\n      }\n\n      // round\n      this.activeControl.value = Math.round(value);\n\n      // update input\n      if (this.activeControl.input.value != this.activeControl.value) {\n        if (this.activeControl.value == this.activeControl.input.placeholder) {\n          this.activeControl.input.value = \"\";\n        } else {\n          this.activeControl.input.value = this.activeControl.value;\n        }\n        this.activeControl.input.dispatchEvent(\n          new CustomEvent(\"change\", {\n            bubbles: true,\n            cancelable: false,\n            detail: { sender: \"theme:component:price_range\" },\n          })\n        );\n      }\n\n      // a11y\n      this.activeControl.barControl.setAttribute(\n        \"aria-valuenow\",\n        this.activeControl.value\n      );\n    }\n\n    render() {\n      this.drawControl(this.controls.min);\n      this.drawControl(this.controls.max);\n      this.drawActiveBar();\n    }\n\n    drawControl(control) {\n      var x = (control.value - this.valueMin) * this.getPcToValueRatio() + \"%\";\n      if (this.rtl) {\n        control.barControl.style.right = x;\n      } else {\n        control.barControl.style.left = x;\n      }\n    }\n\n    drawActiveBar() {\n      var s =\n          (this.controls.min.value - this.valueMin) * this.getPcToValueRatio() +\n          \"%\",\n        e =\n          (this.valueMax - this.controls.max.value) * this.getPcToValueRatio() +\n          \"%\";\n      if (this.rtl) {\n        this.activeBar.style.left = e;\n        this.activeBar.style.right = s;\n      } else {\n        this.activeBar.style.left = s;\n        this.activeBar.style.right = e;\n      }\n    }\n\n    handleControlTouchStart(e) {\n      e.preventDefault();\n      this.startDrag(e.target, e.touches[0].clientX);\n      this.boundControlTouchMoveEvent = this.handleControlTouchMove.bind(this);\n      this.boundControlTouchEndEvent = this.handleControlTouchEnd.bind(this);\n      window.addEventListener(\"touchmove\", this.boundControlTouchMoveEvent);\n      window.addEventListener(\"touchend\", this.boundControlTouchEndEvent);\n    }\n\n    handleControlTouchMove(e) {\n      this.moveDrag(e.touches[0].clientX);\n    }\n\n    handleControlTouchEnd(e) {\n      e.preventDefault();\n      window.removeEventListener(\"touchmove\", this.boundControlTouchMoveEvent);\n      window.removeEventListener(\"touchend\", this.boundControlTouchEndEvent);\n      this.stopDrag();\n    }\n\n    handleControlMouseDown(e) {\n      e.preventDefault();\n      this.startDrag(e.target, e.clientX);\n      this.boundControlMouseMoveEvent = this.handleControlMouseMove.bind(this);\n      this.boundControlMouseUpEvent = this.handleControlMouseUp.bind(this);\n      window.addEventListener(\"mousemove\", this.boundControlMouseMoveEvent);\n      window.addEventListener(\"mouseup\", this.boundControlMouseUpEvent);\n    }\n\n    handleControlMouseMove(e) {\n      this.moveDrag(e.clientX);\n    }\n\n    handleControlMouseUp(e) {\n      e.preventDefault();\n      window.removeEventListener(\"mousemove\", this.boundControlMouseMoveEvent);\n      window.removeEventListener(\"mouseup\", this.boundControlMouseUpEvent);\n      this.stopDrag();\n    }\n\n    startDrag(target, startX) {\n      if (this.controls.min.barControl === target) {\n        this.activeControl = this.controls.min;\n      } else {\n        this.activeControl = this.controls.max;\n      }\n      this.dragStartX = startX;\n      this.dragStartValue = this.activeControl.value;\n      this.inDrag = true;\n    }\n\n    moveDrag(moveX) {\n      if (this.inDrag) {\n        var value =\n          this.dragStartValue +\n          (moveX - this.dragStartX) / this.getPxToValueRatio();\n        this.setActiveControlValue(value);\n        this.render();\n      }\n    }\n\n    stopDrag() {\n      this.inDrag = false;\n    }\n\n    handleControlKeyDown(e) {\n      if (e.key === \"ArrowRight\") {\n        this.incrementControlFromKeypress(e.target, 10.0);\n      } else if (e.key === \"ArrowLeft\") {\n        this.incrementControlFromKeypress(e.target, -10.0);\n      }\n    }\n\n    incrementControlFromKeypress(control, pxAmount) {\n      if (this.controls.min.barControl === control) {\n        this.activeControl = this.controls.min;\n      } else {\n        this.activeControl = this.controls.max;\n      }\n      this.setActiveControlValue(\n        this.activeControl.value + pxAmount / this.getPxToValueRatio()\n      );\n      this.render();\n    }\n\n    handleInputChange(e) {\n      // strip out non numeric values\n      e.target.value = e.target.value.replace(/\\D/g, \"\");\n\n      if (!e.detail || e.detail.sender != \"theme:component:price_range\") {\n        if (this.controls.min.input === e.target) {\n          this.activeControl = this.controls.min;\n        } else {\n          this.activeControl = this.controls.max;\n        }\n        this.setActiveControlValue(e.target.value);\n        this.render();\n      }\n    }\n\n    handleInputKeyup(e) {\n      // enforce numeric chars in the input\n      setTimeout(\n        function () {\n          this.value = this.value.replace(/\\D/g, \"\");\n        }.bind(e.target),\n        10\n      );\n    }\n\n    bindEvents() {\n      [this.controls.min, this.controls.max].forEach((item) => {\n        item.barControl.addEventListener(\n          \"touchstart\",\n          this.handleControlTouchStart.bind(this)\n        );\n        item.barControl.addEventListener(\n          \"mousedown\",\n          this.handleControlMouseDown.bind(this)\n        );\n        item.barControl.addEventListener(\n          \"keydown\",\n          this.handleControlKeyDown.bind(this)\n        );\n        item.input.addEventListener(\n          \"change\",\n          this.handleInputChange.bind(this)\n        );\n        item.input.addEventListener(\"keyup\", this.handleInputKeyup.bind(this));\n      });\n    }\n\n    destroy() {}\n  }\n\n  class PriceRange extends ccComponent {\n    constructor() {\n      var name =\n        arguments.length > 0 && arguments[0] !== undefined\n          ? arguments[0]\n          : \"price-range\";\n      var cssSelector =\n        arguments.length > 1 && arguments[1] !== undefined\n          ? arguments[1]\n          : \".cc-\".concat(name);\n      super(name, cssSelector);\n    }\n\n    init(container) {\n      super.init(container);\n      this.registerInstance(container, new PriceRangeInstance(container));\n    }\n\n    destroy(container) {\n      this.destroyInstance(container);\n      super.destroy(container);\n    }\n  }\n\n  new PriceRange();\n\n  // Manage videos\n  theme.VideoManager = new (function () {\n    var _ = this;\n\n    _.videos = {\n      incrementor: 0,\n      videoData: {},\n    };\n\n    _._loadYoutubeVideos = function (container) {\n      $(\n        '.video-container[data-video-type=\"youtube\"]:not(.video--init)',\n        container\n      ).each(function () {\n        $(this).addClass(\"video--init\");\n        _.videos.incrementor++;\n        var containerId = \"theme-yt-video-\" + _.videos.incrementor;\n        $(this).data(\"video-container-id\", containerId);\n        var autoplay = $(this).data(\"video-autoplay\");\n        var loop = $(this).data(\"video-loop\");\n        var videoId = $(this).data(\"video-id\");\n        var isBackgroundVideo = $(this).hasClass(\"video-container--background\");\n\n        var ytURLSearchParams = new URLSearchParams(\n          \"iv_load_policy=3&modestbranding=1&rel=0&showinfo=0&enablejsapi=1&playslinline=1\"\n        );\n        ytURLSearchParams.append(\"origin\", location.origin);\n        ytURLSearchParams.append(\"playlist\", videoId);\n        ytURLSearchParams.append(\"loop\", loop ? 1 : 0);\n        ytURLSearchParams.append(\"autoplay\", 0);\n        ytURLSearchParams.append(\"controls\", isBackgroundVideo ? 0 : 1);\n        var widgetid = _.videos.incrementor;\n        ytURLSearchParams.append(\"widgetid\", widgetid);\n\n        var src =\n          \"https://www.youtube.com/embed/\" +\n          videoId +\n          \"?\" +\n          ytURLSearchParams.toString();\n\n        var $videoElement = $(\n          '<iframe class=\"video-container__video-element\" frameborder=\"0\" allowfullscreen=\"1\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\">'\n        )\n          .attr({\n            id: containerId,\n            width: 640,\n            height: 360,\n            tabindex: isBackgroundVideo ? \"-1\" : null,\n          })\n          .appendTo($(\".video-container__video\", this));\n\n        _.videos.videoData[containerId] = {\n          type: \"yt\",\n          id: containerId,\n          container: this,\n          mute: () =>\n            $videoElement[0].contentWindow.postMessage(\n              '{\"event\":\"command\",\"func\":\"mute\",\"args\":\"\"}',\n              \"*\"\n            ),\n          play: () =>\n            $videoElement[0].contentWindow.postMessage(\n              '{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}',\n              \"*\"\n            ),\n          pause: () =>\n            $videoElement[0].contentWindow.postMessage(\n              '{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}',\n              \"*\"\n            ),\n          stop: () =>\n            $videoElement[0].contentWindow.postMessage(\n              '{\"event\":\"command\",\"func\":\"stopVideo\",\"args\":\"\"}',\n              \"*\"\n            ),\n          seekTo: (to) =>\n            $videoElement[0].contentWindow.postMessage(\n              '{\"event\":\"command\",\"func\":\"seekTo\",\"args\":['.concat(\n                to,\n                \",true]}\"\n              ),\n              \"*\"\n            ),\n          videoElement: $videoElement[0],\n          isBackgroundVideo: isBackgroundVideo,\n          establishedYTComms: false,\n        };\n\n        if (autoplay) {\n          $videoElement.on(\"load\", () =>\n            setTimeout(() => {\n              // set up imitation JS API and watch for play event\n              window.addEventListener(\"message\", (message) => {\n                if (\n                  message.origin === \"https://www.youtube.com\" &&\n                  message.data &&\n                  typeof message.data === \"string\"\n                ) {\n                  var data = JSON.parse(message.data);\n\n                  if (\n                    data.event === \"initialDelivery\" &&\n                    data.info &&\n                    data.info.duration\n                  ) {\n                    _.videos.videoData[containerId].duration =\n                      data.info.duration;\n                  }\n\n                  if (\n                    data.event === \"infoDelivery\" &&\n                    data.channel === \"widget\" &&\n                    data.id === widgetid\n                  ) {\n                    _.videos.videoData[containerId].establishedYTComms = true;\n                    // playing - add class\n                    if (data.info && data.info.playerState === 1) {\n                      $(this).addClass(\"video-container--playing\");\n                    }\n\n                    // loop if in final second\n                    if (\n                      loop &&\n                      data.info &&\n                      data.info.currentTime >\n                        _.videos.videoData[containerId].duration - 1\n                    ) {\n                      _.videos.videoData[containerId].seekTo(0);\n                    }\n                  }\n                }\n              });\n              $videoElement[0].contentWindow.postMessage(\n                '{\"event\":\"listening\",\"id\":'.concat(\n                  widgetid,\n                  ',\"channel\":\"widget\"}'\n                ),\n                \"*\"\n              );\n\n              // mute and play\n              _.videos.videoData[containerId].mute();\n              _.videos.videoData[containerId].play();\n\n              // if no message received in 2s, assume comms failure and that video is playing\n              setTimeout(() => {\n                if (!_.videos.videoData[containerId].establishedYTComms) {\n                  $(this).addClass(\"video-container--playing\");\n                }\n              }, 2000);\n            }, 100)\n          );\n        }\n\n        if (isBackgroundVideo) {\n          $videoElement.attr(\"tabindex\", \"-1\");\n          _._initBackgroundVideo(_.videos.videoData[containerId]);\n\n          // hack only needed for YT BG videos\n          _.addYTPageshowListenerHack();\n        }\n\n        $videoElement.attr(\"src\", src);\n\n        fetch(\n          \"https://www.youtube.com/oembed?format=json&url=\" +\n            encodeURIComponent($(this).data(\"video-url\"))\n        )\n          .then((response) => {\n            if (!response.ok) {\n              throw new Error(\"HTTP error! Status: \".concat(response.status));\n            }\n            return response.json();\n          })\n          .then((response) => {\n            if (response.width && response.height) {\n              $videoElement.attr({\n                width: response.width,\n                height: response.height,\n              });\n              if (_.videos.videoData[containerId].assessBackgroundVideo) {\n                _.videos.videoData[containerId].assessBackgroundVideo();\n              }\n            }\n          });\n      });\n    };\n\n    _._loadVimeoVideos = function (container) {\n      $(\n        '.video-container[data-video-type=\"vimeo\"]:not(.video--init)',\n        container\n      ).each(function () {\n        $(this).addClass(\"video--init\");\n        _.videos.incrementor++;\n        var containerId = \"theme-vi-video-\" + _.videos.incrementor;\n        $(this).data(\"video-container-id\", containerId);\n        var autoplay = $(this).data(\"video-autoplay\");\n        var loop = $(this).data(\"video-loop\");\n        var videoId = $(this).data(\"video-id\");\n        var isBackgroundVideo = $(this).hasClass(\"video-container--background\");\n\n        var viURLSearchParams = new URLSearchParams();\n        if (autoplay) {\n          viURLSearchParams.append(\"muted\", 1);\n        }\n        if (loop) {\n          viURLSearchParams.append(\"loop\", 1);\n        }\n        if (isBackgroundVideo) {\n          viURLSearchParams.append(\"controls\", 0);\n        }\n\n        var src =\n          \"https://player.vimeo.com/video/\" +\n          videoId +\n          \"?\" +\n          viURLSearchParams.toString();\n\n        var $videoElement = $(\n          '<iframe class=\"video-container__video-element\" frameborder=\"0\" allowfullscreen=\"1\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\">'\n        )\n          .attr({\n            id: containerId,\n            width: 640,\n            height: 360,\n            tabindex: isBackgroundVideo ? \"-1\" : null,\n          })\n          .appendTo($(\".video-container__video\", this));\n\n        _.videos.videoData[containerId] = {\n          type: \"vimeo\",\n          id: containerId,\n          container: this,\n          play: () =>\n            $videoElement[0].contentWindow.postMessage(\n              '{\"method\":\"play\"}',\n              \"*\"\n            ),\n          pause: () =>\n            $videoElement[0].contentWindow.postMessage(\n              '{\"method\":\"pause\"}',\n              \"*\"\n            ),\n          videoElement: $videoElement[0],\n          isBackgroundVideo: isBackgroundVideo,\n          establishedVimeoComms: false,\n        };\n\n        if (autoplay) {\n          $videoElement.on(\"load\", () =>\n            setTimeout(() => {\n              // set up imitation JS API and watch for play event\n              window.addEventListener(\"message\", (message) => {\n                if (message.origin !== \"https://player.vimeo.com\") return;\n                if (message.source !== $videoElement[0].contentWindow) return;\n                if (!message.data) return;\n\n                var data = message.data;\n                if (typeof data === \"string\") {\n                  data = JSON.parse(data);\n                }\n\n                if (data.method === \"ping\" || data.event === \"playing\") {\n                  _.videos.videoData[containerId].establishedVimeoComms = true;\n                }\n\n                if (data.event === \"playing\") {\n                  $(this).addClass(\"video-container--playing\");\n                }\n              });\n              $videoElement[0].contentWindow.postMessage(\n                { method: \"addEventListener\", value: \"playing\" },\n                \"*\"\n              );\n              $videoElement[0].contentWindow.postMessage(\n                { method: \"appendVideoMetadata\", value: location.origin },\n                \"*\"\n              );\n              $videoElement[0].contentWindow.postMessage(\n                { method: \"ping\" },\n                \"*\"\n              );\n\n              // play video\n              _.videos.videoData[containerId].play();\n\n              // if no message received in 2s, assume comms failure and that video is playing\n              setTimeout(() => {\n                if (!_.videos.videoData[containerId].establishedVimeoComms) {\n                  $(this).addClass(\"video-container--playing\");\n                }\n              }, 2000);\n            }, 100)\n          );\n        }\n\n        if (isBackgroundVideo) {\n          $videoElement.attr(\"tabindex\", \"-1\");\n          _._initBackgroundVideo(_.videos.videoData[containerId]);\n        }\n\n        $videoElement.attr(\"src\", src);\n\n        fetch(\n          \"https://vimeo.com/api/oembed.json?url=\" +\n            encodeURIComponent($(this).data(\"video-url\"))\n        )\n          .then((response) => {\n            if (!response.ok) {\n              throw new Error(\"HTTP error! Status: \".concat(response.status));\n            }\n            return response.json();\n          })\n          .then((response) => {\n            if (response.width && response.height) {\n              $videoElement.attr({\n                width: response.width,\n                height: response.height,\n              });\n              if (_.videos.videoData[containerId].assessBackgroundVideo) {\n                _.videos.videoData[containerId].assessBackgroundVideo();\n              }\n            }\n          });\n      });\n    };\n\n    _._loadMp4Videos = function (container) {\n      $('.video-container[data-video-type=\"mp4\"]:not(.video--init)', container)\n        .addClass(\"video--init\")\n        .each(function () {\n          _.videos.incrementor++;\n          var containerId = \"theme-mp-video-\" + _.videos.incrementor;\n          var $container = $(this);\n          $(this).data(\"video-container-id\", containerId);\n          var $videoElement = $('<div class=\"video-container__video-element\">')\n            .attr(\"id\", containerId)\n            .appendTo($(\".video-container__video\", this));\n          var autoplay = $(this).data(\"video-autoplay\");\n          var isBackgroundVideo = $(this).hasClass(\n            \"video-container--background\"\n          );\n\n          var $video = $(\"<video playsinline>\");\n          if ($(this).data(\"video-loop\")) {\n            $video.attr(\"loop\", \"loop\");\n          }\n          $video.on(\"click mouseenter\", () =>\n            $video.attr(\"controls\", \"controls\")\n          );\n          if (autoplay) {\n            $video.attr({ autoplay: \"autoplay\", muted: \"muted\" });\n            $video[0].muted = true; // required by Chrome - ignores attribute\n            $video.one(\"loadeddata\", function () {\n              this.play();\n              $container.addClass(\"video-container--playing\");\n            });\n          }\n\n          if ($(this).data(\"video-url\")) {\n            $video.attr(\"src\", $(this).data(\"video-url\"));\n          }\n          if ($(this).data(\"video-sources\")) {\n            var sources = $(this).data(\"video-sources\").split(\"|\");\n            for (var i = 0; i < sources.length; i++) {\n              var [format, mimeType, url] = sources[i].split(\" \");\n              // only use HLS if not looping\n              if (format === \"m3u8\" && $(this).data(\"video-loop\")) {\n                continue;\n              }\n              $(\"<source>\").attr({ src: url, type: mimeType }).appendTo($video);\n            }\n          }\n          $video.appendTo($videoElement);\n\n          var videoData = (_.videos.videoData[containerId] = {\n            type: \"mp4\",\n            element: $video[0],\n            play: () => $video[0].play(),\n            pause: () => $video[0].pause(),\n            isBackgroundVideo: isBackgroundVideo,\n          });\n\n          if (isBackgroundVideo) {\n            $video.attr(\"tabindex\", \"-1\");\n            if (autoplay) {\n              // Support playing background videos in low power mode\n              container.addEventListener(\"click\", videoData.play, {\n                once: true,\n              });\n            }\n          }\n        });\n    };\n\n    // background video placement for iframes\n    _._initBackgroundVideo = function (videoData) {\n      if (\n        videoData.container.classList.contains(\"video-container--background\")\n      ) {\n        videoData.assessBackgroundVideo = function () {\n          var cw = this.offsetWidth,\n            ch = this.offsetHeight,\n            cr = cw / ch,\n            frame = this.querySelector(\"iframe\"),\n            vr = parseFloat(frame.width) / parseFloat(frame.height),\n            pan = this.querySelector(\".video-container__video\"),\n            vCrop = 75; // pushes video outside container to hide controls\n          if (cr > vr) {\n            var vh = cw / vr + vCrop * 2;\n            pan.style.marginTop = (ch - vh) / 2 - vCrop + \"px\";\n            pan.style.marginInlineStart = \"\";\n            pan.style.height = vh + vCrop * 2 + \"px\";\n            pan.style.width = \"\";\n          } else {\n            var ph = ch + vCrop * 2;\n            var pw = ph * vr;\n            pan.style.marginTop = -vCrop + \"px\";\n            pan.style.marginInlineStart = (cw - pw) / 2 + \"px\";\n            pan.style.height = ph + \"px\";\n            pan.style.width = pw + \"px\";\n          }\n        }.bind(videoData.container);\n        videoData.assessBackgroundVideo();\n        $(window).on(\n          \"debouncedresize.\" + videoData.id,\n          videoData.assessBackgroundVideo\n        );\n\n        // Support playing background videos in low power mode\n        videoData.container.addEventListener(\"click\", videoData.play, {\n          once: true,\n        });\n      }\n    };\n\n    _._unloadVideos = function (container) {\n      for (var dataKey in _.videos.videoData) {\n        var data = _.videos.videoData[dataKey];\n        if ($(container).find(data.container).length) {\n          delete _.videos.videoData[dataKey];\n          return;\n        }\n      }\n    };\n\n    // Compatibility with Sections\n    this.onSectionLoad = function (container) {\n      // url only - infer type\n      $(\".video-container[data-video-url]:not([data-video-type])\").each(\n        function () {\n          var url = $(this).data(\"video-url\");\n\n          if (window.innerWidth < 768 && $(this).data(\"video-mobil-url\")) {\n            url = $(this).data(\"video-mobil-url\");\n          }\n\n          if (url.indexOf(\".mp4\") > -1) {\n            $(this).attr(\"data-video-type\", \"mp4\");\n          }\n\n          if (url.indexOf(\"vimeo.com\") > -1) {\n            $(this).attr(\"data-video-type\", \"vimeo\");\n            $(this).attr(\"data-video-id\", url.split(\"?\")[0].split(\"/\").pop());\n          }\n\n          if (url.indexOf(\"youtu.be\") > -1 || url.indexOf(\"youtube.com\") > -1) {\n            $(this).attr(\"data-video-type\", \"youtube\");\n            if (url.indexOf(\"v=\") > -1) {\n              $(this).attr(\n                \"data-video-id\",\n                url.split(\"v=\").pop().split(\"&\")[0]\n              );\n            } else {\n              $(this).attr(\"data-video-id\", url.split(\"?\")[0].split(\"/\").pop());\n            }\n          }\n        }\n      );\n\n      _._loadYoutubeVideos(container);\n      _._loadVimeoVideos(container);\n      _._loadMp4Videos(container);\n\n      // play button\n      $(\".video-container__play\", container).on(\"click\", function (evt) {\n        evt.preventDefault();\n        var $container = $(this).closest(\".video-container\");\n        // reveal\n        $container.addClass(\"video-container--playing\");\n\n        // broadcast a play event on the section container\n        $container.trigger(\"cc:video:play\");\n\n        // play\n        var id = $container.data(\"video-container-id\");\n        _.videos.videoData[id].play();\n      });\n\n      // modal close button\n      $(\".video-container__stop\", container).on(\"click\", function (evt) {\n        evt.preventDefault();\n        var $container = $(this).closest(\".video-container\");\n        // hide\n        $container.removeClass(\"video-container--playing\");\n\n        // broadcast a stop event on the section container\n        $container.trigger(\"cc:video:stop\");\n\n        // stop\n        var id = $container.data(\"video-container-id\");\n        _.videos.videoData[id].pause();\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $(\".video-container__play, .video-container__stop\", container).off(\n        \"click\"\n      );\n      $(window).off(\".\" + $(\".video-container\").data(\"video-container-id\"));\n      $(window).off(\"debouncedresize.video-manager-resize\");\n      _._unloadVideos(container);\n      $(container).trigger(\"cc:video:stop\");\n    };\n\n    _.addYTPageshowListenerHack = function () {\n      if (!_.pageshowListenerAdded) {\n        _.pageshowListenerAdded = true;\n        window.addEventListener(\"pageshow\", (event) => {\n          if (event.persisted) {\n            // A playing YT video shows a black screen when loaded from bfcache on iOS\n            Object.keys(_.videos.videoData)\n              .filter(\n                (key) =>\n                  _.videos.videoData[key].type === \"yt\" &&\n                  _.videos.videoData[key].isBackgroundVideo\n              )\n              .forEach((key) => {\n                _.videos.videoData[key].stop();\n                _.videos.videoData[key].play();\n              });\n          }\n        });\n      }\n    };\n  })();\n\n  // Register the section\n  cc.sections.push({\n    name: \"video\",\n    section: theme.VideoManager,\n  });\n  theme.MapSection = new (function () {\n    var _ = this;\n    _.config = {\n      zoom: 14,\n      styles: {\n        default: [],\n        silver: [\n          { elementType: \"geometry\", stylers: [{ color: \"#f5f5f5\" }] },\n          { elementType: \"labels.icon\", stylers: [{ visibility: \"off\" }] },\n          { elementType: \"labels.text.fill\", stylers: [{ color: \"#616161\" }] },\n          {\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#f5f5f5\" }],\n          },\n          {\n            featureType: \"administrative.land_parcel\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#bdbdbd\" }],\n          },\n          {\n            featureType: \"poi\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#eeeeee\" }],\n          },\n          {\n            featureType: \"poi\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#757575\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#e5e5e5\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#9e9e9e\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#ffffff\" }],\n          },\n          {\n            featureType: \"road.arterial\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#757575\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#dadada\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#616161\" }],\n          },\n          {\n            featureType: \"road.local\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#9e9e9e\" }],\n          },\n          {\n            featureType: \"transit.line\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#e5e5e5\" }],\n          },\n          {\n            featureType: \"transit.station\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#eeeeee\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#c9c9c9\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#9e9e9e\" }],\n          },\n        ],\n        retro: [\n          { elementType: \"geometry\", stylers: [{ color: \"#ebe3cd\" }] },\n          { elementType: \"labels.text.fill\", stylers: [{ color: \"#523735\" }] },\n          {\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#f5f1e6\" }],\n          },\n          {\n            featureType: \"administrative\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#c9b2a6\" }],\n          },\n          {\n            featureType: \"administrative.land_parcel\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#dcd2be\" }],\n          },\n          {\n            featureType: \"administrative.land_parcel\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#ae9e90\" }],\n          },\n          {\n            featureType: \"landscape.natural\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#dfd2ae\" }],\n          },\n          {\n            featureType: \"poi\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#dfd2ae\" }],\n          },\n          {\n            featureType: \"poi\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#93817c\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"geometry.fill\",\n            stylers: [{ color: \"#a5b076\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#447530\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#f5f1e6\" }],\n          },\n          {\n            featureType: \"road.arterial\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#fdfcf8\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#f8c967\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#e9bc62\" }],\n          },\n          {\n            featureType: \"road.highway.controlled_access\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#e98d58\" }],\n          },\n          {\n            featureType: \"road.highway.controlled_access\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#db8555\" }],\n          },\n          {\n            featureType: \"road.local\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#806b63\" }],\n          },\n          {\n            featureType: \"transit.line\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#dfd2ae\" }],\n          },\n          {\n            featureType: \"transit.line\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#8f7d77\" }],\n          },\n          {\n            featureType: \"transit.line\",\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#ebe3cd\" }],\n          },\n          {\n            featureType: \"transit.station\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#dfd2ae\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"geometry.fill\",\n            stylers: [{ color: \"#b9d3c2\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#92998d\" }],\n          },\n        ],\n        dark: [\n          { elementType: \"geometry\", stylers: [{ color: \"#212121\" }] },\n          { elementType: \"labels.icon\", stylers: [{ visibility: \"off\" }] },\n          { elementType: \"labels.text.fill\", stylers: [{ color: \"#757575\" }] },\n          {\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#212121\" }],\n          },\n          {\n            featureType: \"administrative\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#757575\" }],\n          },\n          {\n            featureType: \"administrative.country\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#9e9e9e\" }],\n          },\n          {\n            featureType: \"administrative.land_parcel\",\n            stylers: [{ visibility: \"off\" }],\n          },\n          {\n            featureType: \"administrative.locality\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#bdbdbd\" }],\n          },\n          {\n            featureType: \"poi\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#757575\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#181818\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#616161\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#1b1b1b\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"geometry.fill\",\n            stylers: [{ color: \"#2c2c2c\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#8a8a8a\" }],\n          },\n          {\n            featureType: \"road.arterial\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#373737\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#3c3c3c\" }],\n          },\n          {\n            featureType: \"road.highway.controlled_access\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#4e4e4e\" }],\n          },\n          {\n            featureType: \"road.local\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#616161\" }],\n          },\n          {\n            featureType: \"transit\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#757575\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#000000\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#3d3d3d\" }],\n          },\n        ],\n        night: [\n          { elementType: \"geometry\", stylers: [{ color: \"#242f3e\" }] },\n          { elementType: \"labels.text.fill\", stylers: [{ color: \"#746855\" }] },\n          {\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#242f3e\" }],\n          },\n          {\n            featureType: \"administrative.locality\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#d59563\" }],\n          },\n          {\n            featureType: \"poi\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#d59563\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#263c3f\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#6b9a76\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#38414e\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#212a37\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#9ca5b3\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#746855\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#1f2835\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#f3d19c\" }],\n          },\n          {\n            featureType: \"transit\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#2f3948\" }],\n          },\n          {\n            featureType: \"transit.station\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#d59563\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#17263c\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#515c6d\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#17263c\" }],\n          },\n        ],\n        aubergine: [\n          { elementType: \"geometry\", stylers: [{ color: \"#1d2c4d\" }] },\n          { elementType: \"labels.text.fill\", stylers: [{ color: \"#8ec3b9\" }] },\n          {\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#1a3646\" }],\n          },\n          {\n            featureType: \"administrative.country\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#4b6878\" }],\n          },\n          {\n            featureType: \"administrative.land_parcel\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#64779e\" }],\n          },\n          {\n            featureType: \"administrative.province\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#4b6878\" }],\n          },\n          {\n            featureType: \"landscape.man_made\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#334e87\" }],\n          },\n          {\n            featureType: \"landscape.natural\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#023e58\" }],\n          },\n          {\n            featureType: \"poi\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#283d6a\" }],\n          },\n          {\n            featureType: \"poi\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#6f9ba5\" }],\n          },\n          {\n            featureType: \"poi\",\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#1d2c4d\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"geometry.fill\",\n            stylers: [{ color: \"#023e58\" }],\n          },\n          {\n            featureType: \"poi.park\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#3C7680\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#304a7d\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#98a5be\" }],\n          },\n          {\n            featureType: \"road\",\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#1d2c4d\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#2c6675\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"geometry.stroke\",\n            stylers: [{ color: \"#255763\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#b0d5ce\" }],\n          },\n          {\n            featureType: \"road.highway\",\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#023e58\" }],\n          },\n          {\n            featureType: \"transit\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#98a5be\" }],\n          },\n          {\n            featureType: \"transit\",\n            elementType: \"labels.text.stroke\",\n            stylers: [{ color: \"#1d2c4d\" }],\n          },\n          {\n            featureType: \"transit.line\",\n            elementType: \"geometry.fill\",\n            stylers: [{ color: \"#283d6a\" }],\n          },\n          {\n            featureType: \"transit.station\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#3a4762\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"geometry\",\n            stylers: [{ color: \"#0e1626\" }],\n          },\n          {\n            featureType: \"water\",\n            elementType: \"labels.text.fill\",\n            stylers: [{ color: \"#4e6d70\" }],\n          },\n        ],\n      },\n    };\n    _.apiStatus = null;\n\n    this.geolocate = function ($map) {\n      var deferred = $.Deferred();\n      var geocoder = new google.maps.Geocoder();\n      var address = $map.data(\"address-setting\");\n\n      geocoder.geocode({ address: address }, function (results, status) {\n        if (status !== google.maps.GeocoderStatus.OK) {\n          deferred.reject(status);\n        }\n\n        deferred.resolve(results);\n      });\n\n      return deferred;\n    };\n\n    this.createMap = function (container) {\n      var $map = $(\".map-section__map-container\", container);\n\n      return _.geolocate($map)\n        .then(\n          function (results) {\n            var mapOptions = {\n              zoom: _.config.zoom,\n              styles: _.config.styles[$(container).data(\"map-style\")],\n              center: results[0].geometry.location,\n              scrollwheel: false,\n              disableDoubleClickZoom: true,\n              disableDefaultUI: true,\n              zoomControl: !$map.data(\"hide-zoom\"),\n            };\n\n            _.map = new google.maps.Map($map[0], mapOptions);\n            _.center = _.map.getCenter();\n\n            var marker = new google.maps.Marker({\n              map: _.map,\n              position: _.center,\n              clickable: false,\n            });\n\n            google.maps.event.addDomListener(window, \"resize\", function () {\n              google.maps.event.trigger(_.map, \"resize\");\n              _.map.setCenter(_.center);\n            });\n          }.bind(this)\n        )\n        .fail(function () {\n          var errorMessage;\n\n          switch (status) {\n            case \"ZERO_RESULTS\":\n              errorMessage = theme.strings.addressNoResults;\n              break;\n            case \"OVER_QUERY_LIMIT\":\n              errorMessage = theme.strings.addressQueryLimit;\n              break;\n            default:\n              errorMessage = theme.strings.addressError;\n              break;\n          }\n\n          // Only show error in the theme editor\n          if (Shopify.designMode) {\n            var $mapContainer = $map.parents(\".map-section\");\n\n            $mapContainer.addClass(\"page-width map-section--load-error\");\n            $mapContainer\n              .find(\".map-section__wrapper\")\n              .html(\n                '<div class=\"errors text-center\">' + errorMessage + \"</div>\"\n              );\n          }\n        });\n    };\n\n    this.onSectionLoad = function (target) {\n      var $container = $(target);\n      // Global function called by Google on auth errors\n      window.gm_authFailure = function () {\n        if (!Shopify.designMode) return;\n\n        $container.addClass(\"page-width map-section--load-error\");\n        $container\n          .find(\".map-section__wrapper\")\n          .html(\n            '<div class=\"errors text-center\">' +\n              theme.strings.authError +\n              \"</div>\"\n          );\n      };\n\n      // create maps\n      var key = $container.data(\"api-key\");\n\n      if (typeof key !== \"string\" || key === \"\") {\n        return;\n      }\n\n      // load map\n      theme.loadScriptOnce(\n        \"https://maps.googleapis.com/maps/api/js?key=\" + key,\n        function () {\n          _.createMap($container);\n        }\n      );\n    };\n\n    this.onSectionUnload = function (target) {\n      if (\n        typeof window.google !== \"undefined\" &&\n        typeof google.maps !== \"undefined\"\n      ) {\n        google.maps.event.clearListeners(_.map, \"resize\");\n      }\n    };\n  })();\n\n  // Register the section\n  cc.sections.push({\n    name: \"map\",\n    section: theme.MapSection,\n  });\n  theme.FaqHeader = new (function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.container = container;\n\n      this.classNames = {\n        questionContainerInactive: \"faq-search-item-inactive\",\n        sectionWithIndexStatus: \"section-faq-header--with-index\",\n      };\n\n      this.searchInput = this.container.querySelector(\".faq-search__input\");\n      if (this.searchInput) {\n        this.registerEventListener(\n          this.searchInput,\n          \"change\",\n          this.functions.performSearch.bind(this)\n        );\n        this.registerEventListener(\n          this.searchInput,\n          \"keyup\",\n          this.functions.performSearch.bind(this)\n        );\n        this.registerEventListener(\n          this.searchInput,\n          \"paste\",\n          this.functions.performSearch.bind(this)\n        );\n      }\n\n      this.functions.debouncedBuildIndex = theme.debounce(\n        this.functions.buildIndex.bind(this),\n        50\n      );\n      this.registerEventListener(\n        document,\n        \"theme:faq-header-update\",\n        this.functions.debouncedBuildIndex\n      );\n      this.functions.debouncedBuildIndex();\n\n      if (this.container.querySelector(\".faq-index\")) {\n        this.registerEventListener(\n          this.container,\n          \"click\",\n          this.functions.handleIndexClick.bind(this)\n        );\n        this.container\n          .closest(\".section-faq-header\")\n          .classList.add(this.classNames.sectionWithIndexStatus);\n        this.functions.resizeIndex.call(this);\n        this.registerEventListener(\n          window,\n          \"resize\",\n          theme.debounce(this.functions.resizeIndex.bind(this), 250)\n        );\n      }\n    };\n\n    this.onSectionReorder = function (container) {\n      this.functions.debouncedBuildIndex();\n    };\n\n    this.functions = {\n      buildIndex: function buildIndex() {\n        var faqHeaderSection = this.container.closest(\".section-faq-header\"),\n          indexContainer = this.container.querySelector(\n            \".faq-index__item-container\"\n          );\n\n        if (indexContainer) {\n          indexContainer\n            .querySelectorAll(\".faq-index-item\")\n            .forEach((element) => {\n              element.parentNode.removeChild(element);\n            });\n        }\n\n        this.linkedCollapsibleTabs = [];\n        this.linkedQuestionContainers = [];\n        this.linkedContent = [];\n\n        var currentElement = faqHeaderSection;\n        while (\n          currentElement.nextElementSibling &&\n          currentElement.nextElementSibling.classList.contains(\n            \"section-collapsible-tabs\"\n          )\n        ) {\n          currentElement = currentElement.nextElementSibling;\n\n          // build list of searchable content\n          this.linkedCollapsibleTabs.push(currentElement);\n          currentElement\n            .querySelectorAll(\".collapsible-tabs__tab\")\n            .forEach((element) => this.linkedQuestionContainers.push(element));\n          currentElement\n            .querySelectorAll(\".collapsible-tabs__content\")\n            .forEach((element) => this.linkedContent.push(element));\n\n          // build index UI\n          if (indexContainer) {\n            var currentElementHeading = currentElement.querySelector(\n              \".collapsible-tabs__heading\"\n            );\n            if (currentElementHeading) {\n              var tve = theme.createTemplateVariableEncoder();\n              tve.add(\"title_id\", currentElementHeading.id, \"attribute\");\n              tve.add(\"title\", currentElementHeading.innerHTML, \"raw\");\n\n              var html =\n                '\\n              <div class=\"faq-index-item\">\\n                <a class=\"faq-index-item__link\" href=\"#'\n                  .concat(tve.values.title_id, '\">')\n                  .concat(tve.values.title, \"</a>\\n              </div>\");\n\n              var htmlFragment = document\n                .createRange()\n                .createContextualFragment(html);\n              indexContainer.appendChild(htmlFragment);\n            }\n          }\n        }\n\n        if (indexContainer) {\n          this.functions.resizeIndex.call(this);\n        }\n      },\n\n      resizeIndex: function resizeIndex() {\n        var stickyContainer = this.container.querySelector(\n            \".faq-index__sticky-container\"\n          ),\n          faqHeaderSection = this.container.closest(\".section-faq-header\");\n\n        var currentElement = faqHeaderSection;\n        while (\n          currentElement.nextElementSibling &&\n          currentElement.nextElementSibling.classList.contains(\n            \"section-collapsible-tabs\"\n          )\n        ) {\n          currentElement = currentElement.nextElementSibling;\n        }\n\n        var stickyContainerRect = stickyContainer.getBoundingClientRect(),\n          currentElementRect = currentElement.getBoundingClientRect();\n\n        stickyContainer.style.height =\n          currentElementRect.bottom - stickyContainerRect.top + \"px\";\n      },\n\n      performSearch: function performSearch() {\n        // defer to avoid input lag\n        setTimeout(() => {\n          var splitValue = this.searchInput.value.split(\" \");\n\n          // sanitise terms\n          var terms = [];\n          splitValue.forEach((t) => {\n            if (t.length > 0) {\n              terms.push(t.toLowerCase());\n            }\n          });\n\n          // search\n          this.linkedQuestionContainers.forEach((element) => {\n            if (terms.length) {\n              var termFound = false;\n              var matchContent = element.textContent.toLowerCase();\n              terms.forEach((term) => {\n                if (matchContent.indexOf(term) >= 0) {\n                  termFound = true;\n                }\n              });\n              if (termFound) {\n                element.classList.remove(\n                  this.classNames.questionContainerInactive\n                );\n              } else {\n                element.classList.add(\n                  this.classNames.questionContainerInactive\n                );\n              }\n            } else {\n              element.classList.remove(\n                this.classNames.questionContainerInactive\n              );\n            }\n          });\n\n          // hide non-question content if doing a search\n          this.linkedContent.forEach((element) => {\n            if (terms.length) {\n              element.classList.add(this.classNames.questionContainerInactive);\n            } else {\n              element.classList.remove(\n                this.classNames.questionContainerInactive\n              );\n            }\n          });\n        }, 10);\n      },\n\n      handleIndexClick: function handleIndexClick(evt) {\n        if (evt.target.classList.contains(\"faq-index-item__link\")) {\n          evt.preventDefault();\n          var id = evt.target.href.split(\"#\")[1];\n          var scrollTarget = document.getElementById(id);\n          var scrollTargetY =\n            scrollTarget.getBoundingClientRect().top + window.pageYOffset - 50;\n\n          // sticky header offset\n          var stickyHeight = getComputedStyle(\n            document.documentElement\n          ).getPropertyValue(\"--theme-sticky-header-height\");\n          if (stickyHeight) {\n            scrollTargetY -= parseInt(stickyHeight);\n          }\n\n          window.scrollTo({\n            top: scrollTargetY,\n            behavior: \"smooth\",\n          });\n        }\n      },\n    };\n  })();\n\n  // Register section\n  cc.sections.push({\n    name: \"faq-header\",\n    section: theme.FaqHeader,\n    deferredLoad: false,\n  });\n  theme.CollapsibleTabs = new (function () {\n    this.onSectionLoad = function (container) {\n      this.functions.notifyFaqHeaderOfChange();\n    };\n\n    this.onSectionReorder = function (container) {\n      this.functions.notifyFaqHeaderOfChange();\n    };\n\n    this.onSectionUnload = function (container) {\n      this.functions.notifyFaqHeaderOfChange();\n    };\n\n    this.functions = {\n      notifyFaqHeaderOfChange: function notifyFaqHeaderOfChange() {\n        document.dispatchEvent(\n          new CustomEvent(\"theme:faq-header-update\", {\n            bubbles: true,\n            cancelable: false,\n          })\n        );\n      },\n    };\n  })();\n\n  // Register section\n  cc.sections.push({\n    name: \"collapsible-tabs\",\n    section: theme.CollapsibleTabs,\n    deferredLoad: false,\n  });\n  /**\n   * StoreAvailability Section Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace StoreAvailability\n   */\n\n  theme.StoreAvailability = function (container) {\n    var loadingClass = \"store-availability-loading\";\n    var initClass = \"store-availability-initialized\";\n    var storageKey = \"cc-location\";\n\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n      this.productId = this.$container.data(\"store-availability-container\");\n      this.sectionUrl = this.$container.data(\"section-url\");\n      this.$modal;\n\n      this.$container.addClass(initClass);\n      this.transitionDurationMS =\n        parseFloat(getComputedStyle(container).transitionDuration) * 1000;\n      this.removeFixedHeightTimeout = -1;\n\n      // Handle when a variant is selected\n      $(window).on(\n        \"cc-variant-updated\".concat(this.namespace).concat(this.productId),\n        (e, args) => {\n          if (args.product.id === this.productId) {\n            this.functions.updateContent.bind(this)(\n              args.variant ? args.variant.id : null,\n              args.product.title,\n              this.$container.data(\"has-only-default-variant\"),\n              args.variant && typeof args.variant.available !== \"undefined\"\n            );\n          }\n        }\n      );\n\n      // Handle single variant products\n      if (this.$container.data(\"single-variant-id\")) {\n        this.functions.updateContent.bind(this)(\n          this.$container.data(\"single-variant-id\"),\n          this.$container.data(\"single-variant-product-title\"),\n          this.$container.data(\"has-only-default-variant\"),\n          this.$container.data(\"single-variant-product-available\")\n        );\n      }\n    };\n\n    this.onSectionUnload = function () {\n      $(window).off(\n        \"cc-variant-updated\".concat(this.namespace).concat(this.productId)\n      );\n      this.$container.off(\"click\");\n      if (this.$modal) {\n        this.$modal.off(\"click\");\n      }\n    };\n\n    this.functions = {\n      // Returns the users location data (if allowed)\n      getUserLocation: function getUserLocation() {\n        return new Promise((resolve, reject) => {\n          var storedCoords;\n\n          if (sessionStorage[storageKey]) {\n            storedCoords = JSON.parse(sessionStorage[storageKey]);\n          }\n\n          if (storedCoords) {\n            resolve(storedCoords);\n          } else {\n            if (navigator.geolocation) {\n              navigator.geolocation.getCurrentPosition(\n                function (position) {\n                  var coords = {\n                    latitude: position.coords.latitude,\n                    longitude: position.coords.longitude,\n                  };\n\n                  //Set the localization api\n                  fetch(\"/localization.json\", {\n                    method: \"PUT\",\n                    headers: {\n                      \"Content-Type\": \"application/json\",\n                    },\n                    body: JSON.stringify(coords),\n                  });\n\n                  //Write to a session storage\n                  sessionStorage[storageKey] = JSON.stringify(coords);\n\n                  resolve(coords);\n                },\n                function () {\n                  resolve(false);\n                },\n                {\n                  maximumAge: 3600000, // 1 hour\n                  timeout: 5000,\n                }\n              );\n            } else {\n              resolve(false);\n            }\n          }\n        });\n      },\n\n      // Requests the available stores and calls the callback\n      getAvailableStores: function getAvailableStores(variantId, cb) {\n        return $.get(this.sectionUrl.replace(\"VARIANT_ID\", variantId), cb);\n      },\n\n      // Haversine Distance\n      // The haversine formula is an equation giving great-circle distances between\n      // two points on a sphere from their longitudes and latitudes\n      calculateDistance: function calculateDistance(\n        coords1,\n        coords2,\n        unitSystem\n      ) {\n        var dtor = Math.PI / 180;\n        var radius = unitSystem === \"metric\" ? 6378.14 : 3959;\n\n        var rlat1 = coords1.latitude * dtor;\n        var rlong1 = coords1.longitude * dtor;\n        var rlat2 = coords2.latitude * dtor;\n        var rlong2 = coords2.longitude * dtor;\n\n        var dlon = rlong1 - rlong2;\n        var dlat = rlat1 - rlat2;\n\n        var a =\n          Math.pow(Math.sin(dlat / 2), 2) +\n          Math.cos(rlat1) * Math.cos(rlat2) * Math.pow(Math.sin(dlon / 2), 2);\n        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n        return radius * c;\n      },\n\n      // Updates the existing modal pickup with locations with distances from the user\n      updateLocationDistances: function updateLocationDistances(coords) {\n        var unitSystem = this.$modal\n          .find(\"[data-unit-system]\")\n          .data(\"unit-system\");\n        var self = this;\n\n        this.$modal.find('[data-distance=\"false\"]').each(function () {\n          var thisCoords = {\n            latitude: parseFloat($(this).data(\"latitude\")),\n            longitude: parseFloat($(this).data(\"longitude\")),\n          };\n\n          if (thisCoords.latitude && thisCoords.longitude) {\n            var distance = self.functions\n              .calculateDistance(coords, thisCoords, unitSystem)\n              .toFixed(1);\n\n            $(this).html(distance);\n\n            //Timeout to trigger animation\n            setTimeout(() => {\n              $(this)\n                .closest(\".store-availability-list__location__distance\")\n                .addClass(\"-in\");\n            }, 0);\n          }\n\n          $(this).attr(\"data-distance\", \"true\");\n        });\n      },\n\n      // Requests the available stores and updates the page with info below Add to Basket, and append the modal to the page\n      updateContent: function updateContent(\n        variantId,\n        productTitle,\n        isSingleDefaultVariant,\n        isVariantAvailable\n      ) {\n        this.$container.off(\"click\", \"[data-store-availability-modal-open]\");\n        this.$container.off(\n          \"click\" + this.namespace,\n          \".cc-popup-close, .cc-popup-background\"\n        );\n        $(\".store-availabilities-modal\").remove();\n\n        if (!isVariantAvailable) {\n          //If the variant is Unavailable (not the same as Out of Stock) - hide the store pickup completely\n          this.$container.addClass(loadingClass);\n          if (this.transitionDurationMS > 0) {\n            this.$container.css(\"height\", \"0px\");\n          }\n        } else {\n          this.$container.addClass(loadingClass);\n          if (this.transitionDurationMS > 0) {\n            this.$container.css(\"height\", this.$container.outerHeight() + \"px\");\n          }\n        }\n\n        if (isVariantAvailable) {\n          this.functions.getAvailableStores.call(\n            this,\n            variantId,\n            (response) => {\n              if (\n                response.trim().length > 0 &&\n                !response.includes(\"NO_PICKUP\")\n              ) {\n                this.$container.html(response);\n                this.$container.html(this.$container.children().first().html()); // editor bug workaround\n\n                this.$container\n                  .find(\"[data-store-availability-modal-product-title]\")\n                  .html(productTitle);\n\n                if (isSingleDefaultVariant) {\n                  this.$container\n                    .find(\".store-availabilities-modal__variant-title\")\n                    .remove();\n                }\n\n                this.$container.find(\".cc-popup\").appendTo(\"body\");\n\n                this.$modal = $(\"body\").find(\".store-availabilities-modal\");\n                var popup = new ccPopup(this.$modal, this.namespace);\n\n                this.$container.on(\n                  \"click\",\n                  \"[data-store-availability-modal-open]\",\n                  () => {\n                    popup.open();\n\n                    //When the modal is opened, try and get the users location\n                    this.functions.getUserLocation().then((coords) => {\n                      if (\n                        coords &&\n                        this.$modal.find('[data-distance=\"false\"]').length\n                      ) {\n                        //Re-retrieve the available stores location modal contents\n                        this.functions.getAvailableStores.call(\n                          this,\n                          variantId,\n                          (response) => {\n                            this.$modal\n                              .find(\".store-availabilities-list\")\n                              .html(\n                                $(response)\n                                  .find(\".store-availabilities-list\")\n                                  .html()\n                              );\n                            this.functions.updateLocationDistances.bind(this)(\n                              coords\n                            );\n                          }\n                        );\n                      }\n                    });\n\n                    return false;\n                  }\n                );\n\n                this.$modal.on(\n                  \"click\" + this.namespace,\n                  \".cc-popup-close, .cc-popup-background\",\n                  () => {\n                    popup.close();\n                  }\n                );\n\n                this.$container.removeClass(loadingClass);\n\n                if (this.transitionDurationMS > 0) {\n                  var newHeight = this.$container\n                    .find(\".store-availability-container\")\n                    .outerHeight();\n                  this.$container.css(\n                    \"height\",\n                    newHeight > 0 ? newHeight + \"px\" : \"\"\n                  );\n                  clearTimeout(this.removeFixedHeightTimeout);\n                  this.removeFixedHeightTimeout = setTimeout(() => {\n                    this.$container.css(\"height\", \"\");\n                  }, this.transitionDurationMS);\n                }\n              }\n            }\n          );\n        }\n      },\n    };\n\n    // Initialise the section when it's instantiated\n    this.onSectionLoad(container);\n  };\n\n  // Register section\n  cc.sections.push({\n    name: \"store-availability\",\n    section: theme.StoreAvailability,\n  });\n  /**\n   * Popup Section Script\n   * ------------------------------------------------------------------------------\n   *\n   * @namespace Popup\n   */\n\n  theme.Popup = new (function () {\n    /**\n     * Popup section constructor. Runs on page load as well as Theme Editor\n     * `section:load` events.\n     * @param {string} container - selector for the section container DOM element\n     */\n\n    var dismissedStorageKey = \"cc-theme-popup-dismissed\";\n\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n      this.popup = new ccPopup(this.$container, this.namespace);\n\n      var dismissForDays = this.$container.data(\"dismiss-for-days\"),\n        delaySeconds = this.$container.data(\"delay-seconds\"),\n        showPopup = true,\n        testMode = this.$container.data(\"test-mode\"),\n        lastDismissed = window.localStorage.getItem(dismissedStorageKey);\n\n      // Should we show it during this page view?\n      // Check when it was last dismissed\n      if (lastDismissed) {\n        var dismissedDaysAgo =\n          (new Date().getTime() - lastDismissed) / (1000 * 60 * 60 * 24);\n        if (dismissedDaysAgo < dismissForDays) {\n          showPopup = false;\n        }\n      }\n\n      // Check for error or success messages\n      if (this.$container.find(\".cc-popup-form__response\").length) {\n        showPopup = true;\n        delaySeconds = 1;\n\n        // If success, set as dismissed\n        if (this.$container.find(\".cc-popup-form__response--success\").length) {\n          this.functions.popupSetAsDismissed.call(this);\n        }\n      }\n\n      // Prevent popup on Shopify robot challenge page\n      if (document.querySelector(\".shopify-challenge__container\")) {\n        showPopup = false;\n      }\n\n      // Show popup, if appropriate\n      if (showPopup || testMode) {\n        setTimeout(() => {\n          this.popup.open();\n        }, delaySeconds * 1000);\n      }\n\n      // Click on close button or modal background\n      this.$container.on(\n        \"click\" + this.namespace,\n        \".cc-popup-close, .cc-popup-background\",\n        () => {\n          this.popup.close(() => {\n            this.functions.popupSetAsDismissed.call(this);\n          });\n        }\n      );\n    };\n\n    this.onSectionSelect = function () {\n      this.popup.open();\n    };\n\n    this.functions = {\n      /**\n       * Use localStorage to set as dismissed\n       */\n      popupSetAsDismissed: function popupSetAsDismissed() {\n        window.localStorage.setItem(dismissedStorageKey, new Date().getTime());\n      },\n    };\n\n    /**\n     * Event callback for Theme Editor `section:unload` event\n     */\n    this.onSectionUnload = function () {\n      this.$container.off(this.namespace);\n    };\n  })();\n\n  // Register section\n  cc.sections.push({\n    name: \"newsletter-popup\",\n    section: theme.Popup,\n  });\n\n  /*================ General =================*/\n  theme.owlCarouselEventList =\n    [\n      \"to\",\n      \"next\",\n      \"prev\",\n      \"destroy\",\n      \"initialized\",\n      \"resized\",\n      \"refreshed\",\n    ].join(\".owl.carousel \") + \".owl.carousel\";\n  theme.beforeCarouselLoadEventBlockFix = function (carouselEls) {\n    $(carouselEls).on(theme.owlCarouselEventList, function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  theme.beforeCarouselUnloadEventBlockFix = function (carouselEls) {\n    $(carouselEls).off(theme.owlCarouselEventList);\n  };\n\n  theme.loadCarousels = function (container) {\n    return $(\".carousel\", container).each(function () {\n      var $this = $(this);\n\n      function getTotalProductBlockWidth() {\n        var productBlockTotalWidth = 0;\n        $this\n          .find(\n            $this.hasClass(\"owl-loaded\")\n              ? \".owl-item:not(.cloned)\"\n              : \".product-block\"\n          )\n          .each(function () {\n            productBlockTotalWidth += $(this).outerWidth(true);\n          });\n        return productBlockTotalWidth;\n      }\n\n      // next & prev arrows\n      $this\n        .closest(\".collection-slider\")\n        .on(\"click.themeCarousel\", \".prev, .next\", function (e) {\n          e.preventDefault();\n          var carousel = $(this)\n            .closest(\".collection-slider\")\n            .find(\".owl-carousel\")\n            .data(\"owl.carousel\");\n          if ($(this).hasClass(\"prev\")) {\n            carousel.prev();\n          } else {\n            carousel.next();\n          }\n        });\n\n      // create options\n      var carouselOptions, isLooping;\n      var fixedMode =\n        $this.hasClass(\"carousel--fixed-grid-mode\") ||\n        !$(this).closest(\".container--no-max\").length;\n      if (fixedMode) {\n        $this.addClass(\"carousel--fixed-grid-mode\");\n        var desktopNumPerRow = parseInt(\n          $this[0].className.match(/per-row-(.)/)[1]\n        );\n        var forcedNumPerRow = false;\n        if ($this[0].className.indexOf(\"carousel--per-row-\") > -1) {\n          forcedNumPerRow = parseInt(\n            $this[0].className.match(/carousel--per-row-(.)/)[1]\n          );\n        }\n        carouselOptions = {\n          margin: 0,\n          loop: false,\n          autoWidth: false,\n          items: 5,\n          center: false,\n          nav: false,\n          dots: false,\n          responsive: {\n            0: {\n              items: forcedNumPerRow\n                ? forcedNumPerRow\n                : desktopNumPerRow < 4\n                ? 1\n                : 2,\n            },\n            480: {\n              items: forcedNumPerRow\n                ? forcedNumPerRow\n                : Math.min(2, desktopNumPerRow - 2),\n            },\n            767: {\n              items: forcedNumPerRow ? forcedNumPerRow : desktopNumPerRow - 1,\n            },\n            1000: {\n              items: forcedNumPerRow ? forcedNumPerRow : desktopNumPerRow,\n            },\n          },\n        };\n      } else {\n        isLooping = getTotalProductBlockWidth() > $this.width();\n        carouselOptions = {\n          margin: 0,\n          loop: isLooping,\n          autoWidth: true,\n          items: Math.min($this.children().length, 8),\n          center: true,\n          nav: false,\n          dots: false,\n        };\n      }\n\n      carouselOptions.rtl = document.querySelector(\"html[dir=rtl]\")\n        ? true\n        : false;\n\n      // init carousel\n      var loadCarousel = function loadCarousel() {\n        // remove data-src as not in correct format for Owl to parse\n        $this.find(\"[data-src]\").each(function () {\n          $(this)\n            .attr(\"data-src-temp\", $(this).attr(\"data-src\"))\n            .removeAttr(\"data-src\");\n        });\n\n        // fix for event propagation in nested owl carousels\n        theme.beforeCarouselLoadEventBlockFix($this);\n\n        // run after carousel is initialised\n        $this.on(\"initialized.owl.carousel\", function () {\n          // restore data-src\n          $this.find(\"[data-src-temp]\").each(function () {\n            $(this)\n              .attr(\"data-src\", $(this).attr(\"data-src-temp\"))\n              .removeAttr(\"data-src-temp\");\n          });\n          // lazysizes on primary images\n          $this\n            .find(\n              '.product-block__image--primary .lazyload--manual, .product-block__image--secondary[data-image-index=\"1\"] .lazyload--manual, .product-block-options__item.lazyload--manual'\n            )\n            .removeClass(\"lazyload--manual\")\n            .addClass(\"lazyload\");\n          // ensure clones are processed from scratch\n          theme.ProductBlockManager.loadImages(\n            $this.closest(\"[data-section-type]\")\n          );\n          // recalculate widths, after the above's async calls\n          setTimeout(function () {\n            $this.data(\"owl.carousel\").invalidate(\"width\");\n            $this.trigger(\"refresh.owl.carousel\");\n          }, 10);\n        });\n\n        // run after carousel is initialised or resized\n        $this.on(\n          \"initialized.owl.carousel resized.owl.carousel\",\n          function (evt) {\n            // only loop if items do not all fit on screen, in non-fixed mode\n            if (!fixedMode && evt.type == \"resized\") {\n              var shouldLoop = getTotalProductBlockWidth() > $this.width();\n              if (shouldLoop != isLooping) {\n                // destroy and rebuild carousel with appropriate loop setting\n                carouselOptions.loop = shouldLoop;\n                isLooping = shouldLoop;\n\n                // destroy function\n                $(evt.target).data(\"owl.carousel\").destroy();\n\n                // build again\n                $(evt.target).owlCarousel(carouselOptions);\n\n                // do no more in this callback\n                return;\n              }\n            }\n\n            // layout fixes\n            setTimeout(function () {\n              // fixes\n              var currentWidth = $this.find(\".owl-stage\").width();\n              var stageIsPartiallyOffScreen = currentWidth > $this.width();\n              if (stageIsPartiallyOffScreen) {\n                // more elements than fit in viewport\n                // resize stage to avoid rounding-error wrapping\n                var newWidth = 0;\n                $this.find(\".owl-item\").each(function () {\n                  newWidth += $(this).outerWidth(true) + 1;\n                });\n                $this\n                  .find(\".owl-stage\")\n                  .css({})\n                  .removeClass(\"owl-stage--items-fit\");\n              } else {\n                // all elements fit inside viewport\n                // centre-align using css, if not full\n                $this\n                  .find(\".owl-stage\")\n                  .addClass(\"owl-stage--items-fit\")\n                  .css({});\n              }\n              // previous/next button visibility\n              $this\n                .closest(\".collection-slider\")\n                .find(\".prev, .next\")\n                .toggleClass(\"owl-btn-disabled\", !stageIsPartiallyOffScreen);\n            }, 10);\n          }\n        );\n\n        // run when the contents change, for any reason\n        theme.carouselInputIncrementer = theme.carouselInputIncrementer || 0;\n        $this\n          .on(\"refreshed.owl.carousel\", function () {\n            // set a11y attrs to avoid clone items giving duplication errors\n            $(\".owl-item\", this).removeAttr(\"aria-hidden\");\n            $(\".owl-item.cloned\", this)\n              .attr(\"aria-hidden\", \"true\")\n              .each(function () {\n                theme.carouselInputIncrementer++;\n                var uniquenessSuffix = \"_\" + theme.carouselInputIncrementer;\n                $(this)\n                  .find(\n                    \"form[id]:not([data-id-altered]), :input[id]:not([data-id-altered])\"\n                  )\n                  .each(function () {\n                    $(this).attr(\"id\", $(this).attr(\"id\") + uniquenessSuffix);\n                  })\n                  .attr(\"data-id-altered\", true);\n\n                $(this)\n                  .find(\"label[for]:not([data-id-altered])\")\n                  .each(function () {\n                    $(this).attr(\"for\", $(this).attr(\"for\") + uniquenessSuffix);\n                  })\n                  .attr(\"data-id-altered\", true);\n              });\n          })\n          .addClass(\"owl-carousel\")\n          .owlCarousel(carouselOptions);\n      };\n      loadCarousel();\n    });\n  };\n\n  theme.unloadCarousels = function (container) {\n    $(\".collection-slider\", container).off(\".themeCarousel\");\n    $(\".slick-slider\", container).slick(\"unslick\");\n    theme.beforeCarouselUnloadEventBlockFix($(\".owl-carousel\", container));\n    $(\".owl-carousel\", container).each(function () {\n      $(this).data(\"owl.carousel\").destroy();\n    });\n  };\n\n  theme.icons = {\n    left:\n      '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' +\n      theme.strings.icon_labels_left +\n      '</title><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\"/></svg>',\n    right:\n      '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' +\n      theme.strings.icon_labels_right +\n      '</title><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"/></svg>',\n    close:\n      '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-x\"><title>' +\n      theme.strings.icon_labels_close +\n      '</title><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>',\n    chevronLeft:\n      '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-chevron-left ltr-icon\"><title>' +\n      theme.strings.icon_labels_left +\n      '</title><polyline points=\"15 18 9 12 15 6\"></polyline></svg>',\n    chevronRight:\n      '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-chevron-right ltr-icon\"><title>' +\n      theme.strings.icon_labels_right +\n      '</title><polyline points=\"9 18 15 12 9 6\"></polyline></svg>',\n    chevronDown:\n      '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' +\n      theme.strings.icon_labels_down +\n      '</title><path d=\"M7.41 7.84L12 12.42l4.59-4.58L18 9.25l-6 6-6-6z\"/><path d=\"M0-.75h24v24H0z\" fill=\"none\"/></svg>',\n    tick: '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z\"/></svg>',\n    label:\n      '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-tag\"><title>Label</title><path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"></path><line x1=\"7\" y1=\"7\" x2=\"7\" y2=\"7\"></line></svg>',\n  };\n\n  // Get Shopify feature support\n  try {\n    theme.Shopify.features = JSON.parse(\n      document.documentElement.querySelector(\"#shopify-features\").textContent\n    );\n  } catch (e) {\n    theme.Shopify.features = {};\n  }\n\n  theme.namespaceFromSection = function (container) {\n    return [\n      \".\",\n      $(container).data(\"section-type\"),\n      $(container).data(\"section-id\"),\n    ].join(\"\");\n  };\n\n  theme.toggleLinkDropdownButton = function (evt) {\n    evt.stopPropagation();\n    var $btn = $(evt.currentTarget),\n      doExpand = $btn.attr(\"aria-expanded\") == \"false\";\n    $btn.attr(\"aria-expanded\", doExpand);\n    $btn.css(\"width\", $btn.outerWidth() + \"px\");\n    var newWidth = null,\n      $optsBox = $btn.next(),\n      isLeftAligned = $btn\n        .closest(\".link-dropdown\")\n        .hasClass(\"link-dropdown--left-aligned\");\n    if (!isLeftAligned) {\n      if (doExpand) {\n        newWidth = $optsBox.outerWidth();\n        // rtl - could be either side\n        if (document.querySelector(\"html[dir=rtl]\")) {\n          newWidth += parseInt($optsBox.css(\"left\"));\n        } else {\n          newWidth += parseInt($optsBox.css(\"right\"));\n        }\n        newWidth -= parseInt(\n          $optsBox\n            .find(\".link-dropdown__link:first\")\n            .css(\"padding-inline-start\")\n        );\n      } else {\n        newWidth =\n          parseInt($btn.css(\"padding-inline-end\")) +\n          $btn.find(\".link-dropdown__button-text\").width() +\n          1;\n      }\n      // setTimeout(function () {\n      // \t$btn.css(\"width\", newWidth + \"px\");\n      // }, 10);\n    }\n  };\n\n  // Enables any images inside a container\n  theme.awakenImagesFromSlumber = function ($cont) {\n    $cont.find(\".lazyload--manual:not(.lazyload)\").addClass(\"lazyload\");\n  };\n\n  theme.measureTextInsideElement = function (text, element) {\n    theme.measureTextInsideElementCanvas =\n      theme.measureTextInsideElementCanvas || document.createElement(\"canvas\");\n    var context = theme.measureTextInsideElementCanvas.getContext(\"2d\");\n    var font = getComputedStyle(element).font;\n    context.font = font;\n    return context.measureText(text);\n  };\n\n  // Use non-breaking space to attempt to avoid orphans\n  theme.avoidUnecessaryOrphans = function (element) {\n    if (theme.settings.avoid_orphans) {\n      var innerTextSplit = element.innerText.split(\" \");\n      if (\n        innerTextSplit.length >= 4 && // 4 or more words\n        innerTextSplit[innerTextSplit.length - 1].length +\n          innerTextSplit[innerTextSplit.length - 2].length <\n          20 // last two words aren't particularly long together\n      ) {\n        var html = element.innerHTML;\n        if (html.indexOf('<span class=\"orphan-join\">') < 0) {\n          html = html.replace(/<[^>]*?>/g, (match) => {\n            return match.replace(/ /g, \"\u03A9\u03A9\");\n          });\n          var splitHtml = html.split(\" \"),\n            lastItem = splitHtml.pop();\n\n          // ensure length of text will be smaller than container, excluding HTML\n          if (\n            theme.measureTextInsideElement(\n              splitHtml[splitHtml.length - 1].replace(/<[^>]*?>/g, \"\") +\n                \" \" +\n                lastItem.replace(/<[^>]*?>/g, \"\"),\n              element\n            ).width > element.clientWidth\n          ) {\n            return;\n          }\n\n          html =\n            splitHtml.join(\" \") +\n            '<span class=\"orphan-join\"> </span>' +\n            lastItem;\n          html = html.replace(/\u03A9\u03A9/g, \" \");\n          element.innerHTML = html;\n        }\n      }\n    }\n  };\n\n  theme.stickyHeaderHeight = function () {\n    var v = getComputedStyle(document.documentElement).getPropertyValue(\n      \"--theme-sticky-header-height\"\n    );\n    if (v) {\n      return parseInt(v) || 0;\n    } else {\n      return 0;\n    }\n  };\n\n  theme.getOffsetTopFromDoc = (el) => {\n    return el ? theme.getOffsetTopFromDoc(el.offsetParent) + el.offsetTop : 0;\n  };\n\n  theme.getScrollParent = function (node) {\n    var isElement = node instanceof HTMLElement;\n    var overflowY = isElement && window.getComputedStyle(node).overflowY;\n    var isScrollable = overflowY !== \"visible\" && overflowY !== \"hidden\";\n\n    if (!node) {\n      return null;\n    } else if (isScrollable && node.scrollHeight > node.clientHeight) {\n      return node;\n    }\n\n    return (\n      theme.getScrollParent(node.parentNode) ||\n      document.scrollingElement ||\n      window\n    );\n  };\n\n  theme.scrollToRevealElement = function (el) {\n    var scrollContainer = theme.getScrollParent(el);\n    var scrollTop =\n      scrollContainer === window ? window.scrollY : scrollContainer.scrollTop;\n    var scrollVisibleHeight =\n      scrollContainer === window\n        ? window.innerHeight\n        : scrollContainer.clientHeight;\n    var elTop = theme.getOffsetTopFromDoc(el),\n      elBot = elTop + el.offsetHeight,\n      inViewTop = scrollTop + theme.stickyHeaderHeight(),\n      inViewBot = scrollTop + scrollVisibleHeight - 50;\n\n    if (elTop < inViewTop || elBot > inViewBot) {\n      scrollContainer.scrollTo({\n        top: elTop - 100 - theme.stickyHeaderHeight(),\n        left: 0,\n        behavior: \"smooth\",\n      });\n    }\n  };\n\n  theme.getEmptyOptionSelectors = function ($formContainer) {\n    var emptySections = [];\n\n    $formContainer\n      .find('[data-selector-type=\"dropdown\"].option-selector')\n      .each(function () {\n        if (\n          !$(this)\n            .find('[aria-selected=\"true\"]')\n            .filter(function () {\n              return this.dataset && this.dataset.value;\n            }).length\n        ) {\n          emptySections.push(this);\n        }\n      });\n\n    $formContainer\n      .find('[data-selector-type=\"listed\"].option-selector')\n      .each(function () {\n        if (!$(this).find(\"input:checked\").length) {\n          emptySections.push(this);\n        }\n      });\n\n    return emptySections;\n  };\n\n  theme.validateProductForm = function ($formContainer) {\n    $formContainer\n      .find(\".option-selector--empty\")\n      .removeClass(\"option-selector--empty\")\n      .find(\".label__prefix\")\n      .remove();\n\n    if (!$formContainer.find(\".original-selector\").val()) {\n      var emptySections = theme.getEmptyOptionSelectors($formContainer);\n\n      if (emptySections.length) {\n        emptySections.forEach((el) => {\n          let label = el.querySelector(\".label\");\n          el.classList.add(\"option-selector--empty\");\n          var labelPrefix = document.createElement(\"span\");\n          labelPrefix.innerText =\n            theme.strings.products_product_pick_a +\n            \" \" +\n            (label?.dataset?.label?.toLocaleLowerCase() ?? \"\");\n          labelPrefix.className = \"label__prefix\";\n          label.prepend(labelPrefix);\n        });\n\n        theme.scrollToRevealElement(emptySections[0]);\n\n        $formContainer.addClass(\"product-form--validation-started\");\n      }\n      return false;\n    } else if (\n      !theme.OptionManager.getCurrentVariantData($formContainer).available\n    ) {\n      // variant unavailable\n      return false;\n    } else {\n      return true;\n    }\n  };\n\n  theme.pauseAllMedia = function (params) {\n    if (!params || params.videos) {\n      document.querySelectorAll(\".js-youtube\").forEach((video) => {\n        video.contentWindow.postMessage(\n          '{\"event\":\"command\",\"func\":\"' + \"pauseVideo\" + '\",\"args\":\"\"}',\n          \"*\"\n        );\n      });\n      document.querySelectorAll(\".js-vimeo\").forEach((video) => {\n        video.contentWindow.postMessage('{\"method\":\"pause\"}', \"*\");\n      });\n      document.querySelectorAll(\"video\").forEach((video) => video.pause());\n    }\n    if (!params || params.models) {\n      document.querySelectorAll(\"product-model\").forEach((model) => {\n        if (model.modelViewerUI) model.modelViewerUI.pause();\n      });\n    }\n  };\n\n  theme.suffixIds = (container, prefix) => {\n    var suffixCandidates = [\"id\", \"for\", \"aria-describedby\", \"aria-controls\"];\n    var _loop = function _loop(i) {\n      container\n        .querySelectorAll(\"[\".concat(suffixCandidates[i], \"]\"))\n        .forEach((el) =>\n          el.setAttribute(\n            suffixCandidates[i],\n            el.getAttribute(suffixCandidates[i]) + prefix\n          )\n        );\n    };\n    for (var i = 0; i < suffixCandidates.length; i++) {\n      _loop(i);\n    }\n  };\n\n  theme.addDelegateEventListener = function (\n    element,\n    eventName,\n    selector,\n    callback\n  ) {\n    var addEventListenerParams =\n      arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n    var cb = (evt) => {\n      var el = evt.target.closest(selector);\n      if (!el) return;\n      if (!element.contains(el)) return;\n      callback.call(el, evt, el);\n    };\n    element.addEventListener(eventName, cb, addEventListenerParams);\n  };\n\n  theme.hideAndRemove = (el) => {\n    // disable\n    el.querySelectorAll(\"input\").forEach((el) => (el.disabled = true));\n\n    // wrap\n    var wrapper = document.createElement(\"div\");\n    wrapper.className = \"merge-remove-wrapper\";\n    el.parentNode.insertBefore(wrapper, el);\n    wrapper.appendChild(el);\n    el.classList.add(\"merge-remove-item\");\n    wrapper.style.height = wrapper.clientHeight + \"px\";\n\n    var cs = getComputedStyle(el),\n      fadeDuration = parseFloat(cs.getPropertyValue(\"--fade-duration\")) * 1000,\n      slideDuration =\n        parseFloat(cs.getPropertyValue(\"--slide-duration\")) * 1000;\n\n    setTimeout(() => {\n      wrapper.classList.add(\"merge-remove-wrapper--fade\");\n\n      setTimeout(() => {\n        wrapper.classList.add(\"merge-remove-wrapper--slide\");\n\n        setTimeout(() => wrapper.remove(), slideDuration);\n      }, fadeDuration);\n    }, 10);\n  };\n\n  theme.insertAndReveal = (el, target, iaeCmd, delay) => {\n    var initialDelay = delay ? delay : 10;\n    el.classList.add(\"merge-add-wrapper\");\n    target.insertAdjacentElement(iaeCmd, el);\n    el.style.height = el.firstElementChild.clientHeight + \"px\";\n\n    var cs = getComputedStyle(el),\n      fadeDuration = parseFloat(cs.getPropertyValue(\"--fade-duration\")) * 1000,\n      slideDuration =\n        parseFloat(cs.getPropertyValue(\"--slide-duration\")) * 1000;\n\n    setTimeout(() => {\n      el.classList.add(\"merge-add-wrapper--slide\");\n\n      setTimeout(() => {\n        el.classList.add(\"merge-add-wrapper--fade\");\n\n        setTimeout(() => {\n          // tidy up\n          el.style.height = \"\";\n          el.classList.remove(\n            \"merge-add-wrapper\",\n            \"merge-add-wrapper--slide\",\n            \"merge-add-wrapper--fade\"\n          );\n        }, fadeDuration);\n      }, slideDuration);\n    }, initialDelay);\n  };\n\n  theme.mergeNodes = (newContent, targetContainer) => {\n    try {\n      // merge: replace content if changed\n      newContent.querySelectorAll(\"[data-merge]\").forEach((newEl) => {\n        var targetEl = targetContainer.querySelector(\n          '[data-merge=\"'.concat(newEl.dataset.merge, '\"]')\n        );\n        if (\n          !newEl.dataset.mergeCache ||\n          !targetEl.dataset.mergeCache ||\n          newEl.dataset.mergeCache !== targetEl.dataset.mergeCache\n        ) {\n          targetEl.innerHTML = newEl.innerHTML;\n          targetEl.dataset.mergeCache = newEl.dataset.mergeCache;\n        }\n      });\n      // merge: attributes only\n      newContent\n        .querySelectorAll(\"[data-merge-attributes]\")\n        .forEach((newEl) => {\n          var targetEl = targetContainer.querySelector(\n            '[data-merge-attributes=\"'.concat(\n              newEl.dataset.mergeAttributes,\n              '\"]'\n            )\n          );\n          for (var attr of newEl.attributes) {\n            targetEl.setAttribute(attr.localName, attr.value);\n          }\n        });\n      // merge: insert/remove/replace in list\n      newContent.querySelectorAll(\"[data-merge-list]\").forEach((newList) => {\n        var targetList = targetContainer.querySelector(\n          '[data-merge-list=\"'.concat(newList.dataset.mergeList, '\"]')\n        );\n        var targetListItems = Array.from(\n          targetList.querySelectorAll(\"[data-merge-list-item]\")\n        );\n        var newListItems = Array.from(\n          newList.querySelectorAll(\"[data-merge-list-item]\")\n        );\n\n        // remove\n        targetListItems.forEach((targetListItem) => {\n          var matchedItem = newListItems.find(\n            (item) =>\n              item.dataset.mergeListItem == targetListItem.dataset.mergeListItem\n          );\n          if (!matchedItem) {\n            theme.hideAndRemove(targetListItem);\n          }\n        });\n\n        // rebuild target list excluding removed items\n        targetListItems = Array.from(\n          targetList.querySelectorAll(\n            \"[data-merge-list-item]:not(.merge-remove-item)\"\n          )\n        );\n        var _loop2 = function _loop2() {\n          var newListItem = newListItems[i];\n          var matchedItem = targetListItems.find(\n            (item) =>\n              item.dataset.mergeListItem == newListItem.dataset.mergeListItem\n          );\n          if (matchedItem) {\n            // replace if changed\n            if (\n              !newListItem.dataset.mergeCache ||\n              !matchedItem.dataset.mergeCache ||\n              newListItem.dataset.mergeCache !== matchedItem.dataset.mergeCache\n            ) {\n              matchedItem.innerHTML = newListItem.innerHTML;\n              if (newListItem.dataset.mergeCache) {\n                matchedItem.dataset.mergeCache = newListItem.dataset.mergeCache;\n              }\n            }\n          } else {\n            // add\n            if (i === 0) {\n              // first place\n              theme.insertAndReveal(newListItem, targetList, \"afterbegin\", 500);\n            } else if (i >= targetListItems.length) {\n              // at end\n              theme.insertAndReveal(newListItem, targetList, \"beforeend\", 500);\n            } else {\n              // before element currently at that index\n              theme.insertAndReveal(\n                newListItem,\n                targetListItems[i],\n                \"beforebegin\",\n                500\n              );\n            }\n            // update target list\n            targetListItems.splice(i, 0, newListItem);\n          }\n        };\n        for (var i = 0; i < newListItems.length; i++) {\n          _loop2();\n        }\n      });\n    } catch (_unused) {\n      location.reload();\n    }\n  };\n\n  // bg-set snippet in JS\n  theme.lazyBGSetWidths = [\n    180, 360, 540, 720, 900, 1080, 1296, 1512, 1728, 1950, 2100, 2260, 2450,\n    2700, 3000, 3350, 3750, 4100,\n  ];\n  theme.loadLazyBGSet = function (container) {\n    $(\"[data-lazy-bgset-src]\", container).each(function () {\n      var srcset = \"\",\n        masterSrc = $(this).data(\"lazy-bgset-src\"),\n        aspectRatio = $(this).data(\"lazy-bgset-aspect-ratio\"),\n        masterWidth = $(this).data(\"lazy-bgset-width\"),\n        masterHeight = Math.round(masterWidth / aspectRatio);\n\n      for (var i = 0; i < theme.lazyBGSetWidths.length; i++) {\n        var thisWidth = theme.lazyBGSetWidths[i];\n        if (masterWidth >= thisWidth) {\n          srcset += \"\"\n            .concat(theme.Shopify.formatImage(masterSrc, thisWidth + \"x\"), \" \")\n            .concat(thisWidth, \"w \")\n            .concat(Math.round(thisWidth / aspectRatio), \"h, \");\n        }\n      }\n      srcset += \"\"\n        .concat(masterSrc, \" \")\n        .concat(masterWidth, \"w \")\n        .concat(masterHeight, \"h\");\n      $(this)\n        .attr(\"data-bgset\", srcset)\n        .removeClass(\"lazyload--manual\")\n        .addClass(\"lazyload\");\n    });\n  };\n\n  /*=============== Components ===============*/\n  // Process product block layout\n  theme.ProductBlockManager = new (function () {\n    var _ = this;\n\n    _.isDesktop = function () {\n      return $(window).width() >= 768;\n    };\n\n    _.loadImages = function (container) {\n      var container = container;\n      if (typeof container === \"undefined\") {\n        container = $(\"body\");\n      }\n\n      // lazy bg-set - faster in JS\n      theme.loadLazyBGSet(container);\n\n      if (_.isDesktop()) {\n        // preload hover images after short delay\n        setTimeout(() => {\n          $(\n            \".product-block__image--show-on-hover.product-block__image--inactivated\",\n            container\n          ).each(function () {\n            _.lazyloadImage($(this));\n            lazySizes.loader.unveil($(this).find(\".lazyload\")[0]);\n          });\n        }, 250);\n        // preload first carousel image after a delay\n        setTimeout(() => {\n          $(\n            \".product-block__image--show-on-hover + .product-block__image--inactivated\",\n            container\n          ).each(function () {\n            _.lazyloadImage($(this));\n          });\n        }, 1000);\n      }\n\n      _.monitorImagePagination(container);\n      _.monitorSwatchSelection(container);\n      _.afterImagesResized(container);\n    };\n\n    _.unloadImages = function (container) {\n      $(container).off(\".productBlockManager\");\n    };\n\n    // get image at index, safely wraps index\n    _.getImageAt = function ($images, index) {\n      // positive modulo, like it should be, JS does not do *maths* correctly\n      return $images[\n        ((index % $images.length) + $images.length) % $images.length\n      ];\n    };\n\n    _.lazyloadImage = function ($image, onLoadCB) {\n      var $toLoad = $image.filter(\".product-block__image--inactivated\");\n      if ($toLoad.length) {\n        if (onLoadCB) {\n          $toLoad.on(\"lazyloaded.themeBlockManager\", (evt) => {\n            if (evt.target === $toLoad.find(\".lazyloaded\")[0]) {\n              onLoadCB();\n            }\n            $(this).off(\"lazyloaded.themeBlockManager\");\n          });\n        }\n        $toLoad.removeClass(\"product-block__image--inactivated\");\n      } else if (onLoadCB) {\n        onLoadCB();\n      }\n    };\n\n    _.incrementActiveImage = function ($images, increment) {\n      var index = Math.max(\n        $images.filter(\".product-block__image--active:first\").index(),\n        0\n      );\n      _.setActiveImage($images, index + increment);\n    };\n\n    _.setActiveImage = function ($images, index) {\n      var $newActive = $(_.getImageAt($images, index));\n\n      _.lazyloadImage($newActive, () => {\n        // set new active image visibility\n        $newActive.addClass(\"product-block__image--active\");\n        $newActive.siblings().removeClass(\"product-block__image--active\");\n        // set new hover image\n        var $hoverImage = $(_.getImageAt($images, index + 1)).addClass(\n          \"product-block__image--show-on-hover\"\n        );\n        $hoverImage\n          .siblings()\n          .removeClass(\"product-block__image--show-on-hover\");\n        _.lazyloadImage($hoverImage);\n      });\n\n      // dots\n      var $dots = $images\n        .closest(\".image-cont\")\n        .find(\".product-block__image-dot\");\n      $dots\n        .removeClass(\"product-block__image-dot--active\")\n        .eq($newActive.index())\n        .addClass(\"product-block__image-dot--active\");\n    };\n\n    _.monitorImagePagination = function (container) {\n      if ($(\".image-cont--with-secondary-image\", container).length) {\n        // next/prev button selection\n        $(container).on(\n          \"click.productBlockManager\",\n          \".image-page-button\",\n          function (evt) {\n            var $images = $(this)\n              .closest(\".product-block\")\n              .find(\".product-block__image\");\n            _.incrementActiveImage(\n              $images,\n              $(evt.currentTarget).hasClass(\"image-page-button--next\") ? 1 : -1\n            );\n            // preload the rest\n            $images.each(function () {\n              _.lazyloadImage($(this));\n            });\n            return false;\n          }\n        );\n\n        // swipe (when not in a carousel)\n        if (\n          $(\".image-cont--with-secondary-image:first\", container).closest(\n            \".carousel, .product-list--scrollarea\"\n          ).length === 0\n        ) {\n          // preload all images after swipe\n          $(container).on(\"imageSwiped\", \".product-block\", function () {\n            if ($(\".product-block__image--inactivated\", this).length) {\n              setTimeout(\n                function () {\n                  $(this)\n                    .find(\".product-block__image\")\n                    .each(function () {\n                      _.lazyloadImage($(this));\n                    });\n                }.bind(this),\n                500\n              );\n            }\n          });\n\n          $(container).on(\n            \"touchstart.productBlockManager\",\n            \".image-cont--with-secondary-image\",\n            function (evt) {\n              theme.productBlockTouchTracking = true;\n              theme.productBlockTouchStartX = evt.touches[0].clientX;\n              theme.productBlockTouchStartY = evt.touches[0].clientY;\n              // preload next image on touchstart\n              var nextImage = evt.currentTarget.querySelector(\n                \".product-block__image--active + .product-block__image--inactivated\"\n              );\n              if (nextImage) {\n                _.lazyloadImage($(nextImage));\n              }\n            }\n          );\n\n          $(container).on(\n            \"touchmove.productBlockManager\",\n            \".image-cont--with-secondary-image\",\n            function (evt) {\n              if (theme.productBlockTouchTracking) {\n                if (\n                  Math.abs(\n                    evt.touches[0].clientY - theme.productBlockTouchStartY\n                  ) < 30\n                ) {\n                  var deltaX =\n                    evt.touches[0].clientX - theme.productBlockTouchStartX;\n                  if (deltaX > 25) {\n                    var $images = $(this)\n                      .closest(\".product-block\")\n                      .trigger(\"imageSwiped\")\n                      .find(\".product-block__image\");\n                    _.incrementActiveImage($images, -1);\n                    theme.productBlockTouchTracking = false;\n                  } else if (deltaX < -25) {\n                    var $images = $(this)\n                      .closest(\".product-block\")\n                      .trigger(\"imageSwiped\")\n                      .find(\".product-block__image\");\n                    _.incrementActiveImage($images, 1);\n                    theme.productBlockTouchTracking = false;\n                  }\n                }\n              }\n            }\n          );\n          $(container).on(\n            \"touchend.productBlockManager\",\n            \".image-cont--with-secondary-image\",\n            function (evt) {\n              theme.productBlockTouchTracking = false;\n            }\n          );\n        }\n      }\n    };\n\n    _.monitorSwatchSelection = function (container) {\n      if ($(\"[data-media].product-block-options__item\", container).length) {\n        $(container).on(\n          \"mouseenter.productBlockManager click.productBlockManager\",\n          \"[data-media].product-block-options__item\",\n          function () {\n            var $block = $(this).closest(\".product-block\");\n            var $images = $block.find(\".product-block__image\");\n            var index = $images\n              .filter(\n                '[data-media-id=\"' +\n                  $(this).data(\"media\") +\n                  '\"].product-block__image'\n              )\n              .index();\n            _.setActiveImage($images, index);\n            // include in URL\n            var optionName = $(this)\n                .closest(\".product-block-options\")\n                .data(\"option-name\"),\n              optionValue = $(this).data(\"option-item\");\n            $block[0]\n              .querySelectorAll(\".product-link, .quickbuy-toggle\")\n              .forEach((el) => {\n                var url = new URL(el.href);\n                var params = new URLSearchParams(url.search);\n                params.set(optionName, optionValue);\n                el.href = \"\".concat(url.pathname, \"?\").concat(params);\n                el.rel = \"nofollow\";\n              });\n          }\n        );\n      }\n    };\n\n    _.afterImagesResized = function (container) {\n      var container = container;\n      if (typeof container === \"undefined\") {\n        container = $(\"body\");\n      }\n\n      _.alignProductBlockHeights(container);\n    };\n\n    _.alignProductBlockHeights = function (container) {\n      var container = container;\n      if (typeof container === \"undefined\") {\n        container = $(\"body\");\n      }\n\n      // All product blocks must be the same height, for quick-buy alignment\n      $(\".collection-listing .product-list\", container).each(function () {\n        if (\n          $(window).width() >= 768 ||\n          $(this).closest(\".carousel\").length > 0\n        ) {\n          var tallest = 0;\n          $(this)\n            .find(\".product-block .block-inner .block-inner-inner\")\n            .each(function () {\n              if ($(this).height() > tallest) tallest = $(this).height();\n            });\n          $(this)\n            .find(\".product-block .block-inner\")\n            .css(\"min-height\", tallest);\n        } else {\n          $(this).find(\".product-block .block-inner\").css(\"min-height\", \"\");\n        }\n      });\n    };\n  })();\n\n  if (theme.settings.after_add_to_cart === \"notification\") {\n    var AddedNotification = class extends HTMLElement {\n      connectedCallback() {\n        this.dismissOthers();\n        this.setProductTitle(this.dataset.productTitle);\n        this.display();\n      }\n\n      disconnectedCallback() {\n        clearTimeout(this.delayedDismissTimeout);\n      }\n\n      dismissOthers() {\n        document\n          .querySelectorAll(\".added-notification\")\n          .forEach((notification) => {\n            if (notification !== this) {\n              notification.dismiss();\n            }\n          });\n      }\n\n      setProductTitle(productTitle) {\n        this.querySelector(\".added-notification__message-title\").innerText =\n          productTitle;\n      }\n\n      display() {\n        // reveal\n        setTimeout(\n          () => this.classList.remove(\"added-notification--hidden\"),\n          10\n        );\n\n        // dismiss after a short period of time\n        this.delayedDismissTimeout = setTimeout(this.dismiss.bind(this), 6000);\n\n        // add events to internal links\n        this.querySelector(\".added-notification__close\").addEventListener(\n          \"click\",\n          this.dismiss.bind(this)\n        );\n        if (theme.settings.cart_type === \"drawer\") {\n          var cartLinks = this.querySelectorAll(\n            '.added-notification__message-text a[href$=\"/cart\"]'\n          );\n          cartLinks.forEach((el) => {\n            el.addEventListener(\"click\", (evt) => {\n              evt.preventDefault();\n              document.dispatchEvent(\n                new CustomEvent(\"theme:open-cart-drawer\", {\n                  bubbles: true,\n                  cancelable: false,\n                })\n              );\n\n              this.dismiss();\n            });\n          });\n        }\n      }\n\n      dismiss(evt) {\n        if (evt) {\n          evt.preventDefault();\n        }\n        this.classList.add(\"added-notification--dismissed\");\n        setTimeout(this.remove.bind(this), 2000);\n      }\n    };\n\n    window.customElements.define(\"added-notification\", AddedNotification);\n  }\n\n  theme.applyAjaxToProductForm = function ($formContainer) {\n    $formContainer.find(\"form.product-purchase-form\").each(function () {\n      var $form = $(this);\n      $form.on(\"submit\", function (evt) {\n        // Validate\n        if (!theme.validateProductForm($formContainer)) {\n          return false;\n        }\n\n        // Ajax-add\n        if (\n          theme.settings.after_add_to_cart !== \"no-js\" &&\n          $formContainer.is('[data-ajax-add-to-cart=\"true\"]')\n        ) {\n          evt.preventDefault();\n\n          var shopifyAjaxAddURL = theme.routes.cart_add_url;\n\n          //Disable add button\n          $form\n            .find('button[type=\"submit\"]')\n            .attr(\"disabled\", \"disabled\")\n            .each(function () {\n              if ($(this).hasClass(\"btn--added\")) {\n                clearTimeout($(this).data(\"revertAddToCartTextTimeoutID\"));\n              } else {\n                $(this).data(\"previous-value\", $(this).html());\n              }\n            })\n            .html(\n              '<div class=\"loading-spinner loading-spinner--in-btn\"></div>'\n            );\n\n          //Add to cart\n          var formData = new FormData($form[0]);\n          formData.append(\"sections\", \"cart-drawer\");\n          $.post(\n            shopifyAjaxAddURL,\n            new URLSearchParams(formData).toString(),\n            theme.addedToCartHandler.bind($form),\n            \"json\"\n          ).fail(function (data) {\n            //Enable add button\n            $form\n              .find('button[type=\"submit\"]')\n              .removeAttr(\"disabled\")\n              .each(function () {\n                $(this).html($(this).data(\"previous-value\"));\n              });\n\n            //Not added, show message\n            if (\n              typeof data !== \"undefined\" &&\n              typeof data.status !== \"undefined\"\n            ) {\n              var jsonRes = $.parseJSON(data.responseText);\n              theme.showQuickPopup(\n                jsonRes.description,\n                $form.find('button[type=\"submit\"]:first')\n              );\n            } else {\n              //Some unknown error? Disable ajax and add the old-fashioned way.\n              $formContainer.attr(\"ajax-add-to-cart\", \"false\");\n              $form.submit();\n            }\n          });\n        }\n      });\n    });\n  };\n\n  theme.addedToCartHandler = function (response) {\n    if (theme.settings.after_add_to_cart === \"page\") {\n      // redirect\n      window.location = theme.routes.cart_url;\n    } else if (theme.settings.after_add_to_cart === \"drawer\") {\n      // refresh areas and open drawer\n      document.documentElement.dispatchEvent(\n        new CustomEvent(\"theme:cartchanged\", {\n          bubbles: true,\n          cancelable: false,\n          detail: { openDrawer: true },\n        })\n      );\n    } else if (theme.settings.after_add_to_cart === \"notification\") {\n      // refresh areas\n      document.documentElement.dispatchEvent(\n        new CustomEvent(\"theme:cartchanged\", {\n          bubbles: true,\n          cancelable: false,\n        })\n      );\n\n      // create notification\n      var notification = document\n        .getElementById(\"AddedNotification\")\n        .content.firstElementChild.cloneNode(true);\n      notification.dataset.productTitle = response.product_title;\n      var notificationContainer = document.querySelector(\".pageheader--sticky\");\n      if (!notificationContainer) {\n        notificationContainer = document.querySelector(\"body\");\n      }\n      notificationContainer.appendChild(notification);\n    }\n\n    // Enable add button\n    $(this)\n      .find('button[type=\"submit\"]')\n      .removeAttr(\"disabled\")\n      .each(function () {\n        $btn = $(this);\n        // Set to 'DONE', alter button style, wait a few secs, revert to normal\n        $btn\n          .addClass(\"btn--added\")\n          .text(theme.strings.products_product_added_to_cart);\n        clearTimeout($(this).data(\"revertAddToCartTextTimeoutID\"));\n        $btn.data(\n          \"revertAddToCartTextTimeoutID\",\n          setTimeout(function () {\n            $btn.html($btn.data(\"previous-value\")).removeClass(\"btn--added\");\n          }, 3000)\n        );\n      });\n  };\n\n  theme.removeAjaxFromProductForm = function ($formContainer) {\n    $formContainer.find(\"form.product-purchase-form\").off(\"submit\");\n  };\n\n  var CartForm = class extends HTMLElement {\n    connectedCallback() {\n      theme.cartNoteMonitor.load($('[name=\"note\"]', this));\n      this.enableAjaxUpdate = this.dataset.ajaxUpdate;\n\n      if (this.enableAjaxUpdate) {\n        this.sectionId = this.dataset.sectionId;\n        this.boundRefresh = (evt) => {\n          this.refresh(evt.detail && evt.detail.openDrawer);\n        };\n        document.addEventListener(\"theme:cartchanged\", this.boundRefresh);\n\n        theme.addDelegateEventListener(\n          this,\n          \"click\",\n          \".cart-item__remove\",\n          (evt) => {\n            evt.preventDefault();\n            this.adjustItemQuantity(evt.target.closest(\".cart-item\"), {\n              to: 0,\n            });\n          }\n        );\n\n        theme.addDelegateEventListener(\n          this,\n          \"click\",\n          \".quantity-down\",\n          (evt) => {\n            evt.preventDefault();\n            this.adjustItemQuantity(evt.target.closest(\".cart-item\"), {\n              decrease: true,\n            });\n          }\n        );\n\n        theme.addDelegateEventListener(this, \"click\", \".quantity-up\", (evt) => {\n          evt.preventDefault();\n          this.adjustItemQuantity(evt.target.closest(\".cart-item\"), {\n            increase: true,\n          });\n        });\n\n        theme.addDelegateEventListener(\n          this,\n          \"change\",\n          \".cart-item__quantity-input\",\n          (evt) => {\n            this.adjustItemQuantity(evt.target.closest(\".cart-item\"), {\n              currentValue: true,\n            });\n          }\n        );\n      }\n    }\n\n    disconnectedCallback() {\n      theme.cartNoteMonitor.unload($('[name=\"note\"]', this));\n\n      if (this.enableAjaxUpdate) {\n        document.removeEventListener(\"theme:cartchanged\", this.boundRefresh);\n      }\n    }\n\n    refresh(openDrawer) {\n      this.classList.add(\"cart-form--refreshing\");\n      fetch(\n        \"\"\n          .concat(window.Shopify.routes.root, \"?section_id=\")\n          .concat(this.sectionId)\n      )\n        .then((response) => {\n          if (!response.ok) {\n            throw new Error(\"HTTP error! Status: \".concat(response.status));\n          }\n          return response.text();\n        })\n        .then((response) => {\n          var frag = document.createDocumentFragment(),\n            newContent = document.createElement(\"div\");\n          frag.appendChild(newContent);\n          newContent.innerHTML = response;\n\n          newContent\n            .querySelectorAll(\"[data-cc-animate]\")\n            .forEach((el) => el.removeAttribute(\"data-cc-animate\"));\n\n          theme.mergeNodes(newContent, this);\n\n          this.classList.remove(\"cart-form--refreshing\");\n          this.querySelectorAll(\".merge-item-refreshing\").forEach((el) =>\n            el.classList.remove(\"merge-item-refreshing\")\n          );\n\n          theme.cartNoteMonitor.load($('[name=\"note\"]', this));\n\n          if (openDrawer) {\n            document.dispatchEvent(\n              new CustomEvent(\"theme:open-cart-drawer\", {\n                bubbles: true,\n                cancelable: false,\n              })\n            );\n          }\n        });\n    }\n\n    adjustItemQuantity(item, change) {\n      var quantityInput = item.querySelector(\".cart-item__quantity-input\");\n\n      var newQuantity = parseInt(quantityInput.value);\n      if (typeof change.to !== \"undefined\") {\n        newQuantity = change.to;\n        quantityInput.value = newQuantity;\n      } else if (change.increase) {\n        newQuantity += quantityInput.step || 1;\n        quantityInput.value = newQuantity;\n      } else if (change.decrease) {\n        newQuantity -= quantityInput.step || 1;\n        quantityInput.value = newQuantity;\n      } else if (change.currentValue) {\n        // do nothing\n      }\n      if (\n        quantityInput.max &&\n        parseInt(quantityInput.value) > parseInt(quantityInput.max)\n      ) {\n        newQuantity = quantityInput.max;\n        quantityInput.value = newQuantity;\n        theme.showQuickPopup(\n          theme.strings.cart_general_quantity_too_high.replace(\n            \"[QUANTITY]\",\n            quantityInput.max\n          ),\n          $(quantityInput)\n        );\n      }\n\n      clearTimeout(this.adjustItemQuantityTimeout);\n      this.adjustItemQuantityTimeout = setTimeout(\n        () => {\n          var qtys = [];\n          this.querySelectorAll(\n            \".cart-item__quantity-input:not([disabled])\"\n          ).forEach((el) => {\n            qtys.push(el.value);\n            if (el.value != el.dataset.initialValue) {\n              el.closest(\"[data-merge-list-item]\").classList.add(\n                \"merge-item-refreshing\"\n              );\n            }\n          });\n          fetch(theme.routes.cart_update_url, {\n            method: \"POST\",\n            body: JSON.stringify({ updates: qtys }),\n            headers: {\n              \"Content-Type\": \"application/json\",\n            },\n          }).then((response) => {\n            if (!response.ok) {\n              throw new Error(\"HTTP error! Status: \".concat(response.status));\n            }\n            document.dispatchEvent(\n              new CustomEvent(\"theme:cartchanged\", {\n                bubbles: true,\n                cancelable: false,\n              })\n            );\n          });\n        },\n        newQuantity === 0 ? 10 : 700\n      );\n    }\n  };\n\n  window.customElements.define(\"cart-form\", CartForm);\n  var CCCartCrossSell = class extends HTMLElement {\n    connectedCallback() {\n      // not needed immediately\n      setTimeout(this.init.bind(this), 500);\n    }\n\n    init() {\n      this.productList = this.querySelector(\".product-list\");\n\n      if (this.dataset.from) {\n        fetch(this.dataset.from)\n          .then((response) => {\n            if (!response.ok) {\n              throw new Error(\"HTTP error! Status: \".concat(response.status));\n            }\n            return response.text();\n          })\n          .then((response) => {\n            var frag = document.createDocumentFragment(),\n              newContent = document.createElement(\"div\");\n            frag.appendChild(newContent);\n            newContent.innerHTML = response;\n\n            var pl = newContent.querySelector(\".product-list\");\n            if (pl) {\n              this.productList.innerHTML = pl.innerHTML;\n              theme.loadCarousels(this);\n            } else {\n              this.classList.add(\"hidden\");\n            }\n          });\n      } else {\n        theme.loadCarousels(this);\n      }\n    }\n  };\n\n  window.customElements.define(\"cc-cart-cross-sell\", CCCartCrossSell); // must be after product-blocks.js\n  var CCFetchedContent = class extends HTMLElement {\n    connectedCallback() {\n      fetch(this.dataset.url)\n        .then((response) => {\n          if (!response.ok) {\n            throw new Error(\"HTTP error! Status: \".concat(response.status));\n          }\n          return response.text();\n        })\n        .then((response) => {\n          var frag = document.createDocumentFragment(),\n            fetchedContent = document.createElement(\"div\");\n          frag.appendChild(fetchedContent);\n          fetchedContent.innerHTML = response;\n\n          var replacementContent = fetchedContent.querySelector(\n            '[data-id=\"'.concat(CSS.escape(this.dataset.id), '\"]')\n          );\n          if (replacementContent) {\n            this.innerHTML = replacementContent.innerHTML;\n\n            if (this.hasAttribute(\"contains-product-blocks\")) {\n              theme.loadCarousels(this);\n              theme.ProductBlockManager.loadImages(this);\n            }\n          }\n        });\n    }\n  };\n\n  window.customElements.define(\"cc-fetched-content\", CCFetchedContent);\n  theme.LoadFilterer = function (section) {\n    this.$container = section.$container;\n    this.namespace = section.namespace;\n    this.registerEventListener = section.registerEventListener;\n\n    this.functions = {\n      initFiltersEtc: function initFiltersEtc() {\n        $(\".filter-container\", this.$container).addClass(\n          \"filter-container--mobile-initialised\"\n        );\n\n        // append query vars onto sort urls (e.g. filters, vendor collection)\n        if (location.href.indexOf(\"?\") >= 0) {\n          $(\n            \"#sort-dropdown-options .link-dropdown__link\",\n            this.$container\n          ).each(function () {\n            var queryTerms = location.href.split(\"?\")[1].split(\"&\");\n            var newHref = $(this).attr(\"href\");\n            queryTerms.forEach((term) => {\n              if (term.indexOf(\"sort_by=\") === -1) {\n                newHref += \"&\" + term;\n              }\n            });\n            $(this).attr(\"href\", newHref);\n          });\n        }\n\n        theme.ProductBlockManager.loadImages(this.$container);\n      },\n\n      switchGridLayout: function switchGridLayout(evt) {\n        evt.preventDefault();\n        if ($(evt.currentTarget).hasClass(\"layout-switch--one-column\")) {\n          this.$container\n            .find(\".product-list\")\n            .removeClass(\"product-list--per-row-mob-2\")\n            .addClass(\"product-list--per-row-mob-1\");\n        } else {\n          this.$container\n            .find(\".product-list\")\n            .removeClass(\"product-list--per-row-mob-1\")\n            .addClass(\"product-list--per-row-mob-2\");\n        }\n        $(evt.currentTarget)\n          .addClass(\"layout-switch--active\")\n          .siblings()\n          .removeClass(\"layout-switch--active\");\n      },\n\n      checkStickyScroll: function checkStickyScroll() {\n        var utilityBarOffsetY = $(\".utility-bar\").offset().top;\n        if (\n          $(window).width() < 768 &&\n          this.previousScrollTop > window.scrollY &&\n          window.scrollY > utilityBarOffsetY\n        ) {\n          $(\"body\").addClass(\"utility-bar-sticky-mobile-copy-reveal\");\n        } else {\n          $(\"body.utility-bar-sticky-mobile-copy-reveal\").removeClass(\n            \"utility-bar-sticky-mobile-copy-reveal\"\n          );\n        }\n        this.previousScrollTop = window.scrollY;\n      },\n\n      ajaxLoadLink: function ajaxLoadLink(evt) {\n        evt.preventDefault();\n        this.functions.ajaxLoadUrl.call(\n          this,\n          $(evt.currentTarget).attr(\"href\")\n        );\n      },\n\n      ajaxLoadForm: function ajaxLoadForm(evt) {\n        if (evt.type === \"submit\") {\n          evt.preventDefault();\n        }\n        var queryVals = [];\n        evt.currentTarget.querySelectorAll(\"input, select\").forEach((input) => {\n          if (\n            ((input.type !== \"checkbox\" && input.type !== \"radio\") ||\n              input.checked) && // is an active input value\n            input.value !== \"\" // has a value\n          ) {\n            queryVals.push([input.name, encodeURIComponent(input.value)]);\n          }\n        });\n        // new url\n        var newUrl = location.pathname;\n        queryVals.forEach((value) => {\n          newUrl += \"&\".concat(value[0], \"=\").concat(value[1]);\n        });\n        newUrl = newUrl.replace(\"&\", \"?\");\n        // load\n        this.functions.ajaxLoadUrl.call(this, newUrl);\n      },\n\n      ajaxPopState: function ajaxPopState(event) {\n        this.functions.ajaxLoadUrl.call(this, document.location.href, true);\n      },\n\n      ajaxLoadUrl: function ajaxLoadUrl(url, noPushState) {\n        if (!noPushState) {\n          // update url history\n          var fullUrl = url;\n          if (fullUrl.slice(0, 1) === \"/\") {\n            fullUrl =\n              window.location.protocol + \"//\" + window.location.host + fullUrl;\n          }\n          window.history.pushState({ path: fullUrl }, \"\", fullUrl);\n        }\n\n        // limit render to section, if possible (added after pushState)\n        if (this.$container[0].dataset.filterSectionId) {\n          url +=\n            (url.indexOf(\"?\") >= 0 ? \"&\" : \"?\") +\n            \"section_id=\".concat(this.$container[0].dataset.filterSectionId);\n        }\n\n        // start fetching URL\n        var refreshContainerSelector = \"[data-ajax-container]\",\n          $ajaxContainers = this.$container.find(refreshContainerSelector);\n\n        // loading state\n        $ajaxContainers.addClass(\"ajax-loading\");\n\n        // fetch content\n        if (this.currentAjaxLoadUrlFetch) {\n          this.currentAjaxLoadUrlFetch.abort();\n        }\n        this.currentAjaxLoadUrlFetch = $.get(\n          url,\n          function (data) {\n            this.currentAjaxLoadUrlFetch = null;\n\n            // save active element\n            if (document.activeElement) {\n              this.activeElementId = document.activeElement.id;\n            }\n\n            // unload content\n            theme.ProductBlockManager.unloadImages(this.$container);\n\n            // before replace - check if container scrolls, if so find item at scroll top\n            var scrollContainer = this.$container[0].querySelector(\".filters\"),\n              elAboveScrollTopData = null;\n            if (getComputedStyle(scrollContainer).overflow === \"auto\") {\n              var allFilterChildren =\n                scrollContainer.querySelectorAll(\".filters *\");\n              var elAboveScrollTop = allFilterChildren[0];\n              for (var i = 1; i < allFilterChildren.length; i++) {\n                if (allFilterChildren[i].offsetTop) {\n                  // if above fold\n                  if (\n                    allFilterChildren[i].offsetTop < scrollContainer.scrollTop\n                  ) {\n                    // if below previously assigned element, assign\n                    if (\n                      allFilterChildren[i].offsetTop >\n                      elAboveScrollTop.offsetTop\n                    ) {\n                      elAboveScrollTop = allFilterChildren[i];\n                    }\n                  } else {\n                    break;\n                  }\n                }\n              }\n              if (elAboveScrollTop.offsetTop === 0) {\n                elAboveScrollTop = false;\n              } else {\n                // determine how to identify this element\n                elAboveScrollTopData = {\n                  selector: \"\",\n                  textContent: elAboveScrollTop.textContent,\n                  extraScrollOffset:\n                    scrollContainer.scrollTop - elAboveScrollTop.offsetTop,\n                };\n                for (var attrName of elAboveScrollTop.getAttributeNames()) {\n                  if (attrName === \"class\") {\n                    Array.from(elAboveScrollTop.classList)\n                      .filter((a) => a !== \"filter-group__item--disabled\")\n                      .forEach((cl) => {\n                        elAboveScrollTopData.selector += \".\" + cl;\n                      });\n                  } else {\n                    elAboveScrollTopData.selector += \"[\"\n                      .concat(attrName, '=\"')\n                      .concat(\n                        CSS.escape(elAboveScrollTop.getAttribute(attrName)),\n                        '\"]'\n                      );\n                  }\n                }\n              }\n            }\n\n            // replace contents\n            var $newAjaxContainers = $(\"<div>\".concat(data, \"</div>\")).find(\n              refreshContainerSelector\n            );\n            $newAjaxContainers.each(function (index) {\n              $($ajaxContainers[index]).html($(this).html());\n            });\n\n            // init js\n            this.functions.initFiltersEtc.call(this);\n\n            // after replace\n            if (elAboveScrollTopData) {\n              this.$container[0]\n                .querySelectorAll(elAboveScrollTopData.selector)\n                .forEach((el) => {\n                  if (el.textContent === elAboveScrollTopData.textContent) {\n                    scrollContainer.scrollTop =\n                      el.offsetTop + elAboveScrollTopData.extraScrollOffset;\n                  }\n                });\n            }\n\n            // init theme components\n            var $componentHaver = this.$container.closest(\"[data-components]\");\n            if ($componentHaver.length) {\n              var components = $componentHaver.data(\"components\").split(\",\");\n              components.forEach(\n                function (component) {\n                  $(document).trigger(\"cc:component:load\", [\n                    component,\n                    $componentHaver[0],\n                  ]);\n                }.bind(this)\n              );\n            }\n\n            // remove loading state\n            $ajaxContainers.removeClass(\"ajax-loading\");\n\n            // init scroll animations\n            theme.initAnimateOnScroll();\n\n            // restore active element\n            if (this.activeElementId) {\n              var el = document.getElementById(this.activeElementId);\n              if (el) {\n                el.focus();\n              }\n            }\n\n            // scroll viewport (must be done after any page size changes)\n            var scrollToY =\n              $(\"[data-ajax-scroll-to]:first\", this.$container).offset().top -\n              $(\".section-header\").height();\n            window.scrollTo({\n              top: scrollToY,\n              behavior: \"smooth\",\n            });\n          }.bind(this)\n        );\n      },\n    };\n\n    // auto-select availability\n    this.allowAutoApplyHideUnavailable = this.$container\n      .find(\".filters\")\n      .data(\"auto-apply-hide-unavailable\");\n    if (this.allowAutoApplyHideUnavailable) {\n      this.$container.on(\n        \"change\" + this.namespace,\n        \".filter-group__checkbox, .cc-price-range__input\",\n        (evt) => {\n          if (this.allowAutoApplyHideUnavailable) {\n            if (\n              (evt.currentTarget.type === \"checkbox\" &&\n                evt.currentTarget.checked) ||\n              (evt.currentTarget.type === \"text\" && evt.currentTarget.value)\n            ) {\n              var toEnable = this.$container.find(\n                '[name=\"filter.v.availability\"][value=\"1\"]'\n              )[0];\n              if (toEnable) {\n                toEnable.checked = true;\n                toEnable.dispatchEvent(\n                  new CustomEvent(\"change\", {\n                    bubbles: true,\n                    cancelable: false,\n                  })\n                );\n              }\n            }\n          }\n        }\n      );\n\n      this.$container.on(\n        \"change\" + this.namespace,\n        \".filter-group--availability .filter-toggle__input\",\n        (evt) => {\n          if (evt.currentTarget.checked && evt.currentTarget.value == \"1\") {\n            this.allowAutoApplyHideUnavailable = false;\n          }\n        }\n      );\n    }\n\n    // ajax filter & sort\n    if (this.$container.data(\"ajax-filtering\")) {\n      // ajax load on link click\n      this.$container.on(\n        \"click\" + this.namespace,\n        \".link-dropdown__link, .filter-group__applied-item, .filter-group__clear-link, .pagination a\",\n        this.functions.ajaxLoadLink.bind(this)\n      );\n      // ajax load form submission\n      this.$container.on(\n        \"change\" + this.namespace + \" submit\" + this.namespace,\n        \"#CollectionFilterForm\",\n        theme.debounce(this.functions.ajaxLoadForm.bind(this), 700)\n      );\n      // handle back button\n      this.registerEventListener(\n        window,\n        \"popstate\",\n        this.functions.ajaxPopState.bind(this)\n      );\n    } else {\n      this.$container.on(\n        \"change\" + this.namespace,\n        \"#CollectionFilterForm\",\n        function () {\n          $(this).submit();\n        }\n      );\n    }\n\n    // sort dropdown: open\n    this.$container.on(\n      \"click\" + this.namespace,\n      \".link-dropdown__button\",\n      theme.toggleLinkDropdownButton.bind(this)\n    );\n\n    // sort dropdown: click anywhere else in page to close\n    $(document).on(\"click\" + this.namespace, function () {\n      $('.link-dropdown__button[aria-expanded=\"true\"]').trigger(\"click\");\n    });\n\n    if (document.querySelector(\".utility-bar\")) {\n      // duplicate utility bar for mobile\n      var $utilBarClone = $(\".utility-bar\")\n        .clone()\n        .addClass(\"utility-bar--sticky-mobile-copy\")\n        .removeAttr(\"data-ajax-container\")\n        .insertAfter(\".utility-bar\");\n      // ensure unique ids\n      theme.suffixIds($utilBarClone[0], \"dupe\");\n\n      this.previousScrollTop = window.scrollY;\n      $(window).on(\n        \"throttled-scroll\" + this.namespace,\n        this.functions.checkStickyScroll.bind(this)\n      );\n\n      // filter visibility\n      this.$container.on(\n        \"click\" + this.namespace,\n        \"[data-toggle-filters]\",\n        function (evt) {\n          var isNowVisible = $(\".filter-container\", this.$container)\n            .toggleClass(\n              \"filter-container--show-filters-desktop filter-container--show-filters-mobile\"\n            )\n            .hasClass(\"filter-container--show-filters-desktop\");\n          $(\".toggle-btn[data-toggle-filters]\", this.$container).toggleClass(\n            \"toggle-btn--revealed-desktop\",\n            isNowVisible\n          );\n          // handle resized collection grid\n          theme.ProductBlockManager.afterImagesResized();\n          $(\".slick-slider\", this.$container).each(function () {\n            $(this).slick(\"setPosition\");\n          });\n          return false;\n        }.bind(this)\n      );\n\n      // layout switcher\n      this.$container.on(\n        \"click\" + this.namespace,\n        \".layout-switch\",\n        this.functions.switchGridLayout.bind(this)\n      );\n    }\n\n    // init things that may need re-initialising on ajax load\n    this.functions.initFiltersEtc.call(this);\n\n    this.destroy = function () {\n      theme.ProductBlockManager.unloadImages(this.$container);\n      theme.destroyProductGallery(this.$container);\n      this.$container.off(this.namespace);\n      $(window).off(this.namespace);\n      $(document).off(this.namespace);\n    }.bind(this);\n  };\n\n  theme.buildGalleryViewer = function (config) {\n    // create viewer\n    var $allContainer = $(\n        '<div class=\"gallery-viewer gallery-viewer--pre-reveal\">'\n      ),\n      $zoomContainer = $(\n        '<div class=\"gallery-viewer__zoom-container\">'\n      ).appendTo($allContainer),\n      $thumbContainer = $('<div class=\"gallery-viewer__thumbs\">').appendTo(\n        $allContainer\n      ),\n      $controlsContainer = $('<div class=\"gallery-viewer__controls\">').appendTo(\n        $allContainer\n      ),\n      $close = $(\n        '<a class=\"gallery-viewer__button gallery-viewer__close\" href=\"#\">'\n      )\n        .html(config.close)\n        .appendTo($controlsContainer),\n      $right = $(\n        '<a class=\"gallery-viewer__button gallery-viewer__prev\" href=\"#\">'\n      )\n        .html(config.prev)\n        .appendTo($controlsContainer),\n      $left = $(\n        '<a class=\"gallery-viewer__button gallery-viewer__next\" href=\"#\">'\n      )\n        .html(config.next)\n        .appendTo($controlsContainer),\n      $currentZoomImage = null,\n      wheelZoomMultiplier = -0.001,\n      pinchZoomMultiplier = 0.003,\n      touchPanModifier = 1.0,\n      currentTransform = {\n        panX: 0,\n        panY: 0,\n        zoom: 1,\n      };\n\n    // add images\n    for (var i = 0; i < config.images.length; i++) {\n      var img = config.images[i];\n      $('<a class=\"gallery-viewer__thumb\" href=\"#\">')\n        .data(\"zoom-url\", img.zoomUrl)\n        .html(img.thumbTag)\n        .appendTo($thumbContainer);\n    }\n\n    if (config.images.length === 1) {\n      $allContainer.addClass(\"gallery-viewer--single-image\");\n    }\n\n    // helper function for panning an image\n    var panZoomImageFromCoordinate = function panZoomImageFromCoordinate(\n      inputX,\n      inputY\n    ) {\n      // do nothing if the image fits, pan if not\n      var doPanX = $currentZoomImage.width() > $allContainer.width();\n      var doPanY = $currentZoomImage.height() > $allContainer.height();\n      if (doPanX || doPanY) {\n        var midX = $allContainer.width() / 2;\n        var midY = $allContainer.height() / 2;\n\n        var offsetFromCentreX = inputX - midX,\n          offsetFromCentreY = inputY - midY;\n\n        // the offsetMultipler ensures it can only pan to the edge of the image, no further\n        var finalOffsetX = 0;\n        var finalOffsetY = 0;\n        if (doPanX) {\n          var offsetMultiplierX =\n            ($currentZoomImage.width() - $allContainer.width()) / 2 / midX;\n          finalOffsetX = Math.round(-offsetFromCentreX * offsetMultiplierX);\n        }\n        if (doPanY) {\n          var offsetMultiplierY =\n            ($currentZoomImage.height() - $allContainer.height()) / 2 / midY;\n          finalOffsetY = Math.round(-offsetFromCentreY * offsetMultiplierY);\n        }\n\n        currentTransform.panX = finalOffsetX;\n        currentTransform.panY = finalOffsetY;\n        alterCurrentPanBy(0, 0); // sanitise\n        updateImagePosition();\n      }\n    };\n\n    var alterCurrentPanBy = function alterCurrentPanBy(x, y) {\n      currentTransform.panX += x;\n      // limit offset to keep most of image on screen\n      var panXMax =\n        ($currentZoomImage[0].naturalWidth * currentTransform.zoom -\n          $allContainer.width()) /\n        2.0;\n      panXMax = Math.max(panXMax, 0);\n      currentTransform.panX = Math.min(currentTransform.panX, panXMax);\n      currentTransform.panX = Math.max(currentTransform.panX, -panXMax);\n\n      currentTransform.panY += y;\n      var panYMax =\n        ($currentZoomImage[0].naturalHeight * currentTransform.zoom -\n          $allContainer.height()) /\n        2.0;\n      panYMax = Math.max(panYMax, 0);\n      currentTransform.panY = Math.min(currentTransform.panY, panYMax);\n      currentTransform.panY = Math.max(currentTransform.panY, -panYMax);\n      updateImagePosition();\n    };\n\n    var setCurrentTransform = function setCurrentTransform(panX, panY, zoom) {\n      currentTransform.panX = panX;\n      currentTransform.panY = panY;\n      currentTransform.zoom = zoom;\n      alterCurrentTransformZoomBy(0);\n    };\n\n    var alterCurrentTransformZoomBy = function alterCurrentTransformZoomBy(\n      delta\n    ) {\n      currentTransform.zoom += delta;\n      // do not zoom out further than fit\n      var maxZoomX = $allContainer.width() / $currentZoomImage[0].naturalWidth,\n        maxZoomY = $allContainer.height() / $currentZoomImage[0].naturalHeight;\n      currentTransform.zoom = Math.max(\n        currentTransform.zoom,\n        Math.min(maxZoomX, maxZoomY)\n      );\n\n      // do not zoom in further than native size\n      currentTransform.zoom = Math.min(currentTransform.zoom, 1.0);\n\n      // reasses pan bounds\n      alterCurrentPanBy(0, 0);\n      updateImagePosition();\n    };\n\n    var updateImagePosition = function updateImagePosition() {\n      $currentZoomImage.css(\n        \"transform\",\n        \"translate3d(\"\n          .concat(currentTransform.panX, \"px, \")\n          .concat(currentTransform.panY, \"px, 0) scale(\")\n          .concat(currentTransform.zoom, \")\")\n      );\n    };\n\n    // set up events\n    // event: select thumbnail - zoom it\n    $allContainer.on(\n      \"click.galleryViewer select.galleryViewer\",\n      \".gallery-viewer__thumb\",\n      function (evt) {\n        evt.preventDefault();\n\n        // set active\n        $(this)\n          .addClass(\"gallery-viewer__thumb--active\")\n          .siblings(\".gallery-viewer__thumb--active\")\n          .removeClass(\"gallery-viewer__thumb--active\");\n\n        // replace zoom image\n        $zoomContainer.addClass(\"gallery-viewer__zoom-container--loading\");\n        $currentZoomImage = $(\n          '<img class=\"gallery-viewer__zoom-image\" alt=\"\" style=\"visibility: hidden\">'\n        );\n        $currentZoomImage\n          .on(\"load\", function () {\n            $(this)\n              .parent()\n              .removeClass(\"gallery-viewer__zoom-container--loading\");\n            $(this).off(\"load\");\n            $(this).css({\n              visibility: \"\",\n              top: $allContainer.height() / 2 - $(this).height() / 2,\n              left: $allContainer.width() / 2 - $(this).width() / 2,\n            });\n            setCurrentTransform(0, 0, 0); // centre, zoomed out\n          })\n          .attr(\"src\", $(this).data(\"zoom-url\"));\n\n        $zoomContainer.html($currentZoomImage);\n      }\n    );\n\n    // event: pan\n    var pinchTracking = {\n      isTracking: false,\n      lastPinchDistance: 0,\n    };\n    var touchTracking = {\n      isTracking: false,\n      lastTouchX: 0,\n      lastTouchY: 0,\n    };\n\n    $allContainer.on(\"touchend.galleryViewer\", function (evt) {\n      pinchTracking.isTracking = false;\n      touchTracking.isTracking = false;\n    });\n\n    $allContainer.on(\n      \"mousemove.galleryViewer touchmove.galleryViewer\",\n      function (evt) {\n        evt.preventDefault();\n        if (evt.type === \"touchmove\" && evt.touches.length > 0) {\n          // pan\n          var touch1 = evt.touches[0];\n          if (!touchTracking.isTracking) {\n            touchTracking.isTracking = true;\n            touchTracking.lastTouchX = touch1.clientX;\n            touchTracking.lastTouchY = touch1.clientY;\n          } else {\n            alterCurrentPanBy(\n              (touch1.clientX - touchTracking.lastTouchX) * touchPanModifier,\n              (touch1.clientY - touchTracking.lastTouchY) * touchPanModifier\n            );\n\n            touchTracking.lastTouchX = touch1.clientX;\n            touchTracking.lastTouchY = touch1.clientY;\n          }\n\n          if (evt.touches.length === 2) {\n            // pinch\n            var touch2 = evt.touches[1],\n              pinchDistance = Math.sqrt(\n                Math.pow(touch1.clientX - touch2.clientX, 2) +\n                  Math.pow(touch1.clientY - touch2.clientY, 2)\n              );\n            if (!pinchTracking.isTracking) {\n              pinchTracking.lastPinchDistance = pinchDistance;\n              pinchTracking.isTracking = true;\n            } else {\n              var pinchDelta = pinchDistance - pinchTracking.lastPinchDistance;\n              alterCurrentTransformZoomBy(pinchDelta * pinchZoomMultiplier);\n              pinchTracking.lastPinchDistance = pinchDistance;\n            }\n          } else {\n            pinchTracking.isTracking = false;\n          }\n        } else {\n          // mousemove\n          panZoomImageFromCoordinate(evt.clientX, evt.clientY);\n        }\n      }\n    );\n\n    // event: mousewheel\n    $allContainer.on(\"wheel.galleryViewer\", function (evt) {\n      evt.preventDefault();\n      if (evt.originalEvent.deltaY != 0) {\n        alterCurrentTransformZoomBy(\n          evt.originalEvent.deltaY * wheelZoomMultiplier\n        );\n      }\n    });\n\n    // event: prevent pan while swiping thumbnails\n    $allContainer.on(\n      \"touchmove.galleryViewer\",\n      \".gallery-viewer__thumbs\",\n      function (evt) {\n        evt.stopPropagation();\n      }\n    );\n\n    // event: next thumbnail\n    $allContainer.on(\n      \"click.galleryViewer\",\n      \".gallery-viewer__next\",\n      function (evt) {\n        evt.preventDefault();\n        var $next = $thumbContainer\n          .find(\".gallery-viewer__thumb--active\")\n          .next();\n        if ($next.length === 0) {\n          $next = $thumbContainer.find(\".gallery-viewer__thumb:first\");\n        }\n        $next.trigger(\"select\");\n      }\n    );\n\n    // event: previous thumbnail\n    $allContainer.on(\n      \"click.galleryViewer\",\n      \".gallery-viewer__prev\",\n      function (evt) {\n        evt.preventDefault();\n        var $prev = $thumbContainer\n          .find(\".gallery-viewer__thumb--active\")\n          .prev();\n        if ($prev.length === 0) {\n          $prev = $thumbContainer.find(\".gallery-viewer__thumb:last\");\n        }\n        $prev.trigger(\"select\");\n      }\n    );\n\n    // event: close (button)\n    $allContainer.on(\n      \"click.galleryViewer\",\n      \".gallery-viewer__close\",\n      function (evt) {\n        evt.preventDefault();\n        theme.galleryViewerFunctions.close();\n      }\n    );\n\n    // event: close (esc key)\n    document.addEventListener(\n      \"keyup\",\n      theme.galleryViewerFunctions.onDocumentKeyup\n    );\n\n    // event: zoom\n    $allContainer.on(\n      \"click.galleryViewer\",\n      \".gallery-viewer__zoom-container\",\n      function (evt) {\n        evt.preventDefault();\n        if (currentTransform.zoom == 1.0) {\n          currentTransform.zoom = 0;\n          alterCurrentTransformZoomBy(0);\n        } else {\n          currentTransform.zoom = 1;\n          alterCurrentTransformZoomBy(0);\n          panZoomImageFromCoordinate(evt.clientX, evt.clientY);\n        }\n      }\n    );\n\n    // initialise\n\n    // - clear any remnants of failed previous closure\n    $(\"html\").removeClass(\"gallery-viewer-open\");\n    $(\".gallery-viewer\").remove();\n\n    // - insert into page\n    $(\"html\").addClass(\"gallery-viewer-open\");\n    $allContainer.appendTo(\"body\");\n\n    // - select first thumbnail\n    var currentIndex = 0;\n    if (config.currentImage) {\n      config.images.forEach((img, index) => {\n        if (config.currentImage === img.zoomUrl) {\n          currentIndex = index;\n        }\n      });\n    }\n\n    var $focusThumb = $thumbContainer\n      .find(\".gallery-viewer__thumb:eq(\" + currentIndex + \")\")\n      .trigger(\"select\");\n\n    if (config.images.length > 1) {\n      $focusThumb.focus();\n    } else {\n      $close.focus();\n    }\n\n    // - reveal\n    setTimeout(function () {\n      $allContainer.removeClass(\"gallery-viewer--pre-reveal\");\n    }, 10);\n  };\n\n  theme.galleryViewerFunctions = {\n    close: function close() {\n      var $galleryViewer = $(\".gallery-viewer\");\n\n      // destroy events\n      $galleryViewer.off(\".galleryViewer\");\n      document.removeEventListener(\n        \"keyup\",\n        theme.galleryViewerFunctions.onDocumentKeyup\n      );\n\n      // begin exit transition\n      $galleryViewer.addClass(\"gallery-viewer--transition-out\");\n\n      // remove after transition\n      var transitionDelay = $galleryViewer.css(\"transition-duration\");\n      transitionDelay =\n        transitionDelay.indexOf(\"ms\") > -1\n          ? parseFloat(transitionDelay)\n          : parseFloat(transitionDelay) * 1000;\n      setTimeout(function () {\n        $galleryViewer.remove();\n        $(\"html\").removeClass(\"gallery-viewer-open\");\n      }, transitionDelay);\n    },\n\n    onDocumentKeyup: function onDocumentKeyup(evt) {\n      switch (evt.key) {\n        case \"Escape\":\n          theme.galleryViewerFunctions.close();\n          break;\n        case \"ArrowLeft\":\n          $(\".gallery-viewer__prev\").trigger(\"click\");\n          break;\n        case \"ArrowRight\":\n          $(\".gallery-viewer__next\").trigger(\"click\");\n          break;\n      }\n    },\n  };\n\n  theme.Navigation = {\n    init: function init(options) {\n      if (options.nav.length == 0) {\n        return;\n      }\n\n      var $nav = options.nav,\n        navHoverDelay = 250,\n        $navLastOpenDropdown = $(),\n        navOpenTimeoutId = -1;\n\n      /// Mobile nav\n\n      // create it\n      var $mobileDrawer = $(options.mobileNavHtml);\n\n      // add announcement bar items\n      var $mobileDrawerFooter = $(\n        '<div class=\"mobile-navigation-drawer__footer\">'\n      ).appendTo($mobileDrawer);\n      $mobileDrawerFooter.append(\n        $(\".announcement-bar .inline-menu\").clone().removeClass(\"desktop-only\")\n      );\n      $mobileDrawerFooter.append(\n        $(\".announcement-bar .header-disclosures\")\n          .clone()\n          .removeClass(\"desktop-only\")\n      );\n\n      var mobileSocialLinks = $(\".announcement-bar .social-links\")\n        .clone()\n        .removeClass(\"desktop-only\")[0];\n      var mobileSocialLinksCustomIconToSwap = document.querySelector(\n        \".announcement-bar .js-replacement-custom-icon\"\n      );\n      if (mobileSocialLinksCustomIconToSwap) {\n        mobileSocialLinks.querySelector(\n          \".social-custom\"\n        ).parentElement.innerHTML =\n          mobileSocialLinksCustomIconToSwap.content.firstElementChild.cloneNode(\n            true\n          ).innerHTML;\n      }\n      $mobileDrawerFooter.append(mobileSocialLinks);\n\n      // ensure ids are unique\n      theme.suffixIds($mobileDrawer[0], \"MobileNav\");\n\n      // insert into page\n      $mobileDrawer.insertAfter($(\"#shopify-section-header\"));\n\n      // event: open second tier\n      $mobileDrawer.on(\n        \"click\",\n        \".navigation__tier-1 > .navigation__item > .navigation__children-toggle\",\n        function (evt) {\n          evt.preventDefault();\n\n          // set text in header\n          $(this)\n            .parent()\n            .addClass(\"navigation__item--open\")\n            .closest(\".mobile-navigation-drawer\")\n            .addClass(\"mobile-navigation-drawer--child-open\")\n            .find(\".mobile-nav-title\")\n            .text($(this).siblings(\".navigation__link\").text());\n\n          // position under header\n          $(this)\n            .siblings(\".navigation__tier-2-container\")\n            .css({\n              top:\n                Math.ceil($(\".navigation__mobile-header:last\").height() + 1) +\n                \"px\",\n            });\n\n          // scroll container\n          this.closest(\".mobile-navigation-drawer\").scrollTo({\n            top: 0,\n            left: 0,\n            behavior: \"instant\",\n          }); // 'smooth' not working in iOS 15\n        }\n      );\n\n      if ($mobileDrawer.data(\"mobile-expand-with-entire-link\")) {\n        $mobileDrawer.on(\n          \"click\",\n          \".navigation__item--with-children > .navigation__link\",\n          function (evt) {\n            evt.preventDefault();\n            $(this).siblings(\".navigation__children-toggle\").trigger(\"click\");\n          }\n        );\n      }\n\n      // event: close second tier\n      $mobileDrawer.on(\"click\", \".mobile-nav-back\", function (evt) {\n        evt.preventDefault();\n        $(this)\n          .closest(\".mobile-navigation-drawer\")\n          .removeClass(\"mobile-navigation-drawer--child-open\")\n          .find(\".navigation__tier-1 > .navigation__item--open\")\n          .removeClass(\"navigation__item--open\");\n      });\n\n      // event: toggle third tier\n      $mobileDrawer.on(\n        \"click\",\n        \".navigation__tier-2 > .navigation__item > .navigation__children-toggle\",\n        function (evt) {\n          evt.preventDefault();\n          var doOpen = !$(this).parent().hasClass(\"navigation__item--open\");\n          if (doOpen) {\n            $(this).parent().addClass(\"navigation__item--open\");\n            var $childContainer = $(this).siblings(\n              \".navigation__tier-3-container\"\n            );\n            $childContainer.css(\n              \"height\",\n              $childContainer.children().outerHeight()\n            );\n          } else {\n            $(this).parent().removeClass(\"navigation__item--open\");\n            $(this).siblings(\".navigation__tier-3-container\").css(\"height\", \"\");\n          }\n        }\n      );\n\n      /// Desktop nav\n\n      // reveal images\n      $nav\n        .find(\".lazyload--manual\")\n        .removeClass(\"lazyload--manual\")\n        .addClass(\"lazyload\");\n\n      var menuItems = document.querySelectorAll(\n        \".navigation__item.navigation__item--with-children\"\n      );\n      var header = document.querySelector(\"#shopify-section-header\");\n\n      // when scrolling more than 50px down, hide the, remove class .navigation__item--show-children from all items\n      window.addEventListener(\"scroll\", function () {\n        if (window.scrollY > 50) {\n          menuItems.forEach((elm) => {\n            elm.classList.remove(\"navigation__item--show-children\");\n          });\n          header.classList.remove(\"section-header--nav-open\");\n        }\n      });\n\n      // hover events\n      menuItems.forEach((elm) => {\n        elm.addEventListener(\"click\", function (evt, data) {\n          var $dropdownContainer = evt.target;\n          // console.log('click', evt.target);\n          // delay on hover-out\n\n          if (\n            evt.target.parentNode.classList.contains(\n              \"navigation__item--with-children\"\n            )\n          ) {\n            evt.preventDefault();\n\n            // if clicked item is already open, close it\n            if (\n              evt.target.parentNode.classList.contains(\n                \"navigation__item--show-children\"\n              ) &&\n              header.classList.contains(\"section-header--nav-open\")\n            ) {\n              evt.target.parentNode.classList.remove(\n                \"navigation__item--show-children\"\n              );\n              header.classList.remove(\"section-header--nav-open\");\n\n              // else if header doesn't contain nav-open class, open it\n            } else if (!header.classList.contains(\"section-header--nav-open\")) {\n              evt.target.parentNode.classList.add(\n                \"navigation__item--show-children\"\n              );\n              header.classList.add(\"section-header--nav-open\");\n\n              // else if other menu item is clicked, close opened menu and open clicked menu\n            } else if (\n              !evt.target.parentNode.classList.contains(\n                \"navigation__item--show-children\"\n              ) &&\n              header.classList.contains(\"section-header--nav-open\")\n            ) {\n              // close all menus but last opened\n              for (var i = 0; i < menuItems.length; i++) {\n                if (menuItems[i] !== evt.target) {\n                  menuItems[i].classList.remove(\n                    \"navigation__item--show-children\"\n                  );\n                }\n              }\n              evt.target.parentNode.classList.add(\n                \"navigation__item--show-children\"\n              );\n            }\n          }\n        });\n      });\n\n      // Function to handle touch events for opening and closing navigation items\n      var touchHandler = function (evt) {\n        // Check if the device is a touch device and the window width is greater than 767px\n        if (evt.type == \"touchstart\" && $(window).width() > 767) {\n          // Toggle the visibility of the navigation item's children on touch\n          $(this).parent().toggleClass(\"navigation__item--show-children\");\n        }\n      };\n\n      var touchHandler = function touchHandler(evt) {\n        if (\"ontouchstart\" in window) {\n          if (evt.type == \"touchstart\") {\n            $(this).data(\"touchstartedAt\", evt.timeStamp);\n          } else if (evt.type == \"touchend\") {\n            // down & up in under a second - presume tap\n            if (evt.timeStamp - $(this).data(\"touchstartedAt\") < 1000) {\n              $(this).data(\"touchOpenTriggeredAt\", evt.timeStamp);\n              if (\n                $(this).parent().hasClass(\"navigation__item--show-children\")\n              ) {\n                // trigger close\n                $(this).parent().removeClass(\"navigation__item--show-children\");\n              } else {\n                // trigger close on any open items\n                $(\n                  \".navigation:first .navigation__item--show-children\"\n                ).removeClass(\"navigation__item--show-children\");\n                // trigger open\n                $(this).parent().addClass(\"navigation__item--show-children\");\n              }\n              // prevent fake click\n              return false;\n            }\n          } else if (evt.type == \"click\") {\n            // if touch open was triggered very recently, prevent click event\n            if (\n              $(this).data(\"touchOpenTriggeredAt\") &&\n              evt.timeStamp - $(this).data(\"touchOpenTriggeredAt\") < 1000\n            ) {\n              return false;\n            }\n          }\n        }\n      };\n      $nav.on(\n        \"touchstart touchend click\",\n        \".navigation__tier-1 > .navigation__item--with-children > .navigation__link\",\n        touchHandler\n      );\n\n      // hit return on dropdown toggle\n      var keydownHandler = function keydownHandler(evt) {\n        if (evt.which == 13) {\n          var $parent = $(this).parent();\n          $parent.trigger(\n            $parent.hasClass(\"navigation__item--show-children\")\n              ? \"mouseleave\"\n              : \"mouseenter\"\n          );\n          return false;\n        }\n      };\n      $nav.on(\n        \"keydown\",\n        \".navigation__tier-1 > .navigation__item--with-children > .navigation__children-toggle\",\n        keydownHandler\n      );\n\n      // proxy for desktop nav interaction events\n      if (options.proxyTier1Nav) {\n        // reposition small menu\n        $(options.proxyTier1Nav).on(\n          \"mouseenter touchstart\",\n          \".navigation__item--with-small-menu\",\n          function (evt) {\n            var $dropdown = $(\n              $(\".navigation__tier-1 > .navigation__item\", $nav)[\n                $(this).index()\n              ]\n            ).find(\".navigation__tier-2-container\");\n            if (document.querySelector(\"html[dir=rtl]\")) {\n              $dropdown.css(\n                \"right\",\n                $dropdown[0].offsetParent.clientWidth -\n                  ($(this).offset().left + this.clientWidth)\n              );\n            } else {\n              $dropdown.css(\"left\", $(this).offset().left);\n            }\n          }\n        );\n\n        // transfer all events to main menu\n        $(options.proxyTier1Nav)\n          .on(\n            \"mouseenter mouseleave\",\n            \".navigation__tier-1 > .navigation__item--with-children\",\n            function (evt) {\n              $(\n                $(\".navigation__tier-1 > .navigation__item\", $nav)[\n                  $(this).index()\n                ]\n              ).trigger(evt.type);\n            }\n          )\n          .on(\n            \"touchstart touchend click\",\n            \".navigation__tier-1 > .navigation__item--with-children > .navigation__link\",\n            function (evt) {\n              var response = touchHandler.call(\n                $(\n                  $(\".navigation__tier-1 > .navigation__item\", $nav)[\n                    $(this).parent().index()\n                  ]\n                ).children(\".navigation__link\")[0],\n                evt\n              );\n\n              if (response === false) {\n                return false;\n              }\n            }\n          )\n          .on(\n            \"keydown\",\n            \".navigation__tier-1 > .navigation__item--with-children > .navigation__children-toggle\",\n            function (evt) {\n              if (evt.which == 13) {\n                keydownHandler.call(\n                  $(\n                    $(\".navigation__tier-1 > .navigation__item\", $nav)[\n                      $(this).parent().index()\n                    ]\n                  ).children(\".navigation__children-toggle\")[0],\n                  evt\n                );\n\n                return false;\n              }\n            }\n          );\n      }\n\n      // click #-link, open child nav\n      $nav.on(\n        \"click\",\n        '.navigation__link[href=\"#\"][aria-haspopup=\"true\"]',\n        function () {\n          $(this).siblings(\".navigation__children-toggle\").trigger(\"click\");\n          return false;\n        }\n      );\n\n      const navItems = document.querySelectorAll(\n        \".navigation__tier-1 > .navigation__item--with-children\"\n      );\n      // transparent header hover\n      navItems.forEach((item) => {\n        item.addEventListener(\"mouseenter\", theme.Navigation.onNavHover);\n        item.addEventListener(\"mouseleave\", theme.Navigation.onNavHover);\n        if (options.proxyTier1Nav.length) {\n          options.proxyTier1Nav[0].addEventListener(\n            \"mouseenter\",\n            theme.Navigation.onNavHover\n          );\n          options.proxyTier1Nav[0].addEventListener(\n            \"mouseleave\",\n            theme.Navigation.onNavHover\n          );\n        }\n      });\n    },\n\n    onNavHover: function onNavHover(evt) {\n      $(evt.target)\n        .closest(\".section-header\")\n        .toggleClass(\"section-header--nav-hover\", evt.type === \"mouseenter\");\n    },\n\n    destroy: function destroy($nav, $proxyTier1Nav) {\n      $nav\n        .add($proxyTier1Nav)\n        .off(\"click mouseenter mouseleave touchstart touchend keydown\");\n      theme.ProductBlockManager.unloadImages(\n        $(\".mobile-navigation-drawer .product-list\")\n      );\n      $(\".mobile-navigation-drawer\").off(\"click\").remove();\n    },\n  };\n\n  // container must be an element higher up the tree than the gallery\n  theme.initProductGallery = function (container) {\n    var $gallery = $(\".gallery\", container);\n    if ($gallery.hasClass(\"gallery-initialised\")) {\n      return;\n    }\n\n    $gallery.addClass(\"gallery-initialised\");\n\n    /// Variant grouping\n    if (\n      $gallery.data(\"variant-image-grouping\") &&\n      $gallery.data(\"variant-image-grouping-option-index\") !== \"\"\n    ) {\n      var productData = theme.OptionManager.getProductData(\n          $gallery.closest(\".product-detail\").find(\".product-form\")\n        ),\n        groupingOptionIndex = $gallery.data(\n          \"variant-image-grouping-option-index\"\n        );\n      // build map of grouping options and featured media\n      var optionNameMediaMap = {};\n      productData.media.forEach((media) => {\n        productData.variants.forEach((variant) => {\n          if (variant.featured_media && variant.featured_media.id == media.id) {\n            if (!optionNameMediaMap[variant.options[groupingOptionIndex]]) {\n              optionNameMediaMap[variant.options[groupingOptionIndex]] =\n                media.id;\n            }\n          }\n        });\n      });\n      // set option name on each image\n      var currentMediaOptionName = \"\";\n      $gallery.find(\".slide\").each(function (index, item) {\n        for (var optionName in optionNameMediaMap) {\n          if ($(item).data(\"media-id\") == optionNameMediaMap[optionName]) {\n            currentMediaOptionName = optionName;\n          }\n        }\n        $(item).attr(\"data-variant-image-group\", currentMediaOptionName);\n      });\n      currentMediaOptionName = \"\";\n      $gallery.find(\".thumbnail\").each(function (index, item) {\n        for (var optionName in optionNameMediaMap) {\n          if ($(item).data(\"media-id\") == optionNameMediaMap[optionName]) {\n            currentMediaOptionName = optionName;\n          }\n        }\n        $(item).attr(\"data-variant-image-group\", currentMediaOptionName);\n      });\n    }\n\n    /// Init main image slideshow\n    var $slideshow = $(\".product-slideshow\", container);\n    if ($slideshow.length) {\n      var slickConfig = {\n        autoplay: false,\n        fade: false,\n        infinite: false,\n        useTransform: true,\n        dots: false,\n        arrows: false,\n        waitForAnimate: false,\n        appendArrows: $slideshow\n          .siblings(\".slideshow-controls\")\n          .find(\".slideshow-controls__arrows\"),\n        prevArrow:\n          '<button type=\"button\" class=\"slick-product-prev\" aria-label=\"' +\n          theme.strings.previous +\n          '\">' +\n          theme.icons.chevronLeft +\n          \"</button>\",\n        nextArrow:\n          '<button type=\"button\" class=\"slick-product-next\" aria-label=\"' +\n          theme.strings.next +\n          '\">' +\n          theme.icons.chevronRight +\n          \"</button>\",\n        mobileFirst: true,\n        rtl: document.querySelector(\"html[dir=rtl]\") ? true : false,\n        responsive: [\n          {\n            breakpoint: 768,\n            settings: {\n              fade: true,\n              arrows: true,\n            },\n          },\n        ],\n      };\n\n      $slideshow\n        .on(\"init\", function (evt, slick) {\n          $(\".lazyload--manual\", this)\n            .removeClass(\"lazyload--manual\")\n            .addClass(\"lazyload\");\n        })\n        .on(\"beforeChange\", function (evt, slick, current, next) {\n          var mediaId = $(slick.$slides[next]).data(\"media-id\");\n          $(\n            $(this)\n              .closest(\".gallery\")\n              .find(\n                '.thumbnails:not(.hidden) .thumbnail[data-media-id=\"' +\n                  mediaId +\n                  '\"]'\n              )\n          ).trigger(\"selectFromSlick\");\n        });\n\n      if (\n        $slideshow.closest(\n          \".gallery--layout-carousel-beside, .gallery--layout-carousel-under\"\n        ).length\n      ) {\n        // carousel layout - slideshow all the time\n        $slideshow.slick(slickConfig);\n      } else {\n        // collage layout - slideshow on mobile only\n        var enforceMobileSlideshow = function enforceMobileSlideshow() {\n          if ($(window).width() < 768) {\n            $slideshow.not(\".slick-slider\").each(function () {\n              // remove desktop collage filter classes\n              $(this)\n                .find(\".slide--inactive-option\")\n                .removeClass(\"slide--inactive-option\");\n              // init slideshow\n              $(this).slick(slickConfig);\n              // trigger variant select\n              $(this)\n                .closest(\".product-detail\")\n                .find(\".original-selector\")\n                .trigger(\"change\");\n            });\n          } else {\n            $slideshow.filter(\".slick-slider\").each(function () {\n              $(this).slick(\"slickUnfilter\").slick(\"unslick\");\n              // trigger variant select\n              $(this)\n                .closest(\".product-detail\")\n                .find(\".original-selector\")\n                .trigger(\"change\");\n            });\n          }\n        };\n        enforceMobileSlideshow();\n        $(window).on(\"debouncedresize.productGallery\", enforceMobileSlideshow);\n      }\n\n      // media initialisation\n      theme.ProductMedia.init($gallery, {\n        onYoutubeInit: function onYoutubeInit(playerObj) {\n          if ($slideshow.hasClass(\"slick-slider\")) {\n            theme.productGallerySlideshowTabFix(\n              $slideshow.slick(\"getSlick\").$slides,\n              $slideshow.slick(\"getSlick\").currentSlide\n            );\n          }\n        },\n        onModelViewerInit: function onModelViewerInit(element) {\n          if ($slideshow.hasClass(\"slick-slider\")) {\n            theme.productGallerySlideshowTabFix(\n              $slideshow.slick(\"getSlick\").$slides,\n              $slideshow.slick(\"getSlick\").currentSlide\n            );\n          }\n        },\n        onVideoVisible: function onVideoVisible(e) {\n          if ($(window).width() >= 768) {\n            $(e.target)\n              .closest(\".slick-slider\")\n              .slick(\"slickSetOption\", \"swipe\", false);\n          }\n        },\n        onModelViewerPlay: function onModelViewerPlay(e) {\n          // prevent swiping\n          $(e.target)\n            .closest(\".slick-slider\")\n            .slick(\"slickSetOption\", \"swipe\", false);\n          // prevent left/right key control\n          $(e.target)\n            .closest(\".slick-slider\")\n            .slick(\"slickSetOption\", \"accessibility\", false);\n        },\n        onModelViewerPause: function onModelViewerPause(e) {\n          $(e.target)\n            .closest(\".slick-slider\")\n            .slick(\"slickSetOption\", \"swipe\", true);\n          $(e.target)\n            .closest(\".slick-slider\")\n            .slick(\"slickSetOption\", \"accessibility\", true);\n        },\n      });\n\n      // fix tabindex for first slide\n      if ($slideshow.hasClass(\"slick-slider\")) {\n        theme.productGallerySlideshowTabFix(\n          $slideshow.slick(\"getSlick\").$slides,\n          $slideshow.slick(\"getSlick\").currentSlide\n        );\n      }\n\n      $slideshow.on(\"afterChange\", function (evt, slick, current) {\n        // reset playing media\n        theme.pauseAllMedia();\n        if ($(window).width() >= 768) {\n          slick.slickSetOption(\"swipe\", true);\n        }\n        // notify media of visibility\n        $(\".product-media\", slick.$slides[current]).trigger(\"mediaVisible\");\n        // slideshow tab fix\n        theme.productGallerySlideshowTabFix(slick.$slides, current);\n      });\n    }\n\n    var $thumbnails = $(\".thumbnails:not(.hidden)\", container);\n    if ($thumbnails.length) {\n      var carouselVisibleItemCount = 6,\n        isCarousel = false;\n\n      /// Screen-width based initialisation of thumbnail carousels\n      var assessCarousel = function assessCarousel() {\n        if ($thumbnails.parent().css(\"display\") == \"flex\") {\n          // thumbnail container is in column beside main image - destroy carousel\n          if (isCarousel) {\n            isCarousel = false;\n\n            theme.beforeCarouselUnloadEventBlockFix($thumbnails);\n            $thumbnails\n              .removeClass(\"owl-carousel\")\n              .data(\"owl.carousel\")\n              .destroy();\n\n            // trigger variant image grouping\n            $gallery\n              .closest(\".product-detail\")\n              .find(\".original-selector\")\n              .trigger(\"change\");\n          }\n        } else {\n          // thumbnails underneath - init carousel\n          if (!isCarousel) {\n            isCarousel = true;\n\n            // fix for event propagation in nested owl carousels\n            theme.beforeCarouselLoadEventBlockFix($thumbnails);\n\n            // reset any image grouping modifications\n            $thumbnails.find(\".thumbnail\").show();\n            $gallery\n              .find(\".hidden-thumbnails\")\n              .children()\n              .appendTo($thumbnails);\n\n            $thumbnails\n              .addClass(\"owl-carousel\")\n              .on(\"initialized.owl.carousel\", function () {\n                $(\".lazyload--manual\", this)\n                  .removeClass(\"lazyload--manual\")\n                  .addClass(\"lazyload\");\n              })\n              .owlCarousel({\n                items: carouselVisibleItemCount,\n                dots: false,\n                margin: 7,\n                rtl: document.querySelector(\"html[dir=rtl]\") ? true : false,\n              });\n\n            // trigger variant image grouping\n            $gallery\n              .closest(\".product-detail\")\n              .find(\".original-selector\")\n              .trigger(\"change\");\n          }\n        }\n      };\n\n      $(window).on(\"debouncedresize.productGallery\", assessCarousel);\n      assessCarousel();\n      $(container).data(\"assessCarouselCallback\", assessCarousel);\n\n      /// Thumbnail click - in carousel\n      // Events:\n      // click: click on a thumbnail\n      // select: selection via variant image\n      // selectFromSlick: change of main image\n      //\n      // 'selectFromSlick' is treated as the 'primary' driver of state change, select/click to just update the main image slideshow,\n      // and an after-transition callback updates the thumbnail\n      $(\".gallery\", container).on(\n        \"click select selectFromSlick\",\n        \".thumbnails.owl-carousel .thumbnail\",\n        function (e) {\n          e.preventDefault();\n          var $carouselItem = $(this).parent();\n          if (e.type != \"selectFromSlick\") {\n            // from click or variant image? change main image\n            var mediaId = $(this).data(\"media-id\");\n            var _$slideshow = $(this)\n              .closest(\".gallery\")\n              .find(\".slideshow.slick-slider\");\n            if (_$slideshow) {\n              var index = _$slideshow\n                .find('.slide[data-media-id=\"' + mediaId + '\"]')\n                .index(); // current index including filters\n              // same index? manual trigger of next event\n              var slick = _$slideshow.slick(\"getSlick\");\n              if (slick.currentSlide === index) {\n                // current slide active, manually trigger from-slick thumb selection (req. for index changes during filtering)\n                $(this).trigger(\"selectFromSlick\");\n              } else {\n                // change slide\n                _$slideshow.slick(\"slickGoTo\", index);\n              }\n            }\n          } else {\n            // change to active state comes from the main slideshow change event\n            // show the highlight\n            $(this)\n              .addClass(\"selected\")\n              .parent()\n              .siblings()\n              .find(\"a\")\n              .removeClass(\"selected\");\n\n            // adjust thumbnail carousel if not on-screen\n            var shelfStart = $carouselItem\n              .parent()\n              .children(\".active:first\")\n              .index();\n            var shelfEnd = shelfStart + carouselVisibleItemCount - 1;\n            var currentIndex = $carouselItem.index();\n\n            if (currentIndex < shelfStart) {\n              // selected is to left of shelf - move carousel right to show\n              $carouselItem\n                .closest(\".owl-carousel\")\n                .trigger(\"to.owl.carousel\", currentIndex);\n            } else if (currentIndex > shelfEnd) {\n              // selected is to right of shelf - move carousel left to show\n              $carouselItem\n                .closest(\".owl-carousel\")\n                .trigger(\n                  \"to.owl.carousel\",\n                  Math.max(0, currentIndex - carouselVisibleItemCount + 1)\n                );\n            }\n          }\n        }\n      );\n\n      /// Thumbnail click - beside\n      // Uses same event structure as the events above ^\n      $(\".gallery\", container).on(\n        \"click select selectFromSlick\",\n        \" .thumbnails:not(.owl-carousel) .thumbnail\",\n        function (e) {\n          e.preventDefault();\n          if (e.type != \"selectFromSlick\") {\n            // from click or variant image? change main image\n            var index = 0;\n            var mediaId = $(this).data(\"media-id\");\n            $(this)\n              .parent()\n              .children(\":visible\")\n              .each(function (iter) {\n                index = iter;\n                if ($(this).data(\"media-id\") == mediaId) {\n                  return false;\n                }\n              });\n            // same index? manual trigger of next event\n            var _$slideshow2 = $(this).closest(\".gallery\").find(\".slideshow\");\n            var slick = _$slideshow2.slick(\"getSlick\");\n            if (slick.currentSlide === index) {\n              // current slide active, manually trigger from-slick thumb selection (req. for index changes during filtering)\n              $(this).trigger(\"selectFromSlick\");\n            } else {\n              // change slide\n              _$slideshow2.slick(\"slickGoTo\", index);\n            }\n          } else {\n            // change to active state comes from the main slideshow change event\n            $(this)\n              .addClass(\"selected\")\n              .siblings(\".selected\")\n              .removeClass(\"selected\");\n          }\n        }\n      );\n    }\n  };\n\n  theme.destroyProductGallery = function (container) {\n    $(window).off(\".productGallery\");\n    var $gallery = $(\".gallery\", container).off(\"click select selectFromSlick\");\n    theme.ProductMedia.destroy($gallery);\n    $(\".slick-slider\", container)\n      .slick(\"unslick\")\n      .off(\"init beforeChange afterChange\");\n    $(\".owl-carousel\", container).each(function () {\n      theme.beforeCarouselUnloadEventBlockFix(this);\n      $(this).data(\"owl.carousel\").destroy();\n    });\n  };\n\n  /* Product Media\n   *\n   * Load and destroy:\n   * theme.ProductMedia.init(galleryContainer, {\n   *   onModelViewerPlay: function(e){\n   *     $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', false);\n   *   },\n   *   onModelViewerPause: function(e){\n   *     $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', true);\n   *   }\n   * });\n   *\n   * theme.ProductMedia.destroy(galleryContainer);\n   */\n  theme.ProductMedia = new (function () {\n    var _ = this;\n\n    _._setupShopifyXr = function () {\n      if (!window.ShopifyXR) {\n        document.addEventListener(\n          \"shopify_xr_initialized\",\n          _._setupShopifyXr.bind(this)\n        );\n        return;\n      }\n\n      window.ShopifyXR.addModels(JSON.parse($(this).html()));\n      window.ShopifyXR.setupXRElements();\n    };\n\n    this.init = function (container, callbacks) {\n      var callbacks = callbacks || {},\n        _container = container;\n\n      // set up video media elements with a controller\n      $(container)\n        .find(\".product-media--video\")\n        .each(function (index) {\n          var poster = this.querySelector(\".product-media__poster\");\n          $(\".product-media__video-play-btn\", poster).on(\"click\", function () {\n            $(this).closest(\".product-media--video\").data(\"player\").play();\n          });\n\n          var playerObj = { container: this, poster: poster };\n          playerObj.play = function () {\n            // pause anything else\n            theme.pauseAllMedia();\n\n            // hide poster\n            this.poster.classList.add(\"product-media__poster--hide\");\n            $(this).closest(\".slick-slider\").slick(\"setPosition\");\n\n            // play\n            this.container.querySelectorAll(\".js-youtube\").forEach((video) => {\n              video.contentWindow.postMessage(\n                '{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}',\n                \"*\"\n              );\n            });\n            this.container.querySelectorAll(\".js-vimeo\").forEach((video) => {\n              video.contentWindow.postMessage('{\"method\":\"play\"}', \"*\");\n            });\n            this.container\n              .querySelectorAll(\"video\")\n              .forEach((video) => video.play());\n          }.bind(playerObj);\n\n          // instantiate videos\n          var template = this.querySelector(\".product-media__video-template\");\n          if (template) {\n            this.insertAdjacentHTML(\"beforeend\", template.innerHTML);\n            this.removeChild(template);\n            this.style.paddingBottom =\n              100 /\n                this.querySelector(\"video, iframe\").getAttribute(\n                  \"aspect-ratio\"\n                ) +\n              \"%\";\n          }\n\n          $(this)\n            .data(\"player\", playerObj)\n            .addClass(\"product-media--video-loaded\");\n        });\n\n      // when any media appears\n      $(container).on(\n        \"mediaVisible\",\n        \".product-media--video-loaded, .product-media--model-loaded\",\n        function () {\n          // autoplay all media on larger screens\n          if ($(window).width() >= 768) {\n            $(this).data(\"player\").play();\n          }\n          // update view-in-space\n          if ($(this).hasClass(\"product-media--model\")) {\n            $(\".view-in-space\", _container).attr(\n              \"data-shopify-model3d-id\",\n              $(this).data(\"model-id\")\n            );\n          }\n        }\n      );\n\n      // necessary callbacks\n      if (callbacks.onVideoVisible) {\n        $(container).on(\n          \"mediaVisible\",\n          \".product-media--video-loaded\",\n          callbacks.onVideoVisible\n        );\n      }\n\n      $(\"model-viewer\", container).each(function () {\n        if (callbacks.onModelViewerPlay) {\n          $(this).on(\n            \"shopify_model_viewer_ui_toggle_play\",\n            callbacks.onModelViewerPlay\n          );\n        }\n        if (callbacks.onModelViewerPause) {\n          $(this).on(\n            \"shopify_model_viewer_ui_toggle_pause\",\n            callbacks.onModelViewerPause\n          );\n        }\n      });\n\n      // set up a 3d model when it first appears\n      $(container).on(\n        \"mediaVisible mediaVisibleInitial\",\n        \".product-media--model:not(.product-media--model-loaded)\",\n        function (e) {\n          var element = $(this).find(\"model-viewer\")[0],\n            autoplay = e.type != \"mediaVisibleInitial\";\n          // load viewer\n          theme.loadStyleOnce(\n            \"https://cdn.shopify.com/shopifycloud/model-viewer-ui/assets/v1.0/model-viewer-ui.css\"\n          );\n          window.Shopify.loadFeatures([\n            {\n              name: \"model-viewer-ui\",\n              version: \"1.0\",\n              onLoad: function () {\n                $(this).data(\"player\", new Shopify.ModelViewerUI(element));\n                // set class and re-trigger visible event now loaded\n                $(this).addClass(\"product-media--model-loaded\");\n                if (callbacks.onModelViewerInit) {\n                  callbacks.onModelViewerInit(element);\n                }\n                if (autoplay) {\n                  $(this).trigger(\"mediaVisible\");\n                }\n              }.bind(this),\n            },\n          ]);\n        }\n      );\n\n      // load AR viewer\n      if ($(\".model-json\", container).length) {\n        window.Shopify.loadFeatures([\n          {\n            name: \"shopify-xr\",\n            version: \"1.0\",\n            onLoad: _._setupShopifyXr.bind($(\".model-json\", container)),\n          },\n        ]);\n      }\n\n      // pause other media when a 3d model is launched in AR\n      $(document).on(\"shopify_xr_launch\", function () {\n        theme.pauseAllMedia({ videos: true });\n      });\n\n      // 3d model in first place - start in paused mode\n      setTimeout(\n        function () {\n          $(\".product-slideshow.slick-slider .product-media:first\", this)\n            .filter(\".product-media--model\")\n            .trigger(\"mediaVisibleInitial\");\n          $(\n            \".product-slideshow:not(.slick-slider) .product-media--model\",\n            this\n          ).trigger(\"mediaVisibleInitial\");\n        }.bind(container),\n        50\n      );\n    };\n\n    this.destroy = function (container) {\n      $(document).off(\"shopify_xr_launch\");\n      $(container).off(\"mediaVisible mediaVisibleInitial\");\n      $(\".product-media--model-loaded\", container).each(function () {\n        $(this).data(\"player\").destroy();\n      });\n      $(\".product-media--video video\", container).off(\"playing pause ended\");\n      $(\"model-viewer\", container).off(\n        \"shopify_model_viewer_ui_toggle_play shopify_model_viewer_ui_toggle_pause\"\n      );\n    };\n  })();\n\n  theme.productGallerySlideshowTabFix = function (slides, current) {\n    // tabindex everything to prevent tabbing into hidden slides\n    $(slides[current])\n      .find(\"a, input, button, select, iframe, video, model-viewer, [tabindex]\")\n      .each(function () {\n        if (\n          typeof $(this).data(\"theme-slideshow-original-tabindex\") !==\n          \"undefined\"\n        ) {\n          if ($(this).data(\"theme-slideshow-original-tabindex\") === false) {\n            $(this).removeAttr(\"tabindex\");\n          } else {\n            $(this).attr(\n              \"tabindex\",\n              $(this).data(\"theme-slideshow-original-tabindex\")\n            );\n          }\n        } else {\n          $(this).removeAttr(\"tabindex\");\n        }\n      });\n    $(slides)\n      .not(slides[current])\n      .find(\"a, input, button, select, iframe, video, model-viewer, [tabindex]\")\n      .each(function () {\n        if (\n          typeof $(this).data(\"theme-slideshow-original-tabindex\") ===\n          \"undefined\"\n        ) {\n          $(this).data(\n            \"theme-slideshow-original-tabindex\",\n            typeof $(this).attr(\"tabindex\") !== \"undefined\"\n              ? $(this).attr(\"tabindex\")\n              : false\n          );\n\n          $(this).attr(\"tabindex\", \"-1\");\n        }\n      });\n  };\n\n  // Manage option dropdowns\n  theme.productData = {};\n  theme.OptionManager = new (function () {\n    var _ = this;\n\n    _._getVariantOptionElement = function (variant, $container) {\n      return $container.find(\n        'select[name=\"id\"] option[value=\"' + (variant ? variant.id : \"\") + '\"]'\n      );\n    };\n\n    _.selectors = {\n      container: \".product-detail\",\n      gallery: \".gallery\",\n      priceArea: \".price-area\",\n      variantIdInputs: '[name=\"id\"]',\n      purchaseForm: \".product-purchase-form\",\n      primaryVariantIdInput: '.product-purchase-form [name=\"id\"]',\n      submitButton: '.product-purchase-form button[type=\"submit\"]',\n      multiOption: \".option-selectors\",\n      customOption: \".custom-option\",\n      installmentsFormSuffix: \"-installments\",\n    };\n\n    _.strings = {\n      buttonDefault: theme.strings.products_product_add_to_cart,\n      buttonNoStock: theme.strings.products_variant_no_stock,\n      buttonNoVariant: theme.strings.products_variant_non_existent,\n    };\n\n    _.getProductData = function ($form) {\n      var productId = $form.data(\"product-id\");\n      var data = null;\n      if (!theme.productData[productId]) {\n        theme.productData[productId] = JSON.parse(\n          document.getElementById(\"ProductJson-\" + productId).innerHTML\n        );\n      }\n      data = theme.productData[productId];\n      if (!data) {\n        console.log(\n          \"Product data missing (id: \" + $form.data(\"product-id\") + \")\"\n        );\n      }\n      return data;\n    };\n\n    _.getVariantFromId = function ($productForm, id) {\n      var variants = this.getProductData($productForm).variants;\n      for (var i = 0; i < variants.length; i++) {\n        if (variants[i].id == id) {\n          return variants[i];\n        }\n      }\n      return { available: false };\n    };\n\n    _.getCurrentVariantData = function ($productForm) {\n      return _.getVariantFromId(\n        $productForm,\n        $productForm.find(_.selectors.primaryVariantIdInput).val()\n      );\n    };\n\n    (_.getBaseUnit = function (variant) {\n      return variant.unit_price_measurement.reference_value === 1\n        ? variant.unit_price_measurement.reference_unit\n        : variant.unit_price_measurement.reference_value +\n            variant.unit_price_measurement.reference_unit;\n    }),\n      (_.addVariantUrlToHistory = function (variant) {\n        if (variant) {\n          var newurl =\n            window.location.protocol +\n            \"//\" +\n            window.location.host +\n            window.location.pathname +\n            \"?variant=\" +\n            variant.id;\n          window.history.replaceState({ path: newurl }, \"\", newurl);\n        }\n      });\n\n    _.updateSku = function (variant, $container) {\n      $container.find(\".sku .sku__value\").html(variant ? variant.sku : \"\");\n      $container\n        .find(\".sku\")\n        .toggleClass(\"sku--no-sku\", !variant || !variant.sku);\n    };\n\n    _.updateBarcode = function (variant, $container) {\n      $container\n        .find(\".barcode .barcode__value\")\n        .html(variant ? variant.barcode : \"\");\n      $container\n        .find(\".barcode\")\n        .toggleClass(\"barcode--no-barcode\", !variant || !variant.barcode);\n    };\n\n    _.updateTransferNotice = function (variant, $container) {\n      var transferData = _._getVariantOptionElement(variant, $container).data(\n        \"inventory-transfer\"\n      );\n      if (transferData) {\n        $container\n          .find(\".product-inventory-transfer\")\n          .removeClass(\"product-inventory-transfer--none\")\n          .html(transferData);\n      } else {\n        $container\n          .find(\".product-inventory-transfer\")\n          .addClass(\"product-inventory-transfer--none\")\n          .empty();\n      }\n    };\n\n    _.updateVariantDeterminedVisibilityAreas = function (variant, $container) {\n      $container.find(\".variant-visibility-area\").each(function () {\n        $(this).children(\":not(script)\").remove();\n        if (variant) {\n          $(this).append(\n            $(this)\n              .children('script[data-variant-id=\"' + variant.id + '\"]')\n              .html()\n          );\n        } else {\n          $(this).append($(this).children('script[data-variant-id=\"\"]').html());\n        }\n      });\n    };\n\n    _.updateBackorder = function (variant, $container) {\n      var $backorder = $container.find(\".backorder\");\n      if ($backorder.length) {\n        if (variant && variant.available) {\n          if (\n            variant.inventory_management &&\n            _._getVariantOptionElement(variant, $container).data(\"stock\") ==\n              \"out\"\n          ) {\n            var productData = _.getProductData(\n              $backorder.closest(\".product-form\")\n            );\n            $backorder\n              .find(\".backorder__variant\")\n              .text(\n                productData.title +\n                  (variant.title.indexOf(\"Default\") >= 0\n                    ? \"\"\n                    : \" - \" + variant.title)\n              );\n            $backorder.show();\n          } else {\n            $backorder.hide();\n          }\n        } else {\n          $backorder.hide();\n        }\n      }\n    };\n\n    _._updateButtonText = function ($button, string, variant) {\n      $button.each(function () {\n        var newVal;\n        newVal = _.strings[\"button\" + string];\n        if (newVal !== false) {\n          if ($(this).is(\"input\")) {\n            $(this).val(newVal);\n          } else {\n            const replacement = $(this).find(\"[data-text-replacement]\").first();\n            const container = replacement.length > 0 ? replacement : $(this);\n            container.html(newVal);\n          }\n        }\n      });\n    };\n\n    _.updateButtons = function (variant, $container) {\n      var $button = $container.find(_.selectors.submitButton);\n\n      if (variant) {\n        $button.removeAttr(\"disabled\").removeClass(\"button--sold-out\");\n        if (variant.available == true) {\n          _._updateButtonText($button, \"Default\", variant);\n        } else {\n          $button.addClass(\"button--sold-out\");\n          _._updateButtonText($button, \"NoStock\", variant);\n        }\n      } else {\n        var productData = _.getProductData($button.closest(\".product-form\"));\n        if (!productData.available) {\n          $button.addClass(\"button--sold-out\");\n          _._updateButtonText($button, \"NoStock\", variant);\n        } else if (theme.getEmptyOptionSelectors($container).length) {\n          $button.removeAttr(\"disabled\");\n          _._updateButtonText($button, \"Default\", variant);\n        } else {\n          $button.attr(\"disabled\", \"disabled\");\n          _._updateButtonText($button, \"NoVariant\", variant);\n        }\n      }\n    };\n\n    _.updateContainerStatusClasses = function (variant, $container) {\n      $container.toggleClass(\"variant-status--not-selected\", !variant);\n      $container.toggleClass(\n        \"variant-status--unavailable\",\n        variant && !variant.available\n      );\n      $container.toggleClass(\n        \"variant-status--backorder\",\n        variant &&\n          variant.available &&\n          variant.inventory_management &&\n          _._getVariantOptionElement(variant, $container).data(\"stock\") == \"out\"\n      );\n      $container.toggleClass(\n        \"variant-status--on-sale\",\n        variant && variant.available && variant.compare_at_price > variant.price\n      );\n    };\n\n    _.initProductOptions = function ($productForm) {\n      if ($productForm.hasClass(\"theme-init\")) return;\n\n      var productData = _.getProductData($productForm);\n      $productForm.addClass(\"theme-init\");\n\n      // init option selectors\n      $productForm\n        .find(_.selectors.multiOption)\n        .on(\"change.themeProductOptions\", function () {\n          var selectedOptions = [];\n          $(this)\n            .find(\".option-selector\")\n            .each(function () {\n              if ($(this).data(\"selector-type\") === \"listed\") {\n                selectedOptions.push($(this).find(\".js-option:checked\").val());\n              } else {\n                selectedOptions.push(\n                  $(this).find('.js-option[aria-selected=\"true\"]').data(\"value\")\n                );\n              }\n            });\n\n          // find variant\n          var variant = false;\n          for (var i = 0; i < productData.variants.length; i++) {\n            var v = productData.variants[i];\n            var matchCount = 0;\n            for (var j = 0; j < selectedOptions.length; j++) {\n              if (v.options[j] == selectedOptions[j]) {\n                matchCount++;\n              }\n            }\n            if (matchCount == selectedOptions.length) {\n              variant = v;\n              break;\n            }\n          }\n\n          // trigger change\n          $productForm.find(_.selectors.variantIdInputs).val(variant.id);\n\n          // a jQuery event may not be picked up by all listeners\n          $productForm.find(_.selectors.variantIdInputs).each(function () {\n            this.dispatchEvent(\n              new CustomEvent(\"change\", {\n                bubbles: true,\n                cancelable: false,\n                detail: { variant: variant, selectedOptions: selectedOptions },\n              })\n            );\n          });\n        });\n\n      // init custom options (mirror in purchase form for Buy Now button)\n      $productForm\n        .find(_.selectors.customOption)\n        .each(function () {\n          var $input = $(this).find(\"input:first, textarea, select\");\n          $('<input type=\"hidden\">')\n            .attr({\n              name: $input.attr(\"name\"),\n              value: $input.val(),\n            })\n            .appendTo($productForm.find(_.selectors.purchaseForm));\n        })\n        .on(\"change.themeProductOptions\", function () {\n          var $radios = $(this).find('input[type=\"radio\"]'),\n            $checkbox = $(this).find('input[type=\"checkbox\"]');\n          if ($radios.length) {\n            // radio buttons\n            $productForm\n              .find(_.selectors.purchaseForm + \" input\")\n              .filter(function () {\n                return this.name === $radios[0].name;\n              })\n              .val($radios.filter(\":checked\").val())\n              .trigger(\"change\");\n          } else if ($checkbox.length) {\n            // checkbox\n            var val = null;\n            if ($checkbox.is(\":checked\")) {\n              val = $checkbox.val();\n            } else {\n              val = $checkbox.siblings('[type=\"hidden\"]').val();\n            }\n            $productForm\n              .find(_.selectors.purchaseForm + \" input\")\n              .filter(function () {\n                return this.name === $checkbox[0].name;\n              })\n              .val(val)\n              .trigger(\"change\");\n          } else {\n            // other inputs\n            var $input = $(this).find(\"select, input, textarea\");\n            $productForm\n              .find(_.selectors.purchaseForm + \" input\")\n              .filter(function () {\n                return this.name === $input.attr(\"name\");\n              })\n              .val($input.val())\n              .trigger(\"change\");\n          }\n        });\n\n      // init variant ids\n      $productForm.find(_.selectors.primaryVariantIdInput).each(function () {\n        // change state for original dropdown\n        $(this).on(\n          \"change.themeProductOptions firstrun.themeProductOptions\",\n          function (e) {\n            if ($(this).is(\"input[type=radio]:not(:checked)\")) {\n              return; // handle radios - only update for checked\n            }\n            // If variant is passed in, use that. Even if 'false'. If nothing is passed, find from input value.\n            var variant = e.detail ? e.detail.variant : null;\n            if (!variant && variant !== false) {\n              for (var i = 0; i < productData.variants.length; i++) {\n                if (productData.variants[i].id == $(this).val()) {\n                  variant = productData.variants[i];\n                }\n              }\n            }\n            var $container = $(this).closest(_.selectors.container);\n\n            // string overrides\n            var $addToCart = $container\n              .find(_.selectors.submitButton)\n              .filter(\"[data-add-to-cart-text]\");\n            if ($addToCart.length) {\n              _.strings.buttonDefault = $addToCart.data(\"add-to-cart-text\");\n            }\n\n            // update buttons\n            _.updateButtons(variant, $container);\n\n            // emit an event to broadcast the variant update\n            $(window).trigger(\"cc-variant-updated\", {\n              variant: variant,\n              product: productData,\n            });\n\n            // variant images\n            if (variant && variant.featured_media) {\n              // variant passed\n              $container\n                .find(_.selectors.gallery)\n                .trigger(\"variantImageSelected\", [\n                  variant,\n                  e.type === \"firstrun\",\n                ]);\n            } else if (e.detail && e.detail.selectedOptions) {\n              // if some options selected, find the first matching variant for image\n              var matchesRequired = e.detail.selectedOptions.filter(\n                (o) => o && o.length > 0\n              ).length;\n              if (matchesRequired > 0) {\n                for (var i = 0; i < productData.variants.length; i++) {\n                  var v = productData.variants[i];\n                  var matchCount = 0;\n                  for (var j = 0; j < e.detail.selectedOptions.length; j++) {\n                    if (v.options[j] == e.detail.selectedOptions[j]) {\n                      matchCount++;\n                    }\n                  }\n                  if (matchCount == matchesRequired && v.featured_media) {\n                    $container\n                      .find(_.selectors.gallery)\n                      .trigger(\"variantImageSelected\", [\n                        v,\n                        e.type === \"firstrun\",\n                      ]);\n                    break;\n                  }\n                }\n              }\n            }\n\n            // extra details\n            _.updateBarcode(variant, $container);\n            _.updateSku(variant, $container);\n            _.updateTransferNotice(variant, $container);\n            _.updateVariantDeterminedVisibilityAreas(variant, $container);\n            _.updateBackorder(variant, $container);\n            _.updateContainerStatusClasses(variant, $container);\n\n            // variant urls\n            if (\n              $productForm.data(\"enable-history-state\") &&\n              e.type == \"change\"\n            ) {\n              _.addVariantUrlToHistory(variant);\n            }\n\n            // allow other things to hook on\n            $productForm.trigger(\"variantChanged\", [variant, productData]);\n          }\n        );\n\n        // first-run\n        $(this).trigger(\"firstrun\");\n      });\n\n      // ajax\n      theme.applyAjaxToProductForm($productForm);\n\n      // apply URL params\n      var searchParams = new URLSearchParams(location.search);\n      var _loop3 = function _loop3(key) {\n        $productForm\n          .find(\".option-selector\")\n          .filter(function () {\n            return this.querySelector(\".label\").firstChild.textContent === key;\n          })\n          .each(function () {\n            var value = searchParams.get(key);\n            if (this.dataset.selectorType == \"dropdown\") {\n              this.querySelector(\".cc-select\").dispatchEvent(\n                new CustomEvent(\"selectOption\", { detail: { value: value } })\n              );\n            } else {\n              this.querySelectorAll(\".opt-label__text\").forEach((el) => {\n                if (el.innerText == value) {\n                  var input = document.getElementById(\n                    el.parentElement.getAttribute(\"for\")\n                  );\n                  if (input) {\n                    input.checked = true;\n                    input.dispatchEvent(\n                      new CustomEvent(\"change\", {\n                        bubbles: true,\n                        cancelable: false,\n                      })\n                    );\n                  }\n                }\n              });\n            }\n          });\n      };\n      for (var key of searchParams.keys()) {\n        _loop3(key);\n      }\n    };\n\n    _.unloadProductOptions = function ($productForm) {\n      $productForm.removeClass(\"theme-init\").each(function () {\n        $(this).trigger(\"unloading\").off(\".themeProductOptions\");\n        $(this).find(_.selectors.multiOption).off(\".themeProductOptions\");\n        $(this).find(_.selectors.customOption).off(\".themeProductOptions\");\n        theme.removeAjaxFromProductForm($productForm);\n      });\n    };\n  })();\n\n  theme.loadQuickbuy = function () {\n    // utility function for quickbuy (closes all quickbuys in passed blocks, in a collection grid)\n    function contractDetail($blocks, speed) {\n      if ($blocks.length > 0) {\n        $blocks.removeClass(\"expanded\");\n        $blocks\n          .find(\".quickbuy-container\")\n          .stop()\n          .animate({ height: 0 }, speed, function () {\n            $(this).find(\".inner\").empty();\n          });\n        $blocks.stop().each(function () {\n          $(this).animate({ paddingBottom: 0 }, speed);\n        });\n      }\n    }\n\n    // handle components\n    function loadComponents(componentContainer) {\n      $(componentContainer)\n        .closest(\"[data-components]\")\n        .each(function () {\n          $(this)\n            .data(\"components\")\n            .split(\",\")\n            .forEach((component) => {\n              $(document).trigger(\"cc:component:load\", [\n                component,\n                componentContainer,\n              ]);\n            });\n        });\n\n      $(document).trigger(\"cc:component:load\", [\n        \"custom-select\",\n        \".quickbuy-container\",\n      ]);\n    }\n\n    function unloadComponents(componentContainer) {\n      $(componentContainer).find(\".cc-accordion\").off(\".qbLoadComponents\");\n      $(componentContainer)\n        .closest(\"[data-components]\")\n        .each(function () {\n          $(this)\n            .data(\"components\")\n            .split(\",\")\n            .forEach((component) => {\n              $(document).trigger(\"cc:component:unload\", [\n                component,\n                componentContainer,\n              ]);\n            });\n        });\n    }\n\n    var debouncedQuickbuyResizeTimeoutID = -1;\n    function debouncedQuickbuyResize(qbInner) {\n      clearTimeout(debouncedQuickbuyResizeTimeoutID);\n      debouncedQuickbuyResizeTimeoutID = setTimeout(() => {\n        var qbc = qbInner.closest(\".quickbuy-container\"),\n          block = qbc.closest(\".product-block\");\n        if (block) {\n          // use padding in grid\n          // also check expanded class in case it's mid close transition\n          if (block.classList.contains(\"expanded\")) {\n            var targetHeight = $(qbInner).outerHeight(),\n              expandedSiblings = [...block.parentNode.children].filter(\n                (child) => {\n                  return (\n                    child !== block && child.classList.contains(\"expanded\")\n                  );\n                }\n              ),\n              speed = expandedSiblings.length > 0 ? 0 : droppyDownAnimSpeed; // slide down instantly if a neighbour is expanded\n\n            $(block)\n              .stop()\n              .animate(\n                {\n                  paddingBottom: targetHeight + 20,\n                },\n                speed\n              ); // extra for gap underneath\n            $(qbc).stop().animate({ height: targetHeight }, speed);\n          }\n        } else {\n          // use height in carousel\n          // - if not empty (e.g. post-close tidy-up)\n          if (qbInner.childElementCount > 0) {\n            $(qbc)\n              .stop()\n              .animate(\n                {\n                  height: $(qbInner).outerHeight(),\n                },\n                droppyDownAnimSpeed\n              );\n          }\n        }\n      }, 100);\n    }\n\n    var quickbuyResizeObserver = null;\n    if (\"ResizeObserver\" in window) {\n      quickbuyResizeObserver = new ResizeObserver((entries) => {\n        for (var entry of entries) {\n          if (entry.contentBoxSize) {\n            debouncedQuickbuyResize(entry.target);\n          }\n        }\n      });\n    } else {\n      quickbuyResizeObserver = {\n        disconnect: () => {},\n        observer: () => {},\n      };\n    }\n\n    // quick buy - managing slide-down quickbuy in both grids and carousels\n    var droppyDownAnimSpeed = 500;\n    $(document).on(\n      \"click\",\n      \".product-list .product-block:not(.collection-block):not(.main-search-result) .quickbuy-toggle\",\n      function () {\n        var pageWidth = $(window).width(),\n          productUrl = $(this).attr(\"href\");\n\n        //Only show dropdown if screen is large enough for it to be useful\n        if (pageWidth > 767) {\n          // cancel current request if one exists\n          if (theme.currentQuickbuyRequest) {\n            theme.currentQuickbuyRequest.abort();\n          }\n\n          var $block = $(this).closest(\".product-block\"),\n            $detailCont = null,\n            $quickbuyCont = null,\n            $slider = $(this).closest(\".collection-slider\"),\n            $sliderRow = null;\n\n          // do different things if it's inside a slideshow\n          if ($slider.length > 0) {\n            $sliderRow = $slider.closest(\".collection-slider-row\");\n            // slider without detail\n            if ($sliderRow.find(\".quickbuy-container\").length === 0) {\n              return;\n            }\n            $quickbuyCont = $sliderRow.find(\".quickbuy-container\");\n          } else {\n            $quickbuyCont = $block.find(\".quickbuy-container\");\n          }\n          $detailCont = $quickbuyCont.find(\".inner\");\n\n          // toggle active class on block\n          if ($block.toggleClass(\"expanded\").hasClass(\"expanded\")) {\n            // expanding\n            if ($slider.length > 0) {\n              // if another block is expanded, remove its expanded class\n              var noneExpanded =\n                $slider\n                  .find(\".product-block.expanded\")\n                  .not($block)\n                  .removeClass(\"expanded\").length === 0;\n\n              // if expanding from empty, set initial detail container height to 0\n              if (noneExpanded) {\n                $quickbuyCont.height(0);\n              } else {\n                // unload existing quickbuy\n                $(\".product-form\", $quickbuyCont).trigger(\n                  \"unload-product-form\"\n                );\n                $(\".gallery\", $quickbuyCont).off(this.namespace);\n                $(\".slideshow\", $quickbuyCont).slick(\"unslick\");\n                // unload components\n                unloadComponents($quickbuyCont);\n              }\n            } else {\n              // close expanded siblings\n              var $expandedSiblings = $block.siblings(\".expanded\");\n\n              $expandedSiblings.each(function () {\n                contractDetail($(this), 0);\n\n                // unload existing quickbuy\n                $(\".product-form\", this).trigger(\"unload-product-form\");\n                theme.destroyProductGallery(this);\n                // unload components\n                unloadComponents(this);\n              });\n            }\n\n            // monitor for contents changing size\n            quickbuyResizeObserver.disconnect();\n            quickbuyResizeObserver.observe($detailCont[0]);\n\n            // add spinner\n            $detailCont.html('<div class=\"loading-spinner\"></div>');\n\n            // load in content\n            var url = $(this).attr(\"href\");\n            theme.currentQuickbuyRequest = $.get(url, function (response) {\n              var $newDetail = $(\"<div>\" + response + \"</div>\").find(\n                \".quickbuy-content\"\n              );\n\n              // convert to quickbuy content\n              $newDetail.find(\".more\").attr(\"href\", productUrl);\n              $newDetail\n                .find(\".detail .title\")\n                .wrapInner($(\"<a>\").attr(\"href\", productUrl));\n              $newDetail\n                .find(\".show-gallery\")\n                .removeClass(\"show-gallery\")\n                .attr(\"href\", productUrl);\n              $newDetail.find(\".not-in-quickbuy\").remove();\n              $newDetail\n                .find(\".only-in-quickbuy\")\n                .removeClass(\"only-in-quickbuy\");\n              $newDetail\n                .find(\".sticky-content-container\")\n                .removeClass(\"sticky-content-container\");\n              $newDetail.find(\".store-availability-container\").remove();\n              $newDetail\n                .find('[data-enable-history-state=\"true\"]')\n                .attr(\"data-enable-history-state\", \"false\");\n              $newDetail\n                .find(\".gallery .thumbnails\")\n                .removeClass(\"mobile-only\");\n              [\n                \"gallery--layout-carousel-beside\",\n                \"gallery--layout-columns-1\",\n                \"gallery--layout-columns-2\",\n                \"gallery--layout-collage-1\",\n                \"gallery--layout-collage-2\",\n              ].forEach((cl) => {\n                $newDetail\n                  .find(\".\" + cl)\n                  .removeClass(cl)\n                  .addClass(\"gallery--layout-carousel-under\");\n              });\n\n              $detailCont.html($newDetail);\n\n              // the order of these is important:\n              theme.initProductGallery($quickbuyCont); // 1\n              $quickbuyCont.find(\".product-form\").trigger(\"load-product-form\"); // 2\n              loadComponents($quickbuyCont); // 3\n              theme.initAnimateOnScroll(); // 4\n            }).always(function () {\n              theme.currentQuickbuyRequest = false;\n            });\n\n            // enable close button\n            $quickbuyCont.find(\".close-detail\").removeAttr(\"tabindex\");\n\n            // scroll to appropriate position\n            // qb: top of quick buy\n            // bl: top of product block\n            var scrollMode = \"qb\";\n            var scrollOffset = -120;\n\n            if ($(\".section-header\").css(\"position\") == \"sticky\") {\n              scrollOffset -= $(\".section-header\").height();\n            }\n\n            if (scrollMode == \"qb\") {\n              $(\"html:not(:animated),body:not(:animated)\").animate(\n                { scrollTop: $quickbuyCont.offset().top + scrollOffset },\n                500\n              );\n            } else {\n              if ($slider.length > 0) {\n                // simple for slider\n                $(\"html:not(:animated),body:not(:animated)\").animate(\n                  { scrollTop: $block.offset().top },\n                  500\n                );\n              } else {\n                // need to use top of block when no quickbuys are visible\n                saveCollectionPageData();\n                var offsetTop =\n                  typeof $block.data(\"offsetTop\") != \"undefined\"\n                    ? $block.data(\"offsetTop\")\n                    : $block.offset().top;\n                $(\"html:not(:animated),body:not(:animated)\").animate(\n                  { scrollTop: offsetTop + scrollOffset },\n                  500\n                );\n              }\n            }\n          } else {\n            // close\n            unloadComponents($quickbuyCont);\n            if ($slider.length > 0) {\n              // collapse detail container\n              $quickbuyCont\n                .stop()\n                .animate({ height: 0 }, droppyDownAnimSpeed, function () {\n                  // remove details\n                  $detailCont.empty();\n                });\n            } else {\n              contractDetail($block, droppyDownAnimSpeed);\n            }\n\n            // scroll to top of closing block\n            var scrollUpOffset = -140;\n            $(\"html:not(:animated),body:not(:animated)\").animate(\n              { scrollTop: $block.offset().top + scrollUpOffset },\n              500\n            );\n\n            // disable close button\n            $quickbuyCont.find(\".close-detail\").attr(\"tabindex\", \"-1\");\n          }\n\n          return false;\n        }\n      }\n    );\n\n    //Close button event\n    $(document).on(\"click\", \".quickbuy-container .close-detail\", function () {\n      var $slider = $(this).closest(\".collection-slider-row\");\n      if ($slider.length) {\n        $slider\n          .find(\".product-block.expanded .quickbuy-toggle:first\")\n          .trigger(\"click\");\n      } else {\n        $(this)\n          .closest(\".product-block\")\n          .find(\".quickbuy-toggle:first\")\n          .trigger(\"click\");\n      }\n      return false;\n    });\n\n    //You also need to know where to scroll to\n    function saveCollectionPageData() {\n      $(\".collection-listing\").each(function () {\n        var $blocks = $(this).find(\".product-block\");\n        if ($blocks.length <= 1) return true; // Skip for empty colls\n        var row = 0;\n        var currTop = 0;\n        //Heights are fixed. Check two in case somebody has expanded one...\n        var blockHeight = Math.min(\n          $blocks.first().outerHeight(),\n          $($blocks[1]).outerHeight()\n        );\n        var blockPageOffset = $blocks.first().offset().top;\n        $blocks.each(function (index) {\n          var currOffsetTop = $(this).offset().top;\n          if (index == 0) {\n            currTop = currOffsetTop;\n          } else {\n            if (currOffsetTop > currTop) {\n              row++;\n              currTop = currOffsetTop;\n            }\n          }\n          $(this).data({\n            offsetTop: blockPageOffset + row * blockHeight,\n          });\n        });\n      });\n    }\n  };\n\n  $(function () {\n    $(document).on(\"click\", \".sharing a\", function (e) {\n      var $parent = $(this).parent();\n      if ($parent.hasClass(\"twitter\")) {\n        e.preventDefault();\n        var url = $(this).attr(\"href\");\n        var width = 575,\n          height = 450,\n          left = ($(window).width() - width) / 2,\n          top = ($(window).height() - height) / 2,\n          opts =\n            \"status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0\" +\n            \",width=\" +\n            width +\n            \",height=\" +\n            height +\n            \",top=\" +\n            top +\n            \",left=\" +\n            left;\n        window.open(url, \"Twitter\", opts);\n      } else if ($parent.hasClass(\"facebook\")) {\n        e.preventDefault();\n        var url = $(this).attr(\"href\");\n        var width = 626,\n          height = 256,\n          left = ($(window).width() - width) / 2,\n          top = ($(window).height() - height) / 2,\n          opts =\n            \"status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0\" +\n            \",width=\" +\n            width +\n            \",height=\" +\n            height +\n            \",top=\" +\n            top +\n            \",left=\" +\n            left;\n        window.open(url, \"Facebook\", opts);\n      } else if ($parent.hasClass(\"pinterest\")) {\n        e.preventDefault();\n        var url = $(this).attr(\"href\");\n        var width = 700,\n          height = 550,\n          left = ($(window).width() - width) / 2,\n          top = ($(window).height() - height) / 2,\n          opts =\n            \"status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0\" +\n            \",width=\" +\n            width +\n            \",height=\" +\n            height +\n            \",top=\" +\n            top +\n            \",left=\" +\n            left;\n        window.open(url, \"Pinterest\", opts);\n      } else if ($parent.hasClass(\"google\")) {\n        e.preventDefault();\n        var url = $(this).attr(\"href\");\n        var width = 550,\n          height = 450,\n          left = ($(window).width() - width) / 2,\n          top = ($(window).height() - height) / 2,\n          opts =\n            \"status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0\" +\n            \",width=\" +\n            width +\n            \",height=\" +\n            height +\n            \",top=\" +\n            top +\n            \",left=\" +\n            left;\n        window.open(url, \"Google+\", opts);\n      }\n    });\n  });\n  var TermsAgreement = class extends HTMLElement {\n    connectedCallback() {\n      this.delegatedEvent = theme.addDelegateEventListener(\n        document,\n        \"click\",\n        '#cartform [name=\"checkout\"], .additional-checkout-buttons input, a[href*=\"/checkout\"]',\n        this.handleFormSubmittingEvent.bind(this)\n      );\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener(\"click\", this.delegatedEvent);\n    }\n\n    handleFormSubmittingEvent(evt) {\n      if (!this.querySelector(\"input:checked\")) {\n        evt.preventDefault();\n        theme.showQuickPopup(\n          theme.strings.cart_terms_confirmation,\n          $(evt.target)\n        );\n      }\n    }\n  };\n\n  window.customElements.define(\"terms-agreement\", TermsAgreement);\n  /*================ Sections ================*/\n  theme.AnnouncementBarSection = new (function () {\n    this.onSectionLoad = function (container) {\n      this.container = container;\n      this.namespace = theme.namespaceFromSection(container);\n\n      $(\".disclosure\", container).each(function () {\n        $(this).data(\"disclosure\", new theme.Disclosure($(this)));\n      });\n\n      this.announcements = container.querySelectorAll(\".announcement\");\n      if (this.announcements.length > 1) {\n        this.currentAnnouncement = 0;\n        container\n          .querySelector(\".announcement-bar__middle\")\n          .addEventListener(\n            \"focusin\",\n            this.functions.pauseAnnouncements.bind(this)\n          );\n        container\n          .querySelector(\".announcement-bar__middle\")\n          .addEventListener(\n            \"focusout\",\n            this.functions.playAnnouncements.bind(this)\n          );\n        container\n          .querySelector(\".announcement-button--previous\")\n          .addEventListener(\n            \"click\",\n            this.functions.previousAnnouncement.bind(this)\n          );\n        container\n          .querySelector(\".announcement-button--next\")\n          .addEventListener(\n            \"click\",\n            this.functions.nextAnnouncement.bind(this)\n          );\n        this.observer = new IntersectionObserver(\n          this.functions.handleIntersect.bind(this)\n        );\n        this.observer.observe(this.container);\n      }\n    };\n\n    this.functions = {\n      handleIntersect: function handleIntersect(entries) {\n        entries.forEach((entry) => {\n          if (entry.target == this.container) {\n            if (entry.isIntersecting) {\n              this.functions.playAnnouncements.call(this);\n            } else {\n              this.functions.pauseAnnouncements.call(this);\n            }\n          }\n        });\n      },\n\n      playAnnouncements: function playAnnouncements() {\n        this.announcementInterval = setInterval(() => {\n          this.functions.setCurrentAnnouncement.call(\n            this,\n            this.currentAnnouncement + 1\n          );\n        }, 5000);\n      },\n\n      pauseAnnouncements: function pauseAnnouncements() {\n        if (this.announcementInterval) {\n          clearInterval(this.announcementInterval);\n        }\n      },\n\n      setCurrentAnnouncement: function setCurrentAnnouncement(newIndex) {\n        this.currentAnnouncement = newIndex % this.announcements.length;\n        this.announcements.forEach((el, index) => {\n          if (index !== this.currentAnnouncement) {\n            el.classList.add(\"announcement--inactive\");\n          } else {\n            el.classList.remove(\"announcement--inactive\");\n          }\n        });\n      },\n\n      previousAnnouncement: function previousAnnouncement() {\n        this.functions.setCurrentAnnouncement.call(\n          this,\n          this.currentAnnouncement - 1\n        );\n      },\n\n      nextAnnouncement: function nextAnnouncement() {\n        this.functions.setCurrentAnnouncement.call(\n          this,\n          this.currentAnnouncement + 1\n        );\n      },\n    };\n\n    this.onSectionUnload = function (container) {\n      clearInterval(this.announcementInterval);\n\n      $(\".disclosure\", container).each(function () {\n        $(this).data(\"disclosure\").unload();\n      });\n\n      if (this.observer) {\n        this.observer.disconnect();\n      }\n\n      $(window).off(this.namespace);\n    };\n\n    this.onBlockSelect = function (block) {\n      var index = Array.prototype.indexOf.call(\n        block.parentElement.children,\n        block\n      );\n      this.functions.pauseAnnouncements.call(this);\n      this.functions.setCurrentAnnouncement.call(this, index);\n    };\n\n    this.onBlockDeselect = function (block) {\n      this.functions.playAnnouncements.call(this);\n    };\n  })();\n\n  theme.BlogTemplateSection = new (function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n\n      // filter dropdown\n      this.$container.on(\n        \"click\" + this.namespace,\n        \".link-dropdown__button\",\n        theme.toggleLinkDropdownButton.bind(this)\n      );\n\n      // click anywhere else in page to close\n      $(document).on(\"click\" + this.namespace, function () {\n        $('.link-dropdown__button[aria-expanded=\"true\"]').trigger(\"click\");\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      this.$container.off(this.namespace);\n      $(document).off(this.namespace);\n    };\n  })();\n\n  theme.CartTemplateSection = new (function () {\n    this.onSectionLoad = function (container) {\n      this.$container = $(container);\n\n      $(container).on(\n        \"click.cartTemplateSection\",\n        \"button[data-toggle-shipping]\",\n        function () {\n          $(\"#shipping-calculator\").toggle();\n          var alt = $(this).data(\"toggle-html\");\n          $(this).data(\"toggle-html\", $(this).html());\n          $(this).html(alt);\n          return false;\n        }\n      );\n    };\n\n    this.onSectionUnload = function (container) {\n      $(container).off(\".cartTemplateSection\");\n    };\n  })();\n\n  theme.CartDrawerSection = new (function () {\n    this.onSectionLoad = function (container) {\n      this.container = container;\n      this.namespace = theme.namespaceFromSection(container);\n      this.popup = new ccPopup($(\".cc-popup\", container), this.namespace);\n\n      this.boundOpen = () => {\n        this.popup.open();\n      };\n      document.addEventListener(\"theme:open-cart-drawer\", this.boundOpen);\n      this.boundClose = () => this.popup.close();\n      document.addEventListener(\"theme:close-cart-drawer\", this.boundClose);\n\n      container\n        .querySelectorAll(\".cc-popup-close\")\n        .forEach((el) => el.addEventListener(\"click\", this.boundClose));\n      container\n        .querySelector(\".cc-popup-background\")\n        .addEventListener(\"click\", this.boundClose);\n    };\n\n    this.onSectionSelect = () => {\n      document.dispatchEvent(\n        new CustomEvent(\"theme:open-cart-drawer\", {\n          bubbles: true,\n          cancelable: false,\n        })\n      );\n    };\n\n    this.onSectionDeselect = () => {\n      document.dispatchEvent(\n        new CustomEvent(\"theme:close-cart-drawer\", {\n          bubbles: true,\n          cancelable: false,\n        })\n      );\n    };\n\n    this.onSectionUnload = function (container) {\n      document.removeEventListener(\"theme:open-cart-drawer\", this.boundOpen);\n      document.removeEventListener(\"theme:close-cart-drawer\", this.boundClose);\n    };\n  })();\n\n  theme.CollectionTemplateSection = new (function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n\n      this.filterer = new theme.LoadFilterer(this);\n\n      // button subcollection link hide/reveal\n      $(window).on(\n        \"debouncedresize\" + this.namespace,\n        this.functions.truncateButtonSubcollections.bind(this)\n      );\n      this.functions.truncateButtonSubcollections.call(this);\n\n      // gallery subcollection carousel\n      var $subcollectionGallery = $(\n        \".subcollection-links--gallery .gallery\",\n        container\n      );\n      $subcollectionGallery\n        .on(\"init\", function () {\n          $(\".lazyload--manual\", this)\n            .removeClass(\"lazyload--manual\")\n            .addClass(\"lazyload\");\n        })\n        .slick({\n          autoplay: false,\n          fade: false,\n          infinite: false,\n          swipeToSlide: true,\n          slidesToShow: Math.min(\n            4,\n            $(\".subcollection-links--gallery .gallery__item\", container).length\n          ),\n          slidesToScroll: 1,\n          useTransform: true,\n          arrows: true,\n          dots: false,\n          prevArrow:\n            '<button type=\"button\" class=\"image-page-button image-page-button--previous ltr-icon\" aria-label=\"' +\n            theme.strings.previous +\n            '\">' +\n            theme.icons.chevronLeft +\n            \"</button>\",\n          nextArrow:\n            '<button type=\"button\" class=\"image-page-button image-page-button--next ltr-icon\" aria-label=\"' +\n            theme.strings.next +\n            '\">' +\n            theme.icons.chevronRight +\n            \"</button>\",\n          rtl: document.querySelector(\"html[dir=rtl]\") ? true : false,\n          responsive: [\n            {\n              breakpoint: 1000,\n              settings: {\n                slidesToShow: Math.min(\n                  3,\n                  $(\".subcollection-links--gallery .gallery__item\", container)\n                    .length\n                ),\n              },\n            },\n            {\n              breakpoint: 768,\n              settings:\n                $subcollectionGallery.data(\"mobile-item-count\") == \"hide\"\n                  ? \"unslick\"\n                  : {\n                      slidesToShow:\n                        $subcollectionGallery.data(\"mobile-item-count\"),\n                    },\n            },\n          ],\n        });\n    };\n\n    this.onSectionUnload = function (container) {\n      this.filterer.destroy();\n      $(\".subcollection-links__expander\", this.$container).off(\"click\");\n      $(\".slick-slider\", container).slick(\"unslick\").off(\"init\");\n      $(window).off(this.namespace);\n    };\n\n    this.functions = {\n      truncateButtonSubcollections: function truncateButtonSubcollections() {\n        var $subcollections = $(\n          \".subcollection-links--buttons\",\n          this.$container\n        );\n        if ($subcollections.css(\"display\") == \"flex\") {\n          var limit = 4;\n          var $btns = $subcollections.find(\".btn\");\n          if (\n            $btns.length > limit &&\n            $subcollections.find(\".subcollection-links__expander\").length === 0\n          ) {\n            $btns.slice(limit - 1).hide();\n            $(\n              '<a href=\"#\" class=\"btn btn--tertiary subcollection-links__expander\">'\n            )\n              .text(theme.strings.collections_general_see_all_subcollections)\n              .appendTo($subcollections)\n              .on(\"click\", function (evt) {\n                evt.preventDefault();\n                $(this).siblings().show();\n                $(this).remove();\n              });\n          }\n        } else if (\n          $subcollections.find(\".subcollection-links__expander\").length\n        ) {\n          $subcollections\n            .find(\".subcollection-links__expander\")\n            .siblings()\n            .show();\n          $subcollections.find(\".subcollection-links__expander\").remove();\n        }\n      },\n    };\n  })();\n\n  theme.CustomRowSection = new (function () {\n    this.onSectionLoad = function (container) {\n      theme.VideoManager.onSectionLoad(container);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.VideoManager.onSectionUnload(container);\n    };\n  })();\n\n  theme.FeaturedCollectionSection = new (function () {\n    this.onSectionLoad = function (container) {\n      var $carousels = theme.loadCarousels(container);\n      // carousels load blocks after init\n      if ($carousels.length === 0) {\n        theme.ProductBlockManager.loadImages(container);\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n      theme.unloadCarousels(container);\n    };\n  })();\n\n  theme.FeaturedCollectionsSection = new (function () {\n    this.onSectionLoad = function (container) {\n      var $carousels = theme.loadCarousels(container);\n      // carousels load blocks after init\n      if ($carousels.length === 0) {\n        theme.ProductBlockManager.loadImages(container);\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n      theme.unloadCarousels(container);\n    };\n  })();\n\n  theme.FeaturedProductSection = new (function () {\n    this.onSectionLoad = function (container) {\n      // init gallery (before product form - so it can respond to variant images)\n      theme.initProductGallery(container);\n\n      // init product form\n      $(\".product-form\", container).trigger(\"load-product-form\");\n\n      theme.ProductBlockManager.loadImages(container);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n      theme.destroyProductGallery(container);\n      $(\".product-form\", container).trigger(\"unload-product-form\");\n      $(\".slideshow\", container).slick(\"unslick\");\n    };\n  })();\n\n  theme.FooterSection = new (function () {\n    this.onSectionLoad = function (container) {\n      $(\".disclosure\", container).each(function () {\n        $(this).data(\"disclosure\", new theme.Disclosure($(this)));\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $(\".disclosure\", container).each(function () {\n        $(this).data(\"disclosure\").unload();\n      });\n    };\n  })();\n\n  theme.GallerySection = new (function () {\n    this.onSectionLoad = function (container) {\n      var $carouselGallery = $(\".gallery--mobile-carousel\", container);\n\n      // Header carousel\n      if (!$carouselGallery.length) {\n        var $carouselGallery = $(\".gallery--header-carousel\", container);\n      }\n\n      if ($carouselGallery.length) {\n        var assessCarouselFunction = function assessCarouselFunction() {\n          var isCarousel = $carouselGallery.hasClass(\"slick-slider\"),\n            shouldShowCarousel = $(window).width() < 768;\n\n          // Header carousel\n          if ($carouselGallery.hasClass(\"gallery--header-carousel\")) {\n            shouldShowCarousel = true;\n          }\n\n          if (!shouldShowCarousel) {\n            $(\".lazyload--manual\", $carouselGallery)\n              .removeClass(\"lazyload--manual\")\n              .addClass(\"lazyload\");\n          }\n\n          if (isCarousel && !shouldShowCarousel) {\n            // Destroy carousel\n\n            // - unload slick\n            $carouselGallery.slick(\"unslick\").off(\"init\");\n            $carouselGallery\n              .find(\"a, .gallery__item\")\n              .removeAttr(\"tabindex\")\n              .removeAttr(\"role\");\n\n            // - re-row items\n            var rowLimit = $carouselGallery.data(\"grid\");\n            var $currentRow = null;\n            $carouselGallery.find(\".gallery__item\").each(function (index) {\n              if (index % rowLimit === 0) {\n                $currentRow = $('<div class=\"gallery__row\">').appendTo(\n                  $carouselGallery\n                );\n              }\n              $(this).appendTo($currentRow);\n            });\n          } else if (!isCarousel && shouldShowCarousel) {\n            // Create carousel\n\n            // - de-row items\n            $carouselGallery.find(\".gallery__item\").appendTo($carouselGallery);\n            $carouselGallery.find(\".gallery__row\").remove();\n\n            // - init carousel\n            $carouselGallery\n              .on(\"init\", function () {\n                $(\".lazyload--manual\", this)\n                  .removeClass(\"lazyload--manual\")\n                  .addClass(\"lazyload\");\n              })\n              .slick({\n                autoplay: false,\n                fade: false,\n                infinite: true,\n                useTransform: true,\n                arrows: false,\n                dots: true,\n                customPaging: function customPaging(slider, i) {\n                  return (\n                    '<button class=\"custom-dot\" type=\"button\" data-role=\"none\" role=\"button\" tabindex=\"0\">' +\n                    '<svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" width=\"30px\" height=\"30px\" viewBox=\"0 0 30 30\" xml:space=\"preserve\">' +\n                    '<circle class=\"circle-one\" cx=\"15\" cy=\"15\" r=\"13\" />' +\n                    '<circle class=\"circle-two\" cx=\"15\" cy=\"15\" r=\"13\" />' +\n                    \"</svg>\" +\n                    \"</button>\"\n                  );\n                },\n                rtl: document.querySelector(\"html[dir=rtl]\") ? true : false,\n              });\n          }\n        };\n\n        assessCarouselFunction();\n        $(window).on(\n          \"debouncedresize.themeSection\" + container.id,\n          assessCarouselFunction\n        );\n      }\n\n      // Tidier typography\n      $(\".overlay-text__title, .overlay-text__rte\", container).each(\n        function () {\n          theme.avoidUnecessaryOrphans(this);\n        }\n      );\n    };\n\n    this.onSectionUnload = function (container) {\n      $(window).off(\".themeSection\" + container.id);\n      $(\".slick-slider\", container).each(function () {\n        $(this).slick(\"unslick\").off(\"init\");\n      });\n    };\n\n    this.onBlockSelect = function (block) {\n      var blockSlideIndex = $(block).data(\"slick-index\");\n      $(block)\n        .closest(\".slick-slider\")\n        .each(function () {\n          $(this).slick(\"slickGoTo\", blockSlideIndex);\n        });\n    };\n  })();\n\n  theme.HeaderSection = new (function () {\n    this.onSectionLoad = function (container) {\n      // block focus events targeted at the social icons\n      $(container).on(\n        \"focusin.headerSection focusout.headerSection\",\n        \".social-links\",\n        function (e) {\n          return false;\n        }\n      );\n\n      // asses focus, and handle transitioning between child elements with a timeout\n      var searchFocusOutTimeoutId = -1;\n      $(container).on(\n        \"focusin.headerSection focusout.headerSection\",\n        \".search-box\",\n        function (e) {\n          if (e.type == \"focusin\") {\n            clearTimeout(searchFocusOutTimeoutId);\n            $(this).closest(\".search-box\").addClass(\"focus\");\n          } else {\n            clearTimeout(searchFocusOutTimeoutId);\n            searchFocusOutTimeoutId = setTimeout(\n              function () {\n                $(this).closest(\".search-box\").removeClass(\"focus\");\n              }.bind(this),\n              200\n            );\n          }\n        }\n      );\n\n      // Toggle search\n      $(container).on(\n        \"click.headerSection\",\n        \".show-search-link, .main-search__close\",\n        function (e) {\n          if ($(\"body\").toggleClass(\"show-search\").hasClass(\"show-search\")) {\n            setTimeout(function () {\n              $(\".main-search__input:first\").focus();\n            }, 500);\n            $(\".main-search__suggestions .lazyload--manual\")\n              .removeClass(\"lazyload--manual\")\n              .addClass(\"lazyload\");\n          } else {\n            $(\".show-search-link:first\").focus();\n          }\n          return false;\n        }\n      );\n\n      // Close search on escape\n      $(container).on(\n        \"keyup.headerSection\",\n        \".main-search__input\",\n        function (e) {\n          if (e.keyCode == 27) {\n            $(\".main-search__close\").click();\n          }\n        }\n      );\n\n      /// Live search\n      var $liveSearchContainer = $(\n        '.main-search[data-live-search=\"true\"]',\n        container\n      );\n      if ($liveSearchContainer.length) {\n        var searchTimeoutThrottle = 500,\n          searchTimeoutID = -1,\n          currReqObj = null,\n          resultLimit = 8,\n          showPrice = $liveSearchContainer.data(\"live-search-price\"),\n          showVendor = $liveSearchContainer.data(\"live-search-vendor\"),\n          includeMeta = $liveSearchContainer.data(\"live-search-meta\"),\n          perRowMob = $liveSearchContainer.data(\"per-row-mob\");\n\n        $(container).on(\n          \"keyup.headerSection change.headerSection\",\n          \".main-search__input\",\n          function () {\n            var $searchContainer = $(\".main-search\"),\n              $resultsBox = $searchContainer.find(\".main-search__results\"),\n              valueToSearch = $(this).val();\n\n            //Only search if search string longer than 2, and it has changed\n            if (\n              valueToSearch.length > 2 &&\n              valueToSearch != $(this).data(\"oldval\")\n            ) {\n              //Reset previous value\n              $(this).data(\"oldval\", valueToSearch);\n\n              // Kill outstanding ajax request\n              if (currReqObj != null) {\n                currReqObj.abort();\n              }\n\n              // Kill previous search\n              clearTimeout(searchTimeoutID);\n\n              // Create URL for full search results\n              var $form = $(this).closest(\"form\");\n              var linkURL =\n                $form.attr(\"action\") +\n                ($form.attr(\"action\").indexOf(\"?\") > -1 ? \"&\" : \"?\") +\n                $form.serialize();\n\n              //Show loading\n              $searchContainer\n                .removeClass(\n                  \"main-search--has-results main-search--results-on-multiple-lines main-search--no-results\"\n                )\n                .addClass(\"main-search--loading\");\n              if ($(\".main-search__results-spinner\").length === 0) {\n                $resultsBox.html(\n                  '<div class=\"main-search__results-spinner\"><div class=\"loading-spinner\"></div></div>'\n                );\n              }\n\n              // Do next search (in X milliseconds)\n              searchTimeoutID = setTimeout(function () {\n                var ajaxUrl, ajaxData;\n                if (theme.Shopify.features.predictiveSearch) {\n                  // use the API\n                  ajaxUrl = theme.routes.predictive_search_url;\n                  ajaxData = {\n                    q: valueToSearch,\n                    section_id: \"predictive-search\",\n                    resources: {\n                      type: $form.find('input[name=\"type\"]').val(),\n                      limit: resultLimit,\n                      options: {\n                        unavailable_products: \"last\",\n                        fields: includeMeta\n                          ? \"title,product_type,variants.title,vendor,tag,variants.sku\"\n                          : \"title,product_type,variants.title,vendor\",\n                      },\n                    },\n                  };\n                } else {\n                  // use the theme template fallback\n                  ajaxUrl = linkURL;\n                  ajaxData = {\n                    section_id: \"main-search\",\n                  };\n                }\n                //Ajax hit on search page\n                currReqObj = $.ajax({\n                  url: ajaxUrl,\n                  data: ajaxData,\n                  dataType: \"html\",\n                  success: function success(response) {\n                    var $resultsList = null;\n                    if (!theme.Shopify.features.predictiveSearch) {\n                      $resultsList = $(\"<div>\" + response + \"</div>\").find(\n                        '[data-section-type=\"search-template\"] .product-list'\n                      );\n                    } else {\n                      $resultsList = $(response).find(\".product-list\");\n                    }\n\n                    // reset previous contents\n                    currReqObj = null;\n                    theme.ProductBlockManager.unloadImages($resultsBox);\n                    $searchContainer.removeClass(\n                      \"main-search--has-results main-search--results-on-multiple-lines main-search--no-results\"\n                    );\n                    $resultsBox.empty();\n\n                    var $resultsProducts = $(\n                      '<div class=\"main-search__results__products collection-listing\"><div></div></div>'\n                    );\n                    var $resultsPages = $(\n                      '<div class=\"main-search__results__pages\">'\n                    );\n\n                    $resultsProducts.children()[0].className =\n                      $resultsList[0].className;\n\n                    $resultsList\n                      .find(\n                        \".product-block:not(.collection-block):not(.page-block)\"\n                      )\n                      .slice(0, resultLimit)\n                      .addClass(\"main-search-result\")\n                      .each(function () {\n                        $(this).find(\".btn.quickbuy-toggle\").remove();\n                        $(this)\n                          .find(\".quickbuy-toggle\")\n                          .removeClass(\"quickbuy-toggle\");\n                        if (!showPrice) {\n                          $(this).find(\".product-price\").remove();\n                        }\n                        if (!showVendor) {\n                          $(this).find(\".vendor\").remove();\n                        }\n                      })\n                      .appendTo($resultsProducts.children());\n\n                    $resultsList\n                      .find(\".product-block.page-block\")\n                      .each(function () {\n                        var $item = $(\n                          '<a class=\"main-search-result main-search-result--page\">'\n                        ).attr(\"href\", $(this).find(\"a:first\").attr(\"href\"));\n                        $('<div class=\"main-search-result__text\">')\n                          .text($(this).find(\".page-block__title\").text())\n                          .appendTo($item);\n                        $resultsPages.append($item);\n                      });\n\n                    $searchContainer.removeClass(\"main-search--loading\");\n\n                    var areProducts =\n                        $resultsProducts.find(\".main-search-result:first\")\n                          .length > 0,\n                      arePages =\n                        $resultsPages.find(\".main-search-result:first\").length >\n                        0;\n                    if (areProducts || arePages) {\n                      // Numerous results\n                      $searchContainer.addClass(\"main-search--has-results\");\n                      $searchContainer.toggleClass(\n                        \"main-search--results-on-multiple-lines\",\n                        $resultsProducts.find(\".product-block\").length > 4\n                      );\n                      if (areProducts) {\n                        $resultsBox.append($resultsProducts);\n                        theme.ProductBlockManager.loadImages($resultsProducts);\n                      }\n                      if (arePages) {\n                        $('<h6 class=\"main-search-result__heading\">')\n                          .html(theme.strings.general_quick_search_pages)\n                          .prependTo($resultsPages);\n                        $resultsBox.append($resultsPages);\n                      }\n                      $(\n                        '<a class=\"main-search__results-all-link button altcolour\">'\n                      )\n                        .attr(\"href\", linkURL)\n                        .html(theme.strings.layout_live_search_see_all)\n                        .appendTo($resultsBox);\n\n                      theme.initAnimateOnScroll();\n                    } else {\n                      // No results - show nothing\n                      $searchContainer.addClass(\"main-search--no-results\");\n                      $('<div class=\"main-search__empty-message\">')\n                        .html(theme.strings.general_quick_search_no_results)\n                        .appendTo($resultsBox);\n                    }\n                  },\n                  error: function error(response) {\n                    console.log(\"Error fetching results\");\n                  },\n                });\n              }, searchTimeoutThrottle);\n            } else if ($(this).val().length <= 2) {\n              // Deleted text? Abandon search-in-progress\n              $(this).data(\"oldval\", valueToSearch);\n              if (currReqObj != null) {\n                currReqObj.abort();\n              }\n              clearTimeout(searchTimeoutID);\n\n              // Clear results\n              $searchContainer.removeClass(\n                \"main-search--has-results main-search--results-on-multiple-lines main-search--loading\"\n              );\n              $resultsBox.empty();\n            }\n          }\n        );\n      }\n\n      // nav\n      theme.Navigation.init({\n        nav: $(\".navigation--main\", container),\n        mobileNavHtml: $(\n          \".mobile-navigation-drawer-template\",\n          container\n        ).html(),\n        proxyTier1Nav: $(\".navigation--left\", container),\n      });\n\n      if (theme.inlineNavigationCheck) {\n        theme.inlineNavigationCheck();\n        $(window).on(\n          \"debouncedresize.headerSection\",\n          theme.inlineNavigationCheck\n        );\n      } else if (document.querySelector(\"#InlineNavigationCheckScript\")) {\n        // if just enabled in theme editor but not evaluated\n        eval(document.querySelector(\"#InlineNavigationCheckScript\").innerHTML);\n      }\n\n      // set anything that alters based on contents/viewport/scroll, etc\n      this.section = document.querySelector(\".section-header\");\n      this.transparentPageheader = document.querySelector(\n        \".pageheader--transparent-permitted\"\n      );\n\n      this.functions.setTransparency.call(this);\n      this.functions.setSticky.call(this);\n      this.functions.setHeaderHeightProperty.call(this);\n\n      $(window).on(\n        \"scroll.headerSection\",\n        this.functions.afterScroll.bind(this)\n      );\n      $(window).on(\n        \"debouncedresize.headerSection\",\n        this.functions.afterResize.bind(this)\n      );\n\n      // account / localization (after mobile nav initialises)\n      $(\".disclosure\", container).each(function () {\n        $(this).data(\"disclosure\", new theme.Disclosure($(this)));\n      });\n\n      $(\".mobile-navigation-drawer .disclosure\").each(function () {\n        $(this).data(\"disclosure\", new theme.Disclosure($(this)));\n      });\n\n      // reveal cart drawer\n      if (\n        theme.settings.cart_type == \"drawer\" &&\n        document.querySelector(\".cart-drawer\")\n      ) {\n        $(container).on(\"click.headerSection\", \".cart-link\", (evt) => {\n          evt.preventDefault();\n          document.dispatchEvent(\n            new CustomEvent(\"theme:open-cart-drawer\", {\n              bubbles: true,\n              cancelable: false,\n            })\n          );\n        });\n      }\n\n      // listen to cart changes\n      $(document).on(\"theme:cartchanged.headerSection\", function () {\n        $.getJSON(location.origin + \"?sections=header\", function (data) {\n          var cartSummarySelectors = [\"#pageheader .logo-area__right__inner\"];\n          for (var i = 0; i < cartSummarySelectors.length; i++) {\n            var $newCartObj = $(\"<div>\" + data.header + \"</div>\")\n              .find(cartSummarySelectors[i])\n              .first();\n            var $currCart = $(cartSummarySelectors[i]);\n            $currCart.html($newCartObj.html());\n          }\n        });\n      });\n\n      // init mobile nav again if it's open and this is a reload\n      if (Shopify.designMode && $(\"body\").hasClass(\"reveal-mobile-nav\")) {\n        theme.openMobileNav();\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      $(container).off(\".headerSection\");\n      $(document).off(\".headerSection\");\n      $(window).off(\".headerSection\");\n      $(\".disclosure\", container).each(function () {\n        $(this).data(\"disclosure\").unload();\n      });\n      $(\".mobile-navigation-drawer .disclosure\").each(function () {\n        $(this).data(\"disclosure\").unload();\n      });\n      theme.Navigation.destroy(\n        $(\".navigation\", container),\n        $(\".navigation--left\", container)\n      );\n    };\n\n    this.functions = {\n      afterScroll: function afterScroll() {\n        this.functions.setTransparency.call(this);\n      },\n\n      afterResize: function afterResize() {\n        this.functions.setSticky.call(this);\n        this.functions.setHeaderHeightProperty.call(this);\n      },\n\n      setTransparency: function setTransparency() {\n        if (this.transparentPageheader) {\n          var bar = document.querySelector(\".section-announcement-bar\"),\n            scrollThreshold = bar ? bar.offsetTop + bar.clientHeight : 0;\n          if (!this.isSticky || window.scrollY <= scrollThreshold) {\n            this.transparentPageheader.classList.add(\"pageheader--transparent\");\n          } else {\n            this.transparentPageheader.classList.remove(\n              \"pageheader--transparent\"\n            );\n          }\n        }\n      },\n\n      setSticky: function setSticky() {\n        this.isSticky =\n          getComputedStyle(this.section).position === \"sticky\" ||\n          getComputedStyle(this.section).position === \"-webkit-sticky\";\n      },\n\n      setHeaderHeightProperty: function setHeaderHeightProperty() {\n        var headerHeight = 0,\n          stickyHeaderHeight = 0;\n        if (this.section) {\n          headerHeight = Math.ceil(this.section.clientHeight);\n          if (this.isSticky) {\n            stickyHeaderHeight = headerHeight;\n          }\n        }\n        document.documentElement.style.setProperty(\n          \"--theme-header-height\",\n          headerHeight + \"px\"\n        );\n        document.documentElement.style.setProperty(\n          \"--theme-sticky-header-height\",\n          stickyHeaderHeight + \"px\"\n        );\n      },\n    };\n  })();\n\n  theme.ImageWithTextOverlaySection = new (function () {\n    var _ = this;\n\n    _.checkForHeaderHeightSubtraction = function () {\n      $(\n        \".section-image-with-text-overlay .height--full-minus-header-height\"\n      ).each(function () {\n        var height = $(window).height();\n        // transparent header & top section? slightly different calculation\n        if (\n          document.querySelector(\".pageheader--transparent-permitted\") &&\n          !this.closest(\".shopify-section\").previousElementSibling\n        ) {\n          document\n            .querySelectorAll(\n              \".section-store-messages, .section-announcement-bar\"\n            )\n            .forEach((el) => {\n              height -= el.clientHeight;\n            });\n        } else {\n          height -= document.querySelector(\".section-header\").clientHeight;\n        }\n        $(\".rimage-outer-wrapper, .placeholder-image\", this).height(height);\n      });\n    };\n\n    this.onSectionLoad = function (container) {\n      $(\".height--full\", container).each(function () {\n        if ($(this).closest(\".section-image-with-text-overlay\").index() == 0) {\n          $(this).addClass(\"height--full-minus-header-height\");\n          _.checkForHeaderHeightSubtraction();\n          $(window)\n            .off(\"debouncedresize.imageWithTextOverlaySection\")\n            .on(\n              \"debouncedresize.imageWithTextOverlaySection\",\n              _.checkForHeaderHeightSubtraction\n            );\n        }\n      });\n\n      // Tidier typography\n      $(\".overlay-text__title, .overlay-text__rte\", container).each(\n        function () {\n          theme.avoidUnecessaryOrphans(this);\n        }\n      );\n    };\n\n    this.onSectionUnload = function (container) {\n      $(window).off(\".imageWithTextOverlaySection\");\n    };\n  })();\n\n  theme.ListCollectionsTemplateSection = new (function () {\n    this.onSectionLoad = function (container) {\n      theme.ProductBlockManager.loadImages(container);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n    };\n  })();\n\n  theme.ProductTemplateSection = new (function () {\n    this.onSectionLoad = function (container) {\n      /// Init store availability if applicable\n      if ($(\"[data-store-availability-container]\", container).length) {\n        this.storeAvailability = new theme.StoreAvailability(\n          $(\"[data-store-availability-container]\", container)[0]\n        );\n      }\n\n      // init gallery (before product form - so it can respond to variant images)\n      theme.initProductGallery(container);\n\n      // init product form\n      $(\".product-form\", container).trigger(\"load-product-form\");\n\n      theme.ProductBlockManager.loadImages(container);\n\n      // click review rating under title\n      $(\".theme-product-reviews\", container).on(\"click\", \"a\", function () {\n        $(\"html,body\").animate(\n          {\n            scrollTop: $($(this).attr(\"href\")).offset().top,\n          },\n          1000\n        );\n        return false;\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.ProductBlockManager.unloadImages(container);\n      theme.destroyProductGallery(container);\n      $(\".product-form\", container).trigger(\"unload-product-form\");\n      $(\".theme-product-reviews\", container).off(\"click\");\n      if (this.storeAvailability) {\n        this.storeAvailability.onSectionUnload();\n      }\n    };\n  })();\n\n  theme.ScrollingBannerSection = new (function () {\n    this.onSectionLoad = function (target) {\n      document.fonts.ready.then(() =>\n        target.querySelector(\".marquee\").classList.add(\"marquee--animate\")\n      );\n      target.querySelectorAll(\".lazyload\").forEach((el) => {\n        lazySizes.loader.unveil(el);\n      });\n    };\n  })();\n\n  theme.SearchTemplateSection = new (function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n\n      this.filterer = new theme.LoadFilterer(this);\n    };\n\n    this.onSectionUnload = function () {\n      this.filterer.destroy();\n    };\n  })();\n\n  theme.SlideshowSection = new (function () {\n    var _ = this;\n\n    _.checkForHeaderHeightSubtraction = function () {\n      $(\".section-slideshow .height--full-minus-header-height\").each(\n        function () {\n          var height = $(window).height();\n          // transparent header & top section? slightly different calculation\n          if (\n            document.querySelector(\".pageheader--transparent-permitted\") &&\n            !this.closest(\".shopify-section\").previousElementSibling\n          ) {\n            document\n              .querySelectorAll(\n                \".section-store-messages, .section-announcement-bar\"\n              )\n              .forEach((el) => {\n                height -= el.clientHeight;\n              });\n          } else {\n            height -= document.querySelector(\".section-header\").clientHeight;\n          }\n          $(\".rimage-outer-wrapper, .placeholder-image\", this).height(height);\n        }\n      );\n    };\n\n    this.onSectionLoad = function (container) {\n      $(\".slideshow\", container).each(function () {\n        var slideshowSpeed = $(this).data(\"transition\") === \"instant\" ? 0 : 800;\n        var autoplaySpeed = $(this).data(\"autoplay-speed\") * 1000;\n\n        if (\n          $(this).find(\".height--full\").length &&\n          $(this).closest(\".section-slideshow\").index() == 0\n        ) {\n          $(this).addClass(\"height--full-minus-header-height\");\n          _.checkForHeaderHeightSubtraction();\n          $(window)\n            .off(\"debouncedresize.slideshowSection\")\n            .on(\n              \"debouncedresize.slideshowSection\",\n              _.checkForHeaderHeightSubtraction\n            );\n        }\n        $(this)\n          .on(\"init\", function () {\n            $(\".lazyload--manual\", this)\n              .removeClass(\"lazyload--manual\")\n              .addClass(\"lazyload\");\n          })\n          .slick({\n            autoplay: $(this).data(\"autoplay\"),\n            fade: $(this).data(\"transition\") !== \"slide\",\n            speed: slideshowSpeed,\n            autoplaySpeed: autoplaySpeed,\n            arrows: $(this).data(\"navigation\") === \"arrows\",\n            dots: $(this).data(\"navigation\") === \"dots\",\n            pauseOnHover: false,\n            infinite: true,\n            useTransform: true,\n            prevArrow:\n              '<button type=\"button\" class=\"slick-prev\" aria-label=\"' +\n              theme.strings.previous +\n              '\">' +\n              theme.icons.chevronLeft +\n              \"</button>\",\n            nextArrow:\n              '<button type=\"button\" class=\"slick-next\" aria-label=\"' +\n              theme.strings.next +\n              '\">' +\n              theme.icons.chevronRight +\n              \"</button>\",\n            customPaging: function customPaging(slider, i) {\n              return (\n                '<button class=\"custom-dot\" type=\"button\" data-role=\"none\" role=\"button\" tabindex=\"0\">' +\n                '<svg xmlns=\"http://www.w3.org/2000/svg\" x=\"0px\" y=\"0px\" width=\"30px\" height=\"30px\" viewBox=\"0 0 30 30\" xml:space=\"preserve\">' +\n                '<circle class=\"circle-one\" cx=\"15\" cy=\"15\" r=\"13\" />' +\n                '<circle class=\"circle-two\" cx=\"15\" cy=\"15\" r=\"13\" style=\"animation-duration: '.concat(\n                  autoplaySpeed + slideshowSpeed,\n                  'ms\" />'\n                ) +\n                \"</svg>\" +\n                \"</button>\"\n              );\n            },\n            rtl: document.querySelector(\"html[dir=rtl]\") ? true : false,\n            responsive: [\n              {\n                breakpoint: 768,\n                settings: {\n                  arrows: false,\n                  dots: $(this).data(\"navigation\") !== \"none\",\n                },\n              },\n            ],\n          })\n          .on(\"beforeChange\", function (event, slick, currentSlide) {\n            if (\n              $(this).data(\"transition\") === \"slide_fade\" ||\n              $(this).data(\"transition\") === \"zoom\"\n            ) {\n              var $outgoingSlide = $(slick.$slides.get(currentSlide));\n              $outgoingSlide.addClass(\"slick--leaving\");\n            }\n          })\n          .on(\"afterChange\", function (event, slick) {\n            $(slick.$slides)\n              .filter(\".slick--leaving\")\n              .removeClass(\"slick--leaving\");\n          });\n      });\n\n      // Tidier typography\n      $(\".overlay-text__title, .overlay-text__rte\", container).each(\n        function () {\n          theme.avoidUnecessaryOrphans(this);\n        }\n      );\n    };\n\n    this.onSectionUnload = function (container) {\n      $(\".slick-slider\", container).slick(\"unslick\").off(\"init\");\n      $(window).off(\".slideshowSection\");\n    };\n\n    this.onBlockSelect = function (container) {\n      $(container)\n        .closest(\".slick-slider\")\n        .slick(\"slickGoTo\", $(container).data(\"slick-index\"))\n        .slick(\"slickPause\");\n    };\n\n    this.onBlockDeselect = function (container) {\n      $(container).closest(\".slick-slider\").slick(\"slickPlay\");\n    };\n  })();\n\n  theme.TestimonialsSection = new (function () {\n    this.onSectionLoad = function (container) {\n      this.namespace = theme.namespaceFromSection(container);\n      this.$testimonialContainer = $(\".testimonial-list\", container);\n\n      this.$testimonialContainer\n        .find(\".testimonial-list__inner\")\n        .on(\"init\", function () {\n          $(\".lazyload--manual\", this)\n            .removeClass(\"lazyload--manual\")\n            .addClass(\"lazyload\");\n        })\n        .slick({\n          fade: this.$testimonialContainer.hasClass(\n            \"testimonial-list--with-images\"\n          ),\n          slidesToShow: this.$testimonialContainer.hasClass(\n            \"testimonial-list--without-images\"\n          )\n            ? 2\n            : 1,\n          autoplay: this.$testimonialContainer.data(\"autoplay\"),\n          autoplaySpeed: this.$testimonialContainer.data(\"autoplay-speed\"),\n          dots: false,\n          arrows: true,\n          appendArrows: this.$testimonialContainer.find(\n            \".testimonial-list__controls\"\n          ),\n          prevArrow:\n            '<button type=\"button\" class=\"slick-prev\" aria-label=\"' +\n            theme.strings.previous +\n            '\">' +\n            theme.icons.chevronLeft +\n            \"</button>\",\n          nextArrow:\n            '<button type=\"button\" class=\"slick-next\" aria-label=\"' +\n            theme.strings.next +\n            '\">' +\n            theme.icons.chevronRight +\n            \"</button>\",\n          rtl: document.querySelector(\"html[dir=rtl]\") ? true : false,\n          responsive: [\n            {\n              breakpoint: 768,\n              settings: {\n                fade: false,\n                slidesToShow: 1,\n              },\n            },\n          ],\n        });\n    };\n\n    this.onSectionUnload = function (container) {\n      $(\".slick-slider\", container).each(function () {\n        $(this).slick(\"unslick\").off(\"init\");\n      });\n    };\n\n    this.onBlockSelect = function (block) {\n      var blockSlideIndex = $(block).data(\"slick-index\");\n      $(block)\n        .closest(\".slick-slider\")\n        .each(function () {\n          $(this).slick(\"slickGoTo\", blockSlideIndex);\n        });\n    };\n  })();\n\n  // dom ready\n  $(function ($) {\n    var $ = $; // keep this ref local\n\n    $(document).on(\"keyup.themeTabCheck\", function (evt) {\n      if (evt.keyCode === 9) {\n        $(\"body\").addClass(\"tab-used\");\n        $(document).off(\"keyup.themeTabCheck\");\n      }\n    });\n\n    /// Reusable function to expand/contract a div\n    $(document).on(\"click\", \"a[data-toggle-target]\", function (e) {\n      e.preventDefault();\n      var $toggler = $(this),\n        $target = $($(this).data(\"toggle-target\")),\n        $transCont = $target.find(\".toggle-target-container\"),\n        doCollapse = !$target.hasClass(\"toggle-target--hidden\");\n      var transitionDuration =\n        $target.css(\"transition-duration\").indexOf(\"ms\") >= 0\n          ? parseInt($target.css(\"transition-duration\"))\n          : parseFloat($target.css(\"transition-duration\")) * 1000;\n      if (!$target.hasClass(\"toggle-target--in-transition\")) {\n        if (doCollapse) {\n          $toggler.addClass(\"toggle-target-toggler--is-hidden\");\n          $target\n            .addClass(\"toggle-target--in-transition toggle-target--hiding\")\n            .css({\n              height: $transCont.outerHeight() + \"px\",\n              opacity: 1,\n            });\n          setTimeout(function () {\n            $target.css({\n              height: 0,\n              opacity: 0,\n            });\n            setTimeout(function () {\n              $target\n                .addClass(\"toggle-target--hidden\")\n                .removeClass(\n                  \"toggle-target--in-transition toggle-target--hiding\"\n                );\n              $target.css({\n                height: \"\",\n                opacity: \"\",\n              });\n            }, transitionDuration);\n          }, 10);\n        } else {\n          $toggler.removeClass(\"toggle-target-toggler--is-hidden\");\n          $target\n            .addClass(\"toggle-target--in-transition toggle-target--revealing\")\n            .css({\n              height: 0,\n              opacity: 0,\n              display: \"block\",\n            });\n          setTimeout(function () {\n            $target.css({\n              height: $transCont.outerHeight() + \"px\",\n              opacity: 1,\n            });\n            setTimeout(function () {\n              $target.removeClass(\n                \"toggle-target--hidden toggle-target--in-transition toggle-target--revealing\"\n              );\n              $target.css({\n                height: \"\",\n                opacity: \"\",\n                display: \"\",\n              });\n            }, transitionDuration);\n          }, 10);\n        }\n      }\n    });\n\n    //Redirect dropdowns\n    $(document).on(\"change\", \"select.navdrop\", function () {\n      window.location = $(this).val();\n    });\n\n    /// Mobile nav\n    $(document).on(\"click\", \".mobile-nav-toggle\", function (e) {\n      e.preventDefault();\n      if ($(\"body\").hasClass(\"enable-mobile-nav-transition\")) {\n        // hide nav\n        $(\"body\").removeClass(\"reveal-mobile-nav reveal-mobile-nav--revealed\");\n        setTimeout(function () {\n          $(\"body\").removeClass(\"enable-mobile-nav-transition\");\n        }, 750);\n      } else {\n        // show nav\n        theme.openMobileNav();\n      }\n    });\n\n    theme.openMobileNav = function () {\n      $(\"body\").addClass(\"enable-mobile-nav-transition\");\n      setTimeout(function () {\n        $(\"body\").addClass(\"reveal-mobile-nav\");\n\n        // on reveal, set up internal transition values\n        $(\".mobile-navigation-drawer .disclosure\").each(function () {\n          var $list = $(\".disclosure-list\", this),\n            listHeight = 0;\n          $list.children().each(function () {\n            listHeight += $(this).height();\n          });\n          $(\".disclosure-list\", this).css(\"height\", listHeight + \"px\");\n        });\n\n        // on reveal, lazy load images\n        $(\".mobile-navigation-drawer .lazyload--manual\")\n          .removeClass(\"lazyload--manual\")\n          .addClass(\"lazyload\");\n\n        // on reveal, load product carousel\n        $(\".mobile-navigation-drawer .product-list\").each(function () {\n          theme.ProductBlockManager.loadImages($(this));\n        });\n\n        // after reveal, add class\n        var de = $(\n          \".mobile-navigation-drawer .navigation__tier-1 > .navigation__item > .navigation__link:first\"\n        ).css(\"transition-delay\");\n        var du = $(\n          \".mobile-navigation-drawer .navigation__tier-1 > .navigation__item > .navigation__link:first\"\n        ).css(\"transition-duration\");\n        var delayS =\n          parseFloat(de.split(\",\")[0]) + parseFloat(du.split(\",\")[0]);\n        setTimeout(function () {\n          $(\"body\").addClass(\"reveal-mobile-nav--revealed\");\n        }, delayS * 1000);\n      }, 10);\n    };\n\n    /// General window shade\n    $(\n      '<a href=\"#\" class=\"page-shade\" aria-label=\"' +\n        theme.strings.general_navigation_menu_toggle_aria_label +\n        '\"></a>'\n    )\n      .on(\"click\", function () {\n        $(\"body\").removeClass(\"reveal-mobile-nav show-search\");\n        setTimeout(function () {\n          $(\"body\").removeClass(\"enable-mobile-nav-transition\");\n        }, 750);\n        return false;\n      })\n      .appendTo(\"body\");\n\n    if (theme.settings.quickbuy_style != \"off\") {\n      theme.loadQuickbuy();\n    }\n\n    /// Event for initialising options\n    $(document).on(\"load-product-form\", \".product-form\", function (e) {\n      if ($(this).data(\"product-id\") === \"\") {\n        return;\n      }\n\n      var $productFormContainer = $(this),\n        $productDetail = $(this).closest(\".product-detail\");\n\n      // events on variant change\n\n      $(this).on(\"variantChanged\", function (evt, variant, product) {\n        // change variant status classes\n        var $labelCont = $productDetail.find(\".product-label-list\");\n        console.log(\"variant\", variant);\n        // update price on ATC\n        const atcButtonPrice = document.querySelector(\".product-atc__price\");\n        console.log(theme);\n        console.log(\n          \"money_format_with_product_code_preference\",\n          theme.money_format_with_product_code_preference\n        );\n        if (atcButtonPrice) {\n          atcButtonPrice.textContent = variant\n            ? theme.Shopify.formatMoney(\n                variant.price,\n                theme.money_format_with_product_code_preference\n              )\n            : theme.Shopify.formatMoney(\n                product.variants[0].price,\n                theme.money_format_with_product_code_preference\n              );\n        }\n        $labelCont.find(\".product-label-container\").remove();\n        if (variant) {\n          $labelCont.append(\n            $(\n              \"#variant-label-\".concat(product.id, \"-\").concat(variant.id)\n            ).html()\n          );\n        } else {\n          $labelCont.append(\n            $(\"#variant-label-\".concat(product.id, \"-none\")).html()\n          );\n        }\n\n        // instate DPBs - requires a variant ID, and may be loaded in quick buy\n        const variantSkuField = document.querySelector(\"#product-sku\");\n        if (variantSkuField) {\n          variantSkuField.textContent = variant ? variant.sku : \"\";\n        }\n        if (variant) {\n          $productDetail\n            .find(\".dynamic-payment-button-template\")\n            .each(function () {\n              $(this).after($(this).html()).remove();\n\n              if (Shopify.PaymentButton) {\n                Shopify.PaymentButton.init();\n              }\n            });\n        }\n\n        // update Information line item property\n        if (variant) {\n          document\n            .querySelectorAll(\"input.information-property\")\n            .forEach((el) => {\n              let variantId = el.dataset.variantId;\n              if (variantId == variant.id) {\n                el.disabled = false;\n              } else {\n                el.disabled = true;\n              }\n            });\n        } else {\n          document\n            .querySelectorAll(\"input.information-property\")\n            .forEach((el) => {\n              el.disabled = true;\n            });\n        }\n      });\n\n      // icon-style variant picker to show option beside label\n      var $iconOptionContainers = $productDetail.find(\n        \".option-selector--swatch\"\n      );\n      if (\n        $iconOptionContainers.length &&\n        $(\"body.swatch-style-icon_circle, body.swatch-style-icon_square\").length\n      ) {\n        $iconOptionContainers\n          .find(\".label\")\n          .append('<span class=\"label__value\">');\n        $(this).on(\"variantChanged\", function (evt, variant) {\n          $iconOptionContainers.each(function () {\n            var optionIndex = $(this).data(\"option-index\");\n            if (variant) {\n              var optionValue = variant.options[optionIndex];\n              $(this).find(\".label__value\").text(optionValue);\n            } else {\n              var selectedOption = this.querySelector(\".opt-btn:checked\");\n              if (selectedOption) {\n                $(this).find(\".label__value\").text(selectedOption.value);\n              }\n            }\n          });\n        });\n      }\n\n      // Add a disabled-state to options that have no valid variants, in a descending selection order\n      var $availabilityDependentOptions = $productDetail.find(\n        '.option-selectors[data-disable-unavailable=\"true\"]'\n      );\n      if ($availabilityDependentOptions.length) {\n        $(this).on(\"variantChanged\", function (evt, variant) {\n          var _this2 = this;\n          var productData = theme.OptionManager.getProductData($(this));\n          var optionStatusMap = [];\n          var currentSelectedOptionValues = [];\n\n          $(\n            '.option-selectors[data-disable-unavailable=\"true\"] .option-selector',\n            this\n          ).each(function (index) {\n            var checkedInput = $(this).find(\"input:checked\");\n            var selectedOption = $(this).find(\n              '.cc-select__option[aria-selected=\"true\"]'\n            );\n            var value = checkedInput.length\n              ? checkedInput.val()\n              : selectedOption\n              ? selectedOption.data(\"value\")\n              : null;\n            console.log(\"value\", value);\n            currentSelectedOptionValues.push(value);\n          });\n\n          // build map of options\n          for (\n            var optionIndex = 0;\n            optionIndex < productData.options.length;\n            optionIndex++\n          ) {\n            var optionName = productData.options[optionIndex];\n            var values = {};\n            for (var i = 0; i < productData.variants.length; i++) {\n              var v = productData.variants[i];\n              if (!values[v.options[optionIndex]]) {\n                values[v.options[optionIndex]] = false;\n              }\n            }\n            optionStatusMap.push({\n              name: optionName,\n              values: values,\n            });\n          }\n\n          // go through each option, assume previous option's values are locked in, if any further choices are possible show as available\n          var _loop4 = function _loop4(optionIndex) {\n            var optionName = productData.options[optionIndex];\n            // for this option, find if any variants are available\n            var fixedOptions = [];\n            for (\n              var _i2 = 0;\n              _i2 < currentSelectedOptionValues.length && _i2 < optionIndex;\n              _i2++\n            ) {\n              fixedOptions.push(currentSelectedOptionValues[_i2]);\n            }\n\n            // go through each option value\n            Object.keys(optionStatusMap[optionIndex].values).forEach(\n              (optionValue) => {\n                var fixedOptionsForValue = fixedOptions.map((x) => x);\n                fixedOptionsForValue.push(optionValue);\n\n                // go through all variants\n                var availableVariantExists = false;\n                for (var _i3 = 0; _i3 < productData.variants.length; _i3++) {\n                  var _v = productData.variants[_i3];\n                  // does this variant comply with fixedOptionsForValue? (A blank value means it could be fine.)\n                  var variantComplies = true;\n                  for (var j = 0; j < fixedOptionsForValue.length; j++) {\n                    if (\n                      fixedOptionsForValue[j] &&\n                      fixedOptionsForValue[j] != _v.options[j]\n                    ) {\n                      // note typeless compare - can encounter (16 == '16') here\n                      variantComplies = false;\n                    }\n                  }\n                  if (variantComplies && _v.available) {\n                    availableVariantExists = true;\n                  }\n                }\n                optionStatusMap[optionIndex].values[optionValue] =\n                  availableVariantExists;\n              }\n            );\n          };\n          for (\n            var _optionIndex = 0;\n            _optionIndex < productData.options.length;\n            _optionIndex++\n          ) {\n            _loop4(_optionIndex);\n          }\n\n          for (var _i = 0; _i < optionStatusMap.length; _i++) {\n            var _loop5 = function _loop5(optionValue) {\n              $(\n                '.option-selector[data-selector-type=\"listed\"][data-option-index=\"'.concat(\n                  _i,\n                  '\"] .opt-btn'\n                ),\n                _this2\n              )\n                .filter(function () {\n                  return this.value === optionValue;\n                })\n                .toggleClass(\n                  \"is-unavailable\",\n                  !optionStatusMap[_i].values[optionValue]\n                );\n              $(\n                '.option-selector[data-selector-type=\"dropdown\"][data-option-index=\"'.concat(\n                  _i,\n                  '\"] .cc-select__option'\n                ),\n                _this2\n              )\n                .filter(function () {\n                  return this.dataset.value === optionValue;\n                })\n                .toggleClass(\n                  \"is-unavailable\",\n                  !optionStatusMap[_i].values[optionValue]\n                );\n            };\n            for (var optionValue in optionStatusMap[_i].values) {\n              _loop5(optionValue);\n            }\n          }\n        });\n      }\n\n      // when option selector changes, update validation state, but only after first validation called\n      $productFormContainer.on(\"change\", \".option-selector\", function () {\n        if (\n          $productFormContainer.hasClass(\"product-form--validation-started\")\n        ) {\n          theme.validateProductForm($productFormContainer);\n        }\n      });\n\n      // initialise options\n      theme.OptionManager.initProductOptions($(this));\n    });\n\n    $(document).on(\"unload-product-form\", \".product-form\", function () {\n      $(this).off(\"variantChanged change\");\n      theme.OptionManager.unloadProductOptions($(this));\n    });\n\n    /// Galleries (inc. product page)\n\n    // when variant changes, and the variant has an image\n    $(document).on(\n      \"variantImageSelected\",\n      \".gallery\",\n      function (e, data, isFirstRun) {\n        var $gallery = $(this);\n        var $galleryCollageContainer = $gallery\n          .filter(\n            \".gallery--layout-columns-1, .gallery--layout-columns-2, .gallery--layout-collage-1, .gallery--layout-collage-2\"\n          )\n          .find(\".product-slideshow:not(.slick-slider)\");\n        var collageGroupedImagesChanged = false;\n        var $slideshow = null;\n\n        if ($gallery.attr(\"data-variant-image-grouping-option-index\") !== \"\") {\n          // when images are grouped, we use options instead of variants\n          var pivotOptionIndex = $gallery.attr(\n            \"data-variant-image-grouping-option-index\"\n          );\n          var selectedGroupOption = data.options[pivotOptionIndex];\n          var $thumbnails = $gallery.find(\".thumbnails\");\n          $slideshow = $gallery.find(\".slideshow\");\n\n          // slideshow - filter\n          if ($slideshow.hasClass(\"slick-slider\")) {\n            // is variant image visible?\n            var currentIsVisible = !!$slideshow.find(\n              '.slide[data-media-id=\"'.concat(data.featured_media.id, '\"]')\n            ).length;\n            // filter (By option name: standard. By media id: when multiple variants have same media)\n            $slideshow\n              .slick(\"slickUnfilter\")\n              .slick(\n                \"slickFilter\",\n                '.slide[data-media-id=\"'\n                  .concat(\n                    data.featured_media.id,\n                    '\"], [data-variant-image-group=\"'\n                  )\n                  .concat(\n                    selectedGroupOption\n                      .replace('\"', \"&quot;\")\n                      .replace(/<>/g, \"\"),\n                    '\"]'\n                  )\n              );\n            // weird hack required for Slick\n            $slideshow.find(\".slide\").css({\n              position: \"\",\n              left: \"\",\n              top: \"\",\n              zIndex: \"\",\n              opacity: \"\",\n            });\n            // jump to correct slide immediately after filtering\n            if (!currentIsVisible) {\n              $slideshow.slick(\"slickGoTo\", 0, true); // reset - hack for a bug\n              $slideshow.slick(\n                \"slickGoTo\",\n                $slideshow\n                  .find(\n                    '.slide[data-media-id=\"'.concat(\n                      data.featured_media.id,\n                      '\"]'\n                    )\n                  )\n                  .data(\"slick-index\"),\n                true\n              );\n            }\n          }\n\n          // carousel - add/remove as required\n          if ($thumbnails.hasClass(\"owl-carousel\")) {\n            var $hiddenThumbnails = $gallery.find(\".hidden-thumbnails\");\n            if (!$hiddenThumbnails.length) {\n              $hiddenThumbnails = $(\n                '<div class=\"hidden-thumbnails hidden\">'\n              ).insertAfter($thumbnails);\n            }\n\n            // move to hidden thumbnails container (and show() in case hide() called prior)\n            $thumbnails\n              .find(\".thumbnail\")\n              .show()\n              .each(function () {\n                if (\n                  $(this).attr(\"data-variant-image-group\") !=\n                    selectedGroupOption &&\n                  $(this).attr(\"data-media-id\") != data.featured_media.id\n                ) {\n                  var index = $(this).parent().index();\n                  $(this).appendTo($hiddenThumbnails);\n                  $thumbnails.trigger(\"remove.owl.carousel\", [index]);\n                }\n              });\n\n            // add from hidden thumbnails container\n            $hiddenThumbnails.find(\".thumbnail\").each(function () {\n              if (\n                $(this).attr(\"data-variant-image-group\") ==\n                  selectedGroupOption ||\n                $(this).attr(\"data-media-id\") == data.featured_media.id\n              ) {\n                $(this).show();\n                $thumbnails.trigger(\"add.owl.carousel\", [this]);\n              }\n            });\n            $thumbnails.trigger(\"refresh.owl.carousel\");\n          } else {\n            // show/hide elements\n            $thumbnails.find(\".thumbnail\").each(function () {\n              if (\n                $(this).attr(\"data-variant-image-group\") ==\n                  selectedGroupOption ||\n                $(this).attr(\"data-media-id\") == data.featured_media.id\n              ) {\n                $(this).show();\n              } else {\n                $(this).hide();\n              }\n            });\n          }\n\n          // carousel - visibility by class & moving visible to top (for nth-child styling)\n          if ($galleryCollageContainer.length) {\n            $galleryCollageContainer.find(\".slide\").each(function () {\n              if (\n                $(this).attr(\"data-variant-image-group\") ==\n                  selectedGroupOption ||\n                $(this).attr(\"data-media-id\") == data.featured_media.id\n              ) {\n                if ($(this).hasClass(\"slide--inactive-option\")) {\n                  collageGroupedImagesChanged = true;\n                }\n                $(this).removeClass(\"slide--inactive-option\");\n              } else {\n                if (!$(this).hasClass(\"slide--inactive-option\")) {\n                  collageGroupedImagesChanged = true;\n                }\n                $(this).addClass(\"slide--inactive-option\");\n              }\n            });\n            $galleryCollageContainer\n              .find(\".slide--inactive-option\")\n              .appendTo($galleryCollageContainer);\n          }\n        }\n\n        // select matching thumbnail\n        $gallery\n          .find(\n            '.thumbnails a[data-media-id=\"' +\n              data.featured_media.id +\n              '\"]:first'\n          )\n          .trigger(\"select\");\n\n        // collage - highlight selected, if not first run\n        if ($galleryCollageContainer.length) {\n          var $active = $gallery.find(\n            '.slide[data-media-id=\"' + data.featured_media.id + '\"]:first'\n          );\n          if ($active.length) {\n            if (isFirstRun && !collageGroupedImagesChanged) {\n              // only scroll on first run, no visual highlight\n              theme.scrollToRevealElement($active[0]);\n            } else if (collageGroupedImagesChanged) {\n              // assume first image is highlighted by the change\n              $gallery\n                .find(\".slide--was-highlighted\")\n                .removeClass(\"slide--was-highlighted\");\n              $active.addClass(\"slide--was-highlighted\");\n            } else if (!$active.hasClass(\"slide--was-highlighted\")) {\n              // reset\n              clearTimeout(theme.variantImageFadeTimeout);\n              $gallery\n                .find(\".slide--highlight-on\")\n                .removeClass(\"slide--highlight-on\");\n              $gallery\n                .find(\".slide--highlight-off\")\n                .removeClass(\"slide--highlight-off\");\n              $gallery\n                .find(\".slide--was-highlighted\")\n                .removeClass(\"slide--was-highlighted\");\n\n              // highlight\n              $active\n                .addClass(\"slide--highlight-on slide--was-highlighted\")\n                .siblings()\n                .addClass(\"slide--highlight-off\");\n              theme.variantImageFadeTimeout = setTimeout(function () {\n                $gallery\n                  .find(\".slide--highlight-on\")\n                  .removeClass(\"slide--highlight-on\");\n                $gallery\n                  .find(\".slide--highlight-off\")\n                  .removeClass(\"slide--highlight-off\");\n              }, 1200);\n\n              // scroll if needed\n              theme.scrollToRevealElement($active[0]);\n            }\n          }\n        }\n      }\n    );\n\n    // click main product image (launch gallery)\n    $(document).on(\n      \"click\",\n      \".product-detail .gallery .main-image a.show-gallery\",\n      function () {\n        var images = [],\n          $imgs = $(this)\n            .closest(\".product-slideshow\")\n            .find(\".slide:not(.slide--inactive-option) .show-gallery\"),\n          clickedHref = $(this).attr(\"href\");\n\n        if ($imgs.length) {\n          $imgs.each(function () {\n            var $imgThumb = $(this).find(\".rimage-outer-wrapper\").clone();\n            $imgThumb\n              .find(\".lazyloaded\")\n              .removeClass(\"lazyloaded\")\n              .addClass(\"lazyload\")\n              .parent()\n              .addClass(\"lazyload--placeholder\");\n            images.push({\n              thumbTag: $imgThumb,\n              zoomUrl: $(this).attr(\"href\"),\n            });\n          });\n        } else {\n          var $img = $(this).find(\".rimage-outer-wrapper\").clone();\n          $img\n            .find(\".lazyloaded\")\n            .removeClass(\"lazyloaded\")\n            .addClass(\"lazyload\")\n            .parent()\n            .addClass(\"lazyload--placeholder\");\n          images.push({\n            thumbTag: $img,\n            zoomUrl: $(this).attr(\"href\"),\n          });\n        }\n\n        theme.buildGalleryViewer({\n          images: images,\n          currentImage: clickedHref,\n          prev: theme.icons.chevronLeft,\n          next: theme.icons.chevronRight,\n          close: theme.icons.close,\n        });\n\n        return false;\n      }\n    );\n\n    // load any images that aren't inside a section\n    var $nonSectionedProductLists = $(\n      \".product-list, .collection-listing\"\n    ).filter(function () {\n      return $(this).closest(\"[data-section-type]\").length == 0;\n    });\n    if ($nonSectionedProductLists.length) {\n      theme.ProductBlockManager.loadImages($nonSectionedProductLists);\n    }\n    $(window).on(\"debouncedresize\", function () {\n      setTimeout(function () {\n        theme.ProductBlockManager.afterImagesResized(); // empty param req\n      }, 100); // after third party stuff\n    });\n\n    // forms don't all have correct label attributes\n    $(\"#template label\").each(function () {\n      var $sibinputs = $(this).siblings('input:not([type=\"submit\"]), textarea');\n      if ($sibinputs.length == 1 && $sibinputs.attr(\"id\").length > 0) {\n        $(this).attr(\"for\", $sibinputs.attr(\"id\"));\n      }\n    });\n\n    $(document).on(\"click\", \".quantity-wrapper [data-quantity]\", function () {\n      var adj = $(this).data(\"quantity\") == \"up\" ? 1 : -1;\n      var $qty = $(this).closest(\".quantity-wrapper\").find(\"[name=quantity]\");\n      if ($qty.attr(\"step\")) {\n        adj *= parseInt($qty.attr(\"step\"));\n      }\n      $qty.val(Math.max(1, parseInt($qty.val()) + adj)).trigger(\"change\");\n      return false;\n    });\n\n    /// Responsive tables\n    $(\".responsive-table\").on(\n      \"click\",\n      \".responsive-table__cell-head\",\n      function () {\n        if ($(window).width() < 768) {\n          $(this).closest(\"tr\").toggleClass(\"expanded\");\n          return false;\n        }\n      }\n    );\n\n    // Enhance video sections for overlays\n    if (typeof cc !== \"undefined\" && cc.sections) {\n      for (var sectionKey in cc.sections) {\n        var ccSection = cc.sections[sectionKey];\n        if (ccSection.name === \"video\") {\n          var t = ccSection.section.onSectionLoad;\n          ccSection.section.onSectionLoad = function (container) {\n            // Tidier typography\n            $(\".overlay-text__title, .overlay-text__rte\", container).each(\n              function () {\n                theme.avoidUnecessaryOrphans(this);\n              }\n            );\n            t.call(this, container);\n          };\n        }\n      }\n    }\n\n    /// Register all sections\n    theme.Sections.init();\n    theme.Sections.register(\"header\", theme.HeaderSection, {\n      deferredLoad: false,\n    });\n    theme.Sections.register(\"announcement-bar\", theme.AnnouncementBarSection, {\n      deferredLoad: false,\n    });\n    theme.Sections.register(\"footer\", theme.FooterSection);\n    theme.Sections.register(\"cart-drawer\", theme.CartDrawerSection, {\n      deferredLoad: false,\n    }); // popup makes it hidden on load\n    theme.Sections.register(\"slideshow\", theme.SlideshowSection);\n    theme.Sections.register(\"gallery\", theme.GallerySection);\n    theme.Sections.register(\"testimonials\", theme.TestimonialsSection);\n    theme.Sections.register(\n      \"image-with-text-overlay\",\n      theme.ImageWithTextOverlaySection\n    );\n    theme.Sections.register(\n      \"featured-collection\",\n      theme.FeaturedCollectionSection\n    );\n    theme.Sections.register(\n      \"featured-collections\",\n      theme.FeaturedCollectionsSection\n    );\n    theme.Sections.register(\"map\", theme.MapSection);\n    theme.Sections.register(\"background-video\", theme.VideoManager, {\n      deferredLoadViewportExcess: 800,\n    });\n    theme.Sections.register(\"custom-row\", theme.CustomRowSection);\n    theme.Sections.register(\"featured-product\", theme.FeaturedProductSection);\n    theme.Sections.register(\"scrolling-banner\", theme.ScrollingBannerSection);\n    theme.Sections.register(\"main-product\", theme.ProductTemplateSection, {\n      deferredLoad: false,\n    });\n    theme.Sections.register(\n      \"collection-template\",\n      theme.CollectionTemplateSection,\n      { deferredLoad: false }\n    );\n    theme.Sections.register(\"search-template\", theme.SearchTemplateSection, {\n      deferredLoad: false,\n    });\n    theme.Sections.register(\"blog-template\", theme.BlogTemplateSection, {\n      deferredLoad: false,\n    });\n    theme.Sections.register(\"cart-template\", theme.CartTemplateSection, {\n      deferredLoad: false,\n    });\n    theme.Sections.register(\n      \"list-collections-template\",\n      theme.ListCollectionsTemplateSection,\n      { deferredLoad: false }\n    );\n    theme.Sections.register(\n      \"page-list-collections-template\",\n      theme.ListCollectionsTemplateSection,\n      { deferredLoad: false }\n    );\n    theme.Sections.register(\"contact\", new (function () {})());\n  });\n\n  //Register dynamically pulled in sections\n  $(function ($) {\n    if (cc.sections.length) {\n      cc.sections.forEach((section) => {\n        try {\n          var data = {};\n          if (typeof section.deferredLoad !== \"undefined\") {\n            data.deferredLoad = section.deferredLoad;\n          }\n          if (typeof section.deferredLoadViewportExcess !== \"undefined\") {\n            data.deferredLoadViewportExcess =\n              section.deferredLoadViewportExcess;\n          }\n          theme.Sections.register(section.name, section.section, data);\n        } catch (err) {\n          console.error(\n            \"Unable to register section \".concat(section.name, \".\"),\n            err\n          );\n        }\n      });\n    } else {\n      console.warn(\"Barry: No common sections have been registered.\");\n    }\n  });\n})(theme.jQuery);\n/* Built with Barry v1.0.8 */\n"],
  "mappings": "CAAC,SAAU,EAAG,CACZ,IAAI,EAAK,OAAS,EAEd,GAAK,CACP,SAAU,CAAC,CACb,EAEA,MAAM,gBAAkB,CACtB,KAAM,SAAc,OAAQ,CAC1B,OAAO,GACL,oFACA,UAAY,CACV,MAAM,gBAAgB,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAChD,CACF,CACF,EAEA,OAAQ,SAAgB,OAAQ,CAC9B,OAAO,IAAI,uBAAuB,CACpC,EAEA,wBAAyB,GACzB,uBAAwB,IAExB,WAAY,SAAoB,IAAK,CACnC,aAAa,MAAM,gBAAgB,uBAAuB,EAC1D,MAAM,gBAAgB,wBAA0B,WAAW,UAAY,CACrE,EAAE,KACA,MAAM,OAAO,SAAW,aACxB,CACE,KAAM,GACR,EACA,SAAU,KAAM,CAAC,EACjB,MACF,CACF,EAAG,MAAM,gBAAgB,sBAAsB,CACjD,CACF,EACA,MAAM,QAAU,CACd,YAAa,SAAqB,EAAG,EAAG,CACtC,SAAS,EAAEA,GAAGC,GAAG,CACf,OAAkBD,KAAX,OAAeC,GAAID,EAC5B,CACA,SAAS,EAAEA,GAAGC,GAAGC,GAAGC,GAAG,CACrB,GACIF,GAAI,EAAEA,GAAG,CAAC,EACXC,GAAI,EAAEA,GAAG,GAAG,EACZC,GAAI,EAAEA,GAAG,GAAG,EACb,MAAMH,EAAC,GAAaA,IAAR,KAEZ,MAAO,GACTA,IAAKA,GAAI,KAAK,QAAQC,EAAC,EACvB,IAAIG,GAAIJ,GAAE,MAAM,GAAG,EACnB,OACEI,GAAE,CAAC,EAAE,QAAQ,2BAA4B,KAAOF,EAAC,GAChDE,GAAE,CAAC,EAAID,GAAIC,GAAE,CAAC,EAAI,GAEvB,CACY,OAAO,GAAnB,WAAyB,EAAI,EAAE,QAAQ,IAAK,EAAE,GAC9C,IAAI,EAAI,GACN,EAAI,sBACJ,EAAI,GAAK,KAAK,aAChB,OAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,EAAG,CACrB,IAAK,SACH,EAAI,EAAE,EAAG,CAAC,EACV,MACF,IAAK,qBACH,EAAI,EAAE,EAAG,CAAC,EACV,MACF,IAAK,8BACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MACF,IAAK,8BACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MACF,IAAK,yCACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MACF,IAAK,0CACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MACF,IAAK,0CACH,EAAI,EAAE,EAAG,EAAG,IAAK,EAAE,EACnB,MACF,IAAK,mCACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MACF,IAAK,gCACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,CACxB,CAEA,OAAO,EAAE,QAAQ,EAAG,CAAC,CACvB,EACA,YAAa,SAAqB,iBAAkB,OAAQ,CAC1D,OAAO,iBACH,iBAAiB,QAAQ,oBAAqB,MAAQ,OAAS,KAAK,EACpE,EACN,EACA,MAAO,CACL,UAAW,SAAmB,EAAG,CAC/B,IAAI,EAAI,EAAE,MACR,2FACF,EACA,OAAgB,IAAT,KAAa,EAAE,CAAC,EAAI,IAC7B,EACA,iBAAkB,SAA0B,EAAG,EAAG,CAChD,GAAY,GAAR,KAAW,OAAO,EACtB,GAAgB,GAAZ,SAAe,OAAO,KAAK,eAAe,CAAC,EAC/C,IAAI,EAAI,EAAE,MAAM,sDAAsD,EACtE,GAAY,GAAR,KAAW,CACb,IAAI,EAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAClB,EAAI,EAAE,CAAC,EACT,OAAO,KAAK,eAAe,EAAE,CAAC,EAAI,IAAM,EAAI,CAAC,CAC/C,CACA,OAAO,IACT,EACA,eAAgB,SAAwB,EAAG,CACzC,OAAO,EAAE,QAAQ,YAAa,EAAE,CAClC,CACF,CACF,EACA,MAAM,YAAc,UAAY,CAC9B,IAAI,UAAY,CACd,eAAgB,yBAChB,iBAAkB,2BAClB,gBAAiB,0BACjB,kBAAmB,0BACrB,EAEI,QAAU,CACZ,YAAa,0BACf,EAEA,SAAS,WAAW,YAAa,CAC/B,KAAK,WAAa,YAClB,KAAK,MAAQ,CAAC,EACd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,YAAY,CACnB,CAEA,kBAAW,UAAY,EAAE,OAAO,CAAC,EAAG,WAAW,UAAW,CACxD,gBAAiB,UAA2B,CAC1C,KAAK,MAAQ,CACX,gBAAiB,KAAK,WAAW,KAAK,UAAU,cAAc,EAC9D,kBAAmB,KAAK,WAAW,KAAK,UAAU,gBAAgB,EAClE,iBAAkB,KAAK,WAAW,KAAK,UAAU,eAAe,EAChE,mBAAoB,KAAK,WAAW,KAAK,UAAU,iBAAiB,CACtE,CACF,EAEA,eAAgB,UAA0B,CACxC,KAAK,MAAM,kBAAkB,GAC3B,QACA,SAAU,IAAK,CACb,IAAI,aACF,EAAE,IAAI,aAAa,EAAE,KAAK,eAAe,IAAM,OACjD,EAAE,IAAI,aAAa,EAAE,KAAK,gBAAiB,CAAC,YAAY,EAExD,KAAK,MAAM,gBAAgB,YAAY,QAAQ,WAAW,CAC5D,EAAE,KAAK,IAAI,CACb,CACF,EAEA,gBAAiB,UAA2B,CAC1C,KAAK,MAAM,mBAAmB,GAC5B,QACA,SAAU,IAAK,CACb,IAAI,eAAe,EACnB,KAAK,YAAY,EAAE,IAAI,aAAa,EAAE,KAAK,OAAO,CAAC,CACrD,EAAE,KAAK,IAAI,CACb,CACF,EAEA,YAAa,UAAuB,CAClC,KAAK,MAAM,kBAAkB,GAC3B,WACA,SAAU,IAAK,CACb,IAAI,oBACF,KAAK,WAAW,IAAI,IAAI,aAAa,EAAE,SAAW,EAEhD,qBACF,KAAK,UAAU,CAEnB,EAAE,KAAK,IAAI,CACb,EAEA,KAAK,MAAM,gBAAgB,GACzB,WACA,SAAU,IAAK,CACb,IAAI,aACF,EAAE,IAAI,aAAa,EAAE,IAAI,IAAI,aAAa,EAAE,OAAS,EACnD,UAAY,KAAK,MAAM,gBAAgB,SACzC,QAAQ,WACV,EAEI,WAAa,CAAC,cAChB,KAAK,UAAU,CAEnB,EAAE,KAAK,IAAI,CACb,EAEA,KAAK,WAAW,GACd,QACA,SAAU,IAAK,CACT,IAAI,QAAU,KAClB,KAAK,UAAU,EACf,KAAK,MAAM,kBAAkB,MAAM,EACrC,EAAE,KAAK,IAAI,CACb,EAEA,KAAK,YAAc,SAAU,IAAK,CAChC,IAAI,SAAW,KAAK,WAAW,IAAI,IAAI,MAAM,EAAE,OAAS,EACpD,UAAY,KAAK,MAAM,gBAAgB,SACzC,QAAQ,WACV,EAEI,WAAa,CAAC,UAChB,KAAK,UAAU,CAEnB,EAAE,KAAK,IAAI,EAEX,EAAE,MAAM,EAAE,GAAG,QAAS,KAAK,WAAW,CACxC,EAEA,YAAa,SAAqB,MAAO,CACvC,KAAK,MAAM,iBAAiB,IAAI,KAAK,EACrC,KAAK,WAAW,QAAQ,MAAM,EAAE,OAAO,CACzC,EAEA,UAAW,UAAqB,CAC9B,KAAK,MAAM,gBAAgB,YAAY,QAAQ,WAAW,EAC1D,KAAK,MAAM,kBAAkB,KAAK,gBAAiB,EAAK,CAC1D,EAEA,OAAQ,UAAkB,CACxB,EAAE,MAAM,EAAE,IAAI,QAAS,KAAK,WAAW,EACvC,KAAK,MAAM,mBAAmB,IAAI,EAClC,KAAK,MAAM,kBAAkB,IAAI,EACjC,KAAK,MAAM,gBAAgB,IAAI,EAC/B,KAAK,WAAW,IAAI,CACtB,CACF,CAAC,EAEM,UACT,GAAG,GACF,UAAY,CACX,SAAS,SAAS,SAAU,UAAW,CACrC,IAAI,kBAAoB,GACpB,KAAO,GAEX,OAAO,UAAY,CACjB,aAAa,iBAAiB,EAC9B,kBAAoB,WAAW,SAAU,SAAS,EAE7C,OACH,SAAS,KAAK,EACd,KAAO,GACP,WAAW,UAAY,CACrB,KAAO,EACT,EAAG,SAAS,EAEhB,CACF,CAEA,IAAI,YAAc,SAAS,YAAY,OAAO,EAC9C,YAAY,UAAU,mBAAoB,GAAM,EAAI,EAEpD,OAAO,iBACL,SACA,SAAS,UAAY,CACnB,OAAO,cAAc,WAAW,CAClC,EAAG,GAAG,CACR,CACF,GAAG,EAMH,MAAM,SAAW,SAAU,KAAM,CAC/B,IAAI,KACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,IAClE,UAAY,UAAU,OAAS,EAAI,UAAU,CAAC,EAAI,OAClD,QACJ,OAAO,UAAY,CACjB,IAAI,QAAU,KACZ,KAAO,UACL,MAAQ,UAAiB,CAC3B,QAAU,KACL,WAAW,KAAK,MAAM,QAAS,IAAI,CAC1C,EACI,QAAU,WAAa,CAAC,QAC5B,aAAa,OAAO,EACpB,QAAU,WAAW,MAAO,IAAI,EAC5B,SAAS,KAAK,MAAM,QAAS,IAAI,CACvC,CACF,EAoCA,MAAM,SAAW,IAAK,UAAY,CAChC,IAAI,EAAI,KAER,EAAE,WAAa,CAAC,EAChB,EAAE,wBAA0B,CAAC,EAC7B,EAAE,UAAY,CAAC,EACf,EAAE,4BAA8B,IAChC,EAAE,wBAA0B,GAE5B,EAAE,KAAO,UAAY,CACnB,EAAE,QAAQ,EACP,GAAG,uBAAwB,SAAU,EAAG,CAEvC,IAAI,OAAS,EAAE,4CAA4C,EAAE,MAAM,EAC/D,QACF,EAAE,YAAY,MAAM,CAExB,CAAC,EACA,GAAG,yBAA0B,SAAU,EAAG,CAEzC,IAAI,OAAS,EAAE,4CAA4C,EAAE,MAAM,EAC/D,QACF,EAAE,cAAc,MAAM,CAE1B,CAAC,EACA,GAAG,0BAA2B,SAAU,EAAG,CAE1C,IAAI,OAAS,EAAE,4CAA4C,EAAE,MAAM,EAC/D,QACF,EAAE,eAAe,MAAM,CAE3B,CAAC,EACH,EAAE,MAAM,EAAE,GACR,yFACA,EAAE,wBACJ,EACA,EAAE,wBAA0B,EAC9B,EAGA,EAAE,SAAW,SAAU,KAAM,QAAS,QAAS,CAC7C,EAAE,UAAU,KAAK,CACf,KACA,QACA,yBAA0B,QAAU,QAAQ,UAAY,KACxD,2BAA4B,QAAU,QAAQ,YAAc,IAC9D,CAAC,EAGD,EAAE,uBAAyB,KAAO,IAAI,EAAE,KAAK,UAAY,CAErD,QAAQ,YACP,SAAW,QAAQ,eAAiB,IACrC,CAAC,EAAE,wBAEH,EAAE,YAAY,IAAI,EAElB,EAAE,oBAAoB,KAAM,OAAO,CAEvC,CAAC,CACH,EAGA,EAAE,oBAAsB,SAAU,OAAQ,QAAS,CACjD,EAAE,wBAAwB,KAAK,CAC7B,OACA,2BACE,SAAW,QAAQ,2BACf,QAAQ,2BACR,EAAE,2BACV,CAAC,EACD,EAAE,yBAAyB,EAAI,CACjC,EAGA,EAAE,yBAA2B,SAAU,cAAe,CACpD,GAAI,EAAE,wBAAwB,OAK5B,QAJI,YAAc,EAAE,MAAM,EAAE,UAAU,EACpC,eAAiB,YAAc,EAAE,MAAM,EAAE,OAAO,EAChD,UACE,gBAAkB,GAAO,EAAE,wBAAwB,OAAS,EAAI,EAC3D,EAAI,UAAW,EAAI,EAAE,wBAAwB,OAAQ,IAAK,CACjE,IAAI,OAAS,EAAE,wBAAwB,CAAC,EAAE,OACxC,eACE,EAAE,wBAAwB,CAAC,EAAE,2BAC/B,WAAa,EAAE,MAAM,EAAE,OAAO,EAAE,IAAM,eACtC,OAAS,WAAa,aAAe,WAAa,eACpD,GAAI,CAAC,OAAQ,CACX,IAAI,cACF,WAAa,EAAE,MAAM,EAAE,YAAY,EAAI,eAAiB,EAC1D,OACE,cAAgB,aAAe,cAAgB,cACnD,EAEE,QACC,WAAa,aAAe,cAAgB,kBAG7C,EAAE,YAAY,MAAM,EAEpB,EAAE,wBAAwB,OAAO,EAAG,CAAC,EACrC,IAEJ,CAIE,gBAAkB,IAAQ,EAAE,wBAAwB,SAAW,IACjE,EAAE,wBAA0B,GAC5B,EAAE,MAAM,EAAE,IAAI,6BAA6B,EAE/C,EAGA,EAAE,YAAc,SAAU,OAAQ,CAChC,IAAI,OAAS,OACX,WAAa,EAAE,kBAAkB,MAAM,EACvC,QAAU,GAQZ,GANI,WAAW,QACb,QAAU,WAAW,QAErB,QAAU,WAGR,UAAY,GAAO,CACrB,IAAI,SAAW,CACb,OACA,QACA,yBAA0B,EAAE,MAAM,EAAE,QAAQ,kBAAkB,EAC9D,YAAa,CACX,UAAW,QAAQ,UACnB,yBAA0B,CAAC,CAC7B,CACF,EAMA,GALA,SAAS,YAAY,sBACnB,EAAE,uBAAuB,KAAK,SAAS,WAAW,EACpD,EAAE,WAAW,KAAK,QAAQ,EAGtB,EAAE,MAAM,EAAE,KAAK,YAAY,EAAG,CAEhC,IAAI,WAAa,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,GAAG,EACvD,WAAW,QAAS,WAAc,CAChC,EAAE,QAAQ,EAAE,QAAQ,oBAAqB,CAAC,UAAW,MAAM,CAAC,CAC9D,CAAC,CACH,CAEA,EAAE,iBACA,QACA,gBACA,OACA,SAAS,WACX,EACA,EAAE,iBACA,QACA,2BACA,OACA,SAAS,WACX,EAGI,QAAQ,iBACV,SAAS,yBAAyB,GAChC,yBACA,SAAU,EAAG,CACX,EAAE,iBACA,QACA,kBACA,EAAE,OACF,SAAS,WACX,CACF,CACF,EAEE,QAAQ,mBACV,SAAS,yBAAyB,GAChC,2BACA,SAAU,EAAG,CACX,EAAE,iBACA,QACA,oBACA,EAAE,OACF,SAAS,WACX,CACF,CACF,EAEE,QAAQ,eACV,EAAE,MAAM,EAAE,GAAG,uBAAwB,SAAU,EAAG,CAChD,EAAE,iBACA,QACA,gBACA,EAAE,OACF,SAAS,WACX,CACF,CAAC,EAEC,QAAQ,iBACV,EAAE,MAAM,EAAE,GAAG,yBAA0B,SAAU,EAAG,CAClD,EAAE,iBACA,QACA,kBACA,EAAE,OACF,SAAS,WACX,CACF,CAAC,CAEL,CACF,EAGA,EAAE,cAAgB,SAAU,OAAQ,CAGlC,QAFI,WAAa,EAAE,kBAAkB,MAAM,EACvC,cAAgB,GACX,EAAI,EAAG,EAAI,EAAE,WAAW,OAAQ,IACnC,EAAE,WAAW,CAAC,EAAE,QAAU,SAC5B,cAAgB,GAGpB,GAAI,cAAgB,GAAI,CACtB,IAAI,SAAW,EAAE,WAAW,aAAa,EAwBzC,GAtBA,EAAE,MAAM,EAAE,IAAI,6CAA6C,EAC3D,SAAS,yBAAyB,IAChC,iDACF,EACA,EAAE,iBACA,SAAS,QACT,kBACA,OACA,SAAS,WACX,EACA,EAAE,gCACA,SAAS,YAAY,wBACvB,EACA,EAAE,iBACA,WACA,6BACA,OACA,SAAS,WACX,EACA,EAAE,WAAW,OAAO,aAAa,EAG7B,EAAE,MAAM,EAAE,KAAK,YAAY,EAAG,CAEhC,IAAI,WAAa,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,GAAG,EACvD,WAAW,QAAS,WAAc,CAChC,EAAE,QAAQ,EAAE,QAAQ,sBAAuB,CAAC,UAAW,MAAM,CAAC,CAChE,CAAC,CACH,CACF,KAEE,SAAS,EAAI,EAAG,EAAI,EAAE,wBAAwB,OAAQ,IACpD,GAAI,EAAE,wBAAwB,CAAC,EAAE,QAAU,OAAQ,CACjD,EAAE,wBAAwB,CAAC,EAAE,OAAO,EAAG,CAAC,EACxC,KACF,CAGN,EAEA,EAAE,eAAiB,SAAU,OAAQ,CAEnC,QADI,cAAgB,GACX,EAAI,EAAG,EAAI,EAAE,WAAW,OAAQ,IACnC,EAAE,WAAW,CAAC,EAAE,QAAU,SAC5B,cAAgB,GAGpB,GAAI,cAAgB,GAAI,CACtB,IAAI,SAAW,EAAE,WAAW,aAAa,EACzC,EAAE,iBACA,SAAS,QACT,mBACA,OACA,SAAS,WACX,CACF,CACF,EAGA,EAAE,uBAAyB,SAAU,QAAS,UAAW,SAAU,CACjE,QAAQ,iBAAiB,UAAW,QAAQ,EAC5C,KAAK,yBAAyB,KAAK,CACjC,QACA,UACA,QACF,CAAC,CACH,EAEA,EAAE,gCAAkC,SAAU,yBAA0B,CACtE,yBAAyB,QAAS,KAAQ,CACxC,IAAI,QAAQ,oBAAoB,IAAI,UAAW,IAAI,QAAQ,CAC7D,CAAC,CACH,EAEA,EAAE,iBAAmB,SAAU,QAAS,OAAQC,WAAW,YAAa,CACtE,GAAI,OAAO,QAAQ,MAAM,GAAM,WAC7B,GAAI,CACE,YACF,QAAQ,MAAM,EAAE,KAAK,WAAW,EAAEA,UAAS,EAE3C,QAAQ,MAAM,EAAEA,UAAS,CAE7B,OAAS,GAAI,CACX,IAAI,YAAcA,WAAU,QAAQ,YACpC,QAAQ,KACN,mBACG,OAAO,OAAQ,wBAAwB,EACvC,OAAO,YAAa,GAAG,CAC5B,EACA,QAAQ,MAAMA,WAAW,EAAE,CAC7B,CAEJ,EAEA,EAAE,4CAA8C,SAAU,OAAQ,CAChE,IAAI,QAAU,EAAE,4BAA6B,MAAM,EACnD,OAAI,QAAQ,OAAS,EACZ,QAAQ,CAAC,EAET,EAEX,EAEA,EAAE,kBAAoB,SAAU,OAAQ,CAEtC,QADI,KAAO,EAAE,MAAM,EAAE,KAAK,mBAAmB,EACpC,EAAI,EAAG,EAAI,EAAE,UAAU,OAAQ,IACtC,GAAI,EAAE,UAAU,CAAC,EAAE,MAAQ,KACzB,OAAO,EAAE,UAAU,CAAC,EAGxB,MAAO,EACT,EAEA,EAAE,0BAA4B,SAAU,KAAM,CAC5C,QAAS,EAAI,EAAG,EAAI,EAAE,UAAU,OAAQ,IACtC,GAAI,EAAE,UAAU,CAAC,EAAE,MAAQ,KACzB,MAAO,GAGX,MAAO,EACT,CACF,GAEA,MAAM,cAAgB,CAAC,EACvB,MAAM,eAAiB,SAAU,IAAK,SAAU,UAAW,KAAM,CAC/D,GAAI,OAAO,MAAM,cAAc,GAAG,EAAM,IAAa,CACnD,MAAM,cAAc,GAAG,EAAI,CAAC,EAC5B,IAAI,IAAM,SAAS,cAAc,QAAQ,EACzC,IAAI,IAAM,KAEN,MAAQ,aACV,IAAI,MAAQ,IAGV,WACF,UAAU,EAGR,OAAO,UAAa,aACtB,MAAM,cAAc,GAAG,EAAE,KAAK,QAAQ,EAClC,IAAI,WAEN,IAAI,mBAAqB,UAAY,CACnC,GAAI,IAAI,YAAc,UAAY,IAAI,YAAc,WAAY,CAC9D,IAAI,mBAAqB,KACzB,QAAS,EAAI,EAAG,EAAI,MAAM,cAAc,IAAI,EAAE,OAAQ,IACpD,MAAM,cAAc,IAAI,EAAE,CAAC,EAAE,EAE/B,MAAM,cAAc,IAAI,EAAI,EAC9B,CACF,EAAE,KAAK,GAAG,EAEV,IAAI,OAAS,UAAY,CAEvB,QAAS,EAAI,EAAG,EAAI,MAAM,cAAc,IAAI,EAAE,OAAQ,IACpD,MAAM,cAAc,IAAI,EAAE,CAAC,EAAE,EAE/B,MAAM,cAAc,IAAI,EAAI,EAC9B,EAAE,KAAK,GAAG,GAId,IAAI,eAAiB,SAAS,qBAAqB,QAAQ,EAAE,CAAC,EAC9D,sBAAe,WAAW,aAAa,IAAK,cAAc,EACnD,EACT,SACE,OAAO,MAAM,cAAc,GAAG,GAAM,UACpC,OAAO,UAAa,WAEpB,MAAM,cAAc,GAAG,EAAE,KAAK,QAAQ,MAEtC,QAAI,OAAO,UAAa,YACtB,SAAS,EAEJ,EAEX,EAEA,MAAM,cAAgB,SAAU,IAAK,CACnC,IAAI,mBAAqB,IAAI,QAAQ,WAAY,EAAE,EACnD,GACE,CAAC,SAAS,cACR,cAAgB,UAAU,kBAAkB,EAAI,IAClD,EACA,CACA,IAAI,IAAM,SAAS,cAAc,MAAM,EACvC,IAAI,KAAO,mBACX,IAAI,IAAM,aACV,IAAI,KAAO,WACX,IAAI,SAAW,SAAS,qBAAqB,MAAM,EAAE,CAAC,EACtD,SAAS,WAAW,aAAa,IAAK,QAAQ,CAChD,CACF,EACA,MAAM,eAAiB,SAAU,QAAS,QAAS,CACjD,IAAI,OAAS,EAAE,6BAA6B,EACxC,KAAO,QAAQ,OAAO,EAC1B,OAAO,KAAK,OAAO,EAAE,IAAI,CAAE,KAAM,KAAK,KAAM,IAAK,KAAK,GAAI,CAAC,EAAE,KAAK,EAClE,EAAE,MAAM,EAAE,OAAO,MAAM,EACvB,OAAO,IAAI,CACT,UAAW,CAAC,OAAO,YAAY,EAAI,GACnC,WAAY,EAAE,OAAO,WAAW,EAAI,QAAQ,WAAW,GAAK,CAC9D,CAAC,EACD,OACG,OAAO,GAAG,EACV,MAAM,IAAI,EACV,QAAQ,IAAK,UAAY,CACxB,EAAE,IAAI,EAAE,OAAO,CACjB,CAAC,CACL,EACA,MAAM,WAAY,CAChB,YAAY,KAAM,CAChB,IAAI,YACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OACrC,UAAU,CAAC,EACX,OAAO,OAAO,IAAI,EACpB,MAAQ,KACZ,KAAK,UAAY,CAAC,EAGlB,EAAE,QAAQ,EAAE,GAAG,oBAAqB,SAAU,MAAO,UAAW,OAAQ,CAClE,YAAc,MAChB,EAAE,MAAM,EACL,KAAK,GAAG,OAAO,YAAa,uBAAuB,CAAC,EACpD,KAAK,UAAY,CAChB,MAAM,KAAK,IAAI,CACjB,CAAC,CAEP,CAAC,EAGD,EAAE,QAAQ,EAAE,GACV,sBACA,SAAU,MAAO,UAAW,OAAQ,CAC9B,YAAc,MAChB,EAAE,MAAM,EACL,KAAK,WAAW,EAChB,KAAK,UAAY,CAChB,MAAM,QAAQ,IAAI,CACpB,CAAC,CAEP,CACF,EAGA,EAAE,WAAW,EAAE,KAAK,UAAY,CAC9B,MAAM,KAAK,IAAI,CACjB,CAAC,CACH,CAEA,KAAKA,WAAW,CACd,EAAEA,UAAS,EAAE,SAAS,gBAAgB,CACxC,CAEA,QAAQA,WAAW,CACjB,EAAEA,UAAS,EAAE,YAAY,gBAAgB,CAC3C,CAEA,iBAAiBA,WAAW,SAAU,CACpC,KAAK,UAAU,KAAK,CAClB,UAAAA,WACA,QACF,CAAC,CACH,CAEA,gBAAgBA,WAAW,CACzB,KAAK,UAAY,KAAK,UAAU,OAAQ,MAAS,CAC/C,GAAI,KAAK,YAAcA,WACrB,OAAI,OAAO,KAAK,SAAS,SAAY,YACnC,KAAK,SAAS,QAAQ,EAGjB,KAAK,YAAcA,UAE9B,CAAC,CACH,CACF,CAiBA,MAAM,8BAAgC,UAAY,CAChD,MAAO,CACL,eAAgB,SAAS,cAAc,KAAK,EAC5C,OAAQ,CAAC,EAOT,IAAK,SAAa,IAAK,MAAO,KAAM,CAClC,OAAQ,KAAM,CACZ,IAAK,YACH,KAAK,eAAe,UAAY,GAChC,KAAK,eAAe,aAAa,OAAQ,KAAK,EAC9C,KAAK,OAAO,GAAG,EACb,KAAK,eAAe,UAAU,MAAM,gBAAgB,EAAE,CAAC,EACzD,MACF,IAAK,OACH,KAAK,eAAe,UAAY,MAChC,KAAK,OAAO,GAAG,EAAI,KAAK,eAAe,UACvC,MACF,IAAK,MACH,KAAK,OAAO,GAAG,EAAI,MACnB,MACF,QACE,KAAM,SAAS,OAAO,KAAM,eAAe,CAC/C,CACF,CACF,CACF,EACA,MAAM,UAAY,SAAUA,WAAW,OAAQ,CAC7C,IAAI,SAAW,CAAC,mBAAoB,eAAe,EACnD,OAAS,IAAM,OACfA,WAAU,iBAAiB,MAAM,EAAE,QAAS,IAAO,CACjD,IAAI,MAAQ,GAAG,GACb,MAAQ,MAAQ,OAClB,GAAG,GAAK,MACR,SAAS,QAAS,MAAS,CACzBA,WACG,iBAAiB,IAAI,OAAO,KAAM,IAAI,EAAE,OAAO,MAAO,IAAI,CAAC,EAC3D,QAAS,OAAU,CAClB,MAAM,aAAa,KAAM,KAAK,CAChC,CAAC,CACL,CAAC,CACH,CAAC,CACH,EACA,MAAM,gBAAkB,SACtB,WACA,uBACA,aACA,CAEA,GADA,QAAQ,IAAI,eAAgB,YAAY,EACpC,YAAc,uBAAwB,CACxC,IAAI,cAAgB,2BACpB,eAAiB,+CAA+C,OAC9D,MAAM,QAAQ,YAAY,WAAY,YAAY,EAClD,SACF,EACA,eAAiB,uCAAuC,OACtD,MAAM,QAAQ,sCACd,SACF,EACA,IAAI,KAAO,uBAAuB,eAClC,OAAI,uBAAuB,iBAAmB,IAC5C,KAAO,uBAAuB,gBAAkB,MAElD,eAAiB,kCAAkC,OACjD,KACA,SACF,EACA,eAAiB,SACV,aACT,KACE,OAAO,EAEX,EACA,MAAM,OAAQ,CACZ,YAAY,WAAY,UAAW,CACjC,KAAK,WAAa,WAClB,KAAK,UAAY,UACjB,KAAK,WAAa,CAChB,QAAS,oBACT,aAAc,qBACd,qBAAsB,8BACxB,CACF,CAOA,KAAK,SAAU,CAEb,GAAI,KAAK,WAAW,KAAK,eAAe,EAAG,CACzC,aAAa,MAAM,kCAAkC,EACrD,EAAE,MAAM,EAAE,SAAS,KAAK,WAAW,YAAY,EAG/C,IAAI,UAAY,SAAS,cAAc,KAAK,EAC5C,UAAU,UAAY,0BACtB,SAAS,KAAK,YAAY,SAAS,EACnC,IAAI,eACF,UAAU,sBAAsB,EAAE,MAAQ,UAAU,YACtD,SAAS,KAAK,YAAY,SAAS,EAC/B,eAAiB,GACnB,EAAE,MAAM,EACL,IAAI,gBAAiB,eAAiB,IAAI,EAC1C,SAAS,KAAK,WAAW,oBAAoB,CAEpD,CAGA,KAAK,WAAW,SAAS,KAAK,WAAW,OAAO,EAGhD,KAAK,wBAA0B,SAAS,cAGxC,WAAW,IAAM,CACf,KAAK,WAAW,KAAK,iBAAiB,EAAE,CAAC,EAAE,MAAM,CACnD,EAAG,GAAG,EAGN,EAAE,MAAM,EAAE,GAAG,UAAY,KAAK,UAAY,OAAU,CAC9C,MAAM,UAAY,IACpB,KAAK,MAAM,CAEf,CAAC,EAEG,UACF,SAAS,CAEb,CAMA,MAAM,SAAU,CAEd,KAAK,WAAW,YAAY,KAAK,WAAW,OAAO,EAG/C,KAAK,yBACP,EAAE,KAAK,uBAAuB,EAAE,MAAM,EAIxC,EAAE,MAAM,EAAE,IAAI,UAAY,KAAK,SAAS,EAGxC,IAAI,qBAAuB,EAAE,IAAM,KAAK,WAAW,OAAO,EAAE,OAAO,IAC1D,KAAK,WAAW,KAAK,eAAe,CAC5C,EACD,GAAI,qBAAqB,SAAW,EAAG,CACrC,IAAI,mBAAqB,IAErB,YAAc,KAAK,WAAW,KAAK,iBAAiB,EACpD,YAAY,SACd,mBAAqB,WACnB,iBAAiB,YAAY,CAAC,CAAC,EAAE,kBACnC,EACI,oBAAsB,mBAAqB,IAC7C,oBAAsB,MAI1B,MAAM,mCAAqC,WAAW,IAAM,CAC1D,EAAE,MAAM,EACL,YAAY,KAAK,WAAW,YAAY,EACxC,YAAY,KAAK,WAAW,oBAAoB,EAChD,IAAI,gBAAiB,GAAG,CAC7B,EAAG,kBAAkB,CACvB,CAEI,UACF,SAAS,CAEb,CACF,EACC,IAAM,CACL,MAAM,oBAAsB,UAAY,CACtC,GACE,SAAS,KAAK,UAAU,SAAS,oBAAoB,GACrD,OAAO,YAAc,IACrB,CACA,IAAI,iBACF,OAAO,SAAS,KAAK,QAAQ,iBAAqB,IAC9C,SAAS,KAAK,QAAQ,iBACtB,IAEN,GAAI,yBAA0B,OAAQ,CACpC,IAAI,qBAAuB,IAAI,qBAC7B,CAAC,QAAS,WAAa,CACrB,QAAQ,QAAS,OAAU,CAGvB,MAAM,gBACN,CAAC,MAAM,OAAO,UAAU,SAAS,qBAAqB,IAEtD,WAAW,IAAM,CACf,MAAM,OAAO,UAAU,IAAI,MAAO,qBAAqB,CACzD,EAAG,gBAAgB,EAEnB,WAAW,IAAM,CAEf,MAAM,OAAO,UAAU,OAAO,iBAAiB,EAC/C,MAAM,OAAO,MAAM,mBAAqB,KACxC,MAAM,OAAO,MAAM,gBAAkB,IACvC,EAAG,GAAI,EAGP,SAAS,UAAU,MAAM,MAAM,EAEnC,CAAC,CACH,CACF,EAEA,SACG,iBAAiB,yCAAyC,EAC1D,QAAS,MAAS,CAEb,KAAK,QAAQ,iBACf,KAAK,MAAM,gBAAkB,KAAK,QAAQ,gBAIxC,KAAK,QAAQ,oBACf,KAAK,MAAM,mBAAqB,KAAK,QAAQ,mBAI3C,KAAK,QAAQ,WACf,KAAK,UAAU,IAAI,KAAK,QAAQ,SAAS,EAG3C,KAAK,UAAU,IAAI,iBAAiB,EAGpC,qBAAqB,QAAQ,IAAI,CACnC,CAAC,CACL,KAKE,SAHI,MAAQ,SAAS,iBACnB,yCACF,EACS,EAAI,EAAG,EAAI,MAAM,OAAQ,IAChC,MAAM,CAAC,EAAE,UAAU,IAAI,MAAO,qBAAqB,CAGzD,CACF,EAEA,MAAM,oBAAoB,EAE1B,SAAS,iBAAiB,uBAAwB,IAAM,CACtD,WAAW,MAAM,oBAAqB,GAAG,CAC3C,CAAC,EAGD,GAAI,CACF,OACG,WAAW,oBAAoB,EAC/B,iBAAiB,SAAW,OAAU,CACjC,MAAM,SACR,WAAW,MAAM,oBAAqB,GAAG,CAE7C,CAAC,CACL,MAAY,CAAC,CACf,GAAG,EAEH,MAAM,iBAAkB,CACtB,YAAYA,WAAW,CACrB,KAAK,UAAYA,WACjB,KAAK,UAAY,qBACjB,KAAK,WAAa,4BAClB,KAAK,WAAa,4BAClB,KAAK,eAAiB,KAAK,UAAU,QAAQ,iBAAmB,OAG3D,KAAK,iBACR,KAAK,WAAa,KAAK,UAAU,cAC/B,GAAG,OAAO,KAAK,UAAW,QAAQ,CACpC,GAGF,KAAK,WAAW,CAClB,CAMA,OAAO,eAAe,MAAO,CAC3B,MAAM,MAAM,OAAS,GAAG,OAAO,MAAM,aAAc,IAAI,CACzD,CAMA,OAAO,kBAAkB,MAAO,CAC9B,MAAM,aAAa,OAAO,EAC1B,MAAM,gBAAgB,OAAO,CAC/B,CAOA,KAAK,KAAM,MAAO,CAchB,GAbA,MAAM,MAAM,OAAS,IAIrB,KAAK,KAAO,GAEZ,kBAAkB,eAAe,KAAK,EAGtC,WAAW,IAAM,CACf,KAAK,UAAU,IAAI,SAAS,CAC9B,EAAG,EAAE,EAED,CAAC,KAAK,eAAgB,CAExB,GAAI,KAAK,YAAc,KAAK,aAAe,KAAM,CAC/C,IAAI,YAAc,KAAK,WAAW,cAAc,KAAK,UAAU,EAC/D,KAAK,MAAM,KAAK,WAAY,WAAW,CACzC,CAEA,KAAK,WAAa,IACpB,CACF,CAOA,MAAM,KAAM,MAAO,CACjB,kBAAkB,eAAe,KAAK,EAEtC,KAAK,UAAU,OAAO,SAAS,EAC/B,KAAK,UAAU,IAAI,YAAY,EAE3B,KAAK,aAAe,OACtB,KAAK,WAAa,MAIpB,WAAW,IAAM,CACf,MAAM,MAAM,OAAS,GACvB,EAAG,EAAE,CACP,CAMA,YAAY,EAAG,CAEb,IAAI,OAAS,EAAE,OAAO,QAAQ,KAAK,UAAU,EAC7C,GAAK,OAIL,GAAE,eAAe,EAEjB,IAAI,KAAO,OAAO,WACd,MAAQ,OAAO,mBAEf,KAAK,KACP,KAAK,MAAM,KAAM,KAAK,EAEtB,KAAK,KAAK,KAAM,KAAK,EAEzB,CAMA,iBAAiB,EAAG,CAElB,GAAK,EAAE,OAAO,QAAQ,KAAK,UAAU,EAErC,KAAI,MAAQ,EAAE,OACV,KAAO,MAAM,WAEb,KAAK,UAAU,SAAS,YAAY,IACtC,KAAK,UAAU,OAAO,YAAY,EAClC,KAAK,KAAO,IAGd,kBAAkB,kBAAkB,KAAK,EAC3C,CAEA,YAAa,CAGX,KAAK,aAAe,KAAK,YAAY,KAAK,IAAI,EAC9C,KAAK,kBAAoB,KAAK,iBAAiB,KAAK,IAAI,EAExD,KAAK,UAAU,iBAAiB,QAAS,KAAK,YAAY,EAC1D,KAAK,UAAU,iBAAiB,gBAAiB,KAAK,iBAAiB,CACzE,CAEA,SAAU,CACR,KAAK,UAAU,oBAAoB,QAAS,KAAK,YAAY,EAC7D,KAAK,UAAU,oBACb,gBACA,KAAK,iBACP,CACF,CACF,CAEA,MAAM,kBAAkB,WAAY,CAClC,aAAc,CACZ,IAAI,KACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OACrC,UAAU,CAAC,EACX,YACF,YACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OACrC,UAAU,CAAC,EACX,OAAO,OAAO,IAAI,EACxB,MAAM,KAAM,WAAW,CACzB,CAEA,KAAKA,WAAW,CACd,MAAM,KAAKA,UAAS,EACpB,KAAK,iBAAiBA,WAAW,IAAI,kBAAkBA,UAAS,CAAC,CACnE,CAEA,QAAQA,WAAW,CACjB,KAAK,gBAAgBA,UAAS,EAC9B,MAAM,QAAQA,UAAS,CACzB,CACF,CAEA,IAAI,UACJ,MAAM,oBAAqB,CACzB,YAAY,GAAI,CACd,KAAK,GAAK,GACV,KAAK,OAAS,GAAG,cAAc,iBAAiB,EAChD,KAAK,QAAU,GAAG,cAAc,qBAAqB,EACrD,KAAK,QAAU,GAAG,iBAAiB,oBAAoB,EACvD,KAAK,eAAiB,GAAG,cAAc,wBAAwB,EAC/D,KAAK,aAAe,SAAS,eAAe,GAAG,OAAO,GAAG,GAAI,SAAS,CAAC,EACvE,KAAK,SAAW,WAAY,KAAK,QAAQ,KAAK,QAAQ,OAAS,CAAC,EAAE,QAClE,KAAK,aAAe,aACpB,KAAK,aAAe,GACpB,KAAK,YAAc,GAGd,KAAK,iBACR,KAAK,eAAiB,KAAK,QAAQ,mBAGrC,KAAK,WAAW,EAChB,KAAK,eAAe,CACtB,CAEA,YAAa,CACX,KAAK,GAAG,iBAAiB,UAAW,KAAK,cAAc,KAAK,IAAI,CAAC,EACjE,KAAK,GAAG,iBACN,eACA,KAAK,mBAAmB,KAAK,IAAI,CACnC,EACA,KAAK,OAAO,iBACV,YACA,KAAK,gBAAgB,KAAK,IAAI,CAChC,CACF,CAKA,sBAAuB,CACrB,KAAK,iBAAmB,KAAK,gBAAgB,KAAK,IAAI,EACtD,KAAK,kBAAoB,KAAK,iBAAiB,KAAK,IAAI,EACxD,KAAK,aAAe,KAAK,YAAY,KAAK,IAAI,EAC9C,KAAK,YAAc,KAAK,WAAW,KAAK,IAAI,EAE5C,KAAK,QAAQ,iBAAiB,YAAa,KAAK,gBAAgB,EAChE,KAAK,QAAQ,iBAAiB,aAAc,KAAK,iBAAiB,EAClE,KAAK,QAAQ,iBAAiB,QAAS,KAAK,YAAY,EACxD,KAAK,QAAQ,iBAAiB,OAAQ,KAAK,WAAW,CACxD,CAKA,yBAA0B,CACxB,KAAK,QAAQ,oBAAoB,YAAa,KAAK,gBAAgB,EACnE,KAAK,QAAQ,oBAAoB,aAAc,KAAK,iBAAiB,EACrE,KAAK,QAAQ,oBAAoB,QAAS,KAAK,YAAY,EAC3D,KAAK,QAAQ,oBAAoB,OAAQ,KAAK,WAAW,CAC3D,CAMA,cAAc,EAAG,CACX,KAAK,YACP,KAAK,kBAAkB,CAAC,GAExB,EAAE,MAAQ,WACV,EAAE,MAAQ,aACV,EAAE,MAAQ,OAEV,EAAE,eAAe,EACjB,KAAK,YAAY,EAErB,CAMA,gBAAgB,EAAG,CACb,CAAC,KAAK,aAAe,EAAE,SAAW,GACpC,KAAK,YAAY,CAErB,CAMA,gBAAgB,EAAG,CACb,EAAE,OAAO,QAAQ,IAAI,GACvB,KAAK,YAAY,EAAE,MAAM,CAE7B,CAKA,kBAAmB,CACjB,KAAK,YAAY,KAAK,cAAc,CACtC,CAMA,YAAY,EAAG,CACT,EAAE,OAAO,QAAQ,YAAY,GAC/B,KAAK,aAAa,EAAE,MAAM,CAE9B,CAKA,YAAa,CACP,KAAK,aACP,KAAK,YAAY,CAErB,CAMA,kBAAkB,EAAG,CACnB,IAAI,cAOJ,OAJI,EAAE,MAAQ,OACZ,EAAE,eAAe,EAGX,EAAE,IAAK,CAEb,IAAK,UACL,IAAK,YACH,EAAE,eAAe,EAEb,EAAE,MAAQ,UACZ,cAAgB,KAAK,cAAc,uBAEnC,cAAgB,KAAK,cAAc,mBAInC,eACA,CAAC,cAAc,UAAU,SAAS,aAAa,GAE/C,KAAK,YAAY,aAAa,EAEhC,MAGF,IAAK,QACL,IAAK,IACH,EAAE,eAAe,EACjB,KAAK,aAAa,KAAK,aAAa,EACpC,MAGF,IAAK,SACH,EAAE,eAAe,EACjB,KAAK,YAAY,EACjB,MAGF,QACE,cAAgB,KAAK,WAAW,EAAE,GAAG,EAEjC,eACF,KAAK,YAAY,aAAa,EAEhC,KACJ,CACF,CAMA,gBAAiB,CAEf,IAAI,iBAAoB,IAAO,CAC7B,IAAI,QAAU,iBAAiB,EAAE,EACjC,OACE,WAAW,QAAQ,WAAW,EAAI,WAAW,QAAQ,YAAY,CAErE,EAEI,cAAgB,iBAAiB,KAAK,MAAM,EAC5C,cAAgB,iBAAiB,KAAK,cAAc,EACpD,aAAe,KAAK,OAAO,YAAc,KAAK,OAAO,YACrD,YAAc,KAAK,KACrB,KAAK,eAAe,sBAAsB,EAAE,KAC9C,EAEA,KAAK,OAAO,MAAM,MAAQ,GAAG,OAC3B,YAAc,cAAgB,cAAgB,aAC9C,IACF,CACF,CAKA,aAAc,CACZ,KAAK,QAAQ,OAAS,GACtB,KAAK,YAAc,GAEnB,KAAK,GAAG,UAAU,IAAI,SAAS,EAC/B,KAAK,OAAO,aAAa,gBAAiB,MAAM,EAChD,KAAK,QAAQ,aAAa,cAAe,OAAO,EAGhD,WAAW,IAAM,CACf,KAAK,YAAY,KAAK,cAAc,EACpC,KAAK,QAAQ,MAAM,EAEnB,KAAK,qBAAqB,CAC5B,EAAG,EAAE,CACP,CAKA,aAAc,CACP,KAAK,cAEV,KAAK,QAAQ,OAAS,GACtB,KAAK,YAAc,GAEnB,KAAK,GAAG,UAAU,OAAO,SAAS,EAClC,KAAK,OAAO,aAAa,gBAAiB,OAAO,EACjD,KAAK,QAAQ,aAAa,cAAe,MAAM,EAE3C,KAAK,gBACP,KAAK,cAAc,UAAU,OAAO,KAAK,YAAY,EACrD,KAAK,cAAgB,MAGvB,KAAK,OAAO,MAAM,EAClB,KAAK,wBAAwB,EAC/B,CAOA,WAAW,IAAK,CACd,KAAK,cAAgB,IAGjB,KAAK,aACP,aAAa,KAAK,WAAW,EAI/B,KAAK,YAAc,WAAW,IAAM,CAClC,KAAK,aAAe,EACtB,EAAG,GAAG,EAGN,IAAI,eAAiB,CAAC,GAAG,KAAK,OAAO,EAAE,KAAM,QAAW,CACtD,IAAI,MAAQ,OAAO,UAAU,YAAY,EACzC,OACE,MAAM,SAAS,KAAK,YAAY,GAChC,CAAC,OAAO,UAAU,SAAS,aAAa,CAE5C,CAAC,EAED,OAAO,cACT,CAMA,YAAY,OAAQ,CAWlB,GATI,KAAK,eACP,KAAK,cAAc,UAAU,OAAO,KAAK,YAAY,EAIvD,KAAK,cAAgB,OACrB,KAAK,cAAc,UAAU,IAAI,KAAK,YAAY,EAG9C,KAAK,QAAQ,aAAe,KAAK,QAAQ,aAAc,CACzD,IAAI,aAAe,KAAK,QAAQ,aAAe,KAAK,QAAQ,UACxD,aAAe,OAAO,UAAY,OAAO,aAEzC,aAAe,aACjB,KAAK,QAAQ,UAAY,aAAe,KAAK,QAAQ,aAC5C,OAAO,UAAY,KAAK,QAAQ,YACzC,KAAK,QAAQ,UAAY,OAAO,UAEpC,CACF,CAMA,mBAAmB,EAAG,CACpB,IAAI,eAAiB,CAAC,GAAG,KAAK,OAAO,EAAE,KACpC,QAAW,OAAO,QAAQ,QAAU,EAAE,OAAO,KAChD,EACI,gBACF,KAAK,aAAa,cAAc,CAEpC,CAMA,aAAa,OAAQ,CACnB,GAAI,SAAW,KAAK,eAqBlB,GAnBA,OAAO,aAAa,gBAAiB,MAAM,EAC3C,KAAK,eAAe,aAAa,gBAAiB,OAAO,EAGrD,KAAK,WACH,OAAO,QAAQ,OACjB,KAAK,OAAO,QAAQ,OAAS,OAAO,QAAQ,OAE5C,KAAK,OAAO,gBAAgB,aAAa,GAK7C,KAAK,OAAO,WAAW,YACrB,OAAO,kBAAkB,YAC3B,KAAK,QAAQ,aAAa,wBAAyB,OAAO,EAAE,EAC5D,KAAK,eAAiB,SAAS,eAAe,OAAO,EAAE,EAGnD,KAAK,aACP,KAAK,aAAa,MAAQ,OAAO,QAAQ,MACzC,KAAK,aAAa,cAChB,IAAI,MAAM,SAAU,CAAE,QAAS,EAAK,CAAC,CACvC,MACK,CAEL,IAAI,OAAS,CAAE,cAAe,OAAO,QAAQ,KAAM,EACnD,KAAK,GAAG,cACN,IAAI,YAAY,SAAU,CAAE,QAAS,GAAM,MAAO,CAAC,CACrD,CACF,CAGF,KAAK,YAAY,CACnB,CACF,CAEA,MAAM,qBAAqB,WAAY,CACrC,aAAc,CACZ,IAAI,KACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OACrC,UAAU,CAAC,EACX,gBACF,YACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OACrC,UAAU,CAAC,EACX,aACN,MAAM,KAAM,WAAW,CACzB,CAEA,KAAKA,WAAW,CACd,MAAM,KAAKA,UAAS,EACpB,KAAK,iBAAiBA,WAAW,IAAI,qBAAqBA,UAAS,CAAC,CACtE,CAEA,QAAQA,WAAW,CACjB,KAAK,gBAAgBA,UAAS,EAC9B,MAAM,QAAQA,UAAS,CACzB,CACF,CAEA,IAAI,aAeJ,MAAM,aAAc,CAClB,YAAYA,WAAW,CACrB,KAAK,UAAYA,WACjB,KAAK,KAAOA,WAAU,QAAQ,aAAe,SAC7C,KAAK,eAAiB,SAAS,cAC7BA,WAAU,QAAQ,qBACpB,EAEA,KAAK,UAAU,iBAAiB,QAAS,KAAK,YAAY,KAAK,IAAI,CAAC,EAEhEA,WAAU,QAAQ,gBAAkB,QACtC,WAAW,KAAK,KAAK,KAAK,IAAI,EAAG,EAAE,CAEvC,CAMA,YAAY,EAAG,CACb,EAAE,eAAe,EACjB,KAAK,KAAK,EACV,KAAK,OAAS,EAAE,MAClB,CAKA,MAAO,CACL,IAAI,IAAM,MAAM,8BAA8B,EAC9C,IAAI,IAAI,OAAQ,KAAK,KAAM,WAAW,EACtC,IAAI,IAAI,UAAW,KAAK,eAAe,UAAW,KAAK,EACvD,IAAI,IACF,qBACA,MAAM,QAAQ,mCACd,WACF,EACA,IAAI,IAAI,oBAAqB,MAAM,MAAM,MAAO,KAAK,EAErD,IAAI,KACF;AAAA,sFACG,OACC,IAAI,OAAO,KACX;AAAA;AAAA;AAAA;AAAA,gEACF,EACC,OAAO,IAAI,OAAO,mBAAoB,IAAI,EAC1C,OACC,IAAI,OAAO,kBACX;AAAA,mDACF,EACC,OACC,IAAI,OAAO,QACX;AAAA;AAAA;AAAA;AAAA,KACF,EAEA,qBAAuB,SACxB,YAAY,EACZ,yBAAyB,IAAI,EAChC,SAAS,KAAK,YAAY,oBAAoB,EAE9C,SAAS,KAAK,UAAU,IAAI,kBAAkB,EAC9C,KAAK,aAAe,SAAS,KAAK,iBAElC,KAAK,aACF,cAAc,8BAA8B,EAC5C,iBAAiB,QAAS,KAAK,MAAM,KAAK,IAAI,CAAC,EAClD,KAAK,aACF,cAAc,yBAAyB,EACvC,iBAAiB,QAAS,KAAK,MAAM,KAAK,IAAI,CAAC,EAElD,WAAW,IAAM,CACf,KAAK,aAAa,UAAU,OAAO,6BAA6B,EAChE,KAAK,aAAa,cAAc,yBAAyB,EAAE,MAAM,CACnE,EAAG,EAAE,CACP,CAEA,OAAQ,CACN,KAAK,aAAa,UAAU,IAAI,0BAA0B,EAEvD,SAAS,cACR,iDACF,GAEA,SAAS,KAAK,UAAU,OAAO,kBAAkB,EAG/C,KAAK,QACP,WAAW,IAAM,CACf,KAAK,OAAO,MAAM,CACpB,EAAG,EAAE,EAIP,WACE,UAAY,CACV,KAAK,OAAO,CACd,EAAE,KAAK,KAAK,YAAY,EACxB,GACF,CACF,CACF,CAEA,MAAM,cAAc,WAAY,CAC9B,aAAc,CACZ,IAAI,KACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OACrC,UAAU,CAAC,EACX,QACF,YACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OACrC,UAAU,CAAC,EACX,OAAO,OAAO,IAAI,EACxB,MAAM,KAAM,WAAW,CACzB,CAEA,KAAKA,WAAW,CACd,MAAM,KAAKA,UAAS,EACpB,KAAK,iBAAiBA,WAAW,IAAI,cAAcA,UAAS,CAAC,CAC/D,CAEA,QAAQA,WAAW,CACjB,KAAK,gBAAgBA,UAAS,EAC9B,MAAM,QAAQA,UAAS,CACzB,CACF,CAEA,IAAI,MACJ,MAAM,kBAAmB,CACvB,YAAYA,WAAW,CACrB,KAAK,UAAYA,WACjB,KAAK,UAAY,CACf,SAAU,8BACV,SAAU,8BACV,QAAS,2BACT,WAAY,gCACZ,WAAY,gCACZ,IAAK,uBACL,UAAW,6BACb,EACA,KAAK,SAAW,CACd,IAAK,CACH,WAAYA,WAAU,cAAc,KAAK,UAAU,UAAU,EAC7D,MAAOA,WAAU,cAAc,KAAK,UAAU,QAAQ,CACxD,EACA,IAAK,CACH,WAAYA,WAAU,cAAc,KAAK,UAAU,UAAU,EAC7D,MAAOA,WAAU,cAAc,KAAK,UAAU,QAAQ,CACxD,CACF,EACA,KAAK,SAAS,IAAI,MAAQ,SACxB,KAAK,SAAS,IAAI,MAAM,QAAU,GAC9B,KAAK,SAAS,IAAI,MAAM,YACxB,KAAK,SAAS,IAAI,MAAM,KAC9B,EACA,KAAK,SAAS,IAAI,MAAQ,SACxB,KAAK,SAAS,IAAI,MAAM,QAAU,GAC9B,KAAK,SAAS,IAAI,MAAM,YACxB,KAAK,SAAS,IAAI,MAAM,KAC9B,EACA,KAAK,SAAW,KAAK,SAAS,IAAI,MAAM,IACxC,KAAK,SAAW,KAAK,SAAS,IAAI,MAAM,IACxC,KAAK,WAAa,KAAK,SAAW,KAAK,SAEvC,CAAC,KAAK,SAAS,IAAK,KAAK,SAAS,GAAG,EAAE,QAAS,MAAS,CACvD,KAAK,WAAW,aAAa,gBAAiB,KAAK,QAAQ,EAC3D,KAAK,WAAW,aAAa,gBAAiB,KAAK,QAAQ,EAC3D,KAAK,WAAW,aAAa,WAAY,CAAC,CAC5C,CAAC,EACD,KAAK,SAAS,IAAI,WAAW,aAC3B,gBACA,KAAK,SAAS,IAAI,KACpB,EACA,KAAK,SAAS,IAAI,WAAW,aAC3B,gBACA,KAAK,SAAS,IAAI,KACpB,EAEA,KAAK,IAAMA,WAAU,cAAc,KAAK,UAAU,GAAG,EACrD,KAAK,UAAYA,WAAU,cAAc,KAAK,UAAU,SAAS,EACjE,KAAK,OAAS,GACd,KAAK,IAAM,SAAS,cAAc,eAAe,EAEjD,KAAK,WAAW,EAChB,KAAK,OAAO,CACd,CAEA,mBAAoB,CAClB,IAAI,EAAI,KAAK,IAAI,aAAe,KAAK,SAAW,KAAK,UACrD,OAAI,KAAK,IACA,CAAC,EAED,CAEX,CAEA,mBAAoB,CAClB,MAAO,MAAS,KAAK,SAAW,KAAK,SACvC,CAEA,sBAAsB,MAAO,CAEvB,MAAM,SAAS,KAAK,CAAC,IAGrB,KAAK,gBAAkB,KAAK,SAAS,KACnC,QAAU,KACZ,MAAQ,KAAK,UAEf,MAAQ,KAAK,IAAI,KAAK,SAAU,KAAK,EACrC,MAAQ,KAAK,IAAI,MAAO,KAAK,SAAS,IAAI,KAAK,IAE3C,QAAU,KACZ,MAAQ,KAAK,UAEf,MAAQ,KAAK,IAAI,KAAK,SAAU,KAAK,EACrC,MAAQ,KAAK,IAAI,MAAO,KAAK,SAAS,IAAI,KAAK,GAIjD,KAAK,cAAc,MAAQ,KAAK,MAAM,KAAK,EAGvC,KAAK,cAAc,MAAM,OAAS,KAAK,cAAc,QACnD,KAAK,cAAc,OAAS,KAAK,cAAc,MAAM,YACvD,KAAK,cAAc,MAAM,MAAQ,GAEjC,KAAK,cAAc,MAAM,MAAQ,KAAK,cAAc,MAEtD,KAAK,cAAc,MAAM,cACvB,IAAI,YAAY,SAAU,CACxB,QAAS,GACT,WAAY,GACZ,OAAQ,CAAE,OAAQ,6BAA8B,CAClD,CAAC,CACH,GAIF,KAAK,cAAc,WAAW,aAC5B,gBACA,KAAK,cAAc,KACrB,EACF,CAEA,QAAS,CACP,KAAK,YAAY,KAAK,SAAS,GAAG,EAClC,KAAK,YAAY,KAAK,SAAS,GAAG,EAClC,KAAK,cAAc,CACrB,CAEA,YAAY,QAAS,CACnB,IAAI,GAAK,QAAQ,MAAQ,KAAK,UAAY,KAAK,kBAAkB,EAAI,IACjE,KAAK,IACP,QAAQ,WAAW,MAAM,MAAQ,EAEjC,QAAQ,WAAW,MAAM,KAAO,CAEpC,CAEA,eAAgB,CACd,IAAI,GACC,KAAK,SAAS,IAAI,MAAQ,KAAK,UAAY,KAAK,kBAAkB,EACnE,IACF,GACG,KAAK,SAAW,KAAK,SAAS,IAAI,OAAS,KAAK,kBAAkB,EACnE,IACA,KAAK,KACP,KAAK,UAAU,MAAM,KAAO,EAC5B,KAAK,UAAU,MAAM,MAAQ,IAE7B,KAAK,UAAU,MAAM,KAAO,EAC5B,KAAK,UAAU,MAAM,MAAQ,EAEjC,CAEA,wBAAwB,EAAG,CACzB,EAAE,eAAe,EACjB,KAAK,UAAU,EAAE,OAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,EAC7C,KAAK,2BAA6B,KAAK,uBAAuB,KAAK,IAAI,EACvE,KAAK,0BAA4B,KAAK,sBAAsB,KAAK,IAAI,EACrE,OAAO,iBAAiB,YAAa,KAAK,0BAA0B,EACpE,OAAO,iBAAiB,WAAY,KAAK,yBAAyB,CACpE,CAEA,uBAAuB,EAAG,CACxB,KAAK,SAAS,EAAE,QAAQ,CAAC,EAAE,OAAO,CACpC,CAEA,sBAAsB,EAAG,CACvB,EAAE,eAAe,EACjB,OAAO,oBAAoB,YAAa,KAAK,0BAA0B,EACvE,OAAO,oBAAoB,WAAY,KAAK,yBAAyB,EACrE,KAAK,SAAS,CAChB,CAEA,uBAAuB,EAAG,CACxB,EAAE,eAAe,EACjB,KAAK,UAAU,EAAE,OAAQ,EAAE,OAAO,EAClC,KAAK,2BAA6B,KAAK,uBAAuB,KAAK,IAAI,EACvE,KAAK,yBAA2B,KAAK,qBAAqB,KAAK,IAAI,EACnE,OAAO,iBAAiB,YAAa,KAAK,0BAA0B,EACpE,OAAO,iBAAiB,UAAW,KAAK,wBAAwB,CAClE,CAEA,uBAAuB,EAAG,CACxB,KAAK,SAAS,EAAE,OAAO,CACzB,CAEA,qBAAqB,EAAG,CACtB,EAAE,eAAe,EACjB,OAAO,oBAAoB,YAAa,KAAK,0BAA0B,EACvE,OAAO,oBAAoB,UAAW,KAAK,wBAAwB,EACnE,KAAK,SAAS,CAChB,CAEA,UAAU,OAAQ,OAAQ,CACpB,KAAK,SAAS,IAAI,aAAe,OACnC,KAAK,cAAgB,KAAK,SAAS,IAEnC,KAAK,cAAgB,KAAK,SAAS,IAErC,KAAK,WAAa,OAClB,KAAK,eAAiB,KAAK,cAAc,MACzC,KAAK,OAAS,EAChB,CAEA,SAAS,MAAO,CACd,GAAI,KAAK,OAAQ,CACf,IAAI,MACF,KAAK,gBACJ,MAAQ,KAAK,YAAc,KAAK,kBAAkB,EACrD,KAAK,sBAAsB,KAAK,EAChC,KAAK,OAAO,CACd,CACF,CAEA,UAAW,CACT,KAAK,OAAS,EAChB,CAEA,qBAAqB,EAAG,CAClB,EAAE,MAAQ,aACZ,KAAK,6BAA6B,EAAE,OAAQ,EAAI,EACvC,EAAE,MAAQ,aACnB,KAAK,6BAA6B,EAAE,OAAQ,GAAK,CAErD,CAEA,6BAA6B,QAAS,SAAU,CAC1C,KAAK,SAAS,IAAI,aAAe,QACnC,KAAK,cAAgB,KAAK,SAAS,IAEnC,KAAK,cAAgB,KAAK,SAAS,IAErC,KAAK,sBACH,KAAK,cAAc,MAAQ,SAAW,KAAK,kBAAkB,CAC/D,EACA,KAAK,OAAO,CACd,CAEA,kBAAkB,EAAG,CAEnB,EAAE,OAAO,MAAQ,EAAE,OAAO,MAAM,QAAQ,MAAO,EAAE,GAE7C,CAAC,EAAE,QAAU,EAAE,OAAO,QAAU,iCAC9B,KAAK,SAAS,IAAI,QAAU,EAAE,OAChC,KAAK,cAAgB,KAAK,SAAS,IAEnC,KAAK,cAAgB,KAAK,SAAS,IAErC,KAAK,sBAAsB,EAAE,OAAO,KAAK,EACzC,KAAK,OAAO,EAEhB,CAEA,iBAAiB,EAAG,CAElB,WACE,UAAY,CACV,KAAK,MAAQ,KAAK,MAAM,QAAQ,MAAO,EAAE,CAC3C,EAAE,KAAK,EAAE,MAAM,EACf,EACF,CACF,CAEA,YAAa,CACX,CAAC,KAAK,SAAS,IAAK,KAAK,SAAS,GAAG,EAAE,QAAS,MAAS,CACvD,KAAK,WAAW,iBACd,aACA,KAAK,wBAAwB,KAAK,IAAI,CACxC,EACA,KAAK,WAAW,iBACd,YACA,KAAK,uBAAuB,KAAK,IAAI,CACvC,EACA,KAAK,WAAW,iBACd,UACA,KAAK,qBAAqB,KAAK,IAAI,CACrC,EACA,KAAK,MAAM,iBACT,SACA,KAAK,kBAAkB,KAAK,IAAI,CAClC,EACA,KAAK,MAAM,iBAAiB,QAAS,KAAK,iBAAiB,KAAK,IAAI,CAAC,CACvE,CAAC,CACH,CAEA,SAAU,CAAC,CACb,CAEA,MAAM,mBAAmB,WAAY,CACnC,aAAc,CACZ,IAAI,KACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OACrC,UAAU,CAAC,EACX,cACF,YACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OACrC,UAAU,CAAC,EACX,OAAO,OAAO,IAAI,EACxB,MAAM,KAAM,WAAW,CACzB,CAEA,KAAKA,WAAW,CACd,MAAM,KAAKA,UAAS,EACpB,KAAK,iBAAiBA,WAAW,IAAI,mBAAmBA,UAAS,CAAC,CACpE,CAEA,QAAQA,WAAW,CACjB,KAAK,gBAAgBA,UAAS,EAC9B,MAAM,QAAQA,UAAS,CACzB,CACF,CAEA,IAAI,WAGJ,MAAM,aAAe,IAAK,UAAY,CACpC,IAAI,EAAI,KAER,EAAE,OAAS,CACT,YAAa,EACb,UAAW,CAAC,CACd,EAEA,EAAE,mBAAqB,SAAUA,WAAW,CAC1C,EACE,gEACAA,UACF,EAAE,KAAK,UAAY,CACjB,EAAE,IAAI,EAAE,SAAS,aAAa,EAC9B,EAAE,OAAO,cACT,IAAI,YAAc,kBAAoB,EAAE,OAAO,YAC/C,EAAE,IAAI,EAAE,KAAK,qBAAsB,WAAW,EAC9C,IAAI,SAAW,EAAE,IAAI,EAAE,KAAK,gBAAgB,EACxC,KAAO,EAAE,IAAI,EAAE,KAAK,YAAY,EAChC,QAAU,EAAE,IAAI,EAAE,KAAK,UAAU,EACjC,kBAAoB,EAAE,IAAI,EAAE,SAAS,6BAA6B,EAElE,kBAAoB,IAAI,gBAC1B,iFACF,EACA,kBAAkB,OAAO,SAAU,SAAS,MAAM,EAClD,kBAAkB,OAAO,WAAY,OAAO,EAC5C,kBAAkB,OAAO,OAAQ,KAAO,EAAI,CAAC,EAC7C,kBAAkB,OAAO,WAAY,CAAC,EACtC,kBAAkB,OAAO,WAAY,kBAAoB,EAAI,CAAC,EAC9D,IAAI,SAAW,EAAE,OAAO,YACxB,kBAAkB,OAAO,WAAY,QAAQ,EAE7C,IAAI,IACF,iCACA,QACA,IACA,kBAAkB,SAAS,EAEzB,cAAgB,EAClB,sLACF,EACG,KAAK,CACJ,GAAI,YACJ,MAAO,IACP,OAAQ,IACR,SAAU,kBAAoB,KAAO,IACvC,CAAC,EACA,SAAS,EAAE,0BAA2B,IAAI,CAAC,EAE9C,EAAE,OAAO,UAAU,WAAW,EAAI,CAChC,KAAM,KACN,GAAI,YACJ,UAAW,KACX,KAAM,IACJ,cAAc,CAAC,EAAE,cAAc,YAC7B,8CACA,GACF,EACF,KAAM,IACJ,cAAc,CAAC,EAAE,cAAc,YAC7B,mDACA,GACF,EACF,MAAO,IACL,cAAc,CAAC,EAAE,cAAc,YAC7B,oDACA,GACF,EACF,KAAM,IACJ,cAAc,CAAC,EAAE,cAAc,YAC7B,mDACA,GACF,EACF,OAAS,IACP,cAAc,CAAC,EAAE,cAAc,YAC7B,8CAA8C,OAC5C,GACA,SACF,EACA,GACF,EACF,aAAc,cAAc,CAAC,EAC7B,kBACA,mBAAoB,EACtB,EAEI,UACF,cAAc,GAAG,OAAQ,IACvB,WAAW,IAAM,CAEf,OAAO,iBAAiB,UAAY,SAAY,CAC9C,GACE,QAAQ,SAAW,2BACnB,QAAQ,MACR,OAAO,QAAQ,MAAS,SACxB,CACA,IAAI,KAAO,KAAK,MAAM,QAAQ,IAAI,EAGhC,KAAK,QAAU,mBACf,KAAK,MACL,KAAK,KAAK,WAEV,EAAE,OAAO,UAAU,WAAW,EAAE,SAC9B,KAAK,KAAK,UAIZ,KAAK,QAAU,gBACf,KAAK,UAAY,UACjB,KAAK,KAAO,WAEZ,EAAE,OAAO,UAAU,WAAW,EAAE,mBAAqB,GAEjD,KAAK,MAAQ,KAAK,KAAK,cAAgB,GACzC,EAAE,IAAI,EAAE,SAAS,0BAA0B,EAK3C,MACA,KAAK,MACL,KAAK,KAAK,YACR,EAAE,OAAO,UAAU,WAAW,EAAE,SAAW,GAE7C,EAAE,OAAO,UAAU,WAAW,EAAE,OAAO,CAAC,EAG9C,CACF,CAAC,EACD,cAAc,CAAC,EAAE,cAAc,YAC7B,6BAA6B,OAC3B,SACA,sBACF,EACA,GACF,EAGA,EAAE,OAAO,UAAU,WAAW,EAAE,KAAK,EACrC,EAAE,OAAO,UAAU,WAAW,EAAE,KAAK,EAGrC,WAAW,IAAM,CACV,EAAE,OAAO,UAAU,WAAW,EAAE,oBACnC,EAAE,IAAI,EAAE,SAAS,0BAA0B,CAE/C,EAAG,GAAI,CACT,EAAG,GAAG,CACR,EAGE,oBACF,cAAc,KAAK,WAAY,IAAI,EACnC,EAAE,qBAAqB,EAAE,OAAO,UAAU,WAAW,CAAC,EAGtD,EAAE,0BAA0B,GAG9B,cAAc,KAAK,MAAO,GAAG,EAE7B,MACE,kDACE,mBAAmB,EAAE,IAAI,EAAE,KAAK,WAAW,CAAC,CAChD,EACG,KAAM,UAAa,CAClB,GAAI,CAAC,SAAS,GACZ,MAAM,IAAI,MAAM,uBAAuB,OAAO,SAAS,MAAM,CAAC,EAEhE,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAM,UAAa,CACd,SAAS,OAAS,SAAS,SAC7B,cAAc,KAAK,CACjB,MAAO,SAAS,MAChB,OAAQ,SAAS,MACnB,CAAC,EACG,EAAE,OAAO,UAAU,WAAW,EAAE,uBAClC,EAAE,OAAO,UAAU,WAAW,EAAE,sBAAsB,EAG5D,CAAC,CACL,CAAC,CACH,EAEA,EAAE,iBAAmB,SAAUA,WAAW,CACxC,EACE,8DACAA,UACF,EAAE,KAAK,UAAY,CACjB,EAAE,IAAI,EAAE,SAAS,aAAa,EAC9B,EAAE,OAAO,cACT,IAAI,YAAc,kBAAoB,EAAE,OAAO,YAC/C,EAAE,IAAI,EAAE,KAAK,qBAAsB,WAAW,EAC9C,IAAI,SAAW,EAAE,IAAI,EAAE,KAAK,gBAAgB,EACxC,KAAO,EAAE,IAAI,EAAE,KAAK,YAAY,EAChC,QAAU,EAAE,IAAI,EAAE,KAAK,UAAU,EACjC,kBAAoB,EAAE,IAAI,EAAE,SAAS,6BAA6B,EAElE,kBAAoB,IAAI,gBACxB,UACF,kBAAkB,OAAO,QAAS,CAAC,EAEjC,MACF,kBAAkB,OAAO,OAAQ,CAAC,EAEhC,mBACF,kBAAkB,OAAO,WAAY,CAAC,EAGxC,IAAI,IACF,kCACA,QACA,IACA,kBAAkB,SAAS,EAEzB,cAAgB,EAClB,sLACF,EACG,KAAK,CACJ,GAAI,YACJ,MAAO,IACP,OAAQ,IACR,SAAU,kBAAoB,KAAO,IACvC,CAAC,EACA,SAAS,EAAE,0BAA2B,IAAI,CAAC,EAE9C,EAAE,OAAO,UAAU,WAAW,EAAI,CAChC,KAAM,QACN,GAAI,YACJ,UAAW,KACX,KAAM,IACJ,cAAc,CAAC,EAAE,cAAc,YAC7B,oBACA,GACF,EACF,MAAO,IACL,cAAc,CAAC,EAAE,cAAc,YAC7B,qBACA,GACF,EACF,aAAc,cAAc,CAAC,EAC7B,kBACA,sBAAuB,EACzB,EAEI,UACF,cAAc,GAAG,OAAQ,IACvB,WAAW,IAAM,CAEf,OAAO,iBAAiB,UAAY,SAAY,CAC9C,GAAI,QAAQ,SAAW,4BACnB,QAAQ,SAAW,cAAc,CAAC,EAAE,eACnC,QAAQ,KAEb,KAAI,KAAO,QAAQ,KACf,OAAO,MAAS,WAClB,KAAO,KAAK,MAAM,IAAI,IAGpB,KAAK,SAAW,QAAU,KAAK,QAAU,aAC3C,EAAE,OAAO,UAAU,WAAW,EAAE,sBAAwB,IAGtD,KAAK,QAAU,WACjB,EAAE,IAAI,EAAE,SAAS,0BAA0B,EAE/C,CAAC,EACD,cAAc,CAAC,EAAE,cAAc,YAC7B,CAAE,OAAQ,mBAAoB,MAAO,SAAU,EAC/C,GACF,EACA,cAAc,CAAC,EAAE,cAAc,YAC7B,CAAE,OAAQ,sBAAuB,MAAO,SAAS,MAAO,EACxD,GACF,EACA,cAAc,CAAC,EAAE,cAAc,YAC7B,CAAE,OAAQ,MAAO,EACjB,GACF,EAGA,EAAE,OAAO,UAAU,WAAW,EAAE,KAAK,EAGrC,WAAW,IAAM,CACV,EAAE,OAAO,UAAU,WAAW,EAAE,uBACnC,EAAE,IAAI,EAAE,SAAS,0BAA0B,CAE/C,EAAG,GAAI,CACT,EAAG,GAAG,CACR,EAGE,oBACF,cAAc,KAAK,WAAY,IAAI,EACnC,EAAE,qBAAqB,EAAE,OAAO,UAAU,WAAW,CAAC,GAGxD,cAAc,KAAK,MAAO,GAAG,EAE7B,MACE,yCACE,mBAAmB,EAAE,IAAI,EAAE,KAAK,WAAW,CAAC,CAChD,EACG,KAAM,UAAa,CAClB,GAAI,CAAC,SAAS,GACZ,MAAM,IAAI,MAAM,uBAAuB,OAAO,SAAS,MAAM,CAAC,EAEhE,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAM,UAAa,CACd,SAAS,OAAS,SAAS,SAC7B,cAAc,KAAK,CACjB,MAAO,SAAS,MAChB,OAAQ,SAAS,MACnB,CAAC,EACG,EAAE,OAAO,UAAU,WAAW,EAAE,uBAClC,EAAE,OAAO,UAAU,WAAW,EAAE,sBAAsB,EAG5D,CAAC,CACL,CAAC,CACH,EAEA,EAAE,eAAiB,SAAUA,WAAW,CACtC,EAAE,4DAA6DA,UAAS,EACrE,SAAS,aAAa,EACtB,KAAK,UAAY,CAChB,EAAE,OAAO,cACT,IAAI,YAAc,kBAAoB,EAAE,OAAO,YAC3C,WAAa,EAAE,IAAI,EACvB,EAAE,IAAI,EAAE,KAAK,qBAAsB,WAAW,EAC9C,IAAI,cAAgB,EAAE,8CAA8C,EACjE,KAAK,KAAM,WAAW,EACtB,SAAS,EAAE,0BAA2B,IAAI,CAAC,EAC1C,SAAW,EAAE,IAAI,EAAE,KAAK,gBAAgB,EACxC,kBAAoB,EAAE,IAAI,EAAE,SAC9B,6BACF,EAEI,OAAS,EAAE,qBAAqB,EAmBpC,GAlBI,EAAE,IAAI,EAAE,KAAK,YAAY,GAC3B,OAAO,KAAK,OAAQ,MAAM,EAE5B,OAAO,GAAG,mBAAoB,IAC5B,OAAO,KAAK,WAAY,UAAU,CACpC,EACI,WACF,OAAO,KAAK,CAAE,SAAU,WAAY,MAAO,OAAQ,CAAC,EACpD,OAAO,CAAC,EAAE,MAAQ,GAClB,OAAO,IAAI,aAAc,UAAY,CACnC,KAAK,KAAK,EACV,WAAW,SAAS,0BAA0B,CAChD,CAAC,GAGC,EAAE,IAAI,EAAE,KAAK,WAAW,GAC1B,OAAO,KAAK,MAAO,EAAE,IAAI,EAAE,KAAK,WAAW,CAAC,EAE1C,EAAE,IAAI,EAAE,KAAK,eAAe,EAE9B,QADI,QAAU,EAAE,IAAI,EAAE,KAAK,eAAe,EAAE,MAAM,GAAG,EAC5C,EAAI,EAAG,EAAI,QAAQ,OAAQ,IAAK,CACvC,GAAI,CAAC,OAAQ,SAAU,GAAG,EAAI,QAAQ,CAAC,EAAE,MAAM,GAAG,EAE9C,SAAW,QAAU,EAAE,IAAI,EAAE,KAAK,YAAY,GAGlD,EAAE,UAAU,EAAE,KAAK,CAAE,IAAK,IAAK,KAAM,QAAS,CAAC,EAAE,SAAS,MAAM,CAClE,CAEF,OAAO,SAAS,aAAa,EAE7B,IAAI,UAAa,EAAE,OAAO,UAAU,WAAW,EAAI,CACjD,KAAM,MACN,QAAS,OAAO,CAAC,EACjB,KAAM,IAAM,OAAO,CAAC,EAAE,KAAK,EAC3B,MAAO,IAAM,OAAO,CAAC,EAAE,MAAM,EAC7B,iBACF,EAEI,oBACF,OAAO,KAAK,WAAY,IAAI,EACxB,UAEFA,WAAU,iBAAiB,QAAS,UAAU,KAAM,CAClD,KAAM,EACR,CAAC,EAGP,CAAC,CACL,EAGA,EAAE,qBAAuB,SAAU,UAAW,CAE1C,UAAU,UAAU,UAAU,SAAS,6BAA6B,IAEpE,UAAU,sBAAwB,UAAY,CAC5C,IAAI,GAAK,KAAK,YACZ,GAAK,KAAK,aACV,GAAK,GAAK,GACV,MAAQ,KAAK,cAAc,QAAQ,EACnC,GAAK,WAAW,MAAM,KAAK,EAAI,WAAW,MAAM,MAAM,EACtD,IAAM,KAAK,cAAc,yBAAyB,EAClD,MAAQ,GACV,GAAI,GAAK,GAAI,CACX,IAAI,GAAK,GAAK,GAAK,MAAQ,EAC3B,IAAI,MAAM,WAAa,GAAK,IAAM,EAAI,MAAQ,KAC9C,IAAI,MAAM,kBAAoB,GAC9B,IAAI,MAAM,OAAS,GAAK,MAAQ,EAAI,KACpC,IAAI,MAAM,MAAQ,EACpB,KAAO,CACL,IAAI,GAAK,GAAK,MAAQ,EAClB,GAAK,GAAK,GACd,IAAI,MAAM,UAAY,CAAC,MAAQ,KAC/B,IAAI,MAAM,mBAAqB,GAAK,IAAM,EAAI,KAC9C,IAAI,MAAM,OAAS,GAAK,KACxB,IAAI,MAAM,MAAQ,GAAK,IACzB,CACF,EAAE,KAAK,UAAU,SAAS,EAC1B,UAAU,sBAAsB,EAChC,EAAE,MAAM,EAAE,GACR,mBAAqB,UAAU,GAC/B,UAAU,qBACZ,EAGA,UAAU,UAAU,iBAAiB,QAAS,UAAU,KAAM,CAC5D,KAAM,EACR,CAAC,EAEL,EAEA,EAAE,cAAgB,SAAUA,WAAW,CACrC,QAAS,WAAW,EAAE,OAAO,UAAW,CACtC,IAAI,KAAO,EAAE,OAAO,UAAU,OAAO,EACrC,GAAI,EAAEA,UAAS,EAAE,KAAK,KAAK,SAAS,EAAE,OAAQ,CAC5C,OAAO,EAAE,OAAO,UAAU,OAAO,EACjC,MACF,CACF,CACF,EAGA,KAAK,cAAgB,SAAUA,WAAW,CAExC,EAAE,yDAAyD,EAAE,KAC3D,UAAY,CACV,IAAI,IAAM,EAAE,IAAI,EAAE,KAAK,WAAW,EAE9B,OAAO,WAAa,KAAO,EAAE,IAAI,EAAE,KAAK,iBAAiB,IAC3D,IAAM,EAAE,IAAI,EAAE,KAAK,iBAAiB,GAGlC,IAAI,QAAQ,MAAM,EAAI,IACxB,EAAE,IAAI,EAAE,KAAK,kBAAmB,KAAK,EAGnC,IAAI,QAAQ,WAAW,EAAI,KAC7B,EAAE,IAAI,EAAE,KAAK,kBAAmB,OAAO,EACvC,EAAE,IAAI,EAAE,KAAK,gBAAiB,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,IAG9D,IAAI,QAAQ,UAAU,EAAI,IAAM,IAAI,QAAQ,aAAa,EAAI,MAC/D,EAAE,IAAI,EAAE,KAAK,kBAAmB,SAAS,EACrC,IAAI,QAAQ,IAAI,EAAI,GACtB,EAAE,IAAI,EAAE,KACN,gBACA,IAAI,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,CACpC,EAEA,EAAE,IAAI,EAAE,KAAK,gBAAiB,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,EAGtE,CACF,EAEA,EAAE,mBAAmBA,UAAS,EAC9B,EAAE,iBAAiBA,UAAS,EAC5B,EAAE,eAAeA,UAAS,EAG1B,EAAE,yBAA0BA,UAAS,EAAE,GAAG,QAAS,SAAU,IAAK,CAChE,IAAI,eAAe,EACnB,IAAI,WAAa,EAAE,IAAI,EAAE,QAAQ,kBAAkB,EAEnD,WAAW,SAAS,0BAA0B,EAG9C,WAAW,QAAQ,eAAe,EAGlC,IAAI,GAAK,WAAW,KAAK,oBAAoB,EAC7C,EAAE,OAAO,UAAU,EAAE,EAAE,KAAK,CAC9B,CAAC,EAGD,EAAE,yBAA0BA,UAAS,EAAE,GAAG,QAAS,SAAU,IAAK,CAChE,IAAI,eAAe,EACnB,IAAI,WAAa,EAAE,IAAI,EAAE,QAAQ,kBAAkB,EAEnD,WAAW,YAAY,0BAA0B,EAGjD,WAAW,QAAQ,eAAe,EAGlC,IAAI,GAAK,WAAW,KAAK,oBAAoB,EAC7C,EAAE,OAAO,UAAU,EAAE,EAAE,MAAM,CAC/B,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,EAAE,iDAAkDA,UAAS,EAAE,IAC7D,OACF,EACA,EAAE,MAAM,EAAE,IAAI,IAAM,EAAE,kBAAkB,EAAE,KAAK,oBAAoB,CAAC,EACpE,EAAE,MAAM,EAAE,IAAI,sCAAsC,EACpD,EAAE,cAAcA,UAAS,EACzB,EAAEA,UAAS,EAAE,QAAQ,eAAe,CACtC,EAEA,EAAE,0BAA4B,UAAY,CACnC,EAAE,wBACL,EAAE,sBAAwB,GAC1B,OAAO,iBAAiB,WAAa,OAAU,CACzC,MAAM,WAER,OAAO,KAAK,EAAE,OAAO,SAAS,EAC3B,OACE,KACC,EAAE,OAAO,UAAU,GAAG,EAAE,OAAS,MACjC,EAAE,OAAO,UAAU,GAAG,EAAE,iBAC5B,EACC,QAAS,KAAQ,CAChB,EAAE,OAAO,UAAU,GAAG,EAAE,KAAK,EAC7B,EAAE,OAAO,UAAU,GAAG,EAAE,KAAK,CAC/B,CAAC,CAEP,CAAC,EAEL,CACF,GAGA,GAAG,SAAS,KAAK,CACf,KAAM,QACN,QAAS,MAAM,YACjB,CAAC,EACD,MAAM,WAAa,IAAK,UAAY,CAClC,IAAI,EAAI,KACR,EAAE,OAAS,CACT,KAAM,GACN,OAAQ,CACN,QAAS,CAAC,EACV,OAAQ,CACN,CAAE,YAAa,WAAY,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EAC3D,CAAE,YAAa,cAAe,QAAS,CAAC,CAAE,WAAY,KAAM,CAAC,CAAE,EAC/D,CAAE,YAAa,mBAAoB,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EACnE,CACE,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,6BACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,MACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,MACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,gBACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,aACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,kBACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,CACF,EACA,MAAO,CACL,CAAE,YAAa,WAAY,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EAC3D,CAAE,YAAa,mBAAoB,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EACnE,CACE,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,iBACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,6BACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,6BACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,oBACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,MACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,MACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,gBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,gBACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,iCACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,iCACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,aACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,kBACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,gBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,CACF,EACA,KAAM,CACJ,CAAE,YAAa,WAAY,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EAC3D,CAAE,YAAa,cAAe,QAAS,CAAC,CAAE,WAAY,KAAM,CAAC,CAAE,EAC/D,CAAE,YAAa,mBAAoB,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EACnE,CACE,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,iBACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,yBACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,6BACb,QAAS,CAAC,CAAE,WAAY,KAAM,CAAC,CACjC,EACA,CACE,YAAa,0BACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,MACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,gBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,gBACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,iCACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,aACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,UACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,CACF,EACA,MAAO,CACL,CAAE,YAAa,WAAY,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EAC3D,CAAE,YAAa,mBAAoB,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EACnE,CACE,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,0BACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,MACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,UACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,kBACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,CACF,EACA,UAAW,CACT,CAAE,YAAa,WAAY,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EAC3D,CAAE,YAAa,mBAAoB,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAAE,EACnE,CACE,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,yBACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,6BACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,0BACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,qBACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,oBACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,MACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,MACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,MACb,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,gBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,WACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,OACb,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,kBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,UACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,UACb,YAAa,qBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,eACb,YAAa,gBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,kBACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,WACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,EACA,CACE,YAAa,QACb,YAAa,mBACb,QAAS,CAAC,CAAE,MAAO,SAAU,CAAC,CAChC,CACF,CACF,CACF,EACA,EAAE,UAAY,KAEd,KAAK,UAAY,SAAU,KAAM,CAC/B,IAAI,SAAW,EAAE,SAAS,EACtB,SAAW,IAAI,OAAO,KAAK,SAC3B,QAAU,KAAK,KAAK,iBAAiB,EAEzC,gBAAS,QAAQ,CAAE,OAAiB,EAAG,SAAU,QAASC,QAAQ,CAC5DA,UAAW,OAAO,KAAK,eAAe,IACxC,SAAS,OAAOA,OAAM,EAGxB,SAAS,QAAQ,OAAO,CAC1B,CAAC,EAEM,QACT,EAEA,KAAK,UAAY,SAAUD,WAAW,CACpC,IAAI,KAAO,EAAE,8BAA+BA,UAAS,EAErD,OAAO,EAAE,UAAU,IAAI,EACpB,KACC,SAAU,QAAS,CACjB,IAAI,WAAa,CACf,KAAM,EAAE,OAAO,KACf,OAAQ,EAAE,OAAO,OAAO,EAAEA,UAAS,EAAE,KAAK,WAAW,CAAC,EACtD,OAAQ,QAAQ,CAAC,EAAE,SAAS,SAC5B,YAAa,GACb,uBAAwB,GACxB,iBAAkB,GAClB,YAAa,CAAC,KAAK,KAAK,WAAW,CACrC,EAEA,EAAE,IAAM,IAAI,OAAO,KAAK,IAAI,KAAK,CAAC,EAAG,UAAU,EAC/C,EAAE,OAAS,EAAE,IAAI,UAAU,EAE3B,IAAI,OAAS,IAAI,OAAO,KAAK,OAAO,CAClC,IAAK,EAAE,IACP,SAAU,EAAE,OACZ,UAAW,EACb,CAAC,EAED,OAAO,KAAK,MAAM,eAAe,OAAQ,SAAU,UAAY,CAC7D,OAAO,KAAK,MAAM,QAAQ,EAAE,IAAK,QAAQ,EACzC,EAAE,IAAI,UAAU,EAAE,MAAM,CAC1B,CAAC,CACH,EAAE,KAAK,IAAI,CACb,EACC,KAAK,UAAY,CAChB,IAAI,aAEJ,OAAQ,OAAQ,CACd,IAAK,eACH,aAAe,MAAM,QAAQ,iBAC7B,MACF,IAAK,mBACH,aAAe,MAAM,QAAQ,kBAC7B,MACF,QACE,aAAe,MAAM,QAAQ,aAC7B,KACJ,CAGA,GAAI,QAAQ,WAAY,CACtB,IAAI,cAAgB,KAAK,QAAQ,cAAc,EAE/C,cAAc,SAAS,oCAAoC,EAC3D,cACG,KAAK,uBAAuB,EAC5B,KACC,mCAAqC,aAAe,QACtD,CACJ,CACF,CAAC,CACL,EAEA,KAAK,cAAgB,SAAU,OAAQ,CACrC,IAAI,WAAa,EAAE,MAAM,EAEzB,OAAO,eAAiB,UAAY,CAC7B,QAAQ,aAEb,WAAW,SAAS,oCAAoC,EACxD,WACG,KAAK,uBAAuB,EAC5B,KACC,mCACE,MAAM,QAAQ,UACd,QACJ,EACJ,EAGA,IAAI,IAAM,WAAW,KAAK,SAAS,EAE/B,OAAO,KAAQ,UAAY,MAAQ,IAKvC,MAAM,eACJ,+CAAiD,IACjD,UAAY,CACV,EAAE,UAAU,UAAU,CACxB,CACF,CACF,EAEA,KAAK,gBAAkB,SAAU,OAAQ,CAErC,OAAO,OAAO,OAAW,KACzB,OAAO,OAAO,KAAS,KAEvB,OAAO,KAAK,MAAM,eAAe,EAAE,IAAK,QAAQ,CAEpD,CACF,GAGA,GAAG,SAAS,KAAK,CACf,KAAM,MACN,QAAS,MAAM,UACjB,CAAC,EACD,MAAM,UAAY,IAAK,UAAY,CACjC,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,UAAY,MAAM,qBAAqBA,UAAS,EACrD,KAAK,UAAYA,WAEjB,KAAK,WAAa,CAChB,0BAA2B,2BAC3B,uBAAwB,gCAC1B,EAEA,KAAK,YAAc,KAAK,UAAU,cAAc,oBAAoB,EAChE,KAAK,cACP,KAAK,sBACH,KAAK,YACL,SACA,KAAK,UAAU,cAAc,KAAK,IAAI,CACxC,EACA,KAAK,sBACH,KAAK,YACL,QACA,KAAK,UAAU,cAAc,KAAK,IAAI,CACxC,EACA,KAAK,sBACH,KAAK,YACL,QACA,KAAK,UAAU,cAAc,KAAK,IAAI,CACxC,GAGF,KAAK,UAAU,oBAAsB,MAAM,SACzC,KAAK,UAAU,WAAW,KAAK,IAAI,EACnC,EACF,EACA,KAAK,sBACH,SACA,0BACA,KAAK,UAAU,mBACjB,EACA,KAAK,UAAU,oBAAoB,EAE/B,KAAK,UAAU,cAAc,YAAY,IAC3C,KAAK,sBACH,KAAK,UACL,QACA,KAAK,UAAU,iBAAiB,KAAK,IAAI,CAC3C,EACA,KAAK,UACF,QAAQ,qBAAqB,EAC7B,UAAU,IAAI,KAAK,WAAW,sBAAsB,EACvD,KAAK,UAAU,YAAY,KAAK,IAAI,EACpC,KAAK,sBACH,OACA,SACA,MAAM,SAAS,KAAK,UAAU,YAAY,KAAK,IAAI,EAAG,GAAG,CAC3D,EAEJ,EAEA,KAAK,iBAAmB,SAAUA,WAAW,CAC3C,KAAK,UAAU,oBAAoB,CACrC,EAEA,KAAK,UAAY,CACf,WAAY,UAAsB,CAChC,IAAI,iBAAmB,KAAK,UAAU,QAAQ,qBAAqB,EACjE,eAAiB,KAAK,UAAU,cAC9B,4BACF,EAEE,gBACF,eACG,iBAAiB,iBAAiB,EAClC,QAAS,SAAY,CACpB,QAAQ,WAAW,YAAY,OAAO,CACxC,CAAC,EAGL,KAAK,sBAAwB,CAAC,EAC9B,KAAK,yBAA2B,CAAC,EACjC,KAAK,cAAgB,CAAC,EAGtB,QADI,eAAiB,iBAEnB,eAAe,oBACf,eAAe,mBAAmB,UAAU,SAC1C,0BACF,GAcA,GAZA,eAAiB,eAAe,mBAGhC,KAAK,sBAAsB,KAAK,cAAc,EAC9C,eACG,iBAAiB,wBAAwB,EACzC,QAAS,SAAY,KAAK,yBAAyB,KAAK,OAAO,CAAC,EACnE,eACG,iBAAiB,4BAA4B,EAC7C,QAAS,SAAY,KAAK,cAAc,KAAK,OAAO,CAAC,EAGpD,eAAgB,CAClB,IAAI,sBAAwB,eAAe,cACzC,4BACF,EACA,GAAI,sBAAuB,CACzB,IAAI,IAAM,MAAM,8BAA8B,EAC9C,IAAI,IAAI,WAAY,sBAAsB,GAAI,WAAW,EACzD,IAAI,IAAI,QAAS,sBAAsB,UAAW,KAAK,EAEvD,IAAI,KACF;AAAA;AAAA,yDACG,OAAO,IAAI,OAAO,SAAU,IAAI,EAChC,OAAO,IAAI,OAAO,MAAO;AAAA,qBAA4B,EAEtD,aAAe,SAChB,YAAY,EACZ,yBAAyB,IAAI,EAChC,eAAe,YAAY,YAAY,CACzC,CACF,CAGE,gBACF,KAAK,UAAU,YAAY,KAAK,IAAI,CAExC,EAEA,YAAa,UAAuB,CAOlC,QANI,gBAAkB,KAAK,UAAU,cACjC,8BACF,EACA,iBAAmB,KAAK,UAAU,QAAQ,qBAAqB,EAE7D,eAAiB,iBAEnB,eAAe,oBACf,eAAe,mBAAmB,UAAU,SAC1C,0BACF,GAEA,eAAiB,eAAe,mBAGlC,IAAI,oBAAsB,gBAAgB,sBAAsB,EAC9D,mBAAqB,eAAe,sBAAsB,EAE5D,gBAAgB,MAAM,OACpB,mBAAmB,OAAS,oBAAoB,IAAM,IAC1D,EAEA,cAAe,UAAyB,CAEtC,WAAW,IAAM,CACf,IAAI,WAAa,KAAK,YAAY,MAAM,MAAM,GAAG,EAG7C,MAAQ,CAAC,EACb,WAAW,QAAS,GAAM,CACpB,EAAE,OAAS,GACb,MAAM,KAAK,EAAE,YAAY,CAAC,CAE9B,CAAC,EAGD,KAAK,yBAAyB,QAAS,SAAY,CACjD,GAAI,MAAM,OAAQ,CAChB,IAAI,UAAY,GACZ,aAAe,QAAQ,YAAY,YAAY,EACnD,MAAM,QAAS,MAAS,CAClB,aAAa,QAAQ,IAAI,GAAK,IAChC,UAAY,GAEhB,CAAC,EACG,UACF,QAAQ,UAAU,OAChB,KAAK,WAAW,yBAClB,EAEA,QAAQ,UAAU,IAChB,KAAK,WAAW,yBAClB,CAEJ,MACE,QAAQ,UAAU,OAChB,KAAK,WAAW,yBAClB,CAEJ,CAAC,EAGD,KAAK,cAAc,QAAS,SAAY,CAClC,MAAM,OACR,QAAQ,UAAU,IAAI,KAAK,WAAW,yBAAyB,EAE/D,QAAQ,UAAU,OAChB,KAAK,WAAW,yBAClB,CAEJ,CAAC,CACH,EAAG,EAAE,CACP,EAEA,iBAAkB,SAA0B,IAAK,CAC/C,GAAI,IAAI,OAAO,UAAU,SAAS,sBAAsB,EAAG,CACzD,IAAI,eAAe,EACnB,IAAI,GAAK,IAAI,OAAO,KAAK,MAAM,GAAG,EAAE,CAAC,EACjC,aAAe,SAAS,eAAe,EAAE,EACzC,cACF,aAAa,sBAAsB,EAAE,IAAM,OAAO,YAAc,GAG9D,aAAe,iBACjB,SAAS,eACX,EAAE,iBAAiB,8BAA8B,EAC7C,eACF,eAAiB,SAAS,YAAY,GAGxC,OAAO,SAAS,CACd,IAAK,cACL,SAAU,QACZ,CAAC,CACH,CACF,CACF,CACF,GAGA,GAAG,SAAS,KAAK,CACf,KAAM,aACN,QAAS,MAAM,UACf,aAAc,EAChB,CAAC,EACD,MAAM,gBAAkB,IAAK,UAAY,CACvC,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,UAAU,wBAAwB,CACzC,EAEA,KAAK,iBAAmB,SAAUA,WAAW,CAC3C,KAAK,UAAU,wBAAwB,CACzC,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,KAAK,UAAU,wBAAwB,CACzC,EAEA,KAAK,UAAY,CACf,wBAAyB,UAAmC,CAC1D,SAAS,cACP,IAAI,YAAY,0BAA2B,CACzC,QAAS,GACT,WAAY,EACd,CAAC,CACH,CACF,CACF,CACF,GAGA,GAAG,SAAS,KAAK,CACf,KAAM,mBACN,QAAS,MAAM,gBACf,aAAc,EAChB,CAAC,EAQD,MAAM,kBAAoB,SAAUA,WAAW,CAC7C,IAAI,aAAe,6BACf,UAAY,iCACZ,WAAa,cAEjB,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,UAAY,MAAM,qBAAqBA,UAAS,EACrD,KAAK,WAAa,EAAEA,UAAS,EAC7B,KAAK,UAAY,KAAK,WAAW,KAAK,8BAA8B,EACpE,KAAK,WAAa,KAAK,WAAW,KAAK,aAAa,EACpD,KAAK,OAEL,KAAK,WAAW,SAAS,SAAS,EAClC,KAAK,qBACH,WAAW,iBAAiBA,UAAS,EAAE,kBAAkB,EAAI,IAC/D,KAAK,yBAA2B,GAGhC,EAAE,MAAM,EAAE,GACR,qBAAqB,OAAO,KAAK,SAAS,EAAE,OAAO,KAAK,SAAS,EACjE,CAAC,EAAG,OAAS,CACP,KAAK,QAAQ,KAAO,KAAK,WAC3B,KAAK,UAAU,cAAc,KAAK,IAAI,EACpC,KAAK,QAAU,KAAK,QAAQ,GAAK,KACjC,KAAK,QAAQ,MACb,KAAK,WAAW,KAAK,0BAA0B,EAC/C,KAAK,SAAW,OAAO,KAAK,QAAQ,UAAc,GACpD,CAEJ,CACF,EAGI,KAAK,WAAW,KAAK,mBAAmB,GAC1C,KAAK,UAAU,cAAc,KAAK,IAAI,EACpC,KAAK,WAAW,KAAK,mBAAmB,EACxC,KAAK,WAAW,KAAK,8BAA8B,EACnD,KAAK,WAAW,KAAK,0BAA0B,EAC/C,KAAK,WAAW,KAAK,kCAAkC,CACzD,CAEJ,EAEA,KAAK,gBAAkB,UAAY,CACjC,EAAE,MAAM,EAAE,IACR,qBAAqB,OAAO,KAAK,SAAS,EAAE,OAAO,KAAK,SAAS,CACnE,EACA,KAAK,WAAW,IAAI,OAAO,EACvB,KAAK,QACP,KAAK,OAAO,IAAI,OAAO,CAE3B,EAEA,KAAK,UAAY,CAEf,gBAAiB,UAA2B,CAC1C,OAAO,IAAI,QAAQ,CAAC,QAAS,SAAW,CACtC,IAAI,aAEA,eAAe,UAAU,IAC3B,aAAe,KAAK,MAAM,eAAe,UAAU,CAAC,GAGlD,aACF,QAAQ,YAAY,EAEhB,UAAU,YACZ,UAAU,YAAY,mBACpB,SAAU,SAAU,CAClB,IAAI,OAAS,CACX,SAAU,SAAS,OAAO,SAC1B,UAAW,SAAS,OAAO,SAC7B,EAGA,MAAM,qBAAsB,CAC1B,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,MAAM,CAC7B,CAAC,EAGD,eAAe,UAAU,EAAI,KAAK,UAAU,MAAM,EAElD,QAAQ,MAAM,CAChB,EACA,UAAY,CACV,QAAQ,EAAK,CACf,EACA,CACE,WAAY,KACZ,QAAS,GACX,CACF,EAEA,QAAQ,EAAK,CAGnB,CAAC,CACH,EAGA,mBAAoB,SAA4B,UAAW,GAAI,CAC7D,OAAO,EAAE,IAAI,KAAK,WAAW,QAAQ,aAAc,SAAS,EAAG,EAAE,CACnE,EAKA,kBAAmB,SACjB,QACA,QACA,WACA,CACA,IAAI,KAAO,KAAK,GAAK,IACjB,OAAS,aAAe,SAAW,QAAU,KAE7C,MAAQ,QAAQ,SAAW,KAC3B,OAAS,QAAQ,UAAY,KAC7B,MAAQ,QAAQ,SAAW,KAC3B,OAAS,QAAQ,UAAY,KAE7B,KAAO,OAAS,OAChB,KAAO,MAAQ,MAEf,EACF,KAAK,IAAI,KAAK,IAAI,KAAO,CAAC,EAAG,CAAC,EAC9B,KAAK,IAAI,KAAK,EAAI,KAAK,IAAI,KAAK,EAAI,KAAK,IAAI,KAAK,IAAI,KAAO,CAAC,EAAG,CAAC,EAChE,EAAI,EAAI,KAAK,MAAM,KAAK,KAAK,CAAC,EAAG,KAAK,KAAK,EAAI,CAAC,CAAC,EACrD,OAAO,OAAS,CAClB,EAGA,wBAAyB,SAAiC,OAAQ,CAChE,IAAI,WAAa,KAAK,OACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EACjB,KAAO,KAEX,KAAK,OAAO,KAAK,yBAAyB,EAAE,KAAK,UAAY,CAC3D,IAAI,WAAa,CACf,SAAU,WAAW,EAAE,IAAI,EAAE,KAAK,UAAU,CAAC,EAC7C,UAAW,WAAW,EAAE,IAAI,EAAE,KAAK,WAAW,CAAC,CACjD,EAEA,GAAI,WAAW,UAAY,WAAW,UAAW,CAC/C,IAAI,SAAW,KAAK,UACjB,kBAAkB,OAAQ,WAAY,UAAU,EAChD,QAAQ,CAAC,EAEZ,EAAE,IAAI,EAAE,KAAK,QAAQ,EAGrB,WAAW,IAAM,CACf,EAAE,IAAI,EACH,QAAQ,8CAA8C,EACtD,SAAS,KAAK,CACnB,EAAG,CAAC,CACN,CAEA,EAAE,IAAI,EAAE,KAAK,gBAAiB,MAAM,CACtC,CAAC,CACH,EAGA,cAAe,SACb,UACA,aACA,uBACA,mBACA,CACA,KAAK,WAAW,IAAI,QAAS,sCAAsC,EACnE,KAAK,WAAW,IACd,QAAU,KAAK,UACf,uCACF,EACA,EAAE,6BAA6B,EAAE,OAAO,EAEnC,oBAOH,KAAK,WAAW,SAAS,YAAY,EACjC,KAAK,qBAAuB,GAC9B,KAAK,WAAW,IAAI,SAAU,KAAK,WAAW,YAAY,EAAI,IAAI,IAPpE,KAAK,WAAW,SAAS,YAAY,EACjC,KAAK,qBAAuB,GAC9B,KAAK,WAAW,IAAI,SAAU,KAAK,GASnC,oBACF,KAAK,UAAU,mBAAmB,KAChC,KACA,UACC,UAAa,CACZ,GACE,SAAS,KAAK,EAAE,OAAS,GACzB,CAAC,SAAS,SAAS,WAAW,EAC9B,CACA,KAAK,WAAW,KAAK,QAAQ,EAC7B,KAAK,WAAW,KAAK,KAAK,WAAW,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAE9D,KAAK,WACF,KAAK,+CAA+C,EACpD,KAAK,YAAY,EAEhB,wBACF,KAAK,WACF,KAAK,4CAA4C,EACjD,OAAO,EAGZ,KAAK,WAAW,KAAK,WAAW,EAAE,SAAS,MAAM,EAEjD,KAAK,OAAS,EAAE,MAAM,EAAE,KAAK,6BAA6B,EAC1D,IAAI,MAAQ,IAAI,QAAQ,KAAK,OAAQ,KAAK,SAAS,EAgDnD,GA9CA,KAAK,WAAW,GACd,QACA,uCACA,KACE,MAAM,KAAK,EAGX,KAAK,UAAU,gBAAgB,EAAE,KAAM,QAAW,CAE9C,QACA,KAAK,OAAO,KAAK,yBAAyB,EAAE,QAG5C,KAAK,UAAU,mBAAmB,KAChC,KACA,UACCE,WAAa,CACZ,KAAK,OACF,KAAK,4BAA4B,EACjC,KACC,EAAEA,SAAQ,EACP,KAAK,4BAA4B,EACjC,KAAK,CACV,EACF,KAAK,UAAU,wBAAwB,KAAK,IAAI,EAC9C,MACF,CACF,CACF,CAEJ,CAAC,EAEM,GAEX,EAEA,KAAK,OAAO,GACV,QAAU,KAAK,UACf,wCACA,IAAM,CACJ,MAAM,MAAM,CACd,CACF,EAEA,KAAK,WAAW,YAAY,YAAY,EAEpC,KAAK,qBAAuB,EAAG,CACjC,IAAI,UAAY,KAAK,WAClB,KAAK,+BAA+B,EACpC,YAAY,EACf,KAAK,WAAW,IACd,SACA,UAAY,EAAI,UAAY,KAAO,EACrC,EACA,aAAa,KAAK,wBAAwB,EAC1C,KAAK,yBAA2B,WAAW,IAAM,CAC/C,KAAK,WAAW,IAAI,SAAU,EAAE,CAClC,EAAG,KAAK,oBAAoB,CAC9B,CACF,CACF,CACF,CAEJ,CACF,EAGA,KAAK,cAAcF,UAAS,CAC9B,EAGA,GAAG,SAAS,KAAK,CACf,KAAM,qBACN,QAAS,MAAM,iBACjB,CAAC,EAQD,MAAM,MAAQ,IAAK,UAAY,CAO7B,IAAI,oBAAsB,2BAE1B,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,UAAY,MAAM,qBAAqBA,UAAS,EACrD,KAAK,WAAa,EAAEA,UAAS,EAC7B,KAAK,MAAQ,IAAI,QAAQ,KAAK,WAAY,KAAK,SAAS,EAExD,IAAI,eAAiB,KAAK,WAAW,KAAK,kBAAkB,EAC1D,aAAe,KAAK,WAAW,KAAK,eAAe,EACnD,UAAY,GACZ,SAAW,KAAK,WAAW,KAAK,WAAW,EAC3C,cAAgB,OAAO,aAAa,QAAQ,mBAAmB,EAIjE,GAAI,cAAe,CACjB,IAAI,kBACD,IAAI,KAAK,EAAE,QAAQ,EAAI,eAAkB,MACxC,iBAAmB,iBACrB,UAAY,GAEhB,CAGI,KAAK,WAAW,KAAK,0BAA0B,EAAE,SACnD,UAAY,GACZ,aAAe,EAGX,KAAK,WAAW,KAAK,mCAAmC,EAAE,QAC5D,KAAK,UAAU,oBAAoB,KAAK,IAAI,GAK5C,SAAS,cAAc,+BAA+B,IACxD,UAAY,KAIV,WAAa,WACf,WAAW,IAAM,CACf,KAAK,MAAM,KAAK,CAClB,EAAG,aAAe,GAAI,EAIxB,KAAK,WAAW,GACd,QAAU,KAAK,UACf,wCACA,IAAM,CACJ,KAAK,MAAM,MAAM,IAAM,CACrB,KAAK,UAAU,oBAAoB,KAAK,IAAI,CAC9C,CAAC,CACH,CACF,CACF,EAEA,KAAK,gBAAkB,UAAY,CACjC,KAAK,MAAM,KAAK,CAClB,EAEA,KAAK,UAAY,CAIf,oBAAqB,UAA+B,CAClD,OAAO,aAAa,QAAQ,oBAAqB,IAAI,KAAK,EAAE,QAAQ,CAAC,CACvE,CACF,EAKA,KAAK,gBAAkB,UAAY,CACjC,KAAK,WAAW,IAAI,KAAK,SAAS,CACpC,CACF,GAGA,GAAG,SAAS,KAAK,CACf,KAAM,mBACN,QAAS,MAAM,KACjB,CAAC,EAGD,MAAM,qBACJ,CACE,KACA,OACA,OACA,UACA,cACA,UACA,WACF,EAAE,KAAK,gBAAgB,EAAI,gBAC7B,MAAM,gCAAkC,SAAU,YAAa,CAC7D,EAAE,WAAW,EAAE,GAAG,MAAM,qBAAsB,SAAU,IAAK,CAC3D,IAAI,gBAAgB,CACtB,CAAC,CACH,EAEA,MAAM,kCAAoC,SAAU,YAAa,CAC/D,EAAE,WAAW,EAAE,IAAI,MAAM,oBAAoB,CAC/C,EAEA,MAAM,cAAgB,SAAUA,WAAW,CACzC,OAAO,EAAE,YAAaA,UAAS,EAAE,KAAK,UAAY,CAChD,IAAI,MAAQ,EAAE,IAAI,EAElB,SAAS,2BAA4B,CACnC,IAAI,uBAAyB,EAC7B,aACG,KACC,MAAM,SAAS,YAAY,EACvB,yBACA,gBACN,EACC,KAAK,UAAY,CAChB,wBAA0B,EAAE,IAAI,EAAE,WAAW,EAAI,CACnD,CAAC,EACI,sBACT,CAGA,MACG,QAAQ,oBAAoB,EAC5B,GAAG,sBAAuB,eAAgB,SAAU,EAAG,CACtD,EAAE,eAAe,EACjB,IAAI,SAAW,EAAE,IAAI,EAClB,QAAQ,oBAAoB,EAC5B,KAAK,eAAe,EACpB,KAAK,cAAc,EAClB,EAAE,IAAI,EAAE,SAAS,MAAM,EACzB,SAAS,KAAK,EAEd,SAAS,KAAK,CAElB,CAAC,EAGH,IAAI,gBAAiB,UACjB,UACF,MAAM,SAAS,2BAA2B,GAC1C,CAAC,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE,OACzC,GAAI,UAAW,CACb,MAAM,SAAS,2BAA2B,EAC1C,IAAI,iBAAmB,SACrB,MAAM,CAAC,EAAE,UAAU,MAAM,aAAa,EAAE,CAAC,CAC3C,EACI,gBAAkB,GAClB,MAAM,CAAC,EAAE,UAAU,QAAQ,oBAAoB,EAAI,KACrD,gBAAkB,SAChB,MAAM,CAAC,EAAE,UAAU,MAAM,uBAAuB,EAAE,CAAC,CACrD,GAEF,gBAAkB,CAChB,OAAQ,EACR,KAAM,GACN,UAAW,GACX,MAAO,EACP,OAAQ,GACR,IAAK,GACL,KAAM,GACN,WAAY,CACV,EAAG,CACD,MAAO,kBAEH,iBAAmB,EACnB,EACA,EACN,EACA,IAAK,CACH,MAAO,iBAEH,KAAK,IAAI,EAAG,iBAAmB,CAAC,CACtC,EACA,IAAK,CACH,MAAO,iBAAoC,iBAAmB,CAChE,EACA,IAAM,CACJ,MAAO,iBAAoC,gBAC7C,CACF,CACF,CACF,MACE,UAAY,0BAA0B,EAAI,MAAM,MAAM,EACtD,gBAAkB,CAChB,OAAQ,EACR,KAAM,UACN,UAAW,GACX,MAAO,KAAK,IAAI,MAAM,SAAS,EAAE,OAAQ,CAAC,EAC1C,OAAQ,GACR,IAAK,GACL,KAAM,EACR,EAGF,gBAAgB,IAAM,WAAS,cAAc,eAAe,EAK5D,IAAI,aAAe,UAAwB,CAEzC,MAAM,KAAK,YAAY,EAAE,KAAK,UAAY,CACxC,EAAE,IAAI,EACH,KAAK,gBAAiB,EAAE,IAAI,EAAE,KAAK,UAAU,CAAC,EAC9C,WAAW,UAAU,CAC1B,CAAC,EAGD,MAAM,gCAAgC,KAAK,EAG3C,MAAM,GAAG,2BAA4B,UAAY,CAE/C,MAAM,KAAK,iBAAiB,EAAE,KAAK,UAAY,CAC7C,EAAE,IAAI,EACH,KAAK,WAAY,EAAE,IAAI,EAAE,KAAK,eAAe,CAAC,EAC9C,WAAW,eAAe,CAC/B,CAAC,EAED,MACG,KACC,2KACF,EACC,YAAY,kBAAkB,EAC9B,SAAS,UAAU,EAEtB,MAAM,oBAAoB,WACxB,MAAM,QAAQ,qBAAqB,CACrC,EAEA,WAAW,UAAY,CACrB,MAAM,KAAK,cAAc,EAAE,WAAW,OAAO,EAC7C,MAAM,QAAQ,sBAAsB,CACtC,EAAG,EAAE,CACP,CAAC,EAGD,MAAM,GACJ,gDACA,SAAU,IAAK,CAEb,GAAI,CAAC,WAAa,IAAI,MAAQ,UAAW,CACvC,IAAI,WAAa,0BAA0B,EAAI,MAAM,MAAM,EAC3D,GAAI,YAAc,UAAW,CAE3B,gBAAgB,KAAO,WACvB,UAAY,WAGZ,EAAE,IAAI,MAAM,EAAE,KAAK,cAAc,EAAE,QAAQ,EAG3C,EAAE,IAAI,MAAM,EAAE,YAAY,eAAe,EAGzC,MACF,CACF,CAGA,WAAW,UAAY,CAErB,IAAI,aAAe,MAAM,KAAK,YAAY,EAAE,MAAM,EAC9C,0BAA4B,aAAe,MAAM,MAAM,EAC3D,GAAI,0BAA2B,CAG7B,IAAI,SAAW,EACf,MAAM,KAAK,WAAW,EAAE,KAAK,UAAY,CACvC,UAAY,EAAE,IAAI,EAAE,WAAW,EAAI,EAAI,CACzC,CAAC,EACD,MACG,KAAK,YAAY,EACjB,IAAI,CAAC,CAAC,EACN,YAAY,sBAAsB,CACvC,MAGE,MACG,KAAK,YAAY,EACjB,SAAS,sBAAsB,EAC/B,IAAI,CAAC,CAAC,EAGX,MACG,QAAQ,oBAAoB,EAC5B,KAAK,cAAc,EACnB,YAAY,mBAAoB,CAAC,yBAAyB,CAC/D,EAAG,EAAE,CACP,CACF,EAGA,MAAM,yBAA2B,MAAM,0BAA4B,EACnE,MACG,GAAG,yBAA0B,UAAY,CAExC,EAAE,YAAa,IAAI,EAAE,WAAW,aAAa,EAC7C,EAAE,mBAAoB,IAAI,EACvB,KAAK,cAAe,MAAM,EAC1B,KAAK,UAAY,CAChB,MAAM,2BACN,IAAI,iBAAmB,IAAM,MAAM,yBACnC,EAAE,IAAI,EACH,KACC,oEACF,EACC,KAAK,UAAY,CAChB,EAAE,IAAI,EAAE,KAAK,KAAM,EAAE,IAAI,EAAE,KAAK,IAAI,EAAI,gBAAgB,CAC1D,CAAC,EACA,KAAK,kBAAmB,EAAI,EAE/B,EAAE,IAAI,EACH,KAAK,mCAAmC,EACxC,KAAK,UAAY,CAChB,EAAE,IAAI,EAAE,KAAK,MAAO,EAAE,IAAI,EAAE,KAAK,KAAK,EAAI,gBAAgB,CAC5D,CAAC,EACA,KAAK,kBAAmB,EAAI,CACjC,CAAC,CACL,CAAC,EACA,SAAS,cAAc,EACvB,YAAY,eAAe,CAChC,EACA,aAAa,CACf,CAAC,CACH,EAEA,MAAM,gBAAkB,SAAUA,WAAW,CAC3C,EAAE,qBAAsBA,UAAS,EAAE,IAAI,gBAAgB,EACvD,EAAE,gBAAiBA,UAAS,EAAE,MAAM,SAAS,EAC7C,MAAM,kCAAkC,EAAE,gBAAiBA,UAAS,CAAC,EACrE,EAAE,gBAAiBA,UAAS,EAAE,KAAK,UAAY,CAC7C,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,QAAQ,CACvC,CAAC,CACH,EAEA,MAAM,MAAQ,CACZ,KACE,4GACA,MAAM,QAAQ,iBACd,8HACF,MACE,4GACA,MAAM,QAAQ,kBACd,2HACF,MACE,2NACA,MAAM,QAAQ,kBACd,uGACF,YACE,+OACA,MAAM,QAAQ,iBACd,+DACF,aACE,gPACA,MAAM,QAAQ,kBACd,8DACF,YACE,4GACA,MAAM,QAAQ,iBACd,mHACF,KAAM,6MACN,MACE,wXACJ,EAGA,GAAI,CACF,MAAM,QAAQ,SAAW,KAAK,MAC5B,SAAS,gBAAgB,cAAc,mBAAmB,EAAE,WAC9D,CACF,OAAS,EAAG,CACV,MAAM,QAAQ,SAAW,CAAC,CAC5B,CAuvBA,GArvBA,MAAM,qBAAuB,SAAUA,WAAW,CAChD,MAAO,CACL,IACA,EAAEA,UAAS,EAAE,KAAK,cAAc,EAChC,EAAEA,UAAS,EAAE,KAAK,YAAY,CAChC,EAAE,KAAK,EAAE,CACX,EAEA,MAAM,yBAA2B,SAAU,IAAK,CAC9C,IAAI,gBAAgB,EACpB,IAAIG,MAAO,EAAE,IAAI,aAAa,EAC5B,SAAWA,MAAK,KAAK,eAAe,GAAK,QAC3CA,MAAK,KAAK,gBAAiB,QAAQ,EACnCA,MAAK,IAAI,QAASA,MAAK,WAAW,EAAI,IAAI,EAC1C,IAAI,SAAW,KACb,SAAWA,MAAK,KAAK,EACrB,cAAgBA,MACb,QAAQ,gBAAgB,EACxB,SAAS,6BAA6B,EACtC,gBACC,UACF,SAAW,SAAS,WAAW,EAE3B,SAAS,cAAc,eAAe,EACxC,UAAY,SAAS,SAAS,IAAI,MAAM,CAAC,EAEzC,UAAY,SAAS,SAAS,IAAI,OAAO,CAAC,EAE5C,UAAY,SACV,SACG,KAAK,4BAA4B,EACjC,IAAI,sBAAsB,CAC/B,GAEA,SACE,SAASA,MAAK,IAAI,oBAAoB,CAAC,EACvCA,MAAK,KAAK,6BAA6B,EAAE,MAAM,EAC/C,EAMR,EAGA,MAAM,wBAA0B,SAAU,MAAO,CAC/C,MAAM,KAAK,kCAAkC,EAAE,SAAS,UAAU,CACpE,EAEA,MAAM,yBAA2B,SAAU,KAAM,QAAS,CACxD,MAAM,+BACJ,MAAM,gCAAkC,SAAS,cAAc,QAAQ,EACzE,IAAI,QAAU,MAAM,+BAA+B,WAAW,IAAI,EAC9D,KAAO,iBAAiB,OAAO,EAAE,KACrC,eAAQ,KAAO,KACR,QAAQ,YAAY,IAAI,CACjC,EAGA,MAAM,uBAAyB,SAAU,QAAS,CAChD,GAAI,MAAM,SAAS,cAAe,CAChC,IAAI,eAAiB,QAAQ,UAAU,MAAM,GAAG,EAChD,GACE,eAAe,QAAU,GACzB,eAAe,eAAe,OAAS,CAAC,EAAE,OACxC,eAAe,eAAe,OAAS,CAAC,EAAE,OAC1C,GACF,CACA,IAAI,KAAO,QAAQ,UACnB,GAAI,KAAK,QAAQ,4BAA4B,EAAI,EAAG,CAClD,KAAO,KAAK,QAAQ,YAAc,OACzB,MAAM,QAAQ,KAAM,cAAI,CAChC,EACD,IAAI,UAAY,KAAK,MAAM,GAAG,EAC5B,SAAW,UAAU,IAAI,EAG3B,GACE,MAAM,yBACJ,UAAU,UAAU,OAAS,CAAC,EAAE,QAAQ,YAAa,EAAE,EACrD,IACA,SAAS,QAAQ,YAAa,EAAE,EAClC,OACF,EAAE,MAAQ,QAAQ,YAElB,OAGF,KACE,UAAU,KAAK,GAAG,EAClB,qCACA,SACF,KAAO,KAAK,QAAQ,MAAO,GAAG,EAC9B,QAAQ,UAAY,IACtB,CACF,CACF,CACF,EAEA,MAAM,mBAAqB,UAAY,CACrC,IAAI,EAAI,iBAAiB,SAAS,eAAe,EAAE,iBACjD,8BACF,EACA,OAAI,GACK,SAAS,CAAC,GAAK,CAI1B,EAEA,MAAM,oBAAuB,IACpB,GAAK,MAAM,oBAAoB,GAAG,YAAY,EAAI,GAAG,UAAY,EAG1E,MAAM,gBAAkB,SAAU,KAAM,CACtC,IAAI,UAAY,gBAAgB,YAC5B,UAAY,WAAa,OAAO,iBAAiB,IAAI,EAAE,UACvD,aAAe,YAAc,WAAa,YAAc,SAE5D,GAAK,MAEE,GAAI,cAAgB,KAAK,aAAe,KAAK,aAClD,OAAO,SAFP,QAAO,KAKT,OACE,MAAM,gBAAgB,KAAK,UAAU,GACrC,SAAS,kBACT,MAEJ,EAEA,MAAM,sBAAwB,SAAU,GAAI,CAC1C,IAAI,gBAAkB,MAAM,gBAAgB,EAAE,EAC1C,UACF,kBAAoB,OAAS,OAAO,QAAU,gBAAgB,UAC5D,oBACF,kBAAoB,OAChB,OAAO,YACP,gBAAgB,aAClB,MAAQ,MAAM,oBAAoB,EAAE,EACtC,MAAQ,MAAQ,GAAG,aACnB,UAAY,UAAY,MAAM,mBAAmB,EACjD,UAAY,UAAY,oBAAsB,IAE5C,MAAQ,WAAa,MAAQ,YAC/B,gBAAgB,SAAS,CACvB,IAAK,MAAQ,IAAM,MAAM,mBAAmB,EAC5C,KAAM,EACN,SAAU,QACZ,CAAC,CAEL,EAEA,MAAM,wBAA0B,SAAU,eAAgB,CACxD,IAAI,cAAgB,CAAC,EAErB,sBACG,KAAK,iDAAiD,EACtD,KAAK,UAAY,CAEb,EAAE,IAAI,EACJ,KAAK,wBAAwB,EAC7B,OAAO,UAAY,CAClB,OAAO,KAAK,SAAW,KAAK,QAAQ,KACtC,CAAC,EAAE,QAEL,cAAc,KAAK,IAAI,CAE3B,CAAC,EAEH,eACG,KAAK,+CAA+C,EACpD,KAAK,UAAY,CACX,EAAE,IAAI,EAAE,KAAK,eAAe,EAAE,QACjC,cAAc,KAAK,IAAI,CAE3B,CAAC,EAEI,aACT,EAEA,MAAM,oBAAsB,SAAU,eAAgB,CAOpD,GANA,eACG,KAAK,yBAAyB,EAC9B,YAAY,wBAAwB,EACpC,KAAK,gBAAgB,EACrB,OAAO,EAEL,eAAe,KAAK,oBAAoB,EAAE,IAAI,EAqB5C,MACJ,QAAM,cAAc,sBAAsB,cAAc,EAAE,UArB3D,IAAI,cAAgB,MAAM,wBAAwB,cAAc,EAEhE,OAAI,cAAc,SAChB,cAAc,QAAS,IAAO,CAC5B,IAAI,MAAQ,GAAG,cAAc,QAAQ,EACrC,GAAG,UAAU,IAAI,wBAAwB,EACzC,IAAI,YAAc,SAAS,cAAc,MAAM,EAC/C,YAAY,UACV,MAAM,QAAQ,wBACd,KACC,OAAO,SAAS,OAAO,kBAAkB,GAAK,IACjD,YAAY,UAAY,gBACxB,MAAM,QAAQ,WAAW,CAC3B,CAAC,EAED,MAAM,sBAAsB,cAAc,CAAC,CAAC,EAE5C,eAAe,SAAS,kCAAkC,GAErD,EASX,EAEA,MAAM,cAAgB,SAAU,OAAQ,EAClC,CAAC,QAAU,OAAO,UACpB,SAAS,iBAAiB,aAAa,EAAE,QAAS,OAAU,CAC1D,MAAM,cAAc,YAClB,oDACA,GACF,CACF,CAAC,EACD,SAAS,iBAAiB,WAAW,EAAE,QAAS,OAAU,CACxD,MAAM,cAAc,YAAY,qBAAsB,GAAG,CAC3D,CAAC,EACD,SAAS,iBAAiB,OAAO,EAAE,QAAS,OAAU,MAAM,MAAM,CAAC,IAEjE,CAAC,QAAU,OAAO,SACpB,SAAS,iBAAiB,eAAe,EAAE,QAAS,OAAU,CACxD,MAAM,eAAe,MAAM,cAAc,MAAM,CACrD,CAAC,CAEL,EAEA,MAAM,UAAY,CAACH,WAAW,SAAW,CAYvC,QAXI,iBAAmB,CAAC,KAAM,MAAO,mBAAoB,eAAe,EACpE,MAAQ,SAAeI,GAAG,CAC5BJ,WACG,iBAAiB,IAAI,OAAO,iBAAiBI,EAAC,EAAG,GAAG,CAAC,EACrD,QAAS,IACR,GAAG,aACD,iBAAiBA,EAAC,EAClB,GAAG,aAAa,iBAAiBA,EAAC,CAAC,EAAI,MACzC,CACF,CACJ,EACS,EAAI,EAAG,EAAI,iBAAiB,OAAQ,IAC3C,MAAM,CAAC,CAEX,EAEA,MAAM,yBAA2B,SAC/B,QACA,UACA,SACA,SACA,CACA,IAAI,uBACF,UAAU,OAAS,GAAK,UAAU,CAAC,IAAM,OAAY,UAAU,CAAC,EAAI,KAClE,GAAM,KAAQ,CAChB,IAAI,GAAK,IAAI,OAAO,QAAQ,QAAQ,EAC/B,IACA,QAAQ,SAAS,EAAE,GACxB,SAAS,KAAK,GAAI,IAAK,EAAE,CAC3B,EACA,QAAQ,iBAAiB,UAAW,GAAI,sBAAsB,CAChE,EAEA,MAAM,cAAiB,IAAO,CAE5B,GAAG,iBAAiB,OAAO,EAAE,QAASC,KAAQA,IAAG,SAAW,EAAK,EAGjE,IAAI,QAAU,SAAS,cAAc,KAAK,EAC1C,QAAQ,UAAY,uBACpB,GAAG,WAAW,aAAa,QAAS,EAAE,EACtC,QAAQ,YAAY,EAAE,EACtB,GAAG,UAAU,IAAI,mBAAmB,EACpC,QAAQ,MAAM,OAAS,QAAQ,aAAe,KAE9C,IAAI,GAAK,iBAAiB,EAAE,EAC1B,aAAe,WAAW,GAAG,iBAAiB,iBAAiB,CAAC,EAAI,IACpE,cACE,WAAW,GAAG,iBAAiB,kBAAkB,CAAC,EAAI,IAE1D,WAAW,IAAM,CACf,QAAQ,UAAU,IAAI,4BAA4B,EAElD,WAAW,IAAM,CACf,QAAQ,UAAU,IAAI,6BAA6B,EAEnD,WAAW,IAAM,QAAQ,OAAO,EAAG,aAAa,CAClD,EAAG,YAAY,CACjB,EAAG,EAAE,CACP,EAEA,MAAM,gBAAkB,CAAC,GAAI,OAAQ,OAAQ,QAAU,CACrD,IAAI,aAAe,OAAgB,GACnC,GAAG,UAAU,IAAI,mBAAmB,EACpC,OAAO,sBAAsB,OAAQ,EAAE,EACvC,GAAG,MAAM,OAAS,GAAG,kBAAkB,aAAe,KAEtD,IAAI,GAAK,iBAAiB,EAAE,EAC1B,aAAe,WAAW,GAAG,iBAAiB,iBAAiB,CAAC,EAAI,IACpE,cACE,WAAW,GAAG,iBAAiB,kBAAkB,CAAC,EAAI,IAE1D,WAAW,IAAM,CACf,GAAG,UAAU,IAAI,0BAA0B,EAE3C,WAAW,IAAM,CACf,GAAG,UAAU,IAAI,yBAAyB,EAE1C,WAAW,IAAM,CAEf,GAAG,MAAM,OAAS,GAClB,GAAG,UAAU,OACX,oBACA,2BACA,yBACF,CACF,EAAG,YAAY,CACjB,EAAG,aAAa,CAClB,EAAG,YAAY,CACjB,EAEA,MAAM,WAAa,CAAC,WAAY,kBAAoB,CAClD,GAAI,CAEF,WAAW,iBAAiB,cAAc,EAAE,QAAS,OAAU,CAC7D,IAAI,SAAW,gBAAgB,cAC7B,gBAAgB,OAAO,MAAM,QAAQ,MAAO,IAAI,CAClD,GAEE,CAAC,MAAM,QAAQ,YACf,CAAC,SAAS,QAAQ,YAClB,MAAM,QAAQ,aAAe,SAAS,QAAQ,cAE9C,SAAS,UAAY,MAAM,UAC3B,SAAS,QAAQ,WAAa,MAAM,QAAQ,WAEhD,CAAC,EAED,WACG,iBAAiB,yBAAyB,EAC1C,QAAS,OAAU,CAClB,IAAI,SAAW,gBAAgB,cAC7B,2BAA2B,OACzB,MAAM,QAAQ,gBACd,IACF,CACF,EACA,QAAS,QAAQ,MAAM,WACrB,SAAS,aAAa,KAAK,UAAW,KAAK,KAAK,CAEpD,CAAC,EAEH,WAAW,iBAAiB,mBAAmB,EAAE,QAAS,SAAY,CACpE,IAAI,WAAa,gBAAgB,cAC/B,qBAAqB,OAAO,QAAQ,QAAQ,UAAW,IAAI,CAC7D,EACI,gBAAkB,MAAM,KAC1B,WAAW,iBAAiB,wBAAwB,CACtD,EACI,aAAe,MAAM,KACvB,QAAQ,iBAAiB,wBAAwB,CACnD,EAGA,gBAAgB,QAAS,gBAAmB,CAC1C,IAAI,YAAc,aAAa,KAC5B,MACC,KAAK,QAAQ,eAAiB,eAAe,QAAQ,aACzD,EACK,aACH,MAAM,cAAc,cAAc,CAEtC,CAAC,EAGD,gBAAkB,MAAM,KACtB,WAAW,iBACT,gDACF,CACF,EAwCA,QAvCI,OAAS,UAAkB,CAC7B,IAAI,YAAc,aAAa,CAAC,EAC5B,YAAc,gBAAgB,KAC/B,MACC,KAAK,QAAQ,eAAiB,YAAY,QAAQ,aACtD,EACI,aAGA,CAAC,YAAY,QAAQ,YACrB,CAAC,YAAY,QAAQ,YACrB,YAAY,QAAQ,aAAe,YAAY,QAAQ,cAEvD,YAAY,UAAY,YAAY,UAChC,YAAY,QAAQ,aACtB,YAAY,QAAQ,WAAa,YAAY,QAAQ,cAKrD,IAAM,EAER,MAAM,gBAAgB,YAAa,WAAY,aAAc,GAAG,EACvD,GAAK,gBAAgB,OAE9B,MAAM,gBAAgB,YAAa,WAAY,YAAa,GAAG,EAG/D,MAAM,gBACJ,YACA,gBAAgB,CAAC,EACjB,cACA,GACF,EAGF,gBAAgB,OAAO,EAAG,EAAG,WAAW,EAE5C,EACS,EAAI,EAAG,EAAI,aAAa,OAAQ,IACvC,OAAO,CAEX,CAAC,CACH,MAAkB,CAChB,SAAS,OAAO,CAClB,CACF,EAGA,MAAM,gBAAkB,CACtB,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACnE,KAAM,IAAM,KAAM,KAAM,IAC1B,EACA,MAAM,cAAgB,SAAUL,WAAW,CACzC,EAAE,wBAAyBA,UAAS,EAAE,KAAK,UAAY,CAOrD,QANI,OAAS,GACX,UAAY,EAAE,IAAI,EAAE,KAAK,gBAAgB,EACzC,YAAc,EAAE,IAAI,EAAE,KAAK,yBAAyB,EACpD,YAAc,EAAE,IAAI,EAAE,KAAK,kBAAkB,EAC7C,aAAe,KAAK,MAAM,YAAc,WAAW,EAE5C,EAAI,EAAG,EAAI,MAAM,gBAAgB,OAAQ,IAAK,CACrD,IAAI,UAAY,MAAM,gBAAgB,CAAC,EACnC,aAAe,YACjB,QAAU,GACP,OAAO,MAAM,QAAQ,YAAY,UAAW,UAAY,GAAG,EAAG,GAAG,EACjE,OAAO,UAAW,IAAI,EACtB,OAAO,KAAK,MAAM,UAAY,WAAW,EAAG,KAAK,EAExD,CACA,QAAU,GACP,OAAO,UAAW,GAAG,EACrB,OAAO,YAAa,IAAI,EACxB,OAAO,aAAc,GAAG,EAC3B,EAAE,IAAI,EACH,KAAK,aAAc,MAAM,EACzB,YAAY,kBAAkB,EAC9B,SAAS,UAAU,CACxB,CAAC,CACH,EAIA,MAAM,oBAAsB,IAAK,UAAY,CAC3C,IAAI,EAAI,KAER,EAAE,UAAY,UAAY,CACxB,OAAO,EAAE,MAAM,EAAE,MAAM,GAAK,GAC9B,EAEA,EAAE,WAAa,SAAUA,WAAW,CAClC,IAAIA,WAAYA,WACZ,OAAOA,WAAc,MACvBA,WAAY,EAAE,MAAM,GAItB,MAAM,cAAcA,UAAS,EAEzB,EAAE,UAAU,IAEd,WAAW,IAAM,CACf,EACE,yEACAA,UACF,EAAE,KAAK,UAAY,CACjB,EAAE,cAAc,EAAE,IAAI,CAAC,EACvB,UAAU,OAAO,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC,CAAC,CACtD,CAAC,CACH,EAAG,GAAG,EAEN,WAAW,IAAM,CACf,EACE,4EACAA,UACF,EAAE,KAAK,UAAY,CACjB,EAAE,cAAc,EAAE,IAAI,CAAC,CACzB,CAAC,CACH,EAAG,GAAI,GAGT,EAAE,uBAAuBA,UAAS,EAClC,EAAE,uBAAuBA,UAAS,EAClC,EAAE,mBAAmBA,UAAS,CAChC,EAEA,EAAE,aAAe,SAAUA,WAAW,CACpC,EAAEA,UAAS,EAAE,IAAI,sBAAsB,CACzC,EAGA,EAAE,WAAa,SAAU,QAAS,MAAO,CAEvC,OAAO,SACH,MAAQ,QAAQ,OAAU,QAAQ,QAAU,QAAQ,MACxD,CACF,EAEA,EAAE,cAAgB,SAAU,OAAQ,SAAU,CAC5C,IAAI,QAAU,OAAO,OAAO,oCAAoC,EAC5D,QAAQ,QACN,UACF,QAAQ,GAAG,+BAAiC,KAAQ,CAC9C,IAAI,SAAW,QAAQ,KAAK,aAAa,EAAE,CAAC,GAC9C,SAAS,EAEX,EAAE,IAAI,EAAE,IAAI,8BAA8B,CAC5C,CAAC,EAEH,QAAQ,YAAY,mCAAmC,GAC9C,UACT,SAAS,CAEb,EAEA,EAAE,qBAAuB,SAAU,QAAS,UAAW,CACrD,IAAI,MAAQ,KAAK,IACf,QAAQ,OAAO,qCAAqC,EAAE,MAAM,EAC5D,CACF,EACA,EAAE,eAAe,QAAS,MAAQ,SAAS,CAC7C,EAEA,EAAE,eAAiB,SAAU,QAAS,MAAO,CAC3C,IAAI,WAAa,EAAE,EAAE,WAAW,QAAS,KAAK,CAAC,EAE/C,EAAE,cAAc,WAAY,IAAM,CAEhC,WAAW,SAAS,8BAA8B,EAClD,WAAW,SAAS,EAAE,YAAY,8BAA8B,EAEhE,IAAI,YAAc,EAAE,EAAE,WAAW,QAAS,MAAQ,CAAC,CAAC,EAAE,SACpD,qCACF,EACA,YACG,SAAS,EACT,YAAY,qCAAqC,EACpD,EAAE,cAAc,WAAW,CAC7B,CAAC,EAGD,IAAI,MAAQ,QACT,QAAQ,aAAa,EACrB,KAAK,2BAA2B,EACnC,MACG,YAAY,kCAAkC,EAC9C,GAAG,WAAW,MAAM,CAAC,EACrB,SAAS,kCAAkC,CAChD,EAEA,EAAE,uBAAyB,SAAUA,WAAW,CAC1C,EAAE,oCAAqCA,UAAS,EAAE,SAEpD,EAAEA,UAAS,EAAE,GACX,4BACA,qBACA,SAAU,IAAK,CACb,IAAI,QAAU,EAAE,IAAI,EACjB,QAAQ,gBAAgB,EACxB,KAAK,uBAAuB,EAC/B,SAAE,qBACA,QACA,EAAE,IAAI,aAAa,EAAE,SAAS,yBAAyB,EAAI,EAAI,EACjE,EAEA,QAAQ,KAAK,UAAY,CACvB,EAAE,cAAc,EAAE,IAAI,CAAC,CACzB,CAAC,EACM,EACT,CACF,EAIE,EAAE,0CAA2CA,UAAS,EAAE,QACtD,sCACF,EAAE,SAAW,IAGb,EAAEA,UAAS,EAAE,GAAG,cAAe,iBAAkB,UAAY,CACvD,EAAE,qCAAsC,IAAI,EAAE,QAChD,WACE,UAAY,CACV,EAAE,IAAI,EACH,KAAK,uBAAuB,EAC5B,KAAK,UAAY,CAChB,EAAE,cAAc,EAAE,IAAI,CAAC,CACzB,CAAC,CACL,EAAE,KAAK,IAAI,EACX,GACF,CAEJ,CAAC,EAED,EAAEA,UAAS,EAAE,GACX,iCACA,oCACA,SAAU,IAAK,CACb,MAAM,0BAA4B,GAClC,MAAM,wBAA0B,IAAI,QAAQ,CAAC,EAAE,QAC/C,MAAM,wBAA0B,IAAI,QAAQ,CAAC,EAAE,QAE/C,IAAI,UAAY,IAAI,cAAc,cAChC,oEACF,EACI,WACF,EAAE,cAAc,EAAE,SAAS,CAAC,CAEhC,CACF,EAEA,EAAEA,UAAS,EAAE,GACX,gCACA,oCACA,SAAU,IAAK,CACb,GAAI,MAAM,2BAEN,KAAK,IACH,IAAI,QAAQ,CAAC,EAAE,QAAU,MAAM,uBACjC,EAAI,GACJ,CACA,IAAI,OACF,IAAI,QAAQ,CAAC,EAAE,QAAU,MAAM,wBACjC,GAAI,OAAS,GAAI,CACf,IAAI,QAAU,EAAE,IAAI,EACjB,QAAQ,gBAAgB,EACxB,QAAQ,aAAa,EACrB,KAAK,uBAAuB,EAC/B,EAAE,qBAAqB,QAAS,EAAE,EAClC,MAAM,0BAA4B,EACpC,SAAW,OAAS,IAAK,CACvB,IAAI,QAAU,EAAE,IAAI,EACjB,QAAQ,gBAAgB,EACxB,QAAQ,aAAa,EACrB,KAAK,uBAAuB,EAC/B,EAAE,qBAAqB,QAAS,CAAC,EACjC,MAAM,0BAA4B,EACpC,CACF,CAEJ,CACF,EACA,EAAEA,UAAS,EAAE,GACX,+BACA,oCACA,SAAU,IAAK,CACb,MAAM,0BAA4B,EACpC,CACF,GAGN,EAEA,EAAE,uBAAyB,SAAUA,WAAW,CAC1C,EAAE,2CAA4CA,UAAS,EAAE,QAC3D,EAAEA,UAAS,EAAE,GACX,2DACA,2CACA,UAAY,CACV,IAAI,OAAS,EAAE,IAAI,EAAE,QAAQ,gBAAgB,EACzC,QAAU,OAAO,KAAK,uBAAuB,EAC7C,MAAQ,QACT,OACC,mBACE,EAAE,IAAI,EAAE,KAAK,OAAO,EACpB,yBACJ,EACC,MAAM,EACT,EAAE,eAAe,QAAS,KAAK,EAE/B,IAAI,WAAa,EAAE,IAAI,EAClB,QAAQ,wBAAwB,EAChC,KAAK,aAAa,EACrB,YAAc,EAAE,IAAI,EAAE,KAAK,aAAa,EAC1C,OAAO,CAAC,EACL,iBAAiB,iCAAiC,EAClD,QAAS,IAAO,CACf,IAAI,IAAM,IAAI,IAAI,GAAG,IAAI,EACrB,OAAS,IAAI,gBAAgB,IAAI,MAAM,EAC3C,OAAO,IAAI,WAAY,WAAW,EAClC,GAAG,KAAO,GAAG,OAAO,IAAI,SAAU,GAAG,EAAE,OAAO,MAAM,EACpD,GAAG,IAAM,UACX,CAAC,CACL,CACF,CAEJ,EAEA,EAAE,mBAAqB,SAAUA,WAAW,CAC1C,IAAIA,WAAYA,WACZ,OAAOA,WAAc,MACvBA,WAAY,EAAE,MAAM,GAGtB,EAAE,yBAAyBA,UAAS,CACtC,EAEA,EAAE,yBAA2B,SAAUA,WAAW,CAChD,IAAIA,WAAYA,WACZ,OAAOA,WAAc,MACvBA,WAAY,EAAE,MAAM,GAItB,EAAE,oCAAqCA,UAAS,EAAE,KAAK,UAAY,CACjE,GACE,EAAE,MAAM,EAAE,MAAM,GAAK,KACrB,EAAE,IAAI,EAAE,QAAQ,WAAW,EAAE,OAAS,EACtC,CACA,IAAI,QAAU,EACd,EAAE,IAAI,EACH,KAAK,gDAAgD,EACrD,KAAK,UAAY,CACZ,EAAE,IAAI,EAAE,OAAO,EAAI,UAAS,QAAU,EAAE,IAAI,EAAE,OAAO,EAC3D,CAAC,EACH,EAAE,IAAI,EACH,KAAK,6BAA6B,EAClC,IAAI,aAAc,OAAO,CAC9B,MACE,EAAE,IAAI,EAAE,KAAK,6BAA6B,EAAE,IAAI,aAAc,EAAE,CAEpE,CAAC,CACH,CACF,GAEI,MAAM,SAAS,oBAAsB,eAAgB,CACvD,IAAI,kBAAoB,cAAc,WAAY,CAChD,mBAAoB,CAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,KAAK,QAAQ,YAAY,EAC9C,KAAK,QAAQ,CACf,CAEA,sBAAuB,CACrB,aAAa,KAAK,qBAAqB,CACzC,CAEA,eAAgB,CACd,SACG,iBAAiB,qBAAqB,EACtC,QAAS,cAAiB,CACrB,eAAiB,MACnB,aAAa,QAAQ,CAEzB,CAAC,CACL,CAEA,gBAAgB,aAAc,CAC5B,KAAK,cAAc,oCAAoC,EAAE,UACvD,YACJ,CAEA,SAAU,CAeR,GAbA,WACE,IAAM,KAAK,UAAU,OAAO,4BAA4B,EACxD,EACF,EAGA,KAAK,sBAAwB,WAAW,KAAK,QAAQ,KAAK,IAAI,EAAG,GAAI,EAGrE,KAAK,cAAc,4BAA4B,EAAE,iBAC/C,QACA,KAAK,QAAQ,KAAK,IAAI,CACxB,EACI,MAAM,SAAS,YAAc,SAAU,CACzC,IAAI,UAAY,KAAK,iBACnB,oDACF,EACA,UAAU,QAAS,IAAO,CACxB,GAAG,iBAAiB,QAAU,KAAQ,CACpC,IAAI,eAAe,EACnB,SAAS,cACP,IAAI,YAAY,yBAA0B,CACxC,QAAS,GACT,WAAY,EACd,CAAC,CACH,EAEA,KAAK,QAAQ,CACf,CAAC,CACH,CAAC,CACH,CACF,CAEA,QAAQ,IAAK,CACP,KACF,IAAI,eAAe,EAErB,KAAK,UAAU,IAAI,+BAA+B,EAClD,WAAW,KAAK,OAAO,KAAK,IAAI,EAAG,GAAI,CACzC,CACF,EAEA,OAAO,eAAe,OAAO,qBAAsB,iBAAiB,CACtE,CAEA,MAAM,uBAAyB,SAAU,eAAgB,CACvD,eAAe,KAAK,4BAA4B,EAAE,KAAK,UAAY,CACjE,IAAI,MAAQ,EAAE,IAAI,EAClB,MAAM,GAAG,SAAU,SAAU,IAAK,CAEhC,GAAI,CAAC,MAAM,oBAAoB,cAAc,EAC3C,MAAO,GAIT,GACE,MAAM,SAAS,oBAAsB,SACrC,eAAe,GAAG,gCAAgC,EAClD,CACA,IAAI,eAAe,EAEnB,IAAI,kBAAoB,MAAM,OAAO,aAGrC,MACG,KAAK,uBAAuB,EAC5B,KAAK,WAAY,UAAU,EAC3B,KAAK,UAAY,CACZ,EAAE,IAAI,EAAE,SAAS,YAAY,EAC/B,aAAa,EAAE,IAAI,EAAE,KAAK,8BAA8B,CAAC,EAEzD,EAAE,IAAI,EAAE,KAAK,iBAAkB,EAAE,IAAI,EAAE,KAAK,CAAC,CAEjD,CAAC,EACA,KACC,6DACF,EAGF,IAAI,SAAW,IAAI,SAAS,MAAM,CAAC,CAAC,EACpC,SAAS,OAAO,WAAY,aAAa,EACzC,EAAE,KACA,kBACA,IAAI,gBAAgB,QAAQ,EAAE,SAAS,EACvC,MAAM,mBAAmB,KAAK,KAAK,EACnC,MACF,EAAE,KAAK,SAAU,KAAM,CAUrB,GARA,MACG,KAAK,uBAAuB,EAC5B,WAAW,UAAU,EACrB,KAAK,UAAY,CAChB,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,gBAAgB,CAAC,CAC7C,CAAC,EAID,OAAO,KAAS,KAChB,OAAO,KAAK,OAAW,IACvB,CACA,IAAI,QAAU,EAAE,UAAU,KAAK,YAAY,EAC3C,MAAM,eACJ,QAAQ,YACR,MAAM,KAAK,6BAA6B,CAC1C,CACF,MAEE,eAAe,KAAK,mBAAoB,OAAO,EAC/C,MAAM,OAAO,CAEjB,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACH,EAEA,MAAM,mBAAqB,SAAU,SAAU,CAC7C,GAAI,MAAM,SAAS,oBAAsB,OAEvC,OAAO,SAAW,MAAM,OAAO,iBACtB,MAAM,SAAS,oBAAsB,SAE9C,SAAS,gBAAgB,cACvB,IAAI,YAAY,oBAAqB,CACnC,QAAS,GACT,WAAY,GACZ,OAAQ,CAAE,WAAY,EAAK,CAC7B,CAAC,CACH,UACS,MAAM,SAAS,oBAAsB,eAAgB,CAE9D,SAAS,gBAAgB,cACvB,IAAI,YAAY,oBAAqB,CACnC,QAAS,GACT,WAAY,EACd,CAAC,CACH,EAGA,IAAI,aAAe,SAChB,eAAe,mBAAmB,EAClC,QAAQ,kBAAkB,UAAU,EAAI,EAC3C,aAAa,QAAQ,aAAe,SAAS,cAC7C,IAAI,sBAAwB,SAAS,cAAc,qBAAqB,EACnE,wBACH,sBAAwB,SAAS,cAAc,MAAM,GAEvD,sBAAsB,YAAY,YAAY,CAChD,CAGA,EAAE,IAAI,EACH,KAAK,uBAAuB,EAC5B,WAAW,UAAU,EACrB,KAAK,UAAY,CAChB,KAAO,EAAE,IAAI,EAEb,KACG,SAAS,YAAY,EACrB,KAAK,MAAM,QAAQ,8BAA8B,EACpD,aAAa,EAAE,IAAI,EAAE,KAAK,8BAA8B,CAAC,EACzD,KAAK,KACH,+BACA,WAAW,UAAY,CACrB,KAAK,KAAK,KAAK,KAAK,gBAAgB,CAAC,EAAE,YAAY,YAAY,CACjE,EAAG,GAAI,CACT,CACF,CAAC,CACL,EAEA,MAAM,0BAA4B,SAAU,eAAgB,CAC1D,eAAe,KAAK,4BAA4B,EAAE,IAAI,QAAQ,CAChE,EAEA,IAAI,SAAW,cAAc,WAAY,CACvC,mBAAoB,CAClB,MAAM,gBAAgB,KAAK,EAAE,gBAAiB,IAAI,CAAC,EACnD,KAAK,iBAAmB,KAAK,QAAQ,WAEjC,KAAK,mBACP,KAAK,UAAY,KAAK,QAAQ,UAC9B,KAAK,aAAgB,KAAQ,CAC3B,KAAK,QAAQ,IAAI,QAAU,IAAI,OAAO,UAAU,CAClD,EACA,SAAS,iBAAiB,oBAAqB,KAAK,YAAY,EAEhE,MAAM,yBACJ,KACA,QACA,qBACC,KAAQ,CACP,IAAI,eAAe,EACnB,KAAK,mBAAmB,IAAI,OAAO,QAAQ,YAAY,EAAG,CACxD,GAAI,CACN,CAAC,CACH,CACF,EAEA,MAAM,yBACJ,KACA,QACA,iBACC,KAAQ,CACP,IAAI,eAAe,EACnB,KAAK,mBAAmB,IAAI,OAAO,QAAQ,YAAY,EAAG,CACxD,SAAU,EACZ,CAAC,CACH,CACF,EAEA,MAAM,yBAAyB,KAAM,QAAS,eAAiB,KAAQ,CACrE,IAAI,eAAe,EACnB,KAAK,mBAAmB,IAAI,OAAO,QAAQ,YAAY,EAAG,CACxD,SAAU,EACZ,CAAC,CACH,CAAC,EAED,MAAM,yBACJ,KACA,SACA,6BACC,KAAQ,CACP,KAAK,mBAAmB,IAAI,OAAO,QAAQ,YAAY,EAAG,CACxD,aAAc,EAChB,CAAC,CACH,CACF,EAEJ,CAEA,sBAAuB,CACrB,MAAM,gBAAgB,OAAO,EAAE,gBAAiB,IAAI,CAAC,EAEjD,KAAK,kBACP,SAAS,oBAAoB,oBAAqB,KAAK,YAAY,CAEvE,CAEA,QAAQ,WAAY,CAClB,KAAK,UAAU,IAAI,uBAAuB,EAC1C,MACE,GACG,OAAO,OAAO,QAAQ,OAAO,KAAM,cAAc,EACjD,OAAO,KAAK,SAAS,CAC1B,EACG,KAAM,UAAa,CAClB,GAAI,CAAC,SAAS,GACZ,MAAM,IAAI,MAAM,uBAAuB,OAAO,SAAS,MAAM,CAAC,EAEhE,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAM,UAAa,CAClB,IAAI,KAAO,SAAS,uBAAuB,EACzC,WAAa,SAAS,cAAc,KAAK,EAC3C,KAAK,YAAY,UAAU,EAC3B,WAAW,UAAY,SAEvB,WACG,iBAAiB,mBAAmB,EACpC,QAAS,IAAO,GAAG,gBAAgB,iBAAiB,CAAC,EAExD,MAAM,WAAW,WAAY,IAAI,EAEjC,KAAK,UAAU,OAAO,uBAAuB,EAC7C,KAAK,iBAAiB,wBAAwB,EAAE,QAAS,IACvD,GAAG,UAAU,OAAO,uBAAuB,CAC7C,EAEA,MAAM,gBAAgB,KAAK,EAAE,gBAAiB,IAAI,CAAC,EAE/C,YACF,SAAS,cACP,IAAI,YAAY,yBAA0B,CACxC,QAAS,GACT,WAAY,EACd,CAAC,CACH,CAEJ,CAAC,CACL,CAEA,mBAAmB,KAAM,OAAQ,CAC/B,IAAI,cAAgB,KAAK,cAAc,4BAA4B,EAE/D,YAAc,SAAS,cAAc,KAAK,EAC1C,OAAO,OAAO,GAAO,KACvB,YAAc,OAAO,GACrB,cAAc,MAAQ,aACb,OAAO,UAChB,aAAe,cAAc,MAAQ,EACrC,cAAc,MAAQ,aACb,OAAO,UAChB,aAAe,cAAc,MAAQ,EACrC,cAAc,MAAQ,aACb,OAAO,aAIhB,cAAc,KACd,SAAS,cAAc,KAAK,EAAI,SAAS,cAAc,GAAG,IAE1D,YAAc,cAAc,IAC5B,cAAc,MAAQ,YACtB,MAAM,eACJ,MAAM,QAAQ,+BAA+B,QAC3C,aACA,cAAc,GAChB,EACA,EAAE,aAAa,CACjB,GAGF,aAAa,KAAK,yBAAyB,EAC3C,KAAK,0BAA4B,WAC/B,IAAM,CACJ,IAAI,KAAO,CAAC,EACZ,KAAK,iBACH,4CACF,EAAE,QAAS,IAAO,CAChB,KAAK,KAAK,GAAG,KAAK,EACd,GAAG,OAAS,GAAG,QAAQ,cACzB,GAAG,QAAQ,wBAAwB,EAAE,UAAU,IAC7C,uBACF,CAEJ,CAAC,EACD,MAAM,MAAM,OAAO,gBAAiB,CAClC,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,QAAS,IAAK,CAAC,EACtC,QAAS,CACP,eAAgB,kBAClB,CACF,CAAC,EAAE,KAAM,UAAa,CACpB,GAAI,CAAC,SAAS,GACZ,MAAM,IAAI,MAAM,uBAAuB,OAAO,SAAS,MAAM,CAAC,EAEhE,SAAS,cACP,IAAI,YAAY,oBAAqB,CACnC,QAAS,GACT,WAAY,EACd,CAAC,CACH,CACF,CAAC,CACH,EACA,cAAgB,EAAI,GAAK,GAC3B,CACF,CACF,EAEA,OAAO,eAAe,OAAO,YAAa,QAAQ,EAClD,IAAI,gBAAkB,cAAc,WAAY,CAC9C,mBAAoB,CAElB,WAAW,KAAK,KAAK,KAAK,IAAI,EAAG,GAAG,CACtC,CAEA,MAAO,CACL,KAAK,YAAc,KAAK,cAAc,eAAe,EAEjD,KAAK,QAAQ,KACf,MAAM,KAAK,QAAQ,IAAI,EACpB,KAAM,UAAa,CAClB,GAAI,CAAC,SAAS,GACZ,MAAM,IAAI,MAAM,uBAAuB,OAAO,SAAS,MAAM,CAAC,EAEhE,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAM,UAAa,CAClB,IAAI,KAAO,SAAS,uBAAuB,EACzC,WAAa,SAAS,cAAc,KAAK,EAC3C,KAAK,YAAY,UAAU,EAC3B,WAAW,UAAY,SAEvB,IAAI,GAAK,WAAW,cAAc,eAAe,EAC7C,IACF,KAAK,YAAY,UAAY,GAAG,UAChC,MAAM,cAAc,IAAI,GAExB,KAAK,UAAU,IAAI,QAAQ,CAE/B,CAAC,EAEH,MAAM,cAAc,IAAI,CAE5B,CACF,EAEA,OAAO,eAAe,OAAO,qBAAsB,eAAe,EAClE,IAAI,iBAAmB,cAAc,WAAY,CAC/C,mBAAoB,CAClB,MAAM,KAAK,QAAQ,GAAG,EACnB,KAAM,UAAa,CAClB,GAAI,CAAC,SAAS,GACZ,MAAM,IAAI,MAAM,uBAAuB,OAAO,SAAS,MAAM,CAAC,EAEhE,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAM,UAAa,CAClB,IAAI,KAAO,SAAS,uBAAuB,EACzC,eAAiB,SAAS,cAAc,KAAK,EAC/C,KAAK,YAAY,cAAc,EAC/B,eAAe,UAAY,SAE3B,IAAI,mBAAqB,eAAe,cACtC,aAAa,OAAO,IAAI,OAAO,KAAK,QAAQ,EAAE,EAAG,IAAI,CACvD,EACI,qBACF,KAAK,UAAY,mBAAmB,UAEhC,KAAK,aAAa,yBAAyB,IAC7C,MAAM,cAAc,IAAI,EACxB,MAAM,oBAAoB,WAAW,IAAI,GAG/C,CAAC,CACL,CACF,EAEA,OAAO,eAAe,OAAO,qBAAsB,gBAAgB,EACnE,MAAM,aAAe,SAAU,QAAS,CA2VtC,GA1VA,KAAK,WAAa,QAAQ,WAC1B,KAAK,UAAY,QAAQ,UACzB,KAAK,sBAAwB,QAAQ,sBAErC,KAAK,UAAY,CACf,eAAgB,UAA0B,CACxC,EAAE,oBAAqB,KAAK,UAAU,EAAE,SACtC,sCACF,EAGI,SAAS,KAAK,QAAQ,GAAG,GAAK,GAChC,EACE,8CACA,KAAK,UACP,EAAE,KAAK,UAAY,CACjB,IAAI,WAAa,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAClD,QAAU,EAAE,IAAI,EAAE,KAAK,MAAM,EACjC,WAAW,QAAS,MAAS,CACvB,KAAK,QAAQ,UAAU,IAAM,KAC/B,SAAW,IAAM,KAErB,CAAC,EACD,EAAE,IAAI,EAAE,KAAK,OAAQ,OAAO,CAC9B,CAAC,EAGH,MAAM,oBAAoB,WAAW,KAAK,UAAU,CACtD,EAEA,iBAAkB,SAA0B,IAAK,CAC/C,IAAI,eAAe,EACf,EAAE,IAAI,aAAa,EAAE,SAAS,2BAA2B,EAC3D,KAAK,WACF,KAAK,eAAe,EACpB,YAAY,6BAA6B,EACzC,SAAS,6BAA6B,EAEzC,KAAK,WACF,KAAK,eAAe,EACpB,YAAY,6BAA6B,EACzC,SAAS,6BAA6B,EAE3C,EAAE,IAAI,aAAa,EAChB,SAAS,uBAAuB,EAChC,SAAS,EACT,YAAY,uBAAuB,CACxC,EAEA,kBAAmB,UAA6B,CAC9C,IAAI,kBAAoB,EAAE,cAAc,EAAE,OAAO,EAAE,IAEjD,EAAE,MAAM,EAAE,MAAM,EAAI,KACpB,KAAK,kBAAoB,OAAO,SAChC,OAAO,QAAU,kBAEjB,EAAE,MAAM,EAAE,SAAS,uCAAuC,EAE1D,EAAE,4CAA4C,EAAE,YAC9C,uCACF,EAEF,KAAK,kBAAoB,OAAO,OAClC,EAEA,aAAc,SAAsB,IAAK,CACvC,IAAI,eAAe,EACnB,KAAK,UAAU,YAAY,KACzB,KACA,EAAE,IAAI,aAAa,EAAE,KAAK,MAAM,CAClC,CACF,EAEA,aAAc,SAAsB,IAAK,CACnC,IAAI,OAAS,UACf,IAAI,eAAe,EAErB,IAAI,UAAY,CAAC,EACjB,IAAI,cAAc,iBAAiB,eAAe,EAAE,QAAS,OAAU,EAEjE,MAAM,OAAS,YAAc,MAAM,OAAS,SAC5C,MAAM,UACR,MAAM,QAAU,IAEhB,UAAU,KAAK,CAAC,MAAM,KAAM,mBAAmB,MAAM,KAAK,CAAC,CAAC,CAEhE,CAAC,EAED,IAAI,OAAS,SAAS,SACtB,UAAU,QAAS,OAAU,CAC3B,QAAU,IAAI,OAAO,MAAM,CAAC,EAAG,GAAG,EAAE,OAAO,MAAM,CAAC,CAAC,CACrD,CAAC,EACD,OAAS,OAAO,QAAQ,IAAK,GAAG,EAEhC,KAAK,UAAU,YAAY,KAAK,KAAM,MAAM,CAC9C,EAEA,aAAc,SAAsB,MAAO,CACzC,KAAK,UAAU,YAAY,KAAK,KAAM,SAAS,SAAS,KAAM,EAAI,CACpE,EAEA,YAAa,SAAqB,IAAK,YAAa,CAClD,GAAI,CAAC,YAAa,CAEhB,IAAI,QAAU,IACV,QAAQ,MAAM,EAAG,CAAC,IAAM,MAC1B,QACE,OAAO,SAAS,SAAW,KAAO,OAAO,SAAS,KAAO,SAE7D,OAAO,QAAQ,UAAU,CAAE,KAAM,OAAQ,EAAG,GAAI,OAAO,CACzD,CAGI,KAAK,WAAW,CAAC,EAAE,QAAQ,kBAC7B,MACG,IAAI,QAAQ,GAAG,GAAK,EAAI,IAAM,KAC/B,cAAc,OAAO,KAAK,WAAW,CAAC,EAAE,QAAQ,eAAe,GAInE,IAAI,yBAA2B,wBAC7B,gBAAkB,KAAK,WAAW,KAAK,wBAAwB,EAGjE,gBAAgB,SAAS,cAAc,EAGnC,KAAK,yBACP,KAAK,wBAAwB,MAAM,EAErC,KAAK,wBAA0B,EAAE,IAC/B,IACA,SAAU,KAAM,CACd,KAAK,wBAA0B,KAG3B,SAAS,gBACX,KAAK,gBAAkB,SAAS,cAAc,IAIhD,MAAM,oBAAoB,aAAa,KAAK,UAAU,EAGtD,IAAI,gBAAkB,KAAK,WAAW,CAAC,EAAE,cAAc,UAAU,EAC/D,qBAAuB,KACzB,GAAI,iBAAiB,eAAe,EAAE,WAAa,OAAQ,CAIzD,QAHI,kBACF,gBAAgB,iBAAiB,YAAY,EAC3C,iBAAmB,kBAAkB,CAAC,EACjC,EAAI,EAAG,EAAI,kBAAkB,OAAQ,IAC5C,GAAI,kBAAkB,CAAC,EAAE,UAEvB,GACE,kBAAkB,CAAC,EAAE,UAAY,gBAAgB,UAI/C,kBAAkB,CAAC,EAAE,UACrB,iBAAiB,YAEjB,iBAAmB,kBAAkB,CAAC,OAGxC,OAIN,GAAI,iBAAiB,YAAc,EACjC,iBAAmB,OACd,CAEL,qBAAuB,CACrB,SAAU,GACV,YAAa,iBAAiB,YAC9B,kBACE,gBAAgB,UAAY,iBAAiB,SACjD,EACA,QAAS,YAAY,iBAAiB,kBAAkB,EAClD,WAAa,QACf,MAAM,KAAK,iBAAiB,SAAS,EAClC,OAAQ,GAAM,IAAM,8BAA8B,EAClD,QAAS,IAAO,CACf,qBAAqB,UAAY,IAAM,EACzC,CAAC,EAEH,qBAAqB,UAAY,IAC9B,OAAO,SAAU,IAAI,EACrB,OACC,IAAI,OAAO,iBAAiB,aAAa,QAAQ,CAAC,EAClD,IACF,CAGR,CACF,CAGA,IAAI,mBAAqB,EAAE,QAAQ,OAAO,KAAM,QAAQ,CAAC,EAAE,KACzD,wBACF,EACA,mBAAmB,KAAK,SAAU,MAAO,CACvC,EAAE,gBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAC/C,CAAC,EAGD,KAAK,UAAU,eAAe,KAAK,IAAI,EAGnC,sBACF,KAAK,WAAW,CAAC,EACd,iBAAiB,qBAAqB,QAAQ,EAC9C,QAASK,KAAO,CACXA,IAAG,cAAgB,qBAAqB,cAC1C,gBAAgB,UACdA,IAAG,UAAY,qBAAqB,kBAE1C,CAAC,EAIL,IAAI,gBAAkB,KAAK,WAAW,QAAQ,mBAAmB,EACjE,GAAI,gBAAgB,OAAQ,CAC1B,IAAI,WAAa,gBAAgB,KAAK,YAAY,EAAE,MAAM,GAAG,EAC7D,WAAW,QACT,SAAU,UAAW,CACnB,EAAE,QAAQ,EAAE,QAAQ,oBAAqB,CACvC,UACA,gBAAgB,CAAC,CACnB,CAAC,CACH,EAAE,KAAK,IAAI,CACb,CACF,CASA,GANA,gBAAgB,YAAY,cAAc,EAG1C,MAAM,oBAAoB,EAGtB,KAAK,gBAAiB,CACxB,IAAI,GAAK,SAAS,eAAe,KAAK,eAAe,EACjD,IACF,GAAG,MAAM,CAEb,CAGA,IAAI,UACF,EAAE,8BAA+B,KAAK,UAAU,EAAE,OAAO,EAAE,IAC3D,EAAE,iBAAiB,EAAE,OAAO,EAC9B,OAAO,SAAS,CACd,IAAK,UACL,SAAU,QACZ,CAAC,CACH,EAAE,KAAK,IAAI,CACb,CACF,CACF,EAGA,KAAK,8BAAgC,KAAK,WACvC,KAAK,UAAU,EACf,KAAK,6BAA6B,EACjC,KAAK,gCACP,KAAK,WAAW,GACd,SAAW,KAAK,UAChB,kDACC,KAAQ,CACP,GAAI,KAAK,gCAEJ,IAAI,cAAc,OAAS,YAC1B,IAAI,cAAc,SACnB,IAAI,cAAc,OAAS,QAAU,IAAI,cAAc,OACxD,CACA,IAAI,SAAW,KAAK,WAAW,KAC7B,2CACF,EAAE,CAAC,EACC,WACF,SAAS,QAAU,GACnB,SAAS,cACP,IAAI,YAAY,SAAU,CACxB,QAAS,GACT,WAAY,EACd,CAAC,CACH,EAEJ,CAEJ,CACF,EAEA,KAAK,WAAW,GACd,SAAW,KAAK,UAChB,oDACC,KAAQ,CACH,IAAI,cAAc,SAAW,IAAI,cAAc,OAAS,MAC1D,KAAK,8BAAgC,GAEzC,CACF,GAIE,KAAK,WAAW,KAAK,gBAAgB,GAEvC,KAAK,WAAW,GACd,QAAU,KAAK,UACf,8FACA,KAAK,UAAU,aAAa,KAAK,IAAI,CACvC,EAEA,KAAK,WAAW,GACd,SAAW,KAAK,UAAY,UAAY,KAAK,UAC7C,wBACA,MAAM,SAAS,KAAK,UAAU,aAAa,KAAK,IAAI,EAAG,GAAG,CAC5D,EAEA,KAAK,sBACH,OACA,WACA,KAAK,UAAU,aAAa,KAAK,IAAI,CACvC,GAEA,KAAK,WAAW,GACd,SAAW,KAAK,UAChB,wBACA,UAAY,CACV,EAAE,IAAI,EAAE,OAAO,CACjB,CACF,EAIF,KAAK,WAAW,GACd,QAAU,KAAK,UACf,yBACA,MAAM,yBAAyB,KAAK,IAAI,CAC1C,EAGA,EAAE,QAAQ,EAAE,GAAG,QAAU,KAAK,UAAW,UAAY,CACnD,EAAE,8CAA8C,EAAE,QAAQ,OAAO,CACnE,CAAC,EAEG,SAAS,cAAc,cAAc,EAAG,CAE1C,IAAI,cAAgB,EAAE,cAAc,EACjC,MAAM,EACN,SAAS,iCAAiC,EAC1C,WAAW,qBAAqB,EAChC,YAAY,cAAc,EAE7B,MAAM,UAAU,cAAc,CAAC,EAAG,MAAM,EAExC,KAAK,kBAAoB,OAAO,QAChC,EAAE,MAAM,EAAE,GACR,mBAAqB,KAAK,UAC1B,KAAK,UAAU,kBAAkB,KAAK,IAAI,CAC5C,EAGA,KAAK,WAAW,GACd,QAAU,KAAK,UACf,wBACA,SAAU,IAAK,CACb,IAAI,aAAe,EAAE,oBAAqB,KAAK,UAAU,EACtD,YACC,8EACF,EACC,SAAS,wCAAwC,EACpD,SAAE,mCAAoC,KAAK,UAAU,EAAE,YACrD,+BACA,YACF,EAEA,MAAM,oBAAoB,mBAAmB,EAC7C,EAAE,gBAAiB,KAAK,UAAU,EAAE,KAAK,UAAY,CACnD,EAAE,IAAI,EAAE,MAAM,aAAa,CAC7B,CAAC,EACM,EACT,EAAE,KAAK,IAAI,CACb,EAGA,KAAK,WAAW,GACd,QAAU,KAAK,UACf,iBACA,KAAK,UAAU,iBAAiB,KAAK,IAAI,CAC3C,CACF,CAGA,KAAK,UAAU,eAAe,KAAK,IAAI,EAEvC,KAAK,QAAU,UAAY,CACzB,MAAM,oBAAoB,aAAa,KAAK,UAAU,EACtD,MAAM,sBAAsB,KAAK,UAAU,EAC3C,KAAK,WAAW,IAAI,KAAK,SAAS,EAClC,EAAE,MAAM,EAAE,IAAI,KAAK,SAAS,EAC5B,EAAE,QAAQ,EAAE,IAAI,KAAK,SAAS,CAChC,EAAE,KAAK,IAAI,CACb,EAEA,MAAM,mBAAqB,SAAU,OAAQ,CAwC3C,QAtCI,cAAgB,EAChB,yDACF,EACA,eAAiB,EACf,8CACF,EAAE,SAAS,aAAa,EACxB,gBAAkB,EAAE,sCAAsC,EAAE,SAC1D,aACF,EACA,mBAAqB,EAAE,wCAAwC,EAAE,SAC/D,aACF,EACA,OAAS,EACP,mEACF,EACG,KAAK,OAAO,KAAK,EACjB,SAAS,kBAAkB,EAC9B,OAAS,EACP,kEACF,EACG,KAAK,OAAO,IAAI,EAChB,SAAS,kBAAkB,EAC9B,MAAQ,EACN,kEACF,EACG,KAAK,OAAO,IAAI,EAChB,SAAS,kBAAkB,EAC9B,kBAAoB,KACpB,oBAAsB,MACtB,oBAAsB,KACtB,iBAAmB,EACnB,iBAAmB,CACjB,KAAM,EACN,KAAM,EACN,KAAM,CACR,EAGO,EAAI,EAAG,EAAI,OAAO,OAAO,OAAQ,IAAK,CAC7C,IAAI,IAAM,OAAO,OAAO,CAAC,EACzB,EAAE,4CAA4C,EAC3C,KAAK,WAAY,IAAI,OAAO,EAC5B,KAAK,IAAI,QAAQ,EACjB,SAAS,eAAe,CAC7B,CAEI,OAAO,OAAO,SAAW,GAC3B,cAAc,SAAS,8BAA8B,EAIvD,IAAI,2BAA6B,SAC/B,OACA,OACA,CAEA,IAAI,OAAS,kBAAkB,MAAM,EAAI,cAAc,MAAM,EACzD,OAAS,kBAAkB,OAAO,EAAI,cAAc,OAAO,EAC/D,GAAI,QAAU,OAAQ,CACpB,IAAI,KAAO,cAAc,MAAM,EAAI,EAC/B,KAAO,cAAc,OAAO,EAAI,EAEhC,kBAAoB,OAAS,KAC/B,kBAAoB,OAAS,KAG3B,aAAe,EACf,aAAe,EACnB,GAAI,OAAQ,CACV,IAAI,mBACD,kBAAkB,MAAM,EAAI,cAAc,MAAM,GAAK,EAAI,KAC5D,aAAe,KAAK,MAAM,CAAC,kBAAoB,iBAAiB,CAClE,CACA,GAAI,OAAQ,CACV,IAAI,mBACD,kBAAkB,OAAO,EAAI,cAAc,OAAO,GAAK,EAAI,KAC9D,aAAe,KAAK,MAAM,CAAC,kBAAoB,iBAAiB,CAClE,CAEA,iBAAiB,KAAO,aACxB,iBAAiB,KAAO,aACxB,kBAAkB,EAAG,CAAC,EACtB,oBAAoB,CACtB,CACF,EAEI,kBAAoB,SAA2B,EAAG,EAAG,CACvD,iBAAiB,MAAQ,EAEzB,IAAI,SACD,kBAAkB,CAAC,EAAE,aAAe,iBAAiB,KACpD,cAAc,MAAM,GACtB,EACF,QAAU,KAAK,IAAI,QAAS,CAAC,EAC7B,iBAAiB,KAAO,KAAK,IAAI,iBAAiB,KAAM,OAAO,EAC/D,iBAAiB,KAAO,KAAK,IAAI,iBAAiB,KAAM,CAAC,OAAO,EAEhE,iBAAiB,MAAQ,EACzB,IAAI,SACD,kBAAkB,CAAC,EAAE,cAAgB,iBAAiB,KACrD,cAAc,OAAO,GACvB,EACF,QAAU,KAAK,IAAI,QAAS,CAAC,EAC7B,iBAAiB,KAAO,KAAK,IAAI,iBAAiB,KAAM,OAAO,EAC/D,iBAAiB,KAAO,KAAK,IAAI,iBAAiB,KAAM,CAAC,OAAO,EAChE,oBAAoB,CACtB,EAEI,oBAAsB,SAA6B,KAAM,KAAM,KAAM,CACvE,iBAAiB,KAAO,KACxB,iBAAiB,KAAO,KACxB,iBAAiB,KAAO,KACxB,4BAA4B,CAAC,CAC/B,EAEI,4BAA8B,SAChC,MACA,CACA,iBAAiB,MAAQ,MAEzB,IAAI,SAAW,cAAc,MAAM,EAAI,kBAAkB,CAAC,EAAE,aAC1D,SAAW,cAAc,OAAO,EAAI,kBAAkB,CAAC,EAAE,cAC3D,iBAAiB,KAAO,KAAK,IAC3B,iBAAiB,KACjB,KAAK,IAAI,SAAU,QAAQ,CAC7B,EAGA,iBAAiB,KAAO,KAAK,IAAI,iBAAiB,KAAM,CAAG,EAG3D,kBAAkB,EAAG,CAAC,EACtB,oBAAoB,CACtB,EAEI,oBAAsB,UAA+B,CACvD,kBAAkB,IAChB,YACA,eACG,OAAO,iBAAiB,KAAM,MAAM,EACpC,OAAO,iBAAiB,KAAM,eAAe,EAC7C,OAAO,iBAAiB,KAAM,GAAG,CACtC,CACF,EAIA,cAAc,GACZ,2CACA,yBACA,SAAU,IAAK,CACb,IAAI,eAAe,EAGnB,EAAE,IAAI,EACH,SAAS,+BAA+B,EACxC,SAAS,gCAAgC,EACzC,YAAY,+BAA+B,EAG9C,eAAe,SAAS,yCAAyC,EACjE,kBAAoB,EAClB,4EACF,EACA,kBACG,GAAG,OAAQ,UAAY,CACtB,EAAE,IAAI,EACH,OAAO,EACP,YAAY,yCAAyC,EACxD,EAAE,IAAI,EAAE,IAAI,MAAM,EAClB,EAAE,IAAI,EAAE,IAAI,CACV,WAAY,GACZ,IAAK,cAAc,OAAO,EAAI,EAAI,EAAE,IAAI,EAAE,OAAO,EAAI,EACrD,KAAM,cAAc,MAAM,EAAI,EAAI,EAAE,IAAI,EAAE,MAAM,EAAI,CACtD,CAAC,EACD,oBAAoB,EAAG,EAAG,CAAC,CAC7B,CAAC,EACA,KAAK,MAAO,EAAE,IAAI,EAAE,KAAK,UAAU,CAAC,EAEvC,eAAe,KAAK,iBAAiB,CACvC,CACF,EAGA,IAAI,cAAgB,CAClB,WAAY,GACZ,kBAAmB,CACrB,EACI,cAAgB,CAClB,WAAY,GACZ,WAAY,EACZ,WAAY,CACd,EAEA,cAAc,GAAG,yBAA0B,SAAU,IAAK,CACxD,cAAc,WAAa,GAC3B,cAAc,WAAa,EAC7B,CAAC,EAED,cAAc,GACZ,kDACA,SAAU,IAAK,CAEb,GADA,IAAI,eAAe,EACf,IAAI,OAAS,aAAe,IAAI,QAAQ,OAAS,EAAG,CAEtD,IAAI,OAAS,IAAI,QAAQ,CAAC,EAe1B,GAdK,cAAc,YAKjB,mBACG,OAAO,QAAU,cAAc,YAAc,kBAC7C,OAAO,QAAU,cAAc,YAAc,gBAChD,EAEA,cAAc,WAAa,OAAO,QAClC,cAAc,WAAa,OAAO,UAVlC,cAAc,WAAa,GAC3B,cAAc,WAAa,OAAO,QAClC,cAAc,WAAa,OAAO,SAWhC,IAAI,QAAQ,SAAW,EAAG,CAE5B,IAAI,OAAS,IAAI,QAAQ,CAAC,EACxB,cAAgB,KAAK,KACnB,KAAK,IAAI,OAAO,QAAU,OAAO,QAAS,CAAC,EACzC,KAAK,IAAI,OAAO,QAAU,OAAO,QAAS,CAAC,CAC/C,EACF,GAAI,CAAC,cAAc,WACjB,cAAc,kBAAoB,cAClC,cAAc,WAAa,OACtB,CACL,IAAI,WAAa,cAAgB,cAAc,kBAC/C,4BAA4B,WAAa,mBAAmB,EAC5D,cAAc,kBAAoB,aACpC,CACF,MACE,cAAc,WAAa,EAE/B,MAEE,2BAA2B,IAAI,QAAS,IAAI,OAAO,CAEvD,CACF,EAGA,cAAc,GAAG,sBAAuB,SAAU,IAAK,CACrD,IAAI,eAAe,EACf,IAAI,cAAc,QAAU,GAC9B,4BACE,IAAI,cAAc,OAAS,mBAC7B,CAEJ,CAAC,EAGD,cAAc,GACZ,0BACA,0BACA,SAAU,IAAK,CACb,IAAI,gBAAgB,CACtB,CACF,EAGA,cAAc,GACZ,sBACA,wBACA,SAAU,IAAK,CACb,IAAI,eAAe,EACnB,IAAI,MAAQ,gBACT,KAAK,gCAAgC,EACrC,KAAK,EACJ,MAAM,SAAW,IACnB,MAAQ,gBAAgB,KAAK,8BAA8B,GAE7D,MAAM,QAAQ,QAAQ,CACxB,CACF,EAGA,cAAc,GACZ,sBACA,wBACA,SAAU,IAAK,CACb,IAAI,eAAe,EACnB,IAAI,MAAQ,gBACT,KAAK,gCAAgC,EACrC,KAAK,EACJ,MAAM,SAAW,IACnB,MAAQ,gBAAgB,KAAK,6BAA6B,GAE5D,MAAM,QAAQ,QAAQ,CACxB,CACF,EAGA,cAAc,GACZ,sBACA,yBACA,SAAU,IAAK,CACb,IAAI,eAAe,EACnB,MAAM,uBAAuB,MAAM,CACrC,CACF,EAGA,SAAS,iBACP,QACA,MAAM,uBAAuB,eAC/B,EAGA,cAAc,GACZ,sBACA,kCACA,SAAU,IAAK,CACb,IAAI,eAAe,EACf,iBAAiB,MAAQ,GAC3B,iBAAiB,KAAO,EACxB,4BAA4B,CAAC,IAE7B,iBAAiB,KAAO,EACxB,4BAA4B,CAAC,EAC7B,2BAA2B,IAAI,QAAS,IAAI,OAAO,EAEvD,CACF,EAKA,EAAE,MAAM,EAAE,YAAY,qBAAqB,EAC3C,EAAE,iBAAiB,EAAE,OAAO,EAG5B,EAAE,MAAM,EAAE,SAAS,qBAAqB,EACxC,cAAc,SAAS,MAAM,EAG7B,IAAI,aAAe,EACf,OAAO,cACT,OAAO,OAAO,QAAQ,CAACC,KAAK,QAAU,CAChC,OAAO,eAAiBA,KAAI,UAC9B,aAAe,MAEnB,CAAC,EAGH,IAAI,YAAc,gBACf,KAAK,6BAA+B,aAAe,GAAG,EACtD,QAAQ,QAAQ,EAEf,OAAO,OAAO,OAAS,EACzB,YAAY,MAAM,EAElB,OAAO,MAAM,EAIf,WAAW,UAAY,CACrB,cAAc,YAAY,4BAA4B,CACxD,EAAG,EAAE,CACP,EAEA,MAAM,uBAAyB,CAC7B,MAAO,UAAiB,CACtB,IAAI,eAAiB,EAAE,iBAAiB,EAGxC,eAAe,IAAI,gBAAgB,EACnC,SAAS,oBACP,QACA,MAAM,uBAAuB,eAC/B,EAGA,eAAe,SAAS,gCAAgC,EAGxD,IAAI,gBAAkB,eAAe,IAAI,qBAAqB,EAC9D,gBACE,gBAAgB,QAAQ,IAAI,EAAI,GAC5B,WAAW,eAAe,EAC1B,WAAW,eAAe,EAAI,IACpC,WAAW,UAAY,CACrB,eAAe,OAAO,EACtB,EAAE,MAAM,EAAE,YAAY,qBAAqB,CAC7C,EAAG,eAAe,CACpB,EAEA,gBAAiB,SAAyB,IAAK,CAC7C,OAAQ,IAAI,IAAK,CACf,IAAK,SACH,MAAM,uBAAuB,MAAM,EACnC,MACF,IAAK,YACH,EAAE,uBAAuB,EAAE,QAAQ,OAAO,EAC1C,MACF,IAAK,aACH,EAAE,uBAAuB,EAAE,QAAQ,OAAO,EAC1C,KACJ,CACF,CACF,EAEA,MAAM,WAAa,CACjB,KAAM,SAAc,QAAS,CAC3B,GAAI,QAAQ,IAAI,QAAU,EACxB,OAGF,IAAI,KAAO,QAAQ,IACjB,cAAgB,IAChB,qBAAuB,EAAE,EACzB,iBAAmB,GAKjB,cAAgB,EAAE,QAAQ,aAAa,EAGvC,oBAAsB,EACxB,gDACF,EAAE,SAAS,aAAa,EACxB,oBAAoB,OAClB,EAAE,gCAAgC,EAAE,MAAM,EAAE,YAAY,cAAc,CACxE,EACA,oBAAoB,OAClB,EAAE,uCAAuC,EACtC,MAAM,EACN,YAAY,cAAc,CAC/B,EAEA,IAAI,kBAAoB,EAAE,iCAAiC,EACxD,MAAM,EACN,YAAY,cAAc,EAAE,CAAC,EAC5B,kCAAoC,SAAS,cAC/C,+CACF,EACI,oCACF,kBAAkB,cAChB,gBACF,EAAE,cAAc,UACd,kCAAkC,QAAQ,kBAAkB,UAC1D,EACF,EAAE,WAEN,oBAAoB,OAAO,iBAAiB,EAG5C,MAAM,UAAU,cAAc,CAAC,EAAG,WAAW,EAG7C,cAAc,YAAY,EAAE,yBAAyB,CAAC,EAGtD,cAAc,GACZ,QACA,yEACA,SAAU,IAAK,CACb,IAAI,eAAe,EAGnB,EAAE,IAAI,EACH,OAAO,EACP,SAAS,wBAAwB,EACjC,QAAQ,2BAA2B,EACnC,SAAS,sCAAsC,EAC/C,KAAK,mBAAmB,EACxB,KAAK,EAAE,IAAI,EAAE,SAAS,mBAAmB,EAAE,KAAK,CAAC,EAGpD,EAAE,IAAI,EACH,SAAS,+BAA+B,EACxC,IAAI,CACH,IACE,KAAK,KAAK,EAAE,iCAAiC,EAAE,OAAO,EAAI,CAAC,EAC3D,IACJ,CAAC,EAGH,KAAK,QAAQ,2BAA2B,EAAE,SAAS,CACjD,IAAK,EACL,KAAM,EACN,SAAU,SACZ,CAAC,CACH,CACF,EAEI,cAAc,KAAK,gCAAgC,GACrD,cAAc,GACZ,QACA,uDACA,SAAU,IAAK,CACb,IAAI,eAAe,EACnB,EAAE,IAAI,EAAE,SAAS,8BAA8B,EAAE,QAAQ,OAAO,CAClE,CACF,EAIF,cAAc,GAAG,QAAS,mBAAoB,SAAU,IAAK,CAC3D,IAAI,eAAe,EACnB,EAAE,IAAI,EACH,QAAQ,2BAA2B,EACnC,YAAY,sCAAsC,EAClD,KAAK,+CAA+C,EACpD,YAAY,wBAAwB,CACzC,CAAC,EAGD,cAAc,GACZ,QACA,yEACA,SAAU,IAAK,CACb,IAAI,eAAe,EACnB,IAAI,OAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,wBAAwB,EAChE,GAAI,OAAQ,CACV,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,wBAAwB,EAClD,IAAI,gBAAkB,EAAE,IAAI,EAAE,SAC5B,+BACF,EACA,gBAAgB,IACd,SACA,gBAAgB,SAAS,EAAE,YAAY,CACzC,CACF,MACE,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,wBAAwB,EACrD,EAAE,IAAI,EAAE,SAAS,+BAA+B,EAAE,IAAI,SAAU,EAAE,CAEtE,CACF,EAKA,KACG,KAAK,mBAAmB,EACxB,YAAY,kBAAkB,EAC9B,SAAS,UAAU,EAEtB,IAAI,UAAY,SAAS,iBACvB,mDACF,EACI,OAAS,SAAS,cAAc,yBAAyB,EAG7D,OAAO,iBAAiB,SAAU,UAAY,CACxC,OAAO,QAAU,KACnB,UAAU,QAAS,KAAQ,CACzB,IAAI,UAAU,OAAO,iCAAiC,CACxD,CAAC,EACD,OAAO,UAAU,OAAO,0BAA0B,EAEtD,CAAC,EAGD,UAAU,QAAS,KAAQ,CACzB,IAAI,iBAAiB,QAAS,SAAU,IAAK,KAAM,CACjD,IAAI,mBAAqB,IAAI,OAI7B,GACE,IAAI,OAAO,WAAW,UAAU,SAC9B,iCACF,GAKA,GAHA,IAAI,eAAe,EAIjB,IAAI,OAAO,WAAW,UAAU,SAC9B,iCACF,GACA,OAAO,UAAU,SAAS,0BAA0B,EAEpD,IAAI,OAAO,WAAW,UAAU,OAC9B,iCACF,EACA,OAAO,UAAU,OAAO,0BAA0B,UAGzC,CAAC,OAAO,UAAU,SAAS,0BAA0B,EAC9D,IAAI,OAAO,WAAW,UAAU,IAC9B,iCACF,EACA,OAAO,UAAU,IAAI,0BAA0B,UAI/C,CAAC,IAAI,OAAO,WAAW,UAAU,SAC/B,iCACF,GACA,OAAO,UAAU,SAAS,0BAA0B,EACpD,CAEA,QAAS,EAAI,EAAG,EAAI,UAAU,OAAQ,IAChC,UAAU,CAAC,IAAM,IAAI,QACvB,UAAU,CAAC,EAAE,UAAU,OACrB,iCACF,EAGJ,IAAI,OAAO,WAAW,UAAU,IAC9B,iCACF,CACF,EAEJ,CAAC,CACH,CAAC,EAGD,IAAI,aAAe,SAAU,IAAK,CAE5B,IAAI,MAAQ,cAAgB,EAAE,MAAM,EAAE,MAAM,EAAI,KAElD,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,iCAAiC,CAElE,EAEI,aAAe,SAAsB,IAAK,CAC5C,GAAI,iBAAkB,QACpB,GAAI,IAAI,MAAQ,aACd,EAAE,IAAI,EAAE,KAAK,iBAAkB,IAAI,SAAS,UACnC,IAAI,MAAQ,YAErB,GAAI,IAAI,UAAY,EAAE,IAAI,EAAE,KAAK,gBAAgB,EAAI,IACnD,SAAE,IAAI,EAAE,KAAK,uBAAwB,IAAI,SAAS,EAEhD,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,iCAAiC,EAG3D,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,iCAAiC,GAG9D,EACE,oDACF,EAAE,YAAY,iCAAiC,EAE/C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,iCAAiC,GAGtD,WAEA,IAAI,MAAQ,SAGnB,EAAE,IAAI,EAAE,KAAK,sBAAsB,GACnC,IAAI,UAAY,EAAE,IAAI,EAAE,KAAK,sBAAsB,EAAI,IAEvD,MAAO,GAIf,EACA,KAAK,GACH,4BACA,6EACA,YACF,EAGA,IAAI,eAAiB,SAAwB,IAAK,CAChD,GAAI,IAAI,OAAS,GAAI,CACnB,IAAI,QAAU,EAAE,IAAI,EAAE,OAAO,EAC7B,eAAQ,QACN,QAAQ,SAAS,iCAAiC,EAC9C,aACA,YACN,EACO,EACT,CACF,EACA,KAAK,GACH,UACA,wFACA,cACF,EAGI,QAAQ,gBAEV,EAAE,QAAQ,aAAa,EAAE,GACvB,wBACA,qCACA,SAAU,IAAK,CACb,IAAI,UAAY,EACd,EAAE,0CAA2C,IAAI,EAC/C,EAAE,IAAI,EAAE,MAAM,CAChB,CACF,EAAE,KAAK,+BAA+B,EAClC,SAAS,cAAc,eAAe,EACxC,UAAU,IACR,QACA,UAAU,CAAC,EAAE,aAAa,aACvB,EAAE,IAAI,EAAE,OAAO,EAAE,KAAO,KAAK,YAClC,EAEA,UAAU,IAAI,OAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAE/C,CACF,EAGA,EAAE,QAAQ,aAAa,EACpB,GACC,wBACA,yDACA,SAAU,IAAK,CACb,EACE,EAAE,0CAA2C,IAAI,EAC/C,EAAE,IAAI,EAAE,MAAM,CAChB,CACF,EAAE,QAAQ,IAAI,IAAI,CACpB,CACF,EACC,GACC,4BACA,6EACA,SAAU,IAAK,CACb,IAAI,SAAW,aAAa,KAC1B,EACE,EAAE,0CAA2C,IAAI,EAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CACzB,CACF,EAAE,SAAS,mBAAmB,EAAE,CAAC,EACjC,GACF,EAEA,GAAI,WAAa,GACf,MAAO,EAEX,CACF,EACC,GACC,UACA,wFACA,SAAU,IAAK,CACb,GAAI,IAAI,OAAS,GACf,sBAAe,KACb,EACE,EAAE,0CAA2C,IAAI,EAC/C,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CACzB,CACF,EAAE,SAAS,8BAA8B,EAAE,CAAC,EAC5C,GACF,EAEO,EAEX,CACF,GAIJ,KAAK,GACH,QACA,oDACA,UAAY,CACV,SAAE,IAAI,EAAE,SAAS,8BAA8B,EAAE,QAAQ,OAAO,EACzD,EACT,CACF,EAEiB,SAAS,iBACxB,wDACF,EAES,QAAS,MAAS,CACzB,KAAK,iBAAiB,aAAc,MAAM,WAAW,UAAU,EAC/D,KAAK,iBAAiB,aAAc,MAAM,WAAW,UAAU,EAC3D,QAAQ,cAAc,SACxB,QAAQ,cAAc,CAAC,EAAE,iBACvB,aACA,MAAM,WAAW,UACnB,EACA,QAAQ,cAAc,CAAC,EAAE,iBACvB,aACA,MAAM,WAAW,UACnB,EAEJ,CAAC,CACH,EAEA,WAAY,SAAoB,IAAK,CACnC,EAAE,IAAI,MAAM,EACT,QAAQ,iBAAiB,EACzB,YAAY,4BAA6B,IAAI,OAAS,YAAY,CACvE,EAEA,QAAS,SAAiB,KAAM,eAAgB,CAC9C,KACG,IAAI,cAAc,EAClB,IAAI,yDAAyD,EAChE,MAAM,oBAAoB,aACxB,EAAE,yCAAyC,CAC7C,EACA,EAAE,2BAA2B,EAAE,IAAI,OAAO,EAAE,OAAO,CACrD,CACF,EAGA,MAAM,mBAAqB,SAAUN,WAAW,CAC9C,IAAI,SAAW,EAAE,WAAYA,UAAS,EACtC,GAAI,UAAS,SAAS,qBAAqB,EAO3C,IAHA,SAAS,SAAS,qBAAqB,EAIrC,SAAS,KAAK,wBAAwB,GACtC,SAAS,KAAK,qCAAqC,IAAM,GACzD,CACA,IAAI,YAAc,MAAM,cAAc,eAClC,SAAS,QAAQ,iBAAiB,EAAE,KAAK,eAAe,CAC1D,EACA,oBAAsB,SAAS,KAC7B,qCACF,EAEE,mBAAqB,CAAC,EAC1B,YAAY,MAAM,QAAS,OAAU,CACnC,YAAY,SAAS,QAAS,SAAY,CACpC,QAAQ,gBAAkB,QAAQ,eAAe,IAAM,MAAM,KAC1D,mBAAmB,QAAQ,QAAQ,mBAAmB,CAAC,IAC1D,mBAAmB,QAAQ,QAAQ,mBAAmB,CAAC,EACrD,MAAM,IAGd,CAAC,CACH,CAAC,EAED,IAAI,uBAAyB,GAC7B,SAAS,KAAK,QAAQ,EAAE,KAAK,SAAU,MAAO,KAAM,CAClD,QAAS,cAAc,mBACjB,EAAE,IAAI,EAAE,KAAK,UAAU,GAAK,mBAAmB,UAAU,IAC3D,uBAAyB,YAG7B,EAAE,IAAI,EAAE,KAAK,2BAA4B,sBAAsB,CACjE,CAAC,EACD,uBAAyB,GACzB,SAAS,KAAK,YAAY,EAAE,KAAK,SAAU,MAAO,KAAM,CACtD,QAAS,cAAc,mBACjB,EAAE,IAAI,EAAE,KAAK,UAAU,GAAK,mBAAmB,UAAU,IAC3D,uBAAyB,YAG7B,EAAE,IAAI,EAAE,KAAK,2BAA4B,sBAAsB,CACjE,CAAC,CACH,CAGA,IAAI,WAAa,EAAE,qBAAsBA,UAAS,EAClD,GAAI,WAAW,OAAQ,CACrB,IAAI,YAAc,CAChB,SAAU,GACV,KAAM,GACN,SAAU,GACV,aAAc,GACd,KAAM,GACN,OAAQ,GACR,eAAgB,GAChB,aAAc,WACX,SAAS,qBAAqB,EAC9B,KAAK,6BAA6B,EACrC,UACE,gEACA,MAAM,QAAQ,SACd,KACA,MAAM,MAAM,YACZ,YACF,UACE,gEACA,MAAM,QAAQ,KACd,KACA,MAAM,MAAM,aACZ,YACF,YAAa,GACb,IAAK,WAAS,cAAc,eAAe,EAC3C,WAAY,CACV,CACE,WAAY,IACZ,SAAU,CACR,KAAM,GACN,OAAQ,EACV,CACF,CACF,CACF,EAqBA,GAnBA,WACG,GAAG,OAAQ,SAAU,IAAK,MAAO,CAChC,EAAE,oBAAqB,IAAI,EACxB,YAAY,kBAAkB,EAC9B,SAAS,UAAU,CACxB,CAAC,EACA,GAAG,eAAgB,SAAU,IAAK,MAAO,QAAS,KAAM,CACvD,IAAI,QAAU,EAAE,MAAM,QAAQ,IAAI,CAAC,EAAE,KAAK,UAAU,EACpD,EACE,EAAE,IAAI,EACH,QAAQ,UAAU,EAClB,KACC,sDACE,QACA,IACJ,CACJ,EAAE,QAAQ,iBAAiB,CAC7B,CAAC,EAGD,WAAW,QACT,mEACF,EAAE,OAGF,WAAW,MAAM,WAAW,MACvB,CAEL,IAAI,uBAAyB,UAAkC,CACzD,EAAE,MAAM,EAAE,MAAM,EAAI,IACtB,WAAW,IAAI,eAAe,EAAE,KAAK,UAAY,CAE/C,EAAE,IAAI,EACH,KAAK,yBAAyB,EAC9B,YAAY,wBAAwB,EAEvC,EAAE,IAAI,EAAE,MAAM,WAAW,EAEzB,EAAE,IAAI,EACH,QAAQ,iBAAiB,EACzB,KAAK,oBAAoB,EACzB,QAAQ,QAAQ,CACrB,CAAC,EAED,WAAW,OAAO,eAAe,EAAE,KAAK,UAAY,CAClD,EAAE,IAAI,EAAE,MAAM,eAAe,EAAE,MAAM,SAAS,EAE9C,EAAE,IAAI,EACH,QAAQ,iBAAiB,EACzB,KAAK,oBAAoB,EACzB,QAAQ,QAAQ,CACrB,CAAC,CAEL,EACA,uBAAuB,EACvB,EAAE,MAAM,EAAE,GAAG,iCAAkC,sBAAsB,CACvE,CAGA,MAAM,aAAa,KAAK,SAAU,CAChC,cAAe,SAAuB,UAAW,CAC3C,WAAW,SAAS,cAAc,GACpC,MAAM,8BACJ,WAAW,MAAM,UAAU,EAAE,QAC7B,WAAW,MAAM,UAAU,EAAE,YAC/B,CAEJ,EACA,kBAAmB,SAA2B,QAAS,CACjD,WAAW,SAAS,cAAc,GACpC,MAAM,8BACJ,WAAW,MAAM,UAAU,EAAE,QAC7B,WAAW,MAAM,UAAU,EAAE,YAC/B,CAEJ,EACA,eAAgB,SAAwB,EAAG,CACrC,EAAE,MAAM,EAAE,MAAM,GAAK,KACvB,EAAE,EAAE,MAAM,EACP,QAAQ,eAAe,EACvB,MAAM,iBAAkB,QAAS,EAAK,CAE7C,EACA,kBAAmB,SAA2B,EAAG,CAE/C,EAAE,EAAE,MAAM,EACP,QAAQ,eAAe,EACvB,MAAM,iBAAkB,QAAS,EAAK,EAEzC,EAAE,EAAE,MAAM,EACP,QAAQ,eAAe,EACvB,MAAM,iBAAkB,gBAAiB,EAAK,CACnD,EACA,mBAAoB,SAA4B,EAAG,CACjD,EAAE,EAAE,MAAM,EACP,QAAQ,eAAe,EACvB,MAAM,iBAAkB,QAAS,EAAI,EACxC,EAAE,EAAE,MAAM,EACP,QAAQ,eAAe,EACvB,MAAM,iBAAkB,gBAAiB,EAAI,CAClD,CACF,CAAC,EAGG,WAAW,SAAS,cAAc,GACpC,MAAM,8BACJ,WAAW,MAAM,UAAU,EAAE,QAC7B,WAAW,MAAM,UAAU,EAAE,YAC/B,EAGF,WAAW,GAAG,cAAe,SAAU,IAAK,MAAO,QAAS,CAE1D,MAAM,cAAc,EAChB,EAAE,MAAM,EAAE,MAAM,GAAK,KACvB,MAAM,eAAe,QAAS,EAAI,EAGpC,EAAE,iBAAkB,MAAM,QAAQ,OAAO,CAAC,EAAE,QAAQ,cAAc,EAElE,MAAM,8BAA8B,MAAM,QAAS,OAAO,CAC5D,CAAC,CACH,CAEA,IAAI,YAAc,EAAE,2BAA4BA,UAAS,EACzD,GAAI,YAAY,OAAQ,CACtB,IAAI,yBAA2B,EAC7B,WAAa,GAGX,eAAiB,UAA0B,CACzC,YAAY,OAAO,EAAE,IAAI,SAAS,GAAK,OAErC,aACF,WAAa,GAEb,MAAM,kCAAkC,WAAW,EACnD,YACG,YAAY,cAAc,EAC1B,KAAK,cAAc,EACnB,QAAQ,EAGX,SACG,QAAQ,iBAAiB,EACzB,KAAK,oBAAoB,EACzB,QAAQ,QAAQ,GAIhB,aACH,WAAa,GAGb,MAAM,gCAAgC,WAAW,EAGjD,YAAY,KAAK,YAAY,EAAE,KAAK,EACpC,SACG,KAAK,oBAAoB,EACzB,SAAS,EACT,SAAS,WAAW,EAEvB,YACG,SAAS,cAAc,EACvB,GAAG,2BAA4B,UAAY,CAC1C,EAAE,oBAAqB,IAAI,EACxB,YAAY,kBAAkB,EAC9B,SAAS,UAAU,CACxB,CAAC,EACA,YAAY,CACX,MAAO,yBACP,KAAM,GACN,OAAQ,EACR,IAAK,WAAS,cAAc,eAAe,CAC7C,CAAC,EAGH,SACG,QAAQ,iBAAiB,EACzB,KAAK,oBAAoB,EACzB,QAAQ,QAAQ,EAGzB,EAEA,EAAE,MAAM,EAAE,GAAG,iCAAkC,cAAc,EAC7D,eAAe,EACf,EAAEA,UAAS,EAAE,KAAK,yBAA0B,cAAc,EAU1D,EAAE,WAAYA,UAAS,EAAE,GACvB,+BACA,sCACA,SAAU,EAAG,CACX,EAAE,eAAe,EACjB,IAAI,cAAgB,EAAE,IAAI,EAAE,OAAO,EACnC,GAAI,EAAE,MAAQ,kBAAmB,CAE/B,IAAI,QAAU,EAAE,IAAI,EAAE,KAAK,UAAU,EACjC,YAAc,EAAE,IAAI,EACrB,QAAQ,UAAU,EAClB,KAAK,yBAAyB,EACjC,GAAI,YAAa,CACf,IAAI,MAAQ,YACT,KAAK,yBAA2B,QAAU,IAAI,EAC9C,MAAM,EAEL,MAAQ,YAAY,MAAM,UAAU,EACpC,MAAM,eAAiB,MAEzB,EAAE,IAAI,EAAE,QAAQ,iBAAiB,EAGjC,YAAY,MAAM,YAAa,KAAK,CAExC,CACF,KAAO,CAGL,EAAE,IAAI,EACH,SAAS,UAAU,EACnB,OAAO,EACP,SAAS,EACT,KAAK,GAAG,EACR,YAAY,UAAU,EAGzB,IAAI,WAAa,cACd,OAAO,EACP,SAAS,eAAe,EACxB,MAAM,EACL,SAAW,WAAa,yBAA2B,EACnD,aAAe,cAAc,MAAM,EAEnC,aAAe,WAEjB,cACG,QAAQ,eAAe,EACvB,QAAQ,kBAAmB,YAAY,EACjC,aAAe,UAExB,cACG,QAAQ,eAAe,EACvB,QACC,kBACA,KAAK,IAAI,EAAG,aAAe,yBAA2B,CAAC,CACzD,CAEN,CACF,CACF,EAIA,EAAE,WAAYA,UAAS,EAAE,GACvB,+BACA,6CACA,SAAU,EAAG,CAEX,GADA,EAAE,eAAe,EACb,EAAE,MAAQ,kBAAmB,CAE/B,IAAI,MAAQ,EACR,QAAU,EAAE,IAAI,EAAE,KAAK,UAAU,EACrC,EAAE,IAAI,EACH,OAAO,EACP,SAAS,UAAU,EACnB,KAAK,SAAU,KAAM,CAEpB,GADA,MAAQ,KACJ,EAAE,IAAI,EAAE,KAAK,UAAU,GAAK,QAC9B,MAAO,EAEX,CAAC,EAEH,IAAI,aAAe,EAAE,IAAI,EAAE,QAAQ,UAAU,EAAE,KAAK,YAAY,EAC5D,MAAQ,aAAa,MAAM,UAAU,EACrC,MAAM,eAAiB,MAEzB,EAAE,IAAI,EAAE,QAAQ,iBAAiB,EAGjC,aAAa,MAAM,YAAa,KAAK,CAEzC,MAEE,EAAE,IAAI,EACH,SAAS,UAAU,EACnB,SAAS,WAAW,EACpB,YAAY,UAAU,CAE7B,CACF,CACF,EACF,EAEA,MAAM,sBAAwB,SAAUA,WAAW,CACjD,EAAE,MAAM,EAAE,IAAI,iBAAiB,EAC/B,IAAI,SAAW,EAAE,WAAYA,UAAS,EAAE,IAAI,8BAA8B,EAC1E,MAAM,aAAa,QAAQ,QAAQ,EACnC,EAAE,gBAAiBA,UAAS,EACzB,MAAM,SAAS,EACf,IAAI,+BAA+B,EACtC,EAAE,gBAAiBA,UAAS,EAAE,KAAK,UAAY,CAC7C,MAAM,kCAAkC,IAAI,EAC5C,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,QAAQ,CACvC,CAAC,CACH,EAgBA,MAAM,aAAe,IAAK,UAAY,CACpC,IAAI,EAAI,KAER,EAAE,gBAAkB,UAAY,CAC9B,GAAI,CAAC,OAAO,UAAW,CACrB,SAAS,iBACP,yBACA,EAAE,gBAAgB,KAAK,IAAI,CAC7B,EACA,MACF,CAEA,OAAO,UAAU,UAAU,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EACrD,OAAO,UAAU,gBAAgB,CACnC,EAEA,KAAK,KAAO,SAAUA,WAAW,UAAW,CAC1C,IAAI,UAAY,WAAa,CAAC,EAC5B,WAAaA,WAGf,EAAEA,UAAS,EACR,KAAK,uBAAuB,EAC5B,KAAK,SAAU,MAAO,CACrB,IAAI,OAAS,KAAK,cAAc,wBAAwB,EACxD,EAAE,iCAAkC,MAAM,EAAE,GAAG,QAAS,UAAY,CAClE,EAAE,IAAI,EAAE,QAAQ,uBAAuB,EAAE,KAAK,QAAQ,EAAE,KAAK,CAC/D,CAAC,EAED,IAAI,UAAY,CAAE,UAAW,KAAM,MAAe,EAClD,UAAU,KAAO,UAAY,CAE3B,MAAM,cAAc,EAGpB,KAAK,OAAO,UAAU,IAAI,6BAA6B,EACvD,EAAE,IAAI,EAAE,QAAQ,eAAe,EAAE,MAAM,aAAa,EAGpD,KAAK,UAAU,iBAAiB,aAAa,EAAE,QAAS,OAAU,CAChE,MAAM,cAAc,YAClB,mDACA,GACF,CACF,CAAC,EACD,KAAK,UAAU,iBAAiB,WAAW,EAAE,QAAS,OAAU,CAC9D,MAAM,cAAc,YAAY,oBAAqB,GAAG,CAC1D,CAAC,EACD,KAAK,UACF,iBAAiB,OAAO,EACxB,QAAS,OAAU,MAAM,KAAK,CAAC,CACpC,EAAE,KAAK,SAAS,EAGhB,IAAI,SAAW,KAAK,cAAc,gCAAgC,EAC9D,WACF,KAAK,mBAAmB,YAAa,SAAS,SAAS,EACvD,KAAK,YAAY,QAAQ,EACzB,KAAK,MAAM,cACT,IACE,KAAK,cAAc,eAAe,EAAE,aAClC,cACF,EACF,KAGJ,EAAE,IAAI,EACH,KAAK,SAAU,SAAS,EACxB,SAAS,6BAA6B,CAC3C,CAAC,EAGH,EAAEA,UAAS,EAAE,GACX,eACA,6DACA,UAAY,CAEN,EAAE,MAAM,EAAE,MAAM,GAAK,KACvB,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,KAAK,EAG1B,EAAE,IAAI,EAAE,SAAS,sBAAsB,GACzC,EAAE,iBAAkB,UAAU,EAAE,KAC9B,0BACA,EAAE,IAAI,EAAE,KAAK,UAAU,CACzB,CAEJ,CACF,EAGI,UAAU,gBACZ,EAAEA,UAAS,EAAE,GACX,eACA,+BACA,UAAU,cACZ,EAGF,EAAE,eAAgBA,UAAS,EAAE,KAAK,UAAY,CACxC,UAAU,mBACZ,EAAE,IAAI,EAAE,GACN,sCACA,UAAU,iBACZ,EAEE,UAAU,oBACZ,EAAE,IAAI,EAAE,GACN,uCACA,UAAU,kBACZ,CAEJ,CAAC,EAGD,EAAEA,UAAS,EAAE,GACX,mCACA,0DACA,SAAU,EAAG,CACX,IAAI,QAAU,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,CAAC,EAC1C,SAAW,EAAE,MAAQ,sBAEvB,MAAM,cACJ,sFACF,EACA,OAAO,QAAQ,aAAa,CAC1B,CACE,KAAM,kBACN,QAAS,MACT,OAAQ,UAAY,CAClB,EAAE,IAAI,EAAE,KAAK,SAAU,IAAI,QAAQ,cAAc,OAAO,CAAC,EAEzD,EAAE,IAAI,EAAE,SAAS,6BAA6B,EAC1C,UAAU,mBACZ,UAAU,kBAAkB,OAAO,EAEjC,UACF,EAAE,IAAI,EAAE,QAAQ,cAAc,CAElC,EAAE,KAAK,IAAI,CACb,CACF,CAAC,CACH,CACF,EAGI,EAAE,cAAeA,UAAS,EAAE,QAC9B,OAAO,QAAQ,aAAa,CAC1B,CACE,KAAM,aACN,QAAS,MACT,OAAQ,EAAE,gBAAgB,KAAK,EAAE,cAAeA,UAAS,CAAC,CAC5D,CACF,CAAC,EAIH,EAAE,QAAQ,EAAE,GAAG,oBAAqB,UAAY,CAC9C,MAAM,cAAc,CAAE,OAAQ,EAAK,CAAC,CACtC,CAAC,EAGD,WACE,UAAY,CACV,EAAE,uDAAwD,IAAI,EAC3D,OAAO,uBAAuB,EAC9B,QAAQ,qBAAqB,EAChC,EACE,8DACA,IACF,EAAE,QAAQ,qBAAqB,CACjC,EAAE,KAAKA,UAAS,EAChB,EACF,CACF,EAEA,KAAK,QAAU,SAAUA,WAAW,CAClC,EAAE,QAAQ,EAAE,IAAI,mBAAmB,EACnC,EAAEA,UAAS,EAAE,IAAI,kCAAkC,EACnD,EAAE,+BAAgCA,UAAS,EAAE,KAAK,UAAY,CAC5D,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,QAAQ,CACjC,CAAC,EACD,EAAE,8BAA+BA,UAAS,EAAE,IAAI,qBAAqB,EACrE,EAAE,eAAgBA,UAAS,EAAE,IAC3B,0EACF,CACF,CACF,GAEA,MAAM,8BAAgC,SAAU,OAAQ,QAAS,CAE/D,EAAE,OAAO,OAAO,CAAC,EACd,KAAK,mEAAmE,EACxE,KAAK,UAAY,CAEd,OAAO,EAAE,IAAI,EAAE,KAAK,mCAAmC,EACvD,IAEI,EAAE,IAAI,EAAE,KAAK,mCAAmC,IAAM,GACxD,EAAE,IAAI,EAAE,WAAW,UAAU,EAE7B,EAAE,IAAI,EAAE,KACN,WACA,EAAE,IAAI,EAAE,KAAK,mCAAmC,CAClD,EAGF,EAAE,IAAI,EAAE,WAAW,UAAU,CAEjC,CAAC,EACH,EAAE,MAAM,EACL,IAAI,OAAO,OAAO,CAAC,EACnB,KAAK,mEAAmE,EACxE,KAAK,UAAY,CAEd,OAAO,EAAE,IAAI,EAAE,KAAK,mCAAmC,EACvD,MAEA,EAAE,IAAI,EAAE,KACN,oCACA,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,EAAM,IAChC,EAAE,IAAI,EAAE,KAAK,UAAU,EACvB,EACN,EAEA,EAAE,IAAI,EAAE,KAAK,WAAY,IAAI,EAEjC,CAAC,CACL,EAGA,MAAM,YAAc,CAAC,EACrB,MAAM,cAAgB,IAAK,UAAY,CACrC,IAAI,EAAI,KAER,EAAE,yBAA2B,SAAU,QAAS,WAAY,CAC1D,OAAO,WAAW,KAChB,oCAAsC,QAAU,QAAQ,GAAK,IAAM,IACrE,CACF,EAEA,EAAE,UAAY,CACZ,UAAW,kBACX,QAAS,WACT,UAAW,cACX,gBAAiB,cACjB,aAAc,yBACd,sBAAuB,qCACvB,aAAc,+CACd,YAAa,oBACb,aAAc,iBACd,uBAAwB,eAC1B,EAEA,EAAE,QAAU,CACV,cAAe,MAAM,QAAQ,6BAC7B,cAAe,MAAM,QAAQ,0BAC7B,gBAAiB,MAAM,QAAQ,6BACjC,EAEA,EAAE,eAAiB,SAAU,MAAO,CAClC,IAAI,UAAY,MAAM,KAAK,YAAY,EACnC,KAAO,KACX,OAAK,MAAM,YAAY,SAAS,IAC9B,MAAM,YAAY,SAAS,EAAI,KAAK,MAClC,SAAS,eAAe,eAAiB,SAAS,EAAE,SACtD,GAEF,KAAO,MAAM,YAAY,SAAS,EAC7B,MACH,QAAQ,IACN,6BAA+B,MAAM,KAAK,YAAY,EAAI,GAC5D,EAEK,IACT,EAEA,EAAE,iBAAmB,SAAU,aAAc,GAAI,CAE/C,QADI,SAAW,KAAK,eAAe,YAAY,EAAE,SACxC,EAAI,EAAG,EAAI,SAAS,OAAQ,IACnC,GAAI,SAAS,CAAC,EAAE,IAAM,GACpB,OAAO,SAAS,CAAC,EAGrB,MAAO,CAAE,UAAW,EAAM,CAC5B,EAEA,EAAE,sBAAwB,SAAU,aAAc,CAChD,OAAO,EAAE,iBACP,aACA,aAAa,KAAK,EAAE,UAAU,qBAAqB,EAAE,IAAI,CAC3D,CACF,EAEC,EAAE,YAAc,SAAU,QAAS,CAClC,OAAO,QAAQ,uBAAuB,kBAAoB,EACtD,QAAQ,uBAAuB,eAC/B,QAAQ,uBAAuB,gBAC7B,QAAQ,uBAAuB,cACvC,EACG,EAAE,uBAAyB,SAAU,QAAS,CAC7C,GAAI,QAAS,CACX,IAAI,OACF,OAAO,SAAS,SAChB,KACA,OAAO,SAAS,KAChB,OAAO,SAAS,SAChB,YACA,QAAQ,GACV,OAAO,QAAQ,aAAa,CAAE,KAAM,MAAO,EAAG,GAAI,MAAM,CAC1D,CACF,EAEF,EAAE,UAAY,SAAU,QAAS,WAAY,CAC3C,WAAW,KAAK,kBAAkB,EAAE,KAAK,QAAU,QAAQ,IAAM,EAAE,EACnE,WACG,KAAK,MAAM,EACX,YAAY,cAAe,CAAC,SAAW,CAAC,QAAQ,GAAG,CACxD,EAEA,EAAE,cAAgB,SAAU,QAAS,WAAY,CAC/C,WACG,KAAK,0BAA0B,EAC/B,KAAK,QAAU,QAAQ,QAAU,EAAE,EACtC,WACG,KAAK,UAAU,EACf,YAAY,sBAAuB,CAAC,SAAW,CAAC,QAAQ,OAAO,CACpE,EAEA,EAAE,qBAAuB,SAAU,QAAS,WAAY,CACtD,IAAI,aAAe,EAAE,yBAAyB,QAAS,UAAU,EAAE,KACjE,oBACF,EACI,aACF,WACG,KAAK,6BAA6B,EAClC,YAAY,kCAAkC,EAC9C,KAAK,YAAY,EAEpB,WACG,KAAK,6BAA6B,EAClC,SAAS,kCAAkC,EAC3C,MAAM,CAEb,EAEA,EAAE,uCAAyC,SAAU,QAAS,WAAY,CACxE,WAAW,KAAK,0BAA0B,EAAE,KAAK,UAAY,CAC3D,EAAE,IAAI,EAAE,SAAS,cAAc,EAAE,OAAO,EACpC,QACF,EAAE,IAAI,EAAE,OACN,EAAE,IAAI,EACH,SAAS,2BAA6B,QAAQ,GAAK,IAAI,EACvD,KAAK,CACV,EAEA,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,4BAA4B,EAAE,KAAK,CAAC,CAExE,CAAC,CACH,EAEA,EAAE,gBAAkB,SAAU,QAAS,WAAY,CACjD,IAAI,WAAa,WAAW,KAAK,YAAY,EAC7C,GAAI,WAAW,OACb,GAAI,SAAW,QAAQ,UACrB,GACE,QAAQ,sBACR,EAAE,yBAAyB,QAAS,UAAU,EAAE,KAAK,OAAO,GAC1D,MACF,CACA,IAAI,YAAc,EAAE,eAClB,WAAW,QAAQ,eAAe,CACpC,EACA,WACG,KAAK,qBAAqB,EAC1B,KACC,YAAY,OACT,QAAQ,MAAM,QAAQ,SAAS,GAAK,EACjC,GACA,MAAQ,QAAQ,MACxB,EACF,WAAW,KAAK,CAClB,MACE,WAAW,KAAK,OAGlB,WAAW,KAAK,CAGtB,EAEA,EAAE,kBAAoB,SAAU,QAAS,OAAQ,QAAS,CACxD,QAAQ,KAAK,UAAY,CACvB,IAAI,OAEJ,GADA,OAAS,EAAE,QAAQ,SAAW,MAAM,EAChC,SAAW,GACb,GAAI,EAAE,IAAI,EAAE,GAAG,OAAO,EACpB,EAAE,IAAI,EAAE,IAAI,MAAM,MACb,CACL,MAAM,YAAc,EAAE,IAAI,EAAE,KAAK,yBAAyB,EAAE,MAAM,GAChD,YAAY,OAAS,EAAI,YAAc,EAAE,IAAI,GACrD,KAAK,MAAM,CACvB,CAEJ,CAAC,CACH,EAEA,EAAE,cAAgB,SAAU,QAAS,WAAY,CAC/C,IAAI,QAAU,WAAW,KAAK,EAAE,UAAU,YAAY,EAEtD,GAAI,QACF,QAAQ,WAAW,UAAU,EAAE,YAAY,kBAAkB,EACzD,QAAQ,WAAa,GACvB,EAAE,kBAAkB,QAAS,UAAW,OAAO,GAE/C,QAAQ,SAAS,kBAAkB,EACnC,EAAE,kBAAkB,QAAS,UAAW,OAAO,OAE5C,CACL,IAAI,YAAc,EAAE,eAAe,QAAQ,QAAQ,eAAe,CAAC,EAC9D,YAAY,UAGN,MAAM,wBAAwB,UAAU,EAAE,QACnD,QAAQ,WAAW,UAAU,EAC7B,EAAE,kBAAkB,QAAS,UAAW,OAAO,IAE/C,QAAQ,KAAK,WAAY,UAAU,EACnC,EAAE,kBAAkB,QAAS,YAAa,OAAO,IAPjD,QAAQ,SAAS,kBAAkB,EACnC,EAAE,kBAAkB,QAAS,UAAW,OAAO,EAQnD,CACF,EAEA,EAAE,6BAA+B,SAAU,QAAS,WAAY,CAC9D,WAAW,YAAY,+BAAgC,CAAC,OAAO,EAC/D,WAAW,YACT,8BACA,SAAW,CAAC,QAAQ,SACtB,EACA,WAAW,YACT,4BACA,SACE,QAAQ,WACR,QAAQ,sBACR,EAAE,yBAAyB,QAAS,UAAU,EAAE,KAAK,OAAO,GAAK,KACrE,EACA,WAAW,YACT,0BACA,SAAW,QAAQ,WAAa,QAAQ,iBAAmB,QAAQ,KACrE,CACF,EAEA,EAAE,mBAAqB,SAAU,aAAc,CAC7C,GAAI,cAAa,SAAS,YAAY,EAEtC,KAAI,YAAc,EAAE,eAAe,YAAY,EAC/C,aAAa,SAAS,YAAY,EAGlC,aACG,KAAK,EAAE,UAAU,WAAW,EAC5B,GAAG,6BAA8B,UAAY,CAC5C,IAAI,gBAAkB,CAAC,EACvB,EAAE,IAAI,EACH,KAAK,kBAAkB,EACvB,KAAK,UAAY,CACZ,EAAE,IAAI,EAAE,KAAK,eAAe,IAAM,SACpC,gBAAgB,KAAK,EAAE,IAAI,EAAE,KAAK,oBAAoB,EAAE,IAAI,CAAC,EAE7D,gBAAgB,KACd,EAAE,IAAI,EAAE,KAAK,kCAAkC,EAAE,KAAK,OAAO,CAC/D,CAEJ,CAAC,EAIH,QADI,QAAU,GACL,EAAI,EAAG,EAAI,YAAY,SAAS,OAAQ,IAAK,CAGpD,QAFI,EAAI,YAAY,SAAS,CAAC,EAC1B,WAAa,EACR,EAAI,EAAG,EAAI,gBAAgB,OAAQ,IACtC,EAAE,QAAQ,CAAC,GAAK,gBAAgB,CAAC,GACnC,aAGJ,GAAI,YAAc,gBAAgB,OAAQ,CACxC,QAAU,EACV,KACF,CACF,CAGA,aAAa,KAAK,EAAE,UAAU,eAAe,EAAE,IAAI,QAAQ,EAAE,EAG7D,aAAa,KAAK,EAAE,UAAU,eAAe,EAAE,KAAK,UAAY,CAC9D,KAAK,cACH,IAAI,YAAY,SAAU,CACxB,QAAS,GACT,WAAY,GACZ,OAAQ,CAAE,QAAkB,eAAiC,CAC/D,CAAC,CACH,CACF,CAAC,CACH,CAAC,EAGH,aACG,KAAK,EAAE,UAAU,YAAY,EAC7B,KAAK,UAAY,CAChB,IAAI,OAAS,EAAE,IAAI,EAAE,KAAK,+BAA+B,EACzD,EAAE,uBAAuB,EACtB,KAAK,CACJ,KAAM,OAAO,KAAK,MAAM,EACxB,MAAO,OAAO,IAAI,CACpB,CAAC,EACA,SAAS,aAAa,KAAK,EAAE,UAAU,YAAY,CAAC,CACzD,CAAC,EACA,GAAG,6BAA8B,UAAY,CAC5C,IAAI,QAAU,EAAE,IAAI,EAAE,KAAK,qBAAqB,EAC9C,UAAY,EAAE,IAAI,EAAE,KAAK,wBAAwB,EACnD,GAAI,QAAQ,OAEV,aACG,KAAK,EAAE,UAAU,aAAe,QAAQ,EACxC,OAAO,UAAY,CAClB,OAAO,KAAK,OAAS,QAAQ,CAAC,EAAE,IAClC,CAAC,EACA,IAAI,QAAQ,OAAO,UAAU,EAAE,IAAI,CAAC,EACpC,QAAQ,QAAQ,UACV,UAAU,OAAQ,CAE3B,IAAI,IAAM,KACN,UAAU,GAAG,UAAU,EACzB,IAAM,UAAU,IAAI,EAEpB,IAAM,UAAU,SAAS,iBAAiB,EAAE,IAAI,EAElD,aACG,KAAK,EAAE,UAAU,aAAe,QAAQ,EACxC,OAAO,UAAY,CAClB,OAAO,KAAK,OAAS,UAAU,CAAC,EAAE,IACpC,CAAC,EACA,IAAI,GAAG,EACP,QAAQ,QAAQ,CACrB,KAAO,CAEL,IAAI,OAAS,EAAE,IAAI,EAAE,KAAK,yBAAyB,EACnD,aACG,KAAK,EAAE,UAAU,aAAe,QAAQ,EACxC,OAAO,UAAY,CAClB,OAAO,KAAK,OAAS,OAAO,KAAK,MAAM,CACzC,CAAC,EACA,IAAI,OAAO,IAAI,CAAC,EAChB,QAAQ,QAAQ,CACrB,CACF,CAAC,EAGH,aAAa,KAAK,EAAE,UAAU,qBAAqB,EAAE,KAAK,UAAY,CAEpE,EAAE,IAAI,EAAE,GACN,0DACA,SAAU,EAAG,CACX,GAAI,GAAE,IAAI,EAAE,GAAG,iCAAiC,EAIhD,KAAI,QAAU,EAAE,OAAS,EAAE,OAAO,QAAU,KAC5C,GAAI,CAAC,SAAW,UAAY,GAC1B,QAAS,EAAI,EAAG,EAAI,YAAY,SAAS,OAAQ,IAC3C,YAAY,SAAS,CAAC,EAAE,IAAM,EAAE,IAAI,EAAE,IAAI,IAC5C,QAAU,YAAY,SAAS,CAAC,GAItC,IAAI,WAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,SAAS,EAGlD,WAAa,WACd,KAAK,EAAE,UAAU,YAAY,EAC7B,OAAO,yBAAyB,EAenC,GAdI,WAAW,SACb,EAAE,QAAQ,cAAgB,WAAW,KAAK,kBAAkB,GAI9D,EAAE,cAAc,QAAS,UAAU,EAGnC,EAAE,MAAM,EAAE,QAAQ,qBAAsB,CACtC,QACA,QAAS,WACX,CAAC,EAGG,SAAW,QAAQ,eAErB,WACG,KAAK,EAAE,UAAU,OAAO,EACxB,QAAQ,uBAAwB,CAC/B,QACA,EAAE,OAAS,UACb,CAAC,UACM,EAAE,QAAU,EAAE,OAAO,gBAAiB,CAE/C,IAAI,gBAAkB,EAAE,OAAO,gBAAgB,OAC5C,GAAM,GAAK,EAAE,OAAS,CACzB,EAAE,OACF,GAAI,gBAAkB,EACpB,QAAS,EAAI,EAAG,EAAI,YAAY,SAAS,OAAQ,IAAK,CAGpD,QAFI,EAAI,YAAY,SAAS,CAAC,EAC1B,WAAa,EACR,EAAI,EAAG,EAAI,EAAE,OAAO,gBAAgB,OAAQ,IAC/C,EAAE,QAAQ,CAAC,GAAK,EAAE,OAAO,gBAAgB,CAAC,GAC5C,aAGJ,GAAI,YAAc,iBAAmB,EAAE,eAAgB,CACrD,WACG,KAAK,EAAE,UAAU,OAAO,EACxB,QAAQ,uBAAwB,CAC/B,EACA,EAAE,OAAS,UACb,CAAC,EACH,KACF,CACF,CAEJ,CAGA,EAAE,cAAc,QAAS,UAAU,EACnC,EAAE,UAAU,QAAS,UAAU,EAC/B,EAAE,qBAAqB,QAAS,UAAU,EAC1C,EAAE,uCAAuC,QAAS,UAAU,EAC5D,EAAE,gBAAgB,QAAS,UAAU,EACrC,EAAE,6BAA6B,QAAS,UAAU,EAIhD,aAAa,KAAK,sBAAsB,GACxC,EAAE,MAAQ,UAEV,EAAE,uBAAuB,OAAO,EAIlC,aAAa,QAAQ,iBAAkB,CAAC,QAAS,WAAW,CAAC,EAC/D,CACF,EAGA,EAAE,IAAI,EAAE,QAAQ,UAAU,CAC5B,CAAC,EAGD,MAAM,uBAAuB,YAAY,EAGzC,IAAI,aAAe,IAAI,gBAAgB,SAAS,MAAM,EAClD,OAAS,SAAgBO,KAAK,CAChC,aACG,KAAK,kBAAkB,EACvB,OAAO,UAAY,CAClB,OAAO,KAAK,cAAc,QAAQ,EAAE,WAAW,cAAgBA,IACjE,CAAC,EACA,KAAK,UAAY,CAChB,IAAI,MAAQ,aAAa,IAAIA,IAAG,EAC5B,KAAK,QAAQ,cAAgB,WAC/B,KAAK,cAAc,YAAY,EAAE,cAC/B,IAAI,YAAY,eAAgB,CAAE,OAAQ,CAAE,KAAa,CAAE,CAAC,CAC9D,EAEA,KAAK,iBAAiB,kBAAkB,EAAE,QAAS,IAAO,CACxD,GAAI,GAAG,WAAa,MAAO,CACzB,IAAI,MAAQ,SAAS,eACnB,GAAG,cAAc,aAAa,KAAK,CACrC,EACI,QACF,MAAM,QAAU,GAChB,MAAM,cACJ,IAAI,YAAY,SAAU,CACxB,QAAS,GACT,WAAY,EACd,CAAC,CACH,EAEJ,CACF,CAAC,CAEL,CAAC,CACL,EACA,QAAS,OAAO,aAAa,KAAK,EAChC,OAAO,GAAG,EAEd,EAEA,EAAE,qBAAuB,SAAU,aAAc,CAC/C,aAAa,YAAY,YAAY,EAAE,KAAK,UAAY,CACtD,EAAE,IAAI,EAAE,QAAQ,WAAW,EAAE,IAAI,sBAAsB,EACvD,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,WAAW,EAAE,IAAI,sBAAsB,EAChE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,YAAY,EAAE,IAAI,sBAAsB,EACjE,MAAM,0BAA0B,YAAY,CAC9C,CAAC,CACH,CACF,GAEA,MAAM,aAAe,UAAY,CAE/B,SAAS,eAAe,QAAS,MAAO,CAClC,QAAQ,OAAS,IACnB,QAAQ,YAAY,UAAU,EAC9B,QACG,KAAK,qBAAqB,EAC1B,KAAK,EACL,QAAQ,CAAE,OAAQ,CAAE,EAAG,MAAO,UAAY,CACzC,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,CAC/B,CAAC,EACH,QAAQ,KAAK,EAAE,KAAK,UAAY,CAC9B,EAAE,IAAI,EAAE,QAAQ,CAAE,cAAe,CAAE,EAAG,KAAK,CAC7C,CAAC,EAEL,CAGA,SAAS,eAAe,mBAAoB,CAC1C,EAAE,kBAAkB,EACjB,QAAQ,mBAAmB,EAC3B,KAAK,UAAY,CAChB,EAAE,IAAI,EACH,KAAK,YAAY,EACjB,MAAM,GAAG,EACT,QAAS,WAAc,CACtB,EAAE,QAAQ,EAAE,QAAQ,oBAAqB,CACvC,UACA,kBACF,CAAC,CACH,CAAC,CACL,CAAC,EAEH,EAAE,QAAQ,EAAE,QAAQ,oBAAqB,CACvC,gBACA,qBACF,CAAC,CACH,CAEA,SAAS,iBAAiB,mBAAoB,CAC5C,EAAE,kBAAkB,EAAE,KAAK,eAAe,EAAE,IAAI,mBAAmB,EACnE,EAAE,kBAAkB,EACjB,QAAQ,mBAAmB,EAC3B,KAAK,UAAY,CAChB,EAAE,IAAI,EACH,KAAK,YAAY,EACjB,MAAM,GAAG,EACT,QAAS,WAAc,CACtB,EAAE,QAAQ,EAAE,QAAQ,sBAAuB,CACzC,UACA,kBACF,CAAC,CACH,CAAC,CACL,CAAC,CACL,CAEA,IAAI,iCAAmC,GACvC,SAAS,wBAAwB,QAAS,CACxC,aAAa,gCAAgC,EAC7C,iCAAmC,WAAW,IAAM,CAClD,IAAI,IAAM,QAAQ,QAAQ,qBAAqB,EAC7C,MAAQ,IAAI,QAAQ,gBAAgB,EACtC,GAAI,OAGF,GAAI,MAAM,UAAU,SAAS,UAAU,EAAG,CACxC,IAAI,aAAe,EAAE,OAAO,EAAE,YAAY,EACxC,iBAAmB,CAAC,GAAG,MAAM,WAAW,QAAQ,EAAE,OAC/C,OAEG,QAAU,OAAS,MAAM,UAAU,SAAS,UAAU,CAG5D,EACA,MAAQ,iBAAiB,OAAS,EAAI,EAAI,oBAE5C,EAAE,KAAK,EACJ,KAAK,EACL,QACC,CACE,cAAe,aAAe,EAChC,EACA,KACF,EACF,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAE,OAAQ,YAAa,EAAG,KAAK,CACvD,OAII,QAAQ,kBAAoB,GAC9B,EAAE,GAAG,EACF,KAAK,EACL,QACC,CACE,OAAQ,EAAE,OAAO,EAAE,YAAY,CACjC,EACA,mBACF,CAGR,EAAG,GAAG,CACR,CAEA,IAAI,uBAAyB,KACzB,mBAAoB,OACtB,uBAAyB,IAAI,eAAgB,SAAY,CACvD,QAAS,SAAS,QACZ,MAAM,gBACR,wBAAwB,MAAM,MAAM,CAG1C,CAAC,EAED,uBAAyB,CACvB,WAAY,IAAM,CAAC,EACnB,SAAU,IAAM,CAAC,CACnB,EAIF,IAAI,oBAAsB,IAC1B,EAAE,QAAQ,EAAE,GACV,QACA,gGACA,UAAY,CACV,IAAI,UAAY,EAAE,MAAM,EAAE,MAAM,EAC9B,WAAa,EAAE,IAAI,EAAE,KAAK,MAAM,EAGlC,GAAI,UAAY,IAAK,CAEf,MAAM,wBACR,MAAM,uBAAuB,MAAM,EAGrC,IAAI,OAAS,EAAE,IAAI,EAAE,QAAQ,gBAAgB,EAC3C,YAAc,KACd,cAAgB,KAChB,QAAU,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAC9C,WAAa,KAGf,GAAI,QAAQ,OAAS,EAAG,CAGtB,GAFA,WAAa,QAAQ,QAAQ,wBAAwB,EAEjD,WAAW,KAAK,qBAAqB,EAAE,SAAW,EACpD,OAEF,cAAgB,WAAW,KAAK,qBAAqB,CACvD,MACE,cAAgB,OAAO,KAAK,qBAAqB,EAKnD,GAHA,YAAc,cAAc,KAAK,QAAQ,EAGrC,OAAO,YAAY,UAAU,EAAE,SAAS,UAAU,EAAG,CAEvD,GAAI,QAAQ,OAAS,EAAG,CAEtB,IAAI,aACF,QACG,KAAK,yBAAyB,EAC9B,IAAI,MAAM,EACV,YAAY,UAAU,EAAE,SAAW,EAGpC,aACF,cAAc,OAAO,CAAC,GAGtB,EAAE,gBAAiB,aAAa,EAAE,QAChC,qBACF,EACA,EAAE,WAAY,aAAa,EAAE,IAAI,KAAK,SAAS,EAC/C,EAAE,aAAc,aAAa,EAAE,MAAM,SAAS,EAE9C,iBAAiB,aAAa,EAElC,KAAO,CAEL,IAAI,kBAAoB,OAAO,SAAS,WAAW,EAEnD,kBAAkB,KAAK,UAAY,CACjC,eAAe,EAAE,IAAI,EAAG,CAAC,EAGzB,EAAE,gBAAiB,IAAI,EAAE,QAAQ,qBAAqB,EACtD,MAAM,sBAAsB,IAAI,EAEhC,iBAAiB,IAAI,CACvB,CAAC,CACH,CAGA,uBAAuB,WAAW,EAClC,uBAAuB,QAAQ,YAAY,CAAC,CAAC,EAG7C,YAAY,KAAK,qCAAqC,EAGtD,IAAI,IAAM,EAAE,IAAI,EAAE,KAAK,MAAM,EAC7B,MAAM,uBAAyB,EAAE,IAAI,IAAK,SAAU,SAAU,CAC5D,IAAI,WAAa,EAAE,QAAU,SAAW,QAAQ,EAAE,KAChD,mBACF,EAGA,WAAW,KAAK,OAAO,EAAE,KAAK,OAAQ,UAAU,EAChD,WACG,KAAK,gBAAgB,EACrB,UAAU,EAAE,KAAK,EAAE,KAAK,OAAQ,UAAU,CAAC,EAC9C,WACG,KAAK,eAAe,EACpB,YAAY,cAAc,EAC1B,KAAK,OAAQ,UAAU,EAC1B,WAAW,KAAK,kBAAkB,EAAE,OAAO,EAC3C,WACG,KAAK,mBAAmB,EACxB,YAAY,kBAAkB,EACjC,WACG,KAAK,2BAA2B,EAChC,YAAY,0BAA0B,EACzC,WAAW,KAAK,+BAA+B,EAAE,OAAO,EACxD,WACG,KAAK,oCAAoC,EACzC,KAAK,4BAA6B,OAAO,EAC5C,WACG,KAAK,sBAAsB,EAC3B,YAAY,aAAa,EAC5B,CACE,kCACA,4BACA,4BACA,4BACA,2BACF,EAAE,QAAS,IAAO,CAChB,WACG,KAAK,IAAM,EAAE,EACb,YAAY,EAAE,EACd,SAAS,gCAAgC,CAC9C,CAAC,EAED,YAAY,KAAK,UAAU,EAG3B,MAAM,mBAAmB,aAAa,EACtC,cAAc,KAAK,eAAe,EAAE,QAAQ,mBAAmB,EAC/D,eAAe,aAAa,EAC5B,MAAM,oBAAoB,CAC5B,CAAC,EAAE,OAAO,UAAY,CACpB,MAAM,uBAAyB,EACjC,CAAC,EAGD,cAAc,KAAK,eAAe,EAAE,WAAW,UAAU,EAKzD,IAAI,WAAa,KACb,aAAe,KAMnB,GAJI,EAAE,iBAAiB,EAAE,IAAI,UAAU,GAAK,WAC1C,cAAgB,EAAE,iBAAiB,EAAE,OAAO,GAG1C,YAAc,KAChB,EAAE,yCAAyC,EAAE,QAC3C,CAAE,UAAW,cAAc,OAAO,EAAE,IAAM,YAAa,EACvD,GACF,UAEI,QAAQ,OAAS,EAEnB,EAAE,yCAAyC,EAAE,QAC3C,CAAE,UAAW,OAAO,OAAO,EAAE,GAAI,EACjC,GACF,MACK,CAEL,uBAAuB,EACvB,IAAI,UACF,OAAO,OAAO,KAAK,WAAW,EAAK,IAC/B,OAAO,KAAK,WAAW,EACvB,OAAO,OAAO,EAAE,IACtB,EAAE,yCAAyC,EAAE,QAC3C,CAAE,UAAW,UAAY,YAAa,EACtC,GACF,CACF,CAEJ,KAAO,CAEL,iBAAiB,aAAa,EAC1B,QAAQ,OAAS,EAEnB,cACG,KAAK,EACL,QAAQ,CAAE,OAAQ,CAAE,EAAG,oBAAqB,UAAY,CAEvD,YAAY,MAAM,CACpB,CAAC,EAEH,eAAe,OAAQ,mBAAmB,EAI5C,IAAI,eAAiB,KACrB,EAAE,yCAAyC,EAAE,QAC3C,CAAE,UAAW,OAAO,OAAO,EAAE,IAAM,cAAe,EAClD,GACF,EAGA,cAAc,KAAK,eAAe,EAAE,KAAK,WAAY,IAAI,CAC3D,CAEA,MAAO,EACT,CACF,CACF,EAGA,EAAE,QAAQ,EAAE,GAAG,QAAS,oCAAqC,UAAY,CACvE,IAAI,QAAU,EAAE,IAAI,EAAE,QAAQ,wBAAwB,EACtD,OAAI,QAAQ,OACV,QACG,KAAK,gDAAgD,EACrD,QAAQ,OAAO,EAElB,EAAE,IAAI,EACH,QAAQ,gBAAgB,EACxB,KAAK,wBAAwB,EAC7B,QAAQ,OAAO,EAEb,EACT,CAAC,EAGD,SAAS,wBAAyB,CAChC,EAAE,qBAAqB,EAAE,KAAK,UAAY,CACxC,IAAI,QAAU,EAAE,IAAI,EAAE,KAAK,gBAAgB,EAC3C,GAAI,QAAQ,QAAU,EAAG,MAAO,GAChC,IAAI,IAAM,EACN,QAAU,EAEV,YAAc,KAAK,IACrB,QAAQ,MAAM,EAAE,YAAY,EAC5B,EAAE,QAAQ,CAAC,CAAC,EAAE,YAAY,CAC5B,EACI,gBAAkB,QAAQ,MAAM,EAAE,OAAO,EAAE,IAC/C,QAAQ,KAAK,SAAU,MAAO,CAC5B,IAAI,cAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,IACjC,OAAS,EACX,QAAU,cAEN,cAAgB,UAClB,MACA,QAAU,eAGd,EAAE,IAAI,EAAE,KAAK,CACX,UAAW,gBAAkB,IAAM,WACrC,CAAC,CACH,CAAC,CACH,CAAC,CACH,CACF,EAEA,EAAE,UAAY,CACZ,EAAE,QAAQ,EAAE,GAAG,QAAS,aAAc,SAAU,EAAG,CACjD,IAAI,QAAU,EAAE,IAAI,EAAE,OAAO,EAC7B,GAAI,QAAQ,SAAS,SAAS,EAAG,CAC/B,EAAE,eAAe,EACjB,IAAI,IAAM,EAAE,IAAI,EAAE,KAAK,MAAM,EACzB,MAAQ,IACV,OAAS,IACT,MAAQ,EAAE,MAAM,EAAE,MAAM,EAAI,OAAS,EACrC,KAAO,EAAE,MAAM,EAAE,OAAO,EAAI,QAAU,EACtC,KACE,iFAEA,MACA,WACA,OACA,QACA,IACA,SACA,KACJ,OAAO,KAAK,IAAK,UAAW,IAAI,CAClC,SAAW,QAAQ,SAAS,UAAU,EAAG,CACvC,EAAE,eAAe,EACjB,IAAI,IAAM,EAAE,IAAI,EAAE,KAAK,MAAM,EACzB,MAAQ,IACV,OAAS,IACT,MAAQ,EAAE,MAAM,EAAE,MAAM,EAAI,OAAS,EACrC,KAAO,EAAE,MAAM,EAAE,OAAO,EAAI,QAAU,EACtC,KACE,iFAEA,MACA,WACA,OACA,QACA,IACA,SACA,KACJ,OAAO,KAAK,IAAK,WAAY,IAAI,CACnC,SAAW,QAAQ,SAAS,WAAW,EAAG,CACxC,EAAE,eAAe,EACjB,IAAI,IAAM,EAAE,IAAI,EAAE,KAAK,MAAM,EACzB,MAAQ,IACV,OAAS,IACT,MAAQ,EAAE,MAAM,EAAE,MAAM,EAAI,OAAS,EACrC,KAAO,EAAE,MAAM,EAAE,OAAO,EAAI,QAAU,EACtC,KACE,iFAEA,MACA,WACA,OACA,QACA,IACA,SACA,KACJ,OAAO,KAAK,IAAK,YAAa,IAAI,CACpC,SAAW,QAAQ,SAAS,QAAQ,EAAG,CACrC,EAAE,eAAe,EACjB,IAAI,IAAM,EAAE,IAAI,EAAE,KAAK,MAAM,EACzB,MAAQ,IACV,OAAS,IACT,MAAQ,EAAE,MAAM,EAAE,MAAM,EAAI,OAAS,EACrC,KAAO,EAAE,MAAM,EAAE,OAAO,EAAI,QAAU,EACtC,KACE,iFAEA,MACA,WACA,OACA,QACA,IACA,SACA,KACJ,OAAO,KAAK,IAAK,UAAW,IAAI,CAClC,CACF,CAAC,CACH,CAAC,EACD,IAAI,eAAiB,cAAc,WAAY,CAC7C,mBAAoB,CAClB,KAAK,eAAiB,MAAM,yBAC1B,SACA,QACA,wFACA,KAAK,0BAA0B,KAAK,IAAI,CAC1C,CACF,CAEA,sBAAuB,CACrB,SAAS,oBAAoB,QAAS,KAAK,cAAc,CAC3D,CAEA,0BAA0B,IAAK,CACxB,KAAK,cAAc,eAAe,IACrC,IAAI,eAAe,EACnB,MAAM,eACJ,MAAM,QAAQ,wBACd,EAAE,IAAI,MAAM,CACd,EAEJ,CACF,EAEA,OAAO,eAAe,OAAO,kBAAmB,cAAc,EAE9D,MAAM,uBAAyB,IAAK,UAAY,CAC9C,KAAK,cAAgB,SAAUP,WAAW,CACxC,KAAK,UAAYA,WACjB,KAAK,UAAY,MAAM,qBAAqBA,UAAS,EAErD,EAAE,cAAeA,UAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,aAAc,IAAI,MAAM,WAAW,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC,EAED,KAAK,cAAgBA,WAAU,iBAAiB,eAAe,EAC3D,KAAK,cAAc,OAAS,IAC9B,KAAK,oBAAsB,EAC3BA,WACG,cAAc,2BAA2B,EACzC,iBACC,UACA,KAAK,UAAU,mBAAmB,KAAK,IAAI,CAC7C,EACFA,WACG,cAAc,2BAA2B,EACzC,iBACC,WACA,KAAK,UAAU,kBAAkB,KAAK,IAAI,CAC5C,EACFA,WACG,cAAc,gCAAgC,EAC9C,iBACC,QACA,KAAK,UAAU,qBAAqB,KAAK,IAAI,CAC/C,EACFA,WACG,cAAc,4BAA4B,EAC1C,iBACC,QACA,KAAK,UAAU,iBAAiB,KAAK,IAAI,CAC3C,EACF,KAAK,SAAW,IAAI,qBAClB,KAAK,UAAU,gBAAgB,KAAK,IAAI,CAC1C,EACA,KAAK,SAAS,QAAQ,KAAK,SAAS,EAExC,EAEA,KAAK,UAAY,CACf,gBAAiB,SAAyB,QAAS,CACjD,QAAQ,QAAS,OAAU,CACrB,MAAM,QAAU,KAAK,YACnB,MAAM,eACR,KAAK,UAAU,kBAAkB,KAAK,IAAI,EAE1C,KAAK,UAAU,mBAAmB,KAAK,IAAI,EAGjD,CAAC,CACH,EAEA,kBAAmB,UAA6B,CAC9C,KAAK,qBAAuB,YAAY,IAAM,CAC5C,KAAK,UAAU,uBAAuB,KACpC,KACA,KAAK,oBAAsB,CAC7B,CACF,EAAG,GAAI,CACT,EAEA,mBAAoB,UAA8B,CAC5C,KAAK,sBACP,cAAc,KAAK,oBAAoB,CAE3C,EAEA,uBAAwB,SAAgC,SAAU,CAChE,KAAK,oBAAsB,SAAW,KAAK,cAAc,OACzD,KAAK,cAAc,QAAQ,CAAC,GAAI,QAAU,CACpC,QAAU,KAAK,oBACjB,GAAG,UAAU,IAAI,wBAAwB,EAEzC,GAAG,UAAU,OAAO,wBAAwB,CAEhD,CAAC,CACH,EAEA,qBAAsB,UAAgC,CACpD,KAAK,UAAU,uBAAuB,KACpC,KACA,KAAK,oBAAsB,CAC7B,CACF,EAEA,iBAAkB,UAA4B,CAC5C,KAAK,UAAU,uBAAuB,KACpC,KACA,KAAK,oBAAsB,CAC7B,CACF,CACF,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,cAAc,KAAK,oBAAoB,EAEvC,EAAE,cAAeA,UAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,OAAO,CACpC,CAAC,EAEG,KAAK,UACP,KAAK,SAAS,WAAW,EAG3B,EAAE,MAAM,EAAE,IAAI,KAAK,SAAS,CAC9B,EAEA,KAAK,cAAgB,SAAU,MAAO,CACpC,IAAI,MAAQ,MAAM,UAAU,QAAQ,KAClC,MAAM,cAAc,SACpB,KACF,EACA,KAAK,UAAU,mBAAmB,KAAK,IAAI,EAC3C,KAAK,UAAU,uBAAuB,KAAK,KAAM,KAAK,CACxD,EAEA,KAAK,gBAAkB,SAAU,MAAO,CACtC,KAAK,UAAU,kBAAkB,KAAK,IAAI,CAC5C,CACF,GAEA,MAAM,oBAAsB,IAAK,UAAY,CAC3C,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,UAAY,MAAM,qBAAqBA,UAAS,EACrD,KAAK,WAAa,EAAEA,UAAS,EAG7B,KAAK,WAAW,GACd,QAAU,KAAK,UACf,yBACA,MAAM,yBAAyB,KAAK,IAAI,CAC1C,EAGA,EAAE,QAAQ,EAAE,GAAG,QAAU,KAAK,UAAW,UAAY,CACnD,EAAE,8CAA8C,EAAE,QAAQ,OAAO,CACnE,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,KAAK,WAAW,IAAI,KAAK,SAAS,EAClC,EAAE,QAAQ,EAAE,IAAI,KAAK,SAAS,CAChC,CACF,GAEA,MAAM,oBAAsB,IAAK,UAAY,CAC3C,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,WAAa,EAAEA,UAAS,EAE7B,EAAEA,UAAS,EAAE,GACX,4BACA,+BACA,UAAY,CACV,EAAE,sBAAsB,EAAE,OAAO,EACjC,IAAI,IAAM,EAAE,IAAI,EAAE,KAAK,aAAa,EACpC,SAAE,IAAI,EAAE,KAAK,cAAe,EAAE,IAAI,EAAE,KAAK,CAAC,EAC1C,EAAE,IAAI,EAAE,KAAK,GAAG,EACT,EACT,CACF,CACF,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,EAAEA,UAAS,EAAE,IAAI,sBAAsB,CACzC,CACF,GAEA,MAAM,kBAAoB,IAAK,UAAY,CACzC,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,UAAYA,WACjB,KAAK,UAAY,MAAM,qBAAqBA,UAAS,EACrD,KAAK,MAAQ,IAAI,QAAQ,EAAE,YAAaA,UAAS,EAAG,KAAK,SAAS,EAElE,KAAK,UAAY,IAAM,CACrB,KAAK,MAAM,KAAK,CAClB,EACA,SAAS,iBAAiB,yBAA0B,KAAK,SAAS,EAClE,KAAK,WAAa,IAAM,KAAK,MAAM,MAAM,EACzC,SAAS,iBAAiB,0BAA2B,KAAK,UAAU,EAEpEA,WACG,iBAAiB,iBAAiB,EAClC,QAAS,IAAO,GAAG,iBAAiB,QAAS,KAAK,UAAU,CAAC,EAChEA,WACG,cAAc,sBAAsB,EACpC,iBAAiB,QAAS,KAAK,UAAU,CAC9C,EAEA,KAAK,gBAAkB,IAAM,CAC3B,SAAS,cACP,IAAI,YAAY,yBAA0B,CACxC,QAAS,GACT,WAAY,EACd,CAAC,CACH,CACF,EAEA,KAAK,kBAAoB,IAAM,CAC7B,SAAS,cACP,IAAI,YAAY,0BAA2B,CACzC,QAAS,GACT,WAAY,EACd,CAAC,CACH,CACF,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,SAAS,oBAAoB,yBAA0B,KAAK,SAAS,EACrE,SAAS,oBAAoB,0BAA2B,KAAK,UAAU,CACzE,CACF,GAEA,MAAM,0BAA4B,IAAK,UAAY,CACjD,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,UAAY,MAAM,qBAAqBA,UAAS,EACrD,KAAK,WAAa,EAAEA,UAAS,EAE7B,KAAK,SAAW,IAAI,MAAM,aAAa,IAAI,EAG3C,EAAE,MAAM,EAAE,GACR,kBAAoB,KAAK,UACzB,KAAK,UAAU,6BAA6B,KAAK,IAAI,CACvD,EACA,KAAK,UAAU,6BAA6B,KAAK,IAAI,EAGrD,IAAI,sBAAwB,EAC1B,yCACAA,UACF,EACA,sBACG,GAAG,OAAQ,UAAY,CACtB,EAAE,oBAAqB,IAAI,EACxB,YAAY,kBAAkB,EAC9B,SAAS,UAAU,CACxB,CAAC,EACA,MAAM,CACL,SAAU,GACV,KAAM,GACN,SAAU,GACV,aAAc,GACd,aAAc,KAAK,IACjB,EACA,EAAE,+CAAgDA,UAAS,EAAE,MAC/D,EACA,eAAgB,EAChB,aAAc,GACd,OAAQ,GACR,KAAM,GACN,UACE,oGACA,MAAM,QAAQ,SACd,KACA,MAAM,MAAM,YACZ,YACF,UACE,gGACA,MAAM,QAAQ,KACd,KACA,MAAM,MAAM,aACZ,YACF,IAAK,WAAS,cAAc,eAAe,EAC3C,WAAY,CACV,CACE,WAAY,IACZ,SAAU,CACR,aAAc,KAAK,IACjB,EACA,EAAE,+CAAgDA,UAAS,EACxD,MACL,CACF,CACF,EACA,CACE,WAAY,IACZ,SACE,sBAAsB,KAAK,mBAAmB,GAAK,OAC/C,UACA,CACE,aACE,sBAAsB,KAAK,mBAAmB,CAClD,CACR,CACF,CACF,CAAC,CACL,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,KAAK,SAAS,QAAQ,EACtB,EAAE,iCAAkC,KAAK,UAAU,EAAE,IAAI,OAAO,EAChE,EAAE,gBAAiBA,UAAS,EAAE,MAAM,SAAS,EAAE,IAAI,MAAM,EACzD,EAAE,MAAM,EAAE,IAAI,KAAK,SAAS,CAC9B,EAEA,KAAK,UAAY,CACf,6BAA8B,UAAwC,CACpE,IAAI,gBAAkB,EACpB,gCACA,KAAK,UACP,EACA,GAAI,gBAAgB,IAAI,SAAS,GAAK,OAAQ,CAC5C,IAAI,MAAQ,EACR,MAAQ,gBAAgB,KAAK,MAAM,EAErC,MAAM,OAAS,OACf,gBAAgB,KAAK,gCAAgC,EAAE,SAAW,IAElE,MAAM,MAAM,MAAQ,CAAC,EAAE,KAAK,EAC5B,EACE,sEACF,EACG,KAAK,MAAM,QAAQ,0CAA0C,EAC7D,SAAS,eAAe,EACxB,GAAG,QAAS,SAAU,IAAK,CAC1B,IAAI,eAAe,EACnB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EACxB,EAAE,IAAI,EAAE,OAAO,CACjB,CAAC,EAEP,MACE,gBAAgB,KAAK,gCAAgC,EAAE,SAEvD,gBACG,KAAK,gCAAgC,EACrC,SAAS,EACT,KAAK,EACR,gBAAgB,KAAK,gCAAgC,EAAE,OAAO,EAElE,CACF,CACF,GAEA,MAAM,iBAAmB,IAAK,UAAY,CACxC,KAAK,cAAgB,SAAUA,WAAW,CACxC,MAAM,aAAa,cAAcA,UAAS,CAC5C,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,MAAM,aAAa,gBAAgBA,UAAS,CAC9C,CACF,GAEA,MAAM,0BAA4B,IAAK,UAAY,CACjD,KAAK,cAAgB,SAAUA,WAAW,CACxC,IAAI,WAAa,MAAM,cAAcA,UAAS,EAE1C,WAAW,SAAW,GACxB,MAAM,oBAAoB,WAAWA,UAAS,CAElD,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,MAAM,oBAAoB,aAAaA,UAAS,EAChD,MAAM,gBAAgBA,UAAS,CACjC,CACF,GAEA,MAAM,2BAA6B,IAAK,UAAY,CAClD,KAAK,cAAgB,SAAUA,WAAW,CACxC,IAAI,WAAa,MAAM,cAAcA,UAAS,EAE1C,WAAW,SAAW,GACxB,MAAM,oBAAoB,WAAWA,UAAS,CAElD,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,MAAM,oBAAoB,aAAaA,UAAS,EAChD,MAAM,gBAAgBA,UAAS,CACjC,CACF,GAEA,MAAM,uBAAyB,IAAK,UAAY,CAC9C,KAAK,cAAgB,SAAUA,WAAW,CAExC,MAAM,mBAAmBA,UAAS,EAGlC,EAAE,gBAAiBA,UAAS,EAAE,QAAQ,mBAAmB,EAEzD,MAAM,oBAAoB,WAAWA,UAAS,CAChD,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,MAAM,oBAAoB,aAAaA,UAAS,EAChD,MAAM,sBAAsBA,UAAS,EACrC,EAAE,gBAAiBA,UAAS,EAAE,QAAQ,qBAAqB,EAC3D,EAAE,aAAcA,UAAS,EAAE,MAAM,SAAS,CAC5C,CACF,GAEA,MAAM,cAAgB,IAAK,UAAY,CACrC,KAAK,cAAgB,SAAUA,WAAW,CACxC,EAAE,cAAeA,UAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,aAAc,IAAI,MAAM,WAAW,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,EAAE,cAAeA,UAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,OAAO,CACpC,CAAC,CACH,CACF,GAEA,MAAM,eAAiB,IAAK,UAAY,CACtC,KAAK,cAAgB,SAAUA,WAAW,CACxC,IAAI,iBAAmB,EAAE,4BAA6BA,UAAS,EAG/D,GAAI,CAAC,iBAAiB,OACpB,IAAI,iBAAmB,EAAE,4BAA6BA,UAAS,EAGjE,GAAI,iBAAiB,OAAQ,CAC3B,IAAI,uBAAyB,UAAkC,CAC7D,IAAI,WAAa,iBAAiB,SAAS,cAAc,EACvD,mBAAqB,EAAE,MAAM,EAAE,MAAM,EAAI,IAa3C,GAVI,iBAAiB,SAAS,0BAA0B,IACtD,mBAAqB,IAGlB,oBACH,EAAE,oBAAqB,gBAAgB,EACpC,YAAY,kBAAkB,EAC9B,SAAS,UAAU,EAGpB,YAAc,CAAC,mBAAoB,CAIrC,iBAAiB,MAAM,SAAS,EAAE,IAAI,MAAM,EAC5C,iBACG,KAAK,mBAAmB,EACxB,WAAW,UAAU,EACrB,WAAW,MAAM,EAGpB,IAAI,SAAW,iBAAiB,KAAK,MAAM,EACvC,YAAc,KAClB,iBAAiB,KAAK,gBAAgB,EAAE,KAAK,SAAU,MAAO,CACxD,MAAQ,WAAa,IACvB,YAAc,EAAE,4BAA4B,EAAE,SAC5C,gBACF,GAEF,EAAE,IAAI,EAAE,SAAS,WAAW,CAC9B,CAAC,CACH,KAAW,CAAC,YAAc,qBAIxB,iBAAiB,KAAK,gBAAgB,EAAE,SAAS,gBAAgB,EACjE,iBAAiB,KAAK,eAAe,EAAE,OAAO,EAG9C,iBACG,GAAG,OAAQ,UAAY,CACtB,EAAE,oBAAqB,IAAI,EACxB,YAAY,kBAAkB,EAC9B,SAAS,UAAU,CACxB,CAAC,EACA,MAAM,CACL,SAAU,GACV,KAAM,GACN,SAAU,GACV,aAAc,GACd,OAAQ,GACR,KAAM,GACN,aAAc,SAAsB,OAAQ,EAAG,CAC7C,MACE,0UAOJ,EACA,IAAK,WAAS,cAAc,eAAe,CAC7C,CAAC,EAEP,EAEA,uBAAuB,EACvB,EAAE,MAAM,EAAE,GACR,+BAAiCA,WAAU,GAC3C,sBACF,CACF,CAGA,EAAE,2CAA4CA,UAAS,EAAE,KACvD,UAAY,CACV,MAAM,uBAAuB,IAAI,CACnC,CACF,CACF,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,EAAE,MAAM,EAAE,IAAI,gBAAkBA,WAAU,EAAE,EAC5C,EAAE,gBAAiBA,UAAS,EAAE,KAAK,UAAY,CAC7C,EAAE,IAAI,EAAE,MAAM,SAAS,EAAE,IAAI,MAAM,CACrC,CAAC,CACH,EAEA,KAAK,cAAgB,SAAU,MAAO,CACpC,IAAI,gBAAkB,EAAE,KAAK,EAAE,KAAK,aAAa,EACjD,EAAE,KAAK,EACJ,QAAQ,eAAe,EACvB,KAAK,UAAY,CAChB,EAAE,IAAI,EAAE,MAAM,YAAa,eAAe,CAC5C,CAAC,CACL,CACF,GAEA,MAAM,cAAgB,IAAK,UAAY,CACrC,KAAK,cAAgB,SAAU,UAAW,CAExC,EAAE,SAAS,EAAE,GACX,+CACA,gBACA,SAAU,EAAG,CACX,MAAO,EACT,CACF,EAGA,IAAI,wBAA0B,GAC9B,EAAE,SAAS,EAAE,GACX,+CACA,cACA,SAAU,EAAG,CACP,EAAE,MAAQ,WACZ,aAAa,uBAAuB,EACpC,EAAE,IAAI,EAAE,QAAQ,aAAa,EAAE,SAAS,OAAO,IAE/C,aAAa,uBAAuB,EACpC,wBAA0B,WACxB,UAAY,CACV,EAAE,IAAI,EAAE,QAAQ,aAAa,EAAE,YAAY,OAAO,CACpD,EAAE,KAAK,IAAI,EACX,GACF,EAEJ,CACF,EAGA,EAAE,SAAS,EAAE,GACX,sBACA,yCACA,SAAU,EAAG,CACX,OAAI,EAAE,MAAM,EAAE,YAAY,aAAa,EAAE,SAAS,aAAa,GAC7D,WAAW,UAAY,CACrB,EAAE,2BAA2B,EAAE,MAAM,CACvC,EAAG,GAAG,EACN,EAAE,6CAA6C,EAC5C,YAAY,kBAAkB,EAC9B,SAAS,UAAU,GAEtB,EAAE,yBAAyB,EAAE,MAAM,EAE9B,EACT,CACF,EAGA,EAAE,SAAS,EAAE,GACX,sBACA,sBACA,SAAU,EAAG,CACP,EAAE,SAAW,IACf,EAAE,qBAAqB,EAAE,MAAM,CAEnC,CACF,EAGA,IAAI,qBAAuB,EACzB,wCACA,SACF,EACA,GAAI,qBAAqB,OAAQ,CAC/B,IAAI,sBAAwB,IAC1B,gBAAkB,GAClB,WAAa,KACb,YAAc,EACd,UAAY,qBAAqB,KAAK,mBAAmB,EACzD,WAAa,qBAAqB,KAAK,oBAAoB,EAC3D,YAAc,qBAAqB,KAAK,kBAAkB,EAC1D,UAAY,qBAAqB,KAAK,aAAa,EAErD,EAAE,SAAS,EAAE,GACX,2CACA,sBACA,UAAY,CACV,IAAI,iBAAmB,EAAE,cAAc,EACrC,YAAc,iBAAiB,KAAK,uBAAuB,EAC3D,cAAgB,EAAE,IAAI,EAAE,IAAI,EAG9B,GACE,cAAc,OAAS,GACvB,eAAiB,EAAE,IAAI,EAAE,KAAK,QAAQ,EACtC,CAEA,EAAE,IAAI,EAAE,KAAK,SAAU,aAAa,EAIlC,YAAW,MAAM,EAInB,aAAa,eAAe,EAG5B,IAAI,MAAQ,EAAE,IAAI,EAAE,QAAQ,MAAM,EAC9B,QACF,MAAM,KAAK,QAAQ,GAClB,MAAM,KAAK,QAAQ,EAAE,QAAQ,GAAG,EAAI,GAAK,IAAM,KAChD,MAAM,UAAU,EAGlB,iBACG,YACC,yFACF,EACC,SAAS,sBAAsB,EAC9B,EAAE,+BAA+B,EAAE,SAAW,GAChD,YAAY,KACV,qFACF,EAIF,gBAAkB,WAAW,UAAY,CACvC,IAAI,QAAS,SACT,MAAM,QAAQ,SAAS,kBAEzB,QAAU,MAAM,OAAO,sBACvB,SAAW,CACT,EAAG,cACH,WAAY,oBACZ,UAAW,CACT,KAAM,MAAM,KAAK,oBAAoB,EAAE,IAAI,EAC3C,MAAO,YACP,QAAS,CACP,qBAAsB,OACtB,OAAQ,YACJ,4DACA,0CACN,CACF,CACF,IAGA,QAAU,QACV,SAAW,CACT,WAAY,aACd,GAGF,WAAa,EAAE,KAAK,CAClB,IAAK,QACL,KAAM,SACN,SAAU,OACV,QAAS,SAAiB,SAAU,CAClC,IAAI,aAAe,KACd,MAAM,QAAQ,SAAS,iBAK1B,aAAe,EAAE,QAAQ,EAAE,KAAK,eAAe,EAJ/C,aAAe,EAAE,QAAU,SAAW,QAAQ,EAAE,KAC9C,qDACF,EAMF,WAAa,KACb,MAAM,oBAAoB,aAAa,WAAW,EAClD,iBAAiB,YACf,yFACF,EACA,YAAY,MAAM,EAElB,IAAI,iBAAmB,EACrB,kFACF,EACI,cAAgB,EAClB,2CACF,EAEA,iBAAiB,SAAS,EAAE,CAAC,EAAE,UAC7B,aAAa,CAAC,EAAE,UAElB,aACG,KACC,wDACF,EACC,MAAM,EAAG,WAAW,EACpB,SAAS,oBAAoB,EAC7B,KAAK,UAAY,CAChB,EAAE,IAAI,EAAE,KAAK,sBAAsB,EAAE,OAAO,EAC5C,EAAE,IAAI,EACH,KAAK,kBAAkB,EACvB,YAAY,iBAAiB,EAC3B,WACH,EAAE,IAAI,EAAE,KAAK,gBAAgB,EAAE,OAAO,EAEnC,YACH,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,OAAO,CAEnC,CAAC,EACA,SAAS,iBAAiB,SAAS,CAAC,EAEvC,aACG,KAAK,2BAA2B,EAChC,KAAK,UAAY,CAChB,IAAI,MAAQ,EACV,yDACF,EAAE,KAAK,OAAQ,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,CAAC,EACnD,EAAE,wCAAwC,EACvC,KAAK,EAAE,IAAI,EAAE,KAAK,oBAAoB,EAAE,KAAK,CAAC,EAC9C,SAAS,KAAK,EACjB,cAAc,OAAO,KAAK,CAC5B,CAAC,EAEH,iBAAiB,YAAY,sBAAsB,EAEnD,IAAI,YACA,iBAAiB,KAAK,2BAA2B,EAC9C,OAAS,EACd,SACE,cAAc,KAAK,2BAA2B,EAAE,OAChD,EACA,aAAe,UAEjB,iBAAiB,SAAS,0BAA0B,EACpD,iBAAiB,YACf,yCACA,iBAAiB,KAAK,gBAAgB,EAAE,OAAS,CACnD,EACI,cACF,YAAY,OAAO,gBAAgB,EACnC,MAAM,oBAAoB,WAAW,gBAAgB,GAEnD,WACF,EAAE,0CAA0C,EACzC,KAAK,MAAM,QAAQ,0BAA0B,EAC7C,UAAU,aAAa,EAC1B,YAAY,OAAO,aAAa,GAElC,EACE,4DACF,EACG,KAAK,OAAQ,OAAO,EACpB,KAAK,MAAM,QAAQ,0BAA0B,EAC7C,SAAS,WAAW,EAEvB,MAAM,oBAAoB,IAG1B,iBAAiB,SAAS,yBAAyB,EACnD,EAAE,0CAA0C,EACzC,KAAK,MAAM,QAAQ,+BAA+B,EAClD,SAAS,WAAW,EAE3B,EACA,MAAO,SAAe,SAAU,CAC9B,QAAQ,IAAI,wBAAwB,CACtC,CACF,CAAC,CACH,EAAG,qBAAqB,CAC1B,MAAW,EAAE,IAAI,EAAE,IAAI,EAAE,QAAU,IAEjC,EAAE,IAAI,EAAE,KAAK,SAAU,aAAa,EAElC,YAAW,MAAM,EAEnB,aAAa,eAAe,EAG5B,iBAAiB,YACf,sFACF,EACA,YAAY,MAAM,EAEtB,CACF,CACF,CAGA,MAAM,WAAW,KAAK,CACpB,IAAK,EAAE,oBAAqB,SAAS,EACrC,cAAe,EACb,qCACA,SACF,EAAE,KAAK,EACP,cAAe,EAAE,oBAAqB,SAAS,CACjD,CAAC,EAEG,MAAM,uBACR,MAAM,sBAAsB,EAC5B,EAAE,MAAM,EAAE,GACR,gCACA,MAAM,qBACR,GACS,SAAS,cAAc,8BAA8B,GAE9D,KAAK,SAAS,cAAc,8BAA8B,EAAE,SAAS,EAIvE,KAAK,QAAU,SAAS,cAAc,iBAAiB,EACvD,KAAK,sBAAwB,SAAS,cACpC,oCACF,EAEA,KAAK,UAAU,gBAAgB,KAAK,IAAI,EACxC,KAAK,UAAU,UAAU,KAAK,IAAI,EAClC,KAAK,UAAU,wBAAwB,KAAK,IAAI,EAEhD,EAAE,MAAM,EAAE,GACR,uBACA,KAAK,UAAU,YAAY,KAAK,IAAI,CACtC,EACA,EAAE,MAAM,EAAE,GACR,gCACA,KAAK,UAAU,YAAY,KAAK,IAAI,CACtC,EAGA,EAAE,cAAe,SAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,aAAc,IAAI,MAAM,WAAW,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC,EAED,EAAE,uCAAuC,EAAE,KAAK,UAAY,CAC1D,EAAE,IAAI,EAAE,KAAK,aAAc,IAAI,MAAM,WAAW,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC,EAIC,MAAM,SAAS,WAAa,UAC5B,SAAS,cAAc,cAAc,GAErC,EAAE,SAAS,EAAE,GAAG,sBAAuB,aAAe,KAAQ,CAC5D,IAAI,eAAe,EACnB,SAAS,cACP,IAAI,YAAY,yBAA0B,CACxC,QAAS,GACT,WAAY,EACd,CAAC,CACH,CACF,CAAC,EAIH,EAAE,QAAQ,EAAE,GAAG,kCAAmC,UAAY,CAC5D,EAAE,QAAQ,SAAS,OAAS,mBAAoB,SAAU,KAAM,CAE9D,QADI,qBAAuB,CAAC,sCAAsC,EACzD,EAAI,EAAG,EAAI,qBAAqB,OAAQ,IAAK,CACpD,IAAI,YAAc,EAAE,QAAU,KAAK,OAAS,QAAQ,EACjD,KAAK,qBAAqB,CAAC,CAAC,EAC5B,MAAM,EACL,UAAY,EAAE,qBAAqB,CAAC,CAAC,EACzC,UAAU,KAAK,YAAY,KAAK,CAAC,CACnC,CACF,CAAC,CACH,CAAC,EAGG,QAAQ,YAAc,EAAE,MAAM,EAAE,SAAS,mBAAmB,GAC9D,MAAM,cAAc,CAExB,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,EAAEA,UAAS,EAAE,IAAI,gBAAgB,EACjC,EAAE,QAAQ,EAAE,IAAI,gBAAgB,EAChC,EAAE,MAAM,EAAE,IAAI,gBAAgB,EAC9B,EAAE,cAAeA,UAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,OAAO,CACpC,CAAC,EACD,EAAE,uCAAuC,EAAE,KAAK,UAAY,CAC1D,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,OAAO,CACpC,CAAC,EACD,MAAM,WAAW,QACf,EAAE,cAAeA,UAAS,EAC1B,EAAE,oBAAqBA,UAAS,CAClC,CACF,EAEA,KAAK,UAAY,CACf,YAAa,SAAS,aAAc,CAClC,KAAK,UAAU,gBAAgB,KAAK,IAAI,CAC1C,EAEA,YAAa,SAAS,aAAc,CAClC,KAAK,UAAU,UAAU,KAAK,IAAI,EAClC,KAAK,UAAU,wBAAwB,KAAK,IAAI,CAClD,EAEA,gBAAiB,SAAS,iBAAkB,CAC1C,GAAI,KAAK,sBAAuB,CAC9B,IAAI,IAAM,SAAS,cAAc,2BAA2B,EAC1D,gBAAkB,IAAM,IAAI,UAAY,IAAI,aAAe,EACzD,CAAC,KAAK,UAAY,OAAO,SAAW,gBACtC,KAAK,sBAAsB,UAAU,IAAI,yBAAyB,EAElE,KAAK,sBAAsB,UAAU,OACnC,yBACF,CAEJ,CACF,EAEA,UAAW,SAAS,WAAY,CAC9B,KAAK,SACH,iBAAiB,KAAK,OAAO,EAAE,WAAa,UAC5C,iBAAiB,KAAK,OAAO,EAAE,WAAa,gBAChD,EAEA,wBAAyB,SAAS,yBAA0B,CAC1D,IAAI,aAAe,EACjB,mBAAqB,EACnB,KAAK,UACP,aAAe,KAAK,KAAK,KAAK,QAAQ,YAAY,EAC9C,KAAK,WACP,mBAAqB,eAGzB,SAAS,gBAAgB,MAAM,YAC7B,wBACA,aAAe,IACjB,EACA,SAAS,gBAAgB,MAAM,YAC7B,+BACA,mBAAqB,IACvB,CACF,CACF,CACF,GAEA,MAAM,4BAA8B,IAAK,UAAY,CACnD,IAAI,EAAI,KAER,EAAE,gCAAkC,UAAY,CAC9C,EACE,oEACF,EAAE,KAAK,UAAY,CACjB,IAAI,OAAS,EAAE,MAAM,EAAE,OAAO,EAG5B,SAAS,cAAc,oCAAoC,GAC3D,CAAC,KAAK,QAAQ,kBAAkB,EAAE,uBAElC,SACG,iBACC,oDACF,EACC,QAAS,IAAO,CACf,QAAU,GAAG,YACf,CAAC,EAEH,QAAU,SAAS,cAAc,iBAAiB,EAAE,aAEtD,EAAE,4CAA6C,IAAI,EAAE,OAAO,MAAM,CACpE,CAAC,CACH,EAEA,KAAK,cAAgB,SAAUA,WAAW,CACxC,EAAE,gBAAiBA,UAAS,EAAE,KAAK,UAAY,CACzC,EAAE,IAAI,EAAE,QAAQ,kCAAkC,EAAE,MAAM,GAAK,IACjE,EAAE,IAAI,EAAE,SAAS,kCAAkC,EACnD,EAAE,gCAAgC,EAClC,EAAE,MAAM,EACL,IAAI,6CAA6C,EACjD,GACC,8CACA,EAAE,+BACJ,EAEN,CAAC,EAGD,EAAE,2CAA4CA,UAAS,EAAE,KACvD,UAAY,CACV,MAAM,uBAAuB,IAAI,CACnC,CACF,CACF,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,EAAE,MAAM,EAAE,IAAI,8BAA8B,CAC9C,CACF,GAEA,MAAM,+BAAiC,IAAK,UAAY,CACtD,KAAK,cAAgB,SAAUA,WAAW,CACxC,MAAM,oBAAoB,WAAWA,UAAS,CAChD,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,MAAM,oBAAoB,aAAaA,UAAS,CAClD,CACF,GAEA,MAAM,uBAAyB,IAAK,UAAY,CAC9C,KAAK,cAAgB,SAAUA,WAAW,CAEpC,EAAE,sCAAuCA,UAAS,EAAE,SACtD,KAAK,kBAAoB,IAAI,MAAM,kBACjC,EAAE,sCAAuCA,UAAS,EAAE,CAAC,CACvD,GAIF,MAAM,mBAAmBA,UAAS,EAGlC,EAAE,gBAAiBA,UAAS,EAAE,QAAQ,mBAAmB,EAEzD,MAAM,oBAAoB,WAAWA,UAAS,EAG9C,EAAE,yBAA0BA,UAAS,EAAE,GAAG,QAAS,IAAK,UAAY,CAClE,SAAE,WAAW,EAAE,QACb,CACE,UAAW,EAAE,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC,EAAE,OAAO,EAAE,GAC9C,EACA,GACF,EACO,EACT,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,MAAM,oBAAoB,aAAaA,UAAS,EAChD,MAAM,sBAAsBA,UAAS,EACrC,EAAE,gBAAiBA,UAAS,EAAE,QAAQ,qBAAqB,EAC3D,EAAE,yBAA0BA,UAAS,EAAE,IAAI,OAAO,EAC9C,KAAK,mBACP,KAAK,kBAAkB,gBAAgB,CAE3C,CACF,GAEA,MAAM,uBAAyB,IAAK,UAAY,CAC9C,KAAK,cAAgB,SAAU,OAAQ,CACrC,SAAS,MAAM,MAAM,KAAK,IACxB,OAAO,cAAc,UAAU,EAAE,UAAU,IAAI,kBAAkB,CACnE,EACA,OAAO,iBAAiB,WAAW,EAAE,QAAS,IAAO,CACnD,UAAU,OAAO,OAAO,EAAE,CAC5B,CAAC,CACH,CACF,GAEA,MAAM,sBAAwB,IAAK,UAAY,CAC7C,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,UAAY,MAAM,qBAAqBA,UAAS,EACrD,KAAK,WAAa,EAAEA,UAAS,EAE7B,KAAK,SAAW,IAAI,MAAM,aAAa,IAAI,CAC7C,EAEA,KAAK,gBAAkB,UAAY,CACjC,KAAK,SAAS,QAAQ,CACxB,CACF,GAEA,MAAM,iBAAmB,IAAK,UAAY,CACxC,IAAI,EAAI,KAER,EAAE,gCAAkC,UAAY,CAC9C,EAAE,sDAAsD,EAAE,KACxD,UAAY,CACV,IAAI,OAAS,EAAE,MAAM,EAAE,OAAO,EAG5B,SAAS,cAAc,oCAAoC,GAC3D,CAAC,KAAK,QAAQ,kBAAkB,EAAE,uBAElC,SACG,iBACC,oDACF,EACC,QAAS,IAAO,CACf,QAAU,GAAG,YACf,CAAC,EAEH,QAAU,SAAS,cAAc,iBAAiB,EAAE,aAEtD,EAAE,4CAA6C,IAAI,EAAE,OAAO,MAAM,CACpE,CACF,CACF,EAEA,KAAK,cAAgB,SAAUA,WAAW,CACxC,EAAE,aAAcA,UAAS,EAAE,KAAK,UAAY,CAC1C,IAAI,eAAiB,EAAE,IAAI,EAAE,KAAK,YAAY,IAAM,UAAY,EAAI,IAChE,cAAgB,EAAE,IAAI,EAAE,KAAK,gBAAgB,EAAI,IAGnD,EAAE,IAAI,EAAE,KAAK,eAAe,EAAE,QAC9B,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE,MAAM,GAAK,IAEjD,EAAE,IAAI,EAAE,SAAS,kCAAkC,EACnD,EAAE,gCAAgC,EAClC,EAAE,MAAM,EACL,IAAI,kCAAkC,EACtC,GACC,mCACA,EAAE,+BACJ,GAEJ,EAAE,IAAI,EACH,GAAG,OAAQ,UAAY,CACtB,EAAE,oBAAqB,IAAI,EACxB,YAAY,kBAAkB,EAC9B,SAAS,UAAU,CACxB,CAAC,EACA,MAAM,CACL,SAAU,EAAE,IAAI,EAAE,KAAK,UAAU,EACjC,KAAM,EAAE,IAAI,EAAE,KAAK,YAAY,IAAM,QACrC,MAAO,eACP,cACA,OAAQ,EAAE,IAAI,EAAE,KAAK,YAAY,IAAM,SACvC,KAAM,EAAE,IAAI,EAAE,KAAK,YAAY,IAAM,OACrC,aAAc,GACd,SAAU,GACV,aAAc,GACd,UACE,wDACA,MAAM,QAAQ,SACd,KACA,MAAM,MAAM,YACZ,YACF,UACE,wDACA,MAAM,QAAQ,KACd,KACA,MAAM,MAAM,aACZ,YACF,aAAc,SAAsB,OAAQ,EAAG,CAC7C,MACE,wQAGA,gFAAgF,OAC9E,cAAgB,eAChB,QACF,EACA,iBAGJ,EACA,IAAK,WAAS,cAAc,eAAe,EAC3C,WAAY,CACV,CACE,WAAY,IACZ,SAAU,CACR,OAAQ,GACR,KAAM,EAAE,IAAI,EAAE,KAAK,YAAY,IAAM,MACvC,CACF,CACF,CACF,CAAC,EACA,GAAG,eAAgB,SAAU,MAAO,MAAO,aAAc,CACxD,GACE,EAAE,IAAI,EAAE,KAAK,YAAY,IAAM,cAC/B,EAAE,IAAI,EAAE,KAAK,YAAY,IAAM,OAC/B,CACA,IAAI,eAAiB,EAAE,MAAM,QAAQ,IAAI,YAAY,CAAC,EACtD,eAAe,SAAS,gBAAgB,CAC1C,CACF,CAAC,EACA,GAAG,cAAe,SAAU,MAAO,MAAO,CACzC,EAAE,MAAM,OAAO,EACZ,OAAO,iBAAiB,EACxB,YAAY,gBAAgB,CACjC,CAAC,CACL,CAAC,EAGD,EAAE,2CAA4CA,UAAS,EAAE,KACvD,UAAY,CACV,MAAM,uBAAuB,IAAI,CACnC,CACF,CACF,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,EAAE,gBAAiBA,UAAS,EAAE,MAAM,SAAS,EAAE,IAAI,MAAM,EACzD,EAAE,MAAM,EAAE,IAAI,mBAAmB,CACnC,EAEA,KAAK,cAAgB,SAAUA,WAAW,CACxC,EAAEA,UAAS,EACR,QAAQ,eAAe,EACvB,MAAM,YAAa,EAAEA,UAAS,EAAE,KAAK,aAAa,CAAC,EACnD,MAAM,YAAY,CACvB,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,EAAEA,UAAS,EAAE,QAAQ,eAAe,EAAE,MAAM,WAAW,CACzD,CACF,GAEA,MAAM,oBAAsB,IAAK,UAAY,CAC3C,KAAK,cAAgB,SAAUA,WAAW,CACxC,KAAK,UAAY,MAAM,qBAAqBA,UAAS,EACrD,KAAK,sBAAwB,EAAE,oBAAqBA,UAAS,EAE7D,KAAK,sBACF,KAAK,0BAA0B,EAC/B,GAAG,OAAQ,UAAY,CACtB,EAAE,oBAAqB,IAAI,EACxB,YAAY,kBAAkB,EAC9B,SAAS,UAAU,CACxB,CAAC,EACA,MAAM,CACL,KAAM,KAAK,sBAAsB,SAC/B,+BACF,EACA,aAAc,KAAK,sBAAsB,SACvC,kCACF,EACI,EACA,EACJ,SAAU,KAAK,sBAAsB,KAAK,UAAU,EACpD,cAAe,KAAK,sBAAsB,KAAK,gBAAgB,EAC/D,KAAM,GACN,OAAQ,GACR,aAAc,KAAK,sBAAsB,KACvC,6BACF,EACA,UACE,wDACA,MAAM,QAAQ,SACd,KACA,MAAM,MAAM,YACZ,YACF,UACE,wDACA,MAAM,QAAQ,KACd,KACA,MAAM,MAAM,aACZ,YACF,IAAK,WAAS,cAAc,eAAe,EAC3C,WAAY,CACV,CACE,WAAY,IACZ,SAAU,CACR,KAAM,GACN,aAAc,CAChB,CACF,CACF,CACF,CAAC,CACL,EAEA,KAAK,gBAAkB,SAAUA,WAAW,CAC1C,EAAE,gBAAiBA,UAAS,EAAE,KAAK,UAAY,CAC7C,EAAE,IAAI,EAAE,MAAM,SAAS,EAAE,IAAI,MAAM,CACrC,CAAC,CACH,EAEA,KAAK,cAAgB,SAAU,MAAO,CACpC,IAAI,gBAAkB,EAAE,KAAK,EAAE,KAAK,aAAa,EACjD,EAAE,KAAK,EACJ,QAAQ,eAAe,EACvB,KAAK,UAAY,CAChB,EAAE,IAAI,EAAE,MAAM,YAAa,eAAe,CAC5C,CAAC,CACL,CACF,GAGA,EAAE,SAAUQ,GAAG,CACb,IAAIA,GAAIA,GAERA,GAAE,QAAQ,EAAE,GAAG,sBAAuB,SAAU,IAAK,CAC/C,IAAI,UAAY,IAClBA,GAAE,MAAM,EAAE,SAAS,UAAU,EAC7BA,GAAE,QAAQ,EAAE,IAAI,qBAAqB,EAEzC,CAAC,EAGDA,GAAE,QAAQ,EAAE,GAAG,QAAS,wBAAyB,SAAU,EAAG,CAC5D,EAAE,eAAe,EACjB,IAAI,SAAWA,GAAE,IAAI,EACnB,QAAUA,GAAEA,GAAE,IAAI,EAAE,KAAK,eAAe,CAAC,EACzC,WAAa,QAAQ,KAAK,0BAA0B,EACpD,WAAa,CAAC,QAAQ,SAAS,uBAAuB,EACpD,mBACF,QAAQ,IAAI,qBAAqB,EAAE,QAAQ,IAAI,GAAK,EAChD,SAAS,QAAQ,IAAI,qBAAqB,CAAC,EAC3C,WAAW,QAAQ,IAAI,qBAAqB,CAAC,EAAI,IAClD,QAAQ,SAAS,8BAA8B,IAC9C,YACF,SAAS,SAAS,kCAAkC,EACpD,QACG,SAAS,oDAAoD,EAC7D,IAAI,CACH,OAAQ,WAAW,YAAY,EAAI,KACnC,QAAS,CACX,CAAC,EACH,WAAW,UAAY,CACrB,QAAQ,IAAI,CACV,OAAQ,EACR,QAAS,CACX,CAAC,EACD,WAAW,UAAY,CACrB,QACG,SAAS,uBAAuB,EAChC,YACC,oDACF,EACF,QAAQ,IAAI,CACV,OAAQ,GACR,QAAS,EACX,CAAC,CACH,EAAG,kBAAkB,CACvB,EAAG,EAAE,IAEL,SAAS,YAAY,kCAAkC,EACvD,QACG,SAAS,uDAAuD,EAChE,IAAI,CACH,OAAQ,EACR,QAAS,EACT,QAAS,OACX,CAAC,EACH,WAAW,UAAY,CACrB,QAAQ,IAAI,CACV,OAAQ,WAAW,YAAY,EAAI,KACnC,QAAS,CACX,CAAC,EACD,WAAW,UAAY,CACrB,QAAQ,YACN,6EACF,EACA,QAAQ,IAAI,CACV,OAAQ,GACR,QAAS,GACT,QAAS,EACX,CAAC,CACH,EAAG,kBAAkB,CACvB,EAAG,EAAE,GAGX,CAAC,EAGDA,GAAE,QAAQ,EAAE,GAAG,SAAU,iBAAkB,UAAY,CACrD,OAAO,SAAWA,GAAE,IAAI,EAAE,IAAI,CAChC,CAAC,EAGDA,GAAE,QAAQ,EAAE,GAAG,QAAS,qBAAsB,SAAU,EAAG,CACzD,EAAE,eAAe,EACbA,GAAE,MAAM,EAAE,SAAS,8BAA8B,GAEnDA,GAAE,MAAM,EAAE,YAAY,+CAA+C,EACrE,WAAW,UAAY,CACrBA,GAAE,MAAM,EAAE,YAAY,8BAA8B,CACtD,EAAG,GAAG,GAGN,MAAM,cAAc,CAExB,CAAC,EAED,MAAM,cAAgB,UAAY,CAChCA,GAAE,MAAM,EAAE,SAAS,8BAA8B,EACjD,WAAW,UAAY,CACrBA,GAAE,MAAM,EAAE,SAAS,mBAAmB,EAGtCA,GAAE,uCAAuC,EAAE,KAAK,UAAY,CAC1D,IAAI,MAAQA,GAAE,mBAAoB,IAAI,EACpC,WAAa,EACf,MAAM,SAAS,EAAE,KAAK,UAAY,CAChC,YAAcA,GAAE,IAAI,EAAE,OAAO,CAC/B,CAAC,EACDA,GAAE,mBAAoB,IAAI,EAAE,IAAI,SAAU,WAAa,IAAI,CAC7D,CAAC,EAGDA,GAAE,6CAA6C,EAC5C,YAAY,kBAAkB,EAC9B,SAAS,UAAU,EAGtBA,GAAE,yCAAyC,EAAE,KAAK,UAAY,CAC5D,MAAM,oBAAoB,WAAWA,GAAE,IAAI,CAAC,CAC9C,CAAC,EAGD,IAAI,GAAKA,GACP,6FACF,EAAE,IAAI,kBAAkB,EACpB,GAAKA,GACP,6FACF,EAAE,IAAI,qBAAqB,EACvB,OACF,WAAW,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,EAAI,WAAW,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,EAC5D,WAAW,UAAY,CACrBA,GAAE,MAAM,EAAE,SAAS,6BAA6B,CAClD,EAAG,OAAS,GAAI,CAClB,EAAG,EAAE,CACP,EAGAA,GACE,8CACE,MAAM,QAAQ,0CACd,QACJ,EACG,GAAG,QAAS,UAAY,CACvB,OAAAA,GAAE,MAAM,EAAE,YAAY,+BAA+B,EACrD,WAAW,UAAY,CACrBA,GAAE,MAAM,EAAE,YAAY,8BAA8B,CACtD,EAAG,GAAG,EACC,EACT,CAAC,EACA,SAAS,MAAM,EAEd,MAAM,SAAS,gBAAkB,OACnC,MAAM,aAAa,EAIrBA,GAAE,QAAQ,EAAE,GAAG,oBAAqB,gBAAiB,SAAU,EAAG,CAChE,GAAIA,GAAE,IAAI,EAAE,KAAK,YAAY,IAAM,GAInC,KAAI,sBAAwBA,GAAE,IAAI,EAChC,eAAiBA,GAAE,IAAI,EAAE,QAAQ,iBAAiB,EAIpDA,GAAE,IAAI,EAAE,GAAG,iBAAkB,SAAU,IAAK,QAAS,QAAS,CAE5D,IAAI,WAAa,eAAe,KAAK,qBAAqB,EAC1D,QAAQ,IAAI,UAAW,OAAO,EAE9B,MAAM,eAAiB,SAAS,cAAc,qBAAqB,EACnE,QAAQ,IAAI,KAAK,EACjB,QAAQ,IACN,4CACA,MAAM,yCACR,EACI,iBACF,eAAe,YAAc,QACzB,MAAM,QAAQ,YACZ,QAAQ,MACR,MAAM,yCACR,EACA,MAAM,QAAQ,YACZ,QAAQ,SAAS,CAAC,EAAE,MACpB,MAAM,yCACR,GAEN,WAAW,KAAK,0BAA0B,EAAE,OAAO,EAC/C,QACF,WAAW,OACTA,GACE,kBAAkB,OAAO,QAAQ,GAAI,GAAG,EAAE,OAAO,QAAQ,EAAE,CAC7D,EAAE,KAAK,CACT,EAEA,WAAW,OACTA,GAAE,kBAAkB,OAAO,QAAQ,GAAI,OAAO,CAAC,EAAE,KAAK,CACxD,EAIF,MAAM,gBAAkB,SAAS,cAAc,cAAc,EACzD,kBACF,gBAAgB,YAAc,QAAU,QAAQ,IAAM,IAEpD,SACF,eACG,KAAK,kCAAkC,EACvC,KAAK,UAAY,CAChBA,GAAE,IAAI,EAAE,MAAMA,GAAE,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,EAEjC,QAAQ,eACV,QAAQ,cAAc,KAAK,CAE/B,CAAC,EAID,QACF,SACG,iBAAiB,4BAA4B,EAC7C,QAAS,IAAO,CACC,GAAG,QAAQ,WACV,QAAQ,GACvB,GAAG,SAAW,GAEd,GAAG,SAAW,EAElB,CAAC,EAEH,SACG,iBAAiB,4BAA4B,EAC7C,QAAS,IAAO,CACf,GAAG,SAAW,EAChB,CAAC,CAEP,CAAC,EAGD,IAAI,sBAAwB,eAAe,KACzC,0BACF,EAEE,sBAAsB,QACtBA,GAAE,8DAA8D,EAAE,SAElE,sBACG,KAAK,QAAQ,EACb,OAAO,6BAA6B,EACvCA,GAAE,IAAI,EAAE,GAAG,iBAAkB,SAAU,IAAK,QAAS,CACnD,sBAAsB,KAAK,UAAY,CACrC,IAAI,YAAcA,GAAE,IAAI,EAAE,KAAK,cAAc,EAC7C,GAAI,QAAS,CACX,IAAI,YAAc,QAAQ,QAAQ,WAAW,EAC7CA,GAAE,IAAI,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,CAChD,KAAO,CACL,IAAI,eAAiB,KAAK,cAAc,kBAAkB,EACtD,gBACFA,GAAE,IAAI,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,KAAK,CAE3D,CACF,CAAC,CACH,CAAC,GAIH,IAAI,8BAAgC,eAAe,KACjD,oDACF,EACI,8BAA8B,QAChCA,GAAE,IAAI,EAAE,GAAG,iBAAkB,SAAU,IAAK,QAAS,CACnD,IAAI,OAAS,KACT,YAAc,MAAM,cAAc,eAAeA,GAAE,IAAI,CAAC,EACxD,gBAAkB,CAAC,EACnB,4BAA8B,CAAC,EAEnCA,GACE,sEACA,IACF,EAAE,KAAK,SAAU,MAAO,CACtB,IAAI,aAAeA,GAAE,IAAI,EAAE,KAAK,eAAe,EAC3C,eAAiBA,GAAE,IAAI,EAAE,KAC3B,0CACF,EACI,MAAQ,aAAa,OACrB,aAAa,IAAI,EACjB,eACA,eAAe,KAAK,OAAO,EAC3B,KACJ,QAAQ,IAAI,QAAS,KAAK,EAC1B,4BAA4B,KAAK,KAAK,CACxC,CAAC,EAGD,QACM,YAAc,EAClB,YAAc,YAAY,QAAQ,OAClC,cACA,CAGA,QAFI,WAAa,YAAY,QAAQ,WAAW,EAC5C,OAAS,CAAC,EACL,EAAI,EAAG,EAAI,YAAY,SAAS,OAAQ,IAAK,CACpD,IAAI,EAAI,YAAY,SAAS,CAAC,EACzB,OAAO,EAAE,QAAQ,WAAW,CAAC,IAChC,OAAO,EAAE,QAAQ,WAAW,CAAC,EAAI,GAErC,CACA,gBAAgB,KAAK,CACnB,KAAM,WACN,MACF,CAAC,CACH,CA6CA,QA1CI,OAAS,SAAgBC,aAAa,CAIxC,QAHIC,YAAa,YAAY,QAAQD,YAAW,EAE5C,aAAe,CAAC,EAEd,IAAM,EACV,IAAM,4BAA4B,QAAU,IAAMA,aAClD,MAEA,aAAa,KAAK,4BAA4B,GAAG,CAAC,EAIpD,OAAO,KAAK,gBAAgBA,YAAW,EAAE,MAAM,EAAE,QAC9CE,cAAgB,CACf,IAAI,qBAAuB,aAAa,IAAK,GAAM,CAAC,EACpD,qBAAqB,KAAKA,YAAW,EAIrC,QADI,uBAAyB,GACpB,IAAM,EAAG,IAAM,YAAY,SAAS,OAAQ,MAAO,CAI1D,QAHI,GAAK,YAAY,SAAS,GAAG,EAE7B,gBAAkB,GACb,EAAI,EAAG,EAAI,qBAAqB,OAAQ,IAE7C,qBAAqB,CAAC,GACtB,qBAAqB,CAAC,GAAK,GAAG,QAAQ,CAAC,IAGvC,gBAAkB,IAGlB,iBAAmB,GAAG,YACxB,uBAAyB,GAE7B,CACA,gBAAgBF,YAAW,EAAE,OAAOE,YAAW,EAC7C,sBACJ,CACF,CACF,EAEM,aAAe,EACnB,aAAe,YAAY,QAAQ,OACnC,eAEA,OAAO,YAAY,EAGrB,QAAS,GAAK,EAAG,GAAK,gBAAgB,OAAQ,KAAM,CAClD,IAAI,OAAS,SAAgBA,aAAa,CACxCH,GACE,oEAAoE,OAClE,GACA,aACF,EACA,MACF,EACG,OAAO,UAAY,CAClB,OAAO,KAAK,QAAUG,YACxB,CAAC,EACA,YACC,iBACA,CAAC,gBAAgB,EAAE,EAAE,OAAOA,YAAW,CACzC,EACFH,GACE,sEAAsE,OACpE,GACA,uBACF,EACA,MACF,EACG,OAAO,UAAY,CAClB,OAAO,KAAK,QAAQ,QAAUG,YAChC,CAAC,EACA,YACC,iBACA,CAAC,gBAAgB,EAAE,EAAE,OAAOA,YAAW,CACzC,CACJ,EACA,QAAS,eAAe,gBAAgB,EAAE,EAAE,OAC1C,OAAO,WAAW,CAEtB,CACF,CAAC,EAIH,sBAAsB,GAAG,SAAU,mBAAoB,UAAY,CAE/D,sBAAsB,SAAS,kCAAkC,GAEjE,MAAM,oBAAoB,qBAAqB,CAEnD,CAAC,EAGD,MAAM,cAAc,mBAAmBH,GAAE,IAAI,CAAC,EAChD,CAAC,EAEDA,GAAE,QAAQ,EAAE,GAAG,sBAAuB,gBAAiB,UAAY,CACjEA,GAAE,IAAI,EAAE,IAAI,uBAAuB,EACnC,MAAM,cAAc,qBAAqBA,GAAE,IAAI,CAAC,CAClD,CAAC,EAKDA,GAAE,QAAQ,EAAE,GACV,uBACA,WACA,SAAU,EAAG,KAAM,WAAY,CAC7B,IAAI,SAAWA,GAAE,IAAI,EACjB,yBAA2B,SAC5B,OACC,gHACF,EACC,KAAK,uCAAuC,EAC3C,4BAA8B,GAC9B,WAAa,KAEjB,GAAI,SAAS,KAAK,0CAA0C,IAAM,GAAI,CAEpE,IAAI,iBAAmB,SAAS,KAC9B,0CACF,EACI,oBAAsB,KAAK,QAAQ,gBAAgB,EACnD,YAAc,SAAS,KAAK,aAAa,EAI7C,GAHA,WAAa,SAAS,KAAK,YAAY,EAGnC,WAAW,SAAS,cAAc,EAAG,CAEvC,IAAI,iBAAmB,CAAC,CAAC,WAAW,KAClC,yBAAyB,OAAO,KAAK,eAAe,GAAI,IAAI,CAC9D,EAAE,OAEF,WACG,MAAM,eAAe,EACrB,MACC,cACA,yBACG,OACC,KAAK,eAAe,GACpB,iCACF,EACC,OACC,oBACG,QAAQ,IAAK,QAAQ,EACrB,QAAQ,MAAO,EAAE,EACpB,IACF,CACJ,EAEF,WAAW,KAAK,QAAQ,EAAE,IAAI,CAC5B,SAAU,GACV,KAAM,GACN,IAAK,GACL,OAAQ,GACR,QAAS,EACX,CAAC,EAEI,mBACH,WAAW,MAAM,YAAa,EAAG,EAAI,EACrC,WAAW,MACT,YACA,WACG,KACC,yBAAyB,OACvB,KAAK,eAAe,GACpB,IACF,CACF,EACC,KAAK,aAAa,EACrB,EACF,EAEJ,CAGA,GAAI,YAAY,SAAS,cAAc,EAAG,CACxC,IAAI,kBAAoB,SAAS,KAAK,oBAAoB,EACrD,kBAAkB,SACrB,kBAAoBA,GAClB,wCACF,EAAE,YAAY,WAAW,GAI3B,YACG,KAAK,YAAY,EACjB,KAAK,EACL,KAAK,UAAY,CAChB,GACEA,GAAE,IAAI,EAAE,KAAK,0BAA0B,GACrC,qBACFA,GAAE,IAAI,EAAE,KAAK,eAAe,GAAK,KAAK,eAAe,GACrD,CACA,IAAI,MAAQA,GAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EACnCA,GAAE,IAAI,EAAE,SAAS,iBAAiB,EAClC,YAAY,QAAQ,sBAAuB,CAAC,KAAK,CAAC,CACpD,CACF,CAAC,EAGH,kBAAkB,KAAK,YAAY,EAAE,KAAK,UAAY,EAElDA,GAAE,IAAI,EAAE,KAAK,0BAA0B,GACrC,qBACFA,GAAE,IAAI,EAAE,KAAK,eAAe,GAAK,KAAK,eAAe,MAErDA,GAAE,IAAI,EAAE,KAAK,EACb,YAAY,QAAQ,mBAAoB,CAAC,IAAI,CAAC,EAElD,CAAC,EACD,YAAY,QAAQ,sBAAsB,CAC5C,MAEE,YAAY,KAAK,YAAY,EAAE,KAAK,UAAY,CAE5CA,GAAE,IAAI,EAAE,KAAK,0BAA0B,GACrC,qBACFA,GAAE,IAAI,EAAE,KAAK,eAAe,GAAK,KAAK,eAAe,GAErDA,GAAE,IAAI,EAAE,KAAK,EAEbA,GAAE,IAAI,EAAE,KAAK,CAEjB,CAAC,EAIC,yBAAyB,SAC3B,yBAAyB,KAAK,QAAQ,EAAE,KAAK,UAAY,CAErDA,GAAE,IAAI,EAAE,KAAK,0BAA0B,GACrC,qBACFA,GAAE,IAAI,EAAE,KAAK,eAAe,GAAK,KAAK,eAAe,IAEjDA,GAAE,IAAI,EAAE,SAAS,wBAAwB,IAC3C,4BAA8B,IAEhCA,GAAE,IAAI,EAAE,YAAY,wBAAwB,IAEvCA,GAAE,IAAI,EAAE,SAAS,wBAAwB,IAC5C,4BAA8B,IAEhCA,GAAE,IAAI,EAAE,SAAS,wBAAwB,EAE7C,CAAC,EACD,yBACG,KAAK,yBAAyB,EAC9B,SAAS,wBAAwB,EAExC,CAYA,GATA,SACG,KACC,gCACE,KAAK,eAAe,GACpB,UACJ,EACC,QAAQ,QAAQ,EAGf,yBAAyB,OAAQ,CACnC,IAAI,QAAU,SAAS,KACrB,yBAA2B,KAAK,eAAe,GAAK,UACtD,EACI,QAAQ,SACN,YAAc,CAAC,4BAEjB,MAAM,sBAAsB,QAAQ,CAAC,CAAC,EAC7B,6BAET,SACG,KAAK,yBAAyB,EAC9B,YAAY,wBAAwB,EACvC,QAAQ,SAAS,wBAAwB,GAC/B,QAAQ,SAAS,wBAAwB,IAEnD,aAAa,MAAM,uBAAuB,EAC1C,SACG,KAAK,sBAAsB,EAC3B,YAAY,qBAAqB,EACpC,SACG,KAAK,uBAAuB,EAC5B,YAAY,sBAAsB,EACrC,SACG,KAAK,yBAAyB,EAC9B,YAAY,wBAAwB,EAGvC,QACG,SAAS,4CAA4C,EACrD,SAAS,EACT,SAAS,sBAAsB,EAClC,MAAM,wBAA0B,WAAW,UAAY,CACrD,SACG,KAAK,sBAAsB,EAC3B,YAAY,qBAAqB,EACpC,SACG,KAAK,uBAAuB,EAC5B,YAAY,sBAAsB,CACvC,EAAG,IAAI,EAGP,MAAM,sBAAsB,QAAQ,CAAC,CAAC,GAG5C,CACF,CACF,EAGAA,GAAE,QAAQ,EAAE,GACV,QACA,sDACA,UAAY,CACV,IAAI,OAAS,CAAC,EACZ,MAAQA,GAAE,IAAI,EACX,QAAQ,oBAAoB,EAC5B,KAAK,mDAAmD,EAC3D,YAAcA,GAAE,IAAI,EAAE,KAAK,MAAM,EAEnC,GAAI,MAAM,OACR,MAAM,KAAK,UAAY,CACrB,IAAI,UAAYA,GAAE,IAAI,EAAE,KAAK,uBAAuB,EAAE,MAAM,EAC5D,UACG,KAAK,aAAa,EAClB,YAAY,YAAY,EACxB,SAAS,UAAU,EACnB,OAAO,EACP,SAAS,uBAAuB,EACnC,OAAO,KAAK,CACV,SAAU,UACV,QAASA,GAAE,IAAI,EAAE,KAAK,MAAM,CAC9B,CAAC,CACH,CAAC,MACI,CACL,IAAI,KAAOA,GAAE,IAAI,EAAE,KAAK,uBAAuB,EAAE,MAAM,EACvD,KACG,KAAK,aAAa,EAClB,YAAY,YAAY,EACxB,SAAS,UAAU,EACnB,OAAO,EACP,SAAS,uBAAuB,EACnC,OAAO,KAAK,CACV,SAAU,KACV,QAASA,GAAE,IAAI,EAAE,KAAK,MAAM,CAC9B,CAAC,CACH,CAEA,aAAM,mBAAmB,CACvB,OACA,aAAc,YACd,KAAM,MAAM,MAAM,YAClB,KAAM,MAAM,MAAM,aAClB,MAAO,MAAM,MAAM,KACrB,CAAC,EAEM,EACT,CACF,EAGA,IAAI,0BAA4BA,GAC9B,oCACF,EAAE,OAAO,UAAY,CACnB,OAAOA,GAAE,IAAI,EAAE,QAAQ,qBAAqB,EAAE,QAAU,CAC1D,CAAC,EAyCD,GAxCI,0BAA0B,QAC5B,MAAM,oBAAoB,WAAW,yBAAyB,EAEhEA,GAAE,MAAM,EAAE,GAAG,kBAAmB,UAAY,CAC1C,WAAW,UAAY,CACrB,MAAM,oBAAoB,mBAAmB,CAC/C,EAAG,GAAG,CACR,CAAC,EAGDA,GAAE,iBAAiB,EAAE,KAAK,UAAY,CACpC,IAAI,WAAaA,GAAE,IAAI,EAAE,SAAS,sCAAsC,EACpE,WAAW,QAAU,GAAK,WAAW,KAAK,IAAI,EAAE,OAAS,GAC3DA,GAAE,IAAI,EAAE,KAAK,MAAO,WAAW,KAAK,IAAI,CAAC,CAE7C,CAAC,EAEDA,GAAE,QAAQ,EAAE,GAAG,QAAS,oCAAqC,UAAY,CACvE,IAAI,IAAMA,GAAE,IAAI,EAAE,KAAK,UAAU,GAAK,KAAO,EAAI,GAC7C,KAAOA,GAAE,IAAI,EAAE,QAAQ,mBAAmB,EAAE,KAAK,iBAAiB,EACtE,OAAI,KAAK,KAAK,MAAM,IAClB,KAAO,SAAS,KAAK,KAAK,MAAM,CAAC,GAEnC,KAAK,IAAI,KAAK,IAAI,EAAG,SAAS,KAAK,IAAI,CAAC,EAAI,GAAG,CAAC,EAAE,QAAQ,QAAQ,EAC3D,EACT,CAAC,EAGDA,GAAE,mBAAmB,EAAE,GACrB,QACA,+BACA,UAAY,CACV,GAAIA,GAAE,MAAM,EAAE,MAAM,EAAI,IACtB,OAAAA,GAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,YAAY,UAAU,EACrC,EAEX,CACF,EAGI,OAAO,GAAO,KAAe,GAAG,SAClC,QAAS,cAAc,GAAG,SAAU,CAClC,IAAI,UAAY,GAAG,SAAS,UAAU,EACtC,GAAI,UAAU,OAAS,QAAS,CAC9B,IAAI,EAAI,UAAU,QAAQ,cAC1B,UAAU,QAAQ,cAAgB,SAAUR,WAAW,CAErDQ,GAAE,2CAA4CR,UAAS,EAAE,KACvD,UAAY,CACV,MAAM,uBAAuB,IAAI,CACnC,CACF,EACA,EAAE,KAAK,KAAMA,UAAS,CACxB,CACF,CACF,CAIF,MAAM,SAAS,KAAK,EACpB,MAAM,SAAS,SAAS,SAAU,MAAM,cAAe,CACrD,aAAc,EAChB,CAAC,EACD,MAAM,SAAS,SAAS,mBAAoB,MAAM,uBAAwB,CACxE,aAAc,EAChB,CAAC,EACD,MAAM,SAAS,SAAS,SAAU,MAAM,aAAa,EACrD,MAAM,SAAS,SAAS,cAAe,MAAM,kBAAmB,CAC9D,aAAc,EAChB,CAAC,EACD,MAAM,SAAS,SAAS,YAAa,MAAM,gBAAgB,EAC3D,MAAM,SAAS,SAAS,UAAW,MAAM,cAAc,EACvD,MAAM,SAAS,SAAS,eAAgB,MAAM,mBAAmB,EACjE,MAAM,SAAS,SACb,0BACA,MAAM,2BACR,EACA,MAAM,SAAS,SACb,sBACA,MAAM,yBACR,EACA,MAAM,SAAS,SACb,uBACA,MAAM,0BACR,EACA,MAAM,SAAS,SAAS,MAAO,MAAM,UAAU,EAC/C,MAAM,SAAS,SAAS,mBAAoB,MAAM,aAAc,CAC9D,2BAA4B,GAC9B,CAAC,EACD,MAAM,SAAS,SAAS,aAAc,MAAM,gBAAgB,EAC5D,MAAM,SAAS,SAAS,mBAAoB,MAAM,sBAAsB,EACxE,MAAM,SAAS,SAAS,mBAAoB,MAAM,sBAAsB,EACxE,MAAM,SAAS,SAAS,eAAgB,MAAM,uBAAwB,CACpE,aAAc,EAChB,CAAC,EACD,MAAM,SAAS,SACb,sBACA,MAAM,0BACN,CAAE,aAAc,EAAM,CACxB,EACA,MAAM,SAAS,SAAS,kBAAmB,MAAM,sBAAuB,CACtE,aAAc,EAChB,CAAC,EACD,MAAM,SAAS,SAAS,gBAAiB,MAAM,oBAAqB,CAClE,aAAc,EAChB,CAAC,EACD,MAAM,SAAS,SAAS,gBAAiB,MAAM,oBAAqB,CAClE,aAAc,EAChB,CAAC,EACD,MAAM,SAAS,SACb,4BACA,MAAM,+BACN,CAAE,aAAc,EAAM,CACxB,EACA,MAAM,SAAS,SACb,iCACA,MAAM,+BACN,CAAE,aAAc,EAAM,CACxB,EACA,MAAM,SAAS,SAAS,UAAW,IAAK,UAAY,CAAC,EAAI,CAC3D,CAAC,EAGD,EAAE,SAAUQ,GAAG,CACT,GAAG,SAAS,OACd,GAAG,SAAS,QAAS,SAAY,CAC/B,GAAI,CACF,IAAI,KAAO,CAAC,EACR,OAAO,QAAQ,aAAiB,MAClC,KAAK,aAAe,QAAQ,cAE1B,OAAO,QAAQ,2BAA+B,MAChD,KAAK,2BACH,QAAQ,4BAEZ,MAAM,SAAS,SAAS,QAAQ,KAAM,QAAQ,QAAS,IAAI,CAC7D,OAAS,IAAK,CACZ,QAAQ,MACN,8BAA8B,OAAO,QAAQ,KAAM,GAAG,EACtD,GACF,CACF,CACF,CAAC,EAED,QAAQ,KAAK,iDAAiD,CAElE,CAAC,CACH,GAAG,MAAM,MAAM",
  "names": ["t", "r", "a", "o", "n", "container", "status", "response", "$btn", "i", "el", "img", "key", "$", "optionIndex", "optionName", "optionValue"]
}
