{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/custom.js?zc=20260621fallback"],
  "sourcesContent": ["// https://minify-js.com/\nimport { $4, $$4, $id4, isRTL, formatMoney, debounce, getterAdd, getterGet, getterRunFn, btnTooltip, Drawer, VariantChangeBase } from 'global';\n\n// WISHLIST\nvar $wishlist_list = $id4('hdt_wishlist_list'),\n  $compare_list = $id4('hdt_compare_list'),\n  nameCachedWishlist = 'theme4:wishlist:id',\n  nameCachedCompare = 'theme4:compare:id';\n// if exit $wishlist_list is use app wishlist the4\nif ($wishlist_list) {\n  var arr_wishlist_list = $wishlist_list.textContent ? $wishlist_list.textContent.split(' ') : [];\n}\nelse {\n  var arr_wishlist_list = (!localStorage.getItem(nameCachedWishlist)) ? [] : localStorage.getItem(nameCachedWishlist).split(',');  // remove id: and conver array\n}\nif ($compare_list){\n  var arr_compare_list = $compare_list.textContent ? $compare_list.textContent.split(' ') : [];\n}\nelse {\n  var arr_compare_list = (!localStorage.getItem(nameCachedCompare)) ? [] : localStorage.getItem(nameCachedCompare).split(',');  // remove id: and conver array\n}\n// arr_wishlist_list = [1234, 5678, 9011]\n// arr_compare_list = [1234, 5678, 9011]\n\nvar linkWishlistApp = '/apps/ecomrise/wishlist',\n  linkCompareApp = '/apps/ecomrise/compare',\n  actionAfterWishlistAdded = themeHDN.extras.AddedWishlistRemove ? 'remove' : 'added',\n  actionAfterCompareAdded = themeHDN.extras.AddedCompareRemove ? 'remove' : 'added',\n  limitWishlist = $wishlist_list ? 100 : 50,\n  limitCompare = 6,\n  conver_to_link_fn = function (prefix = this.textFn, array = this.array) {\n    const x = themeHDN.routes.search_url + `/?view=${prefix}`,\n      y = x + '&type=product&options[unavailable_products]=last&q=';\n    return (array.length) ? y + encodeURI(`id:${array.join(' OR id:')}`) : x;\n  };\n// Reset if limit change\nif (arr_wishlist_list.length > limitWishlist) {\n  arr_wishlist_list.splice(limitWishlist - 1, arr_wishlist_list.length - 1);\n  localStorage.setItem(nameCachedWishlist, arr_wishlist_list.toString());\n}\n// Check is page has item but not show reload page\nif (window.isPageWishlist) {\n  if (arr_wishlist_list.length && !window.isWishlistPerformed) {\n    window.location.href = conver_to_link_fn('wishlist', arr_wishlist_list)\n  } else {\n    window.history.replaceState({}, document.title, conver_to_link_fn('wishlist', []));\n  }\n  themeHDN.wisHref = conver_to_link_fn('wishlist', arr_wishlist_list);\n}\n\n// Reset if limit change\nif (arr_compare_list.length > limitCompare) {\n  arr_compare_list.splice(limitCompare - 1, arr_compare_list.length - 1);\n  localStorage.setItem(nameCachedCompare, arr_compare_list.toString());\n}\n// Check is page has item but not show reload page\nif (window.isPageCompare) {\n  if (arr_compare_list.length && !window.isComparePerformed) {\n    window.location.href = conver_to_link_fn('compare', arr_compare_list)\n  } else {\n    window.history.replaceState({}, document.title, conver_to_link_fn('compare', []));\n  }\n}\nvar _wishlist_id, _wishlist_handle,\n  _update_wis_text, update_wis_text_fn,\n  _update_wis_btns, update_wis_btns_fn,\n  _click_wis, click_wis_fn,\n  _add_wis, add_wis_fn,\n  _remove_wis, remove_wis_fn,\n  _action_after_remove_add, action_after_remove_add_fn,\n  _show_popup_compare, show_popup_compare_fn,\n  _conver_to_link;\nclass Wishlist extends btnTooltip {\n  constructor() {\n    super();\n    getterAdd(_wishlist_id, this, this.dataset.id);\n    getterAdd(_wishlist_handle, this, this.dataset.handle);\n    getterAdd(_update_wis_text, this);\n    getterAdd(_update_wis_btns, this);\n    getterAdd(_click_wis, this);\n    getterAdd(_add_wis, this);\n    getterAdd(_remove_wis, this);\n    getterAdd(_action_after_remove_add, this);\n    getterAdd(_show_popup_compare, this);\n    getterAdd(_conver_to_link, this);\n    this.tabIndex = 0;\n    this.addEventListener(\"click\", () => getterRunFn(_click_wis, this, click_wis_fn).call(this));\n    this.addEventListener(\"keydown\", (event) => {\n      if (event.key == \"Enter\") getterRunFn(_click_wis, this, click_wis_fn).call(this)\n    });\n  }\n  static get observedAttributes() {\n    return [\"action\"];\n  }\n  get isFnWishlist() {\n    return true;\n  }\n  get textFn() {\n    return 'wishlist';\n  }\n  get isPageWishlistorCompare() {\n    //add code check page\n    return this.isFnWishlist ? window.isPageWishlist : window.isPageCompare;\n  }\n  get limit() {\n    return this.isFnWishlist ? limitWishlist : limitCompare;\n  }\n  get nameCached() {\n    return this.isFnWishlist ? nameCachedWishlist : nameCachedCompare;\n  }\n  get array() {\n    return this.isFnWishlist ? arr_wishlist_list : arr_compare_list;\n  }\n  get actionAfterAdded() {\n    return this.isFnWishlist ? actionAfterWishlistAdded : actionAfterCompareAdded;\n  }\n  get action() {\n    return this.getAttribute('action');\n  }\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (oldValue === newValue || (oldValue === null && newValue === 'add')) return;\n    getterRunFn(_update_wis_text, this, update_wis_text_fn).call(this, newValue);\n    super.attributeChangedCallback(name, oldValue, newValue);\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    if (this.array.indexOf(getterGet(_wishlist_id, this)) > -1) {\n      if (this.hasAttribute('remove-on-page')) {\n        return\n      }\n      this.setAttribute('action', this.actionAfterAdded);\n    }\n  }\n};\n_wishlist_id = new WeakMap();\n_wishlist_handle = new WeakMap();\n_update_wis_text = new WeakSet();\n_update_wis_btns = new WeakSet();\n_click_wis = new WeakSet();\n_add_wis = new WeakSet();\n_remove_wis = new WeakSet();\n_action_after_remove_add = new WeakSet();\n_conver_to_link = new WeakSet();\n_show_popup_compare = new WeakSet();\nupdate_wis_text_fn = function (value) {\n  if (this.hasAttribute('remove-on-page')) return;\n  const text = themeHDN.extras[`text_${this.isFnWishlist ? 'wis' : 'cp'}_${value}`],\n    icon = themeHDN.extras[`icon_${this.isFnWishlist ? 'wis' : 'cp'}_${value}`];\n  if (icon) this.firstElementChild.replaceWith(document.createRange().createContextualFragment(icon));\n  if (text) {\n    this.lastElementChild.textContent = text;\n    this.setAttribute('data-txt-tt',text)\n  }\n};\nupdate_wis_btns_fn = function (_action) {\n  // Update Button\n  $$4(`hdt-${this.textFn}[data-id=\"${getterGet(_wishlist_id, this)}\"]`).forEach(btn => {\n    btn.setAttribute('action', _action);\n  });\n  // Update Count and link\n  document.dispatchEvent(new CustomEvent(`theme4:${this.textFn}:update`, {\n    bubbles: true,\n    detail: 'the4'  // arr_wishlist_list\n  }));\n  if ((window.isPageWishlist)) themeHDN.wisHref = conver_to_link_fn('wishlist', arr_wishlist_list);\n};\nclick_wis_fn = function (e) {\n  if (this.action == 'add') {\n    // ADD\n    getterRunFn(_add_wis, this, add_wis_fn).call(this);\n  } else if (this.action === 'added') {\n    // ADDED: go to page wishlist\n    if (!this.isFnWishlist && themeHDN.extras.enableComparePopup) {\n      getterRunFn(_show_popup_compare, this, show_popup_compare_fn).call(this);\n    } else {\n      window.location.href = getterRunFn(_conver_to_link, this, conver_to_link_fn).call(this);\n    }\n  } else {\n    // REMOVE\n    getterRunFn(_remove_wis, this, remove_wis_fn).call(this);\n  }\n};\nadd_wis_fn = function (e) {\n  if ($wishlist_list && this.isFnWishlist || $compare_list && !this.isFnWishlist) {\n    // app wishlist\n    this.setAttribute('aria-busy', true);\n    fetch(this.isFnWishlist ? linkWishlistApp : linkCompareApp, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        product_id: getterGet(_wishlist_id, this),\n        product_handle: getterGet(_wishlist_handle, this),\n        action: 'add'\n      })\n    })\n    .then((response) => {\n      return response.json()\n    })\n    .then((data) => {\n      if (data.status != 'success') {\n        console.error(data.message || 'Unknow error');\n        return;\n      }\n      if(this.isFnWishlist) {\n        arr_wishlist_list = JSON.parse(data.response.metafield.value).ecomrise_ids;\n        if (!Array.isArray(arr_wishlist_list)) {\n          arr_wishlist_list = arr_wishlist_list.split(',');\n        }\n      }\n      if (!this.isFnWishlist) {\n        arr_compare_list = JSON.parse(data.response.metafield.value).ecomrise_ids;\n        if (!Array.isArray(arr_compare_list)) {\n          arr_compare_list = arr_compare_list.split(',');\n        }\n        getterRunFn(_show_popup_compare, this, show_popup_compare_fn).call(this);\n      }\n      getterRunFn(_action_after_remove_add, this, action_after_remove_add_fn).call(this, this.actionAfterAdded);\n    })\n    .catch(function (error) {\n      console.log('Error: ' + error);\n    })\n    .finally(() => {\n      this.setAttribute('aria-busy', false);\n    });\n  }\n  else {\n    // local wishlist\n    // adds the specified elements to the beginning of an array\n    this.array.unshift(getterGet(_wishlist_id, this));\n    //console.log(this.array, getterGet(_wishlist_id, this))\n    if (this.array.length > this.limit) {\n      // if over limit remove element on last array\n      let arraySplice = this.array.splice(this.limit, 1);\n      // arraySplice: allway has 1 element\n      $$4(`hdt-${this.textFn}[data-id=\"${arraySplice[0]}\"]`).forEach(btn => {\n        btn.setAttribute('action', 'add');\n      });\n    }\n    if (!this.isFnWishlist) getterRunFn(_show_popup_compare, this, show_popup_compare_fn).call(this);\n    getterRunFn(_action_after_remove_add, this, action_after_remove_add_fn).call(this, this.actionAfterAdded);\n    localStorage.setItem(this.nameCached, this.array.toString());\n  }\n};\nremove_wis_fn = function (e) {\n  // REMOVE\n  if ($wishlist_list && this.isFnWishlist || $compare_list && !this.isFnWishlist) {\n    // app wishlist\n    this.setAttribute('aria-busy', true);\n    fetch(this.isFnWishlist ? linkWishlistApp : linkCompareApp, {\n      method: 'DELETE',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify({\n        product_id: getterGet(_wishlist_id, this),\n        product_handle: getterGet(_wishlist_handle, this),\n        action: 'add',\n        _method: 'DELETE'\n      })\n    })\n    .then((response) => {\n      return response.json()\n    })\n    .then((data) => {\n      if (data.status != 'success') {\n        console.error(data.message || 'Unknow error');\n        return;\n      }\n      arr_wishlist_list = JSON.parse(data.response.metafield.value).ecomrise_ids;\n      if (!Array.isArray(arr_wishlist_list)) {\n        arr_wishlist_list = arr_wishlist_list.split(',');\n      }\n      getterRunFn(_action_after_remove_add, this, action_after_remove_add_fn).call(this, 'add');\n    })\n    .catch(function (error) {\n      console.log('Error: ' + error);\n    })\n    .finally(() => {\n      this.setAttribute('aria-busy', false);\n    });\n  } else {\n    // local wishlist\n    this.array.splice(this.array.indexOf(getterGet(_wishlist_id, this)), 1);\n    localStorage.setItem(this.nameCached, this.array.toString());\n\n    getterRunFn(_action_after_remove_add, this, action_after_remove_add_fn).call(this, 'add');\n  }\n};\naction_after_remove_add_fn = function (action) {\n\n  if (this.getAttribute('action') == 'remove' && this.hasAttribute('remove-on-page')) {\n    if (this.isFnWishlist) {\n      this.closest('.hdt-card-product').remove();\n    } else {\n      $$4(`.hdt-compare-item-${getterGet(_wishlist_id, this)}`).forEach(item => {\n        item.remove();\n      });\n    }\n    getterRunFn(_update_wis_btns, this, update_wis_btns_fn).call(this, action);\n    if (this.array.length == 0) {\n      $id4(`drawerCompare`)?.removeAttribute('open');\n      if (this.isPageWishlistorCompare) window.location.href = getterRunFn(_conver_to_link, this, conver_to_link_fn).call(this);\n    }\n    //this.setAttribute('action', action);\n  } else {\n    getterRunFn(_update_wis_btns, this, update_wis_btns_fn).call(this, action);\n    // is page wishlist or compare reload page\n    if (this.isPageWishlistorCompare) window.location.href = getterRunFn(_conver_to_link, this, conver_to_link_fn).call(this);\n  }\n};\nshow_popup_compare_fn = function (event) {\n  if (!themeHDN.extras.enableComparePopup || this.isPageWishlistorCompare) return;\n  // add code if want show popup compare\n  $$4('hdt-tooltip-dialog').forEach((tooltip)=> {\n    tooltip.setAttribute('hidden', '');\n  }); // Fix https://github.com/The4-Theme-Dev/Ecomus/issues/81\n  $id4(`drawerCompare`).setAttribute('open', '');\n  fetch(conver_to_link_fn('compare', arr_compare_list) + \"&section_id=compare-offcanvas\")\n    .then((response) => response.text())\n    .then((text) => {\n      const html = document.createElement('div');\n      html.innerHTML = text;\n      const prds = html.querySelector('offcanvas-compare');\n\n      if (prds && prds.innerHTML.trim().length) {\n\n        $4(\"offcanvas-compare\").innerHTML = prds.innerHTML;\n      }\n    })\n    .catch((e) => {\n      console.error(e);\n    });\n};\nvar _clear_all, clear_all_fn;\nclass ClearAll extends HTMLElement {\n  constructor() {\n    super();\n    getterAdd(_clear_all, this);\n    this.tabIndex = 0;\n    this.addEventListener(\"click\", getterRunFn(_clear_all, this, clear_all_fn));\n    this.addEventListener(\"keydown\", (event) => {\n      if (event.key == \"Enter\") getterRunFn(_clear_all, this, clear_all_fn).call(this)\n    });\n  }\n  get ofFn() {\n    return this.getAttribute('of-fn'); //'compare', 'wishlist'\n  }\n  get nameCached() {\n    return this.ofFn == 'compare' ? nameCachedCompare : nameCachedWishlist;\n  }\n  set array(value) {\n    this.ofFn == 'compare' ? arr_compare_list = value : arr_wishlist_list = value;\n  }\n};\n_clear_all = new WeakSet();\nclear_all_fn = function () {\n  localStorage.removeItem(this.nameCached);\n  // Update Buttons\n  $$4(`hdt-${this.ofFn}[action=\"added\"]`).forEach(btn => {\n    btn.setAttribute('action', 'add');\n  });\n  // Update Count and link\n  document.dispatchEvent(new CustomEvent(`theme4:${this.ofFn}:update`, {\n    bubbles: true,\n    detail: 'the4'\n  }));\n  this.array = [];\n  $id4(`drawerCompare`)?.removeAttribute('open');\n  if ($4(`#drawerCompare offcanvas-compare`)){\n    $4(`#drawerCompare offcanvas-compare`).innerHTML = \"\";\n  }\n};\ncustomElements.define(\"hdt-clear-all\", ClearAll);\n// eg: <hdt-clear-all role=\"button\" of-fn=\"compare\">Clear All </hdt-clear-all>\n\n// Update count\nclass WishlistCount extends HTMLElement {\n  constructor() {\n    super();\n    this.textContent = this.array.length;\n    document.addEventListener(`theme4:${this.prefix}:update`, (e) => {\n      //console.log(this.prefix + ' count update.');\n      this.textContent = this.array.length;\n    });\n  }\n  get isFnWishlist() {\n    return true;\n  }\n  get array() {\n    return this.isFnWishlist ? arr_wishlist_list : arr_compare_list;\n  }\n  get prefix() {\n    return this.isFnWishlist ? 'wishlist' : 'compare';\n  }\n}\n// Update link page\nclass WishlistLink extends HTMLElement {\n  constructor() {\n    super();\n    $4('a', this).href = conver_to_link_fn(this.prefix, this.array);\n    //console.log('WishlistLink', this.href)\n    document.addEventListener(`theme4:${this.prefix}:update`, (e) => {\n      $4('a', this).href = conver_to_link_fn(this.prefix, this.array);\n    });\n  }\n  get isFnWishlist() {\n    return true;\n  }\n  get array() {\n    return this.isFnWishlist ? arr_wishlist_list : arr_compare_list;\n  }\n  get prefix() {\n    return this.isFnWishlist ? 'wishlist' : 'compare';\n  }\n}\ncustomElements.define(\"hdt-wishlist\", Wishlist);\ncustomElements.define(\"hdt-wishlist-count\", WishlistCount);\ncustomElements.define(\"hdt-wishlist-a\", WishlistLink);\n\n// COMPARE\nclass Compare extends Wishlist {\n  get isFnWishlist() {\n    return false;\n  }\n  get textFn() {\n    return 'compare';\n  }\n}\n// Update count\nclass CompareCount extends WishlistCount {\n  get isFnWishlist() {\n    return false;\n  }\n}\n// Update link page\nclass CompareLink extends WishlistLink {\n  get isFnWishlist() {\n    return false;\n  }\n}\ncustomElements.define(\"hdt-compare\", Compare);\ncustomElements.define(\"hdt-compare-count\", CompareCount);\ncustomElements.define(\"hdt-compare-a\", CompareLink);\n\n// --------------------------\n// Product Recommendations\n// --------------------------\nclass ProductRecommendations extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n\n      fetch(this.dataset.url)\n        .then((response) => response.text())\n        .then((text) => {\n          const html = document.createElement('div');\n          html.innerHTML = text;\n          const recommendations = html.querySelector('product-recommendations');\n\n          if (recommendations && recommendations.innerHTML.trim().length) {\n            this.innerHTML = recommendations.innerHTML;\n          }\n          document.dispatchEvent(new CustomEvent(\"currency:update\"));\n        })\n        .catch((e) => {\n          console.error(e);\n        });\n    };\n\n    new IntersectionObserver(handleIntersection.bind(this), { rootMargin: '0px 0px 400px 0px' }).observe(this);\n  }\n}\n\ncustomElements.define('product-recommendations', ProductRecommendations);\n\n\n// --------------------------\n// Product Recently\n// --------------------------\nclass ProductRecently extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n      let handleProducts = localStorage.getItem(\"theme4:recently:id\");\n      let prdId = this.dataset.id;\n\n      if (handleProducts !== null) {\n        let products = handleProducts.split(',');\n        let url = this.dataset.url.replace('q=', 'q=id:' + products.join(\"%20OR%20id:\"));\n        fetch(url)\n          .then((response) => response.text())\n          .then((text) => {\n            const html = document.createElement('div');\n            html.innerHTML = text;\n            const recently = html.querySelector('product-recently');\n\n            if (recently && recently.innerHTML.trim().length) {\n              this.innerHTML = recently.innerHTML;\n            }\n            document.dispatchEvent(new CustomEvent(\"currency:update\"));\n          })\n          .catch((e) => {\n            console.error(e);\n          });\n\n      }\n      let arrayProducts = handleProducts !== null ? handleProducts.split(',') : new Array;\n      if (!arrayProducts.includes(prdId + '')) {\n        if (arrayProducts.length >= 10) {\n          arrayProducts.pop();\n        }\n        function prepend(value, array) {\n          var newArray = array.slice();\n          newArray.unshift(value);\n          return newArray;\n        }\n        arrayProducts = prepend(prdId, arrayProducts);\n        arrayProducts = arrayProducts.toString();\n        localStorage.setItem(\"theme4:recently:id\", arrayProducts);\n      }\n    };\n\n    new IntersectionObserver(handleIntersection.bind(this), { rootMargin: '0px 0px 400px 0px' }).observe(this);\n  }\n}\n\ncustomElements.define('product-recently', ProductRecently);\n\n\n// --------------------------\n// Predictive Search\n// --------------------------\nclass PredictiveSearch extends Drawer {\n  constructor() {\n    super();\n    // console.log(!this.hasAttribute('enabled'))\n    if (!this.hasAttribute('enabled')) return;\n    this.cachedResults = {};\n    this.predictiveSearchResults = $4('[data-results-search]', this);\n    this.input = $4('input[type=\"search\"]', this);\n    this.sectionIdResults = this.getAttribute('data-section-id-results') || 'hdt_predictive-search';\n    this.allPredictiveSearchInstances = $$4('predictive-search');\n    this.skeleton = $4('[data-skeleton-search]', this);\n    this.noResults = $4('.hdt-cart-no-results', this);\n    this.hideWrapper = $4('.hdt-cart-hide-has-results', this);\n    this.showWrapper = $4('.hdt-cart-show-has-results', this);\n    this.btn_viewall = $4('.hdt-view_all', this);\n    this.href = this.btn_viewall?.getAttribute(\"href\");\n    this.isOpen = false;\n    this.abortController2 = new AbortController();\n    this.searchTerm = '';\n    if (this.input) {\n      this.input.addEventListener(\n        'input',\n        debounce((event) => {\n          this.onChange(event);\n        }, 300).bind(this)\n      );\n    }\n\n    const formData = new FormData(this.input.form);\n    this.params = \"\";\n    for (const [key, value] of formData) {\n      if (key === 'q') break;\n      this.params += `${key}=${value}&`;\n    }\n\n    this.setupEventListeners();\n  }\n\n  setupEventListeners() {\n    this.input.form.addEventListener('submit', this.onFormSubmit.bind(this));\n\n    this.input.addEventListener('focus', this.onFocus.bind(this));\n    this.addEventListener('focusout', this.onFocusOut.bind(this));\n    this.addEventListener('keyup', this.onKeyup.bind(this));\n    //this.addEventListener('keydown', this.onKeydown.bind(this));\n  }\n\n  getQuery() {\n    return this.input.value.trim();\n  }\n\n  onChange() {\n    const newSearchTerm = this.getQuery();\n    if (!this.searchTerm || !newSearchTerm.startsWith(this.searchTerm)) {\n      // Remove the results when they are no longer relevant for the new search term\n      // so they don't show up when the dropdown opens again\n      // this.querySelector('#predictive-search-results-groups-wrapper')?.remove();\n    }\n\n    // Update the term asap, don't wait for the predictive search query to finish loading\n    this.updateSearchForTerm(this.searchTerm, newSearchTerm);\n\n    this.searchTerm = newSearchTerm;\n    this.btn_viewall?.setAttribute(\"href\", this.href.replace(/\\/search\\?q=.*/g, \"/search?q=\" + this.searchTerm));\n\n    if (!this.searchTerm.length) {\n      this.close(true);\n      return;\n    }\n    this.getSearchResults(this.searchTerm);\n  }\n\n  onFormSubmit(event) {\n    if (!this.getQuery().length || this.querySelector('[aria-selected=\"true\"] a')) event.preventDefault();\n  }\n\n  onFocus() {\n    const currentSearchTerm = this.getQuery();\n    if (!currentSearchTerm.length) return;\n    if (this.searchTerm !== currentSearchTerm) {\n      // Search term was changed from other search input, treat it as a user change\n      this.onChange();\n    } else if (this.getAttribute('results') === 'true') {\n      this.openSearch();\n    } else {\n      this.getSearchResults(this.searchTerm);\n    }\n  }\n\n  onFocusOut() {\n    setTimeout(() => {\n      if (!this.contains(document.activeElement)) this.close();\n    });\n  }\n\n  onKeyup(event) {\n    if (!this.getQuery().length) this.close(true);\n    event.preventDefault();\n\n    // switch (event.code) {\n    //   case 'ArrowUp':\n    //     this.switchOption('up');\n    //     break;\n    //   case 'ArrowDown':\n    //     this.switchOption('down');\n    //     break;\n    //   case 'Enter':\n    //     this.selectOption();\n    //     break;\n    // }\n  }\n\n  // onKeydown(event) {\n  //   // Prevent the cursor from moving in the input when using the up and down arrow keys\n  //   if (event.code === 'ArrowUp' || event.code === 'ArrowDown') {\n  //     event.preventDefault();\n  //   }\n  // }\n  updateSearchForTerm(previousTerm, newTerm) {\n    const searchForTextElement = this.querySelector('[data-predictive-search-search-for-text]');\n    const currentButtonText = searchForTextElement?.innerText;\n    if (currentButtonText) {\n      if (currentButtonText.match(new RegExp(previousTerm, 'g')).length > 1) {\n        // The new term matches part of the button text and not just the search term, do not replace to avoid mistakes\n        return;\n      }\n      const newButtonText = currentButtonText.replace(previousTerm, newTerm);\n      searchForTextElement.innerText = newButtonText;\n    }\n  }\n\n  getSearchResults(searchTerm) {\n    const queryKey = searchTerm.replace(' ', '-').toLowerCase();\n    this.setLiveRegionLoadingState();\n\n    if (this.cachedResults[queryKey]) {\n      this.renderSearchResults(this.cachedResults[queryKey]);\n      return;\n    }\n\n    fetch(`${themeHDN.routes.predictive_search_url}?q=${encodeURIComponent(searchTerm)}&${this.params}section_id=${this.sectionIdResults}`, {\n      signal: this.abortController2.signal,\n    })\n      .then((response) => {\n        if (!response.ok) {\n          var error = new Error(response.status);\n          this.close();\n          throw error;\n        }\n\n        return response.text();\n      })\n      .then((text) => {\n        const resultsMarkup = new DOMParser()\n          .parseFromString(text, 'text/html')\n          .querySelector('#shopify-section-' + this.sectionIdResults).innerHTML;\n        // Save bandwidth keeping the cache in all instances synced\n        this.allPredictiveSearchInstances.forEach((predictiveSearchInstance) => {\n          this.cachedResults[queryKey] = resultsMarkup;\n        });\n        this.renderSearchResults(resultsMarkup);\n      })\n      .catch((error) => {\n        if (error?.code === 20) {\n          // Code 20 means the call was aborted\n          return;\n        }\n        this.close();\n        throw error;\n      });\n  }\n\n  setLiveRegionLoadingState() {\n    this.hideWrapper.style.cssText = \"display: none;\";\n    this.showWrapper.style.cssText = \"display: block;\";\n    this.skeleton.classList.remove(\"hdt-hidden\");\n\n    this.setAttribute('loading', true);\n  }\n\n  renderSearchResults(resultsMarkup) {\n    this.predictiveSearchResults.innerHTML = resultsMarkup;\n    this.setAttribute('results', true);\n\n    this.setLiveRegionResults();\n    this.openSearch();\n    document.dispatchEvent(new CustomEvent(\"currency:update\"));\n  }\n\n  setLiveRegionResults() {\n    this.removeAttribute('loading');\n  }\n\n  openSearch() {\n    //this.setAttribute('open', true);\n    this.input.setAttribute('aria-expanded', true);\n    this.skeleton.classList.add(\"hdt-hidden\");\n    this.isOpen = true;\n  }\n\n  close(clearSearchTerm = false) {\n    this.closeResults(clearSearchTerm);\n    this.isOpen = false;\n  }\n\n  closeResults(clearSearchTerm = false) {\n    if (clearSearchTerm) {\n      this.input.value = '';\n      this.removeAttribute('results');\n      this.hideWrapper.style.cssText = \"display: block;\";\n      this.showWrapper.style.cssText = \"display: none;\";\n      this.predictiveSearchResults.innerHTML = \"\";\n    }\n    const selected = this.querySelector('[aria-selected=\"true\"]');\n\n    if (selected) selected.setAttribute('aria-selected', false);\n\n    this.input.setAttribute('aria-activedescendant', '');\n    this.removeAttribute('loading');\n    //this.removeAttribute('open');\n    this.input.setAttribute('aria-expanded', false);\n    this.resultsMaxHeight = false;\n    this.predictiveSearchResults.removeAttribute('style');\n  }\n}\n\ncustomElements.define('hdt-predictive-search', PredictiveSearch);\n// bundle product\n\nconst bundleProduct = () => {\n  if (window.innerWidth < 768) {\n    return;\n  }\n  let arrBundle = $$4(\"[data-bundle-pin]\");\n  if (!arrBundle) {\n    return;\n  }\n  arrBundle.forEach((el) => {\n    if (!el.dataset.trigger) {\n      return;\n    } else {\n      el.onmouseover = () => {\n        $4(el.dataset.trigger).classList.add(\"is--hover\");\n        $4(el.dataset.trigger)\n          .closest(\"[data-bundle-parent]\")\n          .classList.add(\"has--hover\");\n      };\n      el.onmouseleave = () => {\n        $4(el.dataset.trigger).classList.remove(\"is--hover\");\n        $4(el.dataset.trigger)\n          .closest(\"[data-bundle-parent]\")\n          .classList.remove(\"has--hover\");\n      };\n    }\n  });\n};\nbundleProduct();\n\n// --------------------------\n// Back to top\n// --------------------------\nclass BackToTop extends HTMLElement {\n  constructor() {\n    super();\n    this.config = JSON.parse(this.getAttribute('config'));\n    if (window.innerWidth < 768 && this.config.hiddenMobile) return;\n    this.debounce_timer = 0;\n    this.debounce_timer2 = 0;\n    this.circlechart = this.querySelector('.hdt-circle-css');\n    this.addEventListener(\"click\", this.goTop.bind(this));\n    window.addEventListener(\"scroll\", this.backToTop.bind(this));\n  }\n  goTop() {\n    document.body.scrollTop = 0; // For Safari\n    document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera\n  }\n\n  backToTop() {\n    let self = this;\n    if (this.debounce_timer) { clearTimeout(this.debounce_timer); }\n    this.debounce_timer = setTimeout(function () {\n      if (window.scrollY > self.config.scrollTop) {\n        self.classList.add('is--show');\n      } else {\n        self.classList.remove('is--show');\n      }\n    }, 40);\n\n    if (!this.circlechart) return;\n\n    if (this.debounce_timer2) { clearTimeout(this.debounce_timer2); }\n\n    this.debounce_timer2 = setTimeout(function () {\n      let scrollTop2 = window.scrollY,\n        docHeight = document.body.offsetHeight,\n        winHeight = window.innerHeight,\n        scrollPercent = scrollTop2 / (docHeight - winHeight),\n        degrees = scrollPercent * 360;\n      self.circlechart.style.setProperty(\"--cricle-degrees\", degrees + 'deg');\n    }, 6);\n  }\n}\n\ncustomElements.define('back-to-top', BackToTop);\n\n\n// --------------------------\n// numberRandom\n// --------------------------\nclass numberRandom extends HTMLElement {\n  constructor() {\n    super();\n    let config = JSON.parse(this.getAttribute(\"config\"));\n    this.min = config.min;\n    this.max = config.max;\n    this.interval = config.interval;\n    this.number = Math.floor(Math.random() * (this.max - this.min + 1)) + this.min;\n    this.ofset = [\"1\", \"2\", \"4\", \"3\", \"6\", \"10\", \"-1\", \"-3\", \"-2\", \"-4\", \"-6\"];\n    this.prioritize = [\"10\", \"20\", \"15\"];\n    this.h = \"\";\n    this.e = \"\";\n    this.M = \"\";\n    this.liveViewInt();\n    setInterval(this.liveViewInt.bind(this), this.interval);\n  }\n\n  liveViewInt() {\n    if (this.h = Math.floor(Math.random() * this.ofset.length), this.e = this.ofset[this.h], this.number = parseInt(this.number) + parseInt(this.e), this.min >= this.number) {\n      this.M = Math.floor(Math.random() * this.prioritize.length);\n      var a = this.prioritize[this.M];\n      this.number += a\n    }\n    if (this.number < this.min || this.number > this.max) {\n      this.number = Math.floor(Math.random() * (this.max - this.min + 1)) + this.min;\n    }\n    this.innerHTML = parseInt(this.number);\n  }\n}\n\ncustomElements.define('number-random', numberRandom);\n\n// --------------------------\n// Lookbook product carousel\n// --------------------------\n\nclass LookbookProductCarousel extends HTMLElement {\n\n  constructor() {\n    super();\n    if (window.innerWidth > 767) {\n      return;\n    }\n    this.lookbookMobile();\n  }\n  lookbookMobile() {\n    let self = this;\n    const el = self.querySelector('[lookbook-product-wrap]');\n    const controls = self.querySelector('[hdt-slider-controls]');\n    const btn_close = self.querySelector('button.hdt-close');\n    const isToolBar = document.querySelector('.hdt-toolbar-mobile');\n    let toolBarH = 0;\n    if (!el | !controls | !btn_close) return;\n    if (isToolBar) {\n      toolBarH += isToolBar.offsetHeight;\n    }\n\n    self.querySelector('[lookbook-product-wrap]').style.bottom = `${toolBarH / 10}rem`;\n    controls.addEventListener('click', () => {\n      el.classList.add('hdt-open');\n    })\n    btn_close.addEventListener('click', () => {\n      el.classList.remove('hdt-open');\n    })\n  }\n}\ncustomElements.define('lookbook-product-carousel', LookbookProductCarousel);\n\n/**\n  * Cookies\n  * https://help.shopify.com/en/manual/your-account/privacy/cookies\n  * https://shopify.dev/themes/trust-security/cookie-banner#create-a-snippet-to-host-the-banner\n  * https://help.shopify.com/en/manual/your-account/privacy/privacy-preferences-manager?shpxid=965d0d2a-08E2-4654-4A13-D3F38646AC5D\n  * https://shopify.dev/api/consent-tracking\n*/\n\nfunction convertNameCookies(name) {\n  return name.replace(/=/g,'_');\n}\nfunction setCookie(name,value,days,hours) {\n  var expires = \"\";\n  if (days || hours) {\n    var date = new Date();\n    date.setTime(date.getTime() + (days ? days*24*60*60*1000 : hours*60*60*1000));\n    expires = \"; expires=\" + date.toString();\n  }\n  document.cookie = convertNameCookies(name) + \"=\" + (value || \"\")  + expires + \"; path=/\";\n}\nfunction getCookie(name) {\n  var nameEQ = convertNameCookies(name) + \"=\";\n  var ca = document.cookie.split(';');\n  for(var i=0;i < ca.length;i++) {\n    var c = ca[i];\n    while (c.charAt(0)==' ') c = c.substring(1,c.length);\n    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n  }\n  return null;\n}\nfunction eraseCookie(name) {\n  document.cookie = convertNameCookies(name)+'=; Max-Age=-99999999;';\n}\n\nclass cookiesBar extends HTMLElement {\n  constructor() {\n    super();\n    this.cookies = JSON.parse(this.getAttribute(\"configs\"));\n    this.cookies.cookiesName = \"theme4:cookies\";\n    this.cookies.drawer = this.querySelector(\"#drawerCookies\");\n    this.isShowCookiesAll = (this.cookies.show == '1');\n    this.acceptBtn = this.cookies.drawer.querySelector(\".hdt-pp_cookies__accept-btn\");\n    this.declineBtn = this.cookies.drawer.querySelector(\".hdt-pp_cookies__decline-btn\");\n    this.loadCookieBanner(this);\n    let self = this;\n    this.acceptBtn?.addEventListener(\"click\", this.handleAccept.bind(this));\n    this.declineBtn?.addEventListener(\"click\", this.handleDecline.bind(this));\n    if (Shopify.designMode) {\n      document.addEventListener('shopify:section:select', (event) => {\n        const cookiesSelect = event.target.classList.contains('sys-cookies');\n        if (!cookiesSelect) return;\n        self.showCookiesBanner();\n      })\n      document.addEventListener('shopify:section:deselect', (event) => {\n        const cookiesSelect = event.target.classList.contains('sys-cookies');\n        if (!cookiesSelect) return;\n        self.hideCookiesBanner();\n      })\n    }\n  }\n  handleAccept() {\n    if (this.isShowCookiesAll) {\n      setCookie(this.cookies.cookiesName, 'accepted', parseInt(this.cookies.day_next));\n    }\n    window.Shopify.customerPrivacy.setTrackingConsent(true, this.hideCookiesBanner.bind(this));\n  }\n\n  handleDecline() {\n    if (this.isShowCookiesAll) {\n      setCookie(this.cookies.cookiesName, 'accepted', parseInt(this.cookies.day_next));\n    }\n    window.Shopify.customerPrivacy.setTrackingConsent(false, this.hideCookiesBanner.bind(this));\n  }\n\n  showCookiesBanner() {\n    this.cookies.drawer.setAttribute('open', '');\n    $4(\"html\").classList.remove(\"no-scroll\");\n  }\n\n  hideCookiesBanner() {\n    this.cookies.drawer.removeAttribute('open');\n  }\n\n  initCookieBanner() {\n    const userCanBeTracked = window.Shopify.customerPrivacy.userCanBeTracked();\n    const userTrackingConsent = window.Shopify.customerPrivacy.getTrackingConsent();\n\n    if ((!userCanBeTracked && userTrackingConsent === 'no_interaction') || this.isShowCookiesAll) {\n      if (!Shopify.designMode) {\n        this.showCookiesBanner();\n      }\n    }\n  }\n\n  loadCookieBanner() {\n\n    let self = this;\n    if (this.cookies.drawer.length == 0) return;\n    this.cookies.day_next = this.cookies.day_next || 60;\n    this.isShowCookiesAll = (this.cookies.show == '1');\n    if (getCookie(this.cookies.cookiesName) == 'accepted' || this.cookies.drawer.getAttribute(\"open\") !== null) return;\n    if (window.Shopify.customerPrivacy) {\n      self.initCookieBanner();\n    } else {\n      window.Shopify.loadFeatures([\n        {\n          name: 'consent-tracking-api',\n          version: '0.1',\n        }\n      ],\n      function (error) {\n        if (error) {\n          throw error;\n        }\n        self.initCookieBanner();\n      });\n    }\n  }\n}\n\ncustomElements.define('sys-cookies', cookiesBar);\n\n// --------------------------\n// Newsletter\n// --------------------------\n\nclass newsletterModal extends HTMLElement {\n  constructor() {\n    super();\n    this.configs = JSON.parse(this.getAttribute('configs'));\n    if ( !Shopify.designMode && getCookie(\"theme4:newsletter:\"+this.configs.id) == 'shown' ) return;\n    this.modal = this.querySelector(\"#modalNewsletter-\"+this.configs.id);\n    this.action_close = this.querySelector('[action-close]');\n    this.time_delay     = this.configs.time_delay;\n    this.day_next       = this.configs.day_next;\n    if (Shopify.designMode) {\n      document.addEventListener('shopify:section:select', (event) => {\n        const newsletterSelect = event.target.classList.contains('sys-newsletter');\n        if (!newsletterSelect) return;\n        this.modal.setAttribute('open', '');\n      })\n      document.addEventListener('shopify:section:deselect', (event) => {\n        const newsletterSelect = event.target.classList.contains('sys-newsletter');\n        if (!newsletterSelect) return;\n        this.modal.removeAttribute('open');\n      })\n    }\n    else {\n      const fnShow = this.showModal.bind(this);\n      const fnShowScroll = this.showModalScroll.bind(this);\n      if(this.configs.after === 'time'){\n        let tm = setTimeout(fnShow,this.configs.time_delay * 1000);\n        this.modal.addEventListener(\"dialog:afterClose\", () => {\n          clearTimeout(tm);\n          this.hideModal(false, true);\n        });\n      }else{\n        window.addEventListener(\"scroll\",fnShowScroll);\n        this.modal.addEventListener(\"dialog:afterClose\", () => {\n          window.removeEventListener(\"scroll\", fnShowScroll);\n          this.hideModal(false, true);\n        });\n      }\n      this.actionClose();\n    }\n  }\n\n  showModal() {\n    this.modal.setAttribute('open', '');\n  }\n  showModalScroll(){\n    if (window.scrollY > this.configs.scroll_delay) {\n      this.modal.setAttribute('open', '');\n    }\n  }\n  hideModal(pause, off) {\n    if (pause) {\n\n    }\n    if (off) {\n\n      setCookie(\"theme4:newsletter:\"+this.configs.id, \"shown\", this.day_next);\n    }\n  }\n  actionClose(){\n    let self= this;\n    if(self.action_close){\n      self.action_close.addEventListener('click',function(){\n        self.modal.removeAttribute('open', '');\n        self.hideModal(false, true);\n      })\n    }\n  }\n\n}\ncustomElements.define('sys-newsletter', newsletterModal);\n\n// --------------------------\n// Exit\n// --------------------------\n\nclass exitModal extends HTMLElement {\n  constructor() {\n    super();\n    this.configs = JSON.parse(this.getAttribute('configs'));\n    if ( !Shopify.designMode && getCookie(\"theme4:exit:\"+this.configs.id) == 'shown' ) return;\n    this.modal = this.querySelector(\"#modalExit-\"+this.configs.id);\n    this.day_next     = this.configs.day_next;\n    this.btn_copy = this.querySelector('button[is=\"discount_copy\"]');\n    this.discount = this.querySelector('[is=\"discount\"]');\n    if (Shopify.designMode) {\n      document.addEventListener('shopify:section:select', (event) => {\n        const exitSelect = event.target.classList.contains('sys-exit');\n        if (!exitSelect) return;\n        this.showModal();\n      })\n      document.addEventListener('shopify:section:deselect', (event) => {\n        const exitSelect = event.target.classList.contains('sys-exit');\n        if (!exitSelect) return;\n        this.modal.removeAttribute('open');\n      })\n    }\n    else {\n      if(this.configs.after === 'move_cursor'){\n        if(window.innerWidth > 1150){\n          this.moveCursor();\n        }else{\n          this.scrollPage();;\n        }\n      }else if(this.configs.after === 'scroll'){\n        this.scrollPage();\n        console.log();\n      }\n      else{\n        this.amountTime();\n      }\n    }\n  }\n  // Move cursor out screen\n  moveCursor(){\n    const fnShow = this.showModal.bind(this);\n    document.querySelector(\"body\").addEventListener(\"mouseleave\", fnShow);\n    this.modal.addEventListener(\"dialog:afterClose\", () => {\n      document.querySelector(\"body\").removeEventListener(\"mouseleave\", fnShow);\n      this.hideModal(false, true);\n    });\n  }\n  //  scroll page\n  scrollPage(){\n    const fnShow = this.showModal.bind(this);\n    let docHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight - 500;\n    let scroll= ()=>{\n      if (window.scrollY >= docHeight) {\n        fnShow();\n      }\n    }\n    window.addEventListener(\"scroll\",scroll);\n    this.modal.addEventListener(\"dialog:afterClose\", () => {\n      window.removeEventListener(\"scroll\",scroll);\n      this.hideModal(false, true);\n    });\n  }\n  // countdown time to show exit popup\n  amountTime(){\n    const fnShow = this.showModal.bind(this);\n    let tm = setTimeout(fnShow,this.configs.time_delay * 1000);\n    this.modal.addEventListener(\"dialog:afterClose\", () => {\n      clearTimeout(tm);\n      this.hideModal(false, true);\n    });\n  }\n  showModal() {\n    let self = this;\n    this.modal.setAttribute('open', '');\n    if(self.btn_copy && self.discount){\n      self.btn_copy.addEventListener('click',function(){\n        self.discount.select();\n        self.discount.setSelectionRange(0, 99999);\n        document.execCommand(\"copy\");\n        self.btn_copy.querySelector('.hdt-tooltip-text').innerText = `${themeHDN.extras.exit_popup.copied}: ${self.discount.value}`\n      })\n      self.btn_copy.addEventListener('mouseleave',function(){\n        self.btn_copy.querySelector('.hdt-tooltip-text').innerText = themeHDN.extras.exit_popup.copy\n      })\n    }\n  }\n  hideModal(pause, off) {\n    if (pause) {\n\n    }\n    if (off) {\n      setCookie(\"theme4:exit:\"+this.configs.id, \"shown\", this.day_next);\n    }\n  }\n}\ncustomElements.define('sys-exit', exitModal);\n\n// --------------------------\n// Countdown Cart\n// --------------------------\n\nclass cartCountdown extends HTMLElement {\n  constructor() {\n    super();\n    let settMinutes = 60 * this.getAttribute(\"time\"), time = parseInt(sessionStorage.getItem('cartTime')), display = this.querySelector('#timer_count');\n    this.config = JSON.parse(this.getAttribute(\"config\"));\n    var self = this;\n    function startTimer(duration, display) {\n      let timer = duration, minutes, seconds;\n      let countdown = setInterval(function () {\n          minutes = parseInt(timer / 60, 10)\n          seconds = parseInt(timer % 60, 10);\n          minutes = minutes < 10 ? minutes : minutes;\n          seconds = seconds < 10 ? \"0\" + seconds : seconds;\n          display.textContent = minutes + self.config.labelm + \" : \" + seconds + self.config.labels;\n          let calc = 60 * parseInt(timer / 60, 10) + parseInt(timer % 60, 10);\n          if (!Shopify.designMode) {\n            sessionStorage.setItem('cartTime', calc);\n          }\n          if (--timer < 0) {\n            window.clearInterval(countdown);\n            display.textContent = 0 + self.config.labelm + \" : \" + 0 + self.config.labels;\n            fetch(Shopify.routes.root+\"cart/clear.js\")\n            .then((response) => response.text())\n            .then((text) => {\n              console.log(\"Clear cart\")\n              window.location.href = `${Shopify.routes.root}cart`;\n            })\n            .catch((e) => {\n              console.error(e);\n            });\n          }\n      }, 1000);\n    };\n    if (time > 0) {startTimer(time, display);}\n    else {startTimer(settMinutes, display)}\n  }\n}\ncustomElements.define('cart-countdown', cartCountdown);\n\n// --------------------------\n// Form status\n// --------------------------\n\n\nconst contactForm = $$4('form[action^=\"/contact\"]');\ncontactForm.forEach(function(form) {\n  form.addEventListener(\"submit\", function(event){\n    sessionStorage.setItem(\"the4:recentform\", this.getAttribute(\"id\"));\n  })\n});\nvar recentform = sessionStorage.getItem(\"the4:recentform\") || \"\";\n\nif (location.href.indexOf('contact_posted=true') > 0 && recentform !== \"\" ) {\n  document.dispatchEvent( new CustomEvent('the4:recentform', { detail: { recentform: recentform }, bubbles: true, cancelable: true }) );\n  $id4(recentform)?.classList.add(\"on-live\");\n  if ($4('.form-status-mirror-'+ recentform)) {\n    $4('.form-status-mirror-'+ recentform).style.cssText = \"display: block;\";\n  }\n}\n\nelse if (location.href.indexOf('customer_posted=true') > 0 && recentform !== \"\" ) {\n  document.addEventListener('the4:recentform', (event)=>{\n    let modal_id = document.getElementById(event.detail.recentform).getAttribute('data-id');\n    document.getElementById(modal_id).setAttribute('open','')\n  })\n  document.dispatchEvent( new CustomEvent('the4:recentform', { detail: { recentform: recentform }, bubbles: true, cancelable: true }) );\n  $id4(recentform)?.classList.add(\"on-live\");\n}\nelse if (location.href.indexOf('contact_posted=true') > 0 && location.href.indexOf('#') > 0 ) {\n  var recentform = location.href.split(\"#\")[1];\n  if ($id4(recentform).length > 0) {\n    sessionStorage.setItem(\"the4:recentform\", recentform);\n    $id4(recentform).classList.add(\"on-live\");\n    if ($4('.form-status-mirror-'+ recentform)) {\n      $4('.form-status-mirror-'+ recentform).style.cssText = \"display: block;\";\n    }\n  }\n}\n\n// --------------------------\n// Total sold flash\n// --------------------------\nclass flashSold extends VariantChangeBase {\n  constructor() {\n    super();\n    var self = this;\n    this.time = this.getAttribute(\"time\");\n    this.config = JSON.parse(this.getAttribute(\"flash-sold\"));\n    this.mins = this.config.mins;\n    this.maxs = this.config.maxs;\n    this.mint = this.config.mint;\n    this.maxt = this.config.maxt;\n    this.dataID = this.config.id;\n    this.getS = sessionStorage.getItem(\"soldS\" + this.dataID) || this.getRandomInt(this.mins, this.maxs);\n    this.getT = sessionStorage.getItem(\"soldT\" + this.dataID) || this.getRandomInt(this.mint, this.maxt);\n    this.numS = parseInt(this.getS);\n    this.numT = parseInt(this.getT);\n    this.intervalTime = parseInt(this.config.time);\n    this.$sold = this.querySelector('[data-sold]');\n    this.$hour = this.querySelector('[data-hour]');\n    this.limitMinMax();\n    this.updateSold(this.numS, this.numT);\n    setInterval(function () {\n      this.numS = this.numS + self.getRandomInt(1, 4);\n      this.numT = this.numT + (Math.random() * (0.8 - 0.1) + 0.1).toFixed(1) * 1;\n      self.limitMinMax();\n      self.updateSold(self.numS, self.numT);\n    }, this.intervalTime);\n  }\n\n  getRandomInt(min, max) {\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  }\n\n  updateSold(num1, num2) {\n    this.$sold.innerHTML = num1;\n    this.$hour.innerHTML = Math.floor(this.numT);\n    sessionStorage.setItem(\"soldS\" + this.dataID, num1);\n    sessionStorage.setItem(\"soldT\" + this.dataID, num2);\n  }\n  limitMinMax() {\n    if (this.numS > this.maxs) this.numS = self.getRandomInt(this.mins, this.maxs)\n    if (this.numT > this.maxt) this.numT = self.getRandomInt(this.mins, this.maxt)\n  }\n  #preVariantId;\n  onVariantChanged(event) {\n    const variant = event.detail.variant;\n    if (variant && this.#preVariantId != variant.id) {\n      if(variant.available){\n        this.closest(\".hdt-product-info__item\").style.display = \"\";\n      }\n      else {\n        this.closest(\".hdt-product-info__item\").style.display = \"none\"\n      }\n    }\n  }\n}\ncustomElements.define('flash-sold', flashSold);\n\n// --------------------------\n// Multi brands\n// --------------------------\nvar hdtNavLoading = true;\nclass multiBrands extends HTMLElement {\n  constructor() {\n    super();\n    if($id4(\"hdt-nav-ul\").classList.value.includes(\"hdt-nav-loading\") < 0){\n      return false;\n    }\n    this.item = $$4(\"[item-brand]\", this);\n    // this.section_id = this.getAttribute(\"s_id\");\n    // this.url = \"\";\n    if(this.item.length) {\n      // for(var i=0; i < this.item.length; i++) {\n      //   if (this.item[i].parentElement.classList.value.includes(\"is--active\")) {\n      //     this.url = this.item[i].getAttribute(\"href\");\n      //     const lazyMb = $4('hdt-lazy-submenu#sub-hdt-nav-mb');\n      //     if (lazyMb) {\n      //       lazyMb.addEventListener('lazyhtml:added', () => $4(`#hdt-nav-ul-mb summary[data-url=\"${this.url}\"]`)?.parentElement.setAttribute(\"open\",\"\"));\n      //     } else {\n      //       $4(`#hdt-nav-ul-mb summary[data-url=\"${this.url}\"]`)?.parentElement.setAttribute(\"open\",\"\");\n      //     }\n      //     // localStorage.setItem(\"the4:brand:url\", this.url);\n      //     break;\n      //   }\n      // }\n      // if(this.url === \"\") {\n      //   this.url = localStorage.getItem(\"the4:brand:url\") || Shopify.routes.root;\n      //   for(var i=0; i < this.item.length; i++) {\n      //     if (this.item[i].getAttribute(\"href\") === this.url) {\n      //       this.item[i].parentElement.classList.add(\"is--active\");\n      //       $4(\"#hdt-nav-ul-mb summary[data-url=\\\"\"+ this.url +\"\\\"]\").parentElement.setAttribute(\"open\",\"\");\n      //       if (i > 0) {\n      //         this._init();\n      //       }\n      //       break;\n      //     }\n      //   }\n      // }\n    }\n  }\n  // _init(){\n  //   var nameStorage = \"the4:brand:nav\" + this.url.replace(/\\//g,'-');\n  //   if(!Shopify.designMode && sessionStorage.getItem(nameStorage) !== null){\n  //     $id4(\"hdt-nav-ul\").innerHTML = sessionStorage.getItem(nameStorage);\n  //     $id4(\"hdt-nav-ul\").classList.remove(\"hdt-nav-loading\");\n  //     return;\n  //   }\n  //   if (!hdtNavLoading) {\n  //     return;\n  //   }\n  //   fetch(this.url + \"?section_id=\" + this.section_id)\n  //     .then((response) => response.text())\n  //     .then((text) => {\n  //       const html = document.createElement('div');\n  //       html.innerHTML = text;\n  //       const nav = html.querySelector('#hdt-nav-ul');\n  //       if (nav && nav.innerHTML.trim().length) {\n  //         $id4(\"hdt-nav-ul\").innerHTML = nav.innerHTML;\n  //         $id4(\"hdt-nav-ul\").classList.remove(\"hdt-nav-loading\");\n  //         sessionStorage.setItem(nameStorage, nav.innerHTML.trim().replace(/^\\s+|\\s+$|\\n/gm,''));\n  //       }\n  //     })\n  //     .catch((e) => {\n  //       console.error(e);\n  //     });\n  //   hdtNavLoading = false;\n  // }\n}\n\ncustomElements.define('multi-brands', multiBrands);\n\n// footer accodion\nfunction handleAccordionClick() {\n  let accordion = this.parentElement;\n  accordion.classList.toggle('open');\n  if (window.innerWidth < 768) {\n    let content = accordion.querySelector('.hdt-collapse-content');\n    if (accordion.classList.contains('open')) {\n      content.style.height = content.scrollHeight + 'px';\n    } else {\n      content.style.height = '0';\n    }\n  }\n}\nfunction updateMaxHeight() {\n  if (window.innerWidth >= 768) {\n    document.querySelectorAll('.hdt-footer-section .hdt-collapse-content').forEach(function(content) {\n      content.style.height = '';\n    });\n  }\n}\ndocument.querySelectorAll('.hdt-footer-section .hdt-heading-f').forEach(function(element) {\n  element.addEventListener('click', handleAccordionClick);\n});\nwindow.addEventListener('resize', function() {\n  if (window.innerWidth < 768) {\n    document.querySelectorAll('.hdt-footer-section .hdt-heading-f').forEach(function(element) {\n      element.removeEventListener('click', handleAccordionClick);\n      element.addEventListener('click', handleAccordionClick);\n    });\n  } else {\n    document.querySelectorAll('.hdt-footer-section .hdt-heading-f').forEach(function(element) {\n      element.removeEventListener('click', handleAccordionClick);\n    });\n    updateMaxHeight();\n  }\n});\n\n// --------------------------\n// Delivery Time\n// --------------------------\n// https://unpkg.com/dayjs@1.11.10/dayjs.min.js\nimport dayjs from 'dayjs';\ndayjs.locale('en'); // use locale globally\nclass orderDelivery extends VariantChangeBase {\n  constructor() {\n    super();\n    this.config = JSON.parse(this.getAttribute('config'));\n    this.offDays          = this.config.off_day.replace(/ /g,'').split(\",\");\n    this.nowDay           = dayjs();\n    var format_day       = this.config.format_day,\n        time             = this.config.time.replace(\"24:00:00\", \"23:59:59\"),\n        arrDayWeek       = [\"SUN\",\"MON\",\"TUE\",\"WED\",\"THU\",\"FRI\",\"SAT\"],\n        dateStart        = this.config.estimateStartDate || 0,\n        dateEnd          = this.config.estimateEndDate || 0,\n        excludeDays      = this.config.cut_day.replace(/ /g,'').split(\",\"),\n        startDay         = dayjs(),\n        i                = 0,\n        endDay           = dayjs(),\n        j                = 0,\n        nowTime          = this.nowDay.format('HHmmss'),\n        timeint          = time.replace(/ /g,'').replace(/:/g,''),\n\n        arrDay           = themeHDN.extras.order.dayNames.replace(/ /g,'').split(\",\"),\n        arrMth           = themeHDN.extras.order.monthNames.replace(/ /g,'').split(\",\");\n\n    /**\n     * Check Time, if nowTime >=  timeint +1 day\n     */\n    if (parseInt(nowTime) >= parseInt(timeint)) {\n      this.nowDay   = this.nowDay.add(1, 'day');\n      startDay = startDay.add(1, 'day');\n      endDay   = endDay.add(1, 'day');\n    }\n\n    /**\n     * Mode: 2 - Shipping + delivery\n     * Mode: 1 - Only delivery\n     */\n\n    if ( this.config.mode == '2' ) {\n\n      // START DATE\n      // if ngay khach mua trung voi ngay loai tru tang 1 ngay\n      while (excludeDays.indexOf( arrDayWeek[startDay.format('d')] ) > -1 || this.offDays.indexOf( startDay.format('DD/MM/****') ) > -1 || this.offDays.indexOf( startDay.format('DD/MM/YYYY') ) > -1) {\n        startDay = startDay.add(1, 'day');\n      }\n      while (i < dateStart) {\n        i++;\n        startDay = startDay.add(1, 'day');\n        if (excludeDays.indexOf( arrDayWeek[startDay.format('d')] ) > -1 || this.offDays.indexOf( startDay.format('DD/MM/****') ) > -1 || this.offDays.indexOf( startDay.format('DD/MM/YYYY') ) > -1) {\n          i--;\n        }\n      }\n\n      // END DATE\n      // if ngay khach mua trung voi ngay loai tru tang 1 ngay\n      while (excludeDays.indexOf( arrDayWeek[endDay.format('d')] ) > -1 || this.offDays.indexOf( endDay.format('DD/MM/****') ) > -1 || this.offDays.indexOf( endDay.format('DD/MM/YYYY') ) > -1) {\n        endDay = endDay.add(1, 'day');\n      }\n\n      while (j < dateEnd) {\n        j++;\n        endDay = endDay.add(1, 'day');\n        if (excludeDays.indexOf( arrDayWeek[endDay.format('d')] ) > -1 || this.offDays.indexOf( endDay.format('DD/MM/****') ) > -1 || this.offDays.indexOf( endDay.format('DD/MM/YYYY') ) > -1) {\n          j--;\n        }\n      }\n\n    }\n    else {\n\n      // START DATE\n      startDay = startDay.add(dateStart, 'day');\n      while (excludeDays.indexOf( arrDayWeek[startDay.format('d')] ) > -1 || this.offDays.indexOf( startDay.format('DD/MM/****') ) > -1 || this.offDays.indexOf( startDay.format('DD/MM/YYYY') ) > -1) {\n        startDay = startDay.add(1, 'day');\n      }\n\n      // END DATE\n      endDay = endDay.add(dateEnd, 'day');\n      while (excludeDays.indexOf( arrDayWeek[endDay.format('d')] ) > -1 || this.offDays.indexOf( endDay.format('DD/MM/****') ) > -1 || this.offDays.indexOf( endDay.format('DD/MM/YYYY') ) > -1) {\n        endDay = endDay.add(1, 'day');\n      }\n      // endDay = endDay.add(this.offDaysf(endDay), 'day');\n\n    }\n\n    /**\n     * Translate day, month\n     * https://day.js.org/docs/en/display/format\n     */\n    arrDay = this.ArrUnique(arrDay);\n    arrMth = this.ArrUnique(arrMth);\n\n    var startDayDInt = parseInt(startDay.format('D')),\n    daystStart       = startDayDInt + this.nth(startDayDInt),\n    MntStart         = arrMth[ parseInt(startDay.format('M')) -1 ],\n    dayStart         = arrDay[ parseInt(startDay.format('d')) ],\n\n    EndDayDInt       = parseInt(endDay.format('D')),\n    daystEnd         = EndDayDInt + this.nth( EndDayDInt ),\n    MntEnd           = arrMth[ parseInt(endDay.format('M')) -1 ],\n    dayEnd           = arrDay[ parseInt(endDay.format('d')) ];\n\n    //console.log( startDayDInt, EndDayDInt )\n    if($4('[data-start-delivery]', this)) $4('[data-start-delivery]', this).innerHTML = startDay.format(format_day).replace('t44',dayStart).replace('t45',daystStart).replace('t46',MntStart);\n    if($4('[data-end-delivery]', this)) $4('[data-end-delivery]', this).innerHTML = endDay.format(format_day).replace('t44',dayEnd).replace('t45',daystEnd).replace('t46',MntEnd);\n  }\n\n  ArrUnique(arr) {\n    var onlyUnique = function (value, index, self) {\n      return self.indexOf(value) === index;\n    };\n    return arr.filter( onlyUnique );\n  }\n\n  nth(d) {\n    if (d > 3 && d < 21) return 'th';\n    switch (d % 10) {\n      case 1:  return \"st\";\n      case 2:  return \"nd\";\n      case 3:  return \"rd\";\n      default: return \"th\";\n    }\n  }\n  #preVariantId;\n  onVariantChanged(event) {\n    const variant = event.detail.variant;\n    if (variant && this.#preVariantId != variant.id) {\n      if(variant.available){\n        this.closest(\".hdt-product-info__item\").style.display = \"\";\n        if( variant.variant_state.pre_order ) {\n          // this.closest(\".hdt-product-info__item\").style.display = \"none\"\n        }\n      }\n      else {\n        this.closest(\".hdt-product-info__item\").style.display = \"none\"\n      }\n    }\n  }\n}\ncustomElements.define('order-delivery', orderDelivery);\nclass countdownSimple extends HTMLElement {\n  x = 0;\n  constructor() {\n    super();\n\n    /** Countdown\n     * [days] [hours] [mins] [secs]\n     */\n\n    this.config = JSON.parse(this.getAttribute('config'));\n    const time = this.config.time.replace(\"24:00:00\", \"23:59:59\")\n\n    if (time == '19041994') return;\n    this.textTemp = $4(\"template\", this).innerHTML;\n    this.notHasDay  = !this.textTemp.includes('[days]');\n    let today        = dayjs();\n\n    const nowTime      = today.format('HHmmss'),\n          configTime   = time.replace(/ /g,'').replace(/:/g,'')\n\n    if (parseInt(nowTime) >= parseInt(configTime)) {\n      today = today.add(1, 'day');\n    }\n    // Set the date we're counting down to\n    // \"2030-01-05 15:37:25\"\n    this.countDownDate = new Date(`${today.format('YYYY-MM-DD')} ${time}`).getTime();\n\n    // Update the count down every 1 second\n    this.#update();\n    this.x = setInterval( this.#update.bind(this), this.textTemp.includes('[secs]') ? 1000 : 60000);\n  }\n  #update() {\n    // Get today's date and time\n    const now = new Date().getTime();\n\n    // Find the distance between now and the count down date\n    const distance = this.countDownDate - now;\n\n    // Time calculations for days, hours, minutes and seconds\n    const days    = Math.floor(distance / (1000 * 60 * 60 * 24));\n    let   hours   = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));\n    const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));\n    const seconds = Math.floor((distance % (1000 * 60)) / 1000);\n    if (this.notHasDay) hours = days*24 + hours;\n\n    // Display the result in the element\n    this.innerHTML = this.textTemp.replace('[days]', String(days).padStart(2, '0')).replace('[hours]', String(hours).padStart(2, '0')).replace('[mins]', String(minutes).padStart(2, '0')).replace('[secs]', String(seconds).padStart(2, '0'));\n\n    // If the count down is finished, write some text\n    if (distance < 0) {\n      clearInterval(this.x);\n      // EXPIRED\n      this.hidden = true\n    }\n  }\n  disconnectedCallback() {\n    clearInterval(this.x);\n  }\n}\ncustomElements.define('hdt-countdown-simple', countdownSimple);\n\nclass countdownTimer extends VariantChangeBase {\n  constructor() {\n    super();\n  }\n  #preVariantId;\n  onVariantChanged(event) {\n    const variant = event.detail.variant;\n    if (variant && this.#preVariantId != variant.id) {\n      if(variant.available){\n        this.style.display = \"\"\n      }\n      else {\n        this.style.display = \"none\"\n      }\n    }\n  }\n}\ncustomElements.define('countdown-timer', countdownTimer);\n\n// quick order list\n\nvar createCartPromise = ()=> {\n  return new Promise(async (resolve) => {\n    resolve(await (await fetch(`${Shopify.routes.root}cart.js`)).json());\n  });\n};\nvar _upate_qty,\nupate_qty_fn;\nclass QuickOrderList extends HTMLElement {\n  constructor() {\n    super();\n    const ON_CHANGE_DEBOUNCE_TIMER = 300;\n    this.actions = {\n      add: 'ADD',\n      update: 'UPDATE',\n    };\n    this.quickOrderListId = '#'+this.id;\n    this.sectionId = this.dataset.sectionId;\n    this.updateThink();\n\n    const debouncedOnChange = debounce((event) => {\n      this.onChange(event);\n    }, ON_CHANGE_DEBOUNCE_TIMER);\n\n    this.addEventListener('change', debouncedOnChange.bind(this));\n    getterAdd(_upate_qty, this);\n    document.addEventListener(\"cart:push:section.id\", (event) => event.detail.sections.push(this.sectionId));\n  }\n  onSubmit(event) {\n    event.preventDefault();\n  }\n\n  connectedCallback() {\n    document.addEventListener($4('hdt-cart-drawer') ? 'cart:drawer:change' : 'variant:add', this.fetchQuickOrder.bind(this) );\n  }\n  //disconnectedCallback() {}\n\n  updateThink() {\n    this.items_in_cart = $4('[update_items_in_cart]', this);\n    this.items_price_in_cart = $4('[update_items_price_in_cart]', this);\n    $4('form#QuickOrderList', this).addEventListener('submit', this.onSubmit.bind(this));\n  }\n  fetchQuickOrder(event) {\n    const html = new DOMParser().parseFromString(event.detail.sections[this.sectionId], 'text/html');\n    const sourceQty = html.querySelector(this.quickOrderListId);\n    $4('form#QuickOrderList', this).removeEventListener('submit', this.onSubmit.bind(this));\n    this.innerHTML = sourceQty.innerHTML;\n    document.dispatchEvent(new CustomEvent(\"currency:update\"));\n    this.updateThink();\n    // fetch(`${window.location.pathname}?section_id=${this.sectionId}`)\n    //   .then((response) => response.text())\n    //   .then((responseText) => {\n    //     const html = new DOMParser().parseFromString(responseText, 'text/html');\n    //     const sourceQty = html.querySelector(this.quickOrderListId);\n    //     this.innerHTML = sourceQty.innerHTML;\n    //   })\n    //   .catch((e) => { console.error(e); });\n  }\n  onChange(event) {\n    const inputValue = parseInt(event.target.value);\n    const cartQuantity = parseInt(event.target.dataset.cartQuantity);\n    const index = event.target.dataset.index;\n    const quantity = inputValue - cartQuantity;\n\n    if (cartQuantity > 0) {\n      this.updateQuantity(index, inputValue, this.actions.update);\n    } else {\n      this.updateQuantity(index, quantity, this.actions.add);\n    }\n  }\n  onLoading(id){\n    $4(`#Variant-${id} [price_loading]`, this)?.setAttribute('aria-busy',true);\n    $$4('#hdt-quick-order-list-total .hdt-btn-loading__svg', this).forEach(el => el.setAttribute('aria-busy',true));\n  }\n  deLoading(id){\n    $4(`#Variant-${id} [price_loading]`, this)?.setAttribute('aria-busy',false);\n    $$4('#hdt-quick-order-list-total .hdt-btn-loading__svg', this).forEach(el => el.setAttribute('aria-busy',false));\n  }\n  removeButton(id,quantity){\n    quantity !== 0 ? $4(`#Variant-${id} hdt-quick-order-list-remove-button`, this).removeAttribute('hidden') : $4(`#Variant-${id} hdt-quick-order-list-remove-button`, this).setAttribute('hidden','');\n  }\n  updateInCart(id,variant_in_cart){\n    //  label\n    $4(`#Variant-${id} .hdt-quantity__rules-cart`, this).removeAttribute('hidden');\n    let variant_qty_cart = $4(`#Variant-${id} .hdt-quantity-cart`, this);\n\n    //  totals\n    let variant_total = $4(`#Variant-${id} [variant_update_price]`, this);\n\n    // update\n    if(variant_in_cart?.length !== 0 && variant_in_cart){\n      let variant_total_price = parseFloat(variant_in_cart.original_line_price)\n      variant_qty_cart.innerText = variant_in_cart.quantity\n      variant_total.innerText = formatMoney(variant_total_price,themeHDN.settings.currencyFormat);\n      variant_total.setAttribute('data-variant-price', variant_total_price);\n    } else {\n      variant_qty_cart.innerText = 0;\n      variant_total.innerText = formatMoney(0,themeHDN.settings.currencyFormat);\n      variant_total.setAttribute('data-variant-price', 0);\n      $4(`#Variant-${id} .hdt-quantity__rules-cart`, this).setAttribute('hidden','');\n    }\n    this.removeT4CrurrencyData(variant_total);\n  }\n  removeT4CrurrencyData(el, dataset = el.dataset) {\n    for (const [key, value] of Object.entries(dataset)) {\n      if(key.toLowerCase().indexOf(\"currency\") >= 0) delete el.dataset[key];\n    }\n  }\n  updateTotalInCart(){\n    let items_total = 0;\n    let items_price = 0;\n\n    // update items_total\n    let items = $$4('[data-cart-quantity]', this);\n    items.forEach(item => {\n      return items_total += parseInt(item.getAttribute('data-cart-quantity'));\n    })\n    this.items_in_cart.innerText = items_total;\n\n    // update items_price\n    let prices = $$4('[data-variant-price]', this);\n    prices.forEach(price =>{\n      return items_price += parseFloat(price.getAttribute('data-variant-price'));\n    })\n    this.items_price_in_cart.innerText = formatMoney(items_price,themeHDN.settings.currencyFormat);\n    this.removeT4CrurrencyData(this.items_price_in_cart);\n    document.dispatchEvent(new CustomEvent(\"currency:update\"));\n  }\n\n  fetchConfig(type = 'json') {\n    return {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: `application/${type}` },\n    };\n  }\n  // update quantity product\n  updateQuantity(id, quantity, action) {\n    document.dispatchEvent(new CustomEvent(\"theme:loading:doing\",{bubbles:!0}));\n    this.removeButton(id,quantity);\n    this.onLoading(id);\n    let bundleSections = [];\n    document.dispatchEvent(new CustomEvent(\"cart:push:section.id\", { bubbles: true, detail: { sections: bundleSections } }));\n    let routeUrl = `${Shopify.routes.root}cart/change.js`;\n    let body = JSON.stringify({\n      quantity,\n      id,\n      sections_url: window.location.pathname,\n      sections: bundleSections.join(\",\")\n    });\n    let fetchConfigType;\n\n    if (action === this.actions.add) {\n      fetchConfigType = 'javascript';\n      routeUrl = `${Shopify.routes.root}cart/add.js`;\n      body = JSON.stringify({\n        items: [\n          {\n            quantity: parseInt(quantity),\n            id: parseInt(id),\n          },\n        ],\n        sections_url: window.location.pathname,\n        sections: bundleSections.join(\",\")\n      });\n    }\n\n    fetch(`${routeUrl}`, { ...this.fetchConfig(fetchConfigType), ...{ body } })\n    .then((response) => {\n      return response.text();\n    })\n    .then((state) => {\n      let cartContent = JSON.parse(state);\n      const quantityElement = document.getElementById(`Quantity-${id}`);\n\n      if(quantity === 0){\n        this.resetQuantityInput(id,quantityElement,true);\n      }\n      quantityElement.setAttribute('data-cart-quantity',quantity);\n      getterRunFn(_upate_qty, this, upate_qty_fn).call(this, cartContent, parseInt(id), action, bundleSections)\n    })\n    .catch((error) => {\n      console.log(error);\n    })\n    .finally(() => {\n      this.updateTotalInCart();\n      document.dispatchEvent(new CustomEvent(\"currency:update\"));\n      document.dispatchEvent(new CustomEvent(\"theme:loading:done\",{bubbles:!0}));\n      this.deLoading(id);\n    });\n  }\n  resetQuantityInput(id, quantityElement,resetValue) {\n    const input = quantityElement ?? document.getElementById(`Quantity-${id}`);\n    input.value = input.getAttribute('value');\n    resetValue ? input.value = 0 : input.value = input.getAttribute('value');\n  }\n  updateError(updatedValue, id) {\n    let message = '';\n    if (typeof updatedValue === 'undefined') {\n      message = window.cartStrings.error;\n    } else {\n      message = window.cartStrings.quantityError.replace('[quantity]', updatedValue);\n    }\n    this.updateLiveRegions(id, message);\n  }\n\n  updateLiveRegions(id, message) {\n    const variantItemError = this.getElementById('Quick-order-list-item-error');\n    if (variantItemError) {\n      $4('.hdt-variant-item__error-text', variantItemError).innerHTML = message;\n      variantItemError.removeAttribute('hidden');\n    }\n  }\n\n}\n_upate_qty = new WeakSet();\nupate_qty_fn = async function(cartContent, id, action) {\n  const variant_in_cart = cartContent.items.find((item) => item.variant_id === id);\n  this.updateInCart(id,variant_in_cart);\n  this.dispatchEvent(new CustomEvent(\"quickOrder:change\", { bubbles: false}));\n  //document.dispatchEvent(new CustomEvent(\"cart:refresh\"));\n  let cart = cartContent;\n  if (action === this.actions.add) {\n    cart = await createCartPromise();\n    cart.sections = cartContent.sections;\n  }\n  document.dispatchEvent(new CustomEvent(\"cart:change\", {\n    bubbles: true,\n    detail: {\n      baseEvent: \"line-item:change\",\n      cart,\n      disabledDrawerChange: true\n    }\n  }));\n};\n\ncustomElements.define('hdt-quick-order-list', QuickOrderList);\n\n// remove variant in cart\nclass QuickOrderListRemoveButton extends HTMLElement {\n  constructor() {\n    super();\n    this.addEventListener('click',(event) => {\n      event.preventDefault();\n      const quickOrderList = this.closest('hdt-quick-order-list');\n      quickOrderList.updateQuantity(this.dataset.index, 0);\n      this.setAttribute('hidden','');\n    });\n  }\n}\n\ncustomElements.define('hdt-quick-order-list-remove-button', QuickOrderListRemoveButton);\n\n// remove all variant in cart\nclass QuickOrderListRemoveAllButton extends HTMLElement {\n  constructor() {\n    super();\n    this.quickOrderList = this.closest('hdt-quick-order-list');\n    const allVariants = Array.from(this.quickOrderList.querySelectorAll('[data-variant-id]'));\n    const items = {};\n    const list_variants = []\n    let hasVariantsInCart = false;\n\n    allVariants.forEach((variant) => {\n      const cartQty = parseInt(variant.dataset.cartQty);\n      if (cartQty > 0) {\n        hasVariantsInCart = true;\n        items[parseInt(variant.dataset.variantId)] = 0;\n        list_variants.push(variant.dataset.variantId);\n      }\n    });\n\n    if (!hasVariantsInCart) {\n      this.setAttribute('hidden','')\n    }\n\n    this.addEventListener('click', (event) => {\n      event.preventDefault();\n      this.quickOrderList.updateMultipleQty(items,list_variants);\n      this.setAttribute('hidden','')\n    });\n  }\n}\n\ncustomElements.define('hdt-quick-order-list-remove-all-button', QuickOrderListRemoveAllButton);\n\n\n// Begin instagram feed api\nconst dataInstagramCache = {};\nclass instagramFeedAPI extends HTMLElement {\n  constructor() {\n    super();\n    this.config = JSON.parse(this.getAttribute('config'));\n    if (Shopify.designMode) {\n      document.addEventListener('shopify:section:select', (event) => {\n        this.refresh_ins();\n      })\n      document.addEventListener('shopify:section:deselect', (event) => {\n        const {acc,id} = this.config;\n        var data = sessionStorage.getItem('hdt_ins'+acc+id);\n        if (data != null && data != '') {\n          sessionStorage.removeItem('hdt_ins'+acc+id);\n        }\n      })\n    }\n  }\n  connectedCallback() {\n    this.refresh_ins();\n  }\n  refresh_ins(){\n    const {acc,id} = this.config;\n\n    if (acc == '') return;\n\n    var data = sessionStorage.getItem('hdt_ins'+acc+id);\n\n    if (data != null && data != '') {\n      // calculate expiration time for content,\n      // to force periodic refresh after 30 minutes\n      var now = new Date(),\n      expiration = new Date(JSON.parse(data).timestamp);\n\n      expiration.setMinutes(expiration.getMinutes() + 30);\n\n      // ditch the content if too old\n      if (now.getTime() > expiration.getTime()) {\n        data = null;\n        sessionStorage.removeItem('hdt_ins'+acc+id);\n      }\n    }\n    if ( data != null && data != '' ) {\n      this.instagramHTML(JSON.parse(data).content,false);\n    }\n    else{\n      if (dataInstagramCache[acc]) {\n        $4('.hdt-slider__container', this).innerHTML = dataInstagramCache[acc];\n        $4('.hdt-ins-loading', this)?.remove();\n        const lazySlider = $4('hdt-slider-lazy', this);\n        if (lazySlider) {\n          lazySlider.hidden = false;\n          lazySlider.InitLazy();\n        }\n        return;\n      }\n\n      fetch('https://graph.instagram.com/me/media?fields=id,media_type,media_url,permalink,thumbnail_url,caption,children&access_token='+atob(acc))\n      .then((response) => {\n        if(!response.ok) { throw new Error(\"not ok\"); }\n        return response.json()\n      })\n      //.then(function(res)\n      .then((res) => {\n        //console.log('Success:', res);\n         this.instagramHTML(res.data,true);\n      })\n      .catch(() => {\n        $4('.hdt-ins-loading', this)?.remove();\n        console.error(\"Instagram Feed:error fetch\");\n      });\n    }\n  }\n  instagramHTML(data,saveSessionStorageIns) {\n    const arrIcons = ($4('.hdt-icons-ins-svg', this).innerHTML || '').split('[hdtplit]'),\n    icons = {\n       image : arrIcons[0],\n       video : arrIcons[1],\n       carousel_album: arrIcons[2]\n    },\n    {id, acc, target, limit} = this.config;\n    let html = '';\n\n    data.forEach( (el, index) => {\n      if (index >= limit) return 0;\n      const media_type = el.media_type.toLowerCase();\n      html += `<div class=\"hdt-slider__slide hdt-ins-type-${media_type}\"><a calc-nav data-no-instant rel=\"nofollow\" class=\"hdt-ins-inner hdt-block hdt-relative hdt-oh hdt-rounded\" href=\"${el.permalink}\" target=\"${target}\"><div class=\"hdt-ratio\"><img src=\"${el.thumbnail_url || el.media_url}\" class=\"hdt-ins-img\" loading=\"lazy\"></div><div class=\"hdt-ins-icon\">${icons[media_type]}</div></a></div>`\n    });\n    dataInstagramCache[acc] = html;\n    $4('.hdt-slider__container', this).innerHTML = html;\n    $4('.hdt-ins-loading', this)?.remove();\n    const lazySlider = $4('hdt-slider-lazy', this);\n    if (lazySlider) {\n      lazySlider.hidden = false;\n      lazySlider.InitLazy();\n    }\n\n    if(saveSessionStorageIns){\n      sessionStorage.setItem('hdt_ins'+acc+id, JSON.stringify({\n        timestamp: new Date(),\n        content: data\n      }));\n    }\n  }\n}\ncustomElements.define('ins-feed-api', instagramFeedAPI);\n\n// End instagram feed api\n\n// Tab main-brands //\nclass TabsBrands extends HTMLElement {\n  constructor() {\n    super();\n    this.links = this.querySelectorAll('.hdt-tab-link');\n    this.tabs = this.querySelectorAll('.hdt-tab-content');\n    this.addAllListeners();\n  }\n\n  addAllListeners() {\n    this.links.forEach(link => {\n      link.addEventListener('click', () => {\n        const tabName = link.getAttribute('data-filter');\n        if (tabName === 'all') {\n          this.openAllTabs();\n        } else {\n          this.openTab(tabName);\n        }\n        this.links.forEach(item => {\n          item.classList.remove('is--active');\n        });\n        if (!link.classList.contains('is--active')) {\n          link.classList.add('is--active');\n        }\n      });\n    });\n  }\n\n  openAllTabs() {\n    this.tabs.forEach(content => {\n      content.style.display = 'block';\n      content.style.height = 'auto';\n    });\n    this.querySelector('[data-filter=\"all\"]').classList.add('is--active');\n  }\n\n  openTab(tabName) {\n    this.tabs.forEach(content => {\n      if (content.id === tabName) {\n        content.style.display = 'block';\n        content.classList.add('slideInRight');\n      } else {\n        content.style.display = 'none';\n        content.classList.remove('slideInRight');\n      }\n    });\n  }\n\n  connectedCallback() {\n    this.addAllListeners();\n  }\n  disconnectedCallback() {\n  }\n}\n\ncustomElements.define('tabs-brands', TabsBrands);\n\n//  //\n\n\nclass countryFilter extends HTMLElement {\n  constructor() {\n    super();\n    this.search = $4('[name=country_filter]', this);\n    this.reset = $4(\".hdt-country_filter__reset\", this);\n    if (this.search) {\n      this.search.addEventListener(\n        'input',\n        debounce((event) => {\n          this.filterCountries();\n        }, 200).bind(this)\n      );\n    }\n    this.search.addEventListener('keydown', this.onSearchKeyDown.bind(this));\n\n  }\n  filterCountries(){\n    const searchValue = this.search.value.toLowerCase();\n    const allCountries = this.closest(\"hdt-popover\").querySelectorAll('hdt-richlist button');\n    let visibleCountries = allCountries.length;\n    allCountries.forEach((item) => {\n      const countryName = item.getAttribute('data-name').toLowerCase();\n      if (countryName.indexOf(searchValue) > -1) {\n        item.classList.remove('hdt-d-none');\n        visibleCountries++;\n      } else {\n        item.classList.add('hdt-d-none');\n        visibleCountries--;\n      }\n    });\n    this.closest(\"hdt-popover\").updatePos();\n    this.closest(\"hdt-popover\").shadowRoot.querySelector('.hdt-current-scrollbar').scrollTop = 0;\n  }\n\n  onSearchKeyDown(event) {\n    if (event.code.toUpperCase() === 'ENTER') {\n      event.preventDefault();\n    }\n  }\n}\n\ncustomElements.define('country-filter', countryFilter);\n\n// check purchase code\nif(Shopify.designMode){\n\n  /**\n  * If it's a global variable then window[variableName] or in your case window[\"onlyVideo\"] should do the trick.\n  * https://stackoverflow.com/questions/5613834/convert-string-to-variable-name-in-javascript\n  */\n\n  var ThemeCode    = atob(window[atob('Y0hWeVkyaGg=')]),\n      ThemeName_base64 = window[atob('VkdobGJXVk9ZVzFsVkRR')],\n      ThemeName            = atob(ThemeName_base64),\n      CookieName           = 'SXNBY3RpdmVUaGVtZQ=='+ThemeName_base64,\n      ShopEmail            = atob(window[atob('VTJodmNFMWxiMVEw')]),\n      isTrueSet            = (sessionStorage.getItem(CookieName) === 'true' ),\n      str_temp_active      = atob('I3Q0cy10ZW1wLWtleS1hY3RpdmU='), // #t4s-temp-key-active\n      str_purchase         = atob('cHVyY2hhc2VfY29kZXQ0'); // purchase_codet4;\n\n      // console.log(ThemeCode,ThemeName,ShopEmail,CookieName,str_temp_active,str_purchase)\n  function alert_active_html() {\n    return `<section id=\"${str_purchase}\" style=\"display: flex !important\">${ $4(str_temp_active).innerHTML }</section>`;\n  };\n\n  // console.log('ThemeCode', ThemeCode, isTrueSet)\n\n  if (ThemeCode == '') {\n    let dom1 = (new DOMParser).parseFromString(alert_active_html(), \"text/html\");\n    document.body.append(dom1.body.firstElementChild);\n    let dom2 = (new DOMParser).parseFromString('<div id=\"luffyabc194\"><style>body>*:not(#purchase_codet4) {opacity: 0;pointer-events: none;</style></div>', \"text/html\");\n    document.body.prepend(dom2.body.firstElementChild);\n    sessionStorage.removeItem(CookieName);\n    localStorage.removeItem(CookieName);\n  }\n  else if ( !isTrueSet ) {\n\n    //console.log(ShopEmail, ThemeName, ThemeCode);\n\n    var domain     = window.location.hostname,\n    mix        = ['4','t','h','e','p','l','i','c','o','/','.',':','n','s'],\n    mix_domain = mix[2]+mix[1]+mix[1]+mix[4]+mix[13]+mix[11]+mix[9]+mix[9]+mix[5]+mix[6]+mix[7]+mix[10]+mix[1]+mix[2]+mix[3]+mix[0]+mix[10]+mix[7]+mix[8]+mix[9]+mix[5]+mix[6]+mix[7]+mix[3]+mix[12]+mix[13]+mix[3]+mix[9]+mix[7]+mix[2]+mix[3]+mix[7]+'k',\n    data       = {\n      \"shopify_domain\": domain,\n      \"email\"         : ShopEmail,\n      \"theme\"         : ThemeName,\n      \"purchase_code\" : ThemeCode\n    };\n\n    fetch(mix_domain, {\n      \"headers\": {\n        \"accept\": \"*/*\",\n        \"cache-control\": \"no-cache\",\n        \"x-requested-with\": \"XMLHttpRequest\"\n      },\n      \"body\": btoa (encodeURIComponent(JSON.stringify(data))) ,\n      \"method\": \"POST\",\n      \"mode\": \"cors\"\n    })\n    .then(function(response) {\n      if(response.ok){\n        return response.json()\n      } throw \"\"\n    })\n    .then(function(response) {\n      let dom = (new DOMParser).parseFromString(alert_active_html(), \"text/html\");\n\n      if ( response.status == 1) {\n\n        dom.body.firstElementChild.innerHTML = \"<p>ACTIVATED SUCCESSFULLY. Thanks for buying my theme!</p>\";\n        document.body.append(dom.body.firstElementChild);\n\n        // Set a cookie to expire in 1 hour in Javascript\n        var isActived = localStorage.getItem(CookieName);\n        sessionStorage.setItem(CookieName, 'true')\n\n        if (isActived === 'true') {\n          $4(atob('I3B1cmNoYXNlX2NvZGV0NA==')).remove(); // #purchase_codet4\n          // $4(atob('I2x1ZmZ5YWJjMTk0'))?.remove(); //#luffyabc194\n        }\n        else {\n          localStorage.setItem(CookieName, \"true\");\n          setTimeout(function(){\n            $4(atob('I3B1cmNoYXNlX2NvZGV0NA==')).remove(); // #purchase_codet4\n            // $4(atob('I2x1ZmZ5YWJjMTk0'))?.remove(); //#luffyabc194\n          }, 1000);\n        }\n\n      }\n      else {\n\n        var mess = response.message;\n        if (mess == \"No sale belonging to the current user found with that code\") {\n\n          dom.body.firstElementChild.innerHTML = \"<p>Purchase code error. It is a sales reversal or a refund. :(((</p>\";\n\n        }\n        else if (mess.length == 58 || mess.length == 101) {\n          dom.body.firstElementChild.innerHTML = \"<p>That license key doesn't appear to be valid. Please check your purchase code again!<br>Please open a ticket at <a href='https://support.the4.co' target='_blank'><span>support.the4.co</span></a> if you have any question.</p>\";\n\n        }\n        else if (mess.length == 104) {\n          dom.body.firstElementChild.innerHTML = \"<p>The license not match with current theme.!<br>Please open a ticket at <a href='https://support.the4.co' target='_blank'><span>support.the4.co</span></a> if you have any question.</p>\";\n        }\n        else {\n          try {\n            var mess = mess.split('active domain `')[1].split('`. ')[0];\n          }\n          catch(err) {\n            //var mess = mess;\n          }\n          dom.body.firstElementChild.innerHTML = \"<p>Your purchase code is invalided since it is being activated at another store \"+mess+\".<br> Please open a ticket at <a class='cg' href='https://support.the4.co' target='_blank'><span>support.the4.co</span></a> to get quick assistance.</p>\";\n        }\n        document.body.append(dom.body.firstElementChild);\n\n      }\n\n    }).catch(function(e) {\n    //}).catch((e)=>{\n      console.error(e)\n    });\n\n  }\n}\n// end check purchase code\n\n// readmore collection description\nclass DescriptionShort extends HTMLElement{\n  constructor(){\n    super();\n    this.button_readmore = $4('[data-read-more]', this);\n    this.button_readless = $4('[data-read-less]', this);\n    this.short_des = $4('.hdt-collection-description-short', this);\n    this.full_des = $4('.hdt-collection-description-full', this);\n    if(!this.button_readmore || !this.button_readless || !this.short_des || !this.full_des){\n      return;\n    }\n    this.button_readmore.addEventListener('click',(e)=>{\n      // console.log(this);\n      e.preventDefault();\n      this.short_des.classList.add('hdt-hidden');\n      this.full_des.classList.remove('hdt-hidden');\n    })\n    this.button_readless.addEventListener('click',(e)=>{\n      // console.log(this);\n      e.preventDefault();\n      this.short_des.classList.remove('hdt-hidden');\n      this.full_des.classList.add('hdt-hidden');\n    })\n  }\n}\ncustomElements.define('description-short',DescriptionShort)\n\n// video popup\nclass popupVideo extends HTMLElement {\n  constructor(){\n    super();\n    this.modal = $4(\"hdt-modal\", this);\n    this.video = $4(\"hdt-video-player\", this);\n    this.modal.addEventListener(\"dialog:afterOpen\", (e)=>{\n      this.video.play()\n    })\n    this.modal.addEventListener(\"dialog:beforeClose\", (e)=>{\n      this.video.pause()\n    })\n  }\n}\ncustomElements.define('button-popup-video', popupVideo)\n\n\n// product description - readmore\nclass ProductDescription extends HTMLElement{\n  constructor(){\n    super();\n    this.lm_btn = this.querySelector('.hdt-pr-des-rm');\n    if(!this.lm_btn) return;\n    \n    this.lm_btn.addEventListener('click',()=>{\n      this.classList.toggle('is--less');\n    })\n  }\n}\ncustomElements.define('product-description',ProductDescription);\n\n\n// tabHover\nclass tabHover extends HTMLElement {\n  constructor() {\n    super();\n    this.addEventListener(\"mouseenter\", (event) => {\n      this.closest(\"hdt-tab\").querySelector(\"button[aria-current=\\\"true\\\"]\")?.setAttribute(\"aria-current\", false);\n      this.parentElement.click()\n    });\n  }\n}\ncustomElements.define(\"tab-hover\", tabHover);\n\n// ===========================\n//        QUICK SEARCH\n// ===========================\nclass QuickSearch extends HTMLElement{\n  constructor(){\n    super();\n    this.inpt = this.closest('hdt-predictive-search').querySelector('form input[data-input-search]');\n    this.query = this.querySelector('a');\n    if(!this.inpt || !this.query) return;\n    this.onClick();\n  }\n  onClick(){\n    let self = this;\n    this.query.addEventListener('click',(e) => {\n      e.preventDefault();\n      self.inpt.value = e.target.dataset.query;\n      self.inpt.dispatchEvent(new Event('input'));\n    })\n  }\n}\ncustomElements.define('hdt-quick-search', QuickSearch);\n\n// ZhuangCulture stale collection link guard - 2026-06-19\n(() => {\n  const map = new Map([\n    [\"/collections/brocade-bags\", \"/collections/zhuang-brocade-collection\"],\n    [\"/collections/bag-type-tote-carryall-bags\", \"/collections/zhuang-brocade-tote-bags\"],\n    [\"/collections/bag-type-phone-mini-bags\", \"/collections/small-brocade-bags\"],\n    [\"/collections/gift-holiday-gifts\", \"/collections/gift-bags\"],\n    [\"/collections/gift-mother-daughter-gifts\", \"/collections/gift-ready-brocade-bags\"],\n    [\"/collections/occasion-celebration-family-bags\", \"/collections/gift-bags\"],\n  ]);\n  const rewriteLinks = () => {\n    document.querySelectorAll('a[href]').forEach((link) => {\n      let url;\n      try { url = new URL(link.getAttribute('href'), window.location.origin); }\n      catch (_error) { return; }\n      const target = map.get(url.pathname);\n      if (!target) return;\n      link.setAttribute('href', target + url.search + url.hash);\n    });\n  };\n  const redirectTarget = map.get(window.location.pathname);\n  if (redirectTarget) {\n    window.location.replace(redirectTarget + window.location.search + window.location.hash);\n    return;\n  }\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', rewriteLinks, { once: true });\n  else rewriteLinks();\n  window.addEventListener('pageshow', rewriteLinks);\n})();\n// End ZhuangCulture stale collection link guard - 2026-06-19\n\n// ZhuangCulture homepage runtime stale sync removed - 2026-06-21 - zc-runtime-customjs-patch-20260621\n// ZhuangCulture homepage runtime stale sync removed - 2026-06-21 - zc-runtime-customjs-patch-20260621\n\n// ZhuangCulture homepage runtime fallback - 2026-06-21 - zc-homepage-runtime-fallback-20260621\n(() => {\n  const marker = \"zc-homepage-runtime-fallback-20260621\";\n  const html = \"<section id=\\\"shopify-section-template--22760839217364__zc_home_hero_v3_20260621\\\" class=\\\"shopify-section hdt-section\\\"><div class=\\\"hdt-section-inner hdt-s-gradient hdt-section-spacing hdt-s-gradient\\\" color-scheme=\\\"scheme-1\\\"><style>\\n.zc202621,.zc202621 *{box-sizing:border-box}.zc202621{font-family:inherit;color:#17211d;background:#f8f4ed}.zc202621 a{text-decoration:none;color:inherit}.zc202621__wrap{width:min(1180px,calc(100% - 32px));margin:0 auto}.zc202621__eyebrow{margin:0 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6c5f53}.zc202621__title{margin:0;font-size:42px;line-height:1.08;letter-spacing:0;color:#16211d}.zc202621__copy{margin:12px 0 0;max-width:690px;font-size:15px;line-height:1.65;color:#4d5a53}.zc202621__btns{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}.zc202621__btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:12px 18px;background:#173f5f;color:#fff!important;font-weight:650;border:1px solid #173f5f}.zc202621__btn--light{background:#fff;color:#17332e!important;border-color:rgba(23,51,46,.18)}.zc202621__section{padding:72px 0}.zc202621__grid{display:grid;gap:18px}.zc202621__card{background:#fff;border:1px solid rgba(23,33,29,.12);min-height:100%;padding:22px}.zc202621__card h3{margin:0 0 8px;font-size:19px;line-height:1.25;letter-spacing:0}.zc202621__card p{margin:0;font-size:14px;line-height:1.56;color:#56625b}.zc202621__soft{background:#f8f4ed}.zc202621__white{background:#fff}.zc202621__band{background:#1b302b;color:#fff}.zc202621__band .zc202621__title,.zc202621__band .zc202621__copy,.zc202621__band .zc202621__eyebrow{color:#fff}.zc202621__imgbox{aspect-ratio:1/1;background:#f4efe6;display:flex;align-items:center;justify-content:center;overflow:hidden}.zc202621__imgbox img{width:100%;height:100%;object-fit:contain;display:block}.zc202621__product{padding:0;overflow:hidden}.zc202621__productBody{padding:18px}.zc202621__productMeta{margin:0 0 10px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#76675b}.zc202621__productTitle{margin:0 0 10px;font-size:16px;line-height:1.32}.zc202621__textLink{display:inline-block;margin-top:14px;font-weight:700;color:#17211d}.zc202621__split{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:56px;align-items:center}.zc202621__scenario{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__products{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__shape{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__trust{grid-template-columns:repeat(4,minmax(0,1fr))}@media(max-width:899px){.zc202621__wrap{width:min(100% - 28px,680px)}.zc202621__section{padding:40px 0}.zc202621__split,.zc202621__scenario,.zc202621__shape,.zc202621__trust{grid-template-columns:1fr}.zc202621__products{grid-template-columns:1fr 1fr;gap:12px}.zc202621__card{padding:18px}.zc202621__productBody{padding:14px}.zc202621__productTitle{font-size:14px}.zc202621__copy{font-size:14px}.zc202621__title{font-size:30px}.zc202621-hero{min-height:540px!important}.zc202621-hero .zc202621__title{font-size:38px!important}.zc202621__btn{width:100%}}@media(max-width:430px){.zc202621__products{grid-template-columns:1fr}.zc202621__title{font-size:28px}}\\n</style><section class=\\\"zc202621 zc202621-hero\\\" aria-label=\\\"Brocade-inspired handbags\\\" style=\\\"min-height:660px;display:flex;align-items:center;background:linear-gradient(90deg,rgba(18,29,25,.50),rgba(18,29,25,.18)),url('https://cdn.shopify.com/s/files/1/0831/3103/9956/files/zc-home-hero-banner-hero-banner-08-lifestyle-5603f3-dsc09499.jpg?v=1780972509') center/cover no-repeat;color:#fff\\\"><div class=\\\"zc202621__wrap\\\"><p class=\\\"zc202621__eyebrow\\\" style=\\\"color:#fff\\\">Brocade-inspired handbags</p><h1 class=\\\"zc202621__title\\\" style=\\\"max-width:10ch;font-size:64px;color:#fff\\\">Brocade Bags for Modern Carry</h1><p class=\\\"zc202621__copy\\\" style=\\\"color:#fff;max-width:590px\\\">Polished brocade-inspired bags for workdays, weekends, occasions, and meaningful gifts, made to bring pattern and practicality into everyday style.</p><div class=\\\"zc202621__btns\\\"><a class=\\\"zc202621__btn\\\" href=\\\"/collections/brocade-bags\\\">Shop Brocade Bags</a><a class=\\\"zc202621__btn zc202621__btn--light\\\" href=\\\"/collections/gift-ready-brocade-bags\\\">Find a Gift</a></div></div></section></div></section>\\n<section id=\\\"shopify-section-template--22760839217364__zc_shop_by_shape_v3_20260621\\\" class=\\\"shopify-section hdt-section\\\"><div class=\\\"hdt-section-inner hdt-s-gradient hdt-section-spacing hdt-s-gradient\\\" color-scheme=\\\"scheme-1\\\"><style>\\n.zc202621,.zc202621 *{box-sizing:border-box}.zc202621{font-family:inherit;color:#17211d;background:#f8f4ed}.zc202621 a{text-decoration:none;color:inherit}.zc202621__wrap{width:min(1180px,calc(100% - 32px));margin:0 auto}.zc202621__eyebrow{margin:0 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6c5f53}.zc202621__title{margin:0;font-size:42px;line-height:1.08;letter-spacing:0;color:#16211d}.zc202621__copy{margin:12px 0 0;max-width:690px;font-size:15px;line-height:1.65;color:#4d5a53}.zc202621__btns{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}.zc202621__btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:12px 18px;background:#173f5f;color:#fff!important;font-weight:650;border:1px solid #173f5f}.zc202621__btn--light{background:#fff;color:#17332e!important;border-color:rgba(23,51,46,.18)}.zc202621__section{padding:72px 0}.zc202621__grid{display:grid;gap:18px}.zc202621__card{background:#fff;border:1px solid rgba(23,33,29,.12);min-height:100%;padding:22px}.zc202621__card h3{margin:0 0 8px;font-size:19px;line-height:1.25;letter-spacing:0}.zc202621__card p{margin:0;font-size:14px;line-height:1.56;color:#56625b}.zc202621__soft{background:#f8f4ed}.zc202621__white{background:#fff}.zc202621__band{background:#1b302b;color:#fff}.zc202621__band .zc202621__title,.zc202621__band .zc202621__copy,.zc202621__band .zc202621__eyebrow{color:#fff}.zc202621__imgbox{aspect-ratio:1/1;background:#f4efe6;display:flex;align-items:center;justify-content:center;overflow:hidden}.zc202621__imgbox img{width:100%;height:100%;object-fit:contain;display:block}.zc202621__product{padding:0;overflow:hidden}.zc202621__productBody{padding:18px}.zc202621__productMeta{margin:0 0 10px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#76675b}.zc202621__productTitle{margin:0 0 10px;font-size:16px;line-height:1.32}.zc202621__textLink{display:inline-block;margin-top:14px;font-weight:700;color:#17211d}.zc202621__split{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:56px;align-items:center}.zc202621__scenario{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__products{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__shape{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__trust{grid-template-columns:repeat(4,minmax(0,1fr))}@media(max-width:899px){.zc202621__wrap{width:min(100% - 28px,680px)}.zc202621__section{padding:40px 0}.zc202621__split,.zc202621__scenario,.zc202621__shape,.zc202621__trust{grid-template-columns:1fr}.zc202621__products{grid-template-columns:1fr 1fr;gap:12px}.zc202621__card{padding:18px}.zc202621__productBody{padding:14px}.zc202621__productTitle{font-size:14px}.zc202621__copy{font-size:14px}.zc202621__title{font-size:30px}.zc202621-hero{min-height:540px!important}.zc202621-hero .zc202621__title{font-size:38px!important}.zc202621__btn{width:100%}}@media(max-width:430px){.zc202621__products{grid-template-columns:1fr}.zc202621__title{font-size:28px}}\\n</style><section class=\\\"zc202621 zc202621__section zc202621__white\\\" aria-label=\\\"Shop by bag shape\\\"><div class=\\\"zc202621__wrap\\\"><p class=\\\"zc202621__eyebrow\\\">Start with the shape</p><h2 class=\\\"zc202621__title\\\">Find Your Bag Shape</h2><p class=\\\"zc202621__copy\\\">Choose by the way you carry, then explore the brocade pattern that fits the moment.</p><div class=\\\"zc202621__grid zc202621__shape\\\" style=\\\"margin-top:24px\\\"><a class=\\\"zc202621__card\\\" href=\\\"/collections/zhuang-brocade-tote-bags\\\"><h3>Tote Bags</h3><p>Room for workdays, travel days, and meaningful gifts.</p></a><a class=\\\"zc202621__card\\\" href=\\\"/collections/zhuang-brocade-shoulder-bags\\\"><h3>Shoulder Bags</h3><p>Easy silhouettes with polished texture and daily versatility.</p></a><a class=\\\"zc202621__card\\\" href=\\\"/collections/small-brocade-bags\\\"><h3>Small Bags</h3><p>Compact pieces for dinners, weekends, and thoughtful gifts.</p></a><a class=\\\"zc202621__card\\\" href=\\\"/collections/gift-ready-brocade-bags\\\"><h3>Gift-Ready Bags</h3><p>Pieces selected by occasion, recipient, and personal style.</p></a></div></div></section></div></section>\\n<section id=\\\"shopify-section-template--22760839217364__zc_product_proof_v3_20260621\\\" class=\\\"shopify-section hdt-section\\\"><div class=\\\"hdt-section-inner hdt-s-gradient hdt-section-spacing hdt-s-gradient\\\" color-scheme=\\\"scheme-1\\\"><style>\\n.zc202621,.zc202621 *{box-sizing:border-box}.zc202621{font-family:inherit;color:#17211d;background:#f8f4ed}.zc202621 a{text-decoration:none;color:inherit}.zc202621__wrap{width:min(1180px,calc(100% - 32px));margin:0 auto}.zc202621__eyebrow{margin:0 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6c5f53}.zc202621__title{margin:0;font-size:42px;line-height:1.08;letter-spacing:0;color:#16211d}.zc202621__copy{margin:12px 0 0;max-width:690px;font-size:15px;line-height:1.65;color:#4d5a53}.zc202621__btns{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}.zc202621__btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:12px 18px;background:#173f5f;color:#fff!important;font-weight:650;border:1px solid #173f5f}.zc202621__btn--light{background:#fff;color:#17332e!important;border-color:rgba(23,51,46,.18)}.zc202621__section{padding:72px 0}.zc202621__grid{display:grid;gap:18px}.zc202621__card{background:#fff;border:1px solid rgba(23,33,29,.12);min-height:100%;padding:22px}.zc202621__card h3{margin:0 0 8px;font-size:19px;line-height:1.25;letter-spacing:0}.zc202621__card p{margin:0;font-size:14px;line-height:1.56;color:#56625b}.zc202621__soft{background:#f8f4ed}.zc202621__white{background:#fff}.zc202621__band{background:#1b302b;color:#fff}.zc202621__band .zc202621__title,.zc202621__band .zc202621__copy,.zc202621__band .zc202621__eyebrow{color:#fff}.zc202621__imgbox{aspect-ratio:1/1;background:#f4efe6;display:flex;align-items:center;justify-content:center;overflow:hidden}.zc202621__imgbox img{width:100%;height:100%;object-fit:contain;display:block}.zc202621__product{padding:0;overflow:hidden}.zc202621__productBody{padding:18px}.zc202621__productMeta{margin:0 0 10px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#76675b}.zc202621__productTitle{margin:0 0 10px;font-size:16px;line-height:1.32}.zc202621__textLink{display:inline-block;margin-top:14px;font-weight:700;color:#17211d}.zc202621__split{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:56px;align-items:center}.zc202621__scenario{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__products{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__shape{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__trust{grid-template-columns:repeat(4,minmax(0,1fr))}@media(max-width:899px){.zc202621__wrap{width:min(100% - 28px,680px)}.zc202621__section{padding:40px 0}.zc202621__split,.zc202621__scenario,.zc202621__shape,.zc202621__trust{grid-template-columns:1fr}.zc202621__products{grid-template-columns:1fr 1fr;gap:12px}.zc202621__card{padding:18px}.zc202621__productBody{padding:14px}.zc202621__productTitle{font-size:14px}.zc202621__copy{font-size:14px}.zc202621__title{font-size:30px}.zc202621-hero{min-height:540px!important}.zc202621-hero .zc202621__title{font-size:38px!important}.zc202621__btn{width:100%}}@media(max-width:430px){.zc202621__products{grid-template-columns:1fr}.zc202621__title{font-size:28px}}\\n</style><section class=\\\"zc202621 zc202621__section zc202621__soft\\\" aria-label=\\\"Featured brocade-inspired bags\\\"><div class=\\\"zc202621__wrap\\\"><div style=\\\"display:grid;grid-template-columns:minmax(0,1fr) auto;gap:24px;align-items:end;margin-bottom:24px\\\"><div><p class=\\\"zc202621__eyebrow\\\">Featured bags</p><h2 class=\\\"zc202621__title\\\">Color, texture, and gift-ready carry</h2><p class=\\\"zc202621__copy\\\">Start with distinctive bag shapes and richer brocade-inspired color stories, then choose the piece that fits the moment.</p></div><a class=\\\"zc202621__btn\\\" href=\\\"/collections/brocade-bags\\\">Shop All Bags</a></div><div class=\\\"zc202621__grid zc202621__products\\\"><article class=\\\"zc202621__card zc202621__product\\\"><a href=\\\"/products/blue-white-qinglan-brocade-inspired-tote-bag-b5004\\\" aria-label=\\\"Blue White Qinglan Brocade-Inspired Tote Bag\\\"><div class=\\\"zc202621__imgbox\\\"><img src=\\\"https://cdn.shopify.com/s/files/1/0831/3103/9956/files/b5004-800transparent-pixel-preserving-v2-clean-alpha80-800.jpg?v=1781833914\\\" alt=\\\"Blue White Qinglan Brocade-Inspired Tote Bag front view\\\" loading=\\\"lazy\\\" width=\\\"800\\\" height=\\\"800\\\"></div><div class=\\\"zc202621__productBody\\\"><p class=\\\"zc202621__productMeta\\\">Statement Tote</p><h3 class=\\\"zc202621__productTitle\\\">Blue White Qinglan Brocade-Inspired Tote Bag</h3><p>A structured tote with pale blue pattern work for birthdays, thank-you gifts, and polished everyday carry.</p><span class=\\\"zc202621__textLink\\\">View bag</span></div></a></article><article class=\\\"zc202621__card zc202621__product\\\"><a href=\\\"/products/deep-teal-flying-swallow-brocade-inspired-baguette-bag-5619f7\\\" aria-label=\\\"Deep Teal Flying Swallow Brocade-Inspired Baguette Bag\\\"><div class=\\\"zc202621__imgbox\\\"><img src=\\\"https://cdn.shopify.com/s/files/1/0831/3103/9956/files/5619f7-alpha-composite-warm-800-w700.jpg?v=1781917647\\\" alt=\\\"Deep Teal Flying Swallow Brocade-Inspired Baguette Bag front view\\\" loading=\\\"lazy\\\" width=\\\"800\\\" height=\\\"800\\\"></div><div class=\\\"zc202621__productBody\\\"><p class=\\\"zc202621__productMeta\\\">Evening Baguette</p><h3 class=\\\"zc202621__productTitle\\\">Deep Teal Flying Swallow Brocade-Inspired Baguette Bag</h3><p>A compact teal shape for dinners, holiday gifting, and outfit-focused occasions.</p><span class=\\\"zc202621__textLink\\\">View bag</span></div></a></article><article class=\\\"zc202621__card zc202621__product\\\"><a href=\\\"/products/silver-purple-baina-brocade-inspired-tote-bag-b5016\\\" aria-label=\\\"Silver Purple Baina Brocade-Inspired Tote Bag\\\"><div class=\\\"zc202621__imgbox\\\"><img src=\\\"https://cdn.shopify.com/s/files/1/0831/3103/9956/files/b5016-alpha-composite-warm-800-h690.jpg?v=1781917283\\\" alt=\\\"Silver Purple Baina Brocade-Inspired Tote Bag front view\\\" loading=\\\"lazy\\\" width=\\\"800\\\" height=\\\"800\\\"></div><div class=\\\"zc202621__productBody\\\"><p class=\\\"zc202621__productMeta\\\">Carryall Tote</p><h3 class=\\\"zc202621__productTitle\\\">Silver Purple Baina Brocade-Inspired Tote Bag</h3><p>A roomier tote shape for workdays, visits, and milestone gifts.</p><span class=\\\"zc202621__textLink\\\">View bag</span></div></a></article><article class=\\\"zc202621__card zc202621__product\\\"><a href=\\\"/products/deep-blue-butterfly-flower-brocade-inspired-drawstring-shoulder-bag-5622f16\\\" aria-label=\\\"Deep Blue Butterfly Flower Brocade-Inspired Drawstring Shoulder Bag\\\"><div class=\\\"zc202621__imgbox\\\"><img src=\\\"https://cdn.shopify.com/s/files/1/0831/3103/9956/files/5622f16-background-unified-800.jpg?v=1781916004\\\" alt=\\\"Deep Blue Butterfly Flower Brocade-Inspired Drawstring Shoulder Bag front view\\\" loading=\\\"lazy\\\" width=\\\"800\\\" height=\\\"800\\\"></div><div class=\\\"zc202621__productBody\\\"><p class=\\\"zc202621__productMeta\\\">Soft Shoulder Bag</p><h3 class=\\\"zc202621__productTitle\\\">Deep Blue Butterfly Flower Brocade-Inspired Drawstring Shoulder Bag</h3><p>A softer shoulder silhouette with rich blue color for everyday style and thoughtful giving.</p><span class=\\\"zc202621__textLink\\\">View bag</span></div></a></article></div></div></section></div></section>\\n<section id=\\\"shopify-section-template--22760839217364__zc_gift_moment_v3_20260621\\\" class=\\\"shopify-section hdt-section\\\"><div class=\\\"hdt-section-inner hdt-s-gradient hdt-section-spacing hdt-s-gradient\\\" color-scheme=\\\"scheme-1\\\"><style>\\n.zc202621,.zc202621 *{box-sizing:border-box}.zc202621{font-family:inherit;color:#17211d;background:#f8f4ed}.zc202621 a{text-decoration:none;color:inherit}.zc202621__wrap{width:min(1180px,calc(100% - 32px));margin:0 auto}.zc202621__eyebrow{margin:0 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6c5f53}.zc202621__title{margin:0;font-size:42px;line-height:1.08;letter-spacing:0;color:#16211d}.zc202621__copy{margin:12px 0 0;max-width:690px;font-size:15px;line-height:1.65;color:#4d5a53}.zc202621__btns{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}.zc202621__btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:12px 18px;background:#173f5f;color:#fff!important;font-weight:650;border:1px solid #173f5f}.zc202621__btn--light{background:#fff;color:#17332e!important;border-color:rgba(23,51,46,.18)}.zc202621__section{padding:72px 0}.zc202621__grid{display:grid;gap:18px}.zc202621__card{background:#fff;border:1px solid rgba(23,33,29,.12);min-height:100%;padding:22px}.zc202621__card h3{margin:0 0 8px;font-size:19px;line-height:1.25;letter-spacing:0}.zc202621__card p{margin:0;font-size:14px;line-height:1.56;color:#56625b}.zc202621__soft{background:#f8f4ed}.zc202621__white{background:#fff}.zc202621__band{background:#1b302b;color:#fff}.zc202621__band .zc202621__title,.zc202621__band .zc202621__copy,.zc202621__band .zc202621__eyebrow{color:#fff}.zc202621__imgbox{aspect-ratio:1/1;background:#f4efe6;display:flex;align-items:center;justify-content:center;overflow:hidden}.zc202621__imgbox img{width:100%;height:100%;object-fit:contain;display:block}.zc202621__product{padding:0;overflow:hidden}.zc202621__productBody{padding:18px}.zc202621__productMeta{margin:0 0 10px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#76675b}.zc202621__productTitle{margin:0 0 10px;font-size:16px;line-height:1.32}.zc202621__textLink{display:inline-block;margin-top:14px;font-weight:700;color:#17211d}.zc202621__split{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:56px;align-items:center}.zc202621__scenario{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__products{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__shape{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__trust{grid-template-columns:repeat(4,minmax(0,1fr))}@media(max-width:899px){.zc202621__wrap{width:min(100% - 28px,680px)}.zc202621__section{padding:40px 0}.zc202621__split,.zc202621__scenario,.zc202621__shape,.zc202621__trust{grid-template-columns:1fr}.zc202621__products{grid-template-columns:1fr 1fr;gap:12px}.zc202621__card{padding:18px}.zc202621__productBody{padding:14px}.zc202621__productTitle{font-size:14px}.zc202621__copy{font-size:14px}.zc202621__title{font-size:30px}.zc202621-hero{min-height:540px!important}.zc202621-hero .zc202621__title{font-size:38px!important}.zc202621__btn{width:100%}}@media(max-width:430px){.zc202621__products{grid-template-columns:1fr}.zc202621__title{font-size:28px}}\\n</style><section class=\\\"zc202621 zc202621__section zc202621__white\\\" aria-label=\\\"Gift guide by occasion\\\"><div class=\\\"zc202621__wrap\\\"><p class=\\\"zc202621__eyebrow\\\">Gift by the moment</p><h2 class=\\\"zc202621__title\\\">A brocade-inspired bag can feel personal without feeling overdone</h2><p class=\\\"zc202621__copy\\\">Choose by recipient and occasion first, then refine by shape, color, and how they like to carry.</p><div class=\\\"zc202621__grid zc202621__scenario\\\" style=\\\"margin-top:24px\\\"><a class=\\\"zc202621__card\\\" href=\\\"/collections/gift-ready-brocade-bags\\\"><h3>Birthday gifts</h3><p>Colorful pieces for someone who likes distinctive accessories.</p></a><a class=\\\"zc202621__card\\\" href=\\\"/collections/small-brocade-bags\\\"><h3>Dinner and host gifts</h3><p>Compact bags that feel special without needing a large carry size.</p></a><a class=\\\"zc202621__card\\\" href=\\\"/collections/zhuang-brocade-tote-bags\\\"><h3>Work milestones</h3><p>Structured totes for a new role, graduation, or daily routine.</p></a><a class=\\\"zc202621__card\\\" href=\\\"/collections/gift-ready-brocade-bags\\\"><h3>Holiday picks</h3><p>Pattern-rich bags selected for thoughtful seasonal gifting.</p></a></div><div class=\\\"zc202621__btns\\\"><a class=\\\"zc202621__btn\\\" href=\\\"/collections/gift-ready-brocade-bags\\\">Find Gift Ideas</a><a class=\\\"zc202621__btn zc202621__btn--light\\\" href=\\\"/collections/small-brocade-bags\\\">Shop Small Gifts</a></div></div></section></div></section>\\n<section id=\\\"shopify-section-template--22760839217364__zc_brocade_story_v3_20260621\\\" class=\\\"shopify-section hdt-section\\\"><div class=\\\"hdt-section-inner hdt-s-gradient hdt-section-spacing hdt-s-gradient\\\" color-scheme=\\\"scheme-1\\\"><style>\\n.zc202621,.zc202621 *{box-sizing:border-box}.zc202621{font-family:inherit;color:#17211d;background:#f8f4ed}.zc202621 a{text-decoration:none;color:inherit}.zc202621__wrap{width:min(1180px,calc(100% - 32px));margin:0 auto}.zc202621__eyebrow{margin:0 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6c5f53}.zc202621__title{margin:0;font-size:42px;line-height:1.08;letter-spacing:0;color:#16211d}.zc202621__copy{margin:12px 0 0;max-width:690px;font-size:15px;line-height:1.65;color:#4d5a53}.zc202621__btns{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}.zc202621__btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:12px 18px;background:#173f5f;color:#fff!important;font-weight:650;border:1px solid #173f5f}.zc202621__btn--light{background:#fff;color:#17332e!important;border-color:rgba(23,51,46,.18)}.zc202621__section{padding:72px 0}.zc202621__grid{display:grid;gap:18px}.zc202621__card{background:#fff;border:1px solid rgba(23,33,29,.12);min-height:100%;padding:22px}.zc202621__card h3{margin:0 0 8px;font-size:19px;line-height:1.25;letter-spacing:0}.zc202621__card p{margin:0;font-size:14px;line-height:1.56;color:#56625b}.zc202621__soft{background:#f8f4ed}.zc202621__white{background:#fff}.zc202621__band{background:#1b302b;color:#fff}.zc202621__band .zc202621__title,.zc202621__band .zc202621__copy,.zc202621__band .zc202621__eyebrow{color:#fff}.zc202621__imgbox{aspect-ratio:1/1;background:#f4efe6;display:flex;align-items:center;justify-content:center;overflow:hidden}.zc202621__imgbox img{width:100%;height:100%;object-fit:contain;display:block}.zc202621__product{padding:0;overflow:hidden}.zc202621__productBody{padding:18px}.zc202621__productMeta{margin:0 0 10px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#76675b}.zc202621__productTitle{margin:0 0 10px;font-size:16px;line-height:1.32}.zc202621__textLink{display:inline-block;margin-top:14px;font-weight:700;color:#17211d}.zc202621__split{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:56px;align-items:center}.zc202621__scenario{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__products{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__shape{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__trust{grid-template-columns:repeat(4,minmax(0,1fr))}@media(max-width:899px){.zc202621__wrap{width:min(100% - 28px,680px)}.zc202621__section{padding:40px 0}.zc202621__split,.zc202621__scenario,.zc202621__shape,.zc202621__trust{grid-template-columns:1fr}.zc202621__products{grid-template-columns:1fr 1fr;gap:12px}.zc202621__card{padding:18px}.zc202621__productBody{padding:14px}.zc202621__productTitle{font-size:14px}.zc202621__copy{font-size:14px}.zc202621__title{font-size:30px}.zc202621-hero{min-height:540px!important}.zc202621-hero .zc202621__title{font-size:38px!important}.zc202621__btn{width:100%}}@media(max-width:430px){.zc202621__products{grid-template-columns:1fr}.zc202621__title{font-size:28px}}\\n</style><section class=\\\"zc202621 zc202621__section zc202621__band\\\" aria-label=\\\"Why brocade-inspired bags\\\"><div class=\\\"zc202621__wrap\\\"><div class=\\\"zc202621__split\\\"><div><p class=\\\"zc202621__eyebrow\\\">Pattern with purpose</p><h2 class=\\\"zc202621__title\\\">Brocade-inspired texture, shaped for modern use</h2><p class=\\\"zc202621__copy\\\">Zhuang Culture focuses on modern handbags with distinctive brocade-inspired geometry, rich color, and practical carry. Cultural language stays respectful, specific, and inspiration-led.</p><div class=\\\"zc202621__btns\\\"><a class=\\\"zc202621__btn\\\" href=\\\"/pages/about-us\\\">About Zhuang Culture</a><a class=\\\"zc202621__btn zc202621__btn--light\\\" href=\\\"/collections/brocade-bags\\\">Explore Bags</a></div></div><div class=\\\"zc202621__grid\\\" style=\\\"grid-template-columns:1fr;gap:14px\\\"><div class=\\\"zc202621__card\\\"><h3>Distinctive pattern</h3><p>Geometry and color create the first visual hook.</p></div><div class=\\\"zc202621__card\\\"><h3>Useful silhouettes</h3><p>Shape, strap, closure, and capacity guide the shopper.</p></div><div class=\\\"zc202621__card\\\"><h3>Giftable style</h3><p>Occasion language stays personal, cautious, and shopper-focused.</p></div></div></div></div></section></div></section>\\n<section id=\\\"shopify-section-template--22760839217364__zc_confidence_faq_v3_20260621\\\" class=\\\"shopify-section hdt-section\\\"><div class=\\\"hdt-section-inner hdt-s-gradient hdt-section-spacing hdt-s-gradient\\\" color-scheme=\\\"scheme-1\\\"><style>\\n.zc202621,.zc202621 *{box-sizing:border-box}.zc202621{font-family:inherit;color:#17211d;background:#f8f4ed}.zc202621 a{text-decoration:none;color:inherit}.zc202621__wrap{width:min(1180px,calc(100% - 32px));margin:0 auto}.zc202621__eyebrow{margin:0 0 10px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6c5f53}.zc202621__title{margin:0;font-size:42px;line-height:1.08;letter-spacing:0;color:#16211d}.zc202621__copy{margin:12px 0 0;max-width:690px;font-size:15px;line-height:1.65;color:#4d5a53}.zc202621__btns{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}.zc202621__btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:12px 18px;background:#173f5f;color:#fff!important;font-weight:650;border:1px solid #173f5f}.zc202621__btn--light{background:#fff;color:#17332e!important;border-color:rgba(23,51,46,.18)}.zc202621__section{padding:72px 0}.zc202621__grid{display:grid;gap:18px}.zc202621__card{background:#fff;border:1px solid rgba(23,33,29,.12);min-height:100%;padding:22px}.zc202621__card h3{margin:0 0 8px;font-size:19px;line-height:1.25;letter-spacing:0}.zc202621__card p{margin:0;font-size:14px;line-height:1.56;color:#56625b}.zc202621__soft{background:#f8f4ed}.zc202621__white{background:#fff}.zc202621__band{background:#1b302b;color:#fff}.zc202621__band .zc202621__title,.zc202621__band .zc202621__copy,.zc202621__band .zc202621__eyebrow{color:#fff}.zc202621__imgbox{aspect-ratio:1/1;background:#f4efe6;display:flex;align-items:center;justify-content:center;overflow:hidden}.zc202621__imgbox img{width:100%;height:100%;object-fit:contain;display:block}.zc202621__product{padding:0;overflow:hidden}.zc202621__productBody{padding:18px}.zc202621__productMeta{margin:0 0 10px;font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#76675b}.zc202621__productTitle{margin:0 0 10px;font-size:16px;line-height:1.32}.zc202621__textLink{display:inline-block;margin-top:14px;font-weight:700;color:#17211d}.zc202621__split{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:56px;align-items:center}.zc202621__scenario{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__products{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__shape{grid-template-columns:repeat(4,minmax(0,1fr))}.zc202621__trust{grid-template-columns:repeat(4,minmax(0,1fr))}@media(max-width:899px){.zc202621__wrap{width:min(100% - 28px,680px)}.zc202621__section{padding:40px 0}.zc202621__split,.zc202621__scenario,.zc202621__shape,.zc202621__trust{grid-template-columns:1fr}.zc202621__products{grid-template-columns:1fr 1fr;gap:12px}.zc202621__card{padding:18px}.zc202621__productBody{padding:14px}.zc202621__productTitle{font-size:14px}.zc202621__copy{font-size:14px}.zc202621__title{font-size:30px}.zc202621-hero{min-height:540px!important}.zc202621-hero .zc202621__title{font-size:38px!important}.zc202621__btn{width:100%}}@media(max-width:430px){.zc202621__products{grid-template-columns:1fr}.zc202621__title{font-size:28px}}\\n</style><section class=\\\"zc202621 zc202621__section zc202621__white\\\" aria-label=\\\"Shop with confidence\\\"><div class=\\\"zc202621__wrap\\\"><p class=\\\"zc202621__eyebrow\\\">Shop with confidence</p><h2 class=\\\"zc202621__title\\\">Clear paths before checkout</h2><p class=\\\"zc202621__copy\\\">Review support, shipping, returns, and product questions before choosing the right bag.</p><div class=\\\"zc202621__grid zc202621__trust\\\" style=\\\"margin-top:24px\\\"><a class=\\\"zc202621__card\\\" href=\\\"/policies/shipping-policy\\\"><h3>Shipping</h3><p>Review delivery information before ordering.</p></a><a class=\\\"zc202621__card\\\" href=\\\"/policies/refund-policy\\\"><h3>Returns</h3><p>Check return terms for your region and order type.</p></a><a class=\\\"zc202621__card\\\" href=\\\"/pages/contact-us\\\"><h3>Contact</h3><p>Questions about a bag, gift, or order path.</p></a><a class=\\\"zc202621__card\\\" href=\\\"/pages/faq\\\"><h3>FAQ</h3><p>Care, gifting, ordering, and brocade-inspired design questions.</p></a></div></div></section></div></section>\";\n  const apply = () => {\n    if (window.location.pathname !== \"/\") return;\n    const main = document.getElementById(\"MainContent\");\n    if (!main) return;\n    if (main.querySelector(\".zc202621\")) return;\n    if (!main.querySelector(\".zc-home-v2\") && !document.documentElement.innerHTML.includes(\"zc_product_proof_v2\")) return;\n    main.setAttribute(\"data-zc-runtime-fallback\", marker);\n    main.innerHTML = html;\n  };\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", apply, { once: true });\n  else apply();\n  window.addEventListener(\"pageshow\", apply);\n})();\n// End ZhuangCulture homepage runtime fallback - 2026-06-21\n\n\n// ZhuangCulture collection visual polish - 2026-06-21 - zc-collection-visual-polish-20260621\n(() => {\n  const marker = \"zc-collection-visual-polish-20260621\";\n  if (!document.body || !document.body.classList.contains(\"template-collection\")) return;\n  document.documentElement.classList.add(marker);\n  const inject = () => {\n    if (document.getElementById(marker)) return;\n    const style = document.createElement(\"style\");\n    style.id = marker;\n    style.textContent = \"\\nhtml.zc-collection-visual-polish-20260621 body.template-collection { background: #f8f4ed; }\\nhtml.zc-collection-visual-polish-20260621 .hdt-main-heading { background: #f8f4ed; }\\nhtml.zc-collection-visual-polish-20260621 .hdt-main-heading .hdt-section-spacing,\\nhtml.zc-collection-visual-polish-20260621 .hdt-main-heading .hdt-container { padding-top: 22px !important; padding-bottom: 16px !important; }\\nhtml.zc-collection-visual-polish-20260621 .hdt-collection-heading { line-height: 1.08 !important; letter-spacing: 0 !important; }\\nhtml.zc-collection-visual-polish-20260621 .hdt-main-section__collection .hdt-main-collection-content { padding-top: 18px !important; }\\nhtml.zc-collection-visual-polish-20260621 .hdt-main-section__collection .hdt-collection-products { gap: 30px 18px !important; align-items: start !important; }\\nhtml.zc-collection-visual-polish-20260621 .hdt-main-section__collection .hdt-card-product__media-wrapp.hdt-ratio { aspect-ratio: 1 / 1 !important; height: auto !important; background: #f4efe6 !important; border: 1px solid rgba(23,33,29,.08); overflow: hidden; }\\nhtml.zc-collection-visual-polish-20260621 .hdt-main-section__collection .hdt-card-product__media--main,\\nhtml.zc-collection-visual-polish-20260621 .hdt-main-section__collection .hdt-card-product__media--hover { width: 100% !important; height: 100% !important; object-fit: contain !important; object-position: center center !important; background: #f4efe6 !important; }\\nhtml.zc-collection-visual-polish-20260621 .hdt-main-section__collection .hdt-card-product { background: transparent !important; }\\n@media (max-width: 767px) {\\n  html.zc-collection-visual-polish-20260621 .hdt-main-heading .hdt-section-spacing,\\n  html.zc-collection-visual-polish-20260621 .hdt-main-heading .hdt-container { padding-top: 18px !important; padding-bottom: 12px !important; }\\n  html.zc-collection-visual-polish-20260621 .hdt-collection-heading { font-size: clamp(30px, 9vw, 42px) !important; }\\n  html.zc-collection-visual-polish-20260621 .hdt-main-section__collection .hdt-main-collection-content { padding-top: 12px !important; }\\n  html.zc-collection-visual-polish-20260621 .hdt-main-section__collection .hdt-collection-products { grid-template-columns: 1fr !important; gap: 34px !important; }\\n}\\n@media (min-width: 768px) {\\n  html.zc-collection-visual-polish-20260621 .hdt-main-section__collection .hdt-card-product__media-wrapp.hdt-ratio { border-radius: 8px; }\\n}\\n\";\n    document.head.appendChild(style);\n  };\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", inject, { once: true });\n  else inject();\n  window.addEventListener(\"pageshow\", inject);\n})();\n// End ZhuangCulture collection visual polish - 2026-06-21\n"],
  "mappings": "AACA,OAAS,GAAI,IAAK,KAAa,YAAa,SAAU,UAAW,UAAW,YAAa,WAAY,OAAQ,sBAAyB,SAGtI,IAAI,eAAiB,KAAK,mBAAmB,EAC3C,cAAgB,KAAK,kBAAkB,EACvC,mBAAqB,qBACrB,kBAAoB,oBAEtB,GAAI,eACF,IAAI,kBAAoB,eAAe,YAAc,eAAe,YAAY,MAAM,GAAG,EAAI,CAAC,MAG9F,KAAI,kBAAsB,aAAa,QAAQ,kBAAkB,EAAU,aAAa,QAAQ,kBAAkB,EAAE,MAAM,GAAG,EAAvD,CAAC,EAEzE,GAAI,cACF,IAAI,iBAAmB,cAAc,YAAc,cAAc,YAAY,MAAM,GAAG,EAAI,CAAC,MAG3F,KAAI,iBAAqB,aAAa,QAAQ,iBAAiB,EAAU,aAAa,QAAQ,iBAAiB,EAAE,MAAM,GAAG,EAAtD,CAAC,EAKvE,IAAI,gBAAkB,0BACpB,eAAiB,yBACjB,yBAA2B,SAAS,OAAO,oBAAsB,SAAW,QAC5E,wBAA0B,SAAS,OAAO,mBAAqB,SAAW,QAC1E,cAAgB,eAAiB,IAAM,GACvC,aAAe,EACf,kBAAoB,SAAU,OAAS,KAAK,OAAQ,MAAQ,KAAK,MAAO,CACtE,MAAM,EAAI,SAAS,OAAO,WAAa,UAAU,MAAM,GACrD,EAAI,EAAI,sDACV,OAAQ,MAAM,OAAU,EAAI,UAAU,MAAM,MAAM,KAAK,SAAS,CAAC,EAAE,EAAI,CACzE,EAEE,kBAAkB,OAAS,gBAC7B,kBAAkB,OAAO,cAAgB,EAAG,kBAAkB,OAAS,CAAC,EACxE,aAAa,QAAQ,mBAAoB,kBAAkB,SAAS,CAAC,GAGnE,OAAO,iBACL,kBAAkB,QAAU,CAAC,OAAO,oBACtC,OAAO,SAAS,KAAO,kBAAkB,WAAY,iBAAiB,EAEtE,OAAO,QAAQ,aAAa,CAAC,EAAG,SAAS,MAAO,kBAAkB,WAAY,CAAC,CAAC,CAAC,EAEnF,SAAS,QAAU,kBAAkB,WAAY,iBAAiB,GAIhE,iBAAiB,OAAS,eAC5B,iBAAiB,OAAO,aAAe,EAAG,iBAAiB,OAAS,CAAC,EACrE,aAAa,QAAQ,kBAAmB,iBAAiB,SAAS,CAAC,GAGjE,OAAO,gBACL,iBAAiB,QAAU,CAAC,OAAO,mBACrC,OAAO,SAAS,KAAO,kBAAkB,UAAW,gBAAgB,EAEpE,OAAO,QAAQ,aAAa,CAAC,EAAG,SAAS,MAAO,kBAAkB,UAAW,CAAC,CAAC,CAAC,GAGpF,IAAI,aAAc,iBAChB,iBAAkB,mBAClB,iBAAkB,mBAClB,WAAY,aACZ,SAAU,WACV,YAAa,cACb,yBAA0B,2BAC1B,oBAAqB,sBACrB,gBACF,MAAM,iBAAiB,UAAW,CAChC,aAAc,CACZ,MAAM,EACN,UAAU,aAAc,KAAM,KAAK,QAAQ,EAAE,EAC7C,UAAU,iBAAkB,KAAM,KAAK,QAAQ,MAAM,EACrD,UAAU,iBAAkB,IAAI,EAChC,UAAU,iBAAkB,IAAI,EAChC,UAAU,WAAY,IAAI,EAC1B,UAAU,SAAU,IAAI,EACxB,UAAU,YAAa,IAAI,EAC3B,UAAU,yBAA0B,IAAI,EACxC,UAAU,oBAAqB,IAAI,EACnC,UAAU,gBAAiB,IAAI,EAC/B,KAAK,SAAW,EAChB,KAAK,iBAAiB,QAAS,IAAM,YAAY,WAAY,KAAM,YAAY,EAAE,KAAK,IAAI,CAAC,EAC3F,KAAK,iBAAiB,UAAY,OAAU,CACtC,MAAM,KAAO,SAAS,YAAY,WAAY,KAAM,YAAY,EAAE,KAAK,IAAI,CACjF,CAAC,CACH,CACA,WAAW,oBAAqB,CAC9B,MAAO,CAAC,QAAQ,CAClB,CACA,IAAI,cAAe,CACjB,MAAO,EACT,CACA,IAAI,QAAS,CACX,MAAO,UACT,CACA,IAAI,yBAA0B,CAE5B,OAAO,KAAK,aAAe,OAAO,eAAiB,OAAO,aAC5D,CACA,IAAI,OAAQ,CACV,OAAO,KAAK,aAAe,cAAgB,YAC7C,CACA,IAAI,YAAa,CACf,OAAO,KAAK,aAAe,mBAAqB,iBAClD,CACA,IAAI,OAAQ,CACV,OAAO,KAAK,aAAe,kBAAoB,gBACjD,CACA,IAAI,kBAAmB,CACrB,OAAO,KAAK,aAAe,yBAA2B,uBACxD,CACA,IAAI,QAAS,CACX,OAAO,KAAK,aAAa,QAAQ,CACnC,CACA,yBAAyB,KAAM,SAAU,SAAU,CAC7C,WAAa,UAAa,WAAa,MAAQ,WAAa,QAChE,YAAY,iBAAkB,KAAM,kBAAkB,EAAE,KAAK,KAAM,QAAQ,EAC3E,MAAM,yBAAyB,KAAM,SAAU,QAAQ,EACzD,CACA,mBAAoB,CAElB,GADA,MAAM,kBAAkB,EACpB,KAAK,MAAM,QAAQ,UAAU,aAAc,IAAI,CAAC,EAAI,GAAI,CAC1D,GAAI,KAAK,aAAa,gBAAgB,EACpC,OAEF,KAAK,aAAa,SAAU,KAAK,gBAAgB,CACnD,CACF,CACF,CACA,aAAe,IAAI,QACnB,iBAAmB,IAAI,QACvB,iBAAmB,IAAI,QACvB,iBAAmB,IAAI,QACvB,WAAa,IAAI,QACjB,SAAW,IAAI,QACf,YAAc,IAAI,QAClB,yBAA2B,IAAI,QAC/B,gBAAkB,IAAI,QACtB,oBAAsB,IAAI,QAC1B,mBAAqB,SAAU,MAAO,CACpC,GAAI,KAAK,aAAa,gBAAgB,EAAG,OACzC,MAAM,KAAO,SAAS,OAAO,QAAQ,KAAK,aAAe,MAAQ,IAAI,IAAI,KAAK,EAAE,EAC9E,KAAO,SAAS,OAAO,QAAQ,KAAK,aAAe,MAAQ,IAAI,IAAI,KAAK,EAAE,EACxE,MAAM,KAAK,kBAAkB,YAAY,SAAS,YAAY,EAAE,yBAAyB,IAAI,CAAC,EAC9F,OACF,KAAK,iBAAiB,YAAc,KACpC,KAAK,aAAa,cAAc,IAAI,EAExC,EACA,mBAAqB,SAAU,QAAS,CAEtC,IAAI,OAAO,KAAK,MAAM,aAAa,UAAU,aAAc,IAAI,CAAC,IAAI,EAAE,QAAQ,KAAO,CACnF,IAAI,aAAa,SAAU,OAAO,CACpC,CAAC,EAED,SAAS,cAAc,IAAI,YAAY,UAAU,KAAK,MAAM,UAAW,CACrE,QAAS,GACT,OAAQ,MACV,CAAC,CAAC,EACG,OAAO,iBAAiB,SAAS,QAAU,kBAAkB,WAAY,iBAAiB,EACjG,EACA,aAAe,SAAU,EAAG,CACtB,KAAK,QAAU,MAEjB,YAAY,SAAU,KAAM,UAAU,EAAE,KAAK,IAAI,EACxC,KAAK,SAAW,QAErB,CAAC,KAAK,cAAgB,SAAS,OAAO,mBACxC,YAAY,oBAAqB,KAAM,qBAAqB,EAAE,KAAK,IAAI,EAEvE,OAAO,SAAS,KAAO,YAAY,gBAAiB,KAAM,iBAAiB,EAAE,KAAK,IAAI,EAIxF,YAAY,YAAa,KAAM,aAAa,EAAE,KAAK,IAAI,CAE3D,EACA,WAAa,SAAU,EAAG,CACxB,GAAI,gBAAkB,KAAK,cAAgB,eAAiB,CAAC,KAAK,aAEhE,KAAK,aAAa,YAAa,EAAI,EACnC,MAAM,KAAK,aAAe,gBAAkB,eAAgB,CAC1D,OAAQ,OACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,WAAY,UAAU,aAAc,IAAI,EACxC,eAAgB,UAAU,iBAAkB,IAAI,EAChD,OAAQ,KACV,CAAC,CACH,CAAC,EACA,KAAM,UACE,SAAS,KAAK,CACtB,EACA,KAAM,MAAS,CACd,GAAI,KAAK,QAAU,UAAW,CAC5B,QAAQ,MAAM,KAAK,SAAW,cAAc,EAC5C,MACF,CACG,KAAK,eACN,kBAAoB,KAAK,MAAM,KAAK,SAAS,UAAU,KAAK,EAAE,aACzD,MAAM,QAAQ,iBAAiB,IAClC,kBAAoB,kBAAkB,MAAM,GAAG,IAG9C,KAAK,eACR,iBAAmB,KAAK,MAAM,KAAK,SAAS,UAAU,KAAK,EAAE,aACxD,MAAM,QAAQ,gBAAgB,IACjC,iBAAmB,iBAAiB,MAAM,GAAG,GAE/C,YAAY,oBAAqB,KAAM,qBAAqB,EAAE,KAAK,IAAI,GAEzE,YAAY,yBAA0B,KAAM,0BAA0B,EAAE,KAAK,KAAM,KAAK,gBAAgB,CAC1G,CAAC,EACA,MAAM,SAAU,MAAO,CACtB,QAAQ,IAAI,UAAY,KAAK,CAC/B,CAAC,EACA,QAAQ,IAAM,CACb,KAAK,aAAa,YAAa,EAAK,CACtC,CAAC,MAEE,CAKH,GAFA,KAAK,MAAM,QAAQ,UAAU,aAAc,IAAI,CAAC,EAE5C,KAAK,MAAM,OAAS,KAAK,MAAO,CAElC,IAAI,YAAc,KAAK,MAAM,OAAO,KAAK,MAAO,CAAC,EAEjD,IAAI,OAAO,KAAK,MAAM,aAAa,YAAY,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAO,CACpE,IAAI,aAAa,SAAU,KAAK,CAClC,CAAC,CACH,CACK,KAAK,cAAc,YAAY,oBAAqB,KAAM,qBAAqB,EAAE,KAAK,IAAI,EAC/F,YAAY,yBAA0B,KAAM,0BAA0B,EAAE,KAAK,KAAM,KAAK,gBAAgB,EACxG,aAAa,QAAQ,KAAK,WAAY,KAAK,MAAM,SAAS,CAAC,CAC7D,CACF,EACA,cAAgB,SAAU,EAAG,CAEvB,gBAAkB,KAAK,cAAgB,eAAiB,CAAC,KAAK,cAEhE,KAAK,aAAa,YAAa,EAAI,EACnC,MAAM,KAAK,aAAe,gBAAkB,eAAgB,CAC1D,OAAQ,SACR,QAAS,CACP,eAAgB,kBAClB,EACA,KAAM,KAAK,UAAU,CACnB,WAAY,UAAU,aAAc,IAAI,EACxC,eAAgB,UAAU,iBAAkB,IAAI,EAChD,OAAQ,MACR,QAAS,QACX,CAAC,CACH,CAAC,EACA,KAAM,UACE,SAAS,KAAK,CACtB,EACA,KAAM,MAAS,CACd,GAAI,KAAK,QAAU,UAAW,CAC5B,QAAQ,MAAM,KAAK,SAAW,cAAc,EAC5C,MACF,CACA,kBAAoB,KAAK,MAAM,KAAK,SAAS,UAAU,KAAK,EAAE,aACzD,MAAM,QAAQ,iBAAiB,IAClC,kBAAoB,kBAAkB,MAAM,GAAG,GAEjD,YAAY,yBAA0B,KAAM,0BAA0B,EAAE,KAAK,KAAM,KAAK,CAC1F,CAAC,EACA,MAAM,SAAU,MAAO,CACtB,QAAQ,IAAI,UAAY,KAAK,CAC/B,CAAC,EACA,QAAQ,IAAM,CACb,KAAK,aAAa,YAAa,EAAK,CACtC,CAAC,IAGD,KAAK,MAAM,OAAO,KAAK,MAAM,QAAQ,UAAU,aAAc,IAAI,CAAC,EAAG,CAAC,EACtE,aAAa,QAAQ,KAAK,WAAY,KAAK,MAAM,SAAS,CAAC,EAE3D,YAAY,yBAA0B,KAAM,0BAA0B,EAAE,KAAK,KAAM,KAAK,EAE5F,EACA,2BAA6B,SAAU,OAAQ,CAEzC,KAAK,aAAa,QAAQ,GAAK,UAAY,KAAK,aAAa,gBAAgB,GAC3E,KAAK,aACP,KAAK,QAAQ,mBAAmB,EAAE,OAAO,EAEzC,IAAI,qBAAqB,UAAU,aAAc,IAAI,CAAC,EAAE,EAAE,QAAQ,MAAQ,CACxE,KAAK,OAAO,CACd,CAAC,EAEH,YAAY,iBAAkB,KAAM,kBAAkB,EAAE,KAAK,KAAM,MAAM,EACrE,KAAK,MAAM,QAAU,IACvB,KAAK,eAAe,GAAG,gBAAgB,MAAM,EACzC,KAAK,0BAAyB,OAAO,SAAS,KAAO,YAAY,gBAAiB,KAAM,iBAAiB,EAAE,KAAK,IAAI,MAI1H,YAAY,iBAAkB,KAAM,kBAAkB,EAAE,KAAK,KAAM,MAAM,EAErE,KAAK,0BAAyB,OAAO,SAAS,KAAO,YAAY,gBAAiB,KAAM,iBAAiB,EAAE,KAAK,IAAI,GAE5H,EACA,sBAAwB,SAAU,MAAO,CACnC,CAAC,SAAS,OAAO,oBAAsB,KAAK,0BAEhD,IAAI,oBAAoB,EAAE,QAAS,SAAW,CAC5C,QAAQ,aAAa,SAAU,EAAE,CACnC,CAAC,EACD,KAAK,eAAe,EAAE,aAAa,OAAQ,EAAE,EAC7C,MAAM,kBAAkB,UAAW,gBAAgB,EAAI,+BAA+B,EACnF,KAAM,UAAa,SAAS,KAAK,CAAC,EAClC,KAAM,MAAS,CACd,MAAM,KAAO,SAAS,cAAc,KAAK,EACzC,KAAK,UAAY,KACjB,MAAM,KAAO,KAAK,cAAc,mBAAmB,EAE/C,MAAQ,KAAK,UAAU,KAAK,EAAE,SAEhC,GAAG,mBAAmB,EAAE,UAAY,KAAK,UAE7C,CAAC,EACA,MAAO,GAAM,CACZ,QAAQ,MAAM,CAAC,CACjB,CAAC,EACL,EACA,IAAI,WAAY,aAChB,MAAM,iBAAiB,WAAY,CACjC,aAAc,CACZ,MAAM,EACN,UAAU,WAAY,IAAI,EAC1B,KAAK,SAAW,EAChB,KAAK,iBAAiB,QAAS,YAAY,WAAY,KAAM,YAAY,CAAC,EAC1E,KAAK,iBAAiB,UAAY,OAAU,CACtC,MAAM,KAAO,SAAS,YAAY,WAAY,KAAM,YAAY,EAAE,KAAK,IAAI,CACjF,CAAC,CACH,CACA,IAAI,MAAO,CACT,OAAO,KAAK,aAAa,OAAO,CAClC,CACA,IAAI,YAAa,CACf,OAAO,KAAK,MAAQ,UAAY,kBAAoB,kBACtD,CACA,IAAI,MAAM,MAAO,CACf,KAAK,MAAQ,UAAY,iBAAmB,MAAQ,kBAAoB,KAC1E,CACF,CACA,WAAa,IAAI,QACjB,aAAe,UAAY,CACzB,aAAa,WAAW,KAAK,UAAU,EAEvC,IAAI,OAAO,KAAK,IAAI,kBAAkB,EAAE,QAAQ,KAAO,CACrD,IAAI,aAAa,SAAU,KAAK,CAClC,CAAC,EAED,SAAS,cAAc,IAAI,YAAY,UAAU,KAAK,IAAI,UAAW,CACnE,QAAS,GACT,OAAQ,MACV,CAAC,CAAC,EACF,KAAK,MAAQ,CAAC,EACd,KAAK,eAAe,GAAG,gBAAgB,MAAM,EACzC,GAAG,kCAAkC,IACvC,GAAG,kCAAkC,EAAE,UAAY,GAEvD,EACA,eAAe,OAAO,gBAAiB,QAAQ,EAI/C,MAAM,sBAAsB,WAAY,CACtC,aAAc,CACZ,MAAM,EACN,KAAK,YAAc,KAAK,MAAM,OAC9B,SAAS,iBAAiB,UAAU,KAAK,MAAM,UAAY,GAAM,CAE/D,KAAK,YAAc,KAAK,MAAM,MAChC,CAAC,CACH,CACA,IAAI,cAAe,CACjB,MAAO,EACT,CACA,IAAI,OAAQ,CACV,OAAO,KAAK,aAAe,kBAAoB,gBACjD,CACA,IAAI,QAAS,CACX,OAAO,KAAK,aAAe,WAAa,SAC1C,CACF,CAEA,MAAM,qBAAqB,WAAY,CACrC,aAAc,CACZ,MAAM,EACN,GAAG,IAAK,IAAI,EAAE,KAAO,kBAAkB,KAAK,OAAQ,KAAK,KAAK,EAE9D,SAAS,iBAAiB,UAAU,KAAK,MAAM,UAAY,GAAM,CAC/D,GAAG,IAAK,IAAI,EAAE,KAAO,kBAAkB,KAAK,OAAQ,KAAK,KAAK,CAChE,CAAC,CACH,CACA,IAAI,cAAe,CACjB,MAAO,EACT,CACA,IAAI,OAAQ,CACV,OAAO,KAAK,aAAe,kBAAoB,gBACjD,CACA,IAAI,QAAS,CACX,OAAO,KAAK,aAAe,WAAa,SAC1C,CACF,CACA,eAAe,OAAO,eAAgB,QAAQ,EAC9C,eAAe,OAAO,qBAAsB,aAAa,EACzD,eAAe,OAAO,iBAAkB,YAAY,EAGpD,MAAM,gBAAgB,QAAS,CAC7B,IAAI,cAAe,CACjB,MAAO,EACT,CACA,IAAI,QAAS,CACX,MAAO,SACT,CACF,CAEA,MAAM,qBAAqB,aAAc,CACvC,IAAI,cAAe,CACjB,MAAO,EACT,CACF,CAEA,MAAM,oBAAoB,YAAa,CACrC,IAAI,cAAe,CACjB,MAAO,EACT,CACF,CACA,eAAe,OAAO,cAAe,OAAO,EAC5C,eAAe,OAAO,oBAAqB,YAAY,EACvD,eAAe,OAAO,gBAAiB,WAAW,EAKlD,MAAM,+BAA+B,WAAY,CAC/C,aAAc,CACZ,MAAM,CACR,CAEA,mBAAoB,CAClB,MAAM,mBAAqB,CAAC,QAAS,WAAa,CAC3C,QAAQ,CAAC,EAAE,iBAChB,SAAS,UAAU,IAAI,EAEvB,MAAM,KAAK,QAAQ,GAAG,EACnB,KAAM,UAAa,SAAS,KAAK,CAAC,EAClC,KAAM,MAAS,CACd,MAAM,KAAO,SAAS,cAAc,KAAK,EACzC,KAAK,UAAY,KACjB,MAAM,gBAAkB,KAAK,cAAc,yBAAyB,EAEhE,iBAAmB,gBAAgB,UAAU,KAAK,EAAE,SACtD,KAAK,UAAY,gBAAgB,WAEnC,SAAS,cAAc,IAAI,YAAY,iBAAiB,CAAC,CAC3D,CAAC,EACA,MAAO,GAAM,CACZ,QAAQ,MAAM,CAAC,CACjB,CAAC,EACL,EAEA,IAAI,qBAAqB,mBAAmB,KAAK,IAAI,EAAG,CAAE,WAAY,mBAAoB,CAAC,EAAE,QAAQ,IAAI,CAC3G,CACF,CAEA,eAAe,OAAO,0BAA2B,sBAAsB,EAMvE,MAAM,wBAAwB,WAAY,CACxC,aAAc,CACZ,MAAM,CACR,CAEA,mBAAoB,CAClB,MAAM,mBAAqB,CAAC,QAAS,WAAa,CAChD,GAAI,CAAC,QAAQ,CAAC,EAAE,eAAgB,OAChC,SAAS,UAAU,IAAI,EACvB,IAAI,eAAiB,aAAa,QAAQ,oBAAoB,EAC1D,MAAQ,KAAK,QAAQ,GAEzB,GAAI,iBAAmB,KAAM,CAC3B,IAAI,SAAW,eAAe,MAAM,GAAG,EACnC,IAAM,KAAK,QAAQ,IAAI,QAAQ,KAAM,QAAU,SAAS,KAAK,aAAa,CAAC,EAC/E,MAAM,GAAG,EACN,KAAM,UAAa,SAAS,KAAK,CAAC,EAClC,KAAM,MAAS,CACd,MAAM,KAAO,SAAS,cAAc,KAAK,EACzC,KAAK,UAAY,KACjB,MAAM,SAAW,KAAK,cAAc,kBAAkB,EAElD,UAAY,SAAS,UAAU,KAAK,EAAE,SACxC,KAAK,UAAY,SAAS,WAE5B,SAAS,cAAc,IAAI,YAAY,iBAAiB,CAAC,CAC3D,CAAC,EACA,MAAO,GAAM,CACZ,QAAQ,MAAM,CAAC,CACjB,CAAC,CAEL,CACA,IAAI,cAAgB,iBAAmB,KAAO,eAAe,MAAM,GAAG,EAAI,IAAI,MAC9E,GAAI,CAAC,cAAc,SAAS,MAAQ,EAAE,EAAG,CAIvC,IAAS,QAAT,SAAiB,MAAO,MAAO,CAC7B,IAAI,SAAW,MAAM,MAAM,EAC3B,gBAAS,QAAQ,KAAK,EACf,QACT,EAPI,cAAc,QAAU,IAC1B,cAAc,IAAI,EAOpB,cAAgB,QAAQ,MAAO,aAAa,EAC5C,cAAgB,cAAc,SAAS,EACvC,aAAa,QAAQ,qBAAsB,aAAa,CAC1D,CACF,EAEA,IAAI,qBAAqB,mBAAmB,KAAK,IAAI,EAAG,CAAE,WAAY,mBAAoB,CAAC,EAAE,QAAQ,IAAI,CAC3G,CACF,CAEA,eAAe,OAAO,mBAAoB,eAAe,EAMzD,MAAM,yBAAyB,MAAO,CACpC,aAAc,CAGZ,GAFA,MAAM,EAEF,CAAC,KAAK,aAAa,SAAS,EAAG,OACnC,KAAK,cAAgB,CAAC,EACtB,KAAK,wBAA0B,GAAG,wBAAyB,IAAI,EAC/D,KAAK,MAAQ,GAAG,uBAAwB,IAAI,EAC5C,KAAK,iBAAmB,KAAK,aAAa,yBAAyB,GAAK,wBACxE,KAAK,6BAA+B,IAAI,mBAAmB,EAC3D,KAAK,SAAW,GAAG,yBAA0B,IAAI,EACjD,KAAK,UAAY,GAAG,uBAAwB,IAAI,EAChD,KAAK,YAAc,GAAG,6BAA8B,IAAI,EACxD,KAAK,YAAc,GAAG,6BAA8B,IAAI,EACxD,KAAK,YAAc,GAAG,gBAAiB,IAAI,EAC3C,KAAK,KAAO,KAAK,aAAa,aAAa,MAAM,EACjD,KAAK,OAAS,GACd,KAAK,iBAAmB,IAAI,gBAC5B,KAAK,WAAa,GACd,KAAK,OACP,KAAK,MAAM,iBACT,QACA,SAAU,OAAU,CAClB,KAAK,SAAS,KAAK,CACrB,EAAG,GAAG,EAAE,KAAK,IAAI,CACnB,EAGF,MAAM,SAAW,IAAI,SAAS,KAAK,MAAM,IAAI,EAC7C,KAAK,OAAS,GACd,SAAW,CAAC,IAAK,KAAK,IAAK,SAAU,CACnC,GAAI,MAAQ,IAAK,MACjB,KAAK,QAAU,GAAG,GAAG,IAAI,KAAK,GAChC,CAEA,KAAK,oBAAoB,CAC3B,CAEA,qBAAsB,CACpB,KAAK,MAAM,KAAK,iBAAiB,SAAU,KAAK,aAAa,KAAK,IAAI,CAAC,EAEvE,KAAK,MAAM,iBAAiB,QAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,EAC5D,KAAK,iBAAiB,WAAY,KAAK,WAAW,KAAK,IAAI,CAAC,EAC5D,KAAK,iBAAiB,QAAS,KAAK,QAAQ,KAAK,IAAI,CAAC,CAExD,CAEA,UAAW,CACT,OAAO,KAAK,MAAM,MAAM,KAAK,CAC/B,CAEA,UAAW,CACT,MAAM,cAAgB,KAAK,SAAS,EAapC,GAZI,CAAC,KAAK,YAAe,cAAc,WAAW,KAAK,UAAU,EAOjE,KAAK,oBAAoB,KAAK,WAAY,aAAa,EAEvD,KAAK,WAAa,cAClB,KAAK,aAAa,aAAa,OAAQ,KAAK,KAAK,QAAQ,kBAAmB,aAAe,KAAK,UAAU,CAAC,EAEvG,CAAC,KAAK,WAAW,OAAQ,CAC3B,KAAK,MAAM,EAAI,EACf,MACF,CACA,KAAK,iBAAiB,KAAK,UAAU,CACvC,CAEA,aAAa,MAAO,EACd,CAAC,KAAK,SAAS,EAAE,QAAU,KAAK,cAAc,0BAA0B,IAAG,MAAM,eAAe,CACtG,CAEA,SAAU,CACR,MAAM,kBAAoB,KAAK,SAAS,EACnC,kBAAkB,SACnB,KAAK,aAAe,kBAEtB,KAAK,SAAS,EACL,KAAK,aAAa,SAAS,IAAM,OAC1C,KAAK,WAAW,EAEhB,KAAK,iBAAiB,KAAK,UAAU,EAEzC,CAEA,YAAa,CACX,WAAW,IAAM,CACV,KAAK,SAAS,SAAS,aAAa,GAAG,KAAK,MAAM,CACzD,CAAC,CACH,CAEA,QAAQ,MAAO,CACR,KAAK,SAAS,EAAE,QAAQ,KAAK,MAAM,EAAI,EAC5C,MAAM,eAAe,CAavB,CAQA,oBAAoB,aAAc,QAAS,CACzC,MAAM,qBAAuB,KAAK,cAAc,0CAA0C,EACpF,kBAAoB,sBAAsB,UAChD,GAAI,kBAAmB,CACrB,GAAI,kBAAkB,MAAM,IAAI,OAAO,aAAc,GAAG,CAAC,EAAE,OAAS,EAElE,OAEF,MAAM,cAAgB,kBAAkB,QAAQ,aAAc,OAAO,EACrE,qBAAqB,UAAY,aACnC,CACF,CAEA,iBAAiB,WAAY,CAC3B,MAAM,SAAW,WAAW,QAAQ,IAAK,GAAG,EAAE,YAAY,EAG1D,GAFA,KAAK,0BAA0B,EAE3B,KAAK,cAAc,QAAQ,EAAG,CAChC,KAAK,oBAAoB,KAAK,cAAc,QAAQ,CAAC,EACrD,MACF,CAEA,MAAM,GAAG,SAAS,OAAO,qBAAqB,MAAM,mBAAmB,UAAU,CAAC,IAAI,KAAK,MAAM,cAAc,KAAK,gBAAgB,GAAI,CACtI,OAAQ,KAAK,iBAAiB,MAChC,CAAC,EACE,KAAM,UAAa,CAClB,GAAI,CAAC,SAAS,GAAI,CAChB,IAAI,MAAQ,IAAI,MAAM,SAAS,MAAM,EACrC,WAAK,MAAM,EACL,KACR,CAEA,OAAO,SAAS,KAAK,CACvB,CAAC,EACA,KAAM,MAAS,CACd,MAAM,cAAgB,IAAI,UAAU,EACjC,gBAAgB,KAAM,WAAW,EACjC,cAAc,oBAAsB,KAAK,gBAAgB,EAAE,UAE9D,KAAK,6BAA6B,QAAS,0BAA6B,CACtE,KAAK,cAAc,QAAQ,EAAI,aACjC,CAAC,EACD,KAAK,oBAAoB,aAAa,CACxC,CAAC,EACA,MAAO,OAAU,CAChB,GAAI,OAAO,OAAS,GAIpB,WAAK,MAAM,EACL,KACR,CAAC,CACL,CAEA,2BAA4B,CAC1B,KAAK,YAAY,MAAM,QAAU,iBACjC,KAAK,YAAY,MAAM,QAAU,kBACjC,KAAK,SAAS,UAAU,OAAO,YAAY,EAE3C,KAAK,aAAa,UAAW,EAAI,CACnC,CAEA,oBAAoB,cAAe,CACjC,KAAK,wBAAwB,UAAY,cACzC,KAAK,aAAa,UAAW,EAAI,EAEjC,KAAK,qBAAqB,EAC1B,KAAK,WAAW,EAChB,SAAS,cAAc,IAAI,YAAY,iBAAiB,CAAC,CAC3D,CAEA,sBAAuB,CACrB,KAAK,gBAAgB,SAAS,CAChC,CAEA,YAAa,CAEX,KAAK,MAAM,aAAa,gBAAiB,EAAI,EAC7C,KAAK,SAAS,UAAU,IAAI,YAAY,EACxC,KAAK,OAAS,EAChB,CAEA,MAAM,gBAAkB,GAAO,CAC7B,KAAK,aAAa,eAAe,EACjC,KAAK,OAAS,EAChB,CAEA,aAAa,gBAAkB,GAAO,CAChC,kBACF,KAAK,MAAM,MAAQ,GACnB,KAAK,gBAAgB,SAAS,EAC9B,KAAK,YAAY,MAAM,QAAU,kBACjC,KAAK,YAAY,MAAM,QAAU,iBACjC,KAAK,wBAAwB,UAAY,IAE3C,MAAM,SAAW,KAAK,cAAc,wBAAwB,EAExD,UAAU,SAAS,aAAa,gBAAiB,EAAK,EAE1D,KAAK,MAAM,aAAa,wBAAyB,EAAE,EACnD,KAAK,gBAAgB,SAAS,EAE9B,KAAK,MAAM,aAAa,gBAAiB,EAAK,EAC9C,KAAK,iBAAmB,GACxB,KAAK,wBAAwB,gBAAgB,OAAO,CACtD,CACF,CAEA,eAAe,OAAO,wBAAyB,gBAAgB,EAG/D,MAAM,cAAgB,IAAM,CAC1B,GAAI,OAAO,WAAa,IACtB,OAEF,IAAI,UAAY,IAAI,mBAAmB,EAClC,WAGL,UAAU,QAAS,IAAO,CACxB,GAAK,GAAG,QAAQ,QAGd,GAAG,YAAc,IAAM,CACrB,GAAG,GAAG,QAAQ,OAAO,EAAE,UAAU,IAAI,WAAW,EAChD,GAAG,GAAG,QAAQ,OAAO,EAClB,QAAQ,sBAAsB,EAC9B,UAAU,IAAI,YAAY,CAC/B,EACA,GAAG,aAAe,IAAM,CACtB,GAAG,GAAG,QAAQ,OAAO,EAAE,UAAU,OAAO,WAAW,EACnD,GAAG,GAAG,QAAQ,OAAO,EAClB,QAAQ,sBAAsB,EAC9B,UAAU,OAAO,YAAY,CAClC,MAbA,OAeJ,CAAC,CACH,EACA,cAAc,EAKd,MAAM,kBAAkB,WAAY,CAClC,aAAc,CACZ,MAAM,EACN,KAAK,OAAS,KAAK,MAAM,KAAK,aAAa,QAAQ,CAAC,EAChD,SAAO,WAAa,KAAO,KAAK,OAAO,gBAC3C,KAAK,eAAiB,EACtB,KAAK,gBAAkB,EACvB,KAAK,YAAc,KAAK,cAAc,iBAAiB,EACvD,KAAK,iBAAiB,QAAS,KAAK,MAAM,KAAK,IAAI,CAAC,EACpD,OAAO,iBAAiB,SAAU,KAAK,UAAU,KAAK,IAAI,CAAC,EAC7D,CACA,OAAQ,CACN,SAAS,KAAK,UAAY,EAC1B,SAAS,gBAAgB,UAAY,CACvC,CAEA,WAAY,CACV,IAAIA,MAAO,KACP,KAAK,gBAAkB,aAAa,KAAK,cAAc,EAC3D,KAAK,eAAiB,WAAW,UAAY,CACvC,OAAO,QAAUA,MAAK,OAAO,UAC/BA,MAAK,UAAU,IAAI,UAAU,EAE7BA,MAAK,UAAU,OAAO,UAAU,CAEpC,EAAG,EAAE,EAEA,KAAK,cAEN,KAAK,iBAAmB,aAAa,KAAK,eAAe,EAE7D,KAAK,gBAAkB,WAAW,UAAY,CAC5C,IAAI,WAAa,OAAO,QACtB,UAAY,SAAS,KAAK,aAC1B,UAAY,OAAO,YACnB,cAAgB,YAAc,UAAY,WAC1C,QAAU,cAAgB,IAC5BA,MAAK,YAAY,MAAM,YAAY,mBAAoB,QAAU,KAAK,CACxE,EAAG,CAAC,EACN,CACF,CAEA,eAAe,OAAO,cAAe,SAAS,EAM9C,MAAM,qBAAqB,WAAY,CACrC,aAAc,CACZ,MAAM,EACN,IAAI,OAAS,KAAK,MAAM,KAAK,aAAa,QAAQ,CAAC,EACnD,KAAK,IAAM,OAAO,IAClB,KAAK,IAAM,OAAO,IAClB,KAAK,SAAW,OAAO,SACvB,KAAK,OAAS,KAAK,MAAM,KAAK,OAAO,GAAK,KAAK,IAAM,KAAK,IAAM,EAAE,EAAI,KAAK,IAC3E,KAAK,MAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EACzE,KAAK,WAAa,CAAC,KAAM,KAAM,IAAI,EACnC,KAAK,EAAI,GACT,KAAK,EAAI,GACT,KAAK,EAAI,GACT,KAAK,YAAY,EACjB,YAAY,KAAK,YAAY,KAAK,IAAI,EAAG,KAAK,QAAQ,CACxD,CAEA,aAAc,CACZ,GAAI,KAAK,EAAI,KAAK,MAAM,KAAK,OAAO,EAAI,KAAK,MAAM,MAAM,EAAG,KAAK,EAAI,KAAK,MAAM,KAAK,CAAC,EAAG,KAAK,OAAS,SAAS,KAAK,MAAM,EAAI,SAAS,KAAK,CAAC,EAAG,KAAK,KAAO,KAAK,OAAQ,CACxK,KAAK,EAAI,KAAK,MAAM,KAAK,OAAO,EAAI,KAAK,WAAW,MAAM,EAC1D,IAAI,EAAI,KAAK,WAAW,KAAK,CAAC,EAC9B,KAAK,QAAU,CACjB,EACI,KAAK,OAAS,KAAK,KAAO,KAAK,OAAS,KAAK,OAC/C,KAAK,OAAS,KAAK,MAAM,KAAK,OAAO,GAAK,KAAK,IAAM,KAAK,IAAM,EAAE,EAAI,KAAK,KAE7E,KAAK,UAAY,SAAS,KAAK,MAAM,CACvC,CACF,CAEA,eAAe,OAAO,gBAAiB,YAAY,EAMnD,MAAM,gCAAgC,WAAY,CAEhD,aAAc,CACZ,MAAM,EACF,SAAO,WAAa,MAGxB,KAAK,eAAe,CACtB,CACA,gBAAiB,CACf,IAAIA,MAAO,KACX,MAAM,GAAKA,MAAK,cAAc,yBAAyB,EACjD,SAAWA,MAAK,cAAc,uBAAuB,EACrD,UAAYA,MAAK,cAAc,kBAAkB,EACjD,UAAY,SAAS,cAAc,qBAAqB,EAC9D,IAAI,SAAW,EACX,CAAC,GAAK,CAAC,SAAW,CAAC,YACnB,YACF,UAAY,UAAU,cAGxBA,MAAK,cAAc,yBAAyB,EAAE,MAAM,OAAS,GAAG,SAAW,EAAE,MAC7E,SAAS,iBAAiB,QAAS,IAAM,CACvC,GAAG,UAAU,IAAI,UAAU,CAC7B,CAAC,EACD,UAAU,iBAAiB,QAAS,IAAM,CACxC,GAAG,UAAU,OAAO,UAAU,CAChC,CAAC,EACH,CACF,CACA,eAAe,OAAO,4BAA6B,uBAAuB,EAU1E,SAAS,mBAAmB,KAAM,CAChC,OAAO,KAAK,QAAQ,KAAK,GAAG,CAC9B,CACA,SAAS,UAAU,KAAK,MAAM,KAAK,MAAO,CACxC,IAAI,QAAU,GACd,GAAI,MAAQ,MAAO,CACjB,IAAI,KAAO,IAAI,KACf,KAAK,QAAQ,KAAK,QAAQ,GAAK,KAAO,KAAK,GAAG,GAAG,GAAG,IAAO,MAAM,GAAG,GAAG,IAAK,EAC5E,QAAU,aAAe,KAAK,SAAS,CACzC,CACA,SAAS,OAAS,mBAAmB,IAAI,EAAI,KAAO,OAAS,IAAO,QAAU,UAChF,CACA,SAAS,UAAU,KAAM,CAGvB,QAFI,OAAS,mBAAmB,IAAI,EAAI,IACpC,GAAK,SAAS,OAAO,MAAM,GAAG,EAC1B,EAAE,EAAE,EAAI,GAAG,OAAO,IAAK,CAE7B,QADI,EAAI,GAAG,CAAC,EACL,EAAE,OAAO,CAAC,GAAG,KAAK,EAAI,EAAE,UAAU,EAAE,EAAE,MAAM,EACnD,GAAI,EAAE,QAAQ,MAAM,GAAK,EAAG,OAAO,EAAE,UAAU,OAAO,OAAO,EAAE,MAAM,CACvE,CACA,OAAO,IACT,CACA,SAAS,YAAY,KAAM,CACzB,SAAS,OAAS,mBAAmB,IAAI,EAAE,uBAC7C,CAEA,MAAM,mBAAmB,WAAY,CACnC,aAAc,CACZ,MAAM,EACN,KAAK,QAAU,KAAK,MAAM,KAAK,aAAa,SAAS,CAAC,EACtD,KAAK,QAAQ,YAAc,iBAC3B,KAAK,QAAQ,OAAS,KAAK,cAAc,gBAAgB,EACzD,KAAK,iBAAoB,KAAK,QAAQ,MAAQ,IAC9C,KAAK,UAAY,KAAK,QAAQ,OAAO,cAAc,6BAA6B,EAChF,KAAK,WAAa,KAAK,QAAQ,OAAO,cAAc,8BAA8B,EAClF,KAAK,iBAAiB,IAAI,EAC1B,IAAIA,MAAO,KACX,KAAK,WAAW,iBAAiB,QAAS,KAAK,aAAa,KAAK,IAAI,CAAC,EACtE,KAAK,YAAY,iBAAiB,QAAS,KAAK,cAAc,KAAK,IAAI,CAAC,EACpE,QAAQ,aACV,SAAS,iBAAiB,yBAA2B,OAAU,CACvC,MAAM,OAAO,UAAU,SAAS,aAAa,GAEnEA,MAAK,kBAAkB,CACzB,CAAC,EACD,SAAS,iBAAiB,2BAA6B,OAAU,CACzC,MAAM,OAAO,UAAU,SAAS,aAAa,GAEnEA,MAAK,kBAAkB,CACzB,CAAC,EAEL,CACA,cAAe,CACT,KAAK,kBACP,UAAU,KAAK,QAAQ,YAAa,WAAY,SAAS,KAAK,QAAQ,QAAQ,CAAC,EAEjF,OAAO,QAAQ,gBAAgB,mBAAmB,GAAM,KAAK,kBAAkB,KAAK,IAAI,CAAC,CAC3F,CAEA,eAAgB,CACV,KAAK,kBACP,UAAU,KAAK,QAAQ,YAAa,WAAY,SAAS,KAAK,QAAQ,QAAQ,CAAC,EAEjF,OAAO,QAAQ,gBAAgB,mBAAmB,GAAO,KAAK,kBAAkB,KAAK,IAAI,CAAC,CAC5F,CAEA,mBAAoB,CAClB,KAAK,QAAQ,OAAO,aAAa,OAAQ,EAAE,EAC3C,GAAG,MAAM,EAAE,UAAU,OAAO,WAAW,CACzC,CAEA,mBAAoB,CAClB,KAAK,QAAQ,OAAO,gBAAgB,MAAM,CAC5C,CAEA,kBAAmB,CACjB,MAAM,iBAAmB,OAAO,QAAQ,gBAAgB,iBAAiB,EACnE,oBAAsB,OAAO,QAAQ,gBAAgB,mBAAmB,GAEzE,CAAC,kBAAoB,sBAAwB,kBAAqB,KAAK,oBACrE,QAAQ,YACX,KAAK,kBAAkB,EAG7B,CAEA,kBAAmB,CAEjB,IAAIA,MAAO,KACP,KAAK,QAAQ,OAAO,QAAU,IAClC,KAAK,QAAQ,SAAW,KAAK,QAAQ,UAAY,GACjD,KAAK,iBAAoB,KAAK,QAAQ,MAAQ,IAC1C,YAAU,KAAK,QAAQ,WAAW,GAAK,YAAc,KAAK,QAAQ,OAAO,aAAa,MAAM,IAAM,QAClG,OAAO,QAAQ,gBACjBA,MAAK,iBAAiB,EAEtB,OAAO,QAAQ,aAAa,CAC1B,CACE,KAAM,uBACN,QAAS,KACX,CACF,EACA,SAAU,MAAO,CACf,GAAI,MACF,MAAM,MAERA,MAAK,iBAAiB,CACxB,CAAC,GAEL,CACF,CAEA,eAAe,OAAO,cAAe,UAAU,EAM/C,MAAM,wBAAwB,WAAY,CACxC,aAAc,CAGZ,GAFA,MAAM,EACN,KAAK,QAAU,KAAK,MAAM,KAAK,aAAa,SAAS,CAAC,EACjD,GAAC,QAAQ,YAAc,UAAU,qBAAqB,KAAK,QAAQ,EAAE,GAAK,SAK/E,GAJA,KAAK,MAAQ,KAAK,cAAc,oBAAoB,KAAK,QAAQ,EAAE,EACnE,KAAK,aAAe,KAAK,cAAc,gBAAgB,EACvD,KAAK,WAAiB,KAAK,QAAQ,WACnC,KAAK,SAAiB,KAAK,QAAQ,SAC/B,QAAQ,WACV,SAAS,iBAAiB,yBAA2B,OAAU,CACpC,MAAM,OAAO,UAAU,SAAS,gBAAgB,GAEzE,KAAK,MAAM,aAAa,OAAQ,EAAE,CACpC,CAAC,EACD,SAAS,iBAAiB,2BAA6B,OAAU,CACtC,MAAM,OAAO,UAAU,SAAS,gBAAgB,GAEzE,KAAK,MAAM,gBAAgB,MAAM,CACnC,CAAC,MAEE,CACH,MAAM,OAAS,KAAK,UAAU,KAAK,IAAI,EACjC,aAAe,KAAK,gBAAgB,KAAK,IAAI,EACnD,GAAG,KAAK,QAAQ,QAAU,OAAO,CAC/B,IAAI,GAAK,WAAW,OAAO,KAAK,QAAQ,WAAa,GAAI,EACzD,KAAK,MAAM,iBAAiB,oBAAqB,IAAM,CACrD,aAAa,EAAE,EACf,KAAK,UAAU,GAAO,EAAI,CAC5B,CAAC,CACH,MACE,OAAO,iBAAiB,SAAS,YAAY,EAC7C,KAAK,MAAM,iBAAiB,oBAAqB,IAAM,CACrD,OAAO,oBAAoB,SAAU,YAAY,EACjD,KAAK,UAAU,GAAO,EAAI,CAC5B,CAAC,EAEH,KAAK,YAAY,CACnB,CACF,CAEA,WAAY,CACV,KAAK,MAAM,aAAa,OAAQ,EAAE,CACpC,CACA,iBAAiB,CACX,OAAO,QAAU,KAAK,QAAQ,cAChC,KAAK,MAAM,aAAa,OAAQ,EAAE,CAEtC,CACA,UAAU,MAAO,IAAK,CAIhB,KAEF,UAAU,qBAAqB,KAAK,QAAQ,GAAI,QAAS,KAAK,QAAQ,CAE1E,CACA,aAAa,CACX,IAAIA,MAAM,KACPA,MAAK,cACNA,MAAK,aAAa,iBAAiB,QAAQ,UAAU,CACnDA,MAAK,MAAM,gBAAgB,OAAQ,EAAE,EACrCA,MAAK,UAAU,GAAO,EAAI,CAC5B,CAAC,CAEL,CAEF,CACA,eAAe,OAAO,iBAAkB,eAAe,EAMvD,MAAM,kBAAkB,WAAY,CAClC,aAAc,CACZ,MAAM,EACN,KAAK,QAAU,KAAK,MAAM,KAAK,aAAa,SAAS,CAAC,EACjD,GAAC,QAAQ,YAAc,UAAU,eAAe,KAAK,QAAQ,EAAE,GAAK,WACzE,KAAK,MAAQ,KAAK,cAAc,cAAc,KAAK,QAAQ,EAAE,EAC7D,KAAK,SAAe,KAAK,QAAQ,SACjC,KAAK,SAAW,KAAK,cAAc,4BAA4B,EAC/D,KAAK,SAAW,KAAK,cAAc,iBAAiB,EAChD,QAAQ,YACV,SAAS,iBAAiB,yBAA2B,OAAU,CAC1C,MAAM,OAAO,UAAU,SAAS,UAAU,GAE7D,KAAK,UAAU,CACjB,CAAC,EACD,SAAS,iBAAiB,2BAA6B,OAAU,CAC5C,MAAM,OAAO,UAAU,SAAS,UAAU,GAE7D,KAAK,MAAM,gBAAgB,MAAM,CACnC,CAAC,GAGE,KAAK,QAAQ,QAAU,cACrB,OAAO,WAAa,KACrB,KAAK,WAAW,EAEhB,KAAK,WAAW,EAEX,KAAK,QAAQ,QAAU,UAC9B,KAAK,WAAW,EAChB,QAAQ,IAAI,GAGZ,KAAK,WAAW,EAGtB,CAEA,YAAY,CACV,MAAM,OAAS,KAAK,UAAU,KAAK,IAAI,EACvC,SAAS,cAAc,MAAM,EAAE,iBAAiB,aAAc,MAAM,EACpE,KAAK,MAAM,iBAAiB,oBAAqB,IAAM,CACrD,SAAS,cAAc,MAAM,EAAE,oBAAoB,aAAc,MAAM,EACvE,KAAK,UAAU,GAAO,EAAI,CAC5B,CAAC,CACH,CAEA,YAAY,CACV,MAAM,OAAS,KAAK,UAAU,KAAK,IAAI,EACvC,IAAI,UAAY,SAAS,gBAAgB,aAAe,SAAS,gBAAgB,aAAe,IAC5F,OAAQ,IAAI,CACV,OAAO,SAAW,WACpB,OAAO,CAEX,EACA,OAAO,iBAAiB,SAAS,MAAM,EACvC,KAAK,MAAM,iBAAiB,oBAAqB,IAAM,CACrD,OAAO,oBAAoB,SAAS,MAAM,EAC1C,KAAK,UAAU,GAAO,EAAI,CAC5B,CAAC,CACH,CAEA,YAAY,CACV,MAAM,OAAS,KAAK,UAAU,KAAK,IAAI,EACvC,IAAI,GAAK,WAAW,OAAO,KAAK,QAAQ,WAAa,GAAI,EACzD,KAAK,MAAM,iBAAiB,oBAAqB,IAAM,CACrD,aAAa,EAAE,EACf,KAAK,UAAU,GAAO,EAAI,CAC5B,CAAC,CACH,CACA,WAAY,CACV,IAAIA,MAAO,KACX,KAAK,MAAM,aAAa,OAAQ,EAAE,EAC/BA,MAAK,UAAYA,MAAK,WACvBA,MAAK,SAAS,iBAAiB,QAAQ,UAAU,CAC/CA,MAAK,SAAS,OAAO,EACrBA,MAAK,SAAS,kBAAkB,EAAG,KAAK,EACxC,SAAS,YAAY,MAAM,EAC3BA,MAAK,SAAS,cAAc,mBAAmB,EAAE,UAAY,GAAG,SAAS,OAAO,WAAW,MAAM,KAAKA,MAAK,SAAS,KAAK,EAC3H,CAAC,EACDA,MAAK,SAAS,iBAAiB,aAAa,UAAU,CACpDA,MAAK,SAAS,cAAc,mBAAmB,EAAE,UAAY,SAAS,OAAO,WAAW,IAC1F,CAAC,EAEL,CACA,UAAU,MAAO,IAAK,CAIhB,KACF,UAAU,eAAe,KAAK,QAAQ,GAAI,QAAS,KAAK,QAAQ,CAEpE,CACF,CACA,eAAe,OAAO,WAAY,SAAS,EAM3C,MAAM,sBAAsB,WAAY,CACtC,aAAc,CACZ,MAAM,EACN,IAAI,YAAc,GAAK,KAAK,aAAa,MAAM,EAAG,KAAO,SAAS,eAAe,QAAQ,UAAU,CAAC,EAAG,QAAU,KAAK,cAAc,cAAc,EAClJ,KAAK,OAAS,KAAK,MAAM,KAAK,aAAa,QAAQ,CAAC,EACpD,IAAIA,MAAO,KACX,SAAS,WAAW,SAAUC,SAAS,CACrC,IAAI,MAAQ,SAAU,QAAS,QAC3B,UAAY,YAAY,UAAY,CACpC,QAAU,SAAS,MAAQ,GAAI,EAAE,EACjC,QAAU,SAAS,MAAQ,GAAI,EAAE,EACjC,SAAU,QAAU,GAAK,SACzB,QAAU,QAAU,GAAK,IAAM,QAAU,QACzCA,SAAQ,YAAc,QAAUD,MAAK,OAAO,OAAS,MAAQ,QAAUA,MAAK,OAAO,OACnF,IAAI,KAAO,GAAK,SAAS,MAAQ,GAAI,EAAE,EAAI,SAAS,MAAQ,GAAI,EAAE,EAC7D,QAAQ,YACX,eAAe,QAAQ,WAAY,IAAI,EAErC,EAAE,MAAQ,IACZ,OAAO,cAAc,SAAS,EAC9BC,SAAQ,YAAc,EAAID,MAAK,OAAO,OAAS,OAAYA,MAAK,OAAO,OACvE,MAAM,QAAQ,OAAO,KAAK,eAAe,EACxC,KAAM,UAAa,SAAS,KAAK,CAAC,EAClC,KAAM,MAAS,CACd,QAAQ,IAAI,YAAY,EACxB,OAAO,SAAS,KAAO,GAAG,QAAQ,OAAO,IAAI,MAC/C,CAAC,EACA,MAAO,GAAM,CACZ,QAAQ,MAAM,CAAC,CACjB,CAAC,EAEP,EAAG,GAAI,CACT,CACI,KAAO,EAAI,WAAW,KAAM,OAAO,EACjC,WAAW,YAAa,OAAO,CACvC,CACF,CACA,eAAe,OAAO,iBAAkB,aAAa,EAOrD,MAAM,YAAc,IAAI,0BAA0B,EAClD,YAAY,QAAQ,SAAS,KAAM,CACjC,KAAK,iBAAiB,SAAU,SAAS,MAAM,CAC7C,eAAe,QAAQ,kBAAmB,KAAK,aAAa,IAAI,CAAC,CACnE,CAAC,CACH,CAAC,EACD,IAAI,WAAa,eAAe,QAAQ,iBAAiB,GAAK,GAE9D,GAAI,SAAS,KAAK,QAAQ,qBAAqB,EAAI,GAAK,aAAe,GACrE,SAAS,cAAe,IAAI,YAAY,kBAAmB,CAAE,OAAQ,CAAE,UAAuB,EAAG,QAAS,GAAM,WAAY,EAAK,CAAC,CAAE,EACpI,KAAK,UAAU,GAAG,UAAU,IAAI,SAAS,EACrC,GAAG,uBAAwB,UAAU,IACvC,GAAG,uBAAwB,UAAU,EAAE,MAAM,QAAU,2BAIlD,SAAS,KAAK,QAAQ,sBAAsB,EAAI,GAAK,aAAe,GAC3E,SAAS,iBAAiB,kBAAoB,OAAQ,CACpD,IAAI,SAAW,SAAS,eAAe,MAAM,OAAO,UAAU,EAAE,aAAa,SAAS,EACtF,SAAS,eAAe,QAAQ,EAAE,aAAa,OAAO,EAAE,CAC1D,CAAC,EACD,SAAS,cAAe,IAAI,YAAY,kBAAmB,CAAE,OAAQ,CAAE,UAAuB,EAAG,QAAS,GAAM,WAAY,EAAK,CAAC,CAAE,EACpI,KAAK,UAAU,GAAG,UAAU,IAAI,SAAS,UAElC,SAAS,KAAK,QAAQ,qBAAqB,EAAI,GAAK,SAAS,KAAK,QAAQ,GAAG,EAAI,EAAI,CAC5F,IAAI,WAAa,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC,EACvC,KAAK,UAAU,EAAE,OAAS,IAC5B,eAAe,QAAQ,kBAAmB,UAAU,EACpD,KAAK,UAAU,EAAE,UAAU,IAAI,SAAS,EACpC,GAAG,uBAAwB,UAAU,IACvC,GAAG,uBAAwB,UAAU,EAAE,MAAM,QAAU,mBAG7D,CAKA,MAAM,kBAAkB,iBAAkB,CACxC,aAAc,CACZ,MAAM,EACN,IAAIA,MAAO,KACX,KAAK,KAAO,KAAK,aAAa,MAAM,EACpC,KAAK,OAAS,KAAK,MAAM,KAAK,aAAa,YAAY,CAAC,EACxD,KAAK,KAAO,KAAK,OAAO,KACxB,KAAK,KAAO,KAAK,OAAO,KACxB,KAAK,KAAO,KAAK,OAAO,KACxB,KAAK,KAAO,KAAK,OAAO,KACxB,KAAK,OAAS,KAAK,OAAO,GAC1B,KAAK,KAAO,eAAe,QAAQ,QAAU,KAAK,MAAM,GAAK,KAAK,aAAa,KAAK,KAAM,KAAK,IAAI,EACnG,KAAK,KAAO,eAAe,QAAQ,QAAU,KAAK,MAAM,GAAK,KAAK,aAAa,KAAK,KAAM,KAAK,IAAI,EACnG,KAAK,KAAO,SAAS,KAAK,IAAI,EAC9B,KAAK,KAAO,SAAS,KAAK,IAAI,EAC9B,KAAK,aAAe,SAAS,KAAK,OAAO,IAAI,EAC7C,KAAK,MAAQ,KAAK,cAAc,aAAa,EAC7C,KAAK,MAAQ,KAAK,cAAc,aAAa,EAC7C,KAAK,YAAY,EACjB,KAAK,WAAW,KAAK,KAAM,KAAK,IAAI,EACpC,YAAY,UAAY,CACtB,KAAK,KAAO,KAAK,KAAOA,MAAK,aAAa,EAAG,CAAC,EAC9C,KAAK,KAAO,KAAK,MAAQ,KAAK,OAAO,GAAK,GAAM,IAAO,IAAK,QAAQ,CAAC,EAAI,EACzEA,MAAK,YAAY,EACjBA,MAAK,WAAWA,MAAK,KAAMA,MAAK,IAAI,CACtC,EAAG,KAAK,YAAY,CACtB,CAEA,aAAa,IAAK,IAAK,CACrB,OAAO,KAAK,MAAM,KAAK,OAAO,GAAK,IAAM,IAAM,EAAE,EAAI,GACvD,CAEA,WAAW,KAAM,KAAM,CACrB,KAAK,MAAM,UAAY,KACvB,KAAK,MAAM,UAAY,KAAK,MAAM,KAAK,IAAI,EAC3C,eAAe,QAAQ,QAAU,KAAK,OAAQ,IAAI,EAClD,eAAe,QAAQ,QAAU,KAAK,OAAQ,IAAI,CACpD,CACA,aAAc,CACR,KAAK,KAAO,KAAK,OAAM,KAAK,KAAO,KAAK,aAAa,KAAK,KAAM,KAAK,IAAI,GACzE,KAAK,KAAO,KAAK,OAAM,KAAK,KAAO,KAAK,aAAa,KAAK,KAAM,KAAK,IAAI,EAC/E,CACA,cACA,iBAAiB,MAAO,CACtB,MAAM,QAAU,MAAM,OAAO,QACzB,SAAW,KAAK,eAAiB,QAAQ,KACxC,QAAQ,UACT,KAAK,QAAQ,yBAAyB,EAAE,MAAM,QAAU,GAGxD,KAAK,QAAQ,yBAAyB,EAAE,MAAM,QAAU,OAG9D,CACF,CACA,eAAe,OAAO,aAAc,SAAS,EAK7C,IAAI,cAAgB,GACpB,MAAM,oBAAoB,WAAY,CACpC,aAAc,CAEZ,GADA,MAAM,EACH,KAAK,YAAY,EAAE,UAAU,MAAM,SAAS,iBAAiB,EAAI,EAClE,MAAO,GAET,KAAK,KAAO,IAAI,eAAgB,IAAI,EAGjC,KAAK,KAAK,MA4Bf,CA4BF,CAEA,eAAe,OAAO,eAAgB,WAAW,EAGjD,SAAS,sBAAuB,CAC9B,IAAI,UAAY,KAAK,cAErB,GADA,UAAU,UAAU,OAAO,MAAM,EAC7B,OAAO,WAAa,IAAK,CAC3B,IAAI,QAAU,UAAU,cAAc,uBAAuB,EACzD,UAAU,UAAU,SAAS,MAAM,EACrC,QAAQ,MAAM,OAAS,QAAQ,aAAe,KAE9C,QAAQ,MAAM,OAAS,GAE3B,CACF,CACA,SAAS,iBAAkB,CACrB,OAAO,YAAc,KACvB,SAAS,iBAAiB,2CAA2C,EAAE,QAAQ,SAAS,QAAS,CAC/F,QAAQ,MAAM,OAAS,EACzB,CAAC,CAEL,CACA,SAAS,iBAAiB,oCAAoC,EAAE,QAAQ,SAAS,QAAS,CACxF,QAAQ,iBAAiB,QAAS,oBAAoB,CACxD,CAAC,EACD,OAAO,iBAAiB,SAAU,UAAW,CACvC,OAAO,WAAa,IACtB,SAAS,iBAAiB,oCAAoC,EAAE,QAAQ,SAAS,QAAS,CACxF,QAAQ,oBAAoB,QAAS,oBAAoB,EACzD,QAAQ,iBAAiB,QAAS,oBAAoB,CACxD,CAAC,GAED,SAAS,iBAAiB,oCAAoC,EAAE,QAAQ,SAAS,QAAS,CACxF,QAAQ,oBAAoB,QAAS,oBAAoB,CAC3D,CAAC,EACD,gBAAgB,EAEpB,CAAC,EAMD,OAAO,UAAW,QAClB,MAAM,OAAO,IAAI,EACjB,MAAM,sBAAsB,iBAAkB,CAC5C,aAAc,CACZ,MAAM,EACN,KAAK,OAAS,KAAK,MAAM,KAAK,aAAa,QAAQ,CAAC,EACpD,KAAK,QAAmB,KAAK,OAAO,QAAQ,QAAQ,KAAK,EAAE,EAAE,MAAM,GAAG,EACtE,KAAK,OAAmB,MAAM,EAC9B,IAAI,WAAmB,KAAK,OAAO,WAC/B,KAAmB,KAAK,OAAO,KAAK,QAAQ,WAAY,UAAU,EAClE,WAAmB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,EAC7D,UAAmB,KAAK,OAAO,mBAAqB,EACpD,QAAmB,KAAK,OAAO,iBAAmB,EAClD,YAAmB,KAAK,OAAO,QAAQ,QAAQ,KAAK,EAAE,EAAE,MAAM,GAAG,EACjE,SAAmB,MAAM,EACzB,EAAmB,EACnB,OAAmB,MAAM,EACzB,EAAmB,EACnB,QAAmB,KAAK,OAAO,OAAO,QAAQ,EAC9C,QAAmB,KAAK,QAAQ,KAAK,EAAE,EAAE,QAAQ,KAAK,EAAE,EAExD,OAAmB,SAAS,OAAO,MAAM,SAAS,QAAQ,KAAK,EAAE,EAAE,MAAM,GAAG,EAC5E,OAAmB,SAAS,OAAO,MAAM,WAAW,QAAQ,KAAK,EAAE,EAAE,MAAM,GAAG,EAgBlF,GAXI,SAAS,OAAO,GAAK,SAAS,OAAO,IACvC,KAAK,OAAW,KAAK,OAAO,IAAI,EAAG,KAAK,EACxC,SAAW,SAAS,IAAI,EAAG,KAAK,EAChC,OAAW,OAAO,IAAI,EAAG,KAAK,GAQ3B,KAAK,OAAO,MAAQ,IAAM,CAI7B,KAAO,YAAY,QAAS,WAAW,SAAS,OAAO,GAAG,CAAC,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,SAAS,OAAO,YAAY,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,SAAS,OAAO,YAAY,CAAE,EAAI,IAC3L,SAAW,SAAS,IAAI,EAAG,KAAK,EAElC,KAAO,EAAI,WACT,IACA,SAAW,SAAS,IAAI,EAAG,KAAK,GAC5B,YAAY,QAAS,WAAW,SAAS,OAAO,GAAG,CAAC,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,SAAS,OAAO,YAAY,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,SAAS,OAAO,YAAY,CAAE,EAAI,KACxL,IAMJ,KAAO,YAAY,QAAS,WAAW,OAAO,OAAO,GAAG,CAAC,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,OAAO,OAAO,YAAY,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,OAAO,OAAO,YAAY,CAAE,EAAI,IACrL,OAAS,OAAO,IAAI,EAAG,KAAK,EAG9B,KAAO,EAAI,SACT,IACA,OAAS,OAAO,IAAI,EAAG,KAAK,GACxB,YAAY,QAAS,WAAW,OAAO,OAAO,GAAG,CAAC,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,OAAO,OAAO,YAAY,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,OAAO,OAAO,YAAY,CAAE,EAAI,KAClL,GAIN,KACK,CAIH,IADA,SAAW,SAAS,IAAI,UAAW,KAAK,EACjC,YAAY,QAAS,WAAW,SAAS,OAAO,GAAG,CAAC,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,SAAS,OAAO,YAAY,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,SAAS,OAAO,YAAY,CAAE,EAAI,IAC3L,SAAW,SAAS,IAAI,EAAG,KAAK,EAKlC,IADA,OAAS,OAAO,IAAI,QAAS,KAAK,EAC3B,YAAY,QAAS,WAAW,OAAO,OAAO,GAAG,CAAC,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,OAAO,OAAO,YAAY,CAAE,EAAI,IAAM,KAAK,QAAQ,QAAS,OAAO,OAAO,YAAY,CAAE,EAAI,IACrL,OAAS,OAAO,IAAI,EAAG,KAAK,CAIhC,CAMA,OAAS,KAAK,UAAU,MAAM,EAC9B,OAAS,KAAK,UAAU,MAAM,EAE9B,IAAI,aAAe,SAAS,SAAS,OAAO,GAAG,CAAC,EAChD,WAAmB,aAAe,KAAK,IAAI,YAAY,EACvD,SAAmB,OAAQ,SAAS,SAAS,OAAO,GAAG,CAAC,EAAG,CAAE,EAC7D,SAAmB,OAAQ,SAAS,SAAS,OAAO,GAAG,CAAC,CAAE,EAE1D,WAAmB,SAAS,OAAO,OAAO,GAAG,CAAC,EAC9C,SAAmB,WAAa,KAAK,IAAK,UAAW,EACrD,OAAmB,OAAQ,SAAS,OAAO,OAAO,GAAG,CAAC,EAAG,CAAE,EAC3D,OAAmB,OAAQ,SAAS,OAAO,OAAO,GAAG,CAAC,CAAE,EAGrD,GAAG,wBAAyB,IAAI,IAAG,GAAG,wBAAyB,IAAI,EAAE,UAAY,SAAS,OAAO,UAAU,EAAE,QAAQ,MAAM,QAAQ,EAAE,QAAQ,MAAM,UAAU,EAAE,QAAQ,MAAM,QAAQ,GACrL,GAAG,sBAAuB,IAAI,IAAG,GAAG,sBAAuB,IAAI,EAAE,UAAY,OAAO,OAAO,UAAU,EAAE,QAAQ,MAAM,MAAM,EAAE,QAAQ,MAAM,QAAQ,EAAE,QAAQ,MAAM,MAAM,EAC9K,CAEA,UAAU,IAAK,CACb,IAAI,WAAa,SAAU,MAAO,MAAOA,MAAM,CAC7C,OAAOA,MAAK,QAAQ,KAAK,IAAM,KACjC,EACA,OAAO,IAAI,OAAQ,UAAW,CAChC,CAEA,IAAI,EAAG,CACL,GAAI,EAAI,GAAK,EAAI,GAAI,MAAO,KAC5B,OAAQ,EAAI,GAAI,CACd,IAAK,GAAI,MAAO,KAChB,IAAK,GAAI,MAAO,KAChB,IAAK,GAAI,MAAO,KAChB,QAAS,MAAO,IAClB,CACF,CACA,cACA,iBAAiB,MAAO,CACtB,MAAM,QAAU,MAAM,OAAO,QACzB,SAAW,KAAK,eAAiB,QAAQ,KACxC,QAAQ,WACT,KAAK,QAAQ,yBAAyB,EAAE,MAAM,QAAU,GACpD,QAAQ,cAAc,WAK1B,KAAK,QAAQ,yBAAyB,EAAE,MAAM,QAAU,OAG9D,CACF,CACA,eAAe,OAAO,iBAAkB,aAAa,EACrD,MAAM,wBAAwB,WAAY,CACxC,EAAI,EACJ,aAAc,CACZ,MAAM,EAMN,KAAK,OAAS,KAAK,MAAM,KAAK,aAAa,QAAQ,CAAC,EACpD,MAAM,KAAO,KAAK,OAAO,KAAK,QAAQ,WAAY,UAAU,EAE5D,GAAI,MAAQ,WAAY,OACxB,KAAK,SAAW,GAAG,WAAY,IAAI,EAAE,UACrC,KAAK,UAAa,CAAC,KAAK,SAAS,SAAS,QAAQ,EAClD,IAAI,MAAe,MAAM,EAEzB,MAAM,QAAe,MAAM,OAAO,QAAQ,EACpC,WAAe,KAAK,QAAQ,KAAK,EAAE,EAAE,QAAQ,KAAK,EAAE,EAEtD,SAAS,OAAO,GAAK,SAAS,UAAU,IAC1C,MAAQ,MAAM,IAAI,EAAG,KAAK,GAI5B,KAAK,cAAgB,IAAI,KAAK,GAAG,MAAM,OAAO,YAAY,CAAC,IAAI,IAAI,EAAE,EAAE,QAAQ,EAG/E,KAAK,QAAQ,EACb,KAAK,EAAI,YAAa,KAAK,QAAQ,KAAK,IAAI,EAAG,KAAK,SAAS,SAAS,QAAQ,EAAI,IAAO,GAAK,CAChG,CACA,SAAU,CAER,MAAM,IAAM,IAAI,KAAK,EAAE,QAAQ,EAGzB,SAAW,KAAK,cAAgB,IAGhC,KAAU,KAAK,MAAM,UAAY,IAAO,GAAK,GAAK,GAAG,EAC3D,IAAM,MAAU,KAAK,MAAO,UAAY,IAAO,GAAK,GAAK,KAAQ,IAAO,GAAK,GAAG,EAChF,MAAM,QAAU,KAAK,MAAO,UAAY,IAAO,GAAK,KAAQ,IAAO,GAAG,EAChE,QAAU,KAAK,MAAO,UAAY,IAAO,IAAO,GAAI,EACtD,KAAK,YAAW,MAAQ,KAAK,GAAK,OAGtC,KAAK,UAAY,KAAK,SAAS,QAAQ,SAAU,OAAO,IAAI,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,QAAQ,UAAW,OAAO,KAAK,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,QAAQ,SAAU,OAAO,OAAO,EAAE,SAAS,EAAG,GAAG,CAAC,EAAE,QAAQ,SAAU,OAAO,OAAO,EAAE,SAAS,EAAG,GAAG,CAAC,EAGrO,SAAW,IACb,cAAc,KAAK,CAAC,EAEpB,KAAK,OAAS,GAElB,CACA,sBAAuB,CACrB,cAAc,KAAK,CAAC,CACtB,CACF,CACA,eAAe,OAAO,uBAAwB,eAAe,EAE7D,MAAM,uBAAuB,iBAAkB,CAC7C,aAAc,CACZ,MAAM,CACR,CACA,cACA,iBAAiB,MAAO,CACtB,MAAM,QAAU,MAAM,OAAO,QACzB,SAAW,KAAK,eAAiB,QAAQ,KACxC,QAAQ,UACT,KAAK,MAAM,QAAU,GAGrB,KAAK,MAAM,QAAU,OAG3B,CACF,CACA,eAAe,OAAO,kBAAmB,cAAc,EAIvD,IAAI,kBAAoB,IACf,IAAI,QAAQ,MAAO,SAAY,CACpC,QAAQ,MAAO,MAAM,MAAM,GAAG,QAAQ,OAAO,IAAI,SAAS,GAAG,KAAK,CAAC,CACrE,CAAC,EAEC,WACJ,aACA,MAAM,uBAAuB,WAAY,CACvC,aAAc,CACZ,MAAM,EACN,MAAM,yBAA2B,IACjC,KAAK,QAAU,CACb,IAAK,MACL,OAAQ,QACV,EACA,KAAK,iBAAmB,IAAI,KAAK,GACjC,KAAK,UAAY,KAAK,QAAQ,UAC9B,KAAK,YAAY,EAEjB,MAAM,kBAAoB,SAAU,OAAU,CAC5C,KAAK,SAAS,KAAK,CACrB,EAAG,wBAAwB,EAE3B,KAAK,iBAAiB,SAAU,kBAAkB,KAAK,IAAI,CAAC,EAC5D,UAAU,WAAY,IAAI,EAC1B,SAAS,iBAAiB,uBAAyB,OAAU,MAAM,OAAO,SAAS,KAAK,KAAK,SAAS,CAAC,CACzG,CACA,SAAS,MAAO,CACd,MAAM,eAAe,CACvB,CAEA,mBAAoB,CAClB,SAAS,iBAAiB,GAAG,iBAAiB,EAAI,qBAAuB,cAAe,KAAK,gBAAgB,KAAK,IAAI,CAAE,CAC1H,CAGA,aAAc,CACZ,KAAK,cAAgB,GAAG,yBAA0B,IAAI,EACtD,KAAK,oBAAsB,GAAG,+BAAgC,IAAI,EAClE,GAAG,sBAAuB,IAAI,EAAE,iBAAiB,SAAU,KAAK,SAAS,KAAK,IAAI,CAAC,CACrF,CACA,gBAAgB,MAAO,CAErB,MAAM,UADO,IAAI,UAAU,EAAE,gBAAgB,MAAM,OAAO,SAAS,KAAK,SAAS,EAAG,WAAW,EACxE,cAAc,KAAK,gBAAgB,EAC1D,GAAG,sBAAuB,IAAI,EAAE,oBAAoB,SAAU,KAAK,SAAS,KAAK,IAAI,CAAC,EACtF,KAAK,UAAY,UAAU,UAC3B,SAAS,cAAc,IAAI,YAAY,iBAAiB,CAAC,EACzD,KAAK,YAAY,CASnB,CACA,SAAS,MAAO,CACd,MAAM,WAAa,SAAS,MAAM,OAAO,KAAK,EACxC,aAAe,SAAS,MAAM,OAAO,QAAQ,YAAY,EACzD,MAAQ,MAAM,OAAO,QAAQ,MAC7B,SAAW,WAAa,aAE1B,aAAe,EACjB,KAAK,eAAe,MAAO,WAAY,KAAK,QAAQ,MAAM,EAE1D,KAAK,eAAe,MAAO,SAAU,KAAK,QAAQ,GAAG,CAEzD,CACA,UAAU,GAAG,CACX,GAAG,YAAY,EAAE,mBAAoB,IAAI,GAAG,aAAa,YAAY,EAAI,EACzE,IAAI,oDAAqD,IAAI,EAAE,QAAQ,IAAM,GAAG,aAAa,YAAY,EAAI,CAAC,CAChH,CACA,UAAU,GAAG,CACX,GAAG,YAAY,EAAE,mBAAoB,IAAI,GAAG,aAAa,YAAY,EAAK,EAC1E,IAAI,oDAAqD,IAAI,EAAE,QAAQ,IAAM,GAAG,aAAa,YAAY,EAAK,CAAC,CACjH,CACA,aAAa,GAAG,SAAS,CACvB,WAAa,EAAI,GAAG,YAAY,EAAE,sCAAuC,IAAI,EAAE,gBAAgB,QAAQ,EAAI,GAAG,YAAY,EAAE,sCAAuC,IAAI,EAAE,aAAa,SAAS,EAAE,CACnM,CACA,aAAa,GAAG,gBAAgB,CAE9B,GAAG,YAAY,EAAE,6BAA8B,IAAI,EAAE,gBAAgB,QAAQ,EAC7E,IAAI,iBAAmB,GAAG,YAAY,EAAE,sBAAuB,IAAI,EAG/D,cAAgB,GAAG,YAAY,EAAE,0BAA2B,IAAI,EAGpE,GAAG,iBAAiB,SAAW,GAAK,gBAAgB,CAClD,IAAI,oBAAsB,WAAW,gBAAgB,mBAAmB,EACxE,iBAAiB,UAAY,gBAAgB,SAC7C,cAAc,UAAY,YAAY,oBAAoB,SAAS,SAAS,cAAc,EAC1F,cAAc,aAAa,qBAAsB,mBAAmB,CACtE,MACE,iBAAiB,UAAY,EAC7B,cAAc,UAAY,YAAY,EAAE,SAAS,SAAS,cAAc,EACxE,cAAc,aAAa,qBAAsB,CAAC,EAClD,GAAG,YAAY,EAAE,6BAA8B,IAAI,EAAE,aAAa,SAAS,EAAE,EAE/E,KAAK,sBAAsB,aAAa,CAC1C,CACA,sBAAsB,GAAI,QAAU,GAAG,QAAS,CAC9C,SAAW,CAAC,IAAK,KAAK,IAAK,OAAO,QAAQ,OAAO,EAC5C,IAAI,YAAY,EAAE,QAAQ,UAAU,GAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,CAExE,CACA,mBAAmB,CACjB,IAAI,YAAc,EACd,YAAc,EAGN,IAAI,uBAAwB,IAAI,EACtC,QAAQ,MACL,aAAe,SAAS,KAAK,aAAa,oBAAoB,CAAC,CACvE,EACD,KAAK,cAAc,UAAY,YAGlB,IAAI,uBAAwB,IAAI,EACtC,QAAQ,OACN,aAAe,WAAW,MAAM,aAAa,oBAAoB,CAAC,CAC1E,EACD,KAAK,oBAAoB,UAAY,YAAY,YAAY,SAAS,SAAS,cAAc,EAC7F,KAAK,sBAAsB,KAAK,mBAAmB,EACnD,SAAS,cAAc,IAAI,YAAY,iBAAiB,CAAC,CAC3D,CAEA,YAAY,KAAO,OAAQ,CACzB,MAAO,CACL,OAAQ,OACR,QAAS,CAAE,eAAgB,mBAAoB,OAAQ,eAAe,IAAI,EAAG,CAC/E,CACF,CAEA,eAAe,GAAI,SAAU,OAAQ,CACnC,SAAS,cAAc,IAAI,YAAY,sBAAsB,CAAC,QAAQ,EAAE,CAAC,CAAC,EAC1E,KAAK,aAAa,GAAG,QAAQ,EAC7B,KAAK,UAAU,EAAE,EACjB,IAAI,eAAiB,CAAC,EACtB,SAAS,cAAc,IAAI,YAAY,uBAAwB,CAAE,QAAS,GAAM,OAAQ,CAAE,SAAU,cAAe,CAAE,CAAC,CAAC,EACvH,IAAI,SAAW,GAAG,QAAQ,OAAO,IAAI,iBACjC,KAAO,KAAK,UAAU,CACxB,SACA,GACA,aAAc,OAAO,SAAS,SAC9B,SAAU,eAAe,KAAK,GAAG,CACnC,CAAC,EACG,gBAEA,SAAW,KAAK,QAAQ,MAC1B,gBAAkB,aAClB,SAAW,GAAG,QAAQ,OAAO,IAAI,cACjC,KAAO,KAAK,UAAU,CACpB,MAAO,CACL,CACE,SAAU,SAAS,QAAQ,EAC3B,GAAI,SAAS,EAAE,CACjB,CACF,EACA,aAAc,OAAO,SAAS,SAC9B,SAAU,eAAe,KAAK,GAAG,CACnC,CAAC,GAGH,MAAM,GAAG,QAAQ,GAAI,CAAE,GAAG,KAAK,YAAY,eAAe,EAAQ,IAAO,CAAC,EACzE,KAAM,UACE,SAAS,KAAK,CACtB,EACA,KAAM,OAAU,CACf,IAAI,YAAc,KAAK,MAAM,KAAK,EAClC,MAAM,gBAAkB,SAAS,eAAe,YAAY,EAAE,EAAE,EAE7D,WAAa,GACd,KAAK,mBAAmB,GAAG,gBAAgB,EAAI,EAEjD,gBAAgB,aAAa,qBAAqB,QAAQ,EAC1D,YAAY,WAAY,KAAM,YAAY,EAAE,KAAK,KAAM,YAAa,SAAS,EAAE,EAAG,OAAQ,cAAc,CAC1G,CAAC,EACA,MAAO,OAAU,CAChB,QAAQ,IAAI,KAAK,CACnB,CAAC,EACA,QAAQ,IAAM,CACb,KAAK,kBAAkB,EACvB,SAAS,cAAc,IAAI,YAAY,iBAAiB,CAAC,EACzD,SAAS,cAAc,IAAI,YAAY,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC,EACzE,KAAK,UAAU,EAAE,CACnB,CAAC,CACH,CACA,mBAAmB,GAAI,gBAAgB,WAAY,CACjD,MAAM,MAAQ,iBAAmB,SAAS,eAAe,YAAY,EAAE,EAAE,EACzE,MAAM,MAAQ,MAAM,aAAa,OAAO,EACxC,WAAa,MAAM,MAAQ,EAAI,MAAM,MAAQ,MAAM,aAAa,OAAO,CACzE,CACA,YAAY,aAAc,GAAI,CAC5B,IAAI,QAAU,GACV,OAAO,aAAiB,IAC1B,QAAU,OAAO,YAAY,MAE7B,QAAU,OAAO,YAAY,cAAc,QAAQ,aAAc,YAAY,EAE/E,KAAK,kBAAkB,GAAI,OAAO,CACpC,CAEA,kBAAkB,GAAI,QAAS,CAC7B,MAAM,iBAAmB,KAAK,eAAe,6BAA6B,EACtE,mBACF,GAAG,gCAAiC,gBAAgB,EAAE,UAAY,QAClE,iBAAiB,gBAAgB,QAAQ,EAE7C,CAEF,CACA,WAAa,IAAI,QACjB,aAAe,eAAe,YAAa,GAAI,OAAQ,CACrD,MAAM,gBAAkB,YAAY,MAAM,KAAM,MAAS,KAAK,aAAe,EAAE,EAC/E,KAAK,aAAa,GAAG,eAAe,EACpC,KAAK,cAAc,IAAI,YAAY,oBAAqB,CAAE,QAAS,EAAK,CAAC,CAAC,EAE1E,IAAI,KAAO,YACP,SAAW,KAAK,QAAQ,MAC1B,KAAO,MAAM,kBAAkB,EAC/B,KAAK,SAAW,YAAY,UAE9B,SAAS,cAAc,IAAI,YAAY,cAAe,CACpD,QAAS,GACT,OAAQ,CACN,UAAW,mBACX,KACA,qBAAsB,EACxB,CACF,CAAC,CAAC,CACJ,EAEA,eAAe,OAAO,uBAAwB,cAAc,EAG5D,MAAM,mCAAmC,WAAY,CACnD,aAAc,CACZ,MAAM,EACN,KAAK,iBAAiB,QAAS,OAAU,CACvC,MAAM,eAAe,EACE,KAAK,QAAQ,sBAAsB,EAC3C,eAAe,KAAK,QAAQ,MAAO,CAAC,EACnD,KAAK,aAAa,SAAS,EAAE,CAC/B,CAAC,CACH,CACF,CAEA,eAAe,OAAO,qCAAsC,0BAA0B,EAGtF,MAAM,sCAAsC,WAAY,CACtD,aAAc,CACZ,MAAM,EACN,KAAK,eAAiB,KAAK,QAAQ,sBAAsB,EACzD,MAAM,YAAc,MAAM,KAAK,KAAK,eAAe,iBAAiB,mBAAmB,CAAC,EAClF,MAAQ,CAAC,EACT,cAAgB,CAAC,EACvB,IAAI,kBAAoB,GAExB,YAAY,QAAS,SAAY,CACf,SAAS,QAAQ,QAAQ,OAAO,EAClC,IACZ,kBAAoB,GACpB,MAAM,SAAS,QAAQ,QAAQ,SAAS,CAAC,EAAI,EAC7C,cAAc,KAAK,QAAQ,QAAQ,SAAS,EAEhD,CAAC,EAEI,mBACH,KAAK,aAAa,SAAS,EAAE,EAG/B,KAAK,iBAAiB,QAAU,OAAU,CACxC,MAAM,eAAe,EACrB,KAAK,eAAe,kBAAkB,MAAM,aAAa,EACzD,KAAK,aAAa,SAAS,EAAE,CAC/B,CAAC,CACH,CACF,CAEA,eAAe,OAAO,yCAA0C,6BAA6B,EAI7F,MAAM,mBAAqB,CAAC,EAC5B,MAAM,yBAAyB,WAAY,CACzC,aAAc,CACZ,MAAM,EACN,KAAK,OAAS,KAAK,MAAM,KAAK,aAAa,QAAQ,CAAC,EAChD,QAAQ,aACV,SAAS,iBAAiB,yBAA2B,OAAU,CAC7D,KAAK,YAAY,CACnB,CAAC,EACD,SAAS,iBAAiB,2BAA6B,OAAU,CAC/D,KAAM,CAAC,IAAI,EAAE,EAAI,KAAK,OACtB,IAAI,KAAO,eAAe,QAAQ,UAAU,IAAI,EAAE,EAC9C,MAAQ,MAAQ,MAAQ,IAC1B,eAAe,WAAW,UAAU,IAAI,EAAE,CAE9C,CAAC,EAEL,CACA,mBAAoB,CAClB,KAAK,YAAY,CACnB,CACA,aAAa,CACX,KAAM,CAAC,IAAI,EAAE,EAAI,KAAK,OAEtB,GAAI,KAAO,GAEX,KAAI,KAAO,eAAe,QAAQ,UAAU,IAAI,EAAE,EAElD,GAAI,MAAQ,MAAQ,MAAQ,GAAI,CAG9B,IAAI,IAAM,IAAI,KACd,WAAa,IAAI,KAAK,KAAK,MAAM,IAAI,EAAE,SAAS,EAEhD,WAAW,WAAW,WAAW,WAAW,EAAI,EAAE,EAG9C,IAAI,QAAQ,EAAI,WAAW,QAAQ,IACrC,KAAO,KACP,eAAe,WAAW,UAAU,IAAI,EAAE,EAE9C,CACA,GAAK,MAAQ,MAAQ,MAAQ,GAC3B,KAAK,cAAc,KAAK,MAAM,IAAI,EAAE,QAAQ,EAAK,MAE/C,CACF,GAAI,mBAAmB,GAAG,EAAG,CAC3B,GAAG,yBAA0B,IAAI,EAAE,UAAY,mBAAmB,GAAG,EACrE,GAAG,mBAAoB,IAAI,GAAG,OAAO,EACrC,MAAM,WAAa,GAAG,kBAAmB,IAAI,EACzC,aACF,WAAW,OAAS,GACpB,WAAW,SAAS,GAEtB,MACF,CAEA,MAAM,6HAA6H,KAAK,GAAG,CAAC,EAC3I,KAAM,UAAa,CAClB,GAAG,CAAC,SAAS,GAAM,MAAM,IAAI,MAAM,QAAQ,EAC3C,OAAO,SAAS,KAAK,CACvB,CAAC,EAEA,KAAM,KAAQ,CAEZ,KAAK,cAAc,IAAI,KAAK,EAAI,CACnC,CAAC,EACA,MAAM,IAAM,CACX,GAAG,mBAAoB,IAAI,GAAG,OAAO,EACrC,QAAQ,MAAM,4BAA4B,CAC5C,CAAC,CACH,EACF,CACA,cAAc,KAAK,sBAAuB,CACxC,MAAM,UAAY,GAAG,qBAAsB,IAAI,EAAE,WAAa,IAAI,MAAM,WAAW,EACnF,MAAQ,CACL,MAAQ,SAAS,CAAC,EAClB,MAAQ,SAAS,CAAC,EAClB,eAAgB,SAAS,CAAC,CAC7B,EACA,CAAC,GAAI,IAAK,OAAQ,KAAK,EAAI,KAAK,OAChC,IAAI,KAAO,GAEX,KAAK,QAAS,CAAC,GAAI,QAAU,CAC3B,GAAI,OAAS,MAAO,MAAO,GAC3B,MAAM,WAAa,GAAG,WAAW,YAAY,EAC7C,MAAQ,8CAA8C,UAAU,sHAAsH,GAAG,SAAS,aAAa,MAAM,sCAAsC,GAAG,eAAiB,GAAG,SAAS,wEAAwE,MAAM,UAAU,CAAC,kBACtX,CAAC,EACD,mBAAmB,GAAG,EAAI,KAC1B,GAAG,yBAA0B,IAAI,EAAE,UAAY,KAC/C,GAAG,mBAAoB,IAAI,GAAG,OAAO,EACrC,MAAM,WAAa,GAAG,kBAAmB,IAAI,EACzC,aACF,WAAW,OAAS,GACpB,WAAW,SAAS,GAGnB,uBACD,eAAe,QAAQ,UAAU,IAAI,GAAI,KAAK,UAAU,CACtD,UAAW,IAAI,KACf,QAAS,IACX,CAAC,CAAC,CAEN,CACF,CACA,eAAe,OAAO,eAAgB,gBAAgB,EAKtD,MAAM,mBAAmB,WAAY,CACnC,aAAc,CACZ,MAAM,EACN,KAAK,MAAQ,KAAK,iBAAiB,eAAe,EAClD,KAAK,KAAO,KAAK,iBAAiB,kBAAkB,EACpD,KAAK,gBAAgB,CACvB,CAEA,iBAAkB,CAChB,KAAK,MAAM,QAAQ,MAAQ,CACzB,KAAK,iBAAiB,QAAS,IAAM,CACnC,MAAM,QAAU,KAAK,aAAa,aAAa,EAC3C,UAAY,MACd,KAAK,YAAY,EAEjB,KAAK,QAAQ,OAAO,EAEtB,KAAK,MAAM,QAAQ,MAAQ,CACzB,KAAK,UAAU,OAAO,YAAY,CACpC,CAAC,EACI,KAAK,UAAU,SAAS,YAAY,GACvC,KAAK,UAAU,IAAI,YAAY,CAEnC,CAAC,CACH,CAAC,CACH,CAEA,aAAc,CACZ,KAAK,KAAK,QAAQ,SAAW,CAC3B,QAAQ,MAAM,QAAU,QACxB,QAAQ,MAAM,OAAS,MACzB,CAAC,EACD,KAAK,cAAc,qBAAqB,EAAE,UAAU,IAAI,YAAY,CACtE,CAEA,QAAQ,QAAS,CACf,KAAK,KAAK,QAAQ,SAAW,CACvB,QAAQ,KAAO,SACjB,QAAQ,MAAM,QAAU,QACxB,QAAQ,UAAU,IAAI,cAAc,IAEpC,QAAQ,MAAM,QAAU,OACxB,QAAQ,UAAU,OAAO,cAAc,EAE3C,CAAC,CACH,CAEA,mBAAoB,CAClB,KAAK,gBAAgB,CACvB,CACA,sBAAuB,CACvB,CACF,CAEA,eAAe,OAAO,cAAe,UAAU,EAK/C,MAAM,sBAAsB,WAAY,CACtC,aAAc,CACZ,MAAM,EACN,KAAK,OAAS,GAAG,wBAAyB,IAAI,EAC9C,KAAK,MAAQ,GAAG,6BAA8B,IAAI,EAC9C,KAAK,QACP,KAAK,OAAO,iBACV,QACA,SAAU,OAAU,CAClB,KAAK,gBAAgB,CACvB,EAAG,GAAG,EAAE,KAAK,IAAI,CACnB,EAEF,KAAK,OAAO,iBAAiB,UAAW,KAAK,gBAAgB,KAAK,IAAI,CAAC,CAEzE,CACA,iBAAiB,CACf,MAAM,YAAc,KAAK,OAAO,MAAM,YAAY,EAC5C,aAAe,KAAK,QAAQ,aAAa,EAAE,iBAAiB,qBAAqB,EACvF,IAAI,iBAAmB,aAAa,OACpC,aAAa,QAAS,MAAS,CACT,KAAK,aAAa,WAAW,EAAE,YAAY,EAC/C,QAAQ,WAAW,EAAI,IACrC,KAAK,UAAU,OAAO,YAAY,EAClC,qBAEA,KAAK,UAAU,IAAI,YAAY,EAC/B,mBAEJ,CAAC,EACD,KAAK,QAAQ,aAAa,EAAE,UAAU,EACtC,KAAK,QAAQ,aAAa,EAAE,WAAW,cAAc,wBAAwB,EAAE,UAAY,CAC7F,CAEA,gBAAgB,MAAO,CACjB,MAAM,KAAK,YAAY,IAAM,SAC/B,MAAM,eAAe,CAEzB,CACF,CAKA,GAHA,eAAe,OAAO,iBAAkB,aAAa,EAGlD,QAAQ,WAAW,CAiBpB,IAAS,kBAAT,UAA6B,CAC3B,MAAO,gBAAgB,YAAY,sCAAuC,GAAG,eAAe,EAAE,SAAU,YAC1G,EAZA,IAAI,UAAe,KAAK,OAAO,KAAK,cAAc,CAAC,CAAC,EAChD,iBAAmB,OAAO,KAAK,sBAAsB,CAAC,EACtD,UAAuB,KAAK,gBAAgB,EAC5C,WAAuB,uBAAuB,iBAC9C,UAAuB,KAAK,OAAO,KAAK,kBAAkB,CAAC,CAAC,EAC5D,UAAwB,eAAe,QAAQ,UAAU,IAAM,OAC/D,gBAAuB,KAAK,8BAA8B,EAC1D,aAAuB,KAAK,sBAAsB,EAStD,GAAI,WAAa,GAAI,CACnB,IAAI,KAAQ,IAAI,YAAW,gBAAgB,kBAAkB,EAAG,WAAW,EAC3E,SAAS,KAAK,OAAO,KAAK,KAAK,iBAAiB,EAChD,IAAI,KAAQ,IAAI,YAAW,gBAAgB,4GAA6G,WAAW,EACnK,SAAS,KAAK,QAAQ,KAAK,KAAK,iBAAiB,EACjD,eAAe,WAAW,UAAU,EACpC,aAAa,WAAW,UAAU,CACpC,SACU,CAAC,UAAY,CAIrB,IAAI,OAAa,OAAO,SAAS,SACjC,IAAa,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,EACrE,WAAa,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,IACnP,KAAa,CACX,eAAkB,OAClB,MAAkB,UAClB,MAAkB,UAClB,cAAkB,SACpB,EAEA,MAAM,WAAY,CAChB,QAAW,CACT,OAAU,MACV,gBAAiB,WACjB,mBAAoB,gBACtB,EACA,KAAQ,KAAM,mBAAmB,KAAK,UAAU,IAAI,CAAC,CAAC,EACtD,OAAU,OACV,KAAQ,MACV,CAAC,EACA,KAAK,SAAS,SAAU,CACvB,GAAG,SAAS,GACV,OAAO,SAAS,KAAK,EACrB,KAAM,EACV,CAAC,EACA,KAAK,SAAS,SAAU,CACvB,IAAI,IAAO,IAAI,YAAW,gBAAgB,kBAAkB,EAAG,WAAW,EAE1E,GAAK,SAAS,QAAU,EAAG,CAEzB,IAAI,KAAK,kBAAkB,UAAY,6DACvC,SAAS,KAAK,OAAO,IAAI,KAAK,iBAAiB,EAG/C,IAAI,UAAY,aAAa,QAAQ,UAAU,EAC/C,eAAe,QAAQ,WAAY,MAAM,EAErC,YAAc,OAChB,GAAG,KAAK,0BAA0B,CAAC,EAAE,OAAO,GAI5C,aAAa,QAAQ,WAAY,MAAM,EACvC,WAAW,UAAU,CACnB,GAAG,KAAK,0BAA0B,CAAC,EAAE,OAAO,CAE9C,EAAG,GAAI,EAGX,KACK,CAEH,IAAI,KAAO,SAAS,QACpB,GAAI,MAAQ,6DAEV,IAAI,KAAK,kBAAkB,UAAY,+EAGhC,KAAK,QAAU,IAAM,KAAK,QAAU,IAC3C,IAAI,KAAK,kBAAkB,UAAY,6OAGhC,KAAK,QAAU,IACtB,IAAI,KAAK,kBAAkB,UAAY,gMAEpC,CACH,GAAI,CACF,IAAI,KAAO,KAAK,MAAM,iBAAiB,EAAE,CAAC,EAAE,MAAM,KAAK,EAAE,CAAC,CAC5D,MACW,CAEX,CACA,IAAI,KAAK,kBAAkB,UAAY,mFAAmF,KAAK,0JACjI,CACA,SAAS,KAAK,OAAO,IAAI,KAAK,iBAAiB,CAEjD,CAEF,CAAC,EAAE,MAAM,SAAS,EAAG,CAEnB,QAAQ,MAAM,CAAC,CACjB,CAAC,CAEH,CACF,CAIA,MAAM,yBAAyB,WAAW,CACxC,aAAa,CACX,MAAM,EACN,KAAK,gBAAkB,GAAG,mBAAoB,IAAI,EAClD,KAAK,gBAAkB,GAAG,mBAAoB,IAAI,EAClD,KAAK,UAAY,GAAG,oCAAqC,IAAI,EAC7D,KAAK,SAAW,GAAG,mCAAoC,IAAI,EACxD,GAAC,KAAK,iBAAmB,CAAC,KAAK,iBAAmB,CAAC,KAAK,WAAa,CAAC,KAAK,YAG9E,KAAK,gBAAgB,iBAAiB,QAAS,GAAI,CAEjD,EAAE,eAAe,EACjB,KAAK,UAAU,UAAU,IAAI,YAAY,EACzC,KAAK,SAAS,UAAU,OAAO,YAAY,CAC7C,CAAC,EACD,KAAK,gBAAgB,iBAAiB,QAAS,GAAI,CAEjD,EAAE,eAAe,EACjB,KAAK,UAAU,UAAU,OAAO,YAAY,EAC5C,KAAK,SAAS,UAAU,IAAI,YAAY,CAC1C,CAAC,EACH,CACF,CACA,eAAe,OAAO,oBAAoB,gBAAgB,EAG1D,MAAM,mBAAmB,WAAY,CACnC,aAAa,CACX,MAAM,EACN,KAAK,MAAQ,GAAG,YAAa,IAAI,EACjC,KAAK,MAAQ,GAAG,mBAAoB,IAAI,EACxC,KAAK,MAAM,iBAAiB,mBAAqB,GAAI,CACnD,KAAK,MAAM,KAAK,CAClB,CAAC,EACD,KAAK,MAAM,iBAAiB,qBAAuB,GAAI,CACrD,KAAK,MAAM,MAAM,CACnB,CAAC,CACH,CACF,CACA,eAAe,OAAO,qBAAsB,UAAU,EAItD,MAAM,2BAA2B,WAAW,CAC1C,aAAa,CACX,MAAM,EACN,KAAK,OAAS,KAAK,cAAc,gBAAgB,EAC7C,KAAK,QAET,KAAK,OAAO,iBAAiB,QAAQ,IAAI,CACvC,KAAK,UAAU,OAAO,UAAU,CAClC,CAAC,CACH,CACF,CACA,eAAe,OAAO,sBAAsB,kBAAkB,EAI9D,MAAM,iBAAiB,WAAY,CACjC,aAAc,CACZ,MAAM,EACN,KAAK,iBAAiB,aAAe,OAAU,CAC7C,KAAK,QAAQ,SAAS,EAAE,cAAc,6BAA+B,GAAG,aAAa,eAAgB,EAAK,EAC1G,KAAK,cAAc,MAAM,CAC3B,CAAC,CACH,CACF,CACA,eAAe,OAAO,YAAa,QAAQ,EAK3C,MAAM,oBAAoB,WAAW,CACnC,aAAa,CACX,MAAM,EACN,KAAK,KAAO,KAAK,QAAQ,uBAAuB,EAAE,cAAc,+BAA+B,EAC/F,KAAK,MAAQ,KAAK,cAAc,GAAG,EAChC,GAAC,KAAK,MAAQ,CAAC,KAAK,QACvB,KAAK,QAAQ,CACf,CACA,SAAS,CACP,IAAIA,MAAO,KACX,KAAK,MAAM,iBAAiB,QAAS,GAAM,CACzC,EAAE,eAAe,EACjBA,MAAK,KAAK,MAAQ,EAAE,OAAO,QAAQ,MACnCA,MAAK,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC,CAC5C,CAAC,CACH,CACF,CACA,eAAe,OAAO,mBAAoB,WAAW,GAGpD,IAAM,CACL,MAAM,IAAM,IAAI,IAAI,CAClB,CAAC,4BAA6B,wCAAwC,EACtE,CAAC,2CAA4C,uCAAuC,EACpF,CAAC,wCAAyC,iCAAiC,EAC3E,CAAC,kCAAmC,wBAAwB,EAC5D,CAAC,0CAA2C,sCAAsC,EAClF,CAAC,gDAAiD,wBAAwB,CAC5E,CAAC,EACK,aAAe,IAAM,CACzB,SAAS,iBAAiB,SAAS,EAAE,QAAS,MAAS,CACrD,IAAI,IACJ,GAAI,CAAE,IAAM,IAAI,IAAI,KAAK,aAAa,MAAM,EAAG,OAAO,SAAS,MAAM,CAAG,MACzD,CAAE,MAAQ,CACzB,MAAM,OAAS,IAAI,IAAI,IAAI,QAAQ,EAC9B,QACL,KAAK,aAAa,OAAQ,OAAS,IAAI,OAAS,IAAI,IAAI,CAC1D,CAAC,CACH,EACM,eAAiB,IAAI,IAAI,OAAO,SAAS,QAAQ,EACvD,GAAI,eAAgB,CAClB,OAAO,SAAS,QAAQ,eAAiB,OAAO,SAAS,OAAS,OAAO,SAAS,IAAI,EACtF,MACF,CACI,SAAS,aAAe,UAAW,SAAS,iBAAiB,mBAAoB,aAAc,CAAE,KAAM,EAAK,CAAC,EAC5G,aAAa,EAClB,OAAO,iBAAiB,WAAY,YAAY,CAClD,GAAG,GAOF,IAAM,CACL,MAAM,OAAS,wCACT,KAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,w9BACP,MAAQ,IAAM,CAClB,GAAI,OAAO,SAAS,WAAa,IAAK,OACtC,MAAM,KAAO,SAAS,eAAe,aAAa,EAC7C,OACD,KAAK,cAAc,WAAW,GAC9B,CAAC,KAAK,cAAc,aAAa,GAAK,CAAC,SAAS,gBAAgB,UAAU,SAAS,qBAAqB,IAC5G,KAAK,aAAa,2BAA4B,MAAM,EACpD,KAAK,UAAY,MACnB,EACI,SAAS,aAAe,UAAW,SAAS,iBAAiB,mBAAoB,MAAO,CAAE,KAAM,EAAK,CAAC,EACrG,MAAM,EACX,OAAO,iBAAiB,WAAY,KAAK,CAC3C,GAAG,GAKF,IAAM,CACL,MAAM,OAAS,uCACf,GAAI,CAAC,SAAS,MAAQ,CAAC,SAAS,KAAK,UAAU,SAAS,qBAAqB,EAAG,OAChF,SAAS,gBAAgB,UAAU,IAAI,MAAM,EAC7C,MAAM,OAAS,IAAM,CACnB,GAAI,SAAS,eAAe,MAAM,EAAG,OACrC,MAAM,MAAQ,SAAS,cAAc,OAAO,EAC5C,MAAM,GAAK,OACX,MAAM,YAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EACpB,SAAS,KAAK,YAAY,KAAK,CACjC,EACI,SAAS,aAAe,UAAW,SAAS,iBAAiB,mBAAoB,OAAQ,CAAE,KAAM,EAAK,CAAC,EACtG,OAAO,EACZ,OAAO,iBAAiB,WAAY,MAAM,CAC5C,GAAG",
  "names": ["self", "display"]
}
