{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/theme.js?view=ajax"],
  "sourcesContent": ["function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function ($) {\n  var $ = jQuery = $;\n  var cc = {\n    sections: []\n  };\n  theme.cartNoteMonitor = {\n    load: function load($notes) {\n      $notes.on('change.themeCartNoteMonitor paste.themeCartNoteMonitor keyup.themeCartNoteMonitor', function () {\n        theme.cartNoteMonitor.postUpdate($(this).val());\n      });\n    },\n    unload: function unload($notes) {\n      $notes.off('.themeCartNoteMonitor');\n    },\n    updateThrottleTimeoutId: -1,\n    updateThrottleInterval: 500,\n    postUpdate: function postUpdate(val) {\n      clearTimeout(theme.cartNoteMonitor.updateThrottleTimeoutId);\n      theme.cartNoteMonitor.updateThrottleTimeoutId = setTimeout(function () {\n        $.post(theme.routes.cart_url + '/update.js', {\n          note: val\n        }, function (data) {}, 'json');\n      }, theme.cartNoteMonitor.updateThrottleInterval);\n    }\n  }; // Turn a <select> tag into clicky boxes\n  // Use with: $('select').clickyBoxes()\n\n  $.fn.clickyBoxes = function (prefix) {\n    if (prefix == 'destroy') {\n      $(this).off('.clickyboxes');\n      $(this).next('.clickyboxes').off('.clickyboxes');\n    } else {\n      return $(this).filter('select:not(.clickybox-replaced)').addClass('clickybox-replaced').each(function () {\n        //Make sure rows are unique\n        var prefix = prefix || $(this).attr('id'); //Create container\n\n        var $optCont = $('<ul class=\"clickyboxes\"/>').attr('id', 'clickyboxes-' + prefix).data('select', $(this)).insertAfter(this);\n        var $label;\n\n        if ($(this).is('[id]')) {\n          $label = $('label[for=\"' + $(this).attr('id') + '\"]'); // Grab real label\n        } else {\n          $label = $(this).siblings('label'); // Rough guess\n        }\n\n        if ($label.length > 0) {\n          $optCont.addClass('options-' + removeDiacritics($label.text()).toLowerCase().replace(/'/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/-*$/, ''));\n        } //Add options to container\n\n\n        $(this).find('option').each(function () {\n          $('<li/>').appendTo($optCont).append($('<a href=\"#\"/>').attr('data-value', $(this).val()).html($(this).html()).addClass('opt--' + removeDiacritics($(this).text()).toLowerCase().replace(/'/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/-*$/, '')));\n        }); //Select change event\n\n        $(this).hide().addClass('replaced').on('change.clickyboxes keyup.clickyboxes', function () {\n          //Choose the right option to show\n          var val = $(this).val();\n          $optCont.find('a').removeClass('active').filter(function () {\n            return $(this).attr('data-value') == val;\n          }).addClass('active');\n        }).trigger('keyup'); //Initial value\n        //Button click event\n\n        $optCont.on('click.clickyboxes', 'a', function () {\n          if (!$(this).hasClass('active')) {\n            var $clicky = $(this).closest('.clickyboxes');\n            $clicky.data('select').val($(this).data('value')).trigger('change');\n            $clicky.trigger('change');\n          }\n\n          return false;\n        });\n      });\n    }\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\n      function a(t, r, a, o) {\n        if (r = e(r, 2), a = e(a, \",\"), o = e(o, \".\"), isNaN(t) || null == t) return 0;\n        t = (t / 100).toFixed(r);\n        var n = t.split(\".\");\n        return n[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1\" + a) + (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\n      switch (i.match(n)[1]) {\n        case \"amount\":\n          o = a(t, 2);\n          break;\n\n        case \"amount_no_decimals\":\n          o = a(t, 0);\n          break;\n\n        case \"amount_with_comma_separator\":\n          o = a(t, 2, \".\", \",\");\n          break;\n\n        case \"amount_with_space_separator\":\n          o = a(t, 2, \" \", \",\");\n          break;\n\n        case \"amount_with_period_and_space_separator\":\n          o = a(t, 2, \" \", \".\");\n          break;\n\n        case \"amount_no_decimals_with_comma_separator\":\n          o = a(t, 0, \".\", \",\");\n          break;\n\n        case \"amount_no_decimals_with_space_separator\":\n          o = a(t, 0, \" \", \"\");\n          break;\n\n        case \"amount_with_apostrophe_separator\":\n          o = a(t, 2, \"'\", \".\");\n          break;\n\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.replace(/^(.*)\\.([^\\.]*)$/g, '$1_' + format + '.$2');\n    },\n    Image: {\n      imageSize: function imageSize(t) {\n        var e = t.match(/.+_((?:pico|icon|thumb|small|compact|medium|large|grande)|\\d{1,4}x\\d{0,4}|x\\d{1,4})[_\\.@]/);\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\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\n        return null;\n      },\n      removeProtocol: function removeProtocol(t) {\n        return t.replace(/http(s)?:/, \"\");\n      }\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    var classes = {\n      listVisible: 'disclosure-list--visible'\n    };\n\n    function Disclosure($disclosure) {\n      this.$container = $disclosure;\n      this.cache = {};\n\n      this._cacheSelectors();\n\n      this._connectOptions();\n\n      this._connectToggle();\n\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      _connectToggle: function _connectToggle() {\n        this.cache.$disclosureToggle.on('click', function (evt) {\n          var ariaExpanded = $(evt.currentTarget).attr('aria-expanded') === 'true';\n          $(evt.currentTarget).attr('aria-expanded', !ariaExpanded);\n          this.cache.$disclosureList.toggleClass(classes.listVisible);\n        }.bind(this));\n      },\n      _connectOptions: function _connectOptions() {\n        this.cache.$disclosureOptions.on('click', function (evt) {\n          evt.preventDefault();\n\n          this._submitForm($(evt.currentTarget).data('value'));\n        }.bind(this));\n      },\n      _onFocusOut: function _onFocusOut() {\n        this.cache.$disclosureToggle.on('focusout', function (evt) {\n          var disclosureLostFocus = this.$container.has(evt.relatedTarget).length === 0;\n\n          if (disclosureLostFocus) {\n            this._hideList();\n          }\n        }.bind(this));\n        this.cache.$disclosureList.on('focusout', function (evt) {\n          var childInFocus = $(evt.currentTarget).has(evt.relatedTarget).length > 0;\n          var isVisible = this.cache.$disclosureList.hasClass(classes.listVisible);\n\n          if (isVisible && !childInFocus) {\n            this._hideList();\n          }\n        }.bind(this));\n        this.$container.on('keyup', function (evt) {\n          if (evt.which !== 27) return; // escape\n\n          this._hideList();\n\n          this.cache.$disclosureToggle.focus();\n        }.bind(this));\n\n        this.bodyOnClick = function (evt) {\n          var isOption = this.$container.has(evt.target).length > 0;\n          var isVisible = this.cache.$disclosureList.hasClass(classes.listVisible);\n\n          if (isVisible && !isOption) {\n            this._hideList();\n          }\n        }.bind(this);\n\n        $('body').on('click', this.bodyOnClick);\n      },\n      _submitForm: function _submitForm(value) {\n        this.cache.$disclosureInput.val(value);\n        this.$container.parents('form').submit();\n      },\n      _hideList: function _hideList() {\n        this.cache.$disclosureList.removeClass(classes.listVisible);\n        this.cache.$disclosureToggle.attr('aria-expanded', false);\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    return Disclosure;\n  }();\n\n  (function () {\n    function throttle(callback, threshold) {\n      var debounceTimeoutId = -1;\n      var tick = false;\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    window.addEventListener(\"scroll\", throttle(function () {\n      window.dispatchEvent(scrollEvent);\n    }, 200));\n  })(); // requires: throttled-scroll, debouncedresize\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\n    _._deferredWatcherRunning = false;\n\n    _.init = function () {\n      $(document).on('shopify:section:load', function (e) {\n        // load a new section\n        var target = _._themeSectionTargetFromShopifySectionTarget(e.target);\n\n        if (target) {\n          _.sectionLoad(target);\n        }\n      }).on('shopify:section:unload', function (e) {\n        // unload existing section\n        var target = _._themeSectionTargetFromShopifySectionTarget(e.target);\n\n        if (target) {\n          _.sectionUnload(target);\n        }\n      });\n      $(window).on('throttled-scroll.themeSectionDeferredLoader debouncedresize.themeSectionDeferredLoader', _._processDeferredSections);\n      _._deferredWatcherRunning = true;\n    }; // register a type of section\n\n\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      }); // load now\n\n\n      $('[data-section-type=\"' + type + '\"]').each(function () {\n        if (Shopify.designMode || options && options.deferredLoad === false || !_._deferredWatcherRunning) {\n          _.sectionLoad(this);\n        } else {\n          _.sectionDeferredLoad(this, options);\n        }\n      });\n    }; // prepare a section to load later\n\n\n    _.sectionDeferredLoad = function (target, options) {\n      _._deferredSectionTargets.push({\n        target: target,\n        deferredLoadViewportExcess: options && options.deferredLoadViewportExcess ? options.deferredLoadViewportExcess : _._deferredLoadViewportExcess\n      });\n\n      _._processDeferredSections(true);\n    }; // load deferred sections if in/near viewport\n\n\n    _._processDeferredSections = function (firstRunCheck) {\n      if (_._deferredSectionTargets.length) {\n        var viewportTop = $(window).scrollTop(),\n            viewportBottom = viewportTop + $(window).height(),\n            loopStart = firstRunCheck === true ? _._deferredSectionTargets.length - 1 : 0;\n\n        for (var i = loopStart; i < _._deferredSectionTargets.length; i++) {\n          var target = _._deferredSectionTargets[i].target,\n              viewportExcess = _._deferredSectionTargets[i].deferredLoadViewportExcess,\n              sectionTop = $(target).offset().top - viewportExcess,\n              doLoad = sectionTop > viewportTop && sectionTop < viewportBottom;\n\n          if (!doLoad) {\n            var sectionBottom = sectionTop + $(target).outerHeight() + viewportExcess * 2;\n            doLoad = sectionBottom > viewportTop && sectionBottom < viewportBottom;\n          }\n\n          if (doLoad || sectionTop < viewportTop && sectionBottom > viewportBottom) {\n            // in viewport, load\n            _.sectionLoad(target); // remove from deferred queue and resume checks\n\n\n            _._deferredSectionTargets.splice(i, 1);\n\n            i--;\n          }\n        }\n      } // remove event if no more deferred targets left, if not on first run\n\n\n      if (firstRunCheck !== true && _._deferredSectionTargets.length === 0) {\n        _._deferredWatcherRunning = false;\n        $(window).off('.themeSectionDeferredLoader');\n      }\n    }; // load in a section\n\n\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          }\n        };\n\n        _._instances.push(instance); //Initialise any components\n\n\n        if ($(target).data('components')) {\n          //Init each component\n          var components = $(target).data('components').split(',');\n          components.forEach(function (component) {\n            $(document).trigger('cc:component:load', [component, target]);\n          });\n        }\n\n        _._callWith(section, 'onSectionLoad', target, instance.thisContext);\n\n        _._callWith(section, 'afterSectionLoadCallback', target, instance.thisContext); // attach additional UI events if defined\n\n\n        if (section.onSectionSelect) {\n          instance.$shopifySectionContainer.on('shopify:section:select', function (e) {\n            _._callWith(section, 'onSectionSelect', e.target, instance.thisContext);\n          });\n        }\n\n        if (section.onSectionDeselect) {\n          instance.$shopifySectionContainer.on('shopify:section:deselect', function (e) {\n            _._callWith(section, 'onSectionDeselect', e.target, instance.thisContext);\n          });\n        }\n\n        if (section.onBlockSelect) {\n          $(target).on('shopify:block:select', function (e) {\n            _._callWith(section, 'onBlockSelect', e.target, instance.thisContext);\n          });\n        }\n\n        if (section.onBlockDeselect) {\n          $(target).on('shopify:block:deselect', function (e) {\n            _._callWith(section, 'onBlockDeselect', e.target, instance.thisContext);\n          });\n        }\n      }\n    }; // unload a section\n\n\n    _.sectionUnload = function (target) {\n      var sectionObj = _._sectionForTarget(target);\n\n      var instanceIndex = -1;\n\n      for (var i = 0; i < _._instances.length; i++) {\n        if (_._instances[i].target == target) {\n          instanceIndex = i;\n        }\n      }\n\n      if (instanceIndex > -1) {\n        var instance = _._instances[instanceIndex]; // remove events and call unload, if loaded\n\n        $(target).off('shopify:block:select shopify:block:deselect');\n        instance.$shopifySectionContainer.off('shopify:section:select shopify:section:deselect');\n\n        _._callWith(instance.section, 'onSectionUnload', target, instance.thisContext);\n\n        _._callWith(sectionObj, 'afterSectionUnloadCallback', target, instance.thisContext);\n\n        _._instances.splice(instanceIndex); //Destroy any components\n\n\n        if ($(target).data('components')) {\n          //Init each component\n          var components = $(target).data('components').split(',');\n          components.forEach(function (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\n            break;\n          }\n        }\n      }\n    }; // helpers\n\n\n    _._callWith = function (object, method, param, thisContext) {\n      if (typeof object[method] === 'function') {\n        if (thisContext) {\n          object[method].bind(thisContext)(param);\n        } else {\n          object[method](param);\n        }\n      }\n    };\n\n    _._themeSectionTargetFromShopifySectionTarget = function (target) {\n      var $target = $('[data-section-type]:first', target);\n\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\n      for (var i = 0; i < _._sections.length; i++) {\n        if (_._sections[i].type == type) {\n          return _._sections[i];\n        }\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\n      return false;\n    };\n  }(); // Loading third party scripts\n\n  theme.scriptsLoaded = {};\n\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\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\n              for (var i = 0; i < theme.scriptsLoaded[this].length; i++) {\n                theme.scriptsLoaded[this][i]();\n              }\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\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 (_typeof(theme.scriptsLoaded[src]) === 'object' && typeof callback === 'function') {\n      theme.scriptsLoaded[src].push(callback);\n    } else {\n      if (typeof callback === 'function') {\n        callback();\n      }\n\n      return false;\n    }\n  };\n\n  theme.loadStyleOnce = function (src) {\n    var srcWithoutProtocol = src.replace(/^https?:/, '');\n\n    if (!document.querySelector('link[href=\"' + encodeURI(srcWithoutProtocol) + '\"]')) {\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\n\n  theme.showQuickPopup = function (message, $origin) {\n    var $popup = $('<div class=\"simple-popup\"/>');\n    var offs = $origin.offset();\n    $popup.html(message).css({\n      'left': offs.left,\n      'top': offs.top\n    }).hide();\n    $('body').append($popup);\n    $popup.css({\n      marginTop: -$popup.outerHeight() - 10,\n      marginLeft: -($popup.outerWidth() - $origin.outerWidth()) / 2\n    });\n    $popup.fadeIn(200).delay(3500).fadeOut(400, function () {\n      $(this).remove();\n    });\n  };\n\n  var ccPopup = /*#__PURE__*/function () {\n    \"use strict\";\n\n    function ccPopup($container, namespace) {\n      _classCallCheck(this, ccPopup);\n\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     * 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\n\n    _createClass(ccPopup, [{\n      key: \"open\",\n      value: function open(callback) {\n        var _this = this;\n\n        // Prevent the body from scrolling\n        if (this.$container.data('freeze-scroll')) {\n          $('body').addClass(this.cssClasses.bodyNoScroll); // Add any padding necessary to the body to compensate for the scrollbar that just disappeared\n\n          var scrollDiv = document.createElement('div');\n          scrollDiv.className = 'popup-scrollbar-measure';\n          document.body.appendChild(scrollDiv);\n          var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n          document.body.removeChild(scrollDiv);\n\n          if (scrollbarWidth > 0) {\n            $('body').css('padding-right', scrollbarWidth + 'px').addClass(this.cssClasses.bodyNoScrollPadRight);\n          }\n        } // Add reveal class\n\n\n        this.$container.addClass(this.cssClasses.visible); // Track previously focused element\n\n        this.previouslyActiveElement = document.activeElement; // Focus on the close button after the animation in has completed\n\n        setTimeout(function () {\n          _this.$container.find('.cc-popup-close')[0].focus();\n        }, 500); // Pressing escape closes the modal\n\n        $(window).on('keydown' + this.namespace, function (event) {\n          if (event.keyCode === 27) {\n            _this.close();\n          }\n        });\n\n        if (callback) {\n          callback();\n        }\n      }\n    }, {\n      key: \"close\",\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      value: function close(callback) {\n        var _this2 = this;\n\n        // Remove reveal class\n        this.$container.removeClass(this.cssClasses.visible); // Revert focus\n\n        if (this.previouslyActiveElement) {\n          $(this.previouslyActiveElement).focus();\n        } // Destroy the escape event listener\n\n\n        $(window).off('keydown' + this.namespace); // Allow the body to scroll and remove any scrollbar-compensating padding\n\n        if (this.$container.data('freeze-scroll')) {\n          var transitionDuration = 500;\n          var $innerModal = this.$container.find('.cc-popup-modal');\n\n          if ($innerModal.length) {\n            transitionDuration = parseFloat(getComputedStyle($innerModal[0])['transitionDuration']);\n\n            if (transitionDuration && transitionDuration > 0) {\n              transitionDuration *= 1000;\n            }\n          }\n\n          setTimeout(function () {\n            $('body').removeClass(_this2.cssClasses.bodyNoScroll).removeClass(_this2.cssClasses.bodyNoScrollPadRight).css('padding-right', '0');\n          }, transitionDuration);\n        }\n\n        if (callback) {\n          callback();\n        }\n      }\n    }]);\n\n    return ccPopup;\n  }();\n\n  ; // Manage videos\n\n  theme.VideoManager = new function () {\n    var _ = this; // Youtube\n\n\n    _.youtubeVars = {\n      incrementor: 0,\n      apiReady: false,\n      videoData: {},\n      toProcessSelector: '.video-container[data-video-type=\"youtube\"]:not(.video--init)'\n    };\n\n    _.youtubeApiReady = function () {\n      _.youtubeVars.apiReady = true;\n\n      _._loadYoutubeVideos();\n    };\n\n    _._loadYoutubeVideos = function (container) {\n      if ($(_.youtubeVars.toProcessSelector, container).length) {\n        if (_.youtubeVars.apiReady) {\n          // play those videos\n          $(_.youtubeVars.toProcessSelector, container).each(function () {\n            // Don't init videos on mobile\n            if (!($(this).hasClass('video-container--background') && $(window).outerWidth() < 768)) {\n              $(this).addClass('video--init');\n              _.youtubeVars.incrementor++;\n              var containerId = 'theme-yt-video-' + _.youtubeVars.incrementor;\n              $(this).data('video-container-id', containerId);\n              var videoElement = $('<div class=\"video-container__video-element\">').attr('id', containerId).appendTo($('.video-container__video', this));\n              var autoplay = $(this).data('video-autoplay');\n              var player = new YT.Player(containerId, {\n                height: '360',\n                width: '640',\n                videoId: $(this).data('video-id'),\n                playerVars: {\n                  iv_load_policy: 3,\n                  modestbranding: 1,\n                  autoplay: autoplay ? 1 : 0,\n                  loop: $(this).data('video-loop') ? 1 : 0,\n                  playlist: $(this).data('video-id'),\n                  rel: 0,\n                  showinfo: 0\n                },\n                events: {\n                  onReady: _._onYoutubePlayerReady.bind({\n                    autoplay: autoplay,\n                    $container: $(this)\n                  }),\n                  onStateChange: _._onYoutubePlayerStateChange.bind(this)\n                }\n              });\n              _.youtubeVars.videoData[containerId] = {\n                id: containerId,\n                container: this,\n                videoElement: videoElement,\n                player: player\n              };\n            }\n          });\n        } else {\n          // load api\n          theme.loadScriptOnce('https://www.youtube.com/iframe_api');\n        }\n      }\n    };\n\n    _._onYoutubePlayerReady = function (event) {\n      event.target.setPlaybackQuality('hd1080');\n\n      if (this.autoplay) {\n        event.target.mute();\n        event.target.playVideo();\n      }\n\n      _._initBackgroundVideo(this.$container);\n    };\n\n    _._onYoutubePlayerStateChange = function (event) {\n      if (event.data == YT.PlayerState.PLAYING) {\n        $(this).addClass('video--play-started');\n      }\n    };\n\n    _._unloadYoutubeVideos = function (container) {\n      for (var dataKey in _.youtubeVars.videoData) {\n        var data = _.youtubeVars.videoData[dataKey];\n\n        if ($(container).find(data.container).length) {\n          data.player.destroy();\n          delete _.youtubeVars.videoData[dataKey];\n          return;\n        }\n      }\n    }; // Vimeo\n\n\n    _.vimeoVars = {\n      incrementor: 0,\n      apiReady: false,\n      videoData: {},\n      toProcessSelector: '.video-container[data-video-type=\"vimeo\"]:not(.video--init)'\n    };\n\n    _.vimeoApiReady = function () {\n      _.vimeoVars.apiReady = true;\n\n      _._loadVimeoVideos();\n    };\n\n    _._loadVimeoVideos = function (container) {\n      if ($(_.vimeoVars.toProcessSelector, container).length) {\n        if (_.vimeoVars.apiReady) {\n          // play those videos\n          $(_.vimeoVars.toProcessSelector, container).each(function () {\n            // Don't init videos on mobile\n            if (!($(this).hasClass('video-container--background') && $(window).outerWidth() < 768)) {\n              $(this).addClass('video--init');\n              _.vimeoVars.incrementor++;\n              var $this = $(this);\n              var containerId = 'theme-vi-video-' + _.vimeoVars.incrementor;\n              $(this).data('video-container-id', containerId);\n              var videoElement = $('<div class=\"video-container__video-element\">').attr('id', containerId).appendTo($('.video-container__video', this));\n              var autoplay = !!$(this).data('video-autoplay');\n              var player = new Vimeo.Player(containerId, {\n                url: $(this).data('video-url'),\n                width: 640,\n                loop: $(this).data('video-autoplay'),\n                autoplay: autoplay\n              });\n              player.on('playing', function () {\n                $(this).addClass('video--play-started');\n              }.bind(this));\n              player.ready().then(function () {\n                if (autoplay) {\n                  player.setVolume(0);\n                  player.play();\n                }\n\n                if (player.element && player.element.width && player.element.height) {\n                  var ratio = parseInt(player.element.height) / parseInt(player.element.width);\n                  $this.find('.video-container__video').css('padding-bottom', ratio * 100 + '%');\n                }\n\n                _._initBackgroundVideo($this);\n              });\n              _.vimeoVars.videoData[containerId] = {\n                id: containerId,\n                container: this,\n                videoElement: videoElement,\n                player: player,\n                autoPlay: autoplay\n              };\n            }\n          });\n        } else {\n          // load api\n          if (window.define) {\n            // workaround for third parties using RequireJS\n            theme.loadScriptOnce('https://player.vimeo.com/api/player.js', function () {\n              _.vimeoVars.apiReady = true;\n\n              _._loadVimeoVideos();\n\n              window.define = window.tempDefine;\n            }, function () {\n              window.tempDefine = window.define;\n              window.define = null;\n            });\n          } else {\n            theme.loadScriptOnce('https://player.vimeo.com/api/player.js', function () {\n              _.vimeoVars.apiReady = true;\n\n              _._loadVimeoVideos();\n            });\n          }\n        }\n      }\n    };\n\n    _._unloadVimeoVideos = function (container) {\n      for (var dataKey in _.vimeoVars.videoData) {\n        var data = _.vimeoVars.videoData[dataKey];\n\n        if ($(container).find(data.container).length) {\n          data.player.unload();\n          delete _.vimeoVars.videoData[dataKey];\n          return;\n        }\n      }\n    }; // Mp4\n\n\n    _.mp4Vars = {\n      incrementor: 0,\n      videoData: {},\n      toProcessSelector: '.video-container[data-video-type=\"mp4\"]:not(.video--init)'\n    };\n\n    _._loadMp4Videos = function (container) {\n      if ($(_.mp4Vars.toProcessSelector, container).length) {\n        // play those videos\n        $(_.mp4Vars.toProcessSelector, container).addClass('video--init').each(function () {\n          _.mp4Vars.incrementor++;\n          var $this = $(this);\n          var containerId = 'theme-mp-video-' + _.mp4Vars.incrementor;\n          $(this).data('video-container-id', containerId);\n          var videoElement = $('<div class=\"video-container__video-element\">').attr('id', containerId).appendTo($('.video-container__video', this));\n          var $video = $('<video playsinline>');\n\n          if ($(this).data('video-loop')) {\n            $video.attr('loop', 'loop');\n          }\n\n          if ($(this).data('video-autoplay')) {\n            $video.attr({\n              autoplay: 'autoplay',\n              muted: 'muted'\n            });\n            $video.on('loadeddata', function () {\n              $(this).off('loadeddata');\n              this.muted = true; // required by Chrome - ignores attribute\n\n              this.play();\n            });\n          }\n\n          $video.on('playing', function () {\n            $(this).addClass('video--play-started');\n          }.bind(this));\n          $video.attr('src', $(this).data('video-url')).appendTo(videoElement);\n        });\n      }\n    };\n\n    _._unloadMp4Videos = function (container) {}; // background video placement for iframes\n\n\n    _._initBackgroundVideo = function ($container) {\n      if ($container.hasClass('video-container--background') && $container.find('.video-container__video iframe').length) {\n        var assessBackgroundVideo = function assessBackgroundVideo() {\n          var $container = this,\n              cw = $container.width(),\n              ch = $container.height(),\n              cr = cw / ch,\n              $frame = $('.video-container__video iframe', this),\n              vr = $frame.attr('width') / $frame.attr('height'),\n              $pan = $('.video-container__video', this),\n              vCrop = 75; // pushes video outside container to hide controls\n\n          if (cr > vr) {\n            var vh = cw / vr + vCrop * 2;\n            $pan.css({\n              marginTop: (ch - vh) / 2 - vCrop,\n              marginLeft: '',\n              height: vh + vCrop * 2,\n              width: ''\n            });\n          } else {\n            var vw = cw * vr + vCrop * 2 * vr;\n            $pan.css({\n              marginTop: -vCrop,\n              marginLeft: (cw - vw) / 2,\n              height: ch + vCrop * 2,\n              width: vw\n            });\n          }\n        };\n\n        assessBackgroundVideo.bind($container)();\n        $(window).on('debouncedresize.' + $container.data('video-container-id'), assessBackgroundVideo.bind($container));\n      }\n    }; // Compatibility with Sections\n\n\n    this.onSectionLoad = function (container) {\n      // url only - infer type\n      $('.video-container[data-video-url]:not([data-video-type])').each(function () {\n        var url = $(this).data('video-url');\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\n          if (url.indexOf('v=') > -1) {\n            $(this).attr('data-video-id', url.split('v=').pop().split('&')[0]);\n          } else {\n            $(this).attr('data-video-id', url.split('?')[0].split('/').pop());\n          }\n        }\n      });\n\n      _._loadYoutubeVideos(container);\n\n      _._loadVimeoVideos(container);\n\n      _._loadMp4Videos(container);\n\n      $(window).on('debouncedresize.video-manager-resize', function () {\n        _._loadYoutubeVideos(container);\n\n        _._loadVimeoVideos(container);\n      }); // play button\n\n      $('.video-container__play', container).on('click', function (evt) {\n        evt.preventDefault();\n        var $container = $(this).closest('.video-container'); // reveal\n\n        $container.addClass('video-container--playing'); // play\n\n        var id = $container.data('video-container-id');\n\n        if (id.indexOf('theme-yt-video') === 0) {\n          _.youtubeVars.videoData[id].player.playVideo();\n        } else {\n          _.vimeoVars.videoData[id].player.play();\n        }\n      }); // modal close button\n\n      $('.video-container__stop', container).on('click', function (evt) {\n        evt.preventDefault();\n        var $container = $(this).closest('.video-container'); // hide\n\n        $container.removeClass('video-container--playing'); // play\n\n        var id = $container.data('video-container-id');\n\n        if (id.indexOf('theme-yt-video') === 0) {\n          _.youtubeVars.videoData[id].player.stopVideo();\n        } else {\n          _.vimeoVars.videoData[id].player.pause();\n\n          _.vimeoVars.videoData[id].player.setCurrentTime(0);\n        }\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $('.video-container__play, .video-container__stop', container).off('click');\n      $(window).off('.' + $('.video-container').data('video-container-id'));\n      $(window).off('debouncedresize.video-manager-resize');\n\n      _._unloadYoutubeVideos(container);\n\n      _._unloadVimeoVideos(container);\n\n      _._unloadMp4Videos(container);\n    };\n  }(); // Youtube API callback\n\n  window.onYouTubeIframeAPIReady = function () {\n    theme.VideoManager.youtubeApiReady();\n  }; // Register the section\n\n\n  cc.sections.push({\n    name: 'video',\n    section: theme.VideoManager\n  });\n  theme.MapSection = new function () {\n    var _ = this;\n\n    _.config = {\n      zoom: 14,\n      styles: {\n        \"default\": [],\n        silver: [{\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#f5f5f5\"\n          }]\n        }, {\n          \"elementType\": \"labels.icon\",\n          \"stylers\": [{\n            \"visibility\": \"off\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#616161\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#f5f5f5\"\n          }]\n        }, {\n          \"featureType\": \"administrative.land_parcel\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#bdbdbd\"\n          }]\n        }, {\n          \"featureType\": \"poi\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#eeeeee\"\n          }]\n        }, {\n          \"featureType\": \"poi\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#757575\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#e5e5e5\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#9e9e9e\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#ffffff\"\n          }]\n        }, {\n          \"featureType\": \"road.arterial\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#757575\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#dadada\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#616161\"\n          }]\n        }, {\n          \"featureType\": \"road.local\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#9e9e9e\"\n          }]\n        }, {\n          \"featureType\": \"transit.line\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#e5e5e5\"\n          }]\n        }, {\n          \"featureType\": \"transit.station\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#eeeeee\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#c9c9c9\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#9e9e9e\"\n          }]\n        }],\n        retro: [{\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#ebe3cd\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#523735\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#f5f1e6\"\n          }]\n        }, {\n          \"featureType\": \"administrative\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#c9b2a6\"\n          }]\n        }, {\n          \"featureType\": \"administrative.land_parcel\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#dcd2be\"\n          }]\n        }, {\n          \"featureType\": \"administrative.land_parcel\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#ae9e90\"\n          }]\n        }, {\n          \"featureType\": \"landscape.natural\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#dfd2ae\"\n          }]\n        }, {\n          \"featureType\": \"poi\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#dfd2ae\"\n          }]\n        }, {\n          \"featureType\": \"poi\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#93817c\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"geometry.fill\",\n          \"stylers\": [{\n            \"color\": \"#a5b076\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#447530\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#f5f1e6\"\n          }]\n        }, {\n          \"featureType\": \"road.arterial\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#fdfcf8\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#f8c967\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#e9bc62\"\n          }]\n        }, {\n          \"featureType\": \"road.highway.controlled_access\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#e98d58\"\n          }]\n        }, {\n          \"featureType\": \"road.highway.controlled_access\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#db8555\"\n          }]\n        }, {\n          \"featureType\": \"road.local\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#806b63\"\n          }]\n        }, {\n          \"featureType\": \"transit.line\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#dfd2ae\"\n          }]\n        }, {\n          \"featureType\": \"transit.line\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#8f7d77\"\n          }]\n        }, {\n          \"featureType\": \"transit.line\",\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#ebe3cd\"\n          }]\n        }, {\n          \"featureType\": \"transit.station\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#dfd2ae\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"geometry.fill\",\n          \"stylers\": [{\n            \"color\": \"#b9d3c2\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#92998d\"\n          }]\n        }],\n        dark: [{\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#212121\"\n          }]\n        }, {\n          \"elementType\": \"labels.icon\",\n          \"stylers\": [{\n            \"visibility\": \"off\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#757575\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#212121\"\n          }]\n        }, {\n          \"featureType\": \"administrative\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#757575\"\n          }]\n        }, {\n          \"featureType\": \"administrative.country\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#9e9e9e\"\n          }]\n        }, {\n          \"featureType\": \"administrative.land_parcel\",\n          \"stylers\": [{\n            \"visibility\": \"off\"\n          }]\n        }, {\n          \"featureType\": \"administrative.locality\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#bdbdbd\"\n          }]\n        }, {\n          \"featureType\": \"poi\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#757575\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#181818\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#616161\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#1b1b1b\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"geometry.fill\",\n          \"stylers\": [{\n            \"color\": \"#2c2c2c\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#8a8a8a\"\n          }]\n        }, {\n          \"featureType\": \"road.arterial\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#373737\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#3c3c3c\"\n          }]\n        }, {\n          \"featureType\": \"road.highway.controlled_access\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#4e4e4e\"\n          }]\n        }, {\n          \"featureType\": \"road.local\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#616161\"\n          }]\n        }, {\n          \"featureType\": \"transit\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#757575\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#000000\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#3d3d3d\"\n          }]\n        }],\n        night: [{\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#242f3e\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#746855\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#242f3e\"\n          }]\n        }, {\n          \"featureType\": \"administrative.locality\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#d59563\"\n          }]\n        }, {\n          \"featureType\": \"poi\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#d59563\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#263c3f\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#6b9a76\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#38414e\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#212a37\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#9ca5b3\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#746855\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#1f2835\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#f3d19c\"\n          }]\n        }, {\n          \"featureType\": \"transit\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#2f3948\"\n          }]\n        }, {\n          \"featureType\": \"transit.station\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#d59563\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#17263c\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#515c6d\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#17263c\"\n          }]\n        }],\n        aubergine: [{\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#1d2c4d\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#8ec3b9\"\n          }]\n        }, {\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#1a3646\"\n          }]\n        }, {\n          \"featureType\": \"administrative.country\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#4b6878\"\n          }]\n        }, {\n          \"featureType\": \"administrative.land_parcel\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#64779e\"\n          }]\n        }, {\n          \"featureType\": \"administrative.province\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#4b6878\"\n          }]\n        }, {\n          \"featureType\": \"landscape.man_made\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#334e87\"\n          }]\n        }, {\n          \"featureType\": \"landscape.natural\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#023e58\"\n          }]\n        }, {\n          \"featureType\": \"poi\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#283d6a\"\n          }]\n        }, {\n          \"featureType\": \"poi\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#6f9ba5\"\n          }]\n        }, {\n          \"featureType\": \"poi\",\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#1d2c4d\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"geometry.fill\",\n          \"stylers\": [{\n            \"color\": \"#023e58\"\n          }]\n        }, {\n          \"featureType\": \"poi.park\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#3C7680\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#304a7d\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#98a5be\"\n          }]\n        }, {\n          \"featureType\": \"road\",\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#1d2c4d\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#2c6675\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"geometry.stroke\",\n          \"stylers\": [{\n            \"color\": \"#255763\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#b0d5ce\"\n          }]\n        }, {\n          \"featureType\": \"road.highway\",\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#023e58\"\n          }]\n        }, {\n          \"featureType\": \"transit\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"color\": \"#98a5be\"\n          }]\n        }, {\n          \"featureType\": \"transit\",\n          \"elementType\": \"labels.text.stroke\",\n          \"stylers\": [{\n            \"color\": \"#1d2c4d\"\n          }]\n        }, {\n          \"featureType\": \"transit.line\",\n          \"elementType\": \"geometry.fill\",\n          \"stylers\": [{\n            \"color\": \"#283d6a\"\n          }]\n        }, {\n          \"featureType\": \"transit.station\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#3a4762\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"geometry\",\n          \"stylers\": [{\n            \"color\": \"#0e1626\"\n          }]\n        }, {\n          \"featureType\": \"water\",\n          \"elementType\": \"labels.text.fill\",\n          \"stylers\": [{\n            \"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      geocoder.geocode({\n        address: address\n      }, function (results, status) {\n        if (status !== google.maps.GeocoderStatus.OK) {\n          deferred.reject(status);\n        }\n\n        deferred.resolve(results);\n      });\n      return deferred;\n    };\n\n    this.createMap = function (container) {\n      var $map = $('.map-section__map-container', container);\n      return _.geolocate($map).then(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: true\n        };\n        _.map = new google.maps.Map($map[0], mapOptions);\n        _.center = _.map.getCenter();\n        var marker = new google.maps.Marker({\n          map: _.map,\n          position: _.center,\n          clickable: false\n        });\n        google.maps.event.addDomListener(window, 'resize', function () {\n          google.maps.event.trigger(_.map, 'resize');\n\n          _.map.setCenter(_.center);\n        });\n      }.bind(this)).fail(function () {\n        var errorMessage;\n\n        switch (status) {\n          case 'ZERO_RESULTS':\n            errorMessage = theme.strings.addressNoResults;\n            break;\n\n          case 'OVER_QUERY_LIMIT':\n            errorMessage = theme.strings.addressQueryLimit;\n            break;\n\n          default:\n            errorMessage = theme.strings.addressError;\n            break;\n        } // Only show error in the theme editor\n\n\n        if (Shopify.designMode) {\n          var $mapContainer = $map.parents('.map-section');\n          $mapContainer.addClass('page-width map-section--load-error');\n          $mapContainer.find('.map-section__wrapper').html('<div class=\"errors text-center\">' + errorMessage + '</div>');\n        }\n      });\n    };\n\n    this.onSectionLoad = function (target) {\n      var $container = $(target); // Global function called by Google on auth errors\n\n      window.gm_authFailure = function () {\n        if (!Shopify.designMode) return;\n        $container.addClass('page-width map-section--load-error');\n        $container.find('.map-section__wrapper').html('<div class=\"errors text-center\">' + theme.strings.authError + '</div>');\n      }; // create maps\n\n\n      var key = $container.data('api-key');\n\n      if (typeof key !== 'string' || key === '') {\n        return;\n      } // load map\n\n\n      theme.loadScriptOnce('https://maps.googleapis.com/maps/api/js?key=' + key, function () {\n        _.createMap($container);\n      });\n    };\n\n    this.onSectionUnload = function (target) {\n      if (typeof window.google !== 'undefined' && typeof google.maps !== 'undefined') {\n        google.maps.event.clearListeners(this.map, 'resize');\n      }\n    };\n  }(); // Register the section\n\n  cc.sections.push({\n    name: 'map',\n    section: theme.MapSection\n  }); // A section that contains other sections, e.g. story page\n\n  theme.NestedSectionsSection = new function () {\n    this.onSectionLoad = function (container) {\n      // load child sections\n      $('[data-nested-section-type]', container).each(function () {\n        var type = $(this).attr('data-nested-section-type');\n        var section = null;\n\n        for (var i = 0; i < theme.Sections._sections.length; i++) {\n          if (theme.Sections._sections[i].type == type) {\n            section = theme.Sections._sections[i].section;\n          }\n        }\n\n        if (section) {\n          var instance = {\n            target: this,\n            section: section,\n            $shopifySectionContainer: $(this).closest('.shopify-section'),\n            thisContext: {}\n          };\n\n          theme.Sections._instances.push(instance);\n\n          $(this).data('themeSectionInstance', instance);\n          section.onSectionLoad.bind(instance.thisContext)(this);\n        }\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      // unload child sections\n      $('[data-nested-section-type]', container).each(function () {\n        theme.Sections.sectionUnload.bind($(this).data('themeSectionInstance').thisContext)(this);\n      });\n    };\n\n    this.onBlockSelect = function (target) {\n      // scroll to block\n      $(window).scrollTop($(target).offset().top - 100);\n    };\n  }(); // Register the section\n\n  cc.sections.push({\n    name: 'nested-sections',\n    section: theme.NestedSectionsSection\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      var _this3 = this;\n\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      var firstRun = true; // Handle when a variant is selected\n\n      $(window).on(\"cc-variant-updated\".concat(this.namespace).concat(this.productId), function (e, args) {\n        if (args.product.id === _this3.productId) {\n          _this3.functions.updateContent.bind(_this3)(args.variant.id, args.product.title, firstRun, _this3.$container.data('has-only-default-variant'), typeof args.variant.available !== \"undefined\");\n\n          firstRun = false;\n        }\n      }); // Handle single variant products\n\n      if (this.$container.data('single-variant-id')) {\n        this.functions.updateContent.bind(this)(this.$container.data('single-variant-id'), this.$container.data('single-variant-product-title'), firstRun, this.$container.data('has-only-default-variant'), this.$container.data('single-variant-product-available'));\n        firstRun = false;\n      }\n    };\n\n    this.onSectionUnload = function () {\n      $(window).off(\"cc-variant-updated\".concat(this.namespace).concat(this.productId));\n      this.$container.off('click');\n\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(function (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(function (position) {\n                var coords = {\n                  latitude: position.coords.latitude,\n                  longitude: position.coords.longitude\n                }; //Set the localization api\n\n                fetch('/localization.json', {\n                  method: 'PUT',\n                  headers: {\n                    'Content-Type': 'application/json'\n                  },\n                  body: JSON.stringify(coords)\n                }); //Write to a session storage\n\n                sessionStorage[storageKey] = JSON.stringify(coords);\n                resolve(coords);\n              }, function () {\n                resolve(false);\n              }, {\n                maximumAge: 3600000,\n                // 1 hour\n                timeout: 5000\n              });\n            } else {\n              resolve(false);\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      // 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(coords1, coords2, unitSystem) {\n        var dtor = Math.PI / 180;\n        var radius = unitSystem === 'metric' ? 6378.14 : 3959;\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        var dlon = rlong1 - rlong2;\n        var dlat = rlat1 - rlat2;\n        var a = Math.pow(Math.sin(dlat / 2), 2) + 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      // Updates the existing modal pickup with locations with distances from the user\n      updateLocationDistances: function updateLocationDistances(coords) {\n        var unitSystem = this.$modal.find('[data-unit-system]').data('unit-system');\n        var self = this;\n        this.$modal.find('[data-distance=\"false\"]').each(function () {\n          var _this4 = this;\n\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.calculateDistance(coords, thisCoords, unitSystem).toFixed(1);\n            $(this).html(distance); //Timeout to trigger animation\n\n            setTimeout(function () {\n              $(_this4).closest('.store-availability-list__location__distance').addClass('-in');\n            }, 0);\n          }\n\n          $(this).attr('data-distance', 'true');\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(variantId, productTitle, firstRun, isSingleDefaultVariant, isVariantAvailable) {\n        var _this5 = this;\n\n        this.$container.off('click', '[data-store-availability-modal-open]');\n        this.$container.off('click' + this.namespace, '.cc-popup-close, .cc-popup-background');\n        $('.store-availabilities-modal').remove();\n\n        if (firstRun) {\n          this.$container.hide();\n        } else 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).addClass(initClass);\n          this.$container.css('height', '0px');\n        } else {\n          this.$container.addClass(loadingClass).addClass(initClass);\n          this.$container.css('height', this.$container.outerHeight() > 0 ? this.$container.outerHeight() + 'px' : 'auto');\n        }\n\n        if (isVariantAvailable) {\n          this.functions.getAvailableStores.call(this, variantId, function (response) {\n            if (response.trim().length > 0 && !response.includes('NO_PICKUP')) {\n              _this5.$container.html(response);\n\n              _this5.$container.html(_this5.$container.children().first().html()); // editor bug workaround\n\n\n              _this5.$container.find('[data-store-availability-modal-product-title]').html(productTitle);\n\n              if (isSingleDefaultVariant) {\n                _this5.$container.find('.store-availabilities-modal__variant-title').remove();\n              }\n\n              _this5.$container.find('.cc-popup').appendTo('body');\n\n              _this5.$modal = $('body').find('.store-availabilities-modal');\n              var popup = new ccPopup(_this5.$modal, _this5.namespace);\n\n              _this5.$container.on('click', '[data-store-availability-modal-open]', function () {\n                popup.open(); //When the modal is opened, try and get the users location\n\n                _this5.functions.getUserLocation().then(function (coords) {\n                  if (coords && _this5.$modal.find('[data-distance=\"false\"]').length) {\n                    //Re-retrieve the available stores location modal contents\n                    _this5.functions.getAvailableStores.call(_this5, variantId, function (response) {\n                      _this5.$modal.find('.store-availabilities-list').html($(response).find('.store-availabilities-list').html());\n\n                      _this5.functions.updateLocationDistances.bind(_this5)(coords);\n                    });\n                  }\n                });\n\n                return false;\n              });\n\n              _this5.$modal.on('click' + _this5.namespace, '.cc-popup-close, .cc-popup-background', function () {\n                popup.close();\n              });\n\n              if (firstRun) {\n                _this5.$container.slideDown(300);\n              } else {\n                _this5.$container.removeClass(loadingClass);\n\n                var newHeight = _this5.$container.find('.store-availability-container').outerHeight();\n\n                _this5.$container.css('height', newHeight > 0 ? newHeight + 'px' : 'auto');\n              }\n            }\n          });\n        }\n      }\n    }; // Initialise the section when it's instantiated\n\n    this.onSectionLoad(container);\n  }; // Register section\n\n\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    var dismissedStorageKey = 'cc-theme-popup-dismissed';\n\n    this.onSectionLoad = function (container) {\n      var _this6 = this;\n\n      this.namespace = theme.namespaceFromSection(container);\n      this.$container = $(container);\n      this.popup = new ccPopup(this.$container, this.namespace);\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); // Should we show it during this page view?\n      // Check when it was last dismissed\n\n      if (lastDismissed) {\n        var dismissedDaysAgo = (new Date().getTime() - lastDismissed) / (1000 * 60 * 60 * 24);\n\n        if (dismissedDaysAgo < dismissForDays) {\n          showPopup = false;\n        }\n      } // Check for error or success messages\n\n\n      if (this.$container.find('.cc-popup-form__response').length) {\n        showPopup = true;\n        delaySeconds = 1; // If success, set as dismissed\n\n        if (this.$container.find('.cc-popup-form__response--success').length) {\n          this.functions.popupSetAsDismissed.call(this);\n        }\n      } // Prevent popup on Shopify robot challenge page\n\n\n      if (/^\\/[^\\/]{2,3}\\/challenge$/.test(window.location.pathname)) {\n        showPopup = false;\n      } // Show popup, if appropriate\n\n\n      if (showPopup || testMode) {\n        setTimeout(function () {\n          _this6.popup.open();\n        }, delaySeconds * 1000);\n      } // Click on close button or modal background\n\n\n      this.$container.on('click' + this.namespace, '.cc-popup-close, .cc-popup-background', function () {\n        _this6.popup.close(function () {\n          _this6.functions.popupSetAsDismissed.call(_this6);\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     * Event callback for Theme Editor `section:unload` event\n     */\n\n    this.onSectionUnload = function () {\n      this.$container.off(this.namespace);\n    };\n  }(); // Register section\n\n  cc.sections.push({\n    name: 'newsletter-popup',\n    section: theme.Popup\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; // hover events\n\n      $nav.on('mouseenter mouseleave', '.navigation__tier-1 > .navigation__item--with-children', function (evt) {\n        var $dropdownContainer = $(this); // delay on hover-out\n\n        if (evt.type == 'mouseenter') {\n          clearTimeout(navOpenTimeoutId);\n          clearTimeout($dropdownContainer.data('navCloseTimeoutId'));\n          var $openSiblings = $dropdownContainer.siblings('.navigation__item--show-children'); // close all menus but last opened\n\n          $openSiblings.not($navLastOpenDropdown).removeClass('navigation__item--show-children');\n          $navLastOpenDropdown = $dropdownContainer; // show after a delay, based on first-open or not\n\n          var timeoutDelay = $openSiblings.length == 0 ? 0 : navHoverDelay; // open it\n\n          var newNavOpenTimeoutId = setTimeout(function () {\n            $dropdownContainer.addClass('navigation__item--show-children').siblings('.navigation__item--show-children').removeClass('navigation__item--show-children');\n          }, timeoutDelay);\n          navOpenTimeoutId = newNavOpenTimeoutId;\n          $dropdownContainer.data('navOpenTimeoutId', newNavOpenTimeoutId);\n        } else {\n          // cancel opening, close after delay, and clear transforms\n          clearTimeout($dropdownContainer.data('navOpenTimeoutId'));\n          $dropdownContainer.data('navCloseTimeoutId', setTimeout(function () {\n            $dropdownContainer.removeClass('navigation__item--show-children');\n          }, navHoverDelay));\n        } // a11y\n\n\n        $dropdownContainer.children('[aria-expanded]').attr('aria-expanded', evt.type == 'mouseenter');\n      }); // touch events on desktop\n\n      var touchHandler = function touchHandler(evt) {\n        if ($(window).width() > 767) {\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\n              if ($(this).parent().hasClass('navigation__item--show-children')) {\n                // trigger close\n                $(this).parent().trigger('mouseleave');\n              } else {\n                // trigger close on any open items\n                $('.navigation:first .navigation__item--show-children').trigger('mouseleave'); // trigger open\n\n                $(this).parent().trigger('mouseenter');\n              } // prevent fake click\n\n\n              return false;\n            }\n          } else if (evt.type == 'click') {\n            // if touch open was triggered very recently, prevent click event\n            if ($(this).data('touchOpenTriggeredAt') && evt.timeStamp - $(this).data('touchOpenTriggeredAt') < 1000) {\n              return false;\n            }\n          }\n        }\n      };\n\n      $nav.on('touchstart touchend click', '.navigation__tier-1 > .navigation__item--with-children > .navigation__link', touchHandler); // hit return on dropdown toggle\n\n      var keydownHandler = function keydownHandler(evt) {\n        if (evt.which == 13) {\n          var $parent = $(this).parent();\n          $parent.trigger($parent.hasClass('navigation__item--show-children') ? 'mouseleave' : 'mouseenter');\n          return false;\n        }\n      };\n\n      $nav.on('keydown', '.navigation__tier-1 > .navigation__item--with-children > .navigation__children-toggle', keydownHandler); // proxy for desktop nav interaction events\n\n      if (options.proxyTier1Nav) {\n        $(options.proxyTier1Nav).on('mouseenter mouseleave', '.navigation__tier-1 > .navigation__item--with-children', function (evt) {\n          $($('.navigation__tier-1 > .navigation__item', $nav)[$(this).index()]).trigger(evt.type);\n        }).on('touchstart touchend click', '.navigation__tier-1 > .navigation__item--with-children > .navigation__link', function (evt) {\n          var response = touchHandler.bind($($('.navigation__tier-1 > .navigation__item', $nav)[$(this).parent().index()]).children('.navigation__link')[0])(evt);\n\n          if (response === false) {\n            return false;\n          }\n        }).on('keydown', '.navigation__tier-1 > .navigation__item--with-children > .navigation__children-toggle', function (evt) {\n          if (evt.which == 13) {\n            keydownHandler.bind($($('.navigation__tier-1 > .navigation__item', $nav)[$(this).parent().index()]).children('.navigation__children-toggle')[0])(evt);\n            return false;\n          }\n        });\n      } // mobile expansion\n\n\n      $nav.on('click', '.navigation__children-toggle', function () {\n        if ($(this).parent().toggleClass('navigation__item--mobile-open').hasClass('navigation__item--mobile-open')) {\n          $(this).siblings('.navigation__child-tier').stop().slideDown(300, function () {\n            $(this).parent().addClass('navigation__item--mobile-open-finished');\n            $(this).removeAttr('style');\n          });\n        } else {\n          $(this).siblings('.navigation__child-tier').stop().slideUp(300, function () {\n            $(this).parent().removeClass('navigation__item--mobile-open-finished');\n            $(this).removeAttr('style');\n          });\n        }\n\n        return false;\n      });\n      $nav.on('click', '.navigation__link[href=\"#\"][aria-haspopup=\"true\"]', function () {\n        $(this).siblings('.navigation__children-toggle').trigger('click');\n        return false;\n      });\n    },\n    destroy: function destroy($nav, $proxyTier1Nav) {\n      $nav.add($proxyTier1Nav).off('click mouseenter mouseleave touchstart touchend keydown');\n    }\n  };\n  theme.icons = {\n    left: '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' + theme.strings.icon_labels_left + '</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: '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' + theme.strings.icon_labels_right + '</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: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-x\"><title>' + theme.strings.icon_labels_close + '</title><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>',\n    chevronLeft: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-chevron-left\"><title>' + theme.strings.icon_labels_left + '</title><polyline points=\"15 18 9 12 15 6\"></polyline></svg>',\n    chevronRight: '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-chevron-right\"><title>' + theme.strings.icon_labels_right + '</title><polyline points=\"9 18 15 12 9 6\"></polyline></svg>',\n    chevronDown: '<svg fill=\"#000000\" height=\"24\" viewBox=\"0 0 24 24\" width=\"24\" xmlns=\"http://www.w3.org/2000/svg\"><title>' + theme.strings.icon_labels_down + '</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: '<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  }; // Get Shopify feature support\n\n  try {\n    theme.Shopify.features = JSON.parse(document.documentElement.querySelector('#shopify-features').textContent);\n  } catch (e) {\n    theme.Shopify.features = {};\n  }\n\n  theme.namespaceFromSection = function (container) {\n    return ['.', $(container).data('section-type'), $(container).data('section-id')].join('');\n  };\n\n  theme.buildGalleryViewer = function (config) {\n    // create viewer\n    var $allContainer = $('<div class=\"gallery-viewer gallery-viewer--pre-reveal\">');\n    var $zoomContainer = $('<div class=\"gallery-viewer__zoom\">').appendTo($allContainer);\n    var $thumbContainer = $('<div class=\"gallery-viewer__thumbs\">').appendTo($allContainer);\n    var $controlsContainer = $('<div class=\"gallery-viewer__controls\">').appendTo($allContainer);\n    var $close = $('<a class=\"gallery-viewer__button gallery-viewer__close\" href=\"#\">').html(config.close).appendTo($controlsContainer);\n    var $right = $('<a class=\"gallery-viewer__button gallery-viewer__prev\" href=\"#\">').html(config.prev).appendTo($controlsContainer);\n    var $left = $('<a class=\"gallery-viewer__button gallery-viewer__next\" href=\"#\">').html(config.next).appendTo($controlsContainer);\n    var $currentZoomImage = null; // add images\n\n    for (var i = 0; i < config.images.length; i++) {\n      var img = config.images[i];\n      $('<a class=\"gallery-viewer__thumb\" href=\"#\">').data('zoom-url', img.zoomUrl).html(img.thumbTag).appendTo($thumbContainer);\n    }\n\n    if (config.images.length === 1) {\n      $allContainer.addClass('gallery-viewer--single-image');\n    } // helper function for panning an image\n\n\n    var panZoomImage = function panZoomImage(inputX, inputY) {\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\n      if (doPanX || doPanY) {\n        var midX = $allContainer.width() / 2;\n        var midY = $allContainer.height() / 2;\n        var offsetFromCentreX = inputX - midX,\n            offsetFromCentreY = inputY - midY; // the offsetMultipler ensures it can only pan to the edge of the image, no further\n\n        var finalOffsetX = 0;\n        var finalOffsetY = 0;\n\n        if (doPanX) {\n          var offsetMultiplierX = ($currentZoomImage.width() - $allContainer.width()) / 2 / midX;\n          finalOffsetX = Math.round(-offsetFromCentreX * offsetMultiplierX);\n        }\n\n        if (doPanY) {\n          var offsetMultiplierY = ($currentZoomImage.height() - $allContainer.height()) / 2 / midY;\n          finalOffsetY = Math.round(-offsetFromCentreY * offsetMultiplierY);\n        }\n\n        $currentZoomImage.css('transform', ['translate3d(', finalOffsetX, 'px, ', finalOffsetY, 'px, 0)'].join(''));\n      }\n    }; // set up events\n    // event: select thumbnail - zoom it\n\n\n    $allContainer.on('click.galleryViewer select.galleryViewer', '.gallery-viewer__thumb', function (evt) {\n      evt.preventDefault(); // set active\n\n      $(this).addClass('gallery-viewer__thumb--active').siblings('.gallery-viewer__thumb--active').removeClass('gallery-viewer__thumb--active'); // replace zoom image\n\n      $currentZoomImage = $('<img class=\"gallery-viewer__zoom-image\" alt=\"\" style=\"visibility: hidden\">');\n      $currentZoomImage.on('load', function () {\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        panZoomImage(evt.clientX, evt.clientY);\n      }).attr('src', $(this).data('zoom-url'));\n      $zoomContainer.html($currentZoomImage);\n    }); // event: pan\n\n    $allContainer.on('mousemove.galleryViewer touchmove.galleryViewer', function (evt) {\n      if (evt.type === 'touchmove') {\n        var touch = evt.touches[0];\n        panZoomImage(touch.clientX, touch.clientY);\n      } else {\n        panZoomImage(evt.clientX, evt.clientY);\n      }\n    }); // event: prevent pan while swiping thumbnails\n\n    $allContainer.on('touchmove.galleryViewer', '.gallery-viewer__thumbs', function (evt) {\n      evt.stopPropagation();\n    }); // event: next thumbnail\n\n    $allContainer.on('click.galleryViewer', '.gallery-viewer__next', function (evt) {\n      evt.preventDefault();\n      var $next = $thumbContainer.find('.gallery-viewer__thumb--active').next();\n\n      if ($next.length === 0) {\n        $next = $thumbContainer.find('.gallery-viewer__thumb:first');\n      }\n\n      $next.trigger('select');\n    }); // event: previous thumbnail\n\n    $allContainer.on('click.galleryViewer', '.gallery-viewer__prev', function (evt) {\n      evt.preventDefault();\n      var $prev = $thumbContainer.find('.gallery-viewer__thumb--active').prev();\n\n      if ($prev.length === 0) {\n        $prev = $thumbContainer.find('.gallery-viewer__thumb:last');\n      }\n\n      $prev.trigger('select');\n    }); // event: close\n\n    $allContainer.on('click.galleryViewer', '.gallery-viewer__close', function (evt) {\n      evt.preventDefault(); // destroy events\n\n      $allContainer.off('.galleryViewer'); // begin exit transition\n\n      $allContainer.addClass('gallery-viewer--transition-out'); // remove after transition\n\n      var transitionDelay = $allContainer.css('transition-duration');\n      transitionDelay = transitionDelay.indexOf('ms') > -1 ? parseFloat(transitionDelay) : parseFloat(transitionDelay) * 1000;\n      setTimeout(function () {\n        $allContainer.remove();\n        $('html').removeClass('gallery-viewer-open');\n      }, transitionDelay);\n    }); // initialise\n    // - clear any remnants of failed previous closure\n\n    $('html').removeClass('gallery-viewer-open');\n    $('.gallery-viewer').remove(); // - insert into page\n\n    $('html').addClass('gallery-viewer-open');\n    $allContainer.appendTo('body'); // - select first thumbnail\n\n    $thumbContainer.find('.gallery-viewer__thumb:eq(' + (config.current > 0 ? config.current : 0) + ')').trigger('select'); // - reveal\n\n    setTimeout(function () {\n      $allContainer.removeClass('gallery-viewer--pre-reveal');\n    }, 10);\n  };\n\n  theme.FeaturedProductSection = new function () {\n    this.onSectionLoad = function (target) {\n      $('[name=\"id\"]', target).trigger('optionate');\n      theme.classUpTextLinks(target);\n      theme.initProductGallery(target);\n    };\n\n    this.onSectionUnload = function (target) {\n      theme.destroyProductGallery(target);\n      theme.OptionManager.unloadProductOptions($('[name=\"id\"]', target));\n      $('.slideshow', target).slick('unslick');\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   *   onPlyrPlay: function(e){\n   *     $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', false);\n   *   },\n   *   onPlyrPause: function(e){\n   *     $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', true);\n   *   },\n   * });\n   *\n   * theme.ProductMedia.destroy(galleryContainer);\n   *\n   * Trigger mediaVisible and mediaHidden events based on UI\n   * $slickSlideshow.on('afterChange', function(evt, slick, current){\n   *   $('.product-media--activated').removeClass('product-media--activated').trigger('mediaHidden');\n   *   $('.product-media', slick.$slides[current]).addClass('product-media--activated').trigger('mediaVisible');\n   * });\n   */\n\n  theme.ProductMedia = new function () {\n    var _ = this;\n\n    _._setupShopifyXr = function () {\n      if (!window.ShopifyXR) {\n        document.addEventListener('shopify_xr_initialized', _._setupShopifyXr.bind(this));\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; // set up video media elements with a controller\n\n      $(container).find('.product-media--video').each(function (index) {\n        var enableLooping = $(this).data('enable-video-looping'),\n            element = $(this).find('iframe, video')[0];\n\n        if (element.tagName === 'VIDEO') {\n          // set up a controller for Plyr video\n          window.Shopify.loadFeatures([{\n            name: 'video-ui',\n            version: '1.0',\n            onLoad: function () {\n              var playerObj = {\n                playerType: 'html5',\n                element: element\n              };\n\n              playerObj.play = function () {\n                this.plyr.play();\n              }.bind(playerObj);\n\n              playerObj.pause = function () {\n                this.plyr.pause();\n              }.bind(playerObj);\n\n              playerObj.destroy = function () {\n                this.plyr.destroy();\n              }.bind(playerObj);\n\n              playerObj.plyr = new Shopify.Plyr(element, {\n                controls: ['play', 'progress', 'mute', 'volume', 'play-large', 'fullscreen'],\n                loop: {\n                  active: enableLooping\n                },\n                hideControlsOnPause: true,\n                iconUrl: '//cdn.shopify.com/shopifycloud/shopify-plyr/v1.0/shopify-plyr.svg',\n                tooltips: {\n                  controls: false,\n                  seek: true\n                }\n              });\n              $(this).data('player', playerObj).addClass('product-media--video-loaded'); // callbacks for Plyr playback\n\n              if (callbacks.onPlyrPlay) {\n                $(element).on('playing', callbacks.onPlyrPlay);\n              }\n\n              if (callbacks.onPlyrPause) {\n                $(element).on('pause ended', callbacks.onPlyrPause);\n              }\n\n              if (callbacks.onPlyrInit) {\n                callbacks.onPlyrInit(playerObj);\n              }\n            }.bind(this)\n          }]);\n          theme.loadStyleOnce('https://cdn.shopify.com/shopifycloud/shopify-plyr/v1.0/shopify-plyr.css');\n        } else if (element.tagName === 'IFRAME') {\n          if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(element.src)) {\n            // set up a controller for YouTube video\n            var temp = window.onYouTubeIframeAPIReady;\n\n            var loadYoutubeVideo = function () {\n              var playerObj = {\n                playerType: 'youtube',\n                element: element\n              };\n              var videoId = $(this).data('video-id');\n              playerObj.player = new YT.Player(element, {\n                videoId: videoId,\n                events: {\n                  onStateChange: function onStateChange(event) {\n                    if (event.data === YT.PlayerState.ENDED && enableLooping) {\n                      event.target.seekTo(0);\n                    }\n                  }\n                }\n              });\n\n              playerObj.play = function () {\n                this.player.playVideo();\n              }.bind(playerObj);\n\n              playerObj.pause = function () {\n                this.player.pauseVideo();\n              }.bind(playerObj);\n\n              playerObj.destroy = function () {\n                this.player.destroy();\n              }.bind(playerObj);\n\n              $(this).data('player', playerObj).addClass('product-media--video-loaded');\n\n              if (callbacks.onYouTubeInit) {\n                callbacks.onYouTubeInit(playerObj);\n              }\n            }.bind(this);\n\n            window.onYouTubeIframeAPIReady = function () {\n              temp();\n              loadYoutubeVideo();\n            };\n\n            theme.loadScriptOnce('https://www.youtube.com/iframe_api');\n          }\n        }\n      }); // when any media appears\n\n      $(container).on('mediaVisible', '.product-media--video-loaded, .product-media--model-loaded', function () {\n        // autoplay all media on larger screens\n        if ($(window).width() >= 768) {\n          $(this).data('player').play();\n        } // update view-in-space\n\n\n        if ($(this).hasClass('product-media--model')) {\n          $('.view-in-space', _container).attr('data-shopify-model3d-id', $(this).data('model-id'));\n        }\n      }); // when any media is hidden\n\n      $(container).on('mediaHidden', '.product-media--video-loaded, .product-media--model-loaded', function () {\n        // pause all media\n        $(this).data('player').pause();\n      }); // necessary callbacks\n\n      if (callbacks.onVideoVisible) {\n        $(container).on('mediaVisible', '.product-media--video-loaded', callbacks.onVideoVisible);\n      }\n\n      if (callbacks.onVideoHidden) {\n        $(container).on('mediaHidden', '.product-media--video-loaded', callbacks.onVideoHidden);\n      }\n\n      $('model-viewer', container).each(function () {\n        if (callbacks.onModelViewerPlay) {\n          $(this).on('shopify_model_viewer_ui_toggle_play', callbacks.onModelViewerPlay);\n        }\n\n        if (callbacks.onModelViewerPause) {\n          $(this).on('shopify_model_viewer_ui_toggle_pause', callbacks.onModelViewerPause);\n        }\n      }); // set up a 3d model when it first appears\n\n      $(container).on('mediaVisible mediaVisibleInitial', '.product-media--model:not(.product-media--model-loaded)', function (e) {\n        var element = $(this).find('model-viewer')[0],\n            autoplay = e.type != 'mediaVisibleInitial'; // load viewer\n\n        theme.loadStyleOnce('https://cdn.shopify.com/shopifycloud/model-viewer-ui/assets/v1.0/model-viewer-ui.css');\n        window.Shopify.loadFeatures([{\n          name: 'model-viewer-ui',\n          version: '1.0',\n          onLoad: function () {\n            $(this).data('player', new Shopify.ModelViewerUI(element)); // set class and re-trigger visible event now loaded\n\n            $(this).addClass('product-media--model-loaded');\n\n            if (callbacks.onModelViewerInit) {\n              callbacks.onModelViewerInit(element);\n            }\n\n            if (autoplay) {\n              $(this).trigger('mediaVisible');\n            }\n          }.bind(this)\n        }]);\n      }); // load AR viewer\n\n      if ($('.model-json', container).length) {\n        window.Shopify.loadFeatures([{\n          name: 'shopify-xr',\n          version: '1.0',\n          onLoad: _._setupShopifyXr.bind($('.model-json', container))\n        }]);\n      } // pause video when a 3d model is launched in AR\n\n\n      $(document).on('shopify_xr_launch', function () {\n        $('.product-media--video-loaded').each(function () {\n          $(this).data('player').pause();\n        });\n      }); // 3d model in first place - start in paused mode\n\n      setTimeout(function () {\n        $('.product-media:first', this).filter('.product-media--model').trigger('mediaVisibleInitial');\n      }.bind(container), 50);\n    };\n\n    this.destroy = function (container) {\n      $(document).off('shopify_xr_launch');\n      $(container).off('mediaVisible mediaVisibleInitial mediaHidden');\n      $('.product-media--video-loaded, .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('shopify_model_viewer_ui_toggle_play shopify_model_viewer_ui_toggle_pause');\n    };\n  }();\n\n  theme.productGallerySlideshowTabFix = function (slides, current) {\n    // tabindex everything to prevent tabbing into hidden slides\n    $(slides[current]).find('a, input, button, select, iframe, video, model-viewer, [tabindex]').each(function () {\n      if (typeof $(this).data('theme-slideshow-original-tabindex') !== 'undefined') {\n        if ($(this).data('theme-slideshow-original-tabindex') === false) {\n          $(this).removeAttr('tabindex');\n        } else {\n          $(this).attr('tabindex', $(this).data('theme-slideshow-original-tabindex'));\n        }\n      } else {\n        $(this).removeAttr('tabindex');\n      }\n    });\n    $(slides).not(slides[current]).find('a, input, button, select, iframe, video, model-viewer, [tabindex]').each(function () {\n      if (typeof $(this).data('theme-slideshow-original-tabindex') === 'undefined') {\n        $(this).data('theme-slideshow-original-tabindex', typeof $(this).attr('tabindex') !== 'undefined' ? $(this).attr('tabindex') : false);\n        $(this).attr('tabindex', '-1');\n      }\n    });\n  }; // container must be an element higher up the tree than the gallery\n\n\n  theme.initProductGallery = function (container) {\n    var $gallery = $('.gallery', container);\n\n    if ($gallery.hasClass('gallery-initialised')) {\n      return;\n    }\n\n    $gallery.addClass('gallery-initialised'); /// Init main image slideshow\n\n    $('.product-slideshow', container).each(function () {\n      var $slideshow = $(this).on('init', function (evt, slick) {\n        $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n      }).on('beforeChange', function (evt, slick, current, next) {\n        $($(this).closest('.gallery').find('.thumbnails a')[next]).trigger('selectFromSlick');\n      }).slick({\n        autoplay: false,\n        fade: true,\n        infinite: false,\n        useTransform: true,\n        dots: false,\n        arrows: true,\n        appendArrows: $(this).siblings('.slideshow-controls').find('.slideshow-controls__arrows'),\n        appendDots: $(this).siblings('.slideshow-controls').find('.slideshow-controls__dots'),\n        prevArrow: '<button type=\"button\" class=\"slick-product-prev\" aria-label=\"' + theme.strings.previous + '\">' + theme.icons.chevronLeft + '</button>',\n        nextArrow: '<button type=\"button\" class=\"slick-product-next\" aria-label=\"' + theme.strings.next + '\">' + theme.icons.chevronRight + '</button>',\n        responsive: [{\n          breakpoint: 768,\n          settings: {\n            dots: true,\n            arrows: true,\n            fade: false\n          }\n        }]\n      }); // media initialisation\n\n      theme.ProductMedia.init($gallery, {\n        onPlyrInit: function onPlyrInit(playerObj) {\n          theme.productGallerySlideshowTabFix($slideshow.slick('getSlick').$slides, $slideshow.slick('getSlick').currentSlide);\n        },\n        onYoutubeInit: function onYoutubeInit(playerObj) {\n          theme.productGallerySlideshowTabFix($slideshow.slick('getSlick').$slides, $slideshow.slick('getSlick').currentSlide);\n        },\n        onModelViewerInit: function onModelViewerInit(element) {\n          theme.productGallerySlideshowTabFix($slideshow.slick('getSlick').$slides, $slideshow.slick('getSlick').currentSlide);\n        },\n        onVideoVisible: function onVideoVisible(e) {\n          if ($(window).width() >= 768) {\n            $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', false);\n          }\n        },\n        onVideoHidden: function onVideoHidden(e) {\n          if ($(window).width() >= 768) {\n            $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', true);\n          }\n        },\n        onPlyrPlay: function onPlyrPlay(e) {\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', false);\n        },\n        onPlyrPause: function onPlyrPause(e) {\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', true);\n        },\n        onModelViewerPlay: function onModelViewerPlay(e) {\n          // prevent swiping\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', false); // prevent left/right key control\n\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'accessibility', false);\n        },\n        onModelViewerPause: function onModelViewerPause(e) {\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'swipe', true);\n          $(e.target).closest('.slick-slider').slick('slickSetOption', 'accessibility', true);\n        }\n      }); // fix tabindex for first slide\n\n      theme.productGallerySlideshowTabFix($slideshow.slick('getSlick').$slides, $slideshow.slick('getSlick').currentSlide);\n      $slideshow.on('afterChange', function (evt, slick, current) {\n        // notify media of visibility\n        $('.product-media--activated').removeClass('product-media--activated').trigger('mediaHidden');\n        $('.product-media', slick.$slides[current]).addClass('product-media--activated').trigger('mediaVisible'); // fix tabbing\n\n        theme.productGallerySlideshowTabFix(slick.$slides, current); // resize quickbuy\n\n        $(this).closest('.quickbuy-container').trigger('changedsize');\n      }); // if in quickbuy, trigger resize after slideshow change\n\n      if ($(container).closest('.collection-listing').length > 0) {\n        $slideshow.on('afterChange', function () {\n          $(this).closest('.quickbuy-container').trigger('changedsize');\n        });\n      }\n    });\n    var $thumbnails = $('.thumbnails', container);\n\n    if ($thumbnails.length) {\n      var carouselVisibleItemCount = 6,\n          isCarousel = false; /// Screen-width based initialisation of thumbnail carousels\n\n      var assessCarousel = function assessCarousel() {\n        if ($thumbnails.is(':visible')) {\n          // thumbnails are visible (i.e. not mobile)\n          if (Math.abs($thumbnails.outerWidth() - $thumbnails.parent().width()) > 20) {\n            // thumbnail container is drastically different in size to main image - destroy carousel\n            if (isCarousel) {\n              isCarousel = false;\n              theme.beforeCarouselUnloadEventBlockFix($thumbnails);\n              $thumbnails.removeClass('owl-carousel').data('owl.carousel').destroy();\n            }\n          } else {\n            // thumbnails are in a column - init carousel\n            if (!isCarousel) {\n              isCarousel = true; // fix for event propagation in nested owl carousels\n\n              theme.beforeCarouselLoadEventBlockFix($thumbnails);\n              $thumbnails.addClass('owl-carousel').on('initialized.owl.carousel', function () {\n                $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n              }).owlCarousel({\n                items: carouselVisibleItemCount,\n                dots: false,\n                margin: 7\n              });\n            }\n          }\n        }\n      };\n\n      $(window).on('debouncedresize.productGallery', assessCarousel);\n      assessCarousel();\n      $(container).data('assessCarouselCallback', assessCarousel); /// Thumbnail click - in carousel\n\n      $('.gallery', container).on('click select selectFromSlick', '.thumbnails.owl-carousel a', function (e) {\n        e.preventDefault();\n        var $carouselItem = $(this).parent();\n\n        if (e.type != 'selectFromSlick') {\n          // from click or variant image? change main image\n          $(this).closest('.gallery').find('.slideshow').slick('slickGoTo', $carouselItem.index());\n        } else {\n          // change to active state comes from the main slideshow change event\n          // show the highlight\n          $(this).addClass('selected').parent().siblings().find('a').removeClass('selected'); // adjust thumbnail carousel if not on-screen\n\n          var shelfStart = $carouselItem.parent().children('.active:first').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.closest('.owl-carousel').trigger('to.owl.carousel', currentIndex);\n          } else if (currentIndex > shelfEnd) {\n            // selected is to right of shelf - move carousel left to show\n            $carouselItem.closest('.owl-carousel').trigger('to.owl.carousel', Math.max(0, currentIndex - carouselVisibleItemCount + 1));\n          }\n        }\n      }); /// Thumbnail click - beside\n\n      $('.gallery', container).on('click select selectFromSlick', ' .thumbnails:not(.owl-carousel) a', function (e) {\n        e.preventDefault();\n\n        if (e.type != 'selectFromSlick') {\n          // from click or variant image? change main image\n          $(this).closest('.gallery').find('.slideshow').slick('slickGoTo', $(this).index());\n        } else {\n          // change to active state comes from the main slideshow change event\n          $(this).addClass('selected').siblings('.selected').removeClass('selected');\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).slick('unslick').off('init beforeChange afterChange');\n    $('.owl-carousel', container).each(function () {\n      theme.beforeCarouselUnloadEventBlockFix(this);\n      $(this).data('owl.carousel').destroy();\n    });\n  };\n\n  theme.CollectionTemplateSection = new function () {\n    this.onSectionLoad = function (target) {\n      theme.initToggleTargets();\n      theme.classUpTextLinks(target); /// View modes for collection page\n\n      $(target).on('click', '#view-as-tiles', function () {\n        if (!$(this).hasClass('active')) {\n          $(this).addClass('active');\n          $('#view-as-stream').removeClass('active');\n          theme.saveGridStreamChoice('grid');\n          var $listing = $('.collection-listing-stream').addClass('collection-listing').removeClass('collection-listing-stream');\n          $(window).trigger('debouncedresize');\n        }\n\n        return false;\n      });\n      $(target).on('click', '#view-as-stream', function () {\n        if (!$(this).hasClass('active')) {\n          $(this).addClass('active');\n          $('#view-as-tiles').removeClass('active');\n          theme.saveGridStreamChoice('stream');\n          var $listing = $('.collection-listing').removeClass('collection-listing').addClass('collection-listing-stream'); // reset styling on blocks\n\n          $(window).trigger('debouncedresize');\n          $listing.find('.block-inner, .primary-image').removeAttr('style');\n        }\n\n        return false;\n      }); /// Stream/grid view - saved setting\n\n      if ($('#view-as-stream, #view-as-tiles', target).length > 0 && theme.getGridStreamChoice() != null) {\n        if (theme.getGridStreamChoice() == 'stream') {\n          $('#view-as-stream').trigger('click');\n        } else {\n          $('#view-as-tiles').trigger('click');\n        }\n      } /// Collection sorting\n\n\n      var $sortBy = $('#sort-by', target);\n\n      if ($sortBy.length > 0) {\n        var queryParams = {};\n\n        if (location.search.length) {\n          for (var aKeyValue, i = 0, aCouples = location.search.substr(1).split('&'); i < aCouples.length; i++) {\n            aKeyValue = aCouples[i].split('=');\n\n            if (aKeyValue.length > 1) {\n              queryParams[decodeURIComponent(aKeyValue[0])] = decodeURIComponent(aKeyValue[1]);\n            }\n          }\n        }\n\n        $sortBy.on('change', function () {\n          queryParams.sort_by = $(this).val();\n          location.search = $.param(queryParams);\n        });\n      } /// If a tag is active in a group, other tags within that group must be links to that tag only, within that group.\n\n\n      $('.multi-tag-row .tags', target).each(function () {\n        var $active = $(this).find('li.active');\n        $(this).find('li:not(.active) a').each(function () {\n          var href = $(this).attr('href');\n          $active.each(function () {\n            var tag = $(this).data('tag');\n            href = href.replace('+' + tag, '').replace(tag + '+', ''); //Collection\n\n            href = href.replace('%2B' + tag, '').replace(tag + '%2B', ''); //Vendor\n          });\n          $(this).attr('href', href);\n        });\n      }); /// Style dropdowns\n\n      theme.select2.init($('.filters .styled-select select', target));\n      theme.ProductBlockManager.loadImages(target);\n    };\n\n    this.onSectionUnload = function (target) {\n      theme.select2.destroyAllIn(target);\n      $('#sort-by', target).off('change');\n      $(target).off('click');\n      theme.destroyProductGallery(target); // Clear grid/stream preference\n\n      theme.saveGridStreamChoice(null);\n    };\n  }();\n  theme.ProductTemplateSection = new function () {\n    this.onSectionLoad = function (target) {\n      theme.initToggleTargets();\n      theme.classUpTextLinks(target); /// Init store availability if applicable\n\n      if ($('[data-store-availability-container]', target).length) {\n        this.storeAvailability = new theme.StoreAvailability($('[data-store-availability-container]', target)[0]);\n      } /// Main product dropdown\n\n\n      $('[name=\"id\"]', target).trigger('optionate');\n      theme.initProductGallery(target);\n      theme.ProductBlockManager.loadImages(target); // click review rating under title\n\n      $('.theme-product-reviews', target).on('click', 'a', function () {\n        $('html,body').animate({\n          scrollTop: $($(this).attr('href')).offset().top\n        }, 1000);\n        return false;\n      });\n    };\n\n    this.onSectionUnload = function (target) {\n      theme.destroyProductGallery(target);\n      theme.OptionManager.unloadProductOptions($('[name=\"id\"]', target));\n      $('.theme-product-reviews', target).off('click');\n      $('.size-chart-link', target).off('click');\n\n      if (this.storeAvailability) {\n        this.storeAvailability.onSectionUnload();\n      }\n    };\n  }();\n  theme.BlogTemplateSection = new function () {\n    this.onSectionLoad = function (target) {\n      theme.initToggleTargets();\n      theme.classUpTextLinks(target);\n    };\n  }();\n  theme.CartTemplateSection = new function () {\n    var _ = this;\n\n    this.updateCart = function (params, successCallback) {\n      if (_.cartXhr) {\n        _.cartXhr.abort();\n      }\n\n      if (_.cartRefreshXhr) {\n        _.cartRefreshXhr.abort();\n      }\n\n      _.cartXhr = $.ajax({\n        type: 'POST',\n        url: theme.routes.cart_change_url + '.js',\n        data: params,\n        dataType: 'json',\n        success: function success(data) {\n          if (_.cartRefreshXhr) {\n            _.cartRefreshXhr.abort();\n          } // fetch new html for the page\n\n\n          _.cartRefreshXhr = $.ajax({\n            type: 'GET',\n            url: theme.routes.cart_url + '?view=ajax',\n            success: function success(data) {\n              var toReplace = ['.cart-item-list', '.checkout-subtotal-container__right'];\n              var $newDom = $('<div>' + data + '</div>');\n              $newDom.find('.fade-in').removeClass('fade-in');\n\n              for (var i = 0; i < toReplace.length; i++) {\n                _.replacingContent = true; // to avoid triggering change events when focus is lifted before DOM replacement\n\n                $('[data-section-type=\"cart-template\"] ' + toReplace[i]).html($newDom.find(toReplace[i]).html());\n                _.replacingContent = false;\n              }\n\n              successCallback();\n            },\n            error: function error(data) {\n              if (data.statusText != 'abort') {\n                console.log('Error refreshing page');\n                console.log(data);\n              }\n            },\n            complete: function complete() {\n              _.cartRefreshXhr = null;\n            }\n          });\n        },\n        error: function error(data) {\n          if (data.statusText != 'abort') {\n            console.log('Error processing update');\n            console.log(data);\n          }\n        },\n        complete: function complete() {\n          _.cartXhr = null;\n        }\n      });\n    };\n\n    this.onSectionLoad = function (container) {\n      theme.classUpTextLinks(container); // terms and conditions checkbox\n\n      if ($('#cartform input#terms', container).length > 0) {\n        $(document).on('click.cartTemplateSection', '#cartform [name=\"checkout\"], .additional-checkout-buttons input, a[href*=\"/checkout\"]', function () {\n          if ($('#cartform input#terms:checked').length == 0) {\n            alert(theme.strings.cart_terms_confirmation);\n            return false;\n          }\n        });\n      }\n\n      if ($(container).data('ajax-update')) {\n        $(container).on('keyup.cartTemplateSection change.cartTemplateSection changeFromButton.cartTemplateSection', '.cart-item__quantity-input', function (evt) {\n          if (_.replacingContent) {\n            return;\n          }\n\n          if ($(this).data('initial-value') && $(this).data('initial-value') == $(this).val()) {\n            return;\n          }\n\n          if ($(this).val().length == 0 || $(this).val() == '0') {\n            return;\n          } // focus on -/+ button or input, depending on source of event\n\n\n          var toFocusId;\n\n          if (evt.type === 'changeFromButton') {\n            toFocusId = $(evt.data).attr('id');\n          } else {\n            toFocusId = $(this).attr('id');\n          }\n\n          _.updateCart({\n            line: $(this).data('line'),\n            quantity: $(this).val()\n          }, function () {\n            // after update, set focus\n            $('#' + toFocusId).focus();\n          });\n        });\n        $(container).on('click.cartTemplateSection', '.quantity-down, .quantity-up', function (evt) {\n          var $input = $(this).closest('.quantity').find('input'),\n              step = $input.attr('step') ? parseInt($input.attr('step')) : 1;\n\n          if ($(this).hasClass('quantity-down')) {\n            $input.val(parseInt($input.val()) - step).trigger('changeFromButton', {\n              data: this\n            });\n          } else {\n            $input.val(parseInt($input.val()) + step).trigger('changeFromButton', {\n              data: this\n            });\n          }\n\n          return false;\n        });\n      }\n\n      theme.cartNoteMonitor.load($('.checkout-note [name=\"note\"]', container));\n      $(container).on('click.cartTemplateSection', 'button[data-toggle-shipping]', 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    this.onSectionUnload = function (container) {\n      $(document).off('.cartTemplateSection');\n      $(container).off('.cartTemplateSection');\n      theme.cartNoteMonitor.unload($('.checkout-note [name=\"note\"]', container));\n    };\n  }();\n  theme.ImageWithTextOverlaySection = new function () {\n    var _ = this;\n\n    _.checkForHeaderHeightSubtraction = function () {\n      $('.section-image-with-text-overlay .height--full-minus-header-height').each(function () {\n        $(this).height($(window).height() - $('.section-header').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\n          _.checkForHeaderHeightSubtraction();\n\n          $(window).off('debouncedresize.imageWithTextOverlaySection').on('debouncedresize.imageWithTextOverlaySection', _.checkForHeaderHeightSubtraction);\n        }\n      });\n    };\n\n    this.onSectionUnload = function (container) {\n      $(window).off('.imageWithTextOverlaySection');\n    };\n  }();\n  theme.SlideshowSection = new function () {\n    var _ = this;\n\n    _.checkForHeaderHeightSubtraction = function () {\n      $('.section-slideshow .height--full-minus-header-height').each(function () {\n        $(this).height($(window).height() - $('.section-header').height());\n      });\n    };\n\n    this.onSectionLoad = function (target) {\n      $('.slideshow', target).each(function () {\n        if ($(this).find('.height--full').length && $(this).closest('.section-slideshow').index() == 0) {\n          $(this).addClass('height--full-minus-header-height');\n\n          _.checkForHeaderHeightSubtraction();\n\n          $(window).off('debouncedresize.slideshowSection').on('debouncedresize.slideshowSection', _.checkForHeaderHeightSubtraction);\n        }\n\n        $(this).on('init', function () {\n          $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n        }).slick({\n          autoplay: $(this).data('autoplay'),\n          fade: $(this).data('transition') != 'slide',\n          speed: $(this).data('transition') == 'instant' ? 0 : 750,\n          autoplaySpeed: $(this).data('autoplay-speed') * 1000,\n          arrows: $(this).data('navigation') == 'arrows',\n          dots: $(this).data('navigation') == 'dots',\n          pauseOnHover: $(this).data('transition') != 'instant' || $(this).data('autoplay-speed') > 2,\n          // no pause when quick & instant\n          infinite: true,\n          useTransform: true,\n          prevArrow: '<button type=\"button\" class=\"slick-prev\" aria-label=\"' + theme.strings.previous + '\">' + theme.icons.chevronLeft + '</button>',\n          nextArrow: '<button type=\"button\" class=\"slick-next\" aria-label=\"' + theme.strings.next + '\">' + theme.icons.chevronRight + '</button>',\n          responsive: [{\n            breakpoint: 768,\n            settings: {\n              fade: $(this).data('transition') == 'instant',\n              // keep instant gif-style on mobile\n              speed: $(this).data('transition') == 'instant' ? 0 : 750,\n              arrows: false,\n              dots: $(this).data('navigation') != 'none'\n            }\n          }]\n        });\n      });\n    };\n\n    this.onSectionUnload = function (target) {\n      $('.slick-slider', target).slick('unslick').off('init');\n      $(window).off('.slideshowSection');\n    };\n\n    this.onBlockSelect = function (target) {\n      $(target).closest('.slick-slider').slick('slickGoTo', $(target).data('slick-index')).slick('slickPause');\n    };\n\n    this.onBlockDeselect = function (target) {\n      $(target).closest('.slick-slider').slick('slickPlay');\n    };\n  }();\n  theme.GallerySection = new function () {\n    this.onSectionLoad = function (container) {\n      var $carouselGallery = $('.gallery--mobile-carousel', container);\n\n      if ($carouselGallery.length) {\n        var assessCarouselFunction = function assessCarouselFunction() {\n          var isCarousel = $carouselGallery.hasClass('slick-slider'),\n              shouldShowCarousel = $(window).width() < 768;\n\n          if (!shouldShowCarousel) {\n            $('.lazyload--manual', $carouselGallery).removeClass('lazyload--manual').addClass('lazyload');\n          }\n\n          if (isCarousel && !shouldShowCarousel) {\n            // Destroy carousel\n            // - unload slick\n            $carouselGallery.slick('unslick').off('init');\n            $carouselGallery.find('a, .gallery__item').removeAttr('tabindex').removeAttr('role'); // - re-row items\n\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($carouselGallery);\n              }\n\n              $(this).appendTo($currentRow);\n            });\n          } else if (!isCarousel && shouldShowCarousel) {\n            // Create carousel\n            // - de-row items\n            $carouselGallery.find('.gallery__item').appendTo($carouselGallery);\n            $carouselGallery.find('.gallery__row').remove(); // - init carousel\n\n            $carouselGallery.on('init', function () {\n              $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n            }).slick({\n              autoplay: false,\n              fade: false,\n              infinite: true,\n              useTransform: true,\n              arrows: false,\n              dots: true\n            });\n          }\n        };\n\n        assessCarouselFunction();\n        $(window).on('debouncedresize.themeSection' + container.id, assessCarouselFunction);\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).closest('.slick-slider').each(function () {\n        $(this).slick('slickGoTo', blockSlideIndex);\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      this.$testimonialContainer.find('.testimonial-list__inner').on('init', function () {\n        $('.lazyload--manual', this).removeClass('lazyload--manual').addClass('lazyload');\n      }).slick({\n        fade: this.$testimonialContainer.hasClass('testimonial-list--with-images'),\n        slidesToShow: this.$testimonialContainer.hasClass('testimonial-list--without-images') ? 2 : 1,\n        dots: false,\n        arrows: true,\n        appendArrows: this.$testimonialContainer.find('.testimonial-list__controls'),\n        prevArrow: '<button type=\"button\" class=\"slick-prev\" aria-label=\"' + theme.strings.previous + '\">' + theme.icons.chevronLeft + '</button>',\n        nextArrow: '<button type=\"button\" class=\"slick-next\" aria-label=\"' + theme.strings.next + '\">' + theme.icons.chevronRight + '</button>',\n        responsive: [{\n          breakpoint: 768,\n          settings: {\n            fade: false,\n            slidesToShow: 1\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).closest('.slick-slider').each(function () {\n        $(this).slick('slickGoTo', blockSlideIndex);\n      });\n    };\n  }(); // Lightbox\n\n  theme.fbOpts = function () {\n    return {\n      overlayColor: '#fff',\n      padding: 1,\n      margin: $(window).width() > 767 ? 40 : 20,\n      overlayOpacity: 0.9,\n      onComplete: function onComplete() {\n        $('#fancybox-wrap').off('mousewheel.fb'); // do not block scrolling\n      }\n    };\n  };\n\n  theme.CustomRowSection = new function () {\n    this.onSectionLoad = function (container) {\n      theme.classUpTextLinks(container);\n      theme.VideoManager.onSectionLoad(container);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.VideoManager.onSectionUnload(container);\n    };\n  }();\n  theme.FeaturedCollectionSection = new function () {\n    this.onSectionLoad = function (container) {\n      theme.loadCarousels(container);\n      theme.ProductBlockManager.loadImages(container);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.unloadCarousels(container);\n    };\n  }();\n  theme.FeaturedCollectionsSection = new function () {\n    this.onSectionLoad = function (container) {\n      theme.loadCarousels(container);\n      theme.ProductBlockManager.loadImages(container);\n    };\n\n    this.onSectionUnload = function (container) {\n      theme.unloadCarousels(container);\n    };\n  }();\n  theme.ListCollectionsTemplateSection = new function () {\n    this.onSectionLoad = function (container) {\n      theme.ProductBlockManager.loadImages(container);\n    };\n  }();\n\n  theme.applyAjaxToProductForm = function ($form) {\n    if (theme.settings.cart_type === 'drawer') {\n      $form.filter('[data-ajax-add-to-cart=\"true\"]').each(function () {\n        var cartPopupTemplate = ['<div id=\"cart-summary-overlay\" class=\"cart-summary-overlay\">', '<div class=\"cart-summary-overlay__row-head\">', '<div class=\"cart-summary-overlay__column-image\">', '<div class=\"cart-summary-overlay__column-title\">', theme.strings.products_added_notification_title, '</div>', '</div>', '<div class=\"cart-summary-overlay__column-item\">', '<div class=\"cart-summary-overlay__column-title\">', theme.strings.products_added_notification_item, '</div>', '</div>', '<div class=\"cart-summary-overlay__column-price-region\">', '<div class=\"cart-summary-overlay__column-price\">', '<div class=\"cart-summary-overlay__column-title\">', theme.strings.products_added_notification_unit_price, '</div>', '</div>', '<div class=\"cart-summary-overlay__column-quantity\">', '<div class=\"cart-summary-overlay__column-title\">', theme.strings.products_added_notification_quantity, '</div>', '</div>', '<div class=\"cart-summary-overlay__column-total\">', '<div class=\"cart-summary-overlay__column-title\">', theme.strings.products_added_notification_total_price, '</div>', '</div>', '</div>', '<div class=\"cart-summary-overlay__column-subtotal\">', '<div class=\"cart-summary-overlay__column-title\">', theme.strings.products_added_notification_subtotal, '</div>', '</div>', '</div>', '<div class=\"cart-summary-overlay__row-body\">', '<div class=\"cart-summary-overlay__column-image\">', '<img src=\"[[image_url]]\" alt=\"[[encoded-title]]\" />', '</div>', '<div class=\"cart-summary-overlay__column-item\">', '<div class=\"cart-summary-overlay__title\">[[title]]</div>', '<div class=\"cart-summary-overlay__variants\">[[variants]]</div>', '<div class=\"cart-summary-overlay__mobile-price-row\">', '<div class=\"cart-summary-overlay__mobile-unit-price\">[[unit_price]]</div>', '<div class=\"cart-summary-overlay__mobile-quantity\">', theme.strings.products_added_notification_quantity, '<span class=\"cart-summary-overlay__quantity\">[[quantity]]</span>', '</div>', '<div class=\"cart-summary-overlay__mobile-line-price\">[[line_price]]</div>', '</div>', '</div>', '<div class=\"cart-summary-overlay__column-price-region\">', '<div class=\"cart-summary-overlay__column-price\">', '<span class=\"cart-summary-overlay__unit-price\">[[unit_price]]</span>', '</div>', '<div class=\"cart-summary-overlay__column-quantity\">', '<span class=\"cart-summary-overlay__quantity\">[[quantity]]</span>', '</div>', '<div class=\"cart-summary-overlay__column-total\">', '<div class=\"cart-summary-overlay__line-price\">[[line_price]]</div>', '</div>', '[[line_discount]]', '</div>', '<div class=\"cart-summary-overlay__column-subtotal\">', '<span class=\"cart-summary-overlay__subtotal\">[[subtotal]]</span>', '<div class=\"cart-summary-overlay__note\">', theme.strings.products_added_notification_shipping_note, '&nbsp;</div>', '</div>', '</div>', '<div class=\"cart-summary-overlay__actions\">', '<a id=\"shop-more\" class=\"button altcolour\" href=\"#\">', theme.strings.products_added_notification_keep_shopping, '</a>', '<a class=\"button to-cart\" href=\"', theme.routes.cart_url, '\">', theme.strings.products_added_notification_cart, '</a>', '</div>', '</div>'].join('');\n        var shopifyAjaxAddURL = theme.routes.cart_add_url + '.js';\n        var shopifyAjaxCartURL = theme.routes.cart_url + '.js';\n        var shopifyAjaxStorePageURL = theme.routes.search_url;\n        $(this).on('submit', function (evt) {\n          evt.preventDefault();\n          var $form = $(this); //Disable add button\n\n          $form.find('input[type=\"submit\"]').attr('disabled', 'disabled').each(function () {\n            $(this).data('previous-value', $(this).val());\n          }).val(theme.strings.products_product_adding_to_cart); //Hide any existing notifications\n\n          $('#cart-summary-overlay #shop-more').triggerHandler('click'); //Add to cart\n\n          $.post(shopifyAjaxAddURL, $form.serialize(), function (itemData) {\n            //Enable add button\n            $form.find('input[type=\"submit\"]').removeAttr('disabled').each(function () {\n              $btn = $(this); //Set to 'DONE', alter button style, wait a few secs, revert to normal\n\n              $btn.val(theme.strings.products_product_added_to_cart).addClass('inverted');\n              window.setTimeout(function () {\n                $btn.removeClass('inverted').val($btn.data('previous-value'));\n              }, 3000);\n            }); //Get our data\n\n            var addedDataJSON = $.parseJSON(itemData); //Get current cart state\n\n            $.get(shopifyAjaxCartURL, function (cartData) {\n              var cartDataJSON = $.parseJSON(cartData);\n              var addedQty = addedDataJSON.quantity;\n              var addedImage = addedDataJSON.image; //Variants require option names, which are not included in the cart\n\n              var productData = theme.OptionManager.getProductData($form);\n              var variantHtml = '';\n\n              if (addedDataJSON.variant_title) {\n                // catches default variant\n                for (var i = 0; i < productData.options.length; i++) {\n                  variantHtml += ['<div class=\"cart-summary-overlay__variant\">', '<span class=\"cart-summary-overlay__variant-option\">', productData.options[i].name, '</span>', '<span class=\"cart-summary-overlay__variant-value\">', addedDataJSON.variant_options[i], '</span>', '</div>'].join('');\n                }\n              }\n\n              if (addedDataJSON.selling_plan_allocation && addedDataJSON.selling_plan_allocation.selling_plan.name) {\n                variantHtml += ['<div class=\"cart-summary-overlay__variant\">', '<span class=\"cart-summary-overlay__variant-value\">', addedDataJSON.selling_plan_allocation.selling_plan.name, '</span>', '</div>'].join('');\n              }\n\n              var unitPriceHtml = '';\n\n              if (addedDataJSON.original_line_price > addedDataJSON.final_line_price) {\n                unitPriceHtml += '<div class=\"struck-out-price\"><span class=\"theme-money\">' + theme.Shopify.formatMoney(addedDataJSON.original_price, theme.money_format) + '</span></div>';\n              }\n\n              unitPriceHtml += '<div><span class=\"theme-money\">' + theme.Shopify.formatMoney(addedDataJSON.final_price, theme.money_format) + '</span></div>';\n              var linePriceHtml = '';\n\n              if (addedDataJSON.original_line_price != addedDataJSON.final_line_price) {\n                linePriceHtml += '<div class=\"theme-money struck-out-price\">' + theme.Shopify.formatMoney(addedDataJSON.original_line_price, theme.money_format) + '</div>';\n                linePriceHtml += '<div class=\"theme-money\">' + theme.Shopify.formatMoney(addedDataJSON.final_line_price, theme.money_format) + '</div>';\n              } else {\n                linePriceHtml += '<span class=\"theme-money\">' + theme.Shopify.formatMoney(addedDataJSON.final_line_price, theme.money_format) + '</span>';\n              }\n\n              var lineDiscountHtml = '';\n\n              if (addedDataJSON.line_level_discount_allocations && addedDataJSON.line_level_discount_allocations.length > 0) {\n                lineDiscountHtml += '<ul class=\"cart-discount-list\">';\n\n                for (var i = 0; i < addedDataJSON.line_level_discount_allocations.length; i++) {\n                  var discount_allocation = addedDataJSON.line_level_discount_allocations[i];\n                  lineDiscountHtml += ['<li class=\"cart-discount cart-discount--inline\">', '<span class=\"cart-discount__label\">', '<span class=\"cart-discount__icon\">', theme.icons.label, '</span>', '<span class=\"cart-discount__title\">', discount_allocation.discount_application.title, '</span>', '</span>', '<span class=\"cart-discount__amount theme-money\">', theme.Shopify.formatMoney(discount_allocation.amount, theme.money_format), '</span>', '</li>'].join('');\n                }\n\n                lineDiscountHtml += '</ul>';\n              }\n\n              var subtotalHtml = '';\n\n              if (cartDataJSON.cart_level_discount_applications && cartDataJSON.cart_level_discount_applications.length > 0) {\n                subtotalHtml += '<ul class=\"cart-discount-list\">';\n\n                for (var i = 0; i < cartDataJSON.cart_level_discount_applications.length; i++) {\n                  var discount_application = cartDataJSON.cart_level_discount_applications[i];\n                  subtotalHtml += ['<li class=\"cart-discount cart-discount--inline\">', '<span class=\"cart-discount__label\">', '<span class=\"cart-discount__icon\">', theme.icons.label, '</span>', '<span class=\"cart-discount__title\">', discount_application.title, '</span>', '</span>', '<span class=\"cart-discount__amount theme-money\">', theme.Shopify.formatMoney(discount_application.total_allocated_amount, theme.money_format), '</span>', '</li>'].join('');\n                }\n\n                subtotalHtml += '</ul>';\n              }\n\n              subtotalHtml += '<span class=\"cart-summary-overlay__subtotal-mobile-title\">' + theme.strings.products_added_notification_subtotal + ':</span> ';\n              subtotalHtml += '<span class=\"cart-summary-overlay__subtotal-amount theme-money\">' + theme.Shopify.formatMoney(cartDataJSON.total_price, theme.money_format) + '</span>'; //Now we have all the data, build the shade\n\n              var cartShadeHTML = cartPopupTemplate;\n              cartShadeHTML = cartShadeHTML.replace('[[title]]', addedDataJSON.product_title);\n              cartShadeHTML = cartShadeHTML.replace('[[encoded-title]]', addedDataJSON.product_title.replace(/\"/g, '&quot;').replace(/&/g, '&amp;'));\n              cartShadeHTML = cartShadeHTML.replace('[[variants]]', variantHtml);\n              cartShadeHTML = cartShadeHTML.replace(/\\[\\[quantity\\]\\]/g, addedQty);\n              cartShadeHTML = cartShadeHTML.replace('[[image_url]]', theme.Shopify.formatImage(addedImage, '170x'));\n              cartShadeHTML = cartShadeHTML.split('[[unit_price]]').join(unitPriceHtml);\n              cartShadeHTML = cartShadeHTML.split('[[line_price]]').join(linePriceHtml);\n              cartShadeHTML = cartShadeHTML.split('[[line_discount]]').join(lineDiscountHtml);\n              cartShadeHTML = cartShadeHTML.replace('[[subtotal]]', subtotalHtml);\n              var $cartShade = $(cartShadeHTML);\n              $cartShade.find('#shop-more').bind('click', function () {\n                $cartShade.animate({\n                  top: -$cartShade.outerHeight()\n                }, 500, function () {\n                  $(this).remove();\n                });\n                return false;\n              });\n              $cartShade.prependTo('body').css('top', -$cartShade.outerHeight()).animate({\n                top: 0\n              }, 500);\n            }, 'html'); //Update header summaries\n\n            $.get(shopifyAjaxStorePageURL, function (data) {\n              var cartSummarySelectors = ['#pageheader .cart-summary'];\n\n              for (var i = 0; i < cartSummarySelectors.length; i++) {\n                var $newCartObj = $('<div>' + data + '</div>').find(cartSummarySelectors[i]).first();\n                var $currCart = $(cartSummarySelectors[i]);\n                $currCart.html($newCartObj.html());\n              }\n            });\n          }, 'text').fail(function (data) {\n            //Enable add button\n            $form.find('input[type=\"submit\"]').removeAttr('disabled').each(function () {\n              $(this).val($(this).data('previous-value'));\n            }); //Not added, show message\n\n            if (typeof data != 'undefined' && typeof data.status != 'undefined') {\n              var jsonRes = $.parseJSON(data.responseText);\n              theme.showQuickPopup(jsonRes.description, $form.find('input[type=\"submit\"]:first'));\n            } else {\n              //Some unknown error? Disable ajax and add the old-fashioned way.\n              $form.attr('ajax-add-to-cart', 'false').submit();\n            }\n          });\n        });\n      });\n      $(window).off('.ajaxAddScroll').on('scroll.ajaxAddScroll', function () {\n        // Hide notifications on scroll\n        $('#cart-summary-overlay #shop-more').triggerHandler('click');\n      });\n    }\n  };\n\n  theme.removeAjaxFromProductForm = function ($form) {\n    $form.off('submit');\n  };\n\n  theme.HeaderSection = new function () {\n    this.onSectionLoad = function (container) {\n      // block focus events targeted at the social icons\n      $(container).on('focusin.headerSection focusout.headerSection', '.social-links', function (e) {\n        return false;\n      }); // asses focus, and handle transitioning between child elements with a timeout\n\n      var searchFocusOutTimeoutId = -1;\n      $(container).on('focusin.headerSection focusout.headerSection', '.search-box', 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(function () {\n            $(this).closest('.search-box').removeClass('focus');\n          }.bind(this), 200);\n        }\n      }); // Toggle search\n\n      $(container).on('click.headerSection', '.show-search-link, .main-search__close', function (e) {\n        if ($('body').toggleClass('show-search').hasClass('show-search')) {\n          setTimeout(function () {\n            $('.main-search__input:first').focus();\n          }, 500);\n        } else {\n          $('.show-search-link:first').focus();\n        }\n\n        return false;\n      }); // Close search on escape\n\n      $(container).on('keyup.headerSection', '.main-search__input', function (e) {\n        if (e.keyCode == 27) {\n          $('.main-search__close').click();\n        }\n      }); /// Live search\n\n      var $liveSearchContainer = $('.main-search[data-live-search=\"true\"]', container);\n\n      if ($liveSearchContainer.length) {\n        var searchTimeoutThrottle = 500,\n            searchTimeoutID = -1,\n            currReqObj = null,\n            showPrice = $liveSearchContainer.data('live-search-price'),\n            showVendor = $liveSearchContainer.data('live-search-vendor'),\n            includeMeta = $liveSearchContainer.data('live-search-meta'),\n            productImageShape = $liveSearchContainer.data('product-image-shape'),\n            detailMode = $liveSearchContainer.data('hover-detail-mode'),\n            showSoldOutLabel = $liveSearchContainer.data('show-sold-out-label'),\n            showSaleLabel = $liveSearchContainer.data('show-sale-label');\n        $(container).on('keyup.headerSection change.headerSection', '.main-search__input', function () {\n          var $searchContainer = $('.main-search'),\n              $resultsBox = $searchContainer.find('.main-search__results'),\n              valueToSearch = $(this).val(); //Only search if search string longer than 2, and it has changed\n\n          if (valueToSearch.length > 2 && valueToSearch != $(this).data('oldval')) {\n            //Reset previous value\n            $(this).data('oldval', valueToSearch); // Kill outstanding ajax request\n\n            if (currReqObj != null) {\n              currReqObj.abort();\n            } // Kill previous search\n\n\n            clearTimeout(searchTimeoutID); // Create URL for full search results\n\n            var $form = $(this).closest('form');\n            var linkURL = $form.attr('action') + ($form.attr('action').indexOf('?') > -1 ? '&' : '?') + $form.serialize(); //Show loading\n\n            $searchContainer.removeClass('main-search--has-results main-search--results-on-multiple-lines main-search--no-results').addClass('main-search--loading');\n\n            if ($('.main-search__results-spinner').length === 0) {\n              $resultsBox.html('<div class=\"main-search__results-spinner\"><div class=\"loading-spinner\"></div></div>');\n            } // Do next search (in X milliseconds)\n\n\n            searchTimeoutID = setTimeout(function () {\n              var ajaxUrl, ajaxData;\n\n              if (theme.Shopify.features.predictiveSearch) {\n                // use the API\n                ajaxUrl = theme.routes.search_url + '/suggest.json';\n                ajaxData = {\n                  \"q\": valueToSearch,\n                  \"resources\": {\n                    \"type\": $form.find('input[name=\"type\"]').val(),\n                    \"limit\": 8,\n                    \"options\": {\n                      \"unavailable_products\": \"last\",\n                      \"fields\": includeMeta ? \"title,product_type,variants.title,vendor,tag,variants.sku\" : \"title,product_type,variants.title,vendor\"\n                    }\n                  }\n                };\n              } else {\n                // use the theme template fallback\n                ajaxUrl = linkURL + '&view=json';\n                ajaxData = null;\n              } //Ajax hit on search page\n\n\n              currReqObj = $.ajax({\n                url: ajaxUrl,\n                data: ajaxData,\n                dataType: \"json\",\n                success: function success(response) {\n                  currReqObj = null;\n                  $searchContainer.removeClass('main-search--has-results main-search--results-on-multiple-lines main-search--no-results');\n                  $resultsBox.empty();\n                  var $resultsProducts = $('<div class=\"main-search__results__products collection-listing\"><div class=\"product-list product-list--per-row-4 product-list--image-shape-natural\"></div></div>');\n                  var $resultsPages = $('<div class=\"main-search__results__pages\">');\n\n                  if (response.resources.results.products) {\n                    for (var i = 0; i < response.resources.results.products.length; i++) {\n                      var result = response.resources.results.products[i];\n                      var $item = $(['<div class=\"product-block main-search-result\">', '<div class=\"block-inner\">', '<div class=\"block-inner-inner\">', '<div class=\"image-cont\">', '<a class=\"product-link\">', '<div class=\"image-label-wrap\">', '<div class=\"primary-image\"></div>', '</div>', '</a>', '</div>', '<div class=\"product-info\">', '<div class=\"inner\">', '<div class=\"innerer\">', '<a class=\"product-link\">', '<div class=\"product-block__title\"></div>', '<div class=\"dash\">-</div>', '</a>', '</div>', '</div>', '</div>', '</div>', '</div>', '</div>'].join(''));\n                      $item.addClass('detail-mode-' + detailMode);\n                      $item.find('.product-link').attr('href', result.url);\n\n                      if (result.featured_image && result.featured_image.url) {\n                        var $img = $('<div class=\"rimage-outer-wrapper\"><div class=\"rimage-wrapper lazyload--placeholder\"><img class=\"rimage__image lazyload fade-in\"></div></div>').appendTo($item.find('.primary-image'));\n                        $img.find('.rimage-wrapper').css('padding-top', 1 / Math.max(result.featured_image.aspect_ratio, 0.6) * 100 + '%');\n                        $img.find('.rimage__image').attr('data-src', theme.Shopify.formatImage(result.featured_image.url, '512x') + ' 512w');\n                      }\n\n                      var $itemInfoCont = $item.find('.product-info .product-link');\n                      $itemInfoCont.find('.product-block__title').html(result.title);\n\n                      if (showVendor) {\n                        $('<div class=\"vendor\">').html(result.vendor).prependTo($itemInfoCont);\n                      }\n\n                      if (showPrice) {\n                        var $price = $('<div class=\"product-price\">').appendTo($itemInfoCont);\n\n                        if (result.price_max != result.price_min) {\n                          $('<span class=\"product-price__from\">').html(theme.strings.products_listing_from).appendTo($price);\n                          $price.append(' ');\n                        }\n\n                        if (parseFloat(result.compare_at_price_min) > parseFloat(result.price_min)) {\n                          $('<span class=\"product-price__amount product-price__amount--on-sale theme-money\">').html(theme.Shopify.formatMoney(result.price_min, theme.money_format)).appendTo($price);\n                          $price.append(' ');\n                          $('<span class=\"product-price__compare theme-money\">').html(theme.Shopify.formatMoney(result.compare_at_price_min, theme.money_format)).appendTo($price);\n                        } else {\n                          $('<span class=\"product-price__amount theme-money\">').html(theme.Shopify.formatMoney(result.price_min, theme.money_format)).appendTo($price);\n                        }\n                      }\n\n                      if (showSoldOutLabel && !result.available) {\n                        $('<span class=\"productlabel soldout\"><span></span></span>').appendTo($item.find('.image-label-wrap')).find('span').html(theme.strings.products_labels_sold_out);\n                      } else if (showSaleLabel && parseFloat(result.compare_at_price_min) > parseFloat(result.price_min)) {\n                        $('<span class=\"productlabel sale\"><span></span></span>').appendTo($item.find('.image-label-wrap')).find('span').html(theme.strings.products_labels_sale);\n                      }\n\n                      $resultsProducts.children().append($item);\n                    }\n                  }\n\n                  if (response.resources.results.pages) {\n                    for (var i = 0; i < response.resources.results.pages.length; i++) {\n                      var result = response.resources.results.pages[i];\n                      var $item = $('<a class=\"main-search-result main-search-result--page\">').attr('href', result.url);\n                      $('<div class=\"main-search-result__text\">').html(result.title).appendTo($item);\n                      $resultsPages.append($item);\n                    }\n                  }\n\n                  if (response.resources.results.articles) {\n                    for (var i = 0; i < response.resources.results.articles.length; i++) {\n                      var result = response.resources.results.articles[i];\n                      var $item = $('<a class=\"main-search-result main-search-result--article\">').attr('href', result.url);\n                      $('<div class=\"main-search-result__text\">').html(result.title).appendTo($item);\n                      $resultsPages.append($item);\n                    }\n                  }\n\n                  $searchContainer.removeClass('main-search--loading');\n                  var areProducts = $resultsProducts.find('.main-search-result:first').length > 0,\n                      arePages = $resultsPages.find('.main-search-result:first').length > 0;\n\n                  if (areProducts || arePages) {\n                    // Numerous results\n                    $searchContainer.addClass('main-search--has-results');\n                    $searchContainer.toggleClass('main-search--results-on-multiple-lines', $resultsProducts.find('.product-block').length > 4);\n\n                    if (areProducts) {\n                      $resultsBox.append($resultsProducts);\n                    }\n\n                    if (arePages) {\n                      $('<h6 class=\"main-search-result__heading\">').html(theme.strings.general_quick_search_pages).prependTo($resultsPages);\n                      $resultsBox.append($resultsPages);\n                    }\n\n                    $('<a class=\"main-search__results-all-link button altcolour\">').attr('href', linkURL).html(theme.strings.layout_live_search_see_all).appendTo($resultsBox);\n                  } else {\n                    // No results - show nothing\n                    $searchContainer.addClass('main-search--no-results');\n                    $('<div class=\"main-search__empty-message\">').html(theme.strings.general_quick_search_no_results).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\n            if (currReqObj != null) {\n              currReqObj.abort();\n            }\n\n            clearTimeout(searchTimeoutID); // Clear results\n\n            $searchContainer.removeClass('main-search--has-results main-search--results-on-multiple-lines main-search--loading');\n            $resultsBox.empty();\n          }\n        });\n      } // account / localization\n\n\n      $('.disclosure', container).each(function () {\n        $(this).data('disclosure', new theme.Disclosure($(this)));\n      }); // nav\n\n      theme.Navigation.init({\n        nav: $('.navigation--main', container),\n        proxyTier1Nav: $('.navigation--left', container)\n      });\n\n      if (theme.inlineNavigationCheck) {\n        theme.inlineNavigationCheck();\n        $(window).on('debouncedresize.headerSection', theme.inlineNavigationCheck);\n      }\n    };\n\n    this.onSectionUnload = function (container) {\n      $(container).off('.headerSection');\n      $(window).off('.headerSection');\n      $('.disclosure', container).each(function () {\n        $(this).data('disclosure').unload();\n      });\n      theme.Navigation.destroy($('.navigation', container), $('.navigation--left', container));\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  theme.AnnouncementBarSection = 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  }(); // Manage option dropdowns\n\n  theme.productData = {};\n  theme.OptionManager = new function () {\n    var _ = this;\n\n    _._getVariantOptionElement = function (variant, $container) {\n      return $container.find('select[name=\"id\"] option[value=\"' + variant.id + '\"]');\n    };\n\n    _.selectors = {\n      container: '.product-detail',\n      gallery: '.gallery',\n      priceArea: '.price-area',\n      submitButton: 'input[type=submit], button[type=submit]',\n      multiOption: '.option-selectors'\n    };\n    _.strings = {\n      priceNonExistent: theme.strings.products_variant_non_existent,\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      unitPriceSeparator: theme.strings.products_product_unit_price_separator,\n      inventoryNotice: theme.strings.onlyXLeft\n    };\n\n    _._getString = function (key, variant) {\n      var string = _.strings[key];\n\n      if (variant) {\n        string = string.replace('[PRICE]', '<span class=\"theme-money\">' + theme.Shopify.formatMoney(variant.price, theme.money_format) + '</span>');\n      }\n\n      return string;\n    };\n\n    _.getProductData = function ($form) {\n      var productId = $form.data('product-id');\n      var data = null;\n\n      if (!theme.productData[productId]) {\n        theme.productData[productId] = JSON.parse(document.getElementById('ProductJson-' + productId).innerHTML);\n      }\n\n      data = theme.productData[productId];\n\n      if (!data) {\n        console.log('Product data missing (id: ' + $form.data('product-id') + ')');\n      }\n\n      return data;\n    };\n\n    _.getBaseUnit = function (variant) {\n      return variant.unit_price_measurement.reference_value === 1 ? variant.unit_price_measurement.reference_unit : variant.unit_price_measurement.reference_value + variant.unit_price_measurement.reference_unit;\n    }, _.addVariantUrlToHistory = function (variant) {\n      if (variant) {\n        var newurl = window.location.protocol + '//' + window.location.host + window.location.pathname + '?variant=' + variant.id;\n        window.history.replaceState({\n          path: newurl\n        }, '', newurl);\n      }\n    };\n\n    _.updateSku = function (variant, $container) {\n      $container.find('.sku .sku__value').html(variant ? variant.sku : '');\n      $container.find('.sku').toggleClass('sku--no-sku', !variant || !variant.sku);\n    };\n\n    _.updateBarcode = function (variant, $container) {\n      $container.find('.barcode .barcode__value').html(variant ? variant.barcode : '');\n      $container.find('.barcode').toggleClass('barcode--no-barcode', !variant || !variant.barcode);\n    };\n\n    _.updateInventoryNotice = function (variant, $container) {\n      var inventoryData = _._getVariantOptionElement(variant, $container).data('inventory');\n\n      if (inventoryData) {\n        $container.find('.product-inventory-notice').removeClass('product-inventory-notice--no-inventory').html(_._getString('inventoryNotice').replace('[[ quantity ]]', inventoryData));\n      } else {\n        $container.find('.product-inventory-notice').addClass('product-inventory-notice--no-inventory').empty();\n      }\n    };\n\n    _.updateBackorder = function (variant, $container) {\n      var $backorder = $container.find('.backorder');\n\n      if ($backorder.length) {\n        if (variant && variant.available) {\n          if (variant.inventory_management && _._getVariantOptionElement(variant, $container).data('stock') == 'out') {\n            var productData = _.getProductData($backorder.closest('form'));\n\n            $backorder.find('.backorder__variant').html(productData.title + (variant.title.indexOf('Default') >= 0 ? '' : ' - ' + variant.title));\n            $backorder.show();\n          } else {\n            $backorder.hide();\n          }\n        } else {\n          $backorder.hide();\n        }\n      }\n    };\n\n    _.updatePrice = function (variant, $container) {\n      var $priceArea = $container.find(_.selectors.priceArea);\n      $priceArea.removeClass('on-sale');\n\n      if (variant) {\n        var $newPriceArea = $('<div>');\n        var $price = $('<div class=\"price h4-style\">').appendTo($newPriceArea);\n        $('<span class=\"current-price theme-money\">').html(theme.Shopify.formatMoney(variant.price, theme.money_format)).appendTo($price);\n\n        if (variant.compare_at_price > variant.price) {\n          $price.append(' ');\n          $('<span class=\"was-price theme-money\">').html(theme.Shopify.formatMoney(variant.compare_at_price, theme.money_format)).appendTo($price);\n          $price.addClass('on-sale');\n        }\n\n        if (variant.unit_price_measurement) {\n          var $newUnitPriceArea = $('<div class=\"unit-price\">').appendTo($newPriceArea);\n          $('<span class=\"unit-price__price theme-money\">').html(theme.Shopify.formatMoney(variant.unit_price, theme.money_format)).appendTo($newUnitPriceArea);\n          $('<span class=\"unit-price__separator\">').html(_._getString('unitPriceSeparator')).appendTo($newUnitPriceArea);\n          $('<span class=\"unit-price__unit\">').html(_.getBaseUnit(variant)).appendTo($newUnitPriceArea);\n        }\n\n        $priceArea.html($newPriceArea.html());\n      } else {\n        $priceArea.html(_._getString('priceNonExistent', variant));\n      }\n    };\n\n    _._updateButtonText = function ($button, string, variant) {\n      $button.each(function () {\n        var newVal;\n        newVal = _._getString('button' + string, variant);\n\n        if (newVal !== false) {\n          if ($(this).is('input')) {\n            $(this).val(newVal);\n          } else {\n            $(this).html(newVal);\n          }\n        }\n      });\n    };\n\n    _.updateButtons = function (variant, $container) {\n      var $button = $container.find(_.selectors.submitButton);\n\n      if (variant && variant.available == true) {\n        $button.removeAttr('disabled');\n\n        _._updateButtonText($button, 'Default', variant);\n      } else {\n        $button.attr('disabled', 'disabled');\n\n        if (variant) {\n          _._updateButtonText($button, 'NoStock', variant);\n        } else {\n          _._updateButtonText($button, 'NoVariant', variant);\n        }\n      }\n    };\n\n    _.updateContainerStatusClasses = function (variant, $container) {\n      $container.toggleClass('variant-status--unavailable', variant && !variant.available);\n      $container.toggleClass('variant-status--backorder', variant && variant.available && variant.inventory_management && _._getVariantOptionElement(variant, $container).data('stock') == 'out');\n      $container.toggleClass('variant-status--on-sale', variant && variant.available && variant.compare_at_price > variant.price);\n    };\n\n    _.initProductOptions = function (originalInput) {\n      $(originalInput).not('.theme-init').addClass('theme-init').each(function () {\n        var $originalInput = $(this);\n\n        if ($originalInput.is('select')) {\n          var productData = _.getProductData($originalInput.closest('form')); // change state for original dropdown\n\n\n          $originalInput.on('change.themeProductOptions firstrun.themeProductOptions', function (e, variant) {\n            if ($(this).is('input[type=radio]:not(:checked)')) {\n              return; // handle radios - only update for checked\n            }\n\n            var variant = variant;\n\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\n            var $container = $(this).closest(_.selectors.container); // update price\n\n            _.updatePrice(variant, $container); // update buttons\n\n\n            _.updateButtons(variant, $container); // emit an event to broadcast the variant update\n\n\n            $(window).trigger('cc-variant-updated', {\n              variant: variant,\n              product: productData\n            }); // variant images\n\n            if (variant && variant.featured_media) {\n              $container.find(_.selectors.gallery).trigger('variantImageSelected', variant);\n            } // extra details\n\n\n            _.updateBarcode(variant, $container);\n\n            _.updateSku(variant, $container);\n\n            _.updateInventoryNotice(variant, $container);\n\n            _.updateBackorder(variant, $container);\n\n            _.updateContainerStatusClasses(variant, $container); // variant urls\n\n\n            var $form = $(this).closest('form');\n\n            if ($form.data('enable-history-state') && e.type == 'change') {\n              _.addVariantUrlToHistory(variant);\n            } // allow other things to hook on\n\n\n            $(this).trigger('variantChanged', variant);\n          }); // split-options wrapper\n\n          $originalInput.closest(_.selectors.container).find(_.selectors.multiOption).on('change.themeProductOptions', 'select', function () {\n            var selectedOptions = [];\n            $(this).closest(_.selectors.multiOption).find('select').each(function () {\n              selectedOptions.push($(this).val());\n            }); // find variant\n\n            var variant = false;\n\n            for (var i = 0; i < productData.variants.length; i++) {\n              var v = productData.variants[i];\n              var matchCount = 0;\n\n              for (var j = 0; j < selectedOptions.length; j++) {\n                if (v.options[j] == selectedOptions[j]) {\n                  matchCount++;\n                }\n              }\n\n              if (matchCount == selectedOptions.length) {\n                variant = v;\n                break;\n              }\n            } // trigger change\n\n\n            if (variant) {\n              $originalInput.val(variant.id);\n            }\n\n            $originalInput.trigger('change', variant);\n          }); // first-run\n\n          $originalInput.trigger('firstrun');\n        } // ajax\n\n\n        theme.applyAjaxToProductForm($originalInput.closest('form'));\n      });\n    };\n\n    _.unloadProductOptions = function (originalInput) {\n      $(originalInput).removeClass('theme-init').each(function () {\n        $(this).trigger('unloading').off('.themeProductOptions');\n        $(this).closest(_.selectors.container).find(_.selectors.multiOption).off('.themeProductOptions');\n        theme.removeAjaxFromProductForm($(this).closest('form'));\n      });\n    };\n  }();\n  theme.owlCarouselEventList = ['to', 'next', 'prev', 'destroy', 'initialized', 'resized', 'refreshed'].join('.owl.carousel ') + '.owl.carousel';\n\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    /// Carousels\n    $('.carousel', container).each(function () {\n      var $this = $(this);\n\n      function getTotalProductBlockWidth() {\n        var productBlockTotalWidth = 0;\n        $this.find($this.hasClass('owl-loaded') ? '.owl-item:not(.cloned)' : '.product-block').each(function () {\n          productBlockTotalWidth += $(this).outerWidth(true);\n        });\n        return productBlockTotalWidth;\n      } // next & prev arrows\n\n\n      $this.closest('.collection-slider').on('click.themeCarousel', '.prev, .next', function (e) {\n        e.preventDefault();\n        var carousel = $(this).closest('.collection-slider').find('.owl-carousel').data('owl.carousel');\n\n        if ($(this).hasClass('prev')) {\n          carousel.prev();\n        } else {\n          carousel.next();\n        }\n      }); // create options\n\n      var carouselOptions, isLooping;\n      var fixedMode = !$(this).closest('.container--no-max').length;\n      $this.toggleClass('carousel--fixed-grid-mode', fixedMode);\n\n      if (fixedMode) {\n        var desktopNumPerRow = parseInt($(this)[0].className.match(/per-row-(.)/)[1]);\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: desktopNumPerRow < 4 ? 1 : 2\n            },\n            480: {\n              items: Math.min(2, desktopNumPerRow - 2)\n            },\n            767: {\n              items: desktopNumPerRow - 1\n            },\n            1000: {\n              items: 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      } // init carousel\n\n\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).attr('data-src-temp', $(this).attr('data-src')).removeAttr('data-src');\n        }); // fix for event propagation in nested owl carousels\n\n        theme.beforeCarouselLoadEventBlockFix($this); // run after carousel is initialised\n\n        $this.on('initialized.owl.carousel', function () {\n          // restore data-src\n          $this.find('[data-src-temp]').each(function () {\n            $(this).attr('data-src', $(this).attr('data-src-temp')).removeAttr('data-src-temp');\n          }); // lazysizes\n\n          $this.find('.lazyload--manual').removeClass('lazyload--manual').addClass('lazyload'); // ensure clones are processed from scratch\n\n          theme.ProductBlockManager.loadImages($this.closest('[data-section-type]')); // recalculate widths, after the above's async calls\n\n          setTimeout(function () {\n            $this.data('owl.carousel').invalidate('width');\n            $this.trigger('refresh.owl.carousel');\n          }, 10);\n        }); // run after carousel is initialised or resized\n\n        $this.on('initialized.owl.carousel resized.owl.carousel', 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\n            if (shouldLoop != isLooping) {\n              // destroy and rebuild carousel with appropriate loop setting\n              carouselOptions.loop = shouldLoop;\n              isLooping = shouldLoop; // destroy function\n\n              $(evt.target).data('owl.carousel').destroy(); // build again\n\n              $(evt.target).owlCarousel(carouselOptions); // do no more in this callback\n\n              return;\n            }\n          } // layout fixes\n\n\n          setTimeout(function () {\n            // fixes\n            var currentWidth = $this.find('.owl-stage').width();\n            var stageIsPartiallyOffScreen = currentWidth > $this.width();\n\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.find('.owl-stage').css({}).removeClass('owl-stage--items-fit');\n            } else {\n              // all elements fit inside viewport\n              // centre-align using css, if not full\n              $this.find('.owl-stage').addClass('owl-stage--items-fit').css({});\n            } // previous/next button visibility\n\n\n            $this.closest('.collection-slider').find('.prev, .next').toggleClass('owl-btn-disabled', !stageIsPartiallyOffScreen);\n          }, 10);\n        }); // run when the contents change, for any reason\n\n        theme.carouselInputIncrementer = theme.carouselInputIncrementer || 0;\n        $this.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).attr('aria-hidden', 'true').each(function () {\n            theme.carouselInputIncrementer++;\n            var uniquenessSuffix = '_' + theme.carouselInputIncrementer;\n            $(this).find('form[id]:not([data-id-altered]), :input[id]:not([data-id-altered])').each(function () {\n              $(this).attr('id', $(this).attr('id') + uniquenessSuffix);\n            }).attr('data-id-altered', true);\n            $(this).find('label[for]:not([data-id-altered])').each(function () {\n              $(this).attr('for', $(this).attr('for') + uniquenessSuffix);\n            }).attr('data-id-altered', true);\n          });\n        }).addClass('owl-carousel').owlCarousel(carouselOptions);\n      };\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.saveGridStreamChoice = function (type) {\n    var cfg = {\n      expires: 1,\n      path: '/',\n      domain: window.location.hostname\n    };\n    $.cookie('gridstream', type, cfg);\n  };\n\n  theme.getGridStreamChoice = function () {\n    return $.cookie('gridstream');\n  }; // Enables any images inside a container\n\n\n  theme.awakenImagesFromSlumber = function ($cont) {\n    $cont.find('.lazyload--manual:not(.lazyload)').addClass('lazyload');\n  }; // Process product block layout\n\n\n  theme.ProductBlockManager = new function () {\n    var _ = this;\n\n    _.loadImages = function (container) {\n      var container = container;\n\n      if (typeof container === 'undefined') {\n        container = $('body');\n      }\n\n      _.afterImagesResized(container);\n    };\n\n    _.afterImagesResized = function (container) {\n      var container = container;\n\n      if (typeof container === 'undefined') {\n        container = $('body');\n      } // All titles must line up\n\n\n      $('.collection-listing .product-list.product-list--image-shape-natural', container).each(function () {\n        if ($(window).width() >= 768 || $(this).closest('.carousel').length > 0) {\n          var tallest = 0;\n          $(this).find('.product-block.detail-mode-permanent .image-cont .primary-image img').each(function () {\n            if ($(this).height() > tallest) tallest = $(this).height();\n          });\n          $(this).find('.product-block.detail-mode-permanent .image-cont .primary-image').css('min-height', tallest);\n        } else {\n          $(this).find('.product-block.detail-mode-permanent .image-cont .primary-image').css('min-height', '');\n        }\n      }); // undo for list view\n\n      $('.collection-listing-stream .product-list .product-block.detail-mode-permanent .image-cont .primary-image').css('min-height', '');\n\n      _.alignProductBlockHeights(container);\n    };\n\n    _.alignProductBlockHeights = function (container) {\n      var container = container;\n\n      if (typeof container === 'undefined') {\n        container = $('body');\n      } // All product blocks must be the same height, for quick-buy alignment\n\n\n      $('.collection-listing .product-list', container).each(function () {\n        if ($(window).width() >= 768 || $(this).closest('.carousel').length > 0) {\n          var tallest = 0;\n          $(this).find('.product-block .block-inner .block-inner-inner').each(function () {\n            if ($(this).height() > tallest) tallest = $(this).height();\n          });\n          $(this).find('.product-block .block-inner').css('min-height', tallest);\n        } else {\n          $(this).find('.product-block .block-inner').css('min-height', '');\n        }\n      });\n    };\n  }();\n\n  theme.initToggleTargets = function (container) {\n    $('a[data-toggle-target]:not(.toggle-init)', container).addClass('toggle-init').each(function () {\n      var $target = $($(this).data('toggle-target'));\n      $(this).find('.state').html($target.is(':visible') && !$target.hasClass('height-hidden') ? '-' : '+');\n    });\n  }; // Style any text-only links nicely\n\n\n  theme.classUpTextLinks = function (container) {\n    $('.user-content a:has(img)', container).addClass('image-link');\n  }; /// Select2 with swatches\n\n\n  theme.select2 = {\n    transitionOutDelay: 250,\n    // match CSS transition for transition out\n    init: function init($els, config) {\n      var standardSelectOptions = {\n        minimumResultsForSearch: Infinity,\n        width: 'computedstyle'\n      };\n      var swatchSelectOptions = {\n        minimumResultsForSearch: Infinity,\n        templateResult: theme.select2.swatchSelect2OptionTemplate,\n        templateSelection: theme.select2.swatchSelect2OptionTemplate,\n        width: 'computedstyle'\n      };\n\n      if (typeof config !== 'undefined') {\n        standardSelectOptions = $.extend(standardSelectOptions, config);\n        swatchSelectOptions = $.extend(swatchSelectOptions, config);\n      }\n\n      $els.not('.select2-hidden-accessible').each(function () {\n        // init\n        $(this).select2($(this).data('colour-swatch') ? swatchSelectOptions : standardSelectOptions);\n      }).on('select2:open', function (e) {\n        // transition in\n        var $resCon = $(this).data('select2').$results.closest('.select2-dropdown').addClass('select2-dropdown--pre-reveal');\n        setTimeout(function () {\n          $resCon.addClass('select2-dropdown--enable-trans');\n          setTimeout(function () {\n            $resCon.removeClass('select2-dropdown--pre-reveal');\n          }, 10);\n        }, 10);\n      }).on('select2:closing', function (e) {\n        // handle transitions\n        var $select = $(this);\n        var $resCon = $select.data('select2').$results.closest('.select2-dropdown'); // ensure no other transitions in progress\n\n        clearTimeout($select.data('select2TransOutTimeoutId')); // first time through, begin transition and trigger again\n\n        if (!$resCon.hasClass('select2-dropdown--pre-close')) {\n          $resCon.addClass('select2-dropdown--pre-close');\n          $select.data('select2TransOutTimeoutId', setTimeout(function () {\n            $select.select2('close');\n          }, theme.select2.transitionOutDelay));\n          return false;\n        }\n      }).on('select2:close', function (e) {\n        // reset transitions\n        $(this).data('select2').$results.closest('.select2-dropdown').removeClass('select2-dropdown--enable-trans select2-dropdown--pre-close');\n      });\n    },\n    destroyAllIn: function destroyAllIn($container) {\n      theme.select2.destroy($('select[data-select2-id]', $container));\n    },\n    destroy: function destroy($els) {\n      $els.select2('destroy').off('select2:open select2:closing select2:close');\n    },\n    swatchSelect2OptionTemplate: function swatchSelect2OptionTemplate(state) {\n      if (state.id) {\n        var colourKey = removeDiacritics(state.id).toLowerCase().replace(/'/g, '').replace(/[^a-z0-9]+/g, '-').replace(/-+/g, '-').replace(/-*$/, '');\n        return $(['<div class=\"swatch-option\">', '<span class=\"swatch-option__nugget bg-', colourKey, '\"></span>', '<span class=\"swatch-option__label\">', state.text, '</span>', '</div>'].join(''));\n      } else {\n        return $(['<div class=\"swatch-option swatch-option--all\">', '<span class=\"swatch-option__label\">', state.text, '</span>', '</div>'].join(''));\n      }\n    }\n  }; // dom ready\n\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    }); //Return elements that have an ancestor/parent matching the supplied selector\n\n    $.fn.hasAncestor = function (a) {\n      return this.filter(function () {\n        return $(this).closest(a).length > 0;\n      });\n    }; //Side up and remove\n\n\n    $.fn.slideUpAndRemove = function (speed) {\n      if (typeof speed == 'undefined') speed = 200;\n      $(this).each(function () {\n        $(this).slideUp(speed, function () {\n          $(this).remove();\n        });\n      });\n    }; /// Reusable function to expand/contract a div\n\n\n    $(document).on('click', 'a[data-toggle-target]', function (e) {\n      var $target = $($(this).data('toggle-target'));\n\n      if ($target.hasClass('height-hidden')) {\n        $target.hide().removeClass('height-hidden');\n      }\n\n      $(this).find('.state').html($target.is(':visible') ? '+' : '-');\n      $target.slideToggle(200);\n      e.preventDefault();\n    }); //Redirect dropdowns\n\n    $(document).on('change', 'select.navdrop', function () {\n      window.location = $(this).val();\n    }); //General purpose lightbox\n\n    $('a[rel=\"fancybox\"]').fancybox($.extend({}, theme.fbOpts(), {\n      titleShow: false\n    })); /// Mobile nav\n\n    $(document).on('click', '.mobile-nav-toggle', function (e) {\n      e.preventDefault();\n      $('body').toggleClass('reveal-mobile-nav');\n    }); /// General window shade\n\n    $('<a href=\"#\" class=\"page-shade\" aria-label=\"' + theme.strings.general_navigation_menu_toggle_aria_label + '\"></a>').on('click', function () {\n      $('body').removeClass('reveal-mobile-nav show-search');\n      return false;\n    }).appendTo('body');\n\n    if (theme.settings.prod_thumb_detail_show) {\n      // utility function for quickbuy (closes all quickbuys in passed blocks, in a collection grid)\n      var contractDetail = function contractDetail($blocks, speed) {\n        if ($blocks.length > 0) {\n          $blocks.removeClass('expanded');\n          $blocks.find('.quickbuy-container').stop().animate({\n            height: 0\n          }, speed, function () {\n            $(this).find('.inner').empty();\n          });\n          $blocks.stop().each(function () {\n            $(this).animate({\n              paddingBottom: 0\n            }, speed);\n          });\n        }\n      }; // quick buy - managing slide-down quickbuy in both grids and carousels\n\n\n      //You also need to know where to scroll to\n      var saveCollectionPageData = function saveCollectionPageData() {\n        $('.collection-listing-stream .product-block').each(function () {\n          $(this).data('offsetTop', $(this).offset().top);\n        });\n        $('.collection-listing').each(function () {\n          var $blocks = $(this).find('.product-block');\n          if ($blocks.length <= 1) return true; // Skip for empty colls\n\n          var row = 0;\n          var currTop = 0; //Heights are fixed. Check two in case somebody has expanded one...\n\n          var blockHeight = Math.min($blocks.first().outerHeight(), $($blocks[1]).outerHeight());\n          var blockPageOffset = $blocks.first().offset().top;\n          $blocks.each(function (index) {\n            var currOffsetTop = $(this).offset().top;\n\n            if (index == 0) {\n              currTop = currOffsetTop;\n            } else {\n              if (currOffsetTop > currTop) {\n                row++;\n                currTop = currOffsetTop;\n              }\n            }\n\n            $(this).data({\n              offsetTop: blockPageOffset + row * blockHeight\n            });\n          });\n        });\n      }; //End of code specific to collection-page slide-downs\n\n\n      var droppyDownAnimSpeed = 500;\n      $(document).on('click', '.product-list .product-block:not(.collection-block):not(.main-search-result) .product-link:not(product-link--no-qb)', function () {\n        var pageWidth = $(window).width(),\n            productUrl = $(this).attr('href'); //Only show dropdown if screen is large enough for it to be useful\n\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; // do different things if it's inside a slideshow\n\n          if ($slider.length > 0) {\n            $sliderRow = $slider.closest('.collection-slider-row'); // slider without detail\n\n            if ($sliderRow.find('.quickbuy-container').length === 0) {\n              return;\n            }\n\n            $quickbuyCont = $sliderRow.find('.quickbuy-container');\n          } else {\n            $quickbuyCont = $block.find('.quickbuy-container');\n          }\n\n          $detailCont = $quickbuyCont.find('.inner'); // toggle active class on block\n\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 = $slider.find('.product-block.expanded').not($block).removeClass('expanded').length === 0; // if expanding from empty, set initial detail container height to 0\n\n              if (noneExpanded) {\n                $quickbuyCont.height(0);\n              } else {\n                // unload existing quickbuy\n                theme.OptionManager.unloadProductOptions($('[name=\"id\"]', $quickbuyCont));\n                $('.gallery', $quickbuyCont).off(this.namespace);\n                $('.slideshow', $quickbuyCont).slick('unslick');\n              } // what to adjust when details change size\n\n\n              $quickbuyCont.off('changedsize').on('changedsize', function () {\n                $quickbuyCont.stop().animate({\n                  height: $detailCont.outerHeight()\n                }, droppyDownAnimSpeed);\n              });\n            } else {\n              // close expanded siblings\n              var $expandedSiblings = $block.siblings('.expanded');\n              $expandedSiblings.each(function () {\n                contractDetail($(this), 0); // unload existing quickbuy\n\n                theme.OptionManager.unloadProductOptions($('[name=\"id\"]', this));\n                theme.destroyProductGallery(this);\n              }); // what do adjust when details change size\n\n              $quickbuyCont.off('changedsize').on('changedsize', function () {\n                // check expanded class in case it's mid close transition\n                if ($block.hasClass('expanded')) {\n                  var targetHeight = $detailCont.outerHeight(); // slide down instantly if a neighbour is expanded\n\n                  var speed = $expandedSiblings.length > 0 ? 0 : droppyDownAnimSpeed;\n                  $block.stop().animate({\n                    paddingBottom: targetHeight + 20\n                  }, speed); // extra for gap underneath\n\n                  $quickbuyCont.stop().animate({\n                    height: targetHeight\n                  }, speed);\n                }\n              });\n            } // a little hack to make sure everything lines up\n\n\n            if (window.SPR) {\n              theme.ProductBlockManager.alignProductBlockHeights();\n            } // add spinner\n\n\n            $detailCont.html('<div class=\"loading-spinner\"></div>');\n            $quickbuyCont.trigger('changedsize'); // load in content\n\n            var url = $(this).attr('href');\n            url += url.indexOf('?') >= 0 ? '&view=_lightbox' : '?view=_lightbox';\n            theme.currentQuickbuyRequest = $.get(url, function (response) {\n              var $newDetail = $('<div>' + response + '</div>').find('.product-detail'); // convert to quickbuy content\n\n              $newDetail.find('.more').attr('href', productUrl);\n              $newDetail.find('.detail .title').wrapInner($('<a>').attr('href', productUrl));\n              $newDetail.find('.show-gallery').removeClass('show-gallery').attr('href', productUrl);\n              $detailCont.html($newDetail); // dpb if present\n\n              if (Shopify.PaymentButton && $quickbuyCont.find('.shopify-payment-button').length) {\n                // resize after loading extra payment buttons\n                var _f = null;\n\n                _f = function f() {\n                  document.removeEventListener('shopify:payment_button:loaded', _f);\n                  $quickbuyCont.trigger('changedsize');\n                };\n\n                document.addEventListener('shopify:payment_button:loaded', _f);\n                Shopify.PaymentButton.init();\n              } // the order of these is important:\n\n\n              theme.initProductGallery($quickbuyCont); // 1\n\n              $quickbuyCont.find('[name=\"id\"]').trigger('optionate') // 2\n              .on('variantChanged', function () {\n                $quickbuyCont.trigger('changedsize'); // (4)\n              });\n              $quickbuyCont.trigger('changedsize'); // 3\n            }).always(function () {\n              theme.currentQuickbuyRequest = false;\n            }); // enable close button\n\n            $quickbuyCont.find('.close-detail').removeAttr('tabindex'); // scroll to appropriate position\n            // qb: top of quick buy\n            // bl: top of product block\n\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            } 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              } else {\n                // need to use top of block when no quickbuys are visible\n                saveCollectionPageData();\n                var offsetTop = typeof $block.data('offsetTop') != 'undefined' ? $block.data('offsetTop') : $block.offset().top;\n                $('html:not(:animated),body:not(:animated)').animate({\n                  scrollTop: offsetTop + scrollOffset\n                }, 500);\n              }\n            }\n          } else {\n            // close\n            if ($slider.length > 0) {\n              // collapse detail container\n              $quickbuyCont.stop().animate({\n                height: 0\n              }, droppyDownAnimSpeed, function () {\n                // remove details\n                $detailCont.empty();\n              });\n            } else {\n              contractDetail($block, droppyDownAnimSpeed);\n            } // scroll to top of closing block\n\n\n            var scrollUpOffset = -140;\n            $('html:not(:animated),body:not(:animated)').animate({\n              scrollTop: $block.offset().top + scrollUpOffset\n            }, 500); // disable close button\n\n            $quickbuyCont.find('.close-detail').attr('tabindex', '-1');\n          }\n\n          return false;\n        }\n      }); //Close button event\n\n      $(document).on('click', '.quickbuy-container .close-detail', function () {\n        var $slider = $(this).closest('.collection-slider-row');\n\n        if ($slider.length) {\n          $slider.find('.product-block.expanded .product-link:first').trigger('click');\n        } else {\n          $(this).closest('.product-block').find('.product-link:first').trigger('click');\n        }\n\n        return false;\n      });\n    } /// Collection slider\n\n\n    jQuery.fn.reverse = [].reverse; //Genius deserves credit: http://stackoverflow.com/questions/1394020/jquery-each-backwards\n    /// Event for initialising options\n\n    $(document).on('optionate', '[name=\"id\"]', function (e) {\n      // no product data? fetch using json now\n      var $form = $(this).closest('form');\n      var productId = $form.data('product-id');\n\n      if (theme.productData[productId] || document.getElementById('ProductJson-' + productId)) {\n        // reveal dynamic checkout buttons\n        if ($(this).closest('form').find('.dynamic-checkout-buttons').each(function () {\n          $(this).before($(this).html()).remove();\n        }).length > 0 && window.Shopify && Shopify.PaymentButton) {\n          Shopify.PaymentButton.init();\n        }\n      } else {\n        console.log('Product data missing');\n      } // events on option change\n\n\n      $(this).on('variantChanged', function (evt, variant) {\n        var $labelCont = $form.closest('.detail').find('.productlabel-container');\n        $labelCont.find('.productlabel').remove();\n        $labelCont.append($('#variant-label-' + variant.id).html());\n      });\n      theme.OptionManager.initProductOptions(this); // show box-style options\n\n      var $clickies = $form.find('[data-make-box]').addClass('has-clickyboxes').find('select').clickyBoxes(); // If we have clicky boxes, add the disabled-state to options that have no valid variants\n\n      if ($clickies.length > 0) {\n        // product form may have changed height. If in quick buy, resize container\n        $(this).closest('.quickbuy-container').trigger('changedsize');\n        var productData = theme.OptionManager.getProductData($form); // each option\n\n        for (var optionIndex = 0; optionIndex < productData.options.length; optionIndex++) {\n          // list each value for this option\n          var optionValues = {};\n\n          for (var variantIndex = 0; variantIndex < productData.variants.length; variantIndex++) {\n            var variant = productData.variants[variantIndex];\n\n            if (typeof optionValues[variant.options[optionIndex]] === 'undefined') {\n              optionValues[variant.options[optionIndex]] = false;\n            } // mark true if an option is available\n\n\n            if (variant.available) {\n              optionValues[variant.options[optionIndex]] = true;\n            }\n          } // mark any completely unavailable options\n\n\n          for (var key in optionValues) {\n            if (!optionValues[key]) {\n              $('.selector-wrapper:eq(' + optionIndex + ') .clickyboxes li a', $form).filter(function () {\n                return $(this).attr('data-value') == key;\n              }).addClass('unavailable');\n            }\n          }\n        }\n      } // select2\n\n\n      $form.find('.selector-wrapper:not([data-make-box]) select').each(function () {\n        theme.select2.init($(this));\n      }); // unload clickies & select2\n\n      $(this).on('unloading', function () {\n        $(this).off('unloading variantChanged'); // unload clickyboxes\n\n        $form.find('.selector-wrapper select.clickybox-replaced').clickyBoxes('destroy'); // unload select2\n\n        theme.select2.destroyAllIn($form.find('.selector-wrapper'));\n      });\n    }); /// Galleries (inc. product page)\n    // when variant changes, and the variant has an image\n\n    $(document).on('variantImageSelected', '.gallery', function (e, data) {\n      // get image src\n      var mediaId = data.featured_media.id; // locate matching thumbnail\n\n      $(this).find('.thumbnails a[data-media-id=\"' + mediaId + '\"]:first').trigger('select');\n    }); // click main product image (launch gallery)\n\n    $(document).on('click', '.product-detail .gallery .main-image a.show-gallery', function () {\n      var images = [],\n          currentIndex = 0;\n      var $thumbs = $(this).closest('.gallery').find('.thumbnails .thumbnail--media-image');\n\n      if ($thumbs.length) {\n        $thumbs.each(function () {\n          var $imgThumb = $(this).find('.rimage-outer-wrapper').clone();\n          $imgThumb.find('.lazyloaded').removeClass('lazyloaded').addClass('lazyload').parent().addClass('lazyload--placeholder');\n          images.push({\n            thumbTag: $imgThumb,\n            zoomUrl: $(this).attr('href')\n          });\n        });\n        $thumbs.each(function (thisIndex) {\n          if ($(this).hasClass('selected')) {\n            currentIndex = thisIndex;\n            return false;\n          }\n        });\n      } else {\n        var $imgThumb = $(this).find('.rimage-outer-wrapper').clone();\n        $imgThumb.find('.lazyloaded').removeClass('lazyloaded').addClass('lazyload').parent().addClass('lazyload--placeholder');\n        images.push({\n          thumbTag: $imgThumb,\n          zoomUrl: $(this).attr('href')\n        });\n      }\n\n      theme.buildGalleryViewer({\n        images: images,\n        current: currentIndex,\n        prev: theme.icons.chevronLeft,\n        next: theme.icons.chevronRight,\n        close: theme.icons.close\n      });\n      return false;\n    }); // load any images that aren't inside a section\n\n    var $nonSectionedProductLists = $('.product-list, .collection-listing').filter(function () {\n      return $(this).closest('[data-section-type]').length == 0;\n    });\n\n    if ($nonSectionedProductLists.length) {\n      theme.ProductBlockManager.loadImages($nonSectionedProductLists);\n    }\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    if (theme.settings.show_size_chart) {\n      // size chart link\n      $(document).on('click', '.size-chart-link', function () {\n        $.fancybox($.extend({}, theme.fbOpts(), {\n          showNavArrows: false,\n          content: $(this).closest('.size-chart-container').find('.size-chart-content').html()\n        }));\n        return false;\n      });\n    } /// Style text-only links\n\n\n    theme.classUpTextLinks(document); // forms don't all have correct label attributes\n\n    $('#template label').each(function () {\n      var $sibinputs = $(this).siblings('input:not([type=\"submit\"]), textarea');\n\n      if ($sibinputs.length == 1 && $sibinputs.attr('id').length > 0) {\n        $(this).attr('for', $sibinputs.attr('id'));\n      }\n    }); /// Custom share buttons\n\n    $(document).on('click', '.sharing a', function (e) {\n      var $parent = $(this).parent();\n\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 = 'status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0' + ',width=' + width + ',height=' + height + ',top=' + top + ',left=' + 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 = 'status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0' + ',width=' + width + ',height=' + height + ',top=' + top + ',left=' + 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 = 'status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0' + ',width=' + width + ',height=' + height + ',top=' + top + ',left=' + 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 = 'status=1, toolbar=0, location=0, menubar=0, directories=0, scrollbars=0' + ',width=' + width + ',height=' + height + ',top=' + top + ',left=' + left;\n        window.open(url, 'Google+', opts);\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\n      if ($qty.attr('step')) {\n        adj *= parseInt($qty.attr('step'));\n      }\n\n      $qty.val(Math.max(1, parseInt($qty.val()) + adj)).trigger('change');\n      return false;\n    }); /// Responsive tables\n\n    $('.responsive-table').on('click', '.responsive-table__cell-head', function () {\n      if ($(window).width() < 768) {\n        $(this).closest('tr').toggleClass('expanded');\n        return false;\n      }\n    }); /// Register all sections\n\n    theme.Sections.init();\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('image-with-text-overlay', theme.ImageWithTextOverlaySection);\n    theme.Sections.register('featured-collection', theme.FeaturedCollectionSection);\n    theme.Sections.register('featured-collections', theme.FeaturedCollectionsSection);\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('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('product-template', theme.ProductTemplateSection, {\n      deferredLoad: false\n    });\n    theme.Sections.register('collection-template', theme.CollectionTemplateSection, {\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('list-collections-template', theme.ListCollectionsTemplateSection, {\n      deferredLoad: false\n    });\n    theme.Sections.register('page-list-collections-template', theme.ListCollectionsTemplateSection, {\n      deferredLoad: false\n    });\n  }); //Register dynamically pulled in sections\n\n  $(function ($) {\n    if (cc.sections.length) {\n      cc.sections.forEach(function (section) {\n        try {\n          theme.Sections.register(section.name, section.section);\n        } catch (err) {\n          console.error(\"Unable to register section \".concat(section.name, \".\"), err);\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.7 */"],
  "mappings": "AAAA,SAAS,gBAAgB,SAAU,YAAa,CAAE,GAAI,EAAE,oBAAoB,aAAgB,MAAM,IAAI,UAAU,mCAAmC,CAAK,CAExJ,SAAS,kBAAkB,OAAQ,MAAO,CAAE,QAAS,EAAI,EAAG,EAAI,MAAM,OAAQ,IAAK,CAAE,IAAI,WAAa,MAAM,CAAC,EAAG,WAAW,WAAa,WAAW,YAAc,GAAO,WAAW,aAAe,GAAU,UAAW,aAAY,WAAW,SAAW,IAAM,OAAO,eAAe,OAAQ,WAAW,IAAK,UAAU,CAAG,CAAE,CAE5T,SAAS,aAAa,YAAa,WAAY,YAAa,CAAE,OAAI,YAAY,kBAAkB,YAAY,UAAW,UAAU,EAAO,aAAa,kBAAkB,YAAa,WAAW,EAAU,WAAa,CAEtN,SAAS,QAAQ,IAAK,CAAE,0BAA2B,OAAI,OAAO,QAAW,YAAc,OAAO,OAAO,UAAa,SAAY,QAAU,SAAiBA,KAAK,CAAE,OAAO,OAAOA,IAAK,EAAY,QAAU,SAAiBA,KAAK,CAAE,OAAOA,MAAO,OAAO,QAAW,YAAcA,KAAI,cAAgB,QAAUA,OAAQ,OAAO,UAAY,SAAW,OAAOA,IAAK,EAAY,QAAQ,GAAG,CAAG,EAExX,SAAU,EAAG,CACZ,IAAI,EAAI,OAAS,EACb,GAAK,CACP,SAAU,CAAC,CACb,EACA,MAAM,gBAAkB,CACtB,KAAM,SAAc,OAAQ,CAC1B,OAAO,GAAG,oFAAqF,UAAY,CACzG,MAAM,gBAAgB,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAChD,CAAC,CACH,EACA,OAAQ,SAAgB,OAAQ,CAC9B,OAAO,IAAI,uBAAuB,CACpC,EACA,wBAAyB,GACzB,uBAAwB,IACxB,WAAY,SAAoB,IAAK,CACnC,aAAa,MAAM,gBAAgB,uBAAuB,EAC1D,MAAM,gBAAgB,wBAA0B,WAAW,UAAY,CACrE,EAAE,KAAK,MAAM,OAAO,SAAW,aAAc,CAC3C,KAAM,GACR,EAAG,SAAU,KAAM,CAAC,EAAG,MAAM,CAC/B,EAAG,MAAM,gBAAgB,sBAAsB,CACjD,CACF,EAGA,EAAE,GAAG,YAAc,SAAU,OAAQ,CACnC,GAAI,QAAU,UACZ,EAAE,IAAI,EAAE,IAAI,cAAc,EAC1B,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,IAAI,cAAc,MAE/C,QAAO,EAAE,IAAI,EAAE,OAAO,iCAAiC,EAAE,SAAS,oBAAoB,EAAE,KAAK,UAAY,CAEvG,IAAIC,QAASA,SAAU,EAAE,IAAI,EAAE,KAAK,IAAI,EAEpC,SAAW,EAAE,2BAA2B,EAAE,KAAK,KAAM,eAAiBA,OAAM,EAAE,KAAK,SAAU,EAAE,IAAI,CAAC,EAAE,YAAY,IAAI,EACtH,OAEA,EAAE,IAAI,EAAE,GAAG,MAAM,EACnB,OAAS,EAAE,cAAgB,EAAE,IAAI,EAAE,KAAK,IAAI,EAAI,IAAI,EAEpD,OAAS,EAAE,IAAI,EAAE,SAAS,OAAO,EAG/B,OAAO,OAAS,GAClB,SAAS,SAAS,WAAa,iBAAiB,OAAO,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,KAAM,EAAE,EAAE,QAAQ,cAAe,GAAG,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,EAAE,CAAC,EAInK,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAY,CACtC,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,KAAK,aAAc,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,QAAU,iBAAiB,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,KAAM,EAAE,EAAE,QAAQ,cAAe,GAAG,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,EAAE,CAAC,CAAC,CACxQ,CAAC,EAED,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,uCAAwC,UAAY,CAEzF,IAAI,IAAM,EAAE,IAAI,EAAE,IAAI,EACtB,SAAS,KAAK,GAAG,EAAE,YAAY,QAAQ,EAAE,OAAO,UAAY,CAC1D,OAAO,EAAE,IAAI,EAAE,KAAK,YAAY,GAAK,GACvC,CAAC,EAAE,SAAS,QAAQ,CACtB,CAAC,EAAE,QAAQ,OAAO,EAGlB,SAAS,GAAG,oBAAqB,IAAK,UAAY,CAChD,GAAI,CAAC,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAG,CAC/B,IAAI,QAAU,EAAE,IAAI,EAAE,QAAQ,cAAc,EAC5C,QAAQ,KAAK,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,OAAO,CAAC,EAAE,QAAQ,QAAQ,EAClE,QAAQ,QAAQ,QAAQ,CAC1B,CAEA,MAAO,EACT,CAAC,CACH,CAAC,CAEL,EAEA,MAAM,QAAU,CACd,YAAa,SAAqB,EAAG,EAAG,CACtC,SAAS,EAAEC,GAAGC,GAAG,CACf,OAAkBD,KAAX,OAAeC,GAAID,EAC5B,CAEA,SAAS,EAAEA,GAAGC,GAAGC,GAAGC,GAAG,CACrB,GAAIF,GAAI,EAAEA,GAAG,CAAC,EAAGC,GAAI,EAAEA,GAAG,GAAG,EAAGC,GAAI,EAAEA,GAAG,GAAG,EAAG,MAAMH,EAAC,GAAaA,IAAR,KAAW,MAAO,GAC7EA,IAAKA,GAAI,KAAK,QAAQC,EAAC,EACvB,IAAIG,GAAIJ,GAAE,MAAM,GAAG,EACnB,OAAOI,GAAE,CAAC,EAAE,QAAQ,2BAA4B,KAAOF,EAAC,GAAKE,GAAE,CAAC,EAAID,GAAIC,GAAE,CAAC,EAAI,GACjF,CAEY,OAAO,GAAnB,WAAyB,EAAI,EAAE,QAAQ,IAAK,EAAE,GAC9C,IAAI,EAAI,GACJ,EAAI,sBACJ,EAAI,GAAK,KAAK,aAElB,OAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,EAAG,CACrB,IAAK,SACH,EAAI,EAAE,EAAG,CAAC,EACV,MAEF,IAAK,qBACH,EAAI,EAAE,EAAG,CAAC,EACV,MAEF,IAAK,8BACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MAEF,IAAK,8BACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MAEF,IAAK,yCACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MAEF,IAAK,0CACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MAEF,IAAK,0CACH,EAAI,EAAE,EAAG,EAAG,IAAK,EAAE,EACnB,MAEF,IAAK,mCACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,EACpB,MAEF,IAAK,gCACH,EAAI,EAAE,EAAG,EAAG,IAAK,GAAG,CACxB,CAEA,OAAO,EAAE,QAAQ,EAAG,CAAC,CACvB,EACA,YAAa,SAAqB,iBAAkB,OAAQ,CAC1D,OAAO,iBAAiB,QAAQ,oBAAqB,MAAQ,OAAS,KAAK,CAC7E,EACA,MAAO,CACL,UAAW,SAAmB,EAAG,CAC/B,IAAI,EAAI,EAAE,MAAM,2FAA2F,EAC3G,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,EAEtE,GAAY,GAAR,KAAW,CACb,IAAI,EAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAChB,EAAI,EAAE,CAAC,EACX,OAAO,KAAK,eAAe,EAAE,CAAC,EAAI,IAAM,EAAI,CAAC,CAC/C,CAEA,OAAO,IACT,EACA,eAAgB,SAAwB,EAAG,CACzC,OAAO,EAAE,QAAQ,YAAa,EAAE,CAClC,CACF,CACF,EAEA,MAAM,YAAa,UAAY,CAC7B,IAAI,UAAY,CACd,eAAgB,yBAChB,iBAAkB,2BAClB,gBAAiB,0BACjB,kBAAmB,0BACrB,EACI,QAAU,CACZ,YAAa,0BACf,EAEA,SAAS,WAAW,YAAa,CAC/B,KAAK,WAAa,YAClB,KAAK,MAAQ,CAAC,EAEd,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EAErB,KAAK,eAAe,EAEpB,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,EACA,eAAgB,UAA0B,CACxC,KAAK,MAAM,kBAAkB,GAAG,QAAS,SAAU,IAAK,CACtD,IAAI,aAAe,EAAE,IAAI,aAAa,EAAE,KAAK,eAAe,IAAM,OAClE,EAAE,IAAI,aAAa,EAAE,KAAK,gBAAiB,CAAC,YAAY,EACxD,KAAK,MAAM,gBAAgB,YAAY,QAAQ,WAAW,CAC5D,EAAE,KAAK,IAAI,CAAC,CACd,EACA,gBAAiB,UAA2B,CAC1C,KAAK,MAAM,mBAAmB,GAAG,QAAS,SAAU,IAAK,CACvD,IAAI,eAAe,EAEnB,KAAK,YAAY,EAAE,IAAI,aAAa,EAAE,KAAK,OAAO,CAAC,CACrD,EAAE,KAAK,IAAI,CAAC,CACd,EACA,YAAa,UAAuB,CAClC,KAAK,MAAM,kBAAkB,GAAG,WAAY,SAAU,IAAK,CACzD,IAAI,oBAAsB,KAAK,WAAW,IAAI,IAAI,aAAa,EAAE,SAAW,EAExE,qBACF,KAAK,UAAU,CAEnB,EAAE,KAAK,IAAI,CAAC,EACZ,KAAK,MAAM,gBAAgB,GAAG,WAAY,SAAU,IAAK,CACvD,IAAI,aAAe,EAAE,IAAI,aAAa,EAAE,IAAI,IAAI,aAAa,EAAE,OAAS,EACpE,UAAY,KAAK,MAAM,gBAAgB,SAAS,QAAQ,WAAW,EAEnE,WAAa,CAAC,cAChB,KAAK,UAAU,CAEnB,EAAE,KAAK,IAAI,CAAC,EACZ,KAAK,WAAW,GAAG,QAAS,SAAU,IAAK,CACrC,IAAI,QAAU,KAElB,KAAK,UAAU,EAEf,KAAK,MAAM,kBAAkB,MAAM,EACrC,EAAE,KAAK,IAAI,CAAC,EAEZ,KAAK,YAAc,SAAU,IAAK,CAChC,IAAI,SAAW,KAAK,WAAW,IAAI,IAAI,MAAM,EAAE,OAAS,EACpD,UAAY,KAAK,MAAM,gBAAgB,SAAS,QAAQ,WAAW,EAEnE,WAAa,CAAC,UAChB,KAAK,UAAU,CAEnB,EAAE,KAAK,IAAI,EAEX,EAAE,MAAM,EAAE,GAAG,QAAS,KAAK,WAAW,CACxC,EACA,YAAa,SAAqB,MAAO,CACvC,KAAK,MAAM,iBAAiB,IAAI,KAAK,EACrC,KAAK,WAAW,QAAQ,MAAM,EAAE,OAAO,CACzC,EACA,UAAW,UAAqB,CAC9B,KAAK,MAAM,gBAAgB,YAAY,QAAQ,WAAW,EAC1D,KAAK,MAAM,kBAAkB,KAAK,gBAAiB,EAAK,CAC1D,EACA,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,EACM,UACT,GAAE,GAED,UAAY,CACX,SAAS,SAAS,SAAU,UAAW,CACrC,IAAI,kBAAoB,GACpB,KAAO,GACX,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,EACpD,OAAO,iBAAiB,SAAU,SAAS,UAAY,CACrD,OAAO,cAAc,WAAW,CAClC,EAAG,GAAG,CAAC,CACT,GAAG,EAGH,MAAM,SAAW,IAAI,UAAY,CAC/B,IAAI,EAAI,KAER,EAAE,WAAa,CAAC,EAChB,EAAE,wBAA0B,CAAC,EAC7B,EAAE,UAAY,CAAC,EACf,EAAE,4BAA8B,IAEhC,EAAE,wBAA0B,GAE5B,EAAE,KAAO,UAAY,CACnB,EAAE,QAAQ,EAAE,GAAG,uBAAwB,SAAU,EAAG,CAElD,IAAI,OAAS,EAAE,4CAA4C,EAAE,MAAM,EAE/D,QACF,EAAE,YAAY,MAAM,CAExB,CAAC,EAAE,GAAG,yBAA0B,SAAU,EAAG,CAE3C,IAAI,OAAS,EAAE,4CAA4C,EAAE,MAAM,EAE/D,QACF,EAAE,cAAc,MAAM,CAE1B,CAAC,EACD,EAAE,MAAM,EAAE,GAAG,yFAA0F,EAAE,wBAAwB,EACjI,EAAE,wBAA0B,EAC9B,EAGA,EAAE,SAAW,SAAU,KAAM,QAAS,QAAS,CAC7C,EAAE,UAAU,KAAK,CACf,KAAM,KACN,QAAS,QACT,yBAA0B,QAAU,QAAQ,UAAY,KACxD,2BAA4B,QAAU,QAAQ,YAAc,IAC9D,CAAC,EAGD,EAAE,uBAAyB,KAAO,IAAI,EAAE,KAAK,UAAY,CACnD,QAAQ,YAAc,SAAW,QAAQ,eAAiB,IAAS,CAAC,EAAE,wBACxE,EAAE,YAAY,IAAI,EAElB,EAAE,oBAAoB,KAAM,OAAO,CAEvC,CAAC,CACH,EAGA,EAAE,oBAAsB,SAAU,OAAQ,QAAS,CACjD,EAAE,wBAAwB,KAAK,CAC7B,OAAQ,OACR,2BAA4B,SAAW,QAAQ,2BAA6B,QAAQ,2BAA6B,EAAE,2BACrH,CAAC,EAED,EAAE,yBAAyB,EAAI,CACjC,EAGA,EAAE,yBAA2B,SAAU,cAAe,CACpD,GAAI,EAAE,wBAAwB,OAK5B,QAJI,YAAc,EAAE,MAAM,EAAE,UAAU,EAClC,eAAiB,YAAc,EAAE,MAAM,EAAE,OAAO,EAChD,UAAY,gBAAkB,GAAO,EAAE,wBAAwB,OAAS,EAAI,EAEvE,EAAI,UAAW,EAAI,EAAE,wBAAwB,OAAQ,IAAK,CACjE,IAAI,OAAS,EAAE,wBAAwB,CAAC,EAAE,OACtC,eAAiB,EAAE,wBAAwB,CAAC,EAAE,2BAC9C,WAAa,EAAE,MAAM,EAAE,OAAO,EAAE,IAAM,eACtC,OAAS,WAAa,aAAe,WAAa,eAEtD,GAAI,CAAC,OAAQ,CACX,IAAI,cAAgB,WAAa,EAAE,MAAM,EAAE,YAAY,EAAI,eAAiB,EAC5E,OAAS,cAAgB,aAAe,cAAgB,cAC1D,EAEI,QAAU,WAAa,aAAe,cAAgB,kBAExD,EAAE,YAAY,MAAM,EAGpB,EAAE,wBAAwB,OAAO,EAAG,CAAC,EAErC,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,OACT,WAAa,EAAE,kBAAkB,MAAM,EACvC,QAAU,GAQd,GANI,WAAW,QACb,QAAU,WAAW,QAErB,QAAU,WAGR,UAAY,GAAO,CACrB,IAAI,SAAW,CACb,OAAQ,OACR,QAAS,QACT,yBAA0B,EAAE,MAAM,EAAE,QAAQ,kBAAkB,EAC9D,YAAa,CACX,UAAW,QAAQ,SACrB,CACF,EAKA,GAHA,EAAE,WAAW,KAAK,QAAQ,EAGtB,EAAE,MAAM,EAAE,KAAK,YAAY,EAAG,CAEhC,IAAI,WAAa,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,GAAG,EACvD,WAAW,QAAQ,SAAU,UAAW,CACtC,EAAE,QAAQ,EAAE,QAAQ,oBAAqB,CAAC,UAAW,MAAM,CAAC,CAC9D,CAAC,CACH,CAEA,EAAE,UAAU,QAAS,gBAAiB,OAAQ,SAAS,WAAW,EAElE,EAAE,UAAU,QAAS,2BAA4B,OAAQ,SAAS,WAAW,EAGzE,QAAQ,iBACV,SAAS,yBAAyB,GAAG,yBAA0B,SAAU,EAAG,CAC1E,EAAE,UAAU,QAAS,kBAAmB,EAAE,OAAQ,SAAS,WAAW,CACxE,CAAC,EAGC,QAAQ,mBACV,SAAS,yBAAyB,GAAG,2BAA4B,SAAU,EAAG,CAC5E,EAAE,UAAU,QAAS,oBAAqB,EAAE,OAAQ,SAAS,WAAW,CAC1E,CAAC,EAGC,QAAQ,eACV,EAAE,MAAM,EAAE,GAAG,uBAAwB,SAAU,EAAG,CAChD,EAAE,UAAU,QAAS,gBAAiB,EAAE,OAAQ,SAAS,WAAW,CACtE,CAAC,EAGC,QAAQ,iBACV,EAAE,MAAM,EAAE,GAAG,yBAA0B,SAAU,EAAG,CAClD,EAAE,UAAU,QAAS,kBAAmB,EAAE,OAAQ,SAAS,WAAW,CACxE,CAAC,CAEL,CACF,EAGA,EAAE,cAAgB,SAAU,OAAQ,CAKlC,QAJI,WAAa,EAAE,kBAAkB,MAAM,EAEvC,cAAgB,GAEX,EAAI,EAAG,EAAI,EAAE,WAAW,OAAQ,IACnC,EAAE,WAAW,CAAC,EAAE,QAAU,SAC5B,cAAgB,GAIpB,GAAI,cAAgB,GAAI,CACtB,IAAI,SAAW,EAAE,WAAW,aAAa,EAYzC,GAVA,EAAE,MAAM,EAAE,IAAI,6CAA6C,EAC3D,SAAS,yBAAyB,IAAI,iDAAiD,EAEvF,EAAE,UAAU,SAAS,QAAS,kBAAmB,OAAQ,SAAS,WAAW,EAE7E,EAAE,UAAU,WAAY,6BAA8B,OAAQ,SAAS,WAAW,EAElF,EAAE,WAAW,OAAO,aAAa,EAG7B,EAAE,MAAM,EAAE,KAAK,YAAY,EAAG,CAEhC,IAAI,WAAa,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,GAAG,EACvD,WAAW,QAAQ,SAAU,UAAW,CACtC,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,EAExC,KACF,CAGN,EAGA,EAAE,UAAY,SAAU,OAAQ,OAAQ,MAAO,YAAa,CACtD,OAAO,OAAO,MAAM,GAAM,aACxB,YACF,OAAO,MAAM,EAAE,KAAK,WAAW,EAAE,KAAK,EAEtC,OAAO,MAAM,EAAE,KAAK,EAG1B,EAEA,EAAE,4CAA8C,SAAU,OAAQ,CAChE,IAAI,QAAU,EAAE,4BAA6B,MAAM,EAEnD,OAAI,QAAQ,OAAS,EACZ,QAAQ,CAAC,EAET,EAEX,EAEA,EAAE,kBAAoB,SAAU,OAAQ,CAGtC,QAFI,KAAO,EAAE,MAAM,EAAE,KAAK,mBAAmB,EAEpC,EAAI,EAAG,EAAI,EAAE,UAAU,OAAQ,IACtC,GAAI,EAAE,UAAU,CAAC,EAAE,MAAQ,KACzB,OAAO,EAAE,UAAU,CAAC,EAIxB,MAAO,EACT,EAEA,EAAE,0BAA4B,SAAU,KAAM,CAC5C,QAAS,EAAI,EAAG,EAAI,EAAE,UAAU,OAAQ,IACtC,GAAI,EAAE,UAAU,CAAC,EAAE,MAAQ,KACzB,MAAO,GAIX,MAAO,EACT,CACF,EAEA,MAAM,cAAgB,CAAC,EAEvB,MAAM,eAAiB,SAAU,IAAK,SAAU,UAAW,KAAM,CAC/D,GAAI,OAAO,MAAM,cAAc,GAAG,GAAM,YAAa,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,EAElC,IAAI,WAEN,IAAI,mBAAqB,UAAY,CACnC,GAAI,IAAI,YAAc,UAAY,IAAI,YAAc,WAAY,CAC9D,IAAI,mBAAqB,KAEzB,QAAS,EAAI,EAAG,EAAI,MAAM,cAAc,IAAI,EAAE,OAAQ,IACpD,MAAM,cAAc,IAAI,EAAE,CAAC,EAAE,EAG/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,EAG/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,SAAW,QAAQ,MAAM,cAAc,GAAG,CAAC,IAAM,UAAY,OAAO,UAAa,WAC/E,MAAM,cAAc,GAAG,EAAE,KAAK,QAAQ,MAEtC,QAAI,OAAO,UAAa,YACtB,SAAS,EAGJ,EAEX,EAEA,MAAM,cAAgB,SAAU,IAAK,CACnC,IAAI,mBAAqB,IAAI,QAAQ,WAAY,EAAE,EAEnD,GAAI,CAAC,SAAS,cAAc,cAAgB,UAAU,kBAAkB,EAAI,IAAI,EAAG,CACjF,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,EAGA,MAAM,eAAiB,SAAU,QAAS,QAAS,CACjD,IAAI,OAAS,EAAE,6BAA6B,EACxC,KAAO,QAAQ,OAAO,EAC1B,OAAO,KAAK,OAAO,EAAE,IAAI,CACvB,KAAQ,KAAK,KACb,IAAO,KAAK,GACd,CAAC,EAAE,KAAK,EACR,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,OAAO,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,QAAQ,IAAK,UAAY,CACtD,EAAE,IAAI,EAAE,OAAO,CACjB,CAAC,CACH,EAEA,IAAI,SAAuB,UAAY,CACrC,aAEA,SAASC,SAAQ,WAAY,UAAW,CACtC,gBAAgB,KAAMA,QAAO,EAE7B,KAAK,WAAa,WAClB,KAAK,UAAY,UACjB,KAAK,WAAa,CAChB,QAAS,oBACT,aAAc,qBACd,qBAAsB,8BACxB,CACF,CAQA,oBAAaA,SAAS,CAAC,CACrB,IAAK,OACL,MAAO,SAAc,SAAU,CAC7B,IAAI,MAAQ,KAGZ,GAAI,KAAK,WAAW,KAAK,eAAe,EAAG,CACzC,EAAE,MAAM,EAAE,SAAS,KAAK,WAAW,YAAY,EAE/C,IAAI,UAAY,SAAS,cAAc,KAAK,EAC5C,UAAU,UAAY,0BACtB,SAAS,KAAK,YAAY,SAAS,EACnC,IAAI,eAAiB,UAAU,sBAAsB,EAAE,MAAQ,UAAU,YACzE,SAAS,KAAK,YAAY,SAAS,EAE/B,eAAiB,GACnB,EAAE,MAAM,EAAE,IAAI,gBAAiB,eAAiB,IAAI,EAAE,SAAS,KAAK,WAAW,oBAAoB,CAEvG,CAGA,KAAK,WAAW,SAAS,KAAK,WAAW,OAAO,EAEhD,KAAK,wBAA0B,SAAS,cAExC,WAAW,UAAY,CACrB,MAAM,WAAW,KAAK,iBAAiB,EAAE,CAAC,EAAE,MAAM,CACpD,EAAG,GAAG,EAEN,EAAE,MAAM,EAAE,GAAG,UAAY,KAAK,UAAW,SAAU,MAAO,CACpD,MAAM,UAAY,IACpB,MAAM,MAAM,CAEhB,CAAC,EAEG,UACF,SAAS,CAEb,CACF,EAAG,CACD,IAAK,QAML,MAAO,SAAe,SAAU,CAC9B,IAAI,OAAS,KAYb,GATA,KAAK,WAAW,YAAY,KAAK,WAAW,OAAO,EAE/C,KAAK,yBACP,EAAE,KAAK,uBAAuB,EAAE,MAAM,EAIxC,EAAE,MAAM,EAAE,IAAI,UAAY,KAAK,SAAS,EAEpC,KAAK,WAAW,KAAK,eAAe,EAAG,CACzC,IAAI,mBAAqB,IACrB,YAAc,KAAK,WAAW,KAAK,iBAAiB,EAEpD,YAAY,SACd,mBAAqB,WAAW,iBAAiB,YAAY,CAAC,CAAC,EAAE,kBAAqB,EAElF,oBAAsB,mBAAqB,IAC7C,oBAAsB,MAI1B,WAAW,UAAY,CACrB,EAAE,MAAM,EAAE,YAAY,OAAO,WAAW,YAAY,EAAE,YAAY,OAAO,WAAW,oBAAoB,EAAE,IAAI,gBAAiB,GAAG,CACpI,EAAG,kBAAkB,CACvB,CAEI,UACF,SAAS,CAEb,CACF,CAAC,CAAC,EAEKA,QACT,GAAE,EAIF,MAAM,aAAe,IAAI,UAAY,CACnC,IAAI,EAAI,KAGR,EAAE,YAAc,CACd,YAAa,EACb,SAAU,GACV,UAAW,CAAC,EACZ,kBAAmB,+DACrB,EAEA,EAAE,gBAAkB,UAAY,CAC9B,EAAE,YAAY,SAAW,GAEzB,EAAE,mBAAmB,CACvB,EAEA,EAAE,mBAAqB,SAAU,UAAW,CACtC,EAAE,EAAE,YAAY,kBAAmB,SAAS,EAAE,SAC5C,EAAE,YAAY,SAEhB,EAAE,EAAE,YAAY,kBAAmB,SAAS,EAAE,KAAK,UAAY,CAE7D,GAAI,EAAE,EAAE,IAAI,EAAE,SAAS,6BAA6B,GAAK,EAAE,MAAM,EAAE,WAAW,EAAI,KAAM,CACtF,EAAE,IAAI,EAAE,SAAS,aAAa,EAC9B,EAAE,YAAY,cACd,IAAI,YAAc,kBAAoB,EAAE,YAAY,YACpD,EAAE,IAAI,EAAE,KAAK,qBAAsB,WAAW,EAC9C,IAAI,aAAe,EAAE,8CAA8C,EAAE,KAAK,KAAM,WAAW,EAAE,SAAS,EAAE,0BAA2B,IAAI,CAAC,EACpI,SAAW,EAAE,IAAI,EAAE,KAAK,gBAAgB,EACxC,OAAS,IAAI,GAAG,OAAO,YAAa,CACtC,OAAQ,MACR,MAAO,MACP,QAAS,EAAE,IAAI,EAAE,KAAK,UAAU,EAChC,WAAY,CACV,eAAgB,EAChB,eAAgB,EAChB,SAAU,SAAW,EAAI,EACzB,KAAM,EAAE,IAAI,EAAE,KAAK,YAAY,EAAI,EAAI,EACvC,SAAU,EAAE,IAAI,EAAE,KAAK,UAAU,EACjC,IAAK,EACL,SAAU,CACZ,EACA,OAAQ,CACN,QAAS,EAAE,sBAAsB,KAAK,CACpC,SAAU,SACV,WAAY,EAAE,IAAI,CACpB,CAAC,EACD,cAAe,EAAE,4BAA4B,KAAK,IAAI,CACxD,CACF,CAAC,EACD,EAAE,YAAY,UAAU,WAAW,EAAI,CACrC,GAAI,YACJ,UAAW,KACX,aAAc,aACd,OAAQ,MACV,CACF,CACF,CAAC,EAGD,MAAM,eAAe,oCAAoC,EAG/D,EAEA,EAAE,sBAAwB,SAAU,MAAO,CACzC,MAAM,OAAO,mBAAmB,QAAQ,EAEpC,KAAK,WACP,MAAM,OAAO,KAAK,EAClB,MAAM,OAAO,UAAU,GAGzB,EAAE,qBAAqB,KAAK,UAAU,CACxC,EAEA,EAAE,4BAA8B,SAAU,MAAO,CAC3C,MAAM,MAAQ,GAAG,YAAY,SAC/B,EAAE,IAAI,EAAE,SAAS,qBAAqB,CAE1C,EAEA,EAAE,qBAAuB,SAAU,UAAW,CAC5C,QAAS,WAAW,EAAE,YAAY,UAAW,CAC3C,IAAI,KAAO,EAAE,YAAY,UAAU,OAAO,EAE1C,GAAI,EAAE,SAAS,EAAE,KAAK,KAAK,SAAS,EAAE,OAAQ,CAC5C,KAAK,OAAO,QAAQ,EACpB,OAAO,EAAE,YAAY,UAAU,OAAO,EACtC,MACF,CACF,CACF,EAGA,EAAE,UAAY,CACZ,YAAa,EACb,SAAU,GACV,UAAW,CAAC,EACZ,kBAAmB,6DACrB,EAEA,EAAE,cAAgB,UAAY,CAC5B,EAAE,UAAU,SAAW,GAEvB,EAAE,iBAAiB,CACrB,EAEA,EAAE,iBAAmB,SAAU,UAAW,CACpC,EAAE,EAAE,UAAU,kBAAmB,SAAS,EAAE,SAC1C,EAAE,UAAU,SAEd,EAAE,EAAE,UAAU,kBAAmB,SAAS,EAAE,KAAK,UAAY,CAE3D,GAAI,EAAE,EAAE,IAAI,EAAE,SAAS,6BAA6B,GAAK,EAAE,MAAM,EAAE,WAAW,EAAI,KAAM,CACtF,EAAE,IAAI,EAAE,SAAS,aAAa,EAC9B,EAAE,UAAU,cACZ,IAAI,MAAQ,EAAE,IAAI,EACd,YAAc,kBAAoB,EAAE,UAAU,YAClD,EAAE,IAAI,EAAE,KAAK,qBAAsB,WAAW,EAC9C,IAAI,aAAe,EAAE,8CAA8C,EAAE,KAAK,KAAM,WAAW,EAAE,SAAS,EAAE,0BAA2B,IAAI,CAAC,EACpI,SAAW,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,gBAAgB,EAC1C,OAAS,IAAI,MAAM,OAAO,YAAa,CACzC,IAAK,EAAE,IAAI,EAAE,KAAK,WAAW,EAC7B,MAAO,IACP,KAAM,EAAE,IAAI,EAAE,KAAK,gBAAgB,EACnC,SAAU,QACZ,CAAC,EACD,OAAO,GAAG,UAAW,UAAY,CAC/B,EAAE,IAAI,EAAE,SAAS,qBAAqB,CACxC,EAAE,KAAK,IAAI,CAAC,EACZ,OAAO,MAAM,EAAE,KAAK,UAAY,CAM9B,GALI,WACF,OAAO,UAAU,CAAC,EAClB,OAAO,KAAK,GAGV,OAAO,SAAW,OAAO,QAAQ,OAAS,OAAO,QAAQ,OAAQ,CACnE,IAAI,MAAQ,SAAS,OAAO,QAAQ,MAAM,EAAI,SAAS,OAAO,QAAQ,KAAK,EAC3E,MAAM,KAAK,yBAAyB,EAAE,IAAI,iBAAkB,MAAQ,IAAM,GAAG,CAC/E,CAEA,EAAE,qBAAqB,KAAK,CAC9B,CAAC,EACD,EAAE,UAAU,UAAU,WAAW,EAAI,CACnC,GAAI,YACJ,UAAW,KACX,aAAc,aACd,OAAQ,OACR,SAAU,QACZ,CACF,CACF,CAAC,EAGG,OAAO,OAET,MAAM,eAAe,yCAA0C,UAAY,CACzE,EAAE,UAAU,SAAW,GAEvB,EAAE,iBAAiB,EAEnB,OAAO,OAAS,OAAO,UACzB,EAAG,UAAY,CACb,OAAO,WAAa,OAAO,OAC3B,OAAO,OAAS,IAClB,CAAC,EAED,MAAM,eAAe,yCAA0C,UAAY,CACzE,EAAE,UAAU,SAAW,GAEvB,EAAE,iBAAiB,CACrB,CAAC,EAIT,EAEA,EAAE,mBAAqB,SAAU,UAAW,CAC1C,QAAS,WAAW,EAAE,UAAU,UAAW,CACzC,IAAI,KAAO,EAAE,UAAU,UAAU,OAAO,EAExC,GAAI,EAAE,SAAS,EAAE,KAAK,KAAK,SAAS,EAAE,OAAQ,CAC5C,KAAK,OAAO,OAAO,EACnB,OAAO,EAAE,UAAU,UAAU,OAAO,EACpC,MACF,CACF,CACF,EAGA,EAAE,QAAU,CACV,YAAa,EACb,UAAW,CAAC,EACZ,kBAAmB,2DACrB,EAEA,EAAE,eAAiB,SAAU,UAAW,CAClC,EAAE,EAAE,QAAQ,kBAAmB,SAAS,EAAE,QAE5C,EAAE,EAAE,QAAQ,kBAAmB,SAAS,EAAE,SAAS,aAAa,EAAE,KAAK,UAAY,CACjF,EAAE,QAAQ,cACV,IAAI,MAAQ,EAAE,IAAI,EACd,YAAc,kBAAoB,EAAE,QAAQ,YAChD,EAAE,IAAI,EAAE,KAAK,qBAAsB,WAAW,EAC9C,IAAI,aAAe,EAAE,8CAA8C,EAAE,KAAK,KAAM,WAAW,EAAE,SAAS,EAAE,0BAA2B,IAAI,CAAC,EACpI,OAAS,EAAE,qBAAqB,EAEhC,EAAE,IAAI,EAAE,KAAK,YAAY,GAC3B,OAAO,KAAK,OAAQ,MAAM,EAGxB,EAAE,IAAI,EAAE,KAAK,gBAAgB,IAC/B,OAAO,KAAK,CACV,SAAU,WACV,MAAO,OACT,CAAC,EACD,OAAO,GAAG,aAAc,UAAY,CAClC,EAAE,IAAI,EAAE,IAAI,YAAY,EACxB,KAAK,MAAQ,GAEb,KAAK,KAAK,CACZ,CAAC,GAGH,OAAO,GAAG,UAAW,UAAY,CAC/B,EAAE,IAAI,EAAE,SAAS,qBAAqB,CACxC,EAAE,KAAK,IAAI,CAAC,EACZ,OAAO,KAAK,MAAO,EAAE,IAAI,EAAE,KAAK,WAAW,CAAC,EAAE,SAAS,YAAY,CACrE,CAAC,CAEL,EAEA,EAAE,iBAAmB,SAAU,UAAW,CAAC,EAG3C,EAAE,qBAAuB,SAAU,WAAY,CAC7C,GAAI,WAAW,SAAS,6BAA6B,GAAK,WAAW,KAAK,gCAAgC,EAAE,OAAQ,CAClH,IAAI,sBAAwB,UAAiC,CAC3D,IAAIC,YAAa,KACb,GAAKA,YAAW,MAAM,EACtB,GAAKA,YAAW,OAAO,EACvB,GAAK,GAAK,GACV,OAAS,EAAE,iCAAkC,IAAI,EACjD,GAAK,OAAO,KAAK,OAAO,EAAI,OAAO,KAAK,QAAQ,EAChD,KAAO,EAAE,0BAA2B,IAAI,EACxC,MAAQ,GAEZ,GAAI,GAAK,GAAI,CACX,IAAI,GAAK,GAAK,GAAK,MAAQ,EAC3B,KAAK,IAAI,CACP,WAAY,GAAK,IAAM,EAAI,MAC3B,WAAY,GACZ,OAAQ,GAAK,MAAQ,EACrB,MAAO,EACT,CAAC,CACH,KAAO,CACL,IAAI,GAAK,GAAK,GAAK,MAAQ,EAAI,GAC/B,KAAK,IAAI,CACP,UAAW,CAAC,MACZ,YAAa,GAAK,IAAM,EACxB,OAAQ,GAAK,MAAQ,EACrB,MAAO,EACT,CAAC,CACH,CACF,EAEA,sBAAsB,KAAK,UAAU,EAAE,EACvC,EAAE,MAAM,EAAE,GAAG,mBAAqB,WAAW,KAAK,oBAAoB,EAAG,sBAAsB,KAAK,UAAU,CAAC,CACjH,CACF,EAGA,KAAK,cAAgB,SAAU,UAAW,CAExC,EAAE,yDAAyD,EAAE,KAAK,UAAY,CAC5E,IAAI,IAAM,EAAE,IAAI,EAAE,KAAK,WAAW,EAE9B,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,EAErC,IAAI,QAAQ,IAAI,EAAI,GACtB,EAAE,IAAI,EAAE,KAAK,gBAAiB,IAAI,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,EAEjE,EAAE,IAAI,EAAE,KAAK,gBAAiB,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,EAGtE,CAAC,EAED,EAAE,mBAAmB,SAAS,EAE9B,EAAE,iBAAiB,SAAS,EAE5B,EAAE,eAAe,SAAS,EAE1B,EAAE,MAAM,EAAE,GAAG,uCAAwC,UAAY,CAC/D,EAAE,mBAAmB,SAAS,EAE9B,EAAE,iBAAiB,SAAS,CAC9B,CAAC,EAED,EAAE,yBAA0B,SAAS,EAAE,GAAG,QAAS,SAAU,IAAK,CAChE,IAAI,eAAe,EACnB,IAAI,WAAa,EAAE,IAAI,EAAE,QAAQ,kBAAkB,EAEnD,WAAW,SAAS,0BAA0B,EAE9C,IAAI,GAAK,WAAW,KAAK,oBAAoB,EAEzC,GAAG,QAAQ,gBAAgB,IAAM,EACnC,EAAE,YAAY,UAAU,EAAE,EAAE,OAAO,UAAU,EAE7C,EAAE,UAAU,UAAU,EAAE,EAAE,OAAO,KAAK,CAE1C,CAAC,EAED,EAAE,yBAA0B,SAAS,EAAE,GAAG,QAAS,SAAU,IAAK,CAChE,IAAI,eAAe,EACnB,IAAI,WAAa,EAAE,IAAI,EAAE,QAAQ,kBAAkB,EAEnD,WAAW,YAAY,0BAA0B,EAEjD,IAAI,GAAK,WAAW,KAAK,oBAAoB,EAEzC,GAAG,QAAQ,gBAAgB,IAAM,EACnC,EAAE,YAAY,UAAU,EAAE,EAAE,OAAO,UAAU,GAE7C,EAAE,UAAU,UAAU,EAAE,EAAE,OAAO,MAAM,EAEvC,EAAE,UAAU,UAAU,EAAE,EAAE,OAAO,eAAe,CAAC,EAErD,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,EAAE,iDAAkD,SAAS,EAAE,IAAI,OAAO,EAC1E,EAAE,MAAM,EAAE,IAAI,IAAM,EAAE,kBAAkB,EAAE,KAAK,oBAAoB,CAAC,EACpE,EAAE,MAAM,EAAE,IAAI,sCAAsC,EAEpD,EAAE,qBAAqB,SAAS,EAEhC,EAAE,mBAAmB,SAAS,EAE9B,EAAE,iBAAiB,SAAS,CAC9B,CACF,EAEA,OAAO,wBAA0B,UAAY,CAC3C,MAAM,aAAa,gBAAgB,CACrC,EAGA,GAAG,SAAS,KAAK,CACf,KAAM,QACN,QAAS,MAAM,YACjB,CAAC,EACD,MAAM,WAAa,IAAI,UAAY,CACjC,IAAI,EAAI,KAER,EAAE,OAAS,CACT,KAAM,GACN,OAAQ,CACN,QAAW,CAAC,EACZ,OAAQ,CAAC,CACP,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,cACf,QAAW,CAAC,CACV,WAAc,KAChB,CAAC,CACH,EAAG,CACD,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,6BACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,MACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,MACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,gBACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,aACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,kBACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,CAAC,EACD,MAAO,CAAC,CACN,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,iBACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,6BACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,6BACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,oBACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,MACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,MACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,gBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,gBACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,iCACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,iCACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,aACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,kBACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,gBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,CAAC,EACD,KAAM,CAAC,CACL,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,cACf,QAAW,CAAC,CACV,WAAc,KAChB,CAAC,CACH,EAAG,CACD,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,iBACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,yBACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,6BACf,QAAW,CAAC,CACV,WAAc,KAChB,CAAC,CACH,EAAG,CACD,YAAe,0BACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,MACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,gBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,gBACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,iCACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,aACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,UACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,CAAC,EACD,MAAO,CAAC,CACN,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,0BACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,MACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,UACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,kBACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,CAAC,EACD,UAAW,CAAC,CACV,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,yBACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,6BACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,0BACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,qBACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,oBACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,MACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,MACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,MACf,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,gBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,WACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,OACf,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,kBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,UACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,UACf,YAAe,qBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,eACf,YAAe,gBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,kBACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,WACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,EAAG,CACD,YAAe,QACf,YAAe,mBACf,QAAW,CAAC,CACV,MAAS,SACX,CAAC,CACH,CAAC,CACH,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,EACzC,gBAAS,QAAQ,CACf,QAAS,OACX,EAAG,SAAU,QAASC,QAAQ,CACxBA,UAAW,OAAO,KAAK,eAAe,IACxC,SAAS,OAAOA,OAAM,EAGxB,SAAS,QAAQ,OAAO,CAC1B,CAAC,EACM,QACT,EAEA,KAAK,UAAY,SAAU,UAAW,CACpC,IAAI,KAAO,EAAE,8BAA+B,SAAS,EACrD,OAAO,EAAE,UAAU,IAAI,EAAE,KAAK,SAAU,QAAS,CAC/C,IAAI,WAAa,CACf,KAAM,EAAE,OAAO,KACf,OAAQ,EAAE,OAAO,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,CAAC,EACtD,OAAQ,QAAQ,CAAC,EAAE,SAAS,SAC5B,YAAa,GACb,uBAAwB,GACxB,iBAAkB,GAClB,YAAa,EACf,EACA,EAAE,IAAM,IAAI,OAAO,KAAK,IAAI,KAAK,CAAC,EAAG,UAAU,EAC/C,EAAE,OAAS,EAAE,IAAI,UAAU,EAC3B,IAAI,OAAS,IAAI,OAAO,KAAK,OAAO,CAClC,IAAK,EAAE,IACP,SAAU,EAAE,OACZ,UAAW,EACb,CAAC,EACD,OAAO,KAAK,MAAM,eAAe,OAAQ,SAAU,UAAY,CAC7D,OAAO,KAAK,MAAM,QAAQ,EAAE,IAAK,QAAQ,EAEzC,EAAE,IAAI,UAAU,EAAE,MAAM,CAC1B,CAAC,CACH,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,UAAY,CAC7B,IAAI,aAEJ,OAAQ,OAAQ,CACd,IAAK,eACH,aAAe,MAAM,QAAQ,iBAC7B,MAEF,IAAK,mBACH,aAAe,MAAM,QAAQ,kBAC7B,MAEF,QACE,aAAe,MAAM,QAAQ,aAC7B,KACJ,CAGA,GAAI,QAAQ,WAAY,CACtB,IAAI,cAAgB,KAAK,QAAQ,cAAc,EAC/C,cAAc,SAAS,oCAAoC,EAC3D,cAAc,KAAK,uBAAuB,EAAE,KAAK,mCAAqC,aAAe,QAAQ,CAC/G,CACF,CAAC,CACH,EAEA,KAAK,cAAgB,SAAU,OAAQ,CACrC,IAAI,WAAa,EAAE,MAAM,EAEzB,OAAO,eAAiB,UAAY,CAC7B,QAAQ,aACb,WAAW,SAAS,oCAAoC,EACxD,WAAW,KAAK,uBAAuB,EAAE,KAAK,mCAAqC,MAAM,QAAQ,UAAY,QAAQ,EACvH,EAGA,IAAI,IAAM,WAAW,KAAK,SAAS,EAE/B,OAAO,KAAQ,UAAY,MAAQ,IAKvC,MAAM,eAAe,+CAAiD,IAAK,UAAY,CACrF,EAAE,UAAU,UAAU,CACxB,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,OAAQ,CACnC,OAAO,OAAO,QAAW,aAAe,OAAO,OAAO,MAAS,aACjE,OAAO,KAAK,MAAM,eAAe,KAAK,IAAK,QAAQ,CAEvD,CACF,EAEA,GAAG,SAAS,KAAK,CACf,KAAM,MACN,QAAS,MAAM,UACjB,CAAC,EAED,MAAM,sBAAwB,IAAI,UAAY,CAC5C,KAAK,cAAgB,SAAU,UAAW,CAExC,EAAE,6BAA8B,SAAS,EAAE,KAAK,UAAY,CAI1D,QAHI,KAAO,EAAE,IAAI,EAAE,KAAK,0BAA0B,EAC9C,QAAU,KAEL,EAAI,EAAG,EAAI,MAAM,SAAS,UAAU,OAAQ,IAC/C,MAAM,SAAS,UAAU,CAAC,EAAE,MAAQ,OACtC,QAAU,MAAM,SAAS,UAAU,CAAC,EAAE,SAI1C,GAAI,QAAS,CACX,IAAI,SAAW,CACb,OAAQ,KACR,QAAS,QACT,yBAA0B,EAAE,IAAI,EAAE,QAAQ,kBAAkB,EAC5D,YAAa,CAAC,CAChB,EAEA,MAAM,SAAS,WAAW,KAAK,QAAQ,EAEvC,EAAE,IAAI,EAAE,KAAK,uBAAwB,QAAQ,EAC7C,QAAQ,cAAc,KAAK,SAAS,WAAW,EAAE,IAAI,CACvD,CACF,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAE1C,EAAE,6BAA8B,SAAS,EAAE,KAAK,UAAY,CAC1D,MAAM,SAAS,cAAc,KAAK,EAAE,IAAI,EAAE,KAAK,sBAAsB,EAAE,WAAW,EAAE,IAAI,CAC1F,CAAC,CACH,EAEA,KAAK,cAAgB,SAAU,OAAQ,CAErC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,IAAM,GAAG,CAClD,CACF,EAEA,GAAG,SAAS,KAAK,CACf,KAAM,kBACN,QAAS,MAAM,qBACjB,CAAC,EAQD,MAAM,kBAAoB,SAAU,UAAW,CAC7C,IAAI,aAAe,6BACf,UAAY,iCACZ,WAAa,cAEjB,KAAK,cAAgB,SAAUC,WAAW,CACxC,IAAI,OAAS,KAEb,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,OACL,IAAI,SAAW,GAEf,EAAE,MAAM,EAAE,GAAG,qBAAqB,OAAO,KAAK,SAAS,EAAE,OAAO,KAAK,SAAS,EAAG,SAAU,EAAG,KAAM,CAC9F,KAAK,QAAQ,KAAO,OAAO,YAC7B,OAAO,UAAU,cAAc,KAAK,MAAM,EAAE,KAAK,QAAQ,GAAI,KAAK,QAAQ,MAAO,SAAU,OAAO,WAAW,KAAK,0BAA0B,EAAG,OAAO,KAAK,QAAQ,WAAc,WAAW,EAE5L,SAAW,GAEf,CAAC,EAEG,KAAK,WAAW,KAAK,mBAAmB,IAC1C,KAAK,UAAU,cAAc,KAAK,IAAI,EAAE,KAAK,WAAW,KAAK,mBAAmB,EAAG,KAAK,WAAW,KAAK,8BAA8B,EAAG,SAAU,KAAK,WAAW,KAAK,0BAA0B,EAAG,KAAK,WAAW,KAAK,kCAAkC,CAAC,EAC7P,SAAW,GAEf,EAEA,KAAK,gBAAkB,UAAY,CACjC,EAAE,MAAM,EAAE,IAAI,qBAAqB,OAAO,KAAK,SAAS,EAAE,OAAO,KAAK,SAAS,CAAC,EAChF,KAAK,WAAW,IAAI,OAAO,EAEvB,KAAK,QACP,KAAK,OAAO,IAAI,OAAO,CAE3B,EAEA,KAAK,UAAY,CAEf,gBAAiB,UAA2B,CAC1C,OAAO,IAAI,QAAQ,SAAU,QAAS,OAAQ,CAC5C,IAAI,aAEA,eAAe,UAAU,IAC3B,aAAe,KAAK,MAAM,eAAe,UAAU,CAAC,GAGlD,aACF,QAAQ,YAAY,EAEhB,UAAU,YACZ,UAAU,YAAY,mBAAmB,SAAU,SAAU,CAC3D,IAAI,OAAS,CACX,SAAU,SAAS,OAAO,SAC1B,UAAW,SAAS,OAAO,SAC7B,EAEA,MAAM,qBAAsB,CAC1B,OAAQ,MACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,MAAM,CAC7B,CAAC,EAED,eAAe,UAAU,EAAI,KAAK,UAAU,MAAM,EAClD,QAAQ,MAAM,CAChB,EAAG,UAAY,CACb,QAAQ,EAAK,CACf,EAAG,CACD,WAAY,KAEZ,QAAS,GACX,CAAC,EAED,QAAQ,EAAK,CAGnB,CAAC,CACH,EAEA,mBAAoB,SAA4B,UAAW,GAAI,CAC7D,OAAO,EAAE,IAAI,KAAK,WAAW,QAAQ,aAAc,SAAS,EAAG,EAAE,CACnE,EAIA,kBAAmB,SAA2B,QAAS,QAAS,WAAY,CAC1E,IAAI,KAAO,KAAK,GAAK,IACjB,OAAS,aAAe,SAAW,QAAU,KAC7C,MAAQ,QAAQ,SAAW,KAC3B,OAAS,QAAQ,UAAY,KAC7B,MAAQ,QAAQ,SAAW,KAC3B,OAAS,QAAQ,UAAY,KAC7B,KAAO,OAAS,OAChB,KAAO,MAAQ,MACf,EAAI,KAAK,IAAI,KAAK,IAAI,KAAO,CAAC,EAAG,CAAC,EAAI,KAAK,IAAI,KAAK,EAAI,KAAK,IAAI,KAAK,EAAI,KAAK,IAAI,KAAK,IAAI,KAAO,CAAC,EAAG,CAAC,EACxG,EAAI,EAAI,KAAK,MAAM,KAAK,KAAK,CAAC,EAAG,KAAK,KAAK,EAAI,CAAC,CAAC,EACrD,OAAO,OAAS,CAClB,EAEA,wBAAyB,SAAiC,OAAQ,CAChE,IAAI,WAAa,KAAK,OAAO,KAAK,oBAAoB,EAAE,KAAK,aAAa,EACtE,KAAO,KACX,KAAK,OAAO,KAAK,yBAAyB,EAAE,KAAK,UAAY,CAC3D,IAAI,OAAS,KAET,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,UAAU,kBAAkB,OAAQ,WAAY,UAAU,EAAE,QAAQ,CAAC,EACzF,EAAE,IAAI,EAAE,KAAK,QAAQ,EAErB,WAAW,UAAY,CACrB,EAAE,MAAM,EAAE,QAAQ,8CAA8C,EAAE,SAAS,KAAK,CAClF,EAAG,CAAC,CACN,CAEA,EAAE,IAAI,EAAE,KAAK,gBAAiB,MAAM,CACtC,CAAC,CACH,EAEA,cAAe,SAAuB,UAAW,aAAc,SAAU,uBAAwB,mBAAoB,CACnH,IAAI,OAAS,KAEb,KAAK,WAAW,IAAI,QAAS,sCAAsC,EACnE,KAAK,WAAW,IAAI,QAAU,KAAK,UAAW,uCAAuC,EACrF,EAAE,6BAA6B,EAAE,OAAO,EAEpC,SACF,KAAK,WAAW,KAAK,EACX,oBAKV,KAAK,WAAW,SAAS,YAAY,EAAE,SAAS,SAAS,EACzD,KAAK,WAAW,IAAI,SAAU,KAAK,WAAW,YAAY,EAAI,EAAI,KAAK,WAAW,YAAY,EAAI,KAAO,MAAM,IAJ/G,KAAK,WAAW,SAAS,YAAY,EAAE,SAAS,SAAS,EACzD,KAAK,WAAW,IAAI,SAAU,KAAK,GAMjC,oBACF,KAAK,UAAU,mBAAmB,KAAK,KAAM,UAAW,SAAU,SAAU,CAC1E,GAAI,SAAS,KAAK,EAAE,OAAS,GAAK,CAAC,SAAS,SAAS,WAAW,EAAG,CACjE,OAAO,WAAW,KAAK,QAAQ,EAE/B,OAAO,WAAW,KAAK,OAAO,WAAW,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAGlE,OAAO,WAAW,KAAK,+CAA+C,EAAE,KAAK,YAAY,EAErF,wBACF,OAAO,WAAW,KAAK,4CAA4C,EAAE,OAAO,EAG9E,OAAO,WAAW,KAAK,WAAW,EAAE,SAAS,MAAM,EAEnD,OAAO,OAAS,EAAE,MAAM,EAAE,KAAK,6BAA6B,EAC5D,IAAI,MAAQ,IAAI,QAAQ,OAAO,OAAQ,OAAO,SAAS,EAuBvD,GArBA,OAAO,WAAW,GAAG,QAAS,uCAAwC,UAAY,CAChF,aAAM,KAAK,EAEX,OAAO,UAAU,gBAAgB,EAAE,KAAK,SAAU,OAAQ,CACpD,QAAU,OAAO,OAAO,KAAK,yBAAyB,EAAE,QAE1D,OAAO,UAAU,mBAAmB,KAAK,OAAQ,UAAW,SAAUC,UAAU,CAC9E,OAAO,OAAO,KAAK,4BAA4B,EAAE,KAAK,EAAEA,SAAQ,EAAE,KAAK,4BAA4B,EAAE,KAAK,CAAC,EAE3G,OAAO,UAAU,wBAAwB,KAAK,MAAM,EAAE,MAAM,CAC9D,CAAC,CAEL,CAAC,EAEM,EACT,CAAC,EAED,OAAO,OAAO,GAAG,QAAU,OAAO,UAAW,wCAAyC,UAAY,CAChG,MAAM,MAAM,CACd,CAAC,EAEG,SACF,OAAO,WAAW,UAAU,GAAG,MAC1B,CACL,OAAO,WAAW,YAAY,YAAY,EAE1C,IAAI,UAAY,OAAO,WAAW,KAAK,+BAA+B,EAAE,YAAY,EAEpF,OAAO,WAAW,IAAI,SAAU,UAAY,EAAI,UAAY,KAAO,MAAM,CAC3E,CACF,CACF,CAAC,CAEL,CACF,EAEA,KAAK,cAAc,SAAS,CAC9B,EAGA,GAAG,SAAS,KAAK,CACf,KAAM,qBACN,QAAS,MAAM,iBACjB,CAAC,EAQD,MAAM,MAAQ,IAAI,UAAY,CAM5B,IAAI,oBAAsB,2BAE1B,KAAK,cAAgB,SAAU,UAAW,CACxC,IAAI,OAAS,KAEb,KAAK,UAAY,MAAM,qBAAqB,SAAS,EACrD,KAAK,WAAa,EAAE,SAAS,EAC7B,KAAK,MAAQ,IAAI,QAAQ,KAAK,WAAY,KAAK,SAAS,EACxD,IAAI,eAAiB,KAAK,WAAW,KAAK,kBAAkB,EACxD,aAAe,KAAK,WAAW,KAAK,eAAe,EACnD,UAAY,GACZ,SAAW,KAAK,WAAW,KAAK,WAAW,EAC3C,cAAgB,OAAO,aAAa,QAAQ,mBAAmB,EAGnE,GAAI,cAAe,CACjB,IAAI,kBAAoB,IAAI,KAAK,EAAE,QAAQ,EAAI,eAAkB,MAE7D,iBAAmB,iBACrB,UAAY,GAEhB,CAGI,KAAK,WAAW,KAAK,0BAA0B,EAAE,SACnD,UAAY,GACZ,aAAe,EAEX,KAAK,WAAW,KAAK,mCAAmC,EAAE,QAC5D,KAAK,UAAU,oBAAoB,KAAK,IAAI,GAK5C,4BAA4B,KAAK,OAAO,SAAS,QAAQ,IAC3D,UAAY,KAIV,WAAa,WACf,WAAW,UAAY,CACrB,OAAO,MAAM,KAAK,CACpB,EAAG,aAAe,GAAI,EAIxB,KAAK,WAAW,GAAG,QAAU,KAAK,UAAW,wCAAyC,UAAY,CAChG,OAAO,MAAM,MAAM,UAAY,CAC7B,OAAO,UAAU,oBAAoB,KAAK,MAAM,CAClD,CAAC,CACH,CAAC,CACH,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,EAEA,GAAG,SAAS,KAAK,CACf,KAAM,mBACN,QAAS,MAAM,KACjB,CAAC,EACD,MAAM,WAAa,CACjB,KAAM,SAAc,QAAS,CAC3B,GAAI,QAAQ,IAAI,QAAU,EAI1B,KAAI,KAAO,QAAQ,IACf,cAAgB,IAChB,qBAAuB,EAAE,EACzB,iBAAmB,GAEvB,KAAK,GAAG,wBAAyB,yDAA0D,SAAU,IAAK,CACxG,IAAI,mBAAqB,EAAE,IAAI,EAE/B,GAAI,IAAI,MAAQ,aAAc,CAC5B,aAAa,gBAAgB,EAC7B,aAAa,mBAAmB,KAAK,mBAAmB,CAAC,EACzD,IAAI,cAAgB,mBAAmB,SAAS,kCAAkC,EAElF,cAAc,IAAI,oBAAoB,EAAE,YAAY,iCAAiC,EACrF,qBAAuB,mBAEvB,IAAI,aAAe,cAAc,QAAU,EAAI,EAAI,cAE/C,oBAAsB,WAAW,UAAY,CAC/C,mBAAmB,SAAS,iCAAiC,EAAE,SAAS,kCAAkC,EAAE,YAAY,iCAAiC,CAC3J,EAAG,YAAY,EACf,iBAAmB,oBACnB,mBAAmB,KAAK,mBAAoB,mBAAmB,CACjE,MAEE,aAAa,mBAAmB,KAAK,kBAAkB,CAAC,EACxD,mBAAmB,KAAK,oBAAqB,WAAW,UAAY,CAClE,mBAAmB,YAAY,iCAAiC,CAClE,EAAG,aAAa,CAAC,EAInB,mBAAmB,SAAS,iBAAiB,EAAE,KAAK,gBAAiB,IAAI,MAAQ,YAAY,CAC/F,CAAC,EAED,IAAI,aAAe,SAAsB,IAAK,CAC5C,GAAI,EAAE,MAAM,EAAE,MAAM,EAAI,KACtB,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,EAE9C,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,iCAAiC,EAE7D,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,YAAY,GAGrC,EAAE,oDAAoD,EAAE,QAAQ,YAAY,EAE5E,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,YAAY,GAIhC,WAEA,IAAI,MAAQ,SAEjB,EAAE,IAAI,EAAE,KAAK,sBAAsB,GAAK,IAAI,UAAY,EAAE,IAAI,EAAE,KAAK,sBAAsB,EAAI,IACjG,MAAO,GAIf,EAEA,KAAK,GAAG,4BAA6B,6EAA8E,YAAY,EAE/H,IAAI,eAAiB,SAAwB,IAAK,CAChD,GAAI,IAAI,OAAS,GAAI,CACnB,IAAI,QAAU,EAAE,IAAI,EAAE,OAAO,EAC7B,eAAQ,QAAQ,QAAQ,SAAS,iCAAiC,EAAI,aAAe,YAAY,EAC1F,EACT,CACF,EAEA,KAAK,GAAG,UAAW,wFAAyF,cAAc,EAEtH,QAAQ,eACV,EAAE,QAAQ,aAAa,EAAE,GAAG,wBAAyB,yDAA0D,SAAU,IAAK,CAC5H,EAAE,EAAE,0CAA2C,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CACzF,CAAC,EAAE,GAAG,4BAA6B,6EAA8E,SAAU,IAAK,CAC9H,IAAI,SAAW,aAAa,KAAK,EAAE,EAAE,0CAA2C,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC,CAAC,EAAE,GAAG,EAEtJ,GAAI,WAAa,GACf,MAAO,EAEX,CAAC,EAAE,GAAG,UAAW,wFAAyF,SAAU,IAAK,CACvH,GAAI,IAAI,OAAS,GACf,sBAAe,KAAK,EAAE,EAAE,0CAA2C,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,8BAA8B,EAAE,CAAC,CAAC,EAAE,GAAG,EAC7I,EAEX,CAAC,EAIH,KAAK,GAAG,QAAS,+BAAgC,UAAY,CAC3D,OAAI,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,+BAA+B,EAAE,SAAS,+BAA+B,EACxG,EAAE,IAAI,EAAE,SAAS,yBAAyB,EAAE,KAAK,EAAE,UAAU,IAAK,UAAY,CAC5E,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,wCAAwC,EAClE,EAAE,IAAI,EAAE,WAAW,OAAO,CAC5B,CAAC,EAED,EAAE,IAAI,EAAE,SAAS,yBAAyB,EAAE,KAAK,EAAE,QAAQ,IAAK,UAAY,CAC1E,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,wCAAwC,EACrE,EAAE,IAAI,EAAE,WAAW,OAAO,CAC5B,CAAC,EAGI,EACT,CAAC,EACD,KAAK,GAAG,QAAS,oDAAqD,UAAY,CAChF,SAAE,IAAI,EAAE,SAAS,8BAA8B,EAAE,QAAQ,OAAO,EACzD,EACT,CAAC,EACH,EACA,QAAS,SAAiB,KAAM,eAAgB,CAC9C,KAAK,IAAI,cAAc,EAAE,IAAI,yDAAyD,CACxF,CACF,EACA,MAAM,MAAQ,CACZ,KAAM,4GAA8G,MAAM,QAAQ,iBAAmB,8HACrJ,MAAO,4GAA8G,MAAM,QAAQ,kBAAoB,2HACvJ,MAAO,yNAA2N,MAAM,QAAQ,kBAAoB,uGACpQ,YAAa,oOAAsO,MAAM,QAAQ,iBAAmB,+DACpR,aAAc,qOAAuO,MAAM,QAAQ,kBAAoB,8DACvR,YAAa,4GAA8G,MAAM,QAAQ,iBAAmB,mHAC5J,KAAM,6MACN,MAAO,wXACT,EAEA,GAAI,CACF,MAAM,QAAQ,SAAW,KAAK,MAAM,SAAS,gBAAgB,cAAc,mBAAmB,EAAE,WAAW,CAC7G,OAAS,EAAG,CACV,MAAM,QAAQ,SAAW,CAAC,CAC5B,CAEA,MAAM,qBAAuB,SAAU,UAAW,CAChD,MAAO,CAAC,IAAK,EAAE,SAAS,EAAE,KAAK,cAAc,EAAG,EAAE,SAAS,EAAE,KAAK,YAAY,CAAC,EAAE,KAAK,EAAE,CAC1F,EAEA,MAAM,mBAAqB,SAAU,OAAQ,CAW3C,QATI,cAAgB,EAAE,yDAAyD,EAC3E,eAAiB,EAAE,oCAAoC,EAAE,SAAS,aAAa,EAC/E,gBAAkB,EAAE,sCAAsC,EAAE,SAAS,aAAa,EAClF,mBAAqB,EAAE,wCAAwC,EAAE,SAAS,aAAa,EACvF,OAAS,EAAE,mEAAmE,EAAE,KAAK,OAAO,KAAK,EAAE,SAAS,kBAAkB,EAC9H,OAAS,EAAE,kEAAkE,EAAE,KAAK,OAAO,IAAI,EAAE,SAAS,kBAAkB,EAC5H,MAAQ,EAAE,kEAAkE,EAAE,KAAK,OAAO,IAAI,EAAE,SAAS,kBAAkB,EAC3H,kBAAoB,KAEf,EAAI,EAAG,EAAI,OAAO,OAAO,OAAQ,IAAK,CAC7C,IAAI,IAAM,OAAO,OAAO,CAAC,EACzB,EAAE,4CAA4C,EAAE,KAAK,WAAY,IAAI,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,SAAS,eAAe,CAC3H,CAEI,OAAO,OAAO,SAAW,GAC3B,cAAc,SAAS,8BAA8B,EAIvD,IAAI,aAAe,SAAsB,OAAQ,OAAQ,CAEvD,IAAI,OAAS,kBAAkB,MAAM,EAAI,cAAc,MAAM,EACzD,OAAS,kBAAkB,OAAO,EAAI,cAAc,OAAO,EAE/D,GAAI,QAAU,OAAQ,CACpB,IAAI,KAAO,cAAc,MAAM,EAAI,EAC/B,KAAO,cAAc,OAAO,EAAI,EAChC,kBAAoB,OAAS,KAC7B,kBAAoB,OAAS,KAE7B,aAAe,EACf,aAAe,EAEnB,GAAI,OAAQ,CACV,IAAI,mBAAqB,kBAAkB,MAAM,EAAI,cAAc,MAAM,GAAK,EAAI,KAClF,aAAe,KAAK,MAAM,CAAC,kBAAoB,iBAAiB,CAClE,CAEA,GAAI,OAAQ,CACV,IAAI,mBAAqB,kBAAkB,OAAO,EAAI,cAAc,OAAO,GAAK,EAAI,KACpF,aAAe,KAAK,MAAM,CAAC,kBAAoB,iBAAiB,CAClE,CAEA,kBAAkB,IAAI,YAAa,CAAC,eAAgB,aAAc,OAAQ,aAAc,QAAQ,EAAE,KAAK,EAAE,CAAC,CAC5G,CACF,EAIA,cAAc,GAAG,2CAA4C,yBAA0B,SAAU,IAAK,CACpG,IAAI,eAAe,EAEnB,EAAE,IAAI,EAAE,SAAS,+BAA+B,EAAE,SAAS,gCAAgC,EAAE,YAAY,+BAA+B,EAExI,kBAAoB,EAAE,4EAA4E,EAClG,kBAAkB,GAAG,OAAQ,UAAY,CACvC,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,aAAa,IAAI,QAAS,IAAI,OAAO,CACvC,CAAC,EAAE,KAAK,MAAO,EAAE,IAAI,EAAE,KAAK,UAAU,CAAC,EACvC,eAAe,KAAK,iBAAiB,CACvC,CAAC,EAED,cAAc,GAAG,kDAAmD,SAAU,IAAK,CACjF,GAAI,IAAI,OAAS,YAAa,CAC5B,IAAI,MAAQ,IAAI,QAAQ,CAAC,EACzB,aAAa,MAAM,QAAS,MAAM,OAAO,CAC3C,MACE,aAAa,IAAI,QAAS,IAAI,OAAO,CAEzC,CAAC,EAED,cAAc,GAAG,0BAA2B,0BAA2B,SAAU,IAAK,CACpF,IAAI,gBAAgB,CACtB,CAAC,EAED,cAAc,GAAG,sBAAuB,wBAAyB,SAAU,IAAK,CAC9E,IAAI,eAAe,EACnB,IAAI,MAAQ,gBAAgB,KAAK,gCAAgC,EAAE,KAAK,EAEpE,MAAM,SAAW,IACnB,MAAQ,gBAAgB,KAAK,8BAA8B,GAG7D,MAAM,QAAQ,QAAQ,CACxB,CAAC,EAED,cAAc,GAAG,sBAAuB,wBAAyB,SAAU,IAAK,CAC9E,IAAI,eAAe,EACnB,IAAI,MAAQ,gBAAgB,KAAK,gCAAgC,EAAE,KAAK,EAEpE,MAAM,SAAW,IACnB,MAAQ,gBAAgB,KAAK,6BAA6B,GAG5D,MAAM,QAAQ,QAAQ,CACxB,CAAC,EAED,cAAc,GAAG,sBAAuB,yBAA0B,SAAU,IAAK,CAC/E,IAAI,eAAe,EAEnB,cAAc,IAAI,gBAAgB,EAElC,cAAc,SAAS,gCAAgC,EAEvD,IAAI,gBAAkB,cAAc,IAAI,qBAAqB,EAC7D,gBAAkB,gBAAgB,QAAQ,IAAI,EAAI,GAAK,WAAW,eAAe,EAAI,WAAW,eAAe,EAAI,IACnH,WAAW,UAAY,CACrB,cAAc,OAAO,EACrB,EAAE,MAAM,EAAE,YAAY,qBAAqB,CAC7C,EAAG,eAAe,CACpB,CAAC,EAGD,EAAE,MAAM,EAAE,YAAY,qBAAqB,EAC3C,EAAE,iBAAiB,EAAE,OAAO,EAE5B,EAAE,MAAM,EAAE,SAAS,qBAAqB,EACxC,cAAc,SAAS,MAAM,EAE7B,gBAAgB,KAAK,8BAAgC,OAAO,QAAU,EAAI,OAAO,QAAU,GAAK,GAAG,EAAE,QAAQ,QAAQ,EAErH,WAAW,UAAY,CACrB,cAAc,YAAY,4BAA4B,CACxD,EAAG,EAAE,CACP,EAEA,MAAM,uBAAyB,IAAI,UAAY,CAC7C,KAAK,cAAgB,SAAU,OAAQ,CACrC,EAAE,cAAe,MAAM,EAAE,QAAQ,WAAW,EAC5C,MAAM,iBAAiB,MAAM,EAC7B,MAAM,mBAAmB,MAAM,CACjC,EAEA,KAAK,gBAAkB,SAAU,OAAQ,CACvC,MAAM,sBAAsB,MAAM,EAClC,MAAM,cAAc,qBAAqB,EAAE,cAAe,MAAM,CAAC,EACjE,EAAE,aAAc,MAAM,EAAE,MAAM,SAAS,CACzC,CACF,EA4BA,MAAM,aAAe,IAAI,UAAY,CACnC,IAAI,EAAI,KAER,EAAE,gBAAkB,UAAY,CAC9B,GAAI,CAAC,OAAO,UAAW,CACrB,SAAS,iBAAiB,yBAA0B,EAAE,gBAAgB,KAAK,IAAI,CAAC,EAChF,MACF,CAEA,OAAO,UAAU,UAAU,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EACrD,OAAO,UAAU,gBAAgB,CACnC,EAEA,KAAK,KAAO,SAAU,UAAW,UAAW,CAC1C,IAAI,UAAY,WAAa,CAAC,EAC1B,WAAa,UAEjB,EAAE,SAAS,EAAE,KAAK,uBAAuB,EAAE,KAAK,SAAU,MAAO,CAC/D,IAAI,cAAgB,EAAE,IAAI,EAAE,KAAK,sBAAsB,EACnD,QAAU,EAAE,IAAI,EAAE,KAAK,eAAe,EAAE,CAAC,EAE7C,GAAI,QAAQ,UAAY,QAEtB,OAAO,QAAQ,aAAa,CAAC,CAC3B,KAAM,WACN,QAAS,MACT,OAAQ,UAAY,CAClB,IAAI,UAAY,CACd,WAAY,QACZ,QAAS,OACX,EAEA,UAAU,KAAO,UAAY,CAC3B,KAAK,KAAK,KAAK,CACjB,EAAE,KAAK,SAAS,EAEhB,UAAU,MAAQ,UAAY,CAC5B,KAAK,KAAK,MAAM,CAClB,EAAE,KAAK,SAAS,EAEhB,UAAU,QAAU,UAAY,CAC9B,KAAK,KAAK,QAAQ,CACpB,EAAE,KAAK,SAAS,EAEhB,UAAU,KAAO,IAAI,QAAQ,KAAK,QAAS,CACzC,SAAU,CAAC,OAAQ,WAAY,OAAQ,SAAU,aAAc,YAAY,EAC3E,KAAM,CACJ,OAAQ,aACV,EACA,oBAAqB,GACrB,QAAS,oEACT,SAAU,CACR,SAAU,GACV,KAAM,EACR,CACF,CAAC,EACD,EAAE,IAAI,EAAE,KAAK,SAAU,SAAS,EAAE,SAAS,6BAA6B,EAEpE,UAAU,YACZ,EAAE,OAAO,EAAE,GAAG,UAAW,UAAU,UAAU,EAG3C,UAAU,aACZ,EAAE,OAAO,EAAE,GAAG,cAAe,UAAU,WAAW,EAGhD,UAAU,YACZ,UAAU,WAAW,SAAS,CAElC,EAAE,KAAK,IAAI,CACb,CAAC,CAAC,EACF,MAAM,cAAc,yEAAyE,UACpF,QAAQ,UAAY,UACzB,8EAA8E,KAAK,QAAQ,GAAG,EAAG,CAEnG,IAAI,KAAO,OAAO,wBAEd,iBAAmB,UAAY,CACjC,IAAI,UAAY,CACd,WAAY,UACZ,QAAS,OACX,EACI,QAAU,EAAE,IAAI,EAAE,KAAK,UAAU,EACrC,UAAU,OAAS,IAAI,GAAG,OAAO,QAAS,CACxC,QAAS,QACT,OAAQ,CACN,cAAe,SAAuB,MAAO,CACvC,MAAM,OAAS,GAAG,YAAY,OAAS,eACzC,MAAM,OAAO,OAAO,CAAC,CAEzB,CACF,CACF,CAAC,EAED,UAAU,KAAO,UAAY,CAC3B,KAAK,OAAO,UAAU,CACxB,EAAE,KAAK,SAAS,EAEhB,UAAU,MAAQ,UAAY,CAC5B,KAAK,OAAO,WAAW,CACzB,EAAE,KAAK,SAAS,EAEhB,UAAU,QAAU,UAAY,CAC9B,KAAK,OAAO,QAAQ,CACtB,EAAE,KAAK,SAAS,EAEhB,EAAE,IAAI,EAAE,KAAK,SAAU,SAAS,EAAE,SAAS,6BAA6B,EAEpE,UAAU,eACZ,UAAU,cAAc,SAAS,CAErC,EAAE,KAAK,IAAI,EAEX,OAAO,wBAA0B,UAAY,CAC3C,KAAK,EACL,iBAAiB,CACnB,EAEA,MAAM,eAAe,oCAAoC,CAC3D,CAEJ,CAAC,EAED,EAAE,SAAS,EAAE,GAAG,eAAgB,6DAA8D,UAAY,CAEpG,EAAE,MAAM,EAAE,MAAM,GAAK,KACvB,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,KAAK,EAI1B,EAAE,IAAI,EAAE,SAAS,sBAAsB,GACzC,EAAE,iBAAkB,UAAU,EAAE,KAAK,0BAA2B,EAAE,IAAI,EAAE,KAAK,UAAU,CAAC,CAE5F,CAAC,EAED,EAAE,SAAS,EAAE,GAAG,cAAe,6DAA8D,UAAY,CAEvG,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,CAC/B,CAAC,EAEG,UAAU,gBACZ,EAAE,SAAS,EAAE,GAAG,eAAgB,+BAAgC,UAAU,cAAc,EAGtF,UAAU,eACZ,EAAE,SAAS,EAAE,GAAG,cAAe,+BAAgC,UAAU,aAAa,EAGxF,EAAE,eAAgB,SAAS,EAAE,KAAK,UAAY,CACxC,UAAU,mBACZ,EAAE,IAAI,EAAE,GAAG,sCAAuC,UAAU,iBAAiB,EAG3E,UAAU,oBACZ,EAAE,IAAI,EAAE,GAAG,uCAAwC,UAAU,kBAAkB,CAEnF,CAAC,EAED,EAAE,SAAS,EAAE,GAAG,mCAAoC,0DAA2D,SAAU,EAAG,CAC1H,IAAI,QAAU,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,CAAC,EACxC,SAAW,EAAE,MAAQ,sBAEzB,MAAM,cAAc,sFAAsF,EAC1G,OAAO,QAAQ,aAAa,CAAC,CAC3B,KAAM,kBACN,QAAS,MACT,OAAQ,UAAY,CAClB,EAAE,IAAI,EAAE,KAAK,SAAU,IAAI,QAAQ,cAAc,OAAO,CAAC,EAEzD,EAAE,IAAI,EAAE,SAAS,6BAA6B,EAE1C,UAAU,mBACZ,UAAU,kBAAkB,OAAO,EAGjC,UACF,EAAE,IAAI,EAAE,QAAQ,cAAc,CAElC,EAAE,KAAK,IAAI,CACb,CAAC,CAAC,CACJ,CAAC,EAEG,EAAE,cAAe,SAAS,EAAE,QAC9B,OAAO,QAAQ,aAAa,CAAC,CAC3B,KAAM,aACN,QAAS,MACT,OAAQ,EAAE,gBAAgB,KAAK,EAAE,cAAe,SAAS,CAAC,CAC5D,CAAC,CAAC,EAIJ,EAAE,QAAQ,EAAE,GAAG,oBAAqB,UAAY,CAC9C,EAAE,8BAA8B,EAAE,KAAK,UAAY,CACjD,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,CAC/B,CAAC,CACH,CAAC,EAED,WAAW,UAAY,CACrB,EAAE,uBAAwB,IAAI,EAAE,OAAO,uBAAuB,EAAE,QAAQ,qBAAqB,CAC/F,EAAE,KAAK,SAAS,EAAG,EAAE,CACvB,EAEA,KAAK,QAAU,SAAU,UAAW,CAClC,EAAE,QAAQ,EAAE,IAAI,mBAAmB,EACnC,EAAE,SAAS,EAAE,IAAI,8CAA8C,EAC/D,EAAE,6DAA8D,SAAS,EAAE,KAAK,UAAY,CAC1F,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,QAAQ,CACjC,CAAC,EACD,EAAE,8BAA+B,SAAS,EAAE,IAAI,qBAAqB,EACrE,EAAE,eAAgB,SAAS,EAAE,IAAI,0EAA0E,CAC7G,CACF,EAEA,MAAM,8BAAgC,SAAU,OAAQ,QAAS,CAE/D,EAAE,OAAO,OAAO,CAAC,EAAE,KAAK,mEAAmE,EAAE,KAAK,UAAY,CACxG,OAAO,EAAE,IAAI,EAAE,KAAK,mCAAmC,GAAM,YAC3D,EAAE,IAAI,EAAE,KAAK,mCAAmC,IAAM,GACxD,EAAE,IAAI,EAAE,WAAW,UAAU,EAE7B,EAAE,IAAI,EAAE,KAAK,WAAY,EAAE,IAAI,EAAE,KAAK,mCAAmC,CAAC,EAG5E,EAAE,IAAI,EAAE,WAAW,UAAU,CAEjC,CAAC,EACD,EAAE,MAAM,EAAE,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,mEAAmE,EAAE,KAAK,UAAY,CACpH,OAAO,EAAE,IAAI,EAAE,KAAK,mCAAmC,GAAM,cAC/D,EAAE,IAAI,EAAE,KAAK,oCAAqC,OAAO,EAAE,IAAI,EAAE,KAAK,UAAU,GAAM,YAAc,EAAE,IAAI,EAAE,KAAK,UAAU,EAAI,EAAK,EACpI,EAAE,IAAI,EAAE,KAAK,WAAY,IAAI,EAEjC,CAAC,CACH,EAGA,MAAM,mBAAqB,SAAU,UAAW,CAC9C,IAAI,SAAW,EAAE,WAAY,SAAS,EAEtC,GAAI,UAAS,SAAS,qBAAqB,EAI3C,UAAS,SAAS,qBAAqB,EAEvC,EAAE,qBAAsB,SAAS,EAAE,KAAK,UAAY,CAClD,IAAI,WAAa,EAAE,IAAI,EAAE,GAAG,OAAQ,SAAU,IAAK,MAAO,CACxD,EAAE,oBAAqB,IAAI,EAAE,YAAY,kBAAkB,EAAE,SAAS,UAAU,CAClF,CAAC,EAAE,GAAG,eAAgB,SAAU,IAAK,MAAO,QAAS,KAAM,CACzD,EAAE,EAAE,IAAI,EAAE,QAAQ,UAAU,EAAE,KAAK,eAAe,EAAE,IAAI,CAAC,EAAE,QAAQ,iBAAiB,CACtF,CAAC,EAAE,MAAM,CACP,SAAU,GACV,KAAM,GACN,SAAU,GACV,aAAc,GACd,KAAM,GACN,OAAQ,GACR,aAAc,EAAE,IAAI,EAAE,SAAS,qBAAqB,EAAE,KAAK,6BAA6B,EACxF,WAAY,EAAE,IAAI,EAAE,SAAS,qBAAqB,EAAE,KAAK,2BAA2B,EACpF,UAAW,gEAAkE,MAAM,QAAQ,SAAW,KAAO,MAAM,MAAM,YAAc,YACvI,UAAW,gEAAkE,MAAM,QAAQ,KAAO,KAAO,MAAM,MAAM,aAAe,YACpI,WAAY,CAAC,CACX,WAAY,IACZ,SAAU,CACR,KAAM,GACN,OAAQ,GACR,KAAM,EACR,CACF,CAAC,CACH,CAAC,EAED,MAAM,aAAa,KAAK,SAAU,CAChC,WAAY,SAAoB,UAAW,CACzC,MAAM,8BAA8B,WAAW,MAAM,UAAU,EAAE,QAAS,WAAW,MAAM,UAAU,EAAE,YAAY,CACrH,EACA,cAAe,SAAuB,UAAW,CAC/C,MAAM,8BAA8B,WAAW,MAAM,UAAU,EAAE,QAAS,WAAW,MAAM,UAAU,EAAE,YAAY,CACrH,EACA,kBAAmB,SAA2B,QAAS,CACrD,MAAM,8BAA8B,WAAW,MAAM,UAAU,EAAE,QAAS,WAAW,MAAM,UAAU,EAAE,YAAY,CACrH,EACA,eAAgB,SAAwB,EAAG,CACrC,EAAE,MAAM,EAAE,MAAM,GAAK,KACvB,EAAE,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,iBAAkB,QAAS,EAAK,CAE/E,EACA,cAAe,SAAuB,EAAG,CACnC,EAAE,MAAM,EAAE,MAAM,GAAK,KACvB,EAAE,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,iBAAkB,QAAS,EAAI,CAE9E,EACA,WAAY,SAAoB,EAAG,CACjC,EAAE,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,iBAAkB,QAAS,EAAK,CAC7E,EACA,YAAa,SAAqB,EAAG,CACnC,EAAE,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,iBAAkB,QAAS,EAAI,CAC5E,EACA,kBAAmB,SAA2B,EAAG,CAE/C,EAAE,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,iBAAkB,QAAS,EAAK,EAE3E,EAAE,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,iBAAkB,gBAAiB,EAAK,CACrF,EACA,mBAAoB,SAA4B,EAAG,CACjD,EAAE,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,iBAAkB,QAAS,EAAI,EAC1E,EAAE,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,iBAAkB,gBAAiB,EAAI,CACpF,CACF,CAAC,EAED,MAAM,8BAA8B,WAAW,MAAM,UAAU,EAAE,QAAS,WAAW,MAAM,UAAU,EAAE,YAAY,EACnH,WAAW,GAAG,cAAe,SAAU,IAAK,MAAO,QAAS,CAE1D,EAAE,2BAA2B,EAAE,YAAY,0BAA0B,EAAE,QAAQ,aAAa,EAC5F,EAAE,iBAAkB,MAAM,QAAQ,OAAO,CAAC,EAAE,SAAS,0BAA0B,EAAE,QAAQ,cAAc,EAEvG,MAAM,8BAA8B,MAAM,QAAS,OAAO,EAE1D,EAAE,IAAI,EAAE,QAAQ,qBAAqB,EAAE,QAAQ,aAAa,CAC9D,CAAC,EAEG,EAAE,SAAS,EAAE,QAAQ,qBAAqB,EAAE,OAAS,GACvD,WAAW,GAAG,cAAe,UAAY,CACvC,EAAE,IAAI,EAAE,QAAQ,qBAAqB,EAAE,QAAQ,aAAa,CAC9D,CAAC,CAEL,CAAC,EACD,IAAI,YAAc,EAAE,cAAe,SAAS,EAE5C,GAAI,YAAY,OAAQ,CACtB,IAAI,yBAA2B,EAC3B,WAAa,GAEb,eAAiB,UAA0B,CACzC,YAAY,GAAG,UAAU,IAEvB,KAAK,IAAI,YAAY,WAAW,EAAI,YAAY,OAAO,EAAE,MAAM,CAAC,EAAI,GAElE,aACF,WAAa,GACb,MAAM,kCAAkC,WAAW,EACnD,YAAY,YAAY,cAAc,EAAE,KAAK,cAAc,EAAE,QAAQ,GAIlE,aACH,WAAa,GAEb,MAAM,gCAAgC,WAAW,EACjD,YAAY,SAAS,cAAc,EAAE,GAAG,2BAA4B,UAAY,CAC9E,EAAE,oBAAqB,IAAI,EAAE,YAAY,kBAAkB,EAAE,SAAS,UAAU,CAClF,CAAC,EAAE,YAAY,CACb,MAAO,yBACP,KAAM,GACN,OAAQ,CACV,CAAC,GAIT,EAEA,EAAE,MAAM,EAAE,GAAG,iCAAkC,cAAc,EAC7D,eAAe,EACf,EAAE,SAAS,EAAE,KAAK,yBAA0B,cAAc,EAE1D,EAAE,WAAY,SAAS,EAAE,GAAG,+BAAgC,6BAA8B,SAAU,EAAG,CACrG,EAAE,eAAe,EACjB,IAAI,cAAgB,EAAE,IAAI,EAAE,OAAO,EAEnC,GAAI,EAAE,MAAQ,kBAEZ,EAAE,IAAI,EAAE,QAAQ,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,YAAa,cAAc,MAAM,CAAC,MAClF,CAGL,EAAE,IAAI,EAAE,SAAS,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,GAAG,EAAE,YAAY,UAAU,EAEjF,IAAI,WAAa,cAAc,OAAO,EAAE,SAAS,eAAe,EAAE,MAAM,EACpE,SAAW,WAAa,yBAA2B,EACnD,aAAe,cAAc,MAAM,EAEnC,aAAe,WAEjB,cAAc,QAAQ,eAAe,EAAE,QAAQ,kBAAmB,YAAY,EACrE,aAAe,UAExB,cAAc,QAAQ,eAAe,EAAE,QAAQ,kBAAmB,KAAK,IAAI,EAAG,aAAe,yBAA2B,CAAC,CAAC,CAE9H,CACF,CAAC,EAED,EAAE,WAAY,SAAS,EAAE,GAAG,+BAAgC,oCAAqC,SAAU,EAAG,CAC5G,EAAE,eAAe,EAEb,EAAE,MAAQ,kBAEZ,EAAE,IAAI,EAAE,QAAQ,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,YAAa,EAAE,IAAI,EAAE,MAAM,CAAC,EAGjF,EAAE,IAAI,EAAE,SAAS,UAAU,EAAE,SAAS,WAAW,EAAE,YAAY,UAAU,CAE7E,CAAC,CACH,EACF,EAEA,MAAM,sBAAwB,SAAU,UAAW,CACjD,EAAE,MAAM,EAAE,IAAI,iBAAiB,EAC/B,IAAI,SAAW,EAAE,WAAY,SAAS,EAAE,IAAI,8BAA8B,EAC1E,MAAM,aAAa,QAAQ,QAAQ,EACnC,EAAE,gBAAiB,SAAS,EAAE,MAAM,SAAS,EAAE,IAAI,+BAA+B,EAClF,EAAE,gBAAiB,SAAS,EAAE,KAAK,UAAY,CAC7C,MAAM,kCAAkC,IAAI,EAC5C,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,QAAQ,CACvC,CAAC,CACH,EAEA,MAAM,0BAA4B,IAAI,UAAY,CAChD,KAAK,cAAgB,SAAU,OAAQ,CACrC,MAAM,kBAAkB,EACxB,MAAM,iBAAiB,MAAM,EAE7B,EAAE,MAAM,EAAE,GAAG,QAAS,iBAAkB,UAAY,CAClD,GAAI,CAAC,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAG,CAC/B,EAAE,IAAI,EAAE,SAAS,QAAQ,EACzB,EAAE,iBAAiB,EAAE,YAAY,QAAQ,EACzC,MAAM,qBAAqB,MAAM,EACjC,IAAI,SAAW,EAAE,4BAA4B,EAAE,SAAS,oBAAoB,EAAE,YAAY,2BAA2B,EACrH,EAAE,MAAM,EAAE,QAAQ,iBAAiB,CACrC,CAEA,MAAO,EACT,CAAC,EACD,EAAE,MAAM,EAAE,GAAG,QAAS,kBAAmB,UAAY,CACnD,GAAI,CAAC,EAAE,IAAI,EAAE,SAAS,QAAQ,EAAG,CAC/B,EAAE,IAAI,EAAE,SAAS,QAAQ,EACzB,EAAE,gBAAgB,EAAE,YAAY,QAAQ,EACxC,MAAM,qBAAqB,QAAQ,EACnC,IAAI,SAAW,EAAE,qBAAqB,EAAE,YAAY,oBAAoB,EAAE,SAAS,2BAA2B,EAE9G,EAAE,MAAM,EAAE,QAAQ,iBAAiB,EACnC,SAAS,KAAK,8BAA8B,EAAE,WAAW,OAAO,CAClE,CAEA,MAAO,EACT,CAAC,EAEG,EAAE,kCAAmC,MAAM,EAAE,OAAS,GAAK,MAAM,oBAAoB,GAAK,OACxF,MAAM,oBAAoB,GAAK,SACjC,EAAE,iBAAiB,EAAE,QAAQ,OAAO,EAEpC,EAAE,gBAAgB,EAAE,QAAQ,OAAO,GAKvC,IAAI,QAAU,EAAE,WAAY,MAAM,EAElC,GAAI,QAAQ,OAAS,EAAG,CACtB,IAAI,YAAc,CAAC,EAEnB,GAAI,SAAS,OAAO,OAClB,QAAS,UAAW,EAAI,EAAG,SAAW,SAAS,OAAO,OAAO,CAAC,EAAE,MAAM,GAAG,EAAG,EAAI,SAAS,OAAQ,IAC/F,UAAY,SAAS,CAAC,EAAE,MAAM,GAAG,EAE7B,UAAU,OAAS,IACrB,YAAY,mBAAmB,UAAU,CAAC,CAAC,CAAC,EAAI,mBAAmB,UAAU,CAAC,CAAC,GAKrF,QAAQ,GAAG,SAAU,UAAY,CAC/B,YAAY,QAAU,EAAE,IAAI,EAAE,IAAI,EAClC,SAAS,OAAS,EAAE,MAAM,WAAW,CACvC,CAAC,CACH,CAGA,EAAE,uBAAwB,MAAM,EAAE,KAAK,UAAY,CACjD,IAAI,QAAU,EAAE,IAAI,EAAE,KAAK,WAAW,EACtC,EAAE,IAAI,EAAE,KAAK,mBAAmB,EAAE,KAAK,UAAY,CACjD,IAAI,KAAO,EAAE,IAAI,EAAE,KAAK,MAAM,EAC9B,QAAQ,KAAK,UAAY,CACvB,IAAI,IAAM,EAAE,IAAI,EAAE,KAAK,KAAK,EAC5B,KAAO,KAAK,QAAQ,IAAM,IAAK,EAAE,EAAE,QAAQ,IAAM,IAAK,EAAE,EAExD,KAAO,KAAK,QAAQ,MAAQ,IAAK,EAAE,EAAE,QAAQ,IAAM,MAAO,EAAE,CAC9D,CAAC,EACD,EAAE,IAAI,EAAE,KAAK,OAAQ,IAAI,CAC3B,CAAC,CACH,CAAC,EAED,MAAM,QAAQ,KAAK,EAAE,iCAAkC,MAAM,CAAC,EAC9D,MAAM,oBAAoB,WAAW,MAAM,CAC7C,EAEA,KAAK,gBAAkB,SAAU,OAAQ,CACvC,MAAM,QAAQ,aAAa,MAAM,EACjC,EAAE,WAAY,MAAM,EAAE,IAAI,QAAQ,EAClC,EAAE,MAAM,EAAE,IAAI,OAAO,EACrB,MAAM,sBAAsB,MAAM,EAElC,MAAM,qBAAqB,IAAI,CACjC,CACF,EACA,MAAM,uBAAyB,IAAI,UAAY,CAC7C,KAAK,cAAgB,SAAU,OAAQ,CACrC,MAAM,kBAAkB,EACxB,MAAM,iBAAiB,MAAM,EAEzB,EAAE,sCAAuC,MAAM,EAAE,SACnD,KAAK,kBAAoB,IAAI,MAAM,kBAAkB,EAAE,sCAAuC,MAAM,EAAE,CAAC,CAAC,GAI1G,EAAE,cAAe,MAAM,EAAE,QAAQ,WAAW,EAC5C,MAAM,mBAAmB,MAAM,EAC/B,MAAM,oBAAoB,WAAW,MAAM,EAE3C,EAAE,yBAA0B,MAAM,EAAE,GAAG,QAAS,IAAK,UAAY,CAC/D,SAAE,WAAW,EAAE,QAAQ,CACrB,UAAW,EAAE,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC,EAAE,OAAO,EAAE,GAC9C,EAAG,GAAI,EACA,EACT,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,OAAQ,CACvC,MAAM,sBAAsB,MAAM,EAClC,MAAM,cAAc,qBAAqB,EAAE,cAAe,MAAM,CAAC,EACjE,EAAE,yBAA0B,MAAM,EAAE,IAAI,OAAO,EAC/C,EAAE,mBAAoB,MAAM,EAAE,IAAI,OAAO,EAErC,KAAK,mBACP,KAAK,kBAAkB,gBAAgB,CAE3C,CACF,EACA,MAAM,oBAAsB,IAAI,UAAY,CAC1C,KAAK,cAAgB,SAAU,OAAQ,CACrC,MAAM,kBAAkB,EACxB,MAAM,iBAAiB,MAAM,CAC/B,CACF,EACA,MAAM,oBAAsB,IAAI,UAAY,CAC1C,IAAI,EAAI,KAER,KAAK,WAAa,SAAU,OAAQ,gBAAiB,CAC/C,EAAE,SACJ,EAAE,QAAQ,MAAM,EAGd,EAAE,gBACJ,EAAE,eAAe,MAAM,EAGzB,EAAE,QAAU,EAAE,KAAK,CACjB,KAAM,OACN,IAAK,MAAM,OAAO,gBAAkB,MACpC,KAAM,OACN,SAAU,OACV,QAAS,SAAiB,KAAM,CAC1B,EAAE,gBACJ,EAAE,eAAe,MAAM,EAIzB,EAAE,eAAiB,EAAE,KAAK,CACxB,KAAM,MACN,IAAK,MAAM,OAAO,SAAW,aAC7B,QAAS,SAAiBC,MAAM,CAC9B,IAAI,UAAY,CAAC,kBAAmB,qCAAqC,EACrE,QAAU,EAAE,QAAUA,MAAO,QAAQ,EACzC,QAAQ,KAAK,UAAU,EAAE,YAAY,SAAS,EAE9C,QAAS,EAAI,EAAG,EAAI,UAAU,OAAQ,IACpC,EAAE,iBAAmB,GAErB,EAAE,uCAAyC,UAAU,CAAC,CAAC,EAAE,KAAK,QAAQ,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,EAC/F,EAAE,iBAAmB,GAGvB,gBAAgB,CAClB,EACA,MAAO,SAAeA,MAAM,CACtBA,MAAK,YAAc,UACrB,QAAQ,IAAI,uBAAuB,EACnC,QAAQ,IAAIA,KAAI,EAEpB,EACA,SAAU,UAAoB,CAC5B,EAAE,eAAiB,IACrB,CACF,CAAC,CACH,EACA,MAAO,SAAe,KAAM,CACtB,KAAK,YAAc,UACrB,QAAQ,IAAI,yBAAyB,EACrC,QAAQ,IAAI,IAAI,EAEpB,EACA,SAAU,UAAoB,CAC5B,EAAE,QAAU,IACd,CACF,CAAC,CACH,EAEA,KAAK,cAAgB,SAAU,UAAW,CACxC,MAAM,iBAAiB,SAAS,EAE5B,EAAE,wBAAyB,SAAS,EAAE,OAAS,GACjD,EAAE,QAAQ,EAAE,GAAG,4BAA6B,wFAAyF,UAAY,CAC/I,GAAI,EAAE,+BAA+B,EAAE,QAAU,EAC/C,aAAM,MAAM,QAAQ,uBAAuB,EACpC,EAEX,CAAC,EAGC,EAAE,SAAS,EAAE,KAAK,aAAa,IACjC,EAAE,SAAS,EAAE,GAAG,4FAA6F,6BAA8B,SAAU,IAAK,CACxJ,GAAI,GAAE,kBAIF,IAAE,IAAI,EAAE,KAAK,eAAe,GAAK,EAAE,IAAI,EAAE,KAAK,eAAe,GAAK,EAAE,IAAI,EAAE,IAAI,IAI9E,IAAE,IAAI,EAAE,IAAI,EAAE,QAAU,GAAK,EAAE,IAAI,EAAE,IAAI,GAAK,KAKlD,KAAI,UAEA,IAAI,OAAS,mBACf,UAAY,EAAE,IAAI,IAAI,EAAE,KAAK,IAAI,EAEjC,UAAY,EAAE,IAAI,EAAE,KAAK,IAAI,EAG/B,EAAE,WAAW,CACX,KAAM,EAAE,IAAI,EAAE,KAAK,MAAM,EACzB,SAAU,EAAE,IAAI,EAAE,IAAI,CACxB,EAAG,UAAY,CAEb,EAAE,IAAM,SAAS,EAAE,MAAM,CAC3B,CAAC,EACH,CAAC,EACD,EAAE,SAAS,EAAE,GAAG,4BAA6B,+BAAgC,SAAU,IAAK,CAC1F,IAAI,OAAS,EAAE,IAAI,EAAE,QAAQ,WAAW,EAAE,KAAK,OAAO,EAClD,KAAO,OAAO,KAAK,MAAM,EAAI,SAAS,OAAO,KAAK,MAAM,CAAC,EAAI,EAEjE,OAAI,EAAE,IAAI,EAAE,SAAS,eAAe,EAClC,OAAO,IAAI,SAAS,OAAO,IAAI,CAAC,EAAI,IAAI,EAAE,QAAQ,mBAAoB,CACpE,KAAM,IACR,CAAC,EAED,OAAO,IAAI,SAAS,OAAO,IAAI,CAAC,EAAI,IAAI,EAAE,QAAQ,mBAAoB,CACpE,KAAM,IACR,CAAC,EAGI,EACT,CAAC,GAGH,MAAM,gBAAgB,KAAK,EAAE,+BAAgC,SAAS,CAAC,EACvE,EAAE,SAAS,EAAE,GAAG,4BAA6B,+BAAgC,UAAY,CACvF,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,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,EAAE,QAAQ,EAAE,IAAI,sBAAsB,EACtC,EAAE,SAAS,EAAE,IAAI,sBAAsB,EACvC,MAAM,gBAAgB,OAAO,EAAE,+BAAgC,SAAS,CAAC,CAC3E,CACF,EACA,MAAM,4BAA8B,IAAI,UAAY,CAClD,IAAI,EAAI,KAER,EAAE,gCAAkC,UAAY,CAC9C,EAAE,oEAAoE,EAAE,KAAK,UAAY,CACvF,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,CACnE,CAAC,CACH,EAEA,KAAK,cAAgB,SAAU,UAAW,CACxC,EAAE,gBAAiB,SAAS,EAAE,KAAK,UAAY,CACzC,EAAE,IAAI,EAAE,QAAQ,kCAAkC,EAAE,MAAM,GAAK,IACjE,EAAE,IAAI,EAAE,SAAS,kCAAkC,EAEnD,EAAE,gCAAgC,EAElC,EAAE,MAAM,EAAE,IAAI,6CAA6C,EAAE,GAAG,8CAA+C,EAAE,+BAA+B,EAEpJ,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,EAAE,MAAM,EAAE,IAAI,8BAA8B,CAC9C,CACF,EACA,MAAM,iBAAmB,IAAI,UAAY,CACvC,IAAI,EAAI,KAER,EAAE,gCAAkC,UAAY,CAC9C,EAAE,sDAAsD,EAAE,KAAK,UAAY,CACzE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,CACnE,CAAC,CACH,EAEA,KAAK,cAAgB,SAAU,OAAQ,CACrC,EAAE,aAAc,MAAM,EAAE,KAAK,UAAY,CACnC,EAAE,IAAI,EAAE,KAAK,eAAe,EAAE,QAAU,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE,MAAM,GAAK,IAC3F,EAAE,IAAI,EAAE,SAAS,kCAAkC,EAEnD,EAAE,gCAAgC,EAElC,EAAE,MAAM,EAAE,IAAI,kCAAkC,EAAE,GAAG,mCAAoC,EAAE,+BAA+B,GAG5H,EAAE,IAAI,EAAE,GAAG,OAAQ,UAAY,CAC7B,EAAE,oBAAqB,IAAI,EAAE,YAAY,kBAAkB,EAAE,SAAS,UAAU,CAClF,CAAC,EAAE,MAAM,CACP,SAAU,EAAE,IAAI,EAAE,KAAK,UAAU,EACjC,KAAM,EAAE,IAAI,EAAE,KAAK,YAAY,GAAK,QACpC,MAAO,EAAE,IAAI,EAAE,KAAK,YAAY,GAAK,UAAY,EAAI,IACrD,cAAe,EAAE,IAAI,EAAE,KAAK,gBAAgB,EAAI,IAChD,OAAQ,EAAE,IAAI,EAAE,KAAK,YAAY,GAAK,SACtC,KAAM,EAAE,IAAI,EAAE,KAAK,YAAY,GAAK,OACpC,aAAc,EAAE,IAAI,EAAE,KAAK,YAAY,GAAK,WAAa,EAAE,IAAI,EAAE,KAAK,gBAAgB,EAAI,EAE1F,SAAU,GACV,aAAc,GACd,UAAW,wDAA0D,MAAM,QAAQ,SAAW,KAAO,MAAM,MAAM,YAAc,YAC/H,UAAW,wDAA0D,MAAM,QAAQ,KAAO,KAAO,MAAM,MAAM,aAAe,YAC5H,WAAY,CAAC,CACX,WAAY,IACZ,SAAU,CACR,KAAM,EAAE,IAAI,EAAE,KAAK,YAAY,GAAK,UAEpC,MAAO,EAAE,IAAI,EAAE,KAAK,YAAY,GAAK,UAAY,EAAI,IACrD,OAAQ,GACR,KAAM,EAAE,IAAI,EAAE,KAAK,YAAY,GAAK,MACtC,CACF,CAAC,CACH,CAAC,CACH,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,OAAQ,CACvC,EAAE,gBAAiB,MAAM,EAAE,MAAM,SAAS,EAAE,IAAI,MAAM,EACtD,EAAE,MAAM,EAAE,IAAI,mBAAmB,CACnC,EAEA,KAAK,cAAgB,SAAU,OAAQ,CACrC,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,YAAa,EAAE,MAAM,EAAE,KAAK,aAAa,CAAC,EAAE,MAAM,YAAY,CACzG,EAEA,KAAK,gBAAkB,SAAU,OAAQ,CACvC,EAAE,MAAM,EAAE,QAAQ,eAAe,EAAE,MAAM,WAAW,CACtD,CACF,EACA,MAAM,eAAiB,IAAI,UAAY,CACrC,KAAK,cAAgB,SAAU,UAAW,CACxC,IAAI,iBAAmB,EAAE,4BAA6B,SAAS,EAE/D,GAAI,iBAAiB,OAAQ,CAC3B,IAAI,uBAAyB,UAAkC,CAC7D,IAAI,WAAa,iBAAiB,SAAS,cAAc,EACrD,mBAAqB,EAAE,MAAM,EAAE,MAAM,EAAI,IAM7C,GAJK,oBACH,EAAE,oBAAqB,gBAAgB,EAAE,YAAY,kBAAkB,EAAE,SAAS,UAAU,EAG1F,YAAc,CAAC,mBAAoB,CAGrC,iBAAiB,MAAM,SAAS,EAAE,IAAI,MAAM,EAC5C,iBAAiB,KAAK,mBAAmB,EAAE,WAAW,UAAU,EAAE,WAAW,MAAM,EAEnF,IAAI,SAAW,iBAAiB,KAAK,MAAM,EACvC,YAAc,KAClB,iBAAiB,KAAK,gBAAgB,EAAE,KAAK,SAAU,MAAO,CACxD,MAAQ,WAAa,IACvB,YAAc,EAAE,4BAA4B,EAAE,SAAS,gBAAgB,GAGzE,EAAE,IAAI,EAAE,SAAS,WAAW,CAC9B,CAAC,CACH,KAAW,CAAC,YAAc,qBAGxB,iBAAiB,KAAK,gBAAgB,EAAE,SAAS,gBAAgB,EACjE,iBAAiB,KAAK,eAAe,EAAE,OAAO,EAE9C,iBAAiB,GAAG,OAAQ,UAAY,CACtC,EAAE,oBAAqB,IAAI,EAAE,YAAY,kBAAkB,EAAE,SAAS,UAAU,CAClF,CAAC,EAAE,MAAM,CACP,SAAU,GACV,KAAM,GACN,SAAU,GACV,aAAc,GACd,OAAQ,GACR,KAAM,EACR,CAAC,EAEL,EAEA,uBAAuB,EACvB,EAAE,MAAM,EAAE,GAAG,+BAAiC,UAAU,GAAI,sBAAsB,CACpF,CACF,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,EAAE,MAAM,EAAE,IAAI,gBAAkB,UAAU,EAAE,EAC5C,EAAE,gBAAiB,SAAS,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,EAAE,QAAQ,eAAe,EAAE,KAAK,UAAY,CACjD,EAAE,IAAI,EAAE,MAAM,YAAa,eAAe,CAC5C,CAAC,CACH,CACF,EACA,MAAM,oBAAsB,IAAI,UAAY,CAC1C,KAAK,cAAgB,SAAU,UAAW,CACxC,KAAK,UAAY,MAAM,qBAAqB,SAAS,EACrD,KAAK,sBAAwB,EAAE,oBAAqB,SAAS,EAC7D,KAAK,sBAAsB,KAAK,0BAA0B,EAAE,GAAG,OAAQ,UAAY,CACjF,EAAE,oBAAqB,IAAI,EAAE,YAAY,kBAAkB,EAAE,SAAS,UAAU,CAClF,CAAC,EAAE,MAAM,CACP,KAAM,KAAK,sBAAsB,SAAS,+BAA+B,EACzE,aAAc,KAAK,sBAAsB,SAAS,kCAAkC,EAAI,EAAI,EAC5F,KAAM,GACN,OAAQ,GACR,aAAc,KAAK,sBAAsB,KAAK,6BAA6B,EAC3E,UAAW,wDAA0D,MAAM,QAAQ,SAAW,KAAO,MAAM,MAAM,YAAc,YAC/H,UAAW,wDAA0D,MAAM,QAAQ,KAAO,KAAO,MAAM,MAAM,aAAe,YAC5H,WAAY,CAAC,CACX,WAAY,IACZ,SAAU,CACR,KAAM,GACN,aAAc,CAChB,CACF,CAAC,CACH,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,EAAE,gBAAiB,SAAS,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,EAAE,QAAQ,eAAe,EAAE,KAAK,UAAY,CACjD,EAAE,IAAI,EAAE,MAAM,YAAa,eAAe,CAC5C,CAAC,CACH,CACF,EAEA,MAAM,OAAS,UAAY,CACzB,MAAO,CACL,aAAc,OACd,QAAS,EACT,OAAQ,EAAE,MAAM,EAAE,MAAM,EAAI,IAAM,GAAK,GACvC,eAAgB,GAChB,WAAY,UAAsB,CAChC,EAAE,gBAAgB,EAAE,IAAI,eAAe,CACzC,CACF,CACF,EAEA,MAAM,iBAAmB,IAAI,UAAY,CACvC,KAAK,cAAgB,SAAU,UAAW,CACxC,MAAM,iBAAiB,SAAS,EAChC,MAAM,aAAa,cAAc,SAAS,CAC5C,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,MAAM,aAAa,gBAAgB,SAAS,CAC9C,CACF,EACA,MAAM,0BAA4B,IAAI,UAAY,CAChD,KAAK,cAAgB,SAAU,UAAW,CACxC,MAAM,cAAc,SAAS,EAC7B,MAAM,oBAAoB,WAAW,SAAS,CAChD,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,MAAM,gBAAgB,SAAS,CACjC,CACF,EACA,MAAM,2BAA6B,IAAI,UAAY,CACjD,KAAK,cAAgB,SAAU,UAAW,CACxC,MAAM,cAAc,SAAS,EAC7B,MAAM,oBAAoB,WAAW,SAAS,CAChD,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,MAAM,gBAAgB,SAAS,CACjC,CACF,EACA,MAAM,+BAAiC,IAAI,UAAY,CACrD,KAAK,cAAgB,SAAU,UAAW,CACxC,MAAM,oBAAoB,WAAW,SAAS,CAChD,CACF,EAEA,MAAM,uBAAyB,SAAU,MAAO,CAC1C,MAAM,SAAS,YAAc,WAC/B,MAAM,OAAO,gCAAgC,EAAE,KAAK,UAAY,CAC9D,IAAI,kBAAoB,CAAC,+DAAgE,+CAAgD,mDAAoD,mDAAoD,MAAM,QAAQ,kCAAmC,SAAU,SAAU,kDAAmD,mDAAoD,MAAM,QAAQ,iCAAkC,SAAU,SAAU,0DAA2D,mDAAoD,mDAAoD,MAAM,QAAQ,uCAAwC,SAAU,SAAU,sDAAuD,mDAAoD,MAAM,QAAQ,qCAAsC,SAAU,SAAU,mDAAoD,mDAAoD,MAAM,QAAQ,wCAAyC,SAAU,SAAU,SAAU,sDAAuD,mDAAoD,MAAM,QAAQ,qCAAsC,SAAU,SAAU,SAAU,+CAAgD,mDAAoD,sDAAuD,SAAU,kDAAmD,2DAA4D,iEAAkE,uDAAwD,4EAA6E,sDAAuD,MAAM,QAAQ,qCAAsC,mEAAoE,SAAU,4EAA6E,SAAU,SAAU,0DAA2D,mDAAoD,uEAAwE,SAAU,sDAAuD,mEAAoE,SAAU,mDAAoD,qEAAsE,SAAU,oBAAqB,SAAU,sDAAuD,mEAAoE,2CAA4C,MAAM,QAAQ,0CAA2C,eAAgB,SAAU,SAAU,8CAA+C,uDAAwD,MAAM,QAAQ,0CAA2C,OAAQ,mCAAoC,MAAM,OAAO,SAAU,KAAM,MAAM,QAAQ,iCAAkC,OAAQ,SAAU,QAAQ,EAAE,KAAK,EAAE,EACrhG,kBAAoB,MAAM,OAAO,aAAe,MAChD,mBAAqB,MAAM,OAAO,SAAW,MAC7C,wBAA0B,MAAM,OAAO,WAC3C,EAAE,IAAI,EAAE,GAAG,SAAU,SAAU,IAAK,CAClC,IAAI,eAAe,EACnB,IAAIC,OAAQ,EAAE,IAAI,EAElBA,OAAM,KAAK,sBAAsB,EAAE,KAAK,WAAY,UAAU,EAAE,KAAK,UAAY,CAC/E,EAAE,IAAI,EAAE,KAAK,iBAAkB,EAAE,IAAI,EAAE,IAAI,CAAC,CAC9C,CAAC,EAAE,IAAI,MAAM,QAAQ,+BAA+B,EAEpD,EAAE,kCAAkC,EAAE,eAAe,OAAO,EAE5D,EAAE,KAAK,kBAAmBA,OAAM,UAAU,EAAG,SAAU,SAAU,CAE/DA,OAAM,KAAK,sBAAsB,EAAE,WAAW,UAAU,EAAE,KAAK,UAAY,CACzE,KAAO,EAAE,IAAI,EAEb,KAAK,IAAI,MAAM,QAAQ,8BAA8B,EAAE,SAAS,UAAU,EAC1E,OAAO,WAAW,UAAY,CAC5B,KAAK,YAAY,UAAU,EAAE,IAAI,KAAK,KAAK,gBAAgB,CAAC,CAC9D,EAAG,GAAI,CACT,CAAC,EAED,IAAI,cAAgB,EAAE,UAAU,QAAQ,EAExC,EAAE,IAAI,mBAAoB,SAAU,SAAU,CAC5C,IAAI,aAAe,EAAE,UAAU,QAAQ,EACnC,SAAW,cAAc,SACzB,WAAa,cAAc,MAE3B,YAAc,MAAM,cAAc,eAAeA,MAAK,EACtD,YAAc,GAElB,GAAI,cAAc,cAEhB,QAAS,EAAI,EAAG,EAAI,YAAY,QAAQ,OAAQ,IAC9C,aAAe,CAAC,8CAA+C,sDAAuD,YAAY,QAAQ,CAAC,EAAE,KAAM,UAAW,qDAAsD,cAAc,gBAAgB,CAAC,EAAG,UAAW,QAAQ,EAAE,KAAK,EAAE,EAIlR,cAAc,yBAA2B,cAAc,wBAAwB,aAAa,OAC9F,aAAe,CAAC,8CAA+C,qDAAsD,cAAc,wBAAwB,aAAa,KAAM,UAAW,QAAQ,EAAE,KAAK,EAAE,GAG5M,IAAI,cAAgB,GAEhB,cAAc,oBAAsB,cAAc,mBACpD,eAAiB,2DAA6D,MAAM,QAAQ,YAAY,cAAc,eAAgB,MAAM,YAAY,EAAI,iBAG9J,eAAiB,kCAAoC,MAAM,QAAQ,YAAY,cAAc,YAAa,MAAM,YAAY,EAAI,gBAChI,IAAI,cAAgB,GAEhB,cAAc,qBAAuB,cAAc,kBACrD,eAAiB,6CAA+C,MAAM,QAAQ,YAAY,cAAc,oBAAqB,MAAM,YAAY,EAAI,SACnJ,eAAiB,4BAA8B,MAAM,QAAQ,YAAY,cAAc,iBAAkB,MAAM,YAAY,EAAI,UAE/H,eAAiB,6BAA+B,MAAM,QAAQ,YAAY,cAAc,iBAAkB,MAAM,YAAY,EAAI,UAGlI,IAAI,iBAAmB,GAEvB,GAAI,cAAc,iCAAmC,cAAc,gCAAgC,OAAS,EAAG,CAC7G,kBAAoB,kCAEpB,QAAS,EAAI,EAAG,EAAI,cAAc,gCAAgC,OAAQ,IAAK,CAC7E,IAAI,oBAAsB,cAAc,gCAAgC,CAAC,EACzE,kBAAoB,CAAC,mDAAoD,sCAAuC,qCAAsC,MAAM,MAAM,MAAO,UAAW,sCAAuC,oBAAoB,qBAAqB,MAAO,UAAW,UAAW,mDAAoD,MAAM,QAAQ,YAAY,oBAAoB,OAAQ,MAAM,YAAY,EAAG,UAAW,OAAO,EAAE,KAAK,EAAE,CAC7b,CAEA,kBAAoB,OACtB,CAEA,IAAI,aAAe,GAEnB,GAAI,aAAa,kCAAoC,aAAa,iCAAiC,OAAS,EAAG,CAC7G,cAAgB,kCAEhB,QAAS,EAAI,EAAG,EAAI,aAAa,iCAAiC,OAAQ,IAAK,CAC7E,IAAI,qBAAuB,aAAa,iCAAiC,CAAC,EAC1E,cAAgB,CAAC,mDAAoD,sCAAuC,qCAAsC,MAAM,MAAM,MAAO,UAAW,sCAAuC,qBAAqB,MAAO,UAAW,UAAW,mDAAoD,MAAM,QAAQ,YAAY,qBAAqB,uBAAwB,MAAM,YAAY,EAAG,UAAW,OAAO,EAAE,KAAK,EAAE,CACtb,CAEA,cAAgB,OAClB,CAEA,cAAgB,6DAA+D,MAAM,QAAQ,qCAAuC,YACpI,cAAgB,mEAAqE,MAAM,QAAQ,YAAY,aAAa,YAAa,MAAM,YAAY,EAAI,UAE/J,IAAI,cAAgB,kBACpB,cAAgB,cAAc,QAAQ,YAAa,cAAc,aAAa,EAC9E,cAAgB,cAAc,QAAQ,oBAAqB,cAAc,cAAc,QAAQ,KAAM,QAAQ,EAAE,QAAQ,KAAM,OAAO,CAAC,EACrI,cAAgB,cAAc,QAAQ,eAAgB,WAAW,EACjE,cAAgB,cAAc,QAAQ,oBAAqB,QAAQ,EACnE,cAAgB,cAAc,QAAQ,gBAAiB,MAAM,QAAQ,YAAY,WAAY,MAAM,CAAC,EACpG,cAAgB,cAAc,MAAM,gBAAgB,EAAE,KAAK,aAAa,EACxE,cAAgB,cAAc,MAAM,gBAAgB,EAAE,KAAK,aAAa,EACxE,cAAgB,cAAc,MAAM,mBAAmB,EAAE,KAAK,gBAAgB,EAC9E,cAAgB,cAAc,QAAQ,eAAgB,YAAY,EAClE,IAAI,WAAa,EAAE,aAAa,EAChC,WAAW,KAAK,YAAY,EAAE,KAAK,QAAS,UAAY,CACtD,kBAAW,QAAQ,CACjB,IAAK,CAAC,WAAW,YAAY,CAC/B,EAAG,IAAK,UAAY,CAClB,EAAE,IAAI,EAAE,OAAO,CACjB,CAAC,EACM,EACT,CAAC,EACD,WAAW,UAAU,MAAM,EAAE,IAAI,MAAO,CAAC,WAAW,YAAY,CAAC,EAAE,QAAQ,CACzE,IAAK,CACP,EAAG,GAAG,CACR,EAAG,MAAM,EAET,EAAE,IAAI,wBAAyB,SAAU,KAAM,CAG7C,QAFI,qBAAuB,CAAC,2BAA2B,EAE9C,EAAI,EAAG,EAAI,qBAAqB,OAAQ,IAAK,CACpD,IAAI,YAAc,EAAE,QAAU,KAAO,QAAQ,EAAE,KAAK,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAC/E,UAAY,EAAE,qBAAqB,CAAC,CAAC,EACzC,UAAU,KAAK,YAAY,KAAK,CAAC,CACnC,CACF,CAAC,CACH,EAAG,MAAM,EAAE,KAAK,SAAU,KAAM,CAM9B,GAJAA,OAAM,KAAK,sBAAsB,EAAE,WAAW,UAAU,EAAE,KAAK,UAAY,CACzE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,gBAAgB,CAAC,CAC5C,CAAC,EAEG,OAAO,MAAQ,aAAe,OAAO,KAAK,QAAU,YAAa,CACnE,IAAI,QAAU,EAAE,UAAU,KAAK,YAAY,EAC3C,MAAM,eAAe,QAAQ,YAAaA,OAAM,KAAK,4BAA4B,CAAC,CACpF,MAEEA,OAAM,KAAK,mBAAoB,OAAO,EAAE,OAAO,CAEnD,CAAC,CACH,CAAC,CACH,CAAC,EACD,EAAE,MAAM,EAAE,IAAI,gBAAgB,EAAE,GAAG,uBAAwB,UAAY,CAErE,EAAE,kCAAkC,EAAE,eAAe,OAAO,CAC9D,CAAC,EAEL,EAEA,MAAM,0BAA4B,SAAU,MAAO,CACjD,MAAM,IAAI,QAAQ,CACpB,EAEA,MAAM,cAAgB,IAAI,UAAY,CACpC,KAAK,cAAgB,SAAU,UAAW,CAExC,EAAE,SAAS,EAAE,GAAG,+CAAgD,gBAAiB,SAAU,EAAG,CAC5F,MAAO,EACT,CAAC,EAED,IAAI,wBAA0B,GAC9B,EAAE,SAAS,EAAE,GAAG,+CAAgD,cAAe,SAAU,EAAG,CACtF,EAAE,MAAQ,WACZ,aAAa,uBAAuB,EACpC,EAAE,IAAI,EAAE,QAAQ,aAAa,EAAE,SAAS,OAAO,IAE/C,aAAa,uBAAuB,EACpC,wBAA0B,WAAW,UAAY,CAC/C,EAAE,IAAI,EAAE,QAAQ,aAAa,EAAE,YAAY,OAAO,CACpD,EAAE,KAAK,IAAI,EAAG,GAAG,EAErB,CAAC,EAED,EAAE,SAAS,EAAE,GAAG,sBAAuB,yCAA0C,SAAU,EAAG,CAC5F,OAAI,EAAE,MAAM,EAAE,YAAY,aAAa,EAAE,SAAS,aAAa,EAC7D,WAAW,UAAY,CACrB,EAAE,2BAA2B,EAAE,MAAM,CACvC,EAAG,GAAG,EAEN,EAAE,yBAAyB,EAAE,MAAM,EAG9B,EACT,CAAC,EAED,EAAE,SAAS,EAAE,GAAG,sBAAuB,sBAAuB,SAAU,EAAG,CACrE,EAAE,SAAW,IACf,EAAE,qBAAqB,EAAE,MAAM,CAEnC,CAAC,EAED,IAAI,qBAAuB,EAAE,wCAAyC,SAAS,EAE/E,GAAI,qBAAqB,OAAQ,CAC/B,IAAI,sBAAwB,IACxB,gBAAkB,GAClB,WAAa,KACb,UAAY,qBAAqB,KAAK,mBAAmB,EACzD,WAAa,qBAAqB,KAAK,oBAAoB,EAC3D,YAAc,qBAAqB,KAAK,kBAAkB,EAC1D,kBAAoB,qBAAqB,KAAK,qBAAqB,EACnE,WAAa,qBAAqB,KAAK,mBAAmB,EAC1D,iBAAmB,qBAAqB,KAAK,qBAAqB,EAClE,cAAgB,qBAAqB,KAAK,iBAAiB,EAC/D,EAAE,SAAS,EAAE,GAAG,2CAA4C,sBAAuB,UAAY,CAC7F,IAAI,iBAAmB,EAAE,cAAc,EACnC,YAAc,iBAAiB,KAAK,uBAAuB,EAC3D,cAAgB,EAAE,IAAI,EAAE,IAAI,EAEhC,GAAI,cAAc,OAAS,GAAK,eAAiB,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAG,CAEvE,EAAE,IAAI,EAAE,KAAK,SAAU,aAAa,EAEhC,YAAc,MAChB,WAAW,MAAM,EAInB,aAAa,eAAe,EAE5B,IAAI,MAAQ,EAAE,IAAI,EAAE,QAAQ,MAAM,EAC9B,QAAU,MAAM,KAAK,QAAQ,GAAK,MAAM,KAAK,QAAQ,EAAE,QAAQ,GAAG,EAAI,GAAK,IAAM,KAAO,MAAM,UAAU,EAE5G,iBAAiB,YAAY,yFAAyF,EAAE,SAAS,sBAAsB,EAEnJ,EAAE,+BAA+B,EAAE,SAAW,GAChD,YAAY,KAAK,qFAAqF,EAIxG,gBAAkB,WAAW,UAAY,CACvC,IAAI,QAAS,SAET,MAAM,QAAQ,SAAS,kBAEzB,QAAU,MAAM,OAAO,WAAa,gBACpC,SAAW,CACT,EAAK,cACL,UAAa,CACX,KAAQ,MAAM,KAAK,oBAAoB,EAAE,IAAI,EAC7C,MAAS,EACT,QAAW,CACT,qBAAwB,OACxB,OAAU,YAAc,4DAA8D,0CACxF,CACF,CACF,IAGA,QAAU,QAAU,aACpB,SAAW,MAIb,WAAa,EAAE,KAAK,CAClB,IAAK,QACL,KAAM,SACN,SAAU,OACV,QAAS,SAAiB,SAAU,CAClC,WAAa,KACb,iBAAiB,YAAY,yFAAyF,EACtH,YAAY,MAAM,EAClB,IAAI,iBAAmB,EAAE,iKAAiK,EACtL,cAAgB,EAAE,2CAA2C,EAEjE,GAAI,SAAS,UAAU,QAAQ,SAC7B,QAAS,EAAI,EAAG,EAAI,SAAS,UAAU,QAAQ,SAAS,OAAQ,IAAK,CACnE,IAAI,OAAS,SAAS,UAAU,QAAQ,SAAS,CAAC,EAC9C,MAAQ,EAAE,CAAC,iDAAkD,4BAA6B,kCAAmC,2BAA4B,2BAA4B,iCAAkC,oCAAqC,SAAU,OAAQ,SAAU,6BAA8B,sBAAuB,wBAAyB,2BAA4B,2CAA4C,4BAA6B,OAAQ,SAAU,SAAU,SAAU,SAAU,SAAU,QAAQ,EAAE,KAAK,EAAE,CAAC,EAI3hB,GAHA,MAAM,SAAS,eAAiB,UAAU,EAC1C,MAAM,KAAK,eAAe,EAAE,KAAK,OAAQ,OAAO,GAAG,EAE/C,OAAO,gBAAkB,OAAO,eAAe,IAAK,CACtD,IAAI,KAAO,EAAE,8IAA8I,EAAE,SAAS,MAAM,KAAK,gBAAgB,CAAC,EAClM,KAAK,KAAK,iBAAiB,EAAE,IAAI,cAAe,EAAI,KAAK,IAAI,OAAO,eAAe,aAAc,EAAG,EAAI,IAAM,GAAG,EACjH,KAAK,KAAK,gBAAgB,EAAE,KAAK,WAAY,MAAM,QAAQ,YAAY,OAAO,eAAe,IAAK,MAAM,EAAI,OAAO,CACrH,CAEA,IAAI,cAAgB,MAAM,KAAK,6BAA6B,EAO5D,GANA,cAAc,KAAK,uBAAuB,EAAE,KAAK,OAAO,KAAK,EAEzD,YACF,EAAE,sBAAsB,EAAE,KAAK,OAAO,MAAM,EAAE,UAAU,aAAa,EAGnE,UAAW,CACb,IAAI,OAAS,EAAE,6BAA6B,EAAE,SAAS,aAAa,EAEhE,OAAO,WAAa,OAAO,YAC7B,EAAE,oCAAoC,EAAE,KAAK,MAAM,QAAQ,qBAAqB,EAAE,SAAS,MAAM,EACjG,OAAO,OAAO,GAAG,GAGf,WAAW,OAAO,oBAAoB,EAAI,WAAW,OAAO,SAAS,GACvE,EAAE,iFAAiF,EAAE,KAAK,MAAM,QAAQ,YAAY,OAAO,UAAW,MAAM,YAAY,CAAC,EAAE,SAAS,MAAM,EAC1K,OAAO,OAAO,GAAG,EACjB,EAAE,mDAAmD,EAAE,KAAK,MAAM,QAAQ,YAAY,OAAO,qBAAsB,MAAM,YAAY,CAAC,EAAE,SAAS,MAAM,GAEvJ,EAAE,kDAAkD,EAAE,KAAK,MAAM,QAAQ,YAAY,OAAO,UAAW,MAAM,YAAY,CAAC,EAAE,SAAS,MAAM,CAE/I,CAEI,kBAAoB,CAAC,OAAO,UAC9B,EAAE,yDAAyD,EAAE,SAAS,MAAM,KAAK,mBAAmB,CAAC,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,QAAQ,wBAAwB,EACtJ,eAAiB,WAAW,OAAO,oBAAoB,EAAI,WAAW,OAAO,SAAS,GAC/F,EAAE,sDAAsD,EAAE,SAAS,MAAM,KAAK,mBAAmB,CAAC,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,QAAQ,oBAAoB,EAG1J,iBAAiB,SAAS,EAAE,OAAO,KAAK,CAC1C,CAGF,GAAI,SAAS,UAAU,QAAQ,MAC7B,QAAS,EAAI,EAAG,EAAI,SAAS,UAAU,QAAQ,MAAM,OAAQ,IAAK,CAChE,IAAI,OAAS,SAAS,UAAU,QAAQ,MAAM,CAAC,EAC3C,MAAQ,EAAE,yDAAyD,EAAE,KAAK,OAAQ,OAAO,GAAG,EAChG,EAAE,wCAAwC,EAAE,KAAK,OAAO,KAAK,EAAE,SAAS,KAAK,EAC7E,cAAc,OAAO,KAAK,CAC5B,CAGF,GAAI,SAAS,UAAU,QAAQ,SAC7B,QAAS,EAAI,EAAG,EAAI,SAAS,UAAU,QAAQ,SAAS,OAAQ,IAAK,CACnE,IAAI,OAAS,SAAS,UAAU,QAAQ,SAAS,CAAC,EAC9C,MAAQ,EAAE,4DAA4D,EAAE,KAAK,OAAQ,OAAO,GAAG,EACnG,EAAE,wCAAwC,EAAE,KAAK,OAAO,KAAK,EAAE,SAAS,KAAK,EAC7E,cAAc,OAAO,KAAK,CAC5B,CAGF,iBAAiB,YAAY,sBAAsB,EACnD,IAAI,YAAc,iBAAiB,KAAK,2BAA2B,EAAE,OAAS,EAC1E,SAAW,cAAc,KAAK,2BAA2B,EAAE,OAAS,EAEpE,aAAe,UAEjB,iBAAiB,SAAS,0BAA0B,EACpD,iBAAiB,YAAY,yCAA0C,iBAAiB,KAAK,gBAAgB,EAAE,OAAS,CAAC,EAErH,aACF,YAAY,OAAO,gBAAgB,EAGjC,WACF,EAAE,0CAA0C,EAAE,KAAK,MAAM,QAAQ,0BAA0B,EAAE,UAAU,aAAa,EACpH,YAAY,OAAO,aAAa,GAGlC,EAAE,4DAA4D,EAAE,KAAK,OAAQ,OAAO,EAAE,KAAK,MAAM,QAAQ,0BAA0B,EAAE,SAAS,WAAW,IAGzJ,iBAAiB,SAAS,yBAAyB,EACnD,EAAE,0CAA0C,EAAE,KAAK,MAAM,QAAQ,+BAA+B,EAAE,SAAS,WAAW,EAE1H,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,EAEhC,YAAc,MAChB,WAAW,MAAM,EAGnB,aAAa,eAAe,EAE5B,iBAAiB,YAAY,sFAAsF,EACnH,YAAY,MAAM,EAEtB,CAAC,CACH,CAGA,EAAE,cAAe,SAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,aAAc,IAAI,MAAM,WAAW,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC,EAED,MAAM,WAAW,KAAK,CACpB,IAAK,EAAE,oBAAqB,SAAS,EACrC,cAAe,EAAE,oBAAqB,SAAS,CACjD,CAAC,EAEG,MAAM,wBACR,MAAM,sBAAsB,EAC5B,EAAE,MAAM,EAAE,GAAG,gCAAiC,MAAM,qBAAqB,EAE7E,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,EAAE,SAAS,EAAE,IAAI,gBAAgB,EACjC,EAAE,MAAM,EAAE,IAAI,gBAAgB,EAC9B,EAAE,cAAe,SAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,OAAO,CACpC,CAAC,EACD,MAAM,WAAW,QAAQ,EAAE,cAAe,SAAS,EAAG,EAAE,oBAAqB,SAAS,CAAC,CACzF,CACF,EACA,MAAM,cAAgB,IAAI,UAAY,CACpC,KAAK,cAAgB,SAAU,UAAW,CACxC,EAAE,cAAe,SAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,aAAc,IAAI,MAAM,WAAW,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,EAAE,cAAe,SAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,OAAO,CACpC,CAAC,CACH,CACF,EACA,MAAM,uBAAyB,IAAI,UAAY,CAC7C,KAAK,cAAgB,SAAU,UAAW,CACxC,EAAE,cAAe,SAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,aAAc,IAAI,MAAM,WAAW,EAAE,IAAI,CAAC,CAAC,CAC1D,CAAC,CACH,EAEA,KAAK,gBAAkB,SAAU,UAAW,CAC1C,EAAE,cAAe,SAAS,EAAE,KAAK,UAAY,CAC3C,EAAE,IAAI,EAAE,KAAK,YAAY,EAAE,OAAO,CACpC,CAAC,CACH,CACF,EAEA,MAAM,YAAc,CAAC,EACrB,MAAM,cAAgB,IAAI,UAAY,CACpC,IAAI,EAAI,KAER,EAAE,yBAA2B,SAAU,QAAS,WAAY,CAC1D,OAAO,WAAW,KAAK,mCAAqC,QAAQ,GAAK,IAAI,CAC/E,EAEA,EAAE,UAAY,CACZ,UAAW,kBACX,QAAS,WACT,UAAW,cACX,aAAc,0CACd,YAAa,mBACf,EACA,EAAE,QAAU,CACV,iBAAkB,MAAM,QAAQ,8BAChC,cAAe,MAAM,QAAQ,6BAC7B,cAAe,MAAM,QAAQ,0BAC7B,gBAAiB,MAAM,QAAQ,8BAC/B,mBAAoB,MAAM,QAAQ,sCAClC,gBAAiB,MAAM,QAAQ,SACjC,EAEA,EAAE,WAAa,SAAU,IAAK,QAAS,CACrC,IAAI,OAAS,EAAE,QAAQ,GAAG,EAE1B,OAAI,UACF,OAAS,OAAO,QAAQ,UAAW,6BAA+B,MAAM,QAAQ,YAAY,QAAQ,MAAO,MAAM,YAAY,EAAI,SAAS,GAGrI,MACT,EAEA,EAAE,eAAiB,SAAU,MAAO,CAClC,IAAI,UAAY,MAAM,KAAK,YAAY,EACnC,KAAO,KAEX,OAAK,MAAM,YAAY,SAAS,IAC9B,MAAM,YAAY,SAAS,EAAI,KAAK,MAAM,SAAS,eAAe,eAAiB,SAAS,EAAE,SAAS,GAGzG,KAAO,MAAM,YAAY,SAAS,EAE7B,MACH,QAAQ,IAAI,6BAA+B,MAAM,KAAK,YAAY,EAAI,GAAG,EAGpE,IACT,EAEA,EAAE,YAAc,SAAU,QAAS,CACjC,OAAO,QAAQ,uBAAuB,kBAAoB,EAAI,QAAQ,uBAAuB,eAAiB,QAAQ,uBAAuB,gBAAkB,QAAQ,uBAAuB,cAChM,EAAG,EAAE,uBAAyB,SAAU,QAAS,CAC/C,GAAI,QAAS,CACX,IAAI,OAAS,OAAO,SAAS,SAAW,KAAO,OAAO,SAAS,KAAO,OAAO,SAAS,SAAW,YAAc,QAAQ,GACvH,OAAO,QAAQ,aAAa,CAC1B,KAAM,MACR,EAAG,GAAI,MAAM,CACf,CACF,EAEA,EAAE,UAAY,SAAU,QAAS,WAAY,CAC3C,WAAW,KAAK,kBAAkB,EAAE,KAAK,QAAU,QAAQ,IAAM,EAAE,EACnE,WAAW,KAAK,MAAM,EAAE,YAAY,cAAe,CAAC,SAAW,CAAC,QAAQ,GAAG,CAC7E,EAEA,EAAE,cAAgB,SAAU,QAAS,WAAY,CAC/C,WAAW,KAAK,0BAA0B,EAAE,KAAK,QAAU,QAAQ,QAAU,EAAE,EAC/E,WAAW,KAAK,UAAU,EAAE,YAAY,sBAAuB,CAAC,SAAW,CAAC,QAAQ,OAAO,CAC7F,EAEA,EAAE,sBAAwB,SAAU,QAAS,WAAY,CACvD,IAAI,cAAgB,EAAE,yBAAyB,QAAS,UAAU,EAAE,KAAK,WAAW,EAEhF,cACF,WAAW,KAAK,2BAA2B,EAAE,YAAY,wCAAwC,EAAE,KAAK,EAAE,WAAW,iBAAiB,EAAE,QAAQ,iBAAkB,aAAa,CAAC,EAEhL,WAAW,KAAK,2BAA2B,EAAE,SAAS,wCAAwC,EAAE,MAAM,CAE1G,EAEA,EAAE,gBAAkB,SAAU,QAAS,WAAY,CACjD,IAAI,WAAa,WAAW,KAAK,YAAY,EAE7C,GAAI,WAAW,OACb,GAAI,SAAW,QAAQ,UACrB,GAAI,QAAQ,sBAAwB,EAAE,yBAAyB,QAAS,UAAU,EAAE,KAAK,OAAO,GAAK,MAAO,CAC1G,IAAI,YAAc,EAAE,eAAe,WAAW,QAAQ,MAAM,CAAC,EAE7D,WAAW,KAAK,qBAAqB,EAAE,KAAK,YAAY,OAAS,QAAQ,MAAM,QAAQ,SAAS,GAAK,EAAI,GAAK,MAAQ,QAAQ,MAAM,EACpI,WAAW,KAAK,CAClB,MACE,WAAW,KAAK,OAGlB,WAAW,KAAK,CAGtB,EAEA,EAAE,YAAc,SAAU,QAAS,WAAY,CAC7C,IAAI,WAAa,WAAW,KAAK,EAAE,UAAU,SAAS,EAGtD,GAFA,WAAW,YAAY,SAAS,EAE5B,QAAS,CACX,IAAI,cAAgB,EAAE,OAAO,EACzB,OAAS,EAAE,8BAA8B,EAAE,SAAS,aAAa,EASrE,GARA,EAAE,0CAA0C,EAAE,KAAK,MAAM,QAAQ,YAAY,QAAQ,MAAO,MAAM,YAAY,CAAC,EAAE,SAAS,MAAM,EAE5H,QAAQ,iBAAmB,QAAQ,QACrC,OAAO,OAAO,GAAG,EACjB,EAAE,sCAAsC,EAAE,KAAK,MAAM,QAAQ,YAAY,QAAQ,iBAAkB,MAAM,YAAY,CAAC,EAAE,SAAS,MAAM,EACvI,OAAO,SAAS,SAAS,GAGvB,QAAQ,uBAAwB,CAClC,IAAI,kBAAoB,EAAE,0BAA0B,EAAE,SAAS,aAAa,EAC5E,EAAE,8CAA8C,EAAE,KAAK,MAAM,QAAQ,YAAY,QAAQ,WAAY,MAAM,YAAY,CAAC,EAAE,SAAS,iBAAiB,EACpJ,EAAE,sCAAsC,EAAE,KAAK,EAAE,WAAW,oBAAoB,CAAC,EAAE,SAAS,iBAAiB,EAC7G,EAAE,iCAAiC,EAAE,KAAK,EAAE,YAAY,OAAO,CAAC,EAAE,SAAS,iBAAiB,CAC9F,CAEA,WAAW,KAAK,cAAc,KAAK,CAAC,CACtC,MACE,WAAW,KAAK,EAAE,WAAW,mBAAoB,OAAO,CAAC,CAE7D,EAEA,EAAE,kBAAoB,SAAU,QAAS,OAAQ,QAAS,CACxD,QAAQ,KAAK,UAAY,CACvB,IAAI,OACJ,OAAS,EAAE,WAAW,SAAW,OAAQ,OAAO,EAE5C,SAAW,KACT,EAAE,IAAI,EAAE,GAAG,OAAO,EACpB,EAAE,IAAI,EAAE,IAAI,MAAM,EAElB,EAAE,IAAI,EAAE,KAAK,MAAM,EAGzB,CAAC,CACH,EAEA,EAAE,cAAgB,SAAU,QAAS,WAAY,CAC/C,IAAI,QAAU,WAAW,KAAK,EAAE,UAAU,YAAY,EAElD,SAAW,QAAQ,WAAa,IAClC,QAAQ,WAAW,UAAU,EAE7B,EAAE,kBAAkB,QAAS,UAAW,OAAO,IAE/C,QAAQ,KAAK,WAAY,UAAU,EAE/B,QACF,EAAE,kBAAkB,QAAS,UAAW,OAAO,EAE/C,EAAE,kBAAkB,QAAS,YAAa,OAAO,EAGvD,EAEA,EAAE,6BAA+B,SAAU,QAAS,WAAY,CAC9D,WAAW,YAAY,8BAA+B,SAAW,CAAC,QAAQ,SAAS,EACnF,WAAW,YAAY,4BAA6B,SAAW,QAAQ,WAAa,QAAQ,sBAAwB,EAAE,yBAAyB,QAAS,UAAU,EAAE,KAAK,OAAO,GAAK,KAAK,EAC1L,WAAW,YAAY,0BAA2B,SAAW,QAAQ,WAAa,QAAQ,iBAAmB,QAAQ,KAAK,CAC5H,EAEA,EAAE,mBAAqB,SAAU,cAAe,CAC9C,EAAE,aAAa,EAAE,IAAI,aAAa,EAAE,SAAS,YAAY,EAAE,KAAK,UAAY,CAC1E,IAAI,eAAiB,EAAE,IAAI,EAE3B,GAAI,eAAe,GAAG,QAAQ,EAAG,CAC/B,IAAI,YAAc,EAAE,eAAe,eAAe,QAAQ,MAAM,CAAC,EAGjE,eAAe,GAAG,0DAA2D,SAAU,EAAG,QAAS,CACjG,GAAI,GAAE,IAAI,EAAE,GAAG,iCAAiC,EAIhD,KAAI,QAAU,QAEd,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,GAKtC,IAAI,WAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,SAAS,EAEtD,EAAE,YAAY,QAAS,UAAU,EAGjC,EAAE,cAAc,QAAS,UAAU,EAGnC,EAAE,MAAM,EAAE,QAAQ,qBAAsB,CACtC,QAAS,QACT,QAAS,WACX,CAAC,EAEG,SAAW,QAAQ,gBACrB,WAAW,KAAK,EAAE,UAAU,OAAO,EAAE,QAAQ,uBAAwB,OAAO,EAI9E,EAAE,cAAc,QAAS,UAAU,EAEnC,EAAE,UAAU,QAAS,UAAU,EAE/B,EAAE,sBAAsB,QAAS,UAAU,EAE3C,EAAE,gBAAgB,QAAS,UAAU,EAErC,EAAE,6BAA6B,QAAS,UAAU,EAGlD,IAAI,MAAQ,EAAE,IAAI,EAAE,QAAQ,MAAM,EAE9B,MAAM,KAAK,sBAAsB,GAAK,EAAE,MAAQ,UAClD,EAAE,uBAAuB,OAAO,EAIlC,EAAE,IAAI,EAAE,QAAQ,iBAAkB,OAAO,EAC3C,CAAC,EAED,eAAe,QAAQ,EAAE,UAAU,SAAS,EAAE,KAAK,EAAE,UAAU,WAAW,EAAE,GAAG,6BAA8B,SAAU,UAAY,CACjI,IAAI,gBAAkB,CAAC,EACvB,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,WAAW,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAY,CACvE,gBAAgB,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CACpC,CAAC,EAID,QAFI,QAAU,GAEL,EAAI,EAAG,EAAI,YAAY,SAAS,OAAQ,IAAK,CAIpD,QAHI,EAAI,YAAY,SAAS,CAAC,EAC1B,WAAa,EAER,EAAI,EAAG,EAAI,gBAAgB,OAAQ,IACtC,EAAE,QAAQ,CAAC,GAAK,gBAAgB,CAAC,GACnC,aAIJ,GAAI,YAAc,gBAAgB,OAAQ,CACxC,QAAU,EACV,KACF,CACF,CAGI,SACF,eAAe,IAAI,QAAQ,EAAE,EAG/B,eAAe,QAAQ,SAAU,OAAO,CAC1C,CAAC,EAED,eAAe,QAAQ,UAAU,CACnC,CAGA,MAAM,uBAAuB,eAAe,QAAQ,MAAM,CAAC,CAC7D,CAAC,CACH,EAEA,EAAE,qBAAuB,SAAU,cAAe,CAChD,EAAE,aAAa,EAAE,YAAY,YAAY,EAAE,KAAK,UAAY,CAC1D,EAAE,IAAI,EAAE,QAAQ,WAAW,EAAE,IAAI,sBAAsB,EACvD,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,SAAS,EAAE,KAAK,EAAE,UAAU,WAAW,EAAE,IAAI,sBAAsB,EAC/F,MAAM,0BAA0B,EAAE,IAAI,EAAE,QAAQ,MAAM,CAAC,CACzD,CAAC,CACH,CACF,EACA,MAAM,qBAAuB,CAAC,KAAM,OAAQ,OAAQ,UAAW,cAAe,UAAW,WAAW,EAAE,KAAK,gBAAgB,EAAI,gBAE/H,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,SAAU,UAAW,CAEzC,EAAE,YAAa,SAAS,EAAE,KAAK,UAAY,CACzC,IAAI,MAAQ,EAAE,IAAI,EAElB,SAAS,2BAA4B,CACnC,IAAI,uBAAyB,EAC7B,aAAM,KAAK,MAAM,SAAS,YAAY,EAAI,yBAA2B,gBAAgB,EAAE,KAAK,UAAY,CACtG,wBAA0B,EAAE,IAAI,EAAE,WAAW,EAAI,CACnD,CAAC,EACM,sBACT,CAGA,MAAM,QAAQ,oBAAoB,EAAE,GAAG,sBAAuB,eAAgB,SAAU,EAAG,CACzF,EAAE,eAAe,EACjB,IAAI,SAAW,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAE1F,EAAE,IAAI,EAAE,SAAS,MAAM,EACzB,SAAS,KAAK,EAEd,SAAS,KAAK,CAElB,CAAC,EAED,IAAI,gBAAiB,UACjB,UAAY,CAAC,EAAE,IAAI,EAAE,QAAQ,oBAAoB,EAAE,OAGvD,GAFA,MAAM,YAAY,4BAA6B,SAAS,EAEpD,UAAW,CACb,IAAI,iBAAmB,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,MAAM,aAAa,EAAE,CAAC,CAAC,EAC5E,gBAAkB,CAChB,OAAQ,EACR,KAAM,GACN,UAAW,GACX,MAAO,EACP,OAAQ,GACR,IAAK,GACL,KAAM,GACN,WAAY,CACV,EAAG,CACD,MAAO,iBAAmB,EAAI,EAAI,CACpC,EACA,IAAK,CACH,MAAO,KAAK,IAAI,EAAG,iBAAmB,CAAC,CACzC,EACA,IAAK,CACH,MAAO,iBAAmB,CAC5B,EACA,IAAM,CACJ,MAAO,gBACT,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,EAIF,IAAI,aAAe,UAAwB,CAEzC,MAAM,KAAK,YAAY,EAAE,KAAK,UAAY,CACxC,EAAE,IAAI,EAAE,KAAK,gBAAiB,EAAE,IAAI,EAAE,KAAK,UAAU,CAAC,EAAE,WAAW,UAAU,CAC/E,CAAC,EAED,MAAM,gCAAgC,KAAK,EAE3C,MAAM,GAAG,2BAA4B,UAAY,CAE/C,MAAM,KAAK,iBAAiB,EAAE,KAAK,UAAY,CAC7C,EAAE,IAAI,EAAE,KAAK,WAAY,EAAE,IAAI,EAAE,KAAK,eAAe,CAAC,EAAE,WAAW,eAAe,CACpF,CAAC,EAED,MAAM,KAAK,mBAAmB,EAAE,YAAY,kBAAkB,EAAE,SAAS,UAAU,EAEnF,MAAM,oBAAoB,WAAW,MAAM,QAAQ,qBAAqB,CAAC,EAEzE,WAAW,UAAY,CACrB,MAAM,KAAK,cAAc,EAAE,WAAW,OAAO,EAC7C,MAAM,QAAQ,sBAAsB,CACtC,EAAG,EAAE,CACP,CAAC,EAED,MAAM,GAAG,gDAAiD,SAAU,IAAK,CAEvE,GAAI,CAAC,WAAa,IAAI,MAAQ,UAAW,CACvC,IAAI,WAAa,0BAA0B,EAAI,MAAM,MAAM,EAE3D,GAAI,YAAc,UAAW,CAE3B,gBAAgB,KAAO,WACvB,UAAY,WAEZ,EAAE,IAAI,MAAM,EAAE,KAAK,cAAc,EAAE,QAAQ,EAE3C,EAAE,IAAI,MAAM,EAAE,YAAY,eAAe,EAEzC,MACF,CACF,CAGA,WAAW,UAAY,CAErB,IAAI,aAAe,MAAM,KAAK,YAAY,EAAE,MAAM,EAC9C,0BAA4B,aAAe,MAAM,MAAM,EAE3D,GAAI,0BAA2B,CAG7B,IAAI,SAAW,EACf,MAAM,KAAK,WAAW,EAAE,KAAK,UAAY,CACvC,UAAY,EAAE,IAAI,EAAE,WAAW,EAAI,EAAI,CACzC,CAAC,EACD,MAAM,KAAK,YAAY,EAAE,IAAI,CAAC,CAAC,EAAE,YAAY,sBAAsB,CACrE,MAGE,MAAM,KAAK,YAAY,EAAE,SAAS,sBAAsB,EAAE,IAAI,CAAC,CAAC,EAIlE,MAAM,QAAQ,oBAAoB,EAAE,KAAK,cAAc,EAAE,YAAY,mBAAoB,CAAC,yBAAyB,CACrH,EAAG,EAAE,CACP,CAAC,EAED,MAAM,yBAA2B,MAAM,0BAA4B,EACnE,MAAM,GAAG,yBAA0B,UAAY,CAE7C,EAAE,YAAa,IAAI,EAAE,WAAW,aAAa,EAC7C,EAAE,mBAAoB,IAAI,EAAE,KAAK,cAAe,MAAM,EAAE,KAAK,UAAY,CACvE,MAAM,2BACN,IAAI,iBAAmB,IAAM,MAAM,yBACnC,EAAE,IAAI,EAAE,KAAK,oEAAoE,EAAE,KAAK,UAAY,CAClG,EAAE,IAAI,EAAE,KAAK,KAAM,EAAE,IAAI,EAAE,KAAK,IAAI,EAAI,gBAAgB,CAC1D,CAAC,EAAE,KAAK,kBAAmB,EAAI,EAC/B,EAAE,IAAI,EAAE,KAAK,mCAAmC,EAAE,KAAK,UAAY,CACjE,EAAE,IAAI,EAAE,KAAK,MAAO,EAAE,IAAI,EAAE,KAAK,KAAK,EAAI,gBAAgB,CAC5D,CAAC,EAAE,KAAK,kBAAmB,EAAI,CACjC,CAAC,CACH,CAAC,EAAE,SAAS,cAAc,EAAE,YAAY,eAAe,CACzD,EAEA,aAAa,CACf,CAAC,CACH,EAEA,MAAM,gBAAkB,SAAU,UAAW,CAC3C,EAAE,qBAAsB,SAAS,EAAE,IAAI,gBAAgB,EACvD,EAAE,gBAAiB,SAAS,EAAE,MAAM,SAAS,EAC7C,MAAM,kCAAkC,EAAE,gBAAiB,SAAS,CAAC,EACrE,EAAE,gBAAiB,SAAS,EAAE,KAAK,UAAY,CAC7C,EAAE,IAAI,EAAE,KAAK,cAAc,EAAE,QAAQ,CACvC,CAAC,CACH,EAEA,MAAM,qBAAuB,SAAU,KAAM,CAC3C,IAAI,IAAM,CACR,QAAS,EACT,KAAM,IACN,OAAQ,OAAO,SAAS,QAC1B,EACA,EAAE,OAAO,aAAc,KAAM,GAAG,CAClC,EAEA,MAAM,oBAAsB,UAAY,CACtC,OAAO,EAAE,OAAO,YAAY,CAC9B,EAGA,MAAM,wBAA0B,SAAU,MAAO,CAC/C,MAAM,KAAK,kCAAkC,EAAE,SAAS,UAAU,CACpE,EAGA,MAAM,oBAAsB,IAAI,UAAY,CAC1C,IAAI,EAAI,KAER,EAAE,WAAa,SAAU,UAAW,CAClC,IAAI,UAAY,UAEZ,OAAO,WAAc,cACvB,UAAY,EAAE,MAAM,GAGtB,EAAE,mBAAmB,SAAS,CAChC,EAEA,EAAE,mBAAqB,SAAU,UAAW,CAC1C,IAAI,UAAY,UAEZ,OAAO,WAAc,cACvB,UAAY,EAAE,MAAM,GAItB,EAAE,sEAAuE,SAAS,EAAE,KAAK,UAAY,CACnG,GAAI,EAAE,MAAM,EAAE,MAAM,GAAK,KAAO,EAAE,IAAI,EAAE,QAAQ,WAAW,EAAE,OAAS,EAAG,CACvE,IAAI,QAAU,EACd,EAAE,IAAI,EAAE,KAAK,qEAAqE,EAAE,KAAK,UAAY,CAC/F,EAAE,IAAI,EAAE,OAAO,EAAI,UAAS,QAAU,EAAE,IAAI,EAAE,OAAO,EAC3D,CAAC,EACD,EAAE,IAAI,EAAE,KAAK,iEAAiE,EAAE,IAAI,aAAc,OAAO,CAC3G,MACE,EAAE,IAAI,EAAE,KAAK,iEAAiE,EAAE,IAAI,aAAc,EAAE,CAExG,CAAC,EAED,EAAE,0GAA0G,EAAE,IAAI,aAAc,EAAE,EAElI,EAAE,yBAAyB,SAAS,CACtC,EAEA,EAAE,yBAA2B,SAAU,UAAW,CAChD,IAAI,UAAY,UAEZ,OAAO,WAAc,cACvB,UAAY,EAAE,MAAM,GAItB,EAAE,oCAAqC,SAAS,EAAE,KAAK,UAAY,CACjE,GAAI,EAAE,MAAM,EAAE,MAAM,GAAK,KAAO,EAAE,IAAI,EAAE,QAAQ,WAAW,EAAE,OAAS,EAAG,CACvE,IAAI,QAAU,EACd,EAAE,IAAI,EAAE,KAAK,gDAAgD,EAAE,KAAK,UAAY,CAC1E,EAAE,IAAI,EAAE,OAAO,EAAI,UAAS,QAAU,EAAE,IAAI,EAAE,OAAO,EAC3D,CAAC,EACD,EAAE,IAAI,EAAE,KAAK,6BAA6B,EAAE,IAAI,aAAc,OAAO,CACvE,MACE,EAAE,IAAI,EAAE,KAAK,6BAA6B,EAAE,IAAI,aAAc,EAAE,CAEpE,CAAC,CACH,CACF,EAEA,MAAM,kBAAoB,SAAU,UAAW,CAC7C,EAAE,0CAA2C,SAAS,EAAE,SAAS,aAAa,EAAE,KAAK,UAAY,CAC/F,IAAI,QAAU,EAAE,EAAE,IAAI,EAAE,KAAK,eAAe,CAAC,EAC7C,EAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,GAAG,UAAU,GAAK,CAAC,QAAQ,SAAS,eAAe,EAAI,IAAM,GAAG,CACtG,CAAC,CACH,EAGA,MAAM,iBAAmB,SAAU,UAAW,CAC5C,EAAE,2BAA4B,SAAS,EAAE,SAAS,YAAY,CAChE,EAGA,MAAM,QAAU,CACd,mBAAoB,IAEpB,KAAM,SAAc,KAAM,OAAQ,CAChC,IAAI,sBAAwB,CAC1B,wBAAyB,IACzB,MAAO,eACT,EACI,oBAAsB,CACxB,wBAAyB,IACzB,eAAgB,MAAM,QAAQ,4BAC9B,kBAAmB,MAAM,QAAQ,4BACjC,MAAO,eACT,EAEI,OAAO,QAAW,cACpB,sBAAwB,EAAE,OAAO,sBAAuB,MAAM,EAC9D,oBAAsB,EAAE,OAAO,oBAAqB,MAAM,GAG5D,KAAK,IAAI,4BAA4B,EAAE,KAAK,UAAY,CAEtD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,eAAe,EAAI,oBAAsB,qBAAqB,CAC7F,CAAC,EAAE,GAAG,eAAgB,SAAU,EAAG,CAEjC,IAAI,QAAU,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,SAAS,QAAQ,mBAAmB,EAAE,SAAS,8BAA8B,EACnH,WAAW,UAAY,CACrB,QAAQ,SAAS,gCAAgC,EACjD,WAAW,UAAY,CACrB,QAAQ,YAAY,8BAA8B,CACpD,EAAG,EAAE,CACP,EAAG,EAAE,CACP,CAAC,EAAE,GAAG,kBAAmB,SAAU,EAAG,CAEpC,IAAI,QAAU,EAAE,IAAI,EAChB,QAAU,QAAQ,KAAK,SAAS,EAAE,SAAS,QAAQ,mBAAmB,EAI1E,GAFA,aAAa,QAAQ,KAAK,0BAA0B,CAAC,EAEjD,CAAC,QAAQ,SAAS,6BAA6B,EACjD,eAAQ,SAAS,6BAA6B,EAC9C,QAAQ,KAAK,2BAA4B,WAAW,UAAY,CAC9D,QAAQ,QAAQ,OAAO,CACzB,EAAG,MAAM,QAAQ,kBAAkB,CAAC,EAC7B,EAEX,CAAC,EAAE,GAAG,gBAAiB,SAAU,EAAG,CAElC,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,SAAS,QAAQ,mBAAmB,EAAE,YAAY,4DAA4D,CACxI,CAAC,CACH,EACA,aAAc,SAAsB,WAAY,CAC9C,MAAM,QAAQ,QAAQ,EAAE,0BAA2B,UAAU,CAAC,CAChE,EACA,QAAS,SAAiB,KAAM,CAC9B,KAAK,QAAQ,SAAS,EAAE,IAAI,4CAA4C,CAC1E,EACA,4BAA6B,SAAqC,MAAO,CACvE,GAAI,MAAM,GAAI,CACZ,IAAI,UAAY,iBAAiB,MAAM,EAAE,EAAE,YAAY,EAAE,QAAQ,KAAM,EAAE,EAAE,QAAQ,cAAe,GAAG,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,EAAE,EAC5I,OAAO,EAAE,CAAC,8BAA+B,yCAA0C,UAAW,YAAa,sCAAuC,MAAM,KAAM,UAAW,QAAQ,EAAE,KAAK,EAAE,CAAC,CAC7L,KACE,QAAO,EAAE,CAAC,iDAAkD,sCAAuC,MAAM,KAAM,UAAW,QAAQ,EAAE,KAAK,EAAE,CAAC,CAEhJ,CACF,EAEA,EAAE,SAAUC,GAAG,CACb,IAAIA,GAAIA,GAwDR,GAtDAA,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,EAEDA,GAAE,GAAG,YAAc,SAAU,EAAG,CAC9B,OAAO,KAAK,OAAO,UAAY,CAC7B,OAAOA,GAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAS,CACrC,CAAC,CACH,EAGAA,GAAE,GAAG,iBAAmB,SAAU,MAAO,CACnC,OAAO,OAAS,cAAa,MAAQ,KACzCA,GAAE,IAAI,EAAE,KAAK,UAAY,CACvBA,GAAE,IAAI,EAAE,QAAQ,MAAO,UAAY,CACjCA,GAAE,IAAI,EAAE,OAAO,CACjB,CAAC,CACH,CAAC,CACH,EAGAA,GAAE,QAAQ,EAAE,GAAG,QAAS,wBAAyB,SAAU,EAAG,CAC5D,IAAI,QAAUA,GAAEA,GAAE,IAAI,EAAE,KAAK,eAAe,CAAC,EAEzC,QAAQ,SAAS,eAAe,GAClC,QAAQ,KAAK,EAAE,YAAY,eAAe,EAG5CA,GAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,GAAG,UAAU,EAAI,IAAM,GAAG,EAC9D,QAAQ,YAAY,GAAG,EACvB,EAAE,eAAe,CACnB,CAAC,EAEDA,GAAE,QAAQ,EAAE,GAAG,SAAU,iBAAkB,UAAY,CACrD,OAAO,SAAWA,GAAE,IAAI,EAAE,IAAI,CAChC,CAAC,EAEDA,GAAE,mBAAmB,EAAE,SAASA,GAAE,OAAO,CAAC,EAAG,MAAM,OAAO,EAAG,CAC3D,UAAW,EACb,CAAC,CAAC,EAEFA,GAAE,QAAQ,EAAE,GAAG,QAAS,qBAAsB,SAAU,EAAG,CACzD,EAAE,eAAe,EACjBA,GAAE,MAAM,EAAE,YAAY,mBAAmB,CAC3C,CAAC,EAEDA,GAAE,8CAAgD,MAAM,QAAQ,0CAA4C,QAAQ,EAAE,GAAG,QAAS,UAAY,CAC5I,OAAAA,GAAE,MAAM,EAAE,YAAY,+BAA+B,EAC9C,EACT,CAAC,EAAE,SAAS,MAAM,EAEd,MAAM,SAAS,uBAAwB,CAEzC,IAAI,eAAiB,SAAwB,QAAS,MAAO,CACvD,QAAQ,OAAS,IACnB,QAAQ,YAAY,UAAU,EAC9B,QAAQ,KAAK,qBAAqB,EAAE,KAAK,EAAE,QAAQ,CACjD,OAAQ,CACV,EAAG,MAAO,UAAY,CACpBA,GAAE,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,CAC/B,CAAC,EACD,QAAQ,KAAK,EAAE,KAAK,UAAY,CAC9BA,GAAE,IAAI,EAAE,QAAQ,CACd,cAAe,CACjB,EAAG,KAAK,CACV,CAAC,EAEL,EAII,uBAAyB,UAAkC,CAC7DA,GAAE,2CAA2C,EAAE,KAAK,UAAY,CAC9DA,GAAE,IAAI,EAAE,KAAK,YAAaA,GAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAChD,CAAC,EACDA,GAAE,qBAAqB,EAAE,KAAK,UAAY,CACxC,IAAI,QAAUA,GAAE,IAAI,EAAE,KAAK,gBAAgB,EAC3C,GAAI,QAAQ,QAAU,EAAG,MAAO,GAEhC,IAAI,IAAM,EACN,QAAU,EAEV,YAAc,KAAK,IAAI,QAAQ,MAAM,EAAE,YAAY,EAAGA,GAAE,QAAQ,CAAC,CAAC,EAAE,YAAY,CAAC,EACjF,gBAAkB,QAAQ,MAAM,EAAE,OAAO,EAAE,IAC/C,QAAQ,KAAK,SAAU,MAAO,CAC5B,IAAI,cAAgBA,GAAE,IAAI,EAAE,OAAO,EAAE,IAEjC,OAAS,EACX,QAAU,cAEN,cAAgB,UAClB,MACA,QAAU,eAIdA,GAAE,IAAI,EAAE,KAAK,CACX,UAAW,gBAAkB,IAAM,WACrC,CAAC,CACH,CAAC,CACH,CAAC,CACH,EAGI,oBAAsB,IAC1BA,GAAE,QAAQ,EAAE,GAAG,QAAS,sHAAuH,UAAY,CACzJ,IAAI,UAAYA,GAAE,MAAM,EAAE,MAAM,EAC5B,WAAaA,GAAE,IAAI,EAAE,KAAK,MAAM,EAEpC,GAAI,UAAY,IAAK,CAEf,MAAM,wBACR,MAAM,uBAAuB,MAAM,EAGrC,IAAI,OAASA,GAAE,IAAI,EAAE,QAAQ,gBAAgB,EACzC,YAAc,KACd,cAAgB,KAChB,QAAUA,GAAE,IAAI,EAAE,QAAQ,oBAAoB,EAC9C,WAAa,KAEjB,GAAI,QAAQ,OAAS,EAAG,CAGtB,GAFA,WAAa,QAAQ,QAAQ,wBAAwB,EAEjD,WAAW,KAAK,qBAAqB,EAAE,SAAW,EACpD,OAGF,cAAgB,WAAW,KAAK,qBAAqB,CACvD,MACE,cAAgB,OAAO,KAAK,qBAAqB,EAKnD,GAFA,YAAc,cAAc,KAAK,QAAQ,EAErC,OAAO,YAAY,UAAU,EAAE,SAAS,UAAU,EAAG,CAEvD,GAAI,QAAQ,OAAS,EAAG,CAEtB,IAAI,aAAe,QAAQ,KAAK,yBAAyB,EAAE,IAAI,MAAM,EAAE,YAAY,UAAU,EAAE,SAAW,EAEtG,aACF,cAAc,OAAO,CAAC,GAGtB,MAAM,cAAc,qBAAqBA,GAAE,cAAe,aAAa,CAAC,EACxEA,GAAE,WAAY,aAAa,EAAE,IAAI,KAAK,SAAS,EAC/CA,GAAE,aAAc,aAAa,EAAE,MAAM,SAAS,GAIhD,cAAc,IAAI,aAAa,EAAE,GAAG,cAAe,UAAY,CAC7D,cAAc,KAAK,EAAE,QAAQ,CAC3B,OAAQ,YAAY,YAAY,CAClC,EAAG,mBAAmB,CACxB,CAAC,CACH,KAAO,CAEL,IAAI,kBAAoB,OAAO,SAAS,WAAW,EACnD,kBAAkB,KAAK,UAAY,CACjC,eAAeA,GAAE,IAAI,EAAG,CAAC,EAEzB,MAAM,cAAc,qBAAqBA,GAAE,cAAe,IAAI,CAAC,EAC/D,MAAM,sBAAsB,IAAI,CAClC,CAAC,EAED,cAAc,IAAI,aAAa,EAAE,GAAG,cAAe,UAAY,CAE7D,GAAI,OAAO,SAAS,UAAU,EAAG,CAC/B,IAAI,aAAe,YAAY,YAAY,EAEvC,MAAQ,kBAAkB,OAAS,EAAI,EAAI,oBAC/C,OAAO,KAAK,EAAE,QAAQ,CACpB,cAAe,aAAe,EAChC,EAAG,KAAK,EAER,cAAc,KAAK,EAAE,QAAQ,CAC3B,OAAQ,YACV,EAAG,KAAK,CACV,CACF,CAAC,CACH,CAGI,OAAO,KACT,MAAM,oBAAoB,yBAAyB,EAIrD,YAAY,KAAK,qCAAqC,EACtD,cAAc,QAAQ,aAAa,EAEnC,IAAI,IAAMA,GAAE,IAAI,EAAE,KAAK,MAAM,EAC7B,KAAO,IAAI,QAAQ,GAAG,GAAK,EAAI,kBAAoB,kBACnD,MAAM,uBAAyBA,GAAE,IAAI,IAAK,SAAU,SAAU,CAC5D,IAAI,WAAaA,GAAE,QAAU,SAAW,QAAQ,EAAE,KAAK,iBAAiB,EAOxE,GALA,WAAW,KAAK,OAAO,EAAE,KAAK,OAAQ,UAAU,EAChD,WAAW,KAAK,gBAAgB,EAAE,UAAUA,GAAE,KAAK,EAAE,KAAK,OAAQ,UAAU,CAAC,EAC7E,WAAW,KAAK,eAAe,EAAE,YAAY,cAAc,EAAE,KAAK,OAAQ,UAAU,EACpF,YAAY,KAAK,UAAU,EAEvB,QAAQ,eAAiB,cAAc,KAAK,yBAAyB,EAAE,OAAQ,CAEjF,IAAI,GAAK,KAET,GAAK,UAAa,CAChB,SAAS,oBAAoB,gCAAiC,EAAE,EAChE,cAAc,QAAQ,aAAa,CACrC,EAEA,SAAS,iBAAiB,gCAAiC,EAAE,EAC7D,QAAQ,cAAc,KAAK,CAC7B,CAGA,MAAM,mBAAmB,aAAa,EAEtC,cAAc,KAAK,aAAa,EAAE,QAAQ,WAAW,EACpD,GAAG,iBAAkB,UAAY,CAChC,cAAc,QAAQ,aAAa,CACrC,CAAC,EACD,cAAc,QAAQ,aAAa,CACrC,CAAC,EAAE,OAAO,UAAY,CACpB,MAAM,uBAAyB,EACjC,CAAC,EAED,cAAc,KAAK,eAAe,EAAE,WAAW,UAAU,EAIzD,IAAI,WAAa,KACb,aAAe,KAMnB,GAJIA,GAAE,iBAAiB,EAAE,IAAI,UAAU,GAAK,WAC1C,cAAgBA,GAAE,iBAAiB,EAAE,OAAO,GAG1C,YAAc,KAChBA,GAAE,yCAAyC,EAAE,QAAQ,CACnD,UAAW,cAAc,OAAO,EAAE,IAAM,YAC1C,EAAG,GAAG,UAEF,QAAQ,OAAS,EAEnBA,GAAE,yCAAyC,EAAE,QAAQ,CACnD,UAAW,OAAO,OAAO,EAAE,GAC7B,EAAG,GAAG,MACD,CAEL,uBAAuB,EACvB,IAAI,UAAY,OAAO,OAAO,KAAK,WAAW,GAAK,YAAc,OAAO,KAAK,WAAW,EAAI,OAAO,OAAO,EAAE,IAC5GA,GAAE,yCAAyC,EAAE,QAAQ,CACnD,UAAW,UAAY,YACzB,EAAG,GAAG,CACR,CAEJ,KAAO,CAED,QAAQ,OAAS,EAEnB,cAAc,KAAK,EAAE,QAAQ,CAC3B,OAAQ,CACV,EAAG,oBAAqB,UAAY,CAElC,YAAY,MAAM,CACpB,CAAC,EAED,eAAe,OAAQ,mBAAmB,EAI5C,IAAI,eAAiB,KACrBA,GAAE,yCAAyC,EAAE,QAAQ,CACnD,UAAW,OAAO,OAAO,EAAE,IAAM,cACnC,EAAG,GAAG,EAEN,cAAc,KAAK,eAAe,EAAE,KAAK,WAAY,IAAI,CAC3D,CAEA,MAAO,EACT,CACF,CAAC,EAEDA,GAAE,QAAQ,EAAE,GAAG,QAAS,oCAAqC,UAAY,CACvE,IAAI,QAAUA,GAAE,IAAI,EAAE,QAAQ,wBAAwB,EAEtD,OAAI,QAAQ,OACV,QAAQ,KAAK,6CAA6C,EAAE,QAAQ,OAAO,EAE3EA,GAAE,IAAI,EAAE,QAAQ,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,QAAQ,OAAO,EAGxE,EACT,CAAC,CACH,CAGA,OAAO,GAAG,QAAU,CAAC,EAAE,QAGvBA,GAAE,QAAQ,EAAE,GAAG,YAAa,cAAe,SAAU,EAAG,CAEtD,IAAI,MAAQA,GAAE,IAAI,EAAE,QAAQ,MAAM,EAC9B,UAAY,MAAM,KAAK,YAAY,EAEnC,MAAM,YAAY,SAAS,GAAK,SAAS,eAAe,eAAiB,SAAS,EAEhFA,GAAE,IAAI,EAAE,QAAQ,MAAM,EAAE,KAAK,2BAA2B,EAAE,KAAK,UAAY,CAC7EA,GAAE,IAAI,EAAE,OAAOA,GAAE,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,CACxC,CAAC,EAAE,OAAS,GAAK,OAAO,SAAW,QAAQ,eACzC,QAAQ,cAAc,KAAK,EAG7B,QAAQ,IAAI,sBAAsB,EAIpCA,GAAE,IAAI,EAAE,GAAG,iBAAkB,SAAU,IAAKC,SAAS,CACnD,IAAI,WAAa,MAAM,QAAQ,SAAS,EAAE,KAAK,yBAAyB,EACxE,WAAW,KAAK,eAAe,EAAE,OAAO,EACxC,WAAW,OAAOD,GAAE,kBAAoBC,SAAQ,EAAE,EAAE,KAAK,CAAC,CAC5D,CAAC,EACD,MAAM,cAAc,mBAAmB,IAAI,EAE3C,IAAI,UAAY,MAAM,KAAK,iBAAiB,EAAE,SAAS,iBAAiB,EAAE,KAAK,QAAQ,EAAE,YAAY,EAErG,GAAI,UAAU,OAAS,EAAG,CAExBD,GAAE,IAAI,EAAE,QAAQ,qBAAqB,EAAE,QAAQ,aAAa,EAG5D,QAFI,YAAc,MAAM,cAAc,eAAe,KAAK,EAEjD,YAAc,EAAG,YAAc,YAAY,QAAQ,OAAQ,cAAe,CAIjF,QAFI,aAAe,CAAC,EAEX,aAAe,EAAG,aAAe,YAAY,SAAS,OAAQ,eAAgB,CACrF,IAAI,QAAU,YAAY,SAAS,YAAY,EAE3C,OAAO,aAAa,QAAQ,QAAQ,WAAW,CAAC,GAAM,cACxD,aAAa,QAAQ,QAAQ,WAAW,CAAC,EAAI,IAI3C,QAAQ,YACV,aAAa,QAAQ,QAAQ,WAAW,CAAC,EAAI,GAEjD,CAGA,QAAS,OAAO,aACT,aAAa,GAAG,GACnBA,GAAE,wBAA0B,YAAc,sBAAuB,KAAK,EAAE,OAAO,UAAY,CACzF,OAAOA,GAAE,IAAI,EAAE,KAAK,YAAY,GAAK,GACvC,CAAC,EAAE,SAAS,aAAa,CAG/B,CACF,CAGA,MAAM,KAAK,+CAA+C,EAAE,KAAK,UAAY,CAC3E,MAAM,QAAQ,KAAKA,GAAE,IAAI,CAAC,CAC5B,CAAC,EAEDA,GAAE,IAAI,EAAE,GAAG,YAAa,UAAY,CAClCA,GAAE,IAAI,EAAE,IAAI,0BAA0B,EAEtC,MAAM,KAAK,6CAA6C,EAAE,YAAY,SAAS,EAE/E,MAAM,QAAQ,aAAa,MAAM,KAAK,mBAAmB,CAAC,CAC5D,CAAC,CACH,CAAC,EAGDA,GAAE,QAAQ,EAAE,GAAG,uBAAwB,WAAY,SAAU,EAAG,KAAM,CAEpE,IAAI,QAAU,KAAK,eAAe,GAElCA,GAAE,IAAI,EAAE,KAAK,gCAAkC,QAAU,UAAU,EAAE,QAAQ,QAAQ,CACvF,CAAC,EAEDA,GAAE,QAAQ,EAAE,GAAG,QAAS,sDAAuD,UAAY,CACzF,IAAI,OAAS,CAAC,EACV,aAAe,EACf,QAAUA,GAAE,IAAI,EAAE,QAAQ,UAAU,EAAE,KAAK,qCAAqC,EAEpF,GAAI,QAAQ,OACV,QAAQ,KAAK,UAAY,CACvB,IAAIE,WAAYF,GAAE,IAAI,EAAE,KAAK,uBAAuB,EAAE,MAAM,EAC5DE,WAAU,KAAK,aAAa,EAAE,YAAY,YAAY,EAAE,SAAS,UAAU,EAAE,OAAO,EAAE,SAAS,uBAAuB,EACtH,OAAO,KAAK,CACV,SAAUA,WACV,QAASF,GAAE,IAAI,EAAE,KAAK,MAAM,CAC9B,CAAC,CACH,CAAC,EACD,QAAQ,KAAK,SAAU,UAAW,CAChC,GAAIA,GAAE,IAAI,EAAE,SAAS,UAAU,EAC7B,oBAAe,UACR,EAEX,CAAC,MACI,CACL,IAAI,UAAYA,GAAE,IAAI,EAAE,KAAK,uBAAuB,EAAE,MAAM,EAC5D,UAAU,KAAK,aAAa,EAAE,YAAY,YAAY,EAAE,SAAS,UAAU,EAAE,OAAO,EAAE,SAAS,uBAAuB,EACtH,OAAO,KAAK,CACV,SAAU,UACV,QAASA,GAAE,IAAI,EAAE,KAAK,MAAM,CAC9B,CAAC,CACH,CAEA,aAAM,mBAAmB,CACvB,OAAQ,OACR,QAAS,aACT,KAAM,MAAM,MAAM,YAClB,KAAM,MAAM,MAAM,aAClB,MAAO,MAAM,MAAM,KACrB,CAAC,EACM,EACT,CAAC,EAED,IAAI,0BAA4BA,GAAE,oCAAoC,EAAE,OAAO,UAAY,CACzF,OAAOA,GAAE,IAAI,EAAE,QAAQ,qBAAqB,EAAE,QAAU,CAC1D,CAAC,EAEG,0BAA0B,QAC5B,MAAM,oBAAoB,WAAW,yBAAyB,EAGhEA,GAAE,MAAM,EAAE,GAAG,kBAAmB,UAAY,CAC1C,WAAW,UAAY,CACrB,MAAM,oBAAoB,mBAAmB,CAC/C,EAAG,GAAG,CACR,CAAC,EAEG,MAAM,SAAS,iBAEjBA,GAAE,QAAQ,EAAE,GAAG,QAAS,mBAAoB,UAAY,CACtD,OAAAA,GAAE,SAASA,GAAE,OAAO,CAAC,EAAG,MAAM,OAAO,EAAG,CACtC,cAAe,GACf,QAASA,GAAE,IAAI,EAAE,QAAQ,uBAAuB,EAAE,KAAK,qBAAqB,EAAE,KAAK,CACrF,CAAC,CAAC,EACK,EACT,CAAC,EAIH,MAAM,iBAAiB,QAAQ,EAE/BA,GAAE,iBAAiB,EAAE,KAAK,UAAY,CACpC,IAAI,WAAaA,GAAE,IAAI,EAAE,SAAS,sCAAsC,EAEpE,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,aAAc,SAAU,EAAG,CACjD,IAAI,QAAUA,GAAE,IAAI,EAAE,OAAO,EAE7B,GAAI,QAAQ,SAAS,SAAS,EAAG,CAC/B,EAAE,eAAe,EACjB,IAAI,IAAMA,GAAE,IAAI,EAAE,KAAK,MAAM,EACzB,MAAQ,IACR,OAAS,IACT,MAAQA,GAAE,MAAM,EAAE,MAAM,EAAI,OAAS,EACrC,KAAOA,GAAE,MAAM,EAAE,OAAO,EAAI,QAAU,EACtC,KAAO,iFAAwF,MAAQ,WAAa,OAAS,QAAU,IAAM,SAAW,KAC5J,OAAO,KAAK,IAAK,UAAW,IAAI,CAClC,SAAW,QAAQ,SAAS,UAAU,EAAG,CACvC,EAAE,eAAe,EACjB,IAAI,IAAMA,GAAE,IAAI,EAAE,KAAK,MAAM,EACzB,MAAQ,IACR,OAAS,IACT,MAAQA,GAAE,MAAM,EAAE,MAAM,EAAI,OAAS,EACrC,KAAOA,GAAE,MAAM,EAAE,OAAO,EAAI,QAAU,EACtC,KAAO,iFAAwF,MAAQ,WAAa,OAAS,QAAU,IAAM,SAAW,KAC5J,OAAO,KAAK,IAAK,WAAY,IAAI,CACnC,SAAW,QAAQ,SAAS,WAAW,EAAG,CACxC,EAAE,eAAe,EACjB,IAAI,IAAMA,GAAE,IAAI,EAAE,KAAK,MAAM,EACzB,MAAQ,IACR,OAAS,IACT,MAAQA,GAAE,MAAM,EAAE,MAAM,EAAI,OAAS,EACrC,KAAOA,GAAE,MAAM,EAAE,OAAO,EAAI,QAAU,EACtC,KAAO,iFAAwF,MAAQ,WAAa,OAAS,QAAU,IAAM,SAAW,KAC5J,OAAO,KAAK,IAAK,YAAa,IAAI,CACpC,SAAW,QAAQ,SAAS,QAAQ,EAAG,CACrC,EAAE,eAAe,EACjB,IAAI,IAAMA,GAAE,IAAI,EAAE,KAAK,MAAM,EACzB,MAAQ,IACR,OAAS,IACT,MAAQA,GAAE,MAAM,EAAE,MAAM,EAAI,OAAS,EACrC,KAAOA,GAAE,MAAM,EAAE,OAAO,EAAI,QAAU,EACtC,KAAO,iFAAwF,MAAQ,WAAa,OAAS,QAAU,IAAM,SAAW,KAC5J,OAAO,KAAK,IAAK,UAAW,IAAI,CAClC,CACF,CAAC,EACDA,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,EAEtE,OAAI,KAAK,KAAK,MAAM,IAClB,KAAO,SAAS,KAAK,KAAK,MAAM,CAAC,GAGnC,KAAK,IAAI,KAAK,IAAI,EAAG,SAAS,KAAK,IAAI,CAAC,EAAI,GAAG,CAAC,EAAE,QAAQ,QAAQ,EAC3D,EACT,CAAC,EAEDA,GAAE,mBAAmB,EAAE,GAAG,QAAS,+BAAgC,UAAY,CAC7E,GAAIA,GAAE,MAAM,EAAE,MAAM,EAAI,IACtB,OAAAA,GAAE,IAAI,EAAE,QAAQ,IAAI,EAAE,YAAY,UAAU,EACrC,EAEX,CAAC,EAED,MAAM,SAAS,KAAK,EACpB,MAAM,SAAS,SAAS,YAAa,MAAM,gBAAgB,EAC3D,MAAM,SAAS,SAAS,UAAW,MAAM,cAAc,EACvD,MAAM,SAAS,SAAS,eAAgB,MAAM,mBAAmB,EACjE,MAAM,SAAS,SAAS,0BAA2B,MAAM,2BAA2B,EACpF,MAAM,SAAS,SAAS,sBAAuB,MAAM,yBAAyB,EAC9E,MAAM,SAAS,SAAS,uBAAwB,MAAM,0BAA0B,EAChF,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,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,mBAAoB,MAAM,uBAAwB,CACxE,aAAc,EAChB,CAAC,EACD,MAAM,SAAS,SAAS,sBAAuB,MAAM,0BAA2B,CAC9E,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,SAAS,4BAA6B,MAAM,+BAAgC,CACzF,aAAc,EAChB,CAAC,EACD,MAAM,SAAS,SAAS,iCAAkC,MAAM,+BAAgC,CAC9F,aAAc,EAChB,CAAC,CACH,CAAC,EAED,EAAE,SAAUA,GAAG,CACT,GAAG,SAAS,OACd,GAAG,SAAS,QAAQ,SAAU,QAAS,CACrC,GAAI,CACF,MAAM,SAAS,SAAS,QAAQ,KAAM,QAAQ,OAAO,CACvD,OAAS,IAAK,CACZ,QAAQ,MAAM,8BAA8B,OAAO,QAAQ,KAAM,GAAG,EAAG,GAAG,CAC5E,CACF,CAAC,EAED,QAAQ,KAAK,iDAAiD,CAElE,CAAC,CACH,GAAG,MAAM,MAAM",
  "names": ["obj", "prefix", "t", "r", "a", "o", "n", "ccPopup", "$container", "status", "container", "response", "data", "$form", "$", "variant", "$imgThumb"]
}
