www.customlikes.com Open in urlscan Pro
104.17.246.119  Public Scan

Submitted URL: https://customlikes.com/products/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve
Effective URL: https://www.customlikes.com/products/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve
Submission: On December 01 via api from US — Scanned from DE

Form analysis 4 forms found in the DOM

GET /search

<form action="/search" method="get" class="">
  <div tabindex="-1" class="header__search tw-flex tw-items-center tw-relative">
    <button type="submit" class="header__search-icon tw-m-0 tw-p-0 tw-flex tw-items-center tw-pr-8 tw-bg-transparent tw-border-none tw-outline-none tw-cursor-pointer tw-h-full tw-text-current" tabindex="-1"><svg class="" width="24" height="24"
        xmlns="http://www.w3.org/2000/svg">
        <path d="M11.16 1a9.16 9.16 0 1 1 0 18.322A9.16 9.16 0 0 1 11.16 1zm0 1.629a7.532 7.532 0 1 0 0 15.064 7.532 7.532 0 0 0 0-15.064zm5.465 14.148 1.152-1.152L23 20.848 21.848 22l-5.223-5.223z" fill="currentColor"></path>
      </svg></button>
    <input autocomplete="off" name="q" type="text" class="header__search-input tw-bg-header-search tw-w-full tw-flex-1 tw-h-10 tw-p-0 tw-text-body-base tw-leading-none tw-border-none tw-text-current tw-bg-body tw-placeholder-body-alpha-50 "
      placeholder="Search our store">
    <button type="button" class="header__search-close tw-p-4 tw--mr-4 tw-hidden tw-justify-center tw-items-center tw-m-0 tw-ml-5 tw-bg-transparent tw-border-none tw-outline-none tw-text-current tw-cursor-pointer"><svg class="" width="14" height="14"
        xmlns="http://www.w3.org/2000/svg">
        <path d="m3 3 8.485 8.485m0-8.485L3 11.485" stroke="currentColor" stroke-width="1.6" stroke-linecap="square"></path>
      </svg></button>
  </div>
</form>

<form class="product-info product-info-f0ad4fc5-a941-4de7-a98a-834ecb5e3305">
  <input type="hidden" name="product_id" value="f0ad4fc5-a941-4de7-a98a-834ecb5e3305">
  <input type="hidden" name="variant_id" id="selected_variant_id_f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="3b1db809-2255-4e57-9d5d-bd0bf707fd04">
  <div class="product-info__body" data-sold-out="Sorry, the goods have been sold out." data-unavailable="This combination does not exist, please try other.">
    <div class="tw-my-2 first:tw-mt-0 last:tw-mb-0  product-info__header">
      <h2 class="product-info__header_title tw-m-0 type-title-font-family tw-text-heading tw-break-words ">Custom Mama Christmas Sweatshirt With Kids Names On Sleeve</h2>
      <div class="shoplazza-reviews-rating-wrap d-inline-flex align-items-center notranslate" role="img" aria-label="5 of 5 star, 4 reviews">
        <span data-grade="5" class="shoplazza-reviews-rating" data-comment_avg_star="5">
          <span class="shoplazza-reviews__rating-active _click_area" style=" color:rgba(206, 176, 106, 1);">
            <svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
              <path fill-rule="evenodd" clip-rule="evenodd"
                d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
                fill="rgba(206, 176, 106, 1)" id="star"></path>
            </svg>
          </span>
          <span class="shoplazza-reviews__rating-active _click_area" style=" color:rgba(206, 176, 106, 1);">
            <svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
              <path fill-rule="evenodd" clip-rule="evenodd"
                d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
                fill="rgba(206, 176, 106, 1)" id="star"></path>
            </svg>
          </span>
          <span class="shoplazza-reviews__rating-active _click_area" style=" color:rgba(206, 176, 106, 1);">
            <svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
              <path fill-rule="evenodd" clip-rule="evenodd"
                d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
                fill="rgba(206, 176, 106, 1)" id="star"></path>
            </svg>
          </span>
          <span class="shoplazza-reviews__rating-active _click_area" style=" color:rgba(206, 176, 106, 1);">
            <svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
              <path fill-rule="evenodd" clip-rule="evenodd"
                d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
                fill="rgba(206, 176, 106, 1)" id="star"></path>
            </svg>
          </span>
          <span class="shoplazza-reviews__rating-active _click_area" style=" color:rgba(206, 176, 106, 1);">
            <svg xmlns="http://www.w3.org/2000/svg" width="14px" height="13px" viewBox="0 0 14 13" fill="none">
              <path fill-rule="evenodd" clip-rule="evenodd"
                d="M7 10.024L3.54178 12.2422C3.30844 12.3918 3.01281 12.1771 3.08305 11.9089L4.12399 7.93447L0.94575 5.33096C0.731302 5.15529 0.844223 4.80775 1.12097 4.79168L5.22253 4.55352L6.71649 0.726304C6.81729 0.468066 7.18271 0.468067 7.28351 0.726305L8.77747 4.55352L12.879 4.79168C13.1558 4.80775 13.2687 5.15529 13.0542 5.33096L9.87601 7.93447L10.917 11.9089C10.9872 12.1771 10.6916 12.3918 10.4582 12.2422L7 10.024Z"
                fill="rgba(206, 176, 106, 1)" id="star"></path>
            </svg>
          </span>
        </span>
        <span class="shoplazza-reviews__rating-view notranslate">(4)<span style="color: rgba(32, 32, 32, 0.7);font-size: 14px;line-height: 16px;margin-left: 8px;">View</span></span>
      </div>
    </div>
    <div class="tw-my-4 first:tw-mt-0 last:tw-mb-0 product-info__header_price-wrapper">
      <p class="tw-m-0 lg:tw-hidden tw-mb-2 tw-body-sm tw-font-bold tw-uppercase tw-tracking-widest">Price</p>
      <div class="tw-flex tw-justify-between tw-items-center tw--mt-2">
        <div class="tw-flex tw-flex-wrap tw-items-center tw-text-price-color tw-leading-none">
          <del class="money tw-text-compare-at-price-color product-info__header_compare-at-price   tw-mt-2 tw-mr-4 tw-body-plus-4 lg:tw-mr-5">€53.95</del>
          <span class="money product-info__header_price tw-mt-2 tw-mr-4 tw-body-plus-4 lg:tw-mr-5">€34.95</span>
          <div class="product-info__save tw-mt-2 tw-text-save-color"> Save <span class="money product-info__header_save-amount">€19.00</span>
          </div>
        </div>
        <div class="product-sales right tw-mt-2"> 912 sold </div>
      </div>
    </div>
    <div class="bootstrap">
      <div class="plugin__wrappers d-flex flex-column">
        <div class="app-coupon-label">
          <div class="app-coupon-label-title">
            <svg class="app-coupon-label-title-icon" xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 22 22" fill="none">
              <path fill-rule="evenodd" clip-rule="evenodd" d="M16 5.5A1.5 1.5 0 0 0 17.5 4h3A1.5 1.5 0 0 1 22 5.5v12a1.5 1.5 0 0 1-1.5 1.5h-3a1.5 1.5 0 0 0-3 0h-13A1.5 1.5 0 0 1 0 17.5v-12A1.5 1.5 0 0 1 1.5 4h13A1.5 1.5 0 0 0 16 5.5z"
                fill="url(#paint0_linear_112_2448)"></path>
              <rect x="5" y="10.5" width="1.5" height="6" rx=".75" transform="rotate(-90 5 10.5)" fill="#FFF9F1"></rect>
              <rect x="5" y="14.5" width="1.5" height="6" rx=".75" transform="rotate(-90 5 14.5)" fill="#FFF9F1"></rect>
              <rect x="15" y="8.5" width="2" height="2" rx="1" fill="#FFF9F1"></rect>
              <rect x="15" y="12.5" width="2" height="2" rx="1" fill="#FFF9F1"></rect>
              <defs>
                <linearGradient id="paint0_linear_112_2448" y1="12.897" x2="22" y2="12.897" gradientUnits="userSpaceOnUse">
                  <stop stop-color="#F89F56"></stop>
                  <stop offset="1" stop-color="#F94138"></stop>
                </linearGradient>
              </defs>
            </svg>
            <div class="app-coupon-label-title-text">COUPON</div>
          </div>
          <div class="rightWrap">
            <div class="app-coupon-label-items">
              <div class="app-coupon-label-item" style="border-image: url(//img.fantaskycdn.com/oss/operation/28f67e75f0dd78f6e658aeaa4d41cc05_330x.svg) 6/6px/0 stretch"> 20% off </div>
              <div class="app-coupon-label-item" style="border-image: url(//img.fantaskycdn.com/oss/operation/28f67e75f0dd78f6e658aeaa4d41cc05_330x.svg) 6/6px/0 stretch"> 15% off </div>
              <div class="app-coupon-label-item" style="border-image: url(//img.fantaskycdn.com/oss/operation/28f67e75f0dd78f6e658aeaa4d41cc05_330x.svg) 6/6px/0 stretch"> 10% off </div>
            </div>
            <svg class="app-coupon-label-icon" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
              <path d="M13.212 9.574a.6.6 0 0 1 0 .848l-5.02 5.02a.3.3 0 0 1-.425 0l-.424-.423a.3.3 0 0 1 0-.425l4.596-4.596-4.596-4.596a.3.3 0 0 1 0-.424l.424-.425a.3.3 0 0 1 .424 0l5.021 5.02z" fill="#F97449"></path>
            </svg>
            <div class="app-coupon-modal" style="background: linear-gradient(90deg, #FFF8E7 0%, #FFE4A7 100%);">
              <div class="app-coupon-modal-body">
                <div class="app-coupon-modal-title" style="color: #f94539"> COUPON <div class="coupon_modal_close_icon">
                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
                      <path fill-rule="evenodd" clip-rule="evenodd"
                        d="M24 12c0 6.627-5.373 12-12 12S0 18.627 0 12 5.373 0 12 0s12 5.373 12 12zM7.415 7.354c.221-.221.58-.221.8 0l3.847 3.846 3.784-3.784a.566.566 0 1 1 .8.8L12.862 12l3.784 3.784a.566.566 0 0 1-.8.8L12.062 12.8l-3.847 3.847a.566.566 0 0 1-.8-.8L11.261 12 7.415 8.154a.566.566 0 0 1 0-.8z"
                        fill="#F97148"></path>
                    </svg>
                  </div>
                </div>
                <div class="app-coupon-modal-coupons">
                  <div class="coupon_plugin__coupon">
                    <div class="rules__line" style="background: linear-gradient(90deg, #F8A056, #F93E37)">
                      <div class="rules__first-line" style="color: #ffffff">
                        <span class="condition">Buy 4+ items get</span> <span class="off">20% OFF</span>
                        <div class="coupon_plugin__coupon-divider"></div>
                      </div>
                      <div class="rules__second-line align-items-center justify-content-center">
                        <button data-code="CL20" data-id="71df7b0d-55e9-4d21-b196-b96e4d4fc734" class="code_btn  " type="button" data-activetype="percentage" style="background: #FEE7CD; color: #F94339">
                          <span>GET</span>
                          <span>
                            <span class="notranslate coupon-line-clamp-2"> CL20 </span>
                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
                              <path fill-rule="evenodd" clip-rule="evenodd" d="M6 2v.5H4.5v-1a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1h-1V11h.5V2H6zM3 14V5h7v9H3zM1.5 4.5a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1h-8a1 1 0 0 1-1-1v-10z"
                                fill="currentColor"></path>
                            </svg>
                          </span>
                          <textarea class="coupon_code_value notranslate" style="position:absolute;left:-99999px;">CL20</textarea>
                        </button>
                        <div class="coupon__copied notranslate" style="color: #ffffff">Copy code</div>
                      </div>
                    </div>
                    <svg class="app-coupon-triangle app-coupon-triangle-0" xmlns="http://www.w3.org/2000/svg" width="106" height="96" viewBox="0 0 106 96" fill="none">
                      <path d="M102.929 68.555c6.833 12.054-1.946 26.985-15.802 26.875l-68.312-.542C4.959 94.778-3.582 79.71 3.441 67.766l34.625-58.89C45.09-3.067 62.41-2.93 69.242 9.125l33.687 59.43z" fill="#fff" fill-opacity=".11"></path>
                    </svg>
                    <svg class="app-coupon-triangle app-coupon-triangle-1" xmlns="http://www.w3.org/2000/svg" width="106" height="96" viewBox="0 0 106 96" fill="none">
                      <path d="M102.929 68.555c6.833 12.054-1.946 26.985-15.802 26.875l-68.312-.542C4.959 94.778-3.582 79.71 3.441 67.766l34.625-58.89C45.09-3.067 62.41-2.93 69.242 9.125l33.687 59.43z" fill="#fff" fill-opacity=".11"></path>
                    </svg>
                    <svg class="app-coupon-triangle app-coupon-triangle-2" xmlns="http://www.w3.org/2000/svg" width="106" height="96" viewBox="0 0 106 96" fill="none">
                      <path d="M102.929 68.555c6.833 12.054-1.946 26.985-15.802 26.875l-68.312-.542C4.959 94.778-3.582 79.71 3.441 67.766l34.625-58.89C45.09-3.067 62.41-2.93 69.242 9.125l33.687 59.43z" fill="#fff" fill-opacity=".11"></path>
                    </svg>
                  </div>
                  <div class="coupon_plugin__coupon">
                    <div class="rules__line" style="background: linear-gradient(90deg, #F8A056, #F93E37)">
                      <div class="rules__first-line" style="color: #ffffff">
                        <span class="condition">Buy 3+ items get</span> <span class="off">15% OFF</span>
                        <div class="coupon_plugin__coupon-divider"></div>
                      </div>
                      <div class="rules__second-line align-items-center justify-content-center">
                        <button data-code="CL15" data-id="afaac22a-1638-4bb5-9bde-e4cba45f06cb" class="code_btn  " type="button" data-activetype="percentage" style="background: #FEE7CD; color: #F94339">
                          <span>GET</span>
                          <span>
                            <span class="notranslate coupon-line-clamp-2"> CL15 </span>
                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
                              <path fill-rule="evenodd" clip-rule="evenodd" d="M6 2v.5H4.5v-1a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1h-1V11h.5V2H6zM3 14V5h7v9H3zM1.5 4.5a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1h-8a1 1 0 0 1-1-1v-10z"
                                fill="currentColor"></path>
                            </svg>
                          </span>
                          <textarea class="coupon_code_value notranslate" style="position:absolute;left:-99999px;">CL15</textarea>
                        </button>
                        <div class="coupon__copied notranslate" style="color: #ffffff">Copy code</div>
                      </div>
                    </div>
                    <svg class="app-coupon-triangle app-coupon-triangle-0" xmlns="http://www.w3.org/2000/svg" width="106" height="96" viewBox="0 0 106 96" fill="none">
                      <path d="M102.929 68.555c6.833 12.054-1.946 26.985-15.802 26.875l-68.312-.542C4.959 94.778-3.582 79.71 3.441 67.766l34.625-58.89C45.09-3.067 62.41-2.93 69.242 9.125l33.687 59.43z" fill="#fff" fill-opacity=".11"></path>
                    </svg>
                    <svg class="app-coupon-triangle app-coupon-triangle-1" xmlns="http://www.w3.org/2000/svg" width="106" height="96" viewBox="0 0 106 96" fill="none">
                      <path d="M102.929 68.555c6.833 12.054-1.946 26.985-15.802 26.875l-68.312-.542C4.959 94.778-3.582 79.71 3.441 67.766l34.625-58.89C45.09-3.067 62.41-2.93 69.242 9.125l33.687 59.43z" fill="#fff" fill-opacity=".11"></path>
                    </svg>
                    <svg class="app-coupon-triangle app-coupon-triangle-2" xmlns="http://www.w3.org/2000/svg" width="106" height="96" viewBox="0 0 106 96" fill="none">
                      <path d="M102.929 68.555c6.833 12.054-1.946 26.985-15.802 26.875l-68.312-.542C4.959 94.778-3.582 79.71 3.441 67.766l34.625-58.89C45.09-3.067 62.41-2.93 69.242 9.125l33.687 59.43z" fill="#fff" fill-opacity=".11"></path>
                    </svg>
                  </div>
                  <div class="coupon_plugin__coupon">
                    <div class="rules__line" style="background: linear-gradient(90deg, #F8A056, #F93E37)">
                      <div class="rules__first-line" style="color: #ffffff">
                        <span class="condition">Buy 2+ items get</span> <span class="off">10% OFF</span>
                        <div class="coupon_plugin__coupon-divider"></div>
                      </div>
                      <div class="rules__second-line align-items-center justify-content-center">
                        <button data-code="CL10" data-id="1fbdb2d9-08f3-4e80-85c3-ec02571f9a95" class="code_btn  " type="button" data-activetype="percentage" style="background: #FEE7CD; color: #F94339">
                          <span>GET</span>
                          <span>
                            <span class="notranslate coupon-line-clamp-2"> CL10 </span>
                            <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none">
                              <path fill-rule="evenodd" clip-rule="evenodd" d="M6 2v.5H4.5v-1a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1h-1V11h.5V2H6zM3 14V5h7v9H3zM1.5 4.5a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1h-8a1 1 0 0 1-1-1v-10z"
                                fill="currentColor"></path>
                            </svg>
                          </span>
                          <textarea class="coupon_code_value notranslate" style="position:absolute;left:-99999px;">CL10</textarea>
                        </button>
                        <div class="coupon__copied notranslate" style="color: #ffffff">Copy code</div>
                      </div>
                    </div>
                    <svg class="app-coupon-triangle app-coupon-triangle-0" xmlns="http://www.w3.org/2000/svg" width="106" height="96" viewBox="0 0 106 96" fill="none">
                      <path d="M102.929 68.555c6.833 12.054-1.946 26.985-15.802 26.875l-68.312-.542C4.959 94.778-3.582 79.71 3.441 67.766l34.625-58.89C45.09-3.067 62.41-2.93 69.242 9.125l33.687 59.43z" fill="#fff" fill-opacity=".11"></path>
                    </svg>
                    <svg class="app-coupon-triangle app-coupon-triangle-1" xmlns="http://www.w3.org/2000/svg" width="106" height="96" viewBox="0 0 106 96" fill="none">
                      <path d="M102.929 68.555c6.833 12.054-1.946 26.985-15.802 26.875l-68.312-.542C4.959 94.778-3.582 79.71 3.441 67.766l34.625-58.89C45.09-3.067 62.41-2.93 69.242 9.125l33.687 59.43z" fill="#fff" fill-opacity=".11"></path>
                    </svg>
                    <svg class="app-coupon-triangle app-coupon-triangle-2" xmlns="http://www.w3.org/2000/svg" width="106" height="96" viewBox="0 0 106 96" fill="none">
                      <path d="M102.929 68.555c6.833 12.054-1.946 26.985-15.802 26.875l-68.312-.542C4.959 94.778-3.582 79.71 3.441 67.766l34.625-58.89C45.09-3.067 62.41-2.93 69.242 9.125l33.687 59.43z" fill="#fff" fill-opacity=".11"></path>
                    </svg>
                  </div>
                </div>
                <div class="app-coupon-modal-close-md">
                  <div class="coupon_modal_close_icon"> Close </div>
                </div>
              </div>
              <div class="app-coupon-modal-mask"></div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="tw-mt-2 first:tw-mt-0 tw--mb-2 tw-flex tw-flex-wrap tw--mr-2">
    </div>
    <div class="product-info__variants tw-space-y-5 tw-my-5 first:tw-mt-0 last:tw-mb-0" data-soldout="Sold out">
      <div class="product-info__variants-wrapper product-info__variants_items " data-selected-variant="false">
        <p class="product-info__variants_title tw-m-0 md:tw--mb-1 tw-body-sm tw-font-bold tw-uppercase tw-tracking-widest"> style </p>
        <div class="tw-flex tw-flex-wrap tw-mb-[10px]">
          <div class="product-info__variants_value tw-relative ">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option1-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option1-0-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="Sweatshirt" checked="">
            <label class="product-info__label tw-flex tw-justify-center tw-items-center tw-min-w-[44px] tw-min-h-[44px] tw-px-4 tw-py-[14px] tw-mt-3 tw-mr-3 tw-leading-none  tw-cursor-pointer lg:tw-mt-4"
              for="option1-0-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" data-track="switch_variants">Sweatshirt</label>
          </div>
          <div class="product-info__variants_value tw-relative ">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option1-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option1-1-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="Hoodie">
            <label class="product-info__label tw-flex tw-justify-center tw-items-center tw-min-w-[44px] tw-min-h-[44px] tw-px-4 tw-py-[14px] tw-mt-3 tw-mr-3 tw-leading-none  tw-cursor-pointer lg:tw-mt-4"
              for="option1-1-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" data-track="switch_variants">Hoodie</label>
          </div>
        </div>
        <div class="product-info__variant-tips tw-text-[15px] tw-leading-none tw-text-[#F0672C] tw-font-bold tw-hidden">Please select a style</div>
      </div>
      <div class="product-info__variants-wrapper product-info__variants_items " data-selected-variant="false">
        <p class="product-info__variants_title tw-m-0 md:tw--mb-1 tw-body-sm tw-font-bold tw-uppercase tw-tracking-widest"> size </p>
        <div class="tw-flex tw-flex-wrap tw-mb-[10px]">
          <div class="product-info__variants_value tw-relative ">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option2-0-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="XS" checked="">
            <label class="product-info__label tw-flex tw-justify-center tw-items-center tw-min-w-[44px] tw-min-h-[44px] tw-px-4 tw-py-[14px] tw-mt-3 tw-mr-3 tw-leading-none  tw-cursor-pointer lg:tw-mt-4"
              for="option2-0-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" data-track="switch_variants">XS</label>
          </div>
          <div class="product-info__variants_value tw-relative ">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option2-1-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="S">
            <label class="product-info__label tw-flex tw-justify-center tw-items-center tw-min-w-[44px] tw-min-h-[44px] tw-px-4 tw-py-[14px] tw-mt-3 tw-mr-3 tw-leading-none  tw-cursor-pointer lg:tw-mt-4"
              for="option2-1-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" data-track="switch_variants">S</label>
          </div>
          <div class="product-info__variants_value tw-relative ">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option2-2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="M">
            <label class="product-info__label tw-flex tw-justify-center tw-items-center tw-min-w-[44px] tw-min-h-[44px] tw-px-4 tw-py-[14px] tw-mt-3 tw-mr-3 tw-leading-none  tw-cursor-pointer lg:tw-mt-4"
              for="option2-2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" data-track="switch_variants">M</label>
          </div>
          <div class="product-info__variants_value tw-relative ">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option2-3-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="L">
            <label class="product-info__label tw-flex tw-justify-center tw-items-center tw-min-w-[44px] tw-min-h-[44px] tw-px-4 tw-py-[14px] tw-mt-3 tw-mr-3 tw-leading-none  tw-cursor-pointer lg:tw-mt-4"
              for="option2-3-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" data-track="switch_variants">L</label>
          </div>
          <div class="product-info__variants_value tw-relative ">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option2-4-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="XL">
            <label class="product-info__label tw-flex tw-justify-center tw-items-center tw-min-w-[44px] tw-min-h-[44px] tw-px-4 tw-py-[14px] tw-mt-3 tw-mr-3 tw-leading-none  tw-cursor-pointer lg:tw-mt-4"
              for="option2-4-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" data-track="switch_variants">XL</label>
          </div>
          <div class="product-info__variants_value tw-relative ">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option2-5-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="2XL">
            <label class="product-info__label tw-flex tw-justify-center tw-items-center tw-min-w-[44px] tw-min-h-[44px] tw-px-4 tw-py-[14px] tw-mt-3 tw-mr-3 tw-leading-none  tw-cursor-pointer lg:tw-mt-4"
              for="option2-5-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" data-track="switch_variants">2XL</label>
          </div>
        </div>
        <div class="product-info__variant-tips tw-text-[15px] tw-leading-none tw-text-[#F0672C] tw-font-bold tw-hidden">Please select a size</div>
      </div>
      <div class="product-info__variants-wrapper product-info__variants_items  slider-switch " data-selected-variant="false">
        <p class="product-info__variants_title tw-m-0 md:tw--mb-1 tw-body-sm tw-font-bold tw-uppercase tw-tracking-widest"> choose design <span class="variant_color-label-wrapper ">- <span class="variant_color-label">MAMA</span></span>
        </p>
        <div class="tw-flex tw-flex-wrap tw-mb-[10px]">
          <div class="product-info__variants_value tw-relative  tw-mt-3 tw-mr-3 lg:tw-mt-4 " style="width: 60px; height: 60px;">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option3-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option3-0-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="MAMA" checked="">
            <label class="product-info__thumbnail tw-inline-block tw-w-full tw-h-full tw-bg-no-repeat tw-bg-cover tw-bg-center tw-cursor-pointer  lazyloaded" data-bgset="//img.fantaskycdn.com/b0edbe95b2219b843ca627119c775992_180.jpg"
              data-variants-value="MAMA" data-track="switch_variants" for="option3-0-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" style="background-image: url(&quot;https://img.fantaskycdn.com/b0edbe95b2219b843ca627119c775992_180.jpg&quot;);">
              <picture style="display: none;">
                <source data-srcset="//img.fantaskycdn.com/b0edbe95b2219b843ca627119c775992_180.jpg" sizes="60px" srcset="//img.fantaskycdn.com/b0edbe95b2219b843ca627119c775992_180.jpg"><img alt="" class="lazyautosizes lazyloaded" data-sizes="auto"
                  data-parent-fit="cover" sizes="60px">
              </picture>
            </label>
          </div>
          <div class="product-info__variants_value tw-relative  tw-mt-3 tw-mr-3 lg:tw-mt-4 " style="width: 60px; height: 60px;">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option3-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option3-1-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="DADA">
            <label class="product-info__thumbnail tw-inline-block tw-w-full tw-h-full tw-bg-no-repeat tw-bg-cover tw-bg-center tw-cursor-pointer  lazyloaded" data-bgset="//img.fantaskycdn.com/a214dfa342ecd494b4aa94dda84c0877_180.jpg"
              data-variants-value="DADA" data-track="switch_variants" for="option3-1-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" style="background-image: url(&quot;https://img.fantaskycdn.com/a214dfa342ecd494b4aa94dda84c0877_180.jpg&quot;);">
              <picture style="display: none;">
                <source data-srcset="//img.fantaskycdn.com/a214dfa342ecd494b4aa94dda84c0877_180.jpg" sizes="60px" srcset="//img.fantaskycdn.com/a214dfa342ecd494b4aa94dda84c0877_180.jpg"><img alt="" class="lazyautosizes lazyloaded" data-sizes="auto"
                  data-parent-fit="cover" sizes="60px">
              </picture>
            </label>
          </div>
          <div class="product-info__variants_value tw-relative  tw-mt-3 tw-mr-3 lg:tw-mt-4 " style="width: 60px; height: 60px;">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option3-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option3-2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="MOM">
            <label class="product-info__thumbnail tw-inline-block tw-w-full tw-h-full tw-bg-no-repeat tw-bg-cover tw-bg-center tw-cursor-pointer  lazyloaded" data-bgset="//img.fantaskycdn.com/4568201574ac927e6cd39552edbb4da9_180.jpg"
              data-variants-value="MOM" data-track="switch_variants" for="option3-2-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" style="background-image: url(&quot;https://img.fantaskycdn.com/4568201574ac927e6cd39552edbb4da9_180.jpg&quot;);">
              <picture style="display: none;">
                <source data-srcset="//img.fantaskycdn.com/4568201574ac927e6cd39552edbb4da9_180.jpg" sizes="60px" srcset="//img.fantaskycdn.com/4568201574ac927e6cd39552edbb4da9_180.jpg"><img alt="" class="lazyautosizes lazyloaded" data-sizes="auto"
                  data-parent-fit="cover" sizes="60px">
              </picture>
            </label>
          </div>
          <div class="product-info__variants_value tw-relative  tw-mt-3 tw-mr-3 lg:tw-mt-4 " style="width: 60px; height: 60px;">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option3-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option3-3-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="MOMMY">
            <label class="product-info__thumbnail tw-inline-block tw-w-full tw-h-full tw-bg-no-repeat tw-bg-cover tw-bg-center tw-cursor-pointer  lazyloaded" data-bgset="//img.fantaskycdn.com/8b0d802d9ba18f747f15ac1cd9d350bd_180.jpg"
              data-variants-value="MOMMY" data-track="switch_variants" for="option3-3-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" style="background-image: url(&quot;https://img.fantaskycdn.com/8b0d802d9ba18f747f15ac1cd9d350bd_180.jpg&quot;);">
              <picture style="display: none;">
                <source data-srcset="//img.fantaskycdn.com/8b0d802d9ba18f747f15ac1cd9d350bd_180.jpg" sizes="60px" srcset="//img.fantaskycdn.com/8b0d802d9ba18f747f15ac1cd9d350bd_180.jpg"><img alt="" class="lazyautosizes lazyloaded" data-sizes="auto"
                  data-parent-fit="cover" sizes="60px">
              </picture>
            </label>
          </div>
          <div class="product-info__variants_value tw-relative  tw-mt-3 tw-mr-3 lg:tw-mt-4 " style="width: 60px; height: 60px;">
            <input type="radio" class="tw-hidden product-info__variants_radio" name="option3-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" id="option3-4-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" value="NANA">
            <label class="product-info__thumbnail tw-inline-block tw-w-full tw-h-full tw-bg-no-repeat tw-bg-cover tw-bg-center tw-cursor-pointer  lazyloaded" data-bgset="//img.fantaskycdn.com/26976bbe0b3021a9c3c3c5ae5293c6cd_180.jpg"
              data-variants-value="NANA" data-track="switch_variants" for="option3-4-f0ad4fc5-a941-4de7-a98a-834ecb5e3305" style="background-image: url(&quot;https://img.fantaskycdn.com/26976bbe0b3021a9c3c3c5ae5293c6cd_180.jpg&quot;);">
              <picture style="display: none;">
                <source data-srcset="//img.fantaskycdn.com/26976bbe0b3021a9c3c3c5ae5293c6cd_180.jpg" sizes="60px" srcset="//img.fantaskycdn.com/26976bbe0b3021a9c3c3c5ae5293c6cd_180.jpg"><img alt="" class="lazyautosizes lazyloaded" data-sizes="auto"
                  data-parent-fit="cover" sizes="60px">
              </picture>
            </label>
          </div>
        </div>
        <div class="product-info__variant-tips tw-text-[15px] tw-leading-none tw-text-[#F0672C] tw-font-bold tw-hidden">Please select a choose design</div>
      </div>
    </div>
    <style id="app-parakeet-style">
      #app-parakeet *,
      #app-parakeet :after,
      #app-parakeet :before,
      .plugin-parakeet *,
      .plugin-parakeet :after,
      .plugin-parakeet :before {
        border: 0 solid #e5e7eb;
        box-sizing: border-box
      }

      #app-parakeet :after,
      #app-parakeet :before,
      .plugin-parakeet :after,
      .plugin-parakeet :before {
        --tw-content: ""
      }

      #app-parakeet html,
      .plugin-parakeet html {
        -webkit-text-size-adjust: 100%;
        font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, BlinkMacSystemFont, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
        line-height: 1.5;
        tab-size: 4
      }

      #app-parakeet body,
      .plugin-parakeet body {
        line-height: inherit;
        margin: 0
      }

      #app-parakeet hr,
      .plugin-parakeet hr {
        border-top-width: 1px;
        color: inherit;
        height: 0
      }

      #app-parakeet abbr:where([title]),
      .plugin-parakeet abbr:where([title]) {
        -webkit-text-decoration: underline dotted;
        text-decoration: underline dotted
      }

      #app-parakeet h1,
      #app-parakeet h2,
      #app-parakeet h3,
      #app-parakeet h4,
      #app-parakeet h5,
      #app-parakeet h6,
      .plugin-parakeet h1,
      .plugin-parakeet h2,
      .plugin-parakeet h3,
      .plugin-parakeet h4,
      .plugin-parakeet h5,
      .plugin-parakeet h6 {
        font-size: inherit;
        font-weight: inherit
      }

      #app-parakeet a,
      .plugin-parakeet a {
        color: inherit;
        text-decoration: inherit
      }

      #app-parakeet b,
      #app-parakeet strong,
      .plugin-parakeet b,
      .plugin-parakeet strong {
        font-weight: bolder
      }

      #app-parakeet code,
      #app-parakeet kbd,
      #app-parakeet pre,
      #app-parakeet samp,
      .plugin-parakeet code,
      .plugin-parakeet kbd,
      .plugin-parakeet pre,
      .plugin-parakeet samp {
        font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
        font-size: 1em
      }

      #app-parakeet small,
      .plugin-parakeet small {
        font-size: 80%
      }

      #app-parakeet sub,
      #app-parakeet sup,
      .plugin-parakeet sub,
      .plugin-parakeet sup {
        font-size: 75%;
        line-height: 0;
        position: relative;
        vertical-align: initial
      }

      #app-parakeet sub,
      .plugin-parakeet sub {
        bottom: -.25em
      }

      #app-parakeet sup,
      .plugin-parakeet sup {
        top: -.5em
      }

      #app-parakeet table,
      .plugin-parakeet table {
        border-collapse: collapse;
        border-color: inherit;
        text-indent: 0
      }

      #app-parakeet button,
      #app-parakeet input,
      #app-parakeet optgroup,
      #app-parakeet select,
      #app-parakeet textarea,
      .plugin-parakeet button,
      .plugin-parakeet input,
      .plugin-parakeet optgroup,
      .plugin-parakeet select,
      .plugin-parakeet textarea {
        color: inherit;
        font-family: inherit;
        font-size: 100%;
        font-weight: inherit;
        line-height: inherit;
        margin: 0;
        padding: 0
      }

      #app-parakeet button,
      #app-parakeet select,
      .plugin-parakeet button,
      .plugin-parakeet select {
        text-transform: none
      }

      #app-parakeet [type=button],
      #app-parakeet [type=reset],
      #app-parakeet [type=submit],
      #app-parakeet button,
      .plugin-parakeet [type=button],
      .plugin-parakeet [type=reset],
      .plugin-parakeet [type=submit],
      .plugin-parakeet button {
        -webkit-appearance: button;
        background-color: initial;
        background-image: none
      }

      #app-parakeet :-moz-focusring,
      .plugin-parakeet :-moz-focusring {
        outline: auto
      }

      #app-parakeet :-moz-ui-invalid,
      .plugin-parakeet :-moz-ui-invalid {
        box-shadow: none
      }

      #app-parakeet progress,
      .plugin-parakeet progress {
        vertical-align: initial
      }

      #app-parakeet ::-webkit-inner-spin-button,
      #app-parakeet ::-webkit-outer-spin-button,
      .plugin-parakeet ::-webkit-inner-spin-button,
      .plugin-parakeet ::-webkit-outer-spin-button {
        height: auto
      }

      #app-parakeet [type=search],
      .plugin-parakeet [type=search] {
        -webkit-appearance: textfield;
        outline-offset: -2px
      }

      #app-parakeet ::-webkit-search-decoration,
      .plugin-parakeet ::-webkit-search-decoration {
        -webkit-appearance: none
      }

      #app-parakeet ::-webkit-file-upload-button,
      .plugin-parakeet ::-webkit-file-upload-button {
        -webkit-appearance: button;
        font: inherit
      }

      #app-parakeet summary,
      .plugin-parakeet summary {
        display: list-item
      }

      #app-parakeet blockquote,
      #app-parakeet dd,
      #app-parakeet dl,
      #app-parakeet figure,
      #app-parakeet h1,
      #app-parakeet h2,
      #app-parakeet h3,
      #app-parakeet h4,
      #app-parakeet h5,
      #app-parakeet h6,
      #app-parakeet hr,
      #app-parakeet p,
      #app-parakeet pre,
      .plugin-parakeet blockquote,
      .plugin-parakeet dd,
      .plugin-parakeet dl,
      .plugin-parakeet figure,
      .plugin-parakeet h1,
      .plugin-parakeet h2,
      .plugin-parakeet h3,
      .plugin-parakeet h4,
      .plugin-parakeet h5,
      .plugin-parakeet h6,
      .plugin-parakeet hr,
      .plugin-parakeet p,
      .plugin-parakeet pre {
        margin: 0
      }

      #app-parakeet fieldset,
      .plugin-parakeet fieldset {
        margin: 0;
        padding: 0
      }

      #app-parakeet legend,
      .plugin-parakeet legend {
        padding: 0
      }

      #app-parakeet menu,
      #app-parakeet ol,
      #app-parakeet ul,
      .plugin-parakeet menu,
      .plugin-parakeet ol,
      .plugin-parakeet ul {
        list-style: none;
        margin: 0;
        padding: 0
      }

      #app-parakeet textarea,
      .plugin-parakeet textarea {
        resize: vertical
      }

      #app-parakeet input::-webkit-input-placeholder,
      #app-parakeet textarea::-webkit-input-placeholder,
      .plugin-parakeet input::-webkit-input-placeholder,
      .plugin-parakeet textarea::-webkit-input-placeholder {
        color: #9ca3af;
        opacity: 1
      }

      #app-parakeet input::placeholder,
      #app-parakeet textarea::placeholder,
      .plugin-parakeet input::placeholder,
      .plugin-parakeet textarea::placeholder {
        color: #9ca3af;
        opacity: 1
      }

      #app-parakeet [role=button],
      #app-parakeet button,
      .plugin-parakeet [role=button],
      .plugin-parakeet button {
        cursor: pointer
      }

      #app-parakeet :disabled,
      .plugin-parakeet :disabled {
        cursor: default
      }

      #app-parakeet audio,
      #app-parakeet canvas,
      #app-parakeet embed,
      #app-parakeet iframe,
      #app-parakeet img,
      #app-parakeet object,
      #app-parakeet svg,
      #app-parakeet video,
      .plugin-parakeet audio,
      .plugin-parakeet canvas,
      .plugin-parakeet embed,
      .plugin-parakeet iframe,
      .plugin-parakeet img,
      .plugin-parakeet object,
      .plugin-parakeet svg,
      .plugin-parakeet video {
        display: block;
        vertical-align: middle
      }

      #app-parakeet img,
      #app-parakeet video,
      .plugin-parakeet img,
      .plugin-parakeet video {
        height: auto;
        max-width: 100%
      }

      #app-parakeet *,
      #app-parakeet :after,
      #app-parakeet :before,
      .plugin-parakeet *,
      .plugin-parakeet :after,
      .plugin-parakeet :before {
        --tw-border-spacing-x: 0;
        --tw-border-spacing-y: 0;
        --tw-translate-x: 0;
        --tw-translate-y: 0;
        --tw-rotate: 0;
        --tw-skew-x: 0;
        --tw-skew-y: 0;
        --tw-scale-x: 1;
        --tw-scale-y: 1;
        --tw-pan-x: ;
        --tw-pan-y: ;
        --tw-pinch-zoom: ;
        --tw-scroll-snap-strictness: proximity;
        --tw-ordinal: ;
        --tw-slashed-zero: ;
        --tw-numeric-figure: ;
        --tw-numeric-spacing: ;
        --tw-numeric-fraction: ;
        --tw-ring-inset: ;
        --tw-ring-offset-width: 0px;
        --tw-ring-offset-color: #fff;
        --tw-ring-color: rgba(59, 130, 246, .5);
        --tw-ring-offset-shadow: 0 0 transparent;
        --tw-ring-shadow: 0 0 transparent;
        --tw-shadow: 0 0 transparent;
        --tw-shadow-colored: 0 0 transparent;
        --tw-blur: ;
        --tw-brightness: ;
        --tw-contrast: ;
        --tw-grayscale: ;
        --tw-hue-rotate: ;
        --tw-invert: ;
        --tw-saturate: ;
        --tw-sepia: ;
        --tw-drop-shadow: ;
        --tw-backdrop-blur: ;
        --tw-backdrop-brightness: ;
        --tw-backdrop-contrast: ;
        --tw-backdrop-grayscale: ;
        --tw-backdrop-hue-rotate: ;
        --tw-backdrop-invert: ;
        --tw-backdrop-opacity: ;
        --tw-backdrop-saturate: ;
        --tw-backdrop-sepia:
      }

      #app-parakeet ::-webkit-backdrop,
      .plugin-parakeet ::-webkit-backdrop {
        --tw-border-spacing-x: 0;
        --tw-border-spacing-y: 0;
        --tw-translate-x: 0;
        --tw-translate-y: 0;
        --tw-rotate: 0;
        --tw-skew-x: 0;
        --tw-skew-y: 0;
        --tw-scale-x: 1;
        --tw-scale-y: 1;
        --tw-pan-x: ;
        --tw-pan-y: ;
        --tw-pinch-zoom: ;
        --tw-scroll-snap-strictness: proximity;
        --tw-ordinal: ;
        --tw-slashed-zero: ;
        --tw-numeric-figure: ;
        --tw-numeric-spacing: ;
        --tw-numeric-fraction: ;
        --tw-ring-inset: ;
        --tw-ring-offset-width: 0px;
        --tw-ring-offset-color: #fff;
        --tw-ring-color: rgba(59, 130, 246, .5);
        --tw-ring-offset-shadow: 0 0 transparent;
        --tw-ring-shadow: 0 0 transparent;
        --tw-shadow: 0 0 transparent;
        --tw-shadow-colored: 0 0 transparent;
        --tw-blur: ;
        --tw-brightness: ;
        --tw-contrast: ;
        --tw-grayscale: ;
        --tw-hue-rotate: ;
        --tw-invert: ;
        --tw-saturate: ;
        --tw-sepia: ;
        --tw-drop-shadow: ;
        --tw-backdrop-blur: ;
        --tw-backdrop-brightness: ;
        --tw-backdrop-contrast: ;
        --tw-backdrop-grayscale: ;
        --tw-backdrop-hue-rotate: ;
        --tw-backdrop-invert: ;
        --tw-backdrop-opacity: ;
        --tw-backdrop-saturate: ;
        --tw-backdrop-sepia:
      }

      #app-parakeet ::backdrop,
      .plugin-parakeet ::backdrop {
        --tw-border-spacing-x: 0;
        --tw-border-spacing-y: 0;
        --tw-translate-x: 0;
        --tw-translate-y: 0;
        --tw-rotate: 0;
        --tw-skew-x: 0;
        --tw-skew-y: 0;
        --tw-scale-x: 1;
        --tw-scale-y: 1;
        --tw-pan-x: ;
        --tw-pan-y: ;
        --tw-pinch-zoom: ;
        --tw-scroll-snap-strictness: proximity;
        --tw-ordinal: ;
        --tw-slashed-zero: ;
        --tw-numeric-figure: ;
        --tw-numeric-spacing: ;
        --tw-numeric-fraction: ;
        --tw-ring-inset: ;
        --tw-ring-offset-width: 0px;
        --tw-ring-offset-color: #fff;
        --tw-ring-color: rgba(59, 130, 246, .5);
        --tw-ring-offset-shadow: 0 0 transparent;
        --tw-ring-shadow: 0 0 transparent;
        --tw-shadow: 0 0 transparent;
        --tw-shadow-colored: 0 0 transparent;
        --tw-blur: ;
        --tw-brightness: ;
        --tw-contrast: ;
        --tw-grayscale: ;
        --tw-hue-rotate: ;
        --tw-invert: ;
        --tw-saturate: ;
        --tw-sepia: ;
        --tw-drop-shadow: ;
        --tw-backdrop-blur: ;
        --tw-backdrop-brightness: ;
        --tw-backdrop-contrast: ;
        --tw-backdrop-grayscale: ;
        --tw-backdrop-hue-rotate: ;
        --tw-backdrop-invert: ;
        --tw-backdrop-opacity: ;
        --tw-backdrop-saturate: ;
        --tw-backdrop-sepia:
      }

      #app-parakeet .pk-pointer-events-none,
      .plugin-parakeet .pk-pointer-events-none {
        pointer-events: none
      }

      #app-parakeet .pk-absolute,
      .plugin-parakeet .pk-absolute {
        position: absolute
      }

      #app-parakeet .pk-relative,
      .plugin-parakeet .pk-relative {
        position: relative
      }

      #app-parakeet .pk-top-0,
      .plugin-parakeet .pk-top-0 {
        top: 0
      }

      #app-parakeet .pk-left-0,
      .plugin-parakeet .pk-left-0 {
        left: 0
      }

      #app-parakeet .pk--top-3,
      .plugin-parakeet .pk--top-3 {
        top: -.75rem
      }

      #app-parakeet .pk--right-3,
      .plugin-parakeet .pk--right-3 {
        right: -.75rem
      }

      #app-parakeet .pk-z-\[9999\],
      .plugin-parakeet .pk-z-\[9999\] {
        z-index: 9999
      }

      #app-parakeet .pk-my-6,
      .plugin-parakeet .pk-my-6 {
        margin-bottom: 1.5rem;
        margin-top: 1.5rem
      }

      #app-parakeet .pk-mx-1,
      .plugin-parakeet .pk-mx-1 {
        margin-left: .25rem;
        margin-right: .25rem
      }

      #app-parakeet .pk--mx-4,
      .plugin-parakeet .pk--mx-4 {
        margin-left: -1rem;
        margin-right: -1rem
      }

      #app-parakeet .pk-my-0,
      .plugin-parakeet .pk-my-0 {
        margin-bottom: 0;
        margin-top: 0
      }

      #app-parakeet .pk-ml-\[10px\],
      .plugin-parakeet .pk-ml-\[10px\] {
        margin-left: 10px
      }

      #app-parakeet .pk-mr-\[10px\],
      .plugin-parakeet .pk-mr-\[10px\] {
        margin-right: 10px
      }

      #app-parakeet .pk-mb-4,
      .plugin-parakeet .pk-mb-4 {
        margin-bottom: 1rem
      }

      #app-parakeet .pk-mr-2\.5,
      .plugin-parakeet .pk-mr-2\.5 {
        margin-right: .625rem
      }

      #app-parakeet .pk-mr-2,
      .plugin-parakeet .pk-mr-2 {
        margin-right: .5rem
      }

      #app-parakeet .pk-ml-1\.5,
      .plugin-parakeet .pk-ml-1\.5 {
        margin-left: .375rem
      }

      #app-parakeet .pk-ml-1,
      .plugin-parakeet .pk-ml-1 {
        margin-left: .25rem
      }

      #app-parakeet .pk-mb-3,
      .plugin-parakeet .pk-mb-3 {
        margin-bottom: .75rem
      }

      #app-parakeet .pk-mb-2\.5,
      .plugin-parakeet .pk-mb-2\.5 {
        margin-bottom: .625rem
      }

      #app-parakeet .pk-mb-2,
      .plugin-parakeet .pk-mb-2 {
        margin-bottom: .5rem
      }

      #app-parakeet .pk-mt-2,
      .plugin-parakeet .pk-mt-2 {
        margin-top: .5rem
      }

      #app-parakeet .\!pk-mt-7,
      .plugin-parakeet .\!pk-mt-7 {
        margin-top: 1.75rem !important
      }

      #app-parakeet .pk-ml-2,
      .plugin-parakeet .pk-ml-2 {
        margin-left: .5rem
      }

      #app-parakeet .pk--mt-0\.5,
      .plugin-parakeet .pk--mt-0\.5 {
        margin-top: -.125rem
      }

      #app-parakeet .pk--mb-1\.5,
      .plugin-parakeet .pk--mb-1\.5 {
        margin-bottom: -.375rem
      }

      #app-parakeet .pk--mt-0,
      .plugin-parakeet .pk--mt-0 {
        margin-top: 0
      }

      #app-parakeet .pk--mb-1,
      .plugin-parakeet .pk--mb-1 {
        margin-bottom: -.25rem
      }

      #app-parakeet .\!pk-mb-0,
      .plugin-parakeet .\!pk-mb-0 {
        margin-bottom: 0 !important
      }

      #app-parakeet .pk-ml-3,
      .plugin-parakeet .pk-ml-3 {
        margin-left: .75rem
      }

      #app-parakeet .pk-ml-auto,
      .plugin-parakeet .pk-ml-auto {
        margin-left: auto
      }

      #app-parakeet .pk-mr-4,
      .plugin-parakeet .pk-mr-4 {
        margin-right: 1rem
      }

      #app-parakeet .pk--mt-1\.5,
      .plugin-parakeet .pk--mt-1\.5 {
        margin-top: -.375rem
      }

      #app-parakeet .pk--ml-2,
      .plugin-parakeet .pk--ml-2 {
        margin-left: -.5rem
      }

      #app-parakeet .pk--mt-1,
      .plugin-parakeet .pk--mt-1 {
        margin-top: -.25rem
      }

      #app-parakeet .pk-mt-3,
      .plugin-parakeet .pk-mt-3 {
        margin-top: .75rem
      }

      #app-parakeet .pk-block,
      .plugin-parakeet .pk-block {
        display: block
      }

      #app-parakeet .pk-inline-block,
      .plugin-parakeet .pk-inline-block {
        display: inline-block
      }

      #app-parakeet .pk-flex,
      .plugin-parakeet .pk-flex {
        display: flex
      }

      #app-parakeet .pk-grid,
      .plugin-parakeet .pk-grid {
        display: grid
      }

      #app-parakeet .pk-h-4\.5,
      .plugin-parakeet .pk-h-4\.5 {
        height: 1.125rem
      }

      #app-parakeet .pk-h-4,
      .plugin-parakeet .pk-h-4 {
        height: 1rem
      }

      #app-parakeet .pk-h-11\.5,
      .plugin-parakeet .pk-h-11\.5 {
        height: 2.875rem
      }

      #app-parakeet .pk-h-11,
      .plugin-parakeet .pk-h-11 {
        height: 2.75rem
      }

      #app-parakeet .pk-h-full,
      .plugin-parakeet .pk-h-full {
        height: 100%
      }

      #app-parakeet .pk-h-18,
      .plugin-parakeet .pk-h-18 {
        height: 4.5rem
      }

      #app-parakeet .pk-h-23,
      .plugin-parakeet .pk-h-23 {
        height: 5.75rem
      }

      #app-parakeet .pk-h-20,
      .plugin-parakeet .pk-h-20 {
        height: 5rem
      }

      #app-parakeet .pk-w-4\.5,
      .plugin-parakeet .pk-w-4\.5 {
        width: 1.125rem
      }

      #app-parakeet .pk-w-4,
      .plugin-parakeet .pk-w-4 {
        width: 1rem
      }

      #app-parakeet .pk-w-full,
      .plugin-parakeet .pk-w-full {
        width: 100%
      }

      #app-parakeet .pk-w-11,
      .plugin-parakeet .pk-w-11 {
        width: 2.75rem
      }

      #app-parakeet .pk-w-18,
      .plugin-parakeet .pk-w-18 {
        width: 4.5rem
      }

      #app-parakeet .pk-w-23,
      .plugin-parakeet .pk-w-23 {
        width: 5.75rem
      }

      #app-parakeet .pk-w-20,
      .plugin-parakeet .pk-w-20 {
        width: 5rem
      }

      #app-parakeet .pk-w-fit,
      .plugin-parakeet .pk-w-fit {
        width: -webkit-fit-content;
        width: fit-content
      }

      #app-parakeet .pk-min-w-\[46px\],
      .plugin-parakeet .pk-min-w-\[46px\] {
        min-width: 46px
      }

      #app-parakeet .pk-min-w-0,
      .plugin-parakeet .pk-min-w-0 {
        min-width: 0
      }

      #app-parakeet .pk-max-w-\[50vw\],
      .plugin-parakeet .pk-max-w-\[50vw\] {
        max-width: 50vw
      }

      #app-parakeet .pk-flex-none,
      .plugin-parakeet .pk-flex-none {
        flex: none
      }

      #app-parakeet .pk-flex-1,
      .plugin-parakeet .pk-flex-1 {
        flex: 1 1 0%
      }

      #app-parakeet .pk-cursor-pointer,
      .plugin-parakeet .pk-cursor-pointer {
        cursor: pointer
      }

      #app-parakeet .pk-cursor-text,
      .plugin-parakeet .pk-cursor-text {
        cursor: text
      }

      #app-parakeet .pk-select-none,
      .plugin-parakeet .pk-select-none {
        -webkit-user-select: none;
        user-select: none
      }

      #app-parakeet .pk-appearance-none,
      .plugin-parakeet .pk-appearance-none {
        -webkit-appearance: none;
        appearance: none
      }

      #app-parakeet .pk-grid-flow-col,
      .plugin-parakeet .pk-grid-flow-col {
        grid-auto-flow: column
      }

      #app-parakeet .pk-grid-rows-\[auto\,auto\,auto\,auto\],
      .plugin-parakeet .pk-grid-rows-\[auto\,auto\,auto\,auto\] {
        grid-template-rows: auto auto auto auto
      }

      #app-parakeet .pk-flex-col,
      .plugin-parakeet .pk-flex-col {
        flex-direction: column
      }

      #app-parakeet .pk-flex-wrap,
      .plugin-parakeet .pk-flex-wrap {
        flex-wrap: wrap
      }

      #app-parakeet .pk-items-center,
      .plugin-parakeet .pk-items-center {
        align-items: center
      }

      #app-parakeet .pk-justify-center,
      .plugin-parakeet .pk-justify-center {
        justify-content: center
      }

      #app-parakeet .pk-gap-4,
      .plugin-parakeet .pk-gap-4 {
        gap: 1rem
      }

      #app-parakeet .pk-gap-x-3,
      .plugin-parakeet .pk-gap-x-3 {
        column-gap: .75rem
      }

      #app-parakeet .pk-gap-y-4,
      .plugin-parakeet .pk-gap-y-4 {
        row-gap: 1rem
      }

      #app-parakeet .pk-space-y-4>:not([hidden])~:not([hidden]),
      .plugin-parakeet .pk-space-y-4>:not([hidden])~:not([hidden]) {
        --tw-space-y-reverse: 0;
        margin-bottom: calc(1rem*var(--tw-space-y-reverse));
        margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)))
      }

      #app-parakeet .pk-space-y-5>:not([hidden])~:not([hidden]),
      .plugin-parakeet .pk-space-y-5>:not([hidden])~:not([hidden]) {
        --tw-space-y-reverse: 0;
        margin-bottom: calc(1.25rem*var(--tw-space-y-reverse));
        margin-top: calc(1.25rem*(1 - var(--tw-space-y-reverse)))
      }

      #app-parakeet .pk-self-center,
      .plugin-parakeet .pk-self-center {
        align-self: center
      }

      #app-parakeet .pk-overflow-hidden,
      .plugin-parakeet .pk-overflow-hidden {
        overflow: hidden
      }

      #app-parakeet .pk-truncate,
      .plugin-parakeet .pk-truncate {
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap
      }

      #app-parakeet .pk-break-words,
      .plugin-parakeet .pk-break-words {
        overflow-wrap: break-word
      }

      #app-parakeet .pk-break-all,
      .plugin-parakeet .pk-break-all {
        word-break: break-all
      }

      #app-parakeet .pk-rounded-full,
      .plugin-parakeet .pk-rounded-full {
        border-radius: 9999px
      }

      #app-parakeet .pk-rounded-md,
      .plugin-parakeet .pk-rounded-md {
        border-radius: .375rem
      }

      #app-parakeet .pk-rounded,
      .plugin-parakeet .pk-rounded {
        border-radius: .25rem
      }

      #app-parakeet .pk-rounded-\[3px\],
      .plugin-parakeet .pk-rounded-\[3px\] {
        border-radius: 3px
      }

      #app-parakeet .pk-border-\[5px\],
      .plugin-parakeet .pk-border-\[5px\] {
        border-width: 5px
      }

      #app-parakeet .pk-border-2,
      .plugin-parakeet .pk-border-2 {
        border-width: 2px
      }

      #app-parakeet .pk-border,
      .plugin-parakeet .pk-border {
        border-width: 1px
      }

      #app-parakeet .pk-border-0,
      .plugin-parakeet .pk-border-0 {
        border-width: 0
      }

      #app-parakeet .pk-border-solid,
      .plugin-parakeet .pk-border-solid {
        border-style: solid
      }

      #app-parakeet .pk-border-dashed,
      .plugin-parakeet .pk-border-dashed {
        border-style: dashed
      }

      #app-parakeet .pk-border-transparent,
      .plugin-parakeet .pk-border-transparent {
        border-color: transparent
      }

      #app-parakeet .pk-border-\[\#333\],
      .plugin-parakeet .pk-border-\[\#333\] {
        --tw-border-opacity: 1;
        border-color: rgba(51, 51, 51, var(--tw-border-opacity))
      }

      #app-parakeet .pk-border-\[\#DB393A\],
      .plugin-parakeet .pk-border-\[\#DB393A\] {
        --tw-border-opacity: 1;
        border-color: rgba(219, 57, 58, var(--tw-border-opacity))
      }

      #app-parakeet .pk-border-\[\#D1D1D1\],
      .plugin-parakeet .pk-border-\[\#D1D1D1\] {
        --tw-border-opacity: 1;
        border-color: rgba(209, 209, 209, var(--tw-border-opacity))
      }

      #app-parakeet .pk-border-\[\#d9d9d9\],
      .plugin-parakeet .pk-border-\[\#d9d9d9\] {
        --tw-border-opacity: 1;
        border-color: rgba(217, 217, 217, var(--tw-border-opacity))
      }

      #app-parakeet .pk-border-t-white,
      .plugin-parakeet .pk-border-t-white {
        --tw-border-opacity: 1;
        border-top-color: rgba(255, 255, 255, var(--tw-border-opacity))
      }

      #app-parakeet .pk-bg-\[\#E6E6E6\]\/40,
      .plugin-parakeet .pk-bg-\[\#E6E6E6\]\/40 {
        background-color: hsla(0, 0%, 90%, .4)
      }

      #app-parakeet .pk-bg-white,
      .plugin-parakeet .pk-bg-white {
        --tw-bg-opacity: 1;
        background-color: rgba(255, 255, 255, var(--tw-bg-opacity))
      }

      #app-parakeet .pk-bg-transparent,
      .plugin-parakeet .pk-bg-transparent {
        background-color: initial
      }

      #app-parakeet .pk-bg-\[\#fdfdfd\],
      .plugin-parakeet .pk-bg-\[\#fdfdfd\] {
        --tw-bg-opacity: 1;
        background-color: rgba(253, 253, 253, var(--tw-bg-opacity))
      }

      #app-parakeet .pk-bg-\[\#F6F6F7\],
      .plugin-parakeet .pk-bg-\[\#F6F6F7\] {
        --tw-bg-opacity: 1;
        background-color: rgba(246, 246, 247, var(--tw-bg-opacity))
      }

      #app-parakeet .pk-object-contain,
      .plugin-parakeet .pk-object-contain {
        object-fit: contain
      }

      #app-parakeet .pk-object-cover,
      .plugin-parakeet .pk-object-cover {
        object-fit: cover
      }

      #app-parakeet .pk-object-center,
      .plugin-parakeet .pk-object-center {
        object-position: center
      }

      #app-parakeet .pk-py-2,
      .plugin-parakeet .pk-py-2 {
        padding-bottom: .5rem;
        padding-top: .5rem
      }

      #app-parakeet .pk-px-3,
      .plugin-parakeet .pk-px-3 {
        padding-left: .75rem;
        padding-right: .75rem
      }

      #app-parakeet .pk-px-5,
      .plugin-parakeet .pk-px-5 {
        padding-left: 1.25rem;
        padding-right: 1.25rem
      }

      #app-parakeet .pk-px-4,
      .plugin-parakeet .pk-px-4 {
        padding-left: 1rem;
        padding-right: 1rem
      }

      #app-parakeet .pk-py-1\.5,
      .plugin-parakeet .pk-py-1\.5 {
        padding-bottom: .375rem;
        padding-top: .375rem
      }

      #app-parakeet .pk-py-1,
      .plugin-parakeet .pk-py-1 {
        padding-bottom: .25rem;
        padding-top: .25rem
      }

      #app-parakeet .pk-py-3\.5,
      .plugin-parakeet .pk-py-3\.5 {
        padding-bottom: .875rem;
        padding-top: .875rem
      }

      #app-parakeet .pk-py-3,
      .plugin-parakeet .pk-py-3 {
        padding-bottom: .75rem;
        padding-top: .75rem
      }

      #app-parakeet .pk-pt-2,
      .plugin-parakeet .pk-pt-2 {
        padding-top: .5rem
      }

      #app-parakeet .pk-pb-1,
      .plugin-parakeet .pk-pb-1 {
        padding-bottom: .25rem
      }

      #app-parakeet .pk-pl-4,
      .plugin-parakeet .pk-pl-4 {
        padding-left: 1rem
      }

      #app-parakeet .pk-pr-10\.5,
      .plugin-parakeet .pk-pr-10\.5 {
        padding-right: 2.625rem
      }

      #app-parakeet .pk-pr-10,
      .plugin-parakeet .pk-pr-10 {
        padding-right: 2.5rem
      }

      #app-parakeet .\!pk-text-\[13px\],
      .plugin-parakeet .\!pk-text-\[13px\] {
        font-size: 13px !important
      }

      #app-parakeet .\!pk-text-\[14px\],
      .plugin-parakeet .\!pk-text-\[14px\] {
        font-size: 14px !important
      }

      #app-parakeet .\!pk-text-\[15px\],
      .plugin-parakeet .\!pk-text-\[15px\] {
        font-size: 15px !important
      }

      #app-parakeet .pk-text-\[14px\],
      .plugin-parakeet .pk-text-\[14px\] {
        font-size: 14px
      }

      #app-parakeet .pk-text-sm,
      .plugin-parakeet .pk-text-sm {
        font-size: .875rem;
        line-height: 1.25rem
      }

      #app-parakeet .pk-text-xs,
      .plugin-parakeet .pk-text-xs {
        font-size: .75rem;
        line-height: 1rem
      }

      #app-parakeet .pk-text-\[15px\],
      .plugin-parakeet .pk-text-\[15px\] {
        font-size: 15px
      }

      #app-parakeet .\!pk-text-\[16px\],
      .plugin-parakeet .\!pk-text-\[16px\] {
        font-size: 16px !important
      }

      #app-parakeet .pk-font-semibold,
      .plugin-parakeet .pk-font-semibold {
        font-weight: 600
      }

      #app-parakeet .pk-font-medium,
      .plugin-parakeet .pk-font-medium {
        font-weight: 500
      }

      #app-parakeet .pk-leading-none,
      .plugin-parakeet .pk-leading-none {
        line-height: 1
      }

      #app-parakeet .pk-leading-5,
      .plugin-parakeet .pk-leading-5 {
        line-height: 1.25rem
      }

      #app-parakeet .pk-leading-\[0px\],
      .plugin-parakeet .pk-leading-\[0px\] {
        line-height: 0px
      }

      #app-parakeet .pk-text-\[\#DB393A\],
      .plugin-parakeet .pk-text-\[\#DB393A\] {
        --tw-text-opacity: 1;
        color: rgba(219, 57, 58, var(--tw-text-opacity))
      }

      #app-parakeet .pk-text-\[\#7A7A7A\],
      .plugin-parakeet .pk-text-\[\#7A7A7A\] {
        --tw-text-opacity: 1;
        color: rgba(122, 122, 122, var(--tw-text-opacity))
      }

      #app-parakeet .pk-text-\[\#d2d5d8\],
      .plugin-parakeet .pk-text-\[\#d2d5d8\] {
        --tw-text-opacity: 1;
        color: rgba(210, 213, 216, var(--tw-text-opacity))
      }

      #app-parakeet .pk-text-\[\#93989D\],
      .plugin-parakeet .pk-text-\[\#93989D\] {
        --tw-text-opacity: 1;
        color: rgba(147, 152, 157, var(--tw-text-opacity))
      }

      #app-parakeet .pk-text-\[\#292929\]\/75,
      .plugin-parakeet .pk-text-\[\#292929\]\/75 {
        color: rgba(41, 41, 41, .75)
      }

      #app-parakeet .pk-text-opacity-80,
      .plugin-parakeet .pk-text-opacity-80 {
        --tw-text-opacity: 0.8
      }

      #app-parakeet .pk-opacity-0,
      .plugin-parakeet .pk-opacity-0 {
        opacity: 0
      }

      #app-parakeet .pk-shadow-\[0px_4px_18px_rgb\(0_0_0_\/_10\%\)\],
      .plugin-parakeet .pk-shadow-\[0px_4px_18px_rgb\(0_0_0_\/_10\%\)\] {
        --tw-shadow: 0px 4px 18px rgba(0, 0, 0, .1);
        --tw-shadow-colored: 0px 4px 18px var(--tw-shadow-color);
        box-shadow: var(--tw-ring-offset-shadow, 0 0 transparent), var(--tw-ring-shadow, 0 0 transparent), var(--tw-shadow)
      }

      #app-parakeet .pk-outline-none,
      .plugin-parakeet .pk-outline-none {
        outline: 2px solid transparent;
        outline-offset: 2px
      }

      #app-parakeet .pk-ring-2,
      .plugin-parakeet .pk-ring-2 {
        --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
        --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
        box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 transparent)
      }

      #app-parakeet .pk-ring-\[\#333\],
      .plugin-parakeet .pk-ring-\[\#333\] {
        --tw-ring-opacity: 1;
        --tw-ring-color: rgba(51, 51, 51, var(--tw-ring-opacity))
      }

      #app-parakeet .pk-ring-offset-2,
      .plugin-parakeet .pk-ring-offset-2 {
        --tw-ring-offset-width: 2px
      }

      #app-parakeet .placeholder\:pk-text-\[color\:\#93989D\]::-webkit-input-placeholder,
      .plugin-parakeet .placeholder\:pk-text-\[color\:\#93989D\]::-webkit-input-placeholder {
        --tw-text-opacity: 1;
        color: rgba(147, 152, 157, var(--tw-text-opacity))
      }

      #app-parakeet .placeholder\:pk-text-\[color\:\#93989D\]::placeholder,
      .plugin-parakeet .placeholder\:pk-text-\[color\:\#93989D\]::placeholder {
        --tw-text-opacity: 1;
        color: rgba(147, 152, 157, var(--tw-text-opacity))
      }

      #app-parakeet .last\:pk-mb-0:last-child,
      .plugin-parakeet .last\:pk-mb-0:last-child {
        margin-bottom: 0
      }

      #app-parakeet .hover\:pk-bg-\[\#f6f6f7\]:hover,
      .plugin-parakeet .hover\:pk-bg-\[\#f6f6f7\]:hover {
        --tw-bg-opacity: 1;
        background-color: rgba(246, 246, 247, var(--tw-bg-opacity))
      }

      #app-parakeet .focus\:pk-border-\[\#333\]:focus,
      .plugin-parakeet .focus\:pk-border-\[\#333\]:focus {
        --tw-border-opacity: 1;
        border-color: rgba(51, 51, 51, var(--tw-border-opacity))
      }

      @media (min-width:768px) {

        #app-parakeet .md\:pk-max-w-\[33vw\],
        .plugin-parakeet .md\:pk-max-w-\[33vw\] {
          max-width: 33vw
        }

        #app-parakeet .md\:pk-text-base,
        .plugin-parakeet .md\:pk-text-base {
          font-size: 1rem;
          line-height: 1.5rem
        }

        #app-parakeet .md\:pk-text-sm,
        .plugin-parakeet .md\:pk-text-sm {
          font-size: .875rem;
          line-height: 1.25rem
        }
      }

      @media (min-width:1024px) {

        #app-parakeet .lg\:pk-px-8,
        .plugin-parakeet .lg\:pk-px-8 {
          padding-left: 2rem;
          padding-right: 2rem
        }
      }

      .TooltipIconLarge-module_large_tooltip__gzcyR {
        align-items: center;
        background: #fff;
        border-radius: 6px;
        box-shadow: 0 4px 36px 0 rgba(51, 51, 51, .08) !important;
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        flex-wrap: wrap;
        gap: 8px !important;
        padding: 8px !important;
        width: 136px
      }

      .TooltipIconLarge-module_large_tooltip_img__rpH1F {
        border-radius: 3px;
        height: 120px !important;
        width: 120px !important
      }

      @media (max-width:959px) {
        .TooltipIconLarge-module_large_tooltip__gzcyR {
          width: 104px !important
        }

        .TooltipIconLarge-module_large_tooltip_img__rpH1F {
          border-radius: 3px;
          height: 88px !important;
          width: 88px !important
        }
      }

      .Dropdown-module_dropdown-label__8sSmb[\:has\(select\:focus\)] {
        border: 1px solid #333 !important
      }

      .Dropdown-module_dropdown-label__8sSmb:has(select:focus) {
        border: 1px solid #333 !important
      }

      .Text-module_text-label__8sMmT[\:has\(input\:focus\)] {
        border: 1px solid #333
      }

      .Text-module_text-label__8sMmT:has(input:focus) {
        border: 1px solid #333
      }

      .Text-module_text_preview_contaniner__X8vAR {
        display: flex;
        flex-direction: column;
        flex-wrap: wrap;
        gap: 20px;
        margin-top: 20px
      }

      .Text-module_font_color_area__Zch0o,
      .Text-module_font_family_area__BUzEb,
      .Text-module_font_size_area__KmeEO {
        align-items: flex-start;
        display: flex;
        flex-direction: column;
        gap: 12px;
        width: 100%
      }

      .Text-module_preview_item_label__akFsR {
        color: rgba(51, 51, 51, .9);
        font-size: 15px;
        line-height: 130%
      }

      .Text-module_color_block_wrapper__0K3rY {
        align-items: flex-start;
        align-self: stretch;
        display: flex;
        flex-wrap: wrap;
        gap: 4px;
        width: 100%
      }

      .Text-module_color_block__8LhBv {
        align-items: center;
        border-radius: 6px;
        box-sizing: border-box;
        cursor: pointer;
        display: flex;
        height: 52px;
        justify-content: center;
        padding: 0;
        width: 52px
      }

      .Text-module_font_family_select_wrapper__N-f37 {
        border: 1px solid rgba(51, 51, 51, .12) !important;
        border-radius: 4px;
        overflow: hidden;
        position: relative;
        width: 100%
      }

      .Text-module_font_family_select__otjrz {
        -webkit-appearance: none;
        appearance: none;
        background: #fff;
        border: none !important;
        color: #333 !important;
        cursor: pointer;
        font-size: 14px !important;
        font-weight: 500 !important;
        height: 100%;
        line-height: 130% !important;
        overflow: hidden;
        padding: 14px 42px 14px 16px !important;
        text-overflow: ellipsis;
        white-space: nowrap;
        width: 100%
      }

      .Text-module_arrow_down_icon__GZiHO {
        cursor: pointer;
        position: absolute;
        right: 16px;
        top: 16px
      }

      .Text-module_font_size_wrapper__TRp3a {
        -webkit-tap-highlight-color: #fff;
        align-items: center;
        background: #fff;
        border: 1px solid rgba(51, 51, 51, .12) !important;
        border-radius: 4px;
        box-sizing: border-box;
        display: flex;
        gap: 10px;
        height: 44px;
        outline: none;
        padding: 5px 39px 5px 16px;
        position: relative;
        width: 120px
      }

      .Text-module_input_up__huYER {
        cursor: pointer;
        position: absolute;
        right: 5px;
        top: 3px
      }

      .Text-module_input_up__huYER:hover rect {
        fill: #dbdddf
      }

      .Text-module_input_up__huYER:active rect {
        fill: #c9ccd0
      }

      .Text-module_input_down__g1FF8 {
        cursor: pointer;
        position: absolute;
        right: 5px;
        top: 23px
      }

      .Text-module_input_down__g1FF8:active rect {
        fill: #c9ccd0
      }

      .Text-module_font_size_input__fMl0u {
        -webkit-appearance: none !important;
        appearance: none !important;
        font-size: 14px !important;
        font-weight: 500 !important;
        height: 100%;
        line-height: 130% !important;
        outline: none !important;
        width: 100%
      }

      .Checkbox-module_checkbox_img__wHiW3 {
        border-radius: 3px;
        height: 52px !important;
        margin-left: 8px;
        width: 52px
      }

      .Checkbox-module_checkbox_img_default__S0ISH {
        align-items: center;
        background-color: #f5f5f5;
        border-radius: 3px;
        display: flex;
        height: 52px !important;
        justify-content: center;
        margin-left: 8px;
        width: 52px
      }

      .Checkbox-module_checkbox_row__MJZge {
        align-items: stretch !important;
        display: flex !important;
        flex-wrap: wrap !important;
        gap: 12px !important;
        margin-left: 0 !important;
        width: 100% !important
      }

      .Checkbox-module_checkbox_row__MJZge>label {
        background: #fff !important;
        border: 1px solid #e6e6e6 !important;
        border-radius: 6px !important;
        box-sizing: border-box !important;
        display: flex !important;
        flex-direction: column !important;
        flex-wrap: wrap !important;
        margin-bottom: 0 !important;
        min-height: 125px !important;
        padding: 8px 8px 10px !important;
        width: 118px !important
      }

      .Checkbox-module_checkbox_row__MJZge>.Checkbox-module_label_checked__YpN49 {
        background: #fff !important;
        border: 1px solid #333 !important;
        border-radius: 6px !important
      }

      .Checkbox-module_checkbox_row__MJZge>label * {
        margin: 0 !important
      }

      .Checkbox-module_checkbox_row__MJZge>label>svg {
        margin-bottom: 8px !important
      }

      .Checkbox-module_checkbox_row__MJZge>label>span {
        margin-top: 5px !important
      }

      .Checkbox-module_checkbox_row__MJZge .Checkbox-module_checkbox_img__wHiW3,
      .Checkbox-module_checkbox_row__MJZge .Checkbox-module_checkbox_img_default__S0ISH {
        height: 66px !important;
        object-fit: contain;
        width: 66px !important
      }

      @media (max-width:959px) {
        .Checkbox-module_checkbox_row__MJZge>label {
          min-height: 111px !important;
          width: 106px !important
        }

        .Checkbox-module_checkbox_row__MJZge .Checkbox-module_checkbox_img__wHiW3,
        .Checkbox-module_checkbox_row__MJZge .Checkbox-module_checkbox_img_default__S0ISH {
          height: 52px !important;
          object-fit: contain;
          width: 52px !important
        }
      }

      .common-module_flex__7RXvG {
        display: flex
      }

      .common-module_flex_center_y__ZWb6u {
        align-items: center;
        display: flex
      }

      .common-module_toast__WjP9V {
        background: rgba(51, 51, 51, .9) !important;
        border-radius: 8px;
        display: inline-block !important;
        max-width: 263px;
        padding: 20px 24px !important;
        right: 50% !important;
        text-align: center;
        transform: translate(50%, 120px);
        width: -webkit-max-content !important;
        width: max-content !important;
        z-index: 10000 !important
      }

      .common-module_toast__WjP9V .rc-notification-notice {
        background: none !important;
        box-shadow: none;
        margin: 0;
        padding: 0
      }

      .common-module_toast__WjP9V .rc-notification-notice-content {
        background: none !important;
        color: #fff;
        font-size: 14px;
        font-weight: 500;
        line-height: 18px;
        padding: 0
      }

      .common-module_app-parakeet-dialog__UWDmu .rc-dialog-body {
        padding: 24px
      }

      .common-module_ap-dialog-title__-GIOw {
        color: #222;
        font-size: 24px;
        font-weight: 600;
        line-height: 130%
      }

      .common-module_ap-dialog-body__5yegi {
        color: #222;
        font-family: inherit;
        font-size: 15px;
        font-weight: 400;
        line-height: 130%;
        margin-top: 16px
      }

      .common-module_app-dialog-footer__qYGkd {
        display: flex;
        justify-content: flex-end;
        margin-top: 40px
      }

      .common-module_ap-button__RhZvx {
        border: 1px solid rgba(51, 51, 51, .12);
        border-radius: 6px;
        cursor: pointer;
        font-family: inherit;
        font-size: 15px;
        min-width: 84px;
        outline: none !important;
        padding: 8px 16px
      }

      .common-module_app-parakeet-dialog--wrapper__YIL3t {
        align-items: center;
        display: flex;
        justify-content: center
      }

      .common-module_ap-button-no__f3AQV {
        background: #fff;
        color: #333
      }

      .common-module_ap-button-ok__-Dglc {
        background: #333;
        color: #fff;
        margin-left: 12px
      }

      .common-module_app-parakeet-dialog__UWDmu .rc-dialog-close {
        opacity: 1 !important;
        padding: 0 !important;
        top: 24px
      }

      .common-module_clone-lower-canvas__8Uh2v {
        pointer-events: none;
        touch-action: none;
        -webkit-user-select: none;
        user-select: none;
        width: 100%
      }

      @media (min-width:768px) {
        .common-module_app-parakeet-dialog__UWDmu {
          width: 580px !important
        }

        .common-module_app-parakeet-dialog__UWDmu .rc-dialog-content {
          border-radius: 8px
        }
      }

      @media (max-width:767px) {
        .common-module_app-parakeet-dialog__UWDmu {
          margin: 0 16px !important;
          width: 100% !important
        }

        .common-module_app-parakeet-dialog__UWDmu .rc-dialog-body {
          padding: 16px
        }

        .common-module_ap-button__RhZvx {
          font-size: 15px
        }

        .common-module_app-parakeet-dialog__UWDmu .rc-dialog-close {
          right: 16px !important;
          top: 16px
        }

        .common-module_toast__WjP9V {
          left: 50% !important;
          top: 50% !important;
          transform: translateY(-50%) translateX(-50%) !important
        }
      }

      .advanced-cropper-line-wrapper--north,
      .advanced-cropper-line-wrapper--south {
        height: 12px;
        width: 100%
      }

      .advanced-cropper-line-wrapper--north {
        cursor: n-resize
      }

      .advanced-cropper-line-wrapper--south {
        cursor: s-resize
      }

      .advanced-cropper-line-wrapper--east,
      .advanced-cropper-line-wrapper--west {
        height: 100%;
        width: 12px
      }

      .advanced-cropper-line-wrapper--east {
        cursor: e-resize
      }

      .advanced-cropper-line-wrapper--west {
        cursor: w-resize
      }

      .advanced-cropper-line-wrapper--disabled {
        cursor: auto
      }

      .advanced-cropper-line-wrapper__content {
        position: absolute
      }

      .advanced-cropper-line-wrapper__content--east,
      .advanced-cropper-line-wrapper__content--west {
        height: 100%
      }

      .advanced-cropper-line-wrapper__content--north,
      .advanced-cropper-line-wrapper__content--south {
        width: 100%
      }

      .advanced-cropper-line-wrapper__content--east {
        left: 50%;
        transform: translateX(-100%)
      }

      .advanced-cropper-line-wrapper__content--west {
        right: 50%;
        transform: translateX(100%)
      }

      .advanced-cropper-line-wrapper__content--north {
        top: 50%
      }

      .advanced-cropper-line-wrapper__content--south {
        bottom: 50%
      }

      .advanced-cropper-handler-wrapper {
        height: 30px;
        position: absolute;
        transform: translate(-50%, -50%);
        width: 30px
      }

      .advanced-cropper-handler-wrapper__draggable {
        align-items: center;
        display: flex;
        height: 100%;
        justify-content: center;
        width: 100%
      }

      .advanced-cropper-handler-wrapper--west-north {
        cursor: nw-resize
      }

      .advanced-cropper-handler-wrapper--north {
        cursor: n-resize
      }

      .advanced-cropper-handler-wrapper--east-north {
        cursor: ne-resize
      }

      .advanced-cropper-handler-wrapper--east {
        cursor: e-resize
      }

      .advanced-cropper-handler-wrapper--east-south {
        cursor: se-resize
      }

      .advanced-cropper-handler-wrapper--south {
        cursor: s-resize
      }

      .advanced-cropper-handler-wrapper--west-south {
        cursor: sw-resize
      }

      .advanced-cropper-handler-wrapper--west {
        cursor: w-resize
      }

      .advanced-cropper-handler-wrapper--disabled {
        cursor: auto
      }

      .advanced-cropper-bounding-box {
        height: 100%;
        position: relative;
        width: 100%
      }

      .advanced-cropper-bounding-box__handler-wrapper {
        position: absolute
      }

      .advanced-cropper-bounding-box__handler-wrapper--east,
      .advanced-cropper-bounding-box__handler-wrapper--west {
        height: 100%;
        top: 50%;
        transform: translateY(-50%)
      }

      .advanced-cropper-bounding-box__handler-wrapper--north,
      .advanced-cropper-bounding-box__handler-wrapper--south {
        left: 50%;
        transform: translateX(-50%);
        width: 100%
      }

      .advanced-cropper-bounding-box__handler-wrapper--west,
      .advanced-cropper-bounding-box__handler-wrapper--west-north,
      .advanced-cropper-bounding-box__handler-wrapper--west-south {
        left: 0
      }

      .advanced-cropper-bounding-box__handler-wrapper--east,
      .advanced-cropper-bounding-box__handler-wrapper--east-north,
      .advanced-cropper-bounding-box__handler-wrapper--east-south {
        left: 100%
      }

      .advanced-cropper-bounding-box__handler-wrapper--east-north,
      .advanced-cropper-bounding-box__handler-wrapper--north,
      .advanced-cropper-bounding-box__handler-wrapper--west-north {
        top: 0
      }

      .advanced-cropper-bounding-box__handler-wrapper--east-south,
      .advanced-cropper-bounding-box__handler-wrapper--south,
      .advanced-cropper-bounding-box__handler-wrapper--west-south {
        top: 100%
      }

      .advanced-cropper-bounding-box__handler {
        position: absolute
      }

      .advanced-cropper-bounding-box__handler--west-north {
        left: 0;
        top: 0
      }

      .advanced-cropper-bounding-box__handler--north {
        left: 50%;
        top: 0
      }

      .advanced-cropper-bounding-box__handler--east-north {
        left: 100%;
        top: 0
      }

      .advanced-cropper-bounding-box__handler--east {
        left: 100%;
        top: 50%
      }

      .advanced-cropper-bounding-box__handler--east-south {
        left: 100%;
        top: 100%
      }

      .advanced-cropper-bounding-box__handler--south {
        left: 50%;
        top: 100%
      }

      .advanced-cropper-bounding-box__handler--west-south {
        left: 0;
        top: 100%
      }

      .advanced-cropper-bounding-box__handler--west {
        left: 0;
        top: 50%
      }

      .advanced-cropper-bounding-box__line {
        position: absolute
      }

      .advanced-cropper-bounding-box__line--north,
      .advanced-cropper-bounding-box__line--south {
        left: 0;
        transform: translateY(-50%)
      }

      .advanced-cropper-bounding-box__line--north {
        top: 0
      }

      .advanced-cropper-bounding-box__line--south {
        top: 100%
      }

      .advanced-cropper-bounding-box__line--east,
      .advanced-cropper-bounding-box__line--west {
        top: 0;
        transform: translateX(-50%)
      }

      .advanced-cropper-bounding-box__line--west {
        left: 0
      }

      .advanced-cropper-bounding-box__line--east {
        left: 100%
      }

      .advanced-cropper-artificial-transition {
        will-change: transform
      }

      .advanced-cropper-background-image {
        max-width: none !important;
        pointer-events: none;
        position: absolute;
        transform-origin: center;
        -webkit-user-select: none;
        user-select: none
      }

      .advanced-cropper-canvas {
        display: none
      }

      .advanced-cropper-source {
        height: 1px;
        opacity: 0;
        position: absolute;
        visibility: hidden;
        width: 1px
      }

      .advanced-cropper-fade {
        display: flex;
        flex-direction: column;
        opacity: 0;
        transition: .5s;
        visibility: hidden
      }

      .advanced-cropper-fade--visible {
        opacity: 1;
        visibility: visible
      }

      .advanced-cropper-wrapper__fade {
        flex-grow: 1;
        min-height: 0
      }

      .advanced-cropper-stencil-grid {
        border-collapse: collapse;
        display: table;
        opacity: 0;
        table-layout: fixed;
        transition: opacity .3s
      }

      .advanced-cropper-stencil-grid--visible {
        opacity: 1
      }

      .advanced-cropper-stencil-grid__row {
        display: table-row
      }

      .advanced-cropper-stencil-grid__cell {
        border: 1px solid;
        display: table-cell;
        height: 1%;
        width: 1%
      }

      .advanced-cropper-stencil-grid__cell--top {
        border-top-color: transparent
      }

      .advanced-cropper-stencil-grid__cell--left {
        border-left-color: transparent
      }

      .advanced-cropper-stencil-grid__cell--right {
        border-right-color: transparent
      }

      .advanced-cropper-stencil-grid__cell--bottom {
        border-bottom-color: transparent
      }

      .advanced-cropper-stencil-overlay {
        -webkit-backface-visibility: hidden;
        box-shadow: 0 0 0 1000px currentColor;
        box-sizing: initial;
        height: 100%;
        pointer-events: none;
        position: absolute;
        width: 100%
      }

      .advanced-cropper-stencil-wrapper {
        will-change: transform
      }

      .advanced-cropper-boundary {
        direction: ltr;
        position: relative;
        -webkit-user-select: none;
        user-select: none
      }

      .advanced-cropper-boundary__content {
        height: 100%;
        left: 0;
        position: absolute;
        top: 0;
        width: 100%
      }

      .advanced-cropper-boundary__stretcher {
        max-height: 100%;
        max-width: 100%;
        pointer-events: none;
        position: relative
      }

      .advanced-cropper-circle-stencil {
        -webkit-backface-visibility: hidden;
        box-sizing: initial;
        height: 100%;
        position: absolute;
        -webkit-transform-style: preserve-3d;
        width: 100%
      }

      .advanced-cropper-circle-stencil__overlay {
        border-radius: 50%;
        overflow: hidden
      }

      .advanced-cropper-circle-stencil__preview {
        border-radius: 50%
      }

      .advanced-cropper-circle-stencil__draggable-area,
      .advanced-cropper-circle-stencil__grid,
      .advanced-cropper-circle-stencil__overlay,
      .advanced-cropper-circle-stencil__preview {
        height: 100%;
        position: absolute;
        width: 100%
      }

      .advanced-cropper-circle-stencil--movable {
        cursor: move
      }

      .advanced-cropper-rectangle-stencil {
        -webkit-backface-visibility: hidden;
        box-sizing: border-box;
        -webkit-transform-style: preserve-3d
      }

      .advanced-cropper-rectangle-stencil,
      .advanced-cropper-rectangle-stencil__draggable-area,
      .advanced-cropper-rectangle-stencil__grid,
      .advanced-cropper-rectangle-stencil__overlay,
      .advanced-cropper-rectangle-stencil__preview {
        height: 100%;
        position: absolute;
        width: 100%
      }

      .advanced-cropper-rectangle-stencil--movable {
        cursor: move
      }

      .advanced-cropper-simple-line {
        background: none;
        border-width: 0
      }

      .advanced-cropper-simple-line--north,
      .advanced-cropper-simple-line--south {
        height: 0;
        width: 100%
      }

      .advanced-cropper-simple-line--east,
      .advanced-cropper-simple-line--west {
        height: 100%;
        width: 0
      }

      .advanced-cropper-simple-line--east {
        border-right-width: 1px
      }

      .advanced-cropper-simple-line--west {
        border-left-width: 1px
      }

      .advanced-cropper-simple-line--south {
        border-bottom-width: 1px
      }

      .advanced-cropper-simple-line--north {
        border-top-width: 1px
      }

      .advanced-cropper-simple-handler {
        display: block
      }

      .advanced-cropper-preview {
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        overflow: hidden;
        position: relative
      }

      .advanced-cropper-preview__content {
        left: 50%;
        overflow: hidden;
        position: absolute;
        top: 50%;
        transform: translate(-50%, -50%)
      }

      .advanced-cropper-preview__image {
        display: none;
        max-width: none !important;
        pointer-events: none;
        position: absolute;
        transform-origin: center;
        -webkit-user-select: none;
        user-select: none
      }

      .advanced-cropper-preview__image--visible {
        display: block
      }

      .advanced-cropper-preview__boundary {
        flex-grow: 1;
        min-height: 0;
        min-width: 0
      }

      .cropper-preview-wrapper__fade {
        flex-grow: 1;
        min-height: 0;
        width: 100%
      }

      .advanced-cropper {
        background: #000;
        color: #fff;
        display: flex;
        flex-direction: column;
        max-height: 100%;
        overflow: hidden;
        position: relative
      }

      .advanced-cropper__boundary {
        flex-grow: 1;
        min-height: 0;
        min-width: 0
      }

      .advanced-cropper__background-wrapper,
      .advanced-cropper__wrapper {
        bottom: 0;
        left: 0;
        position: absolute;
        right: 0;
        top: 0
      }

      .advanced-cropper__stencil-wrapper {
        position: absolute
      }

      .advanced-cropper * {
        box-sizing: border-box
      }

      .advanced-cropper-simple-handler {
        background: currentColor;
        height: 10px;
        width: 10px
      }

      .advanced-cropper-simple-line {
        border-color: hsla(0, 0%, 100%, .3);
        border-style: solid;
        transition: border .5s
      }

      .advanced-cropper-simple-line--hover {
        border-color: #fff
      }

      .advanced-cropper-circle-stencil__preview {
        border: 2px solid hsla(0, 0%, 100%, .2)
      }

      .advanced-cropper-stencil-overlay {
        color: rgba(0, 0, 0, .5)
      }

      .advanced-cropper-stencil-grid {
        color: hsla(0, 0%, 100%, .4)
      }

      .ImageCropper-module_cropper_container__uvTtt {
        border-radius: 6px 6px 0 0;
        max-height: 544px;
        max-width: 800px;
        min-width: 600px
      }

      .ImageCropper-module_cropper_container__uvTtt * {
        box-sizing: border-box
      }

      .ImageCropper-module_cropper_container__uvTtt .advanced-cropper-simple-line {
        border-color: #599bff
      }

      .ImageCropper-module_cropper_container__uvTtt .advanced-cropper-simple-handler {
        border: 1px solid #599bff
      }

      .ImageCropper-module_cropper_container__uvTtt .advanced-cropper__background-wrapper {
        overflow: hidden
      }

      .ImageCropper-module_cropper_container__uvTtt .advanced-cropper-stencil-overlay {
        box-shadow: 0 0 0 1000px rgba(34, 34, 34, .7)
      }

      .ImageCropper-module_copper_wrapper__Wpn9E {
        border-radius: 6px 6px 0 0;
        max-height: 602px
      }

      .ImageCropper-module_cropper_footer__Rk-w5 {
        align-items: center;
        display: flex;
        height: 56px;
        justify-content: space-between;
        padding: 0 12px
      }

      .ImageCropper-module_footer_button__BdQgl {
        background: #fff;
        border: 1px solid rgba(51, 51, 51, .12);
        border-radius: 6px;
        color: #333;
        cursor: pointer;
        font-family: inherit;
        font-size: 16px;
        font-weight: 500;
        line-height: 130%;
        outline: none !important;
        padding: 8px 16px;
        text-align: center
      }

      .ImageCropper-module_footer_button__BdQgl+.ImageCropper-module_footer_button__BdQgl {
        margin-left: 12px
      }

      .ImageCropper-module_operate_box__QJJAG {
        align-items: center;
        display: flex;
        margin-left: 22px
      }

      .ImageCropper-module_icon__0Sh-o {
        cursor: pointer
      }

      .ImageCropper-module_icon__0Sh-o+.ImageCropper-module_icon__0Sh-o {
        margin-left: 32px;
        margin-right: 28px
      }

      .ImageCropper-module_mock_line__-0jep {
        background: rgba(51, 51, 51, .12);
        border-radius: 3px;
        flex-shrink: 0;
        height: 19px;
        margin-right: 18px;
        width: 2px
      }

      .ImageCropper-module_cropper_type_wrapper__7wTON {
        align-items: center;
        border-radius: 4px;
        box-sizing: border-box;
        cursor: pointer;
        display: flex;
        font-size: 0;
        gap: 10px;
        height: 28px;
        padding: 6px 10px;
        position: relative
      }

      .ImageCropper-module_cropper_type_wrapper__7wTON.ImageCropper-module_active__c3F6n,
      .ImageCropper-module_cropper_type_wrapper__7wTON:hover {
        background: #eee
      }

      .ImageCropper-module_cropper_type_wrapper__7wTON.ImageCropper-module_active__c3F6n .ImageCropper-module_cropper_type_arrow__6-sTm {
        transform: rotate(180deg);
        transition: .2s ease-in
      }

      .ImageCropper-module_cropper_select_list__Q9Msa {
        align-items: flex-start;
        background: #fff;
        border-radius: 6px;
        box-shadow: 0 4px 20px 0 rgba(0, 0, 0, .08);
        box-sizing: border-box;
        display: flex;
        flex-wrap: wrap;
        height: 112px;
        justify-content: space-between;
        left: 50%;
        padding: 6px;
        position: relative;
        position: absolute;
        top: -120px;
        transform: translateX(-50%);
        width: 74px
      }

      .ImageCropper-module_cropper_select_list_arrow__GPSms {
        bottom: -4px;
        left: 50%;
        position: absolute;
        transform: translateX(-50%)
      }

      .ImageCropper-module_shape_icon__d0xAo {
        align-items: center;
        cursor: pointer;
        display: flex;
        height: 28px;
        justify-content: center;
        margin-bottom: 8px;
        width: 28px
      }

      .ImageCropper-module_shape_icon__d0xAo.ImageCropper-module_active__c3F6n {
        background: #e8f1ff;
        border-radius: 4px;
        color: #3e85ee
      }

      @media screen and (max-width:959px) {
        .ImageCropper-module_cropper_container__uvTtt {
          height: auto;
          max-height: 610px;
          min-width: auto
        }

        .ImageCropper-module_cropper_footer__Rk-w5 {
          height: 50px;
          padding: 0 10px
        }

        .ImageCropper-module_operate_box__QJJAG {
          align-items: center;
          margin-left: 0
        }

        .ImageCropper-module_icon__0Sh-o+.ImageCropper-module_icon__0Sh-o {
          margin-left: 36px
        }

        .ImageCropper-module_cropper_footer__Rk-w5 {
          font-size: 15px
        }

        .ImageCropper-module_footer_button__BdQgl {
          line-height: 17px
        }
      }

      .ImageCropper-module_preview_circle__M21xU {
        border: none
      }

      .ImageCropper-module_preview_heart__ePRoZ {
        background: transparent;
        background: url(https://static.staticdj.com/oss/operation/79fbbd3c59b5e444f74d54581b9a0411.svg);
        background-repeat: no-repeat;
        background-size: 100% 100%;
        position: relative
      }

      .ImageCropper-module_preview_star__f2pmG {
        background: transparent;
        background: url(https://static.staticdj.com/oss/operation/76f72c9c2894f11f9efcec04cf8f90e0.svg);
        background-repeat: no-repeat;
        background-size: 100% 100%;
        position: relative
      }

      .ImageCropper-module_overlay_rect_radius__q1iPj {
        border-radius: 28px
      }

      .ImageCropper-module_overlay_ellipse__F-yu5 {
        border-radius: 50%;
        height: 100%;
        left: 50%;
        position: absolute;
        transform: translateX(-50%);
        width: 50%
      }

      .ImageCropper-module_hidden_canvas__l7EU7 {
        display: none
      }

      .ImageCropper-module_ml0__wrtDc {
        margin-left: 0
      }

      .Upload-module_upload_dialog__jV-WW {
        border-radius: 8px;
        left: 50%;
        margin: 0 !important;
        padding: 0 !important;
        position: absolute !important;
        top: 50%;
        transform: translateX(-50%) translateY(-50%);
        width: auto !important
      }

      .Upload-module_upload_dialog__jV-WW .rc-dialog-body {
        display: block;
        padding: 0
      }

      .Upload-module_upload_large__9rjsH {
        border-radius: 8px;
        height: 228px;
        margin-bottom: 6px;
        width: 100%
      }

      .Upload-module_large_content__PoxTi {
        align-items: flex-start;
        display: inline-flex;
        flex-direction: column;
        gap: 8px
      }

      .Upload-module_large_img__Xguu1 {
        align-items: center;
        display: flex;
        flex-direction: column;
        gap: 4px;
        width: 100%
      }

      .Upload-module_large_img__Xguu1 p {
        color: #333;
        font-style: normal;
        font-weight: 600;
        width: 100%
      }

      .Upload-module_large_img__Xguu1 p span {
        color: #477bff;
        font-weight: 600;
        position: relative
      }

      .Upload-module_large_img__Xguu1 p span:after {
        background-color: #477bff;
        bottom: 3px;
        content: "";
        height: 1px;
        left: 0;
        position: absolute;
        width: 100%
      }

      .Upload-module_large_tips__TOH6I {
        align-items: flex-start;
        display: flex;
        flex-direction: column;
        gap: 4px
      }

      .Upload-module_upload_tips__8XVTP {
        align-items: center;
        color: rgba(51, 51, 51, .8);
        display: flex;
        font-size: 13px !important;
        font-style: normal;
        font-weight: 400;
        gap: 6px
      }

      .Upload-module_upload_tips_dot__GLSmQ {
        background-color: #5c5c5c;
        border-radius: 50%;
        display: inline-block;
        height: 3px;
        width: 3px
      }

      .Tab-module_parakeet_comp_tab__Zx-vZ {
        display: flex;
        font-weight: 600;
        margin-bottom: 16px
      }

      .Tab-module_tab_item__tBdan {
        border: none;
        color: rgba(51, 51, 51, .7);
        cursor: pointer;
        flex: 1;
        font-size: 18px;
        height: 35px;
        line-height: 130%;
        position: relative;
        text-align: center
      }

      .Tab-module_tab_item__tBdan:after {
        background-color: hsla(0, 0%, 90%, .6);
        bottom: -2px;
        content: "";
        height: 2px;
        left: 0;
        position: absolute;
        width: 100%
      }

      .Tab-module_tab_item__tBdan:first-child:after {
        border-radius: 2px 0 0 2px
      }

      .Tab-module_tab_item__tBdan:last-child:after {
        border-radius: 0 2px 2px 0
      }

      .Tab-module_tab_item_active__6rfwe {
        color: #333;
        height: 34px
      }

      .Tab-module_tab_item_active__6rfwe:after {
        background-color: #333;
        border-radius: 1px !important;
        bottom: -3px !important;
        content: "";
        height: 3px !important;
        left: 0;
        position: absolute;
        width: 100%
      }

      @media screen and (max-width:959px) {
        .Tab-module_parakeet_comp_tab__Zx-vZ {
          padding: 0 16px
        }

        .eva .parakeet_comp_tab {
          padding: 0
        }

        .hero .parakeet_comp_tab,
        .nova .parakeet_comp_tab,
        .wind .parakeet_comp_tab {
          margin-top: 26px
        }

        .flash .parakeet_comp_tab {
          margin-top: 26px;
          padding: 0 8px
        }

        .flash #app-parakeet {
          padding: 0 10px
        }

        .dj_skin_body .parakeet_comp_tab {
          margin-top: 26px
        }
      }

      .DesignOperator-module_parakeet_comp_tab__Ekj1e {
        display: flex;
        font-weight: 600;
        margin-bottom: 16px
      }

      .DesignOperator-module_tabs__kDJ51 {
        border: none !important;
        border-radius: 0 0 8px 8px
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 {
        box-sizing: border-box
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-nav-list {
        background-color: hsla(0, 0%, 90%, .4);
        display: flex;
        padding: 5px;
        width: 100%
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab {
        background: none;
        border-radius: 4px;
        display: flex;
        flex: 1;
        height: 30px;
        justify-content: center
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-active {
        background-color: #fff;
        color: #333
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-active .rc-tabs-tab-btn {
        color: #333
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-btn {
        align-items: center;
        color: rgba(51, 51, 51, .6);
        display: flex;
        font-size: 16px;
        font-weight: 500 !important
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-ink-bar {
        display: none
      }

      .DesignOperator-module_tab_item_active__8Mzpg {
        border: none;
        color: #333;
        height: 34px;
        position: relative
      }

      .DesignOperator-module_tab_panel__cumuu {
        background-color: #fdfdfd
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-disabled {
        flex: unset;
        margin: 0 18px
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab:first-child {
        margin-right: 22px
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab:nth-child(5) {
        margin-left: 22px
      }

      .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-disabled:hover {
        background-color: #fff
      }

      @media screen and (max-width:959px) {
        .DesignOperator-module_tab_panel__cumuu {
          align-items: center;
          display: flex;
          height: auto;
          min-height: 108px
        }

        .DesignOperator-module_tab_panel__cumuu>div {
          width: 100%
        }

        .DesignOperator-module_app_parakeet_operator__lL4U1 .icon-custom {
          scale: .8
        }

        .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab:first-of-type {
          flex: unset;
          margin: 0 8px 0 3px
        }

        .DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-nav-list div:nth-last-child(2) {
          flex: unset;
          margin: 0 3px 0 8px
        }
      }

      .SizeOperator-module_input__lSSD5 {
        background: #fff;
        border: 1px solid rgba(51, 51, 51, .12);
        border-radius: 4px;
        display: flex;
        font-size: 14px;
        height: 33px;
        margin-left: 12px;
        outline: none !important;
        padding: 6px 24px 6px 12px
      }

      .SizeOperator-module_suffix__kFdZc {
        position: relative
      }

      .SizeOperator-module_suffix__kFdZc:after {
        color: rgba(51, 51, 51, .4);
        content: "px";
        display: block;
        font-size: 16px;
        font-weight: 400;
        line-height: 16px;
        position: absolute;
        right: 6px;
        top: 6px
      }

      .SizeOperator-module_input_controller__pl-h0 {
        width: 88px
      }

      .SizeOperator-module_label__4U5QN {
        color: #333;
        font-size: 15px;
        font-weight: 400;
        line-height: 130%;
        width: 50px
      }

      .SizeOperator-module_tab_content__SYACz {
        padding: 20px 24px
      }

      .SizeOperator-module_tip__-z7-F {
        color: rgba(51, 51, 51, .5);
        font-size: 15px;
        font-weight: 400;
        line-height: 130%;
        margin-left: 16px;
        text-align: center
      }

      .SizeOperator-module_tab_content_item__yRWHu {
        margin-top: 12px
      }

      @media screen and (max-width:959px) {
        .SizeOperator-module_tip__-z7-F {
          font-size: 14px
        }

        .SizeOperator-module_tab_content__SYACz {
          padding: 0 16px
        }

        .SizeOperator-module_input__lSSD5 {
          margin-left: 8px
        }

        .SizeOperator-module_tip__-z7-F {
          margin-left: 12px
        }

        .SizeOperator-module_label__4U5QN {
          font-size: 14px
        }

        .SizeOperator-module_suffix__kFdZc:after {
          top: 7px
        }
      }

      .RotateOperator-module_operate_rotate__DbNrD {
        display: flex;
        height: 118px;
        padding: 32px 16px 28px
      }

      .RotateOperator-module_slider__RyqmW {
        margin: 32px 33px 0 22px
      }

      .RotateOperator-module_slider__RyqmW .rc-slider-handle {
        box-shadow: 0 0 0 5px #fff !important;
        height: 20px;
        margin-top: -8px;
        opacity: 1;
        position: relative;
        width: 20px;
        z-index: 10
      }

      .RotateOperator-module_slider__RyqmW .rc-slider-handle:after {
        background: #fff;
        border-radius: 4px;
        box-shadow: 0 2px 10px rgba(34, 34, 34, .06);
        color: #292929;
        content: attr(aria-valuenow);
        display: none;
        font-size: 16px;
        font-weight: 400;
        left: 50%;
        line-height: 120%;
        padding: 4px 10px;
        position: absolute;
        top: -37px;
        transform: translateX(-50%)
      }

      .RotateOperator-module_slider__RyqmW .rc-slider-handle-dragging,
      .RotateOperator-module_slider__RyqmW .rc-slider-handle:active {
        box-shadow: 0 0 0 5px #fff !important
      }

      .RotateOperator-module_slider__RyqmW .rc-slider-handle:active:after {
        display: block !important
      }

      .RotateOperator-module_slider__RyqmW .rc-slider-mark {
        top: -34px;
        z-index: 5
      }

      .RotateOperator-module_slider__RyqmW .rc-slider-mark-text {
        color: #333;
        font-size: 15px;
        font-weight: 500;
        line-height: 120%
      }

      .RotateOperator-module_slider__RyqmW .rc-slider-step {
        background: hsla(0, 0%, 90%, .8)
      }

      .RotateOperator-module_slider__RyqmW .rc-slider-dot:nth-child(3) {
        background-color: #333 !important;
        z-index: 3
      }

      @media screen and (max-width:959px) {
        .RotateOperator-module_slider__RyqmW .rc-slider-mark-text {
          font-size: 14px
        }

        .RotateOperator-module_operate_rotate__DbNrD {
          height: 108px;
          padding: 32px 2px 20px
        }

        .RotateOperator-module_slider__RyqmW .rc-slider-mark {
          top: -38px;
          z-index: 5
        }

        .RotateOperator-module_slider__RyqmW {
          margin: 32px 22px 0
        }
      }

      .rc-slider {
        border-radius: 6px;
        height: 14px;
        padding: 5px 0;
        position: relative;
        touch-action: none;
        width: 100%
      }

      .rc-slider,
      .rc-slider * {
        -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
        box-sizing: border-box
      }

      .rc-slider-rail {
        background-color: #e9e9e9;
        width: 100%
      }

      .rc-slider-rail,
      .rc-slider-track {
        border-radius: 6px;
        height: 4px;
        position: absolute
      }

      .rc-slider-track {
        background-color: #abe2fb
      }

      .rc-slider-handle {
        background-color: #fff;
        border: 2px solid #96dbfa;
        border-radius: 50%;
        cursor: pointer;
        cursor: -webkit-grab;
        cursor: grab;
        height: 14px;
        margin-top: -5px;
        opacity: .8;
        position: absolute;
        touch-action: pan-x;
        width: 14px
      }

      .rc-slider-handle-dragging.rc-slider-handle-dragging.rc-slider-handle-dragging {
        border-color: #57c5f7;
        box-shadow: 0 0 0 5px #96dbfa
      }

      .rc-slider-handle:focus {
        box-shadow: none;
        outline: none
      }

      .rc-slider-handle.focus-visible {
        border-color: #2db7f5;
        box-shadow: 0 0 0 3px #96dbfa
      }

      .rc-slider-handle:focus-visible {
        border-color: #2db7f5;
        box-shadow: 0 0 0 3px #96dbfa
      }

      .rc-slider-handle-click-focused:focus {
        border-color: #96dbfa;
        box-shadow: unset
      }

      .rc-slider-handle:hover {
        border-color: #57c5f7
      }

      .rc-slider-handle:active {
        border-color: #57c5f7;
        box-shadow: 0 0 5px #57c5f7;
        cursor: -webkit-grabbing;
        cursor: grabbing
      }

      .rc-slider-mark {
        font-size: 12px;
        left: 0;
        position: absolute;
        top: 18px;
        width: 100%
      }

      .rc-slider-mark-text {
        color: #999;
        cursor: pointer;
        display: inline-block;
        position: absolute;
        text-align: center;
        vertical-align: middle
      }

      .rc-slider-mark-text-active {
        color: #666
      }

      .rc-slider-step {
        background: transparent;
        height: 4px;
        pointer-events: none;
        position: absolute;
        width: 100%
      }

      .rc-slider-dot {
        background-color: #fff;
        border: 2px solid #e9e9e9;
        border-radius: 50%;
        bottom: -2px;
        cursor: pointer;
        height: 8px;
        position: absolute;
        vertical-align: middle;
        width: 8px
      }

      .rc-slider-dot-active {
        border-color: #96dbfa
      }

      .rc-slider-dot-reverse {
        margin-right: -4px
      }

      .rc-slider-disabled {
        background-color: #e9e9e9
      }

      .rc-slider-disabled .rc-slider-track {
        background-color: #ccc
      }

      .rc-slider-disabled .rc-slider-dot,
      .rc-slider-disabled .rc-slider-handle {
        background-color: #fff;
        border-color: #ccc;
        box-shadow: none;
        cursor: not-allowed
      }

      .rc-slider-disabled .rc-slider-dot,
      .rc-slider-disabled .rc-slider-mark-text {
        cursor: not-allowed !important
      }

      .rc-slider-vertical {
        height: 100%;
        padding: 0 5px;
        width: 14px
      }

      .rc-slider-vertical .rc-slider-rail {
        height: 100%;
        width: 4px
      }

      .rc-slider-vertical .rc-slider-track {
        bottom: 0;
        left: 5px;
        width: 4px
      }

      .rc-slider-vertical .rc-slider-handle {
        margin-left: -5px;
        margin-top: 0;
        touch-action: pan-y
      }

      .rc-slider-vertical .rc-slider-mark {
        height: 100%;
        left: 18px;
        top: 0
      }

      .rc-slider-vertical .rc-slider-step {
        height: 100%;
        width: 4px
      }

      .rc-slider-vertical .rc-slider-dot {
        margin-left: -2px
      }

      .rc-slider-tooltip-zoom-down-appear,
      .rc-slider-tooltip-zoom-down-enter {
        animation-duration: .3s;
        animation-fill-mode: both;
        animation-play-state: paused;
        display: block !important
      }

      .rc-slider-tooltip-zoom-down-leave {
        animation-duration: .3s;
        animation-fill-mode: both;
        animation-play-state: paused;
        display: block !important
      }

      .rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active,
      .rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active {
        animation-name: rcSliderTooltipZoomDownIn;
        animation-play-state: running
      }

      .rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active {
        animation-name: rcSliderTooltipZoomDownOut;
        animation-play-state: running
      }

      .rc-slider-tooltip-zoom-down-appear,
      .rc-slider-tooltip-zoom-down-enter {
        animation-timing-function: cubic-bezier(.23, 1, .32, 1);
        transform: scale(0)
      }

      .rc-slider-tooltip-zoom-down-leave {
        animation-timing-function: cubic-bezier(.755, .05, .855, .06)
      }

      @keyframes rcSliderTooltipZoomDownIn {
        0% {
          opacity: 0;
          transform: scale(0);
          transform-origin: 50% 100%
        }

        to {
          transform: scale(1);
          transform-origin: 50% 100%
        }
      }

      @keyframes rcSliderTooltipZoomDownOut {
        0% {
          transform: scale(1);
          transform-origin: 50% 100%
        }

        to {
          opacity: 0;
          transform: scale(0);
          transform-origin: 50% 100%
        }
      }

      .rc-slider-tooltip {
        left: -9999px;
        position: absolute;
        top: -9999px;
        visibility: visible
      }

      .rc-slider-tooltip,
      .rc-slider-tooltip * {
        -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
        box-sizing: border-box
      }

      .rc-slider-tooltip-hidden {
        display: none
      }

      .rc-slider-tooltip-placement-top {
        padding: 4px 0 8px
      }

      .rc-slider-tooltip-inner {
        background-color: #6c6c6c;
        border-radius: 6px;
        box-shadow: 0 0 4px #d9d9d9;
        color: #fff;
        font-size: 12px;
        height: 24px;
        line-height: 1;
        min-width: 24px;
        padding: 6px 2px;
        text-align: center;
        text-decoration: none
      }

      .rc-slider-tooltip-arrow {
        border-color: transparent;
        border-style: solid;
        height: 0;
        position: absolute;
        width: 0
      }

      .rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow {
        border-top-color: #6c6c6c;
        border-width: 4px 4px 0;
        bottom: 4px;
        left: 50%;
        margin-left: -4px
      }

      .OrderOperator-module_operate_order__Dy31o {
        display: flex;
        height: 118px;
        margin: 6px 0
      }

      .OrderOperator-module_img_item__M6EFs {
        align-items: center;
        display: flex;
        flex-direction: column
      }

      .OrderOperator-module_img_item__M6EFs+.OrderOperator-module_img_item__M6EFs {
        margin-left: 20px
      }

      .OrderOperator-module_img__dEUmr {
        border-radius: 4px;
        height: 60px;
        object-fit: cover;
        width: 60px
      }

      .OrderOperator-module_img_item__M6EFs:last-child {
        margin-right: 28px
      }

      .OrderOperator-module_img_item__M6EFs:first-child {
        margin-left: 28px
      }

      .OrderOperator-module_sortable__AqKYO {
        align-items: center;
        display: flex;
        overflow-x: auto
      }

      .OrderOperator-module_icon__P5csN {
        cursor: pointer;
        margin-top: 8px
      }

      .OrderOperator-module_item_drag__6ZxO- {
        background: #fdfdfd;
        border: 1px solid #e6e6e6;
        border-radius: 6px;
        box-shadow: 0 2px 10px rgba(34, 34, 34, .08);
        padding: 0 4px
      }

      .OrderOperator-module_item_drag__6ZxO- .OrderOperator-module_img_item__M6EFs {
        height: 64px;
        width: 64px
      }

      .OrderOperator-module_item_drag__6ZxO- .OrderOperator-module_index__-E8wZ {
        visibility: visible !important
      }

      .OrderOperator-module_index__-E8wZ {
        color: rgba(51, 51, 51, .6);
        font-size: 12px;
        font-weight: 500;
        line-height: 12px;
        margin: 3px 0;
        visibility: hidden
      }

      .OrderOperator-module_index_show__-H0q8 {
        visibility: visible !important
      }

      @media (max-width:959px) {
        .OrderOperator-module_img_item__M6EFs:last-child {
          margin-right: 0
        }

        .OrderOperator-module_sortable__AqKYO {
          padding-right: 20px
        }

        .OrderOperator-module_img_item__M6EFs:first-child {
          margin-left: 20px
        }

        .OrderOperator-module_operate_order__Dy31o {
          height: 108px
        }
      }

      .rc-tabs-dropdown {
        background: #fefefe;
        border: 1px solid #000;
        max-height: 200px;
        overflow: auto;
        position: absolute
      }

      .rc-tabs-dropdown-hidden {
        display: none
      }

      .rc-tabs-dropdown-menu {
        list-style: none;
        margin: 0;
        padding: 0
      }

      .rc-tabs-dropdown-menu-item {
        padding: 4px 8px
      }

      .rc-tabs-dropdown-menu-item-selected {
        background: red
      }

      .rc-tabs-dropdown-menu-item-disabled {
        cursor: not-allowed;
        opacity: .3
      }

      .rc-tabs-content {
        display: flex;
        width: 100%
      }

      .rc-tabs-content-holder {
        flex: auto
      }

      .rc-tabs-content-animated {
        transition: margin .3s
      }

      .rc-tabs-tabpane {
        flex: none;
        width: 100%
      }

      .rc-tabs {
        display: flex
      }

      .rc-tabs-bottom,
      .rc-tabs-top {
        flex-direction: column
      }

      .rc-tabs-bottom .rc-tabs-ink-bar,
      .rc-tabs-top .rc-tabs-ink-bar {
        height: 3px
      }

      .rc-tabs-top .rc-tabs-ink-bar {
        bottom: 0
      }

      .rc-tabs-bottom .rc-tabs-nav {
        order: 1
      }

      .rc-tabs-bottom .rc-tabs-content {
        order: 0
      }

      .rc-tabs-bottom .rc-tabs-ink-bar {
        top: 0
      }

      .rc-tabs-left.rc-tabs-editable .rc-tabs-tab,
      .rc-tabs-right.rc-tabs-editable .rc-tabs-tab {
        padding-right: 32px
      }

      .rc-tabs-left .rc-tabs-nav-wrap,
      .rc-tabs-right .rc-tabs-nav-wrap {
        flex-direction: column
      }

      .rc-tabs-left .rc-tabs-ink-bar,
      .rc-tabs-right .rc-tabs-ink-bar {
        width: 3px
      }

      .rc-tabs-left .rc-tabs-nav,
      .rc-tabs-right .rc-tabs-nav {
        flex-direction: column;
        min-width: 50px
      }

      .rc-tabs-left .rc-tabs-nav-list,
      .rc-tabs-left .rc-tabs-nav-operations,
      .rc-tabs-right .rc-tabs-nav-list,
      .rc-tabs-right .rc-tabs-nav-operations {
        flex: 1 0 auto;
        flex-direction: column
      }

      .rc-tabs-left .rc-tabs-ink-bar {
        right: 0
      }

      .rc-tabs-right .rc-tabs-nav {
        order: 1
      }

      .rc-tabs-right .rc-tabs-content {
        order: 0
      }

      .rc-tabs-right .rc-tabs-ink-bar {
        left: 0
      }

      .rc-tabs-dropdown-rtl,
      .rc-tabs-rtl {
        direction: rtl
      }

      .rc-tabs {
        border: 1px solid gray;
        font-size: 14px;
        overflow: hidden
      }

      .rc-tabs-nav {
        display: flex;
        flex: none;
        position: relative
      }

      .rc-tabs-nav-measure,
      .rc-tabs-nav-wrap {
        display: inline-block;
        display: flex;
        flex: auto;
        overflow: hidden;
        position: relative;
        transform: translate(0);
        white-space: nowrap
      }

      .rc-tabs-nav-measure-ping-left:before,
      .rc-tabs-nav-measure-ping-right:after,
      .rc-tabs-nav-wrap-ping-left:before,
      .rc-tabs-nav-wrap-ping-right:after {
        bottom: 0;
        content: "";
        position: absolute;
        top: 0
      }

      .rc-tabs-nav-measure-ping-left:before,
      .rc-tabs-nav-wrap-ping-left:before {
        border-left: 1px solid red;
        left: 0
      }

      .rc-tabs-nav-measure-ping-right:after,
      .rc-tabs-nav-wrap-ping-right:after {
        border-right: 1px solid red;
        right: 0
      }

      .rc-tabs-nav-measure-ping-bottom:after,
      .rc-tabs-nav-measure-ping-top:before,
      .rc-tabs-nav-wrap-ping-bottom:after,
      .rc-tabs-nav-wrap-ping-top:before {
        content: "";
        left: 0;
        position: absolute;
        right: 0
      }

      .rc-tabs-nav-measure-ping-top:before,
      .rc-tabs-nav-wrap-ping-top:before {
        border-top: 1px solid red;
        top: 0
      }

      .rc-tabs-nav-measure-ping-bottom:after,
      .rc-tabs-nav-wrap-ping-bottom:after {
        border-top: 1px solid red;
        bottom: 0
      }

      .rc-tabs-nav-list {
        display: flex;
        position: relative;
        transition: transform .3s
      }

      .rc-tabs-nav-operations {
        display: flex
      }

      .rc-tabs-nav-operations-hidden {
        pointer-events: none;
        position: absolute;
        visibility: hidden
      }

      .rc-tabs-nav-more {
        background: rgba(255, 0, 0, .1);
        border: 1px solid blue
      }

      .rc-tabs-nav-add {
        background: rgba(0, 255, 0, .1);
        border: 1px solid green
      }

      .rc-tabs-tab {
        align-items: center;
        background: hsla(0, 0%, 100%, .5);
        border: 0;
        cursor: pointer;
        display: flex;
        font-size: 20px;
        font-weight: lighter;
        margin: 0;
        outline: none;
        position: relative
      }

      .rc-tabs-tab-btn,
      .rc-tabs-tab-remove {
        background: transparent;
        border: 0
      }

      .rc-tabs-tab-btn {
        font-weight: inherit;
        line-height: 32px
      }

      .rc-tabs-tab-remove:hover {
        color: red
      }

      .rc-tabs-tab-active {
        font-weight: bolder
      }

      .rc-tabs-ink-bar {
        background: red;
        pointer-events: none;
        position: absolute
      }

      .rc-tabs-ink-bar-animated {
        transition: all .3s
      }

      .rc-tabs-extra-content {
        flex: none
      }

      .DesignUpload-module_design_upload__rei3k {
        display: flex;
        height: 584px
      }

      .DesignUpload-module_pointer__Aud8c {
        cursor: pointer
      }

      .DesignUpload-module_loading__4cg3s {
        transform: scale(.6)
      }

      .Design-module_app_parakeet_design__container__FrvSK * {
        box-sizing: border-box
      }

      .Design-module_app_parakeet_design__container__FrvSK {
        border: 2px solid hsla(0, 0%, 90%, .6);
        border-radius: 8px;
        display: none
      }

      .Design-module_app_parakeet_design__container__FrvSK .canvas-container canvas {
        border-radius: 8px
      }

      .Design-module_show__WZcJY {
        display: block !important
      }

      .Design-module_border_dash__-6wEJ {
        border-style: dashed !important
      }

      .Design-module_hidden__35G87 {
        display: none !important
      }

      .Design-module_upload__d0XVy {
        align-items: center;
        background-color: #fdfdfd;
        border-radius: 8px;
        display: flex;
        justify-content: center
      }

      .Design-module_upload_dialog__fCkjQ {
        border-radius: 8px;
        left: 50%;
        margin: 0 !important;
        padding: 0 !important;
        position: absolute !important;
        top: 50%;
        transform: translateX(-50%) translateY(-50%);
        width: auto !important
      }

      .Design-module_preview_img__B65MY {
        max-height: 100%;
        max-height: 544px;
        max-width: 100%
      }

      .Design-module_footer__YubKC {
        height: 56px
      }

      .Design-module_app_parakeet_design__container__FrvSK .Design-module_upload_dialog__fCkjQ {
        margin: 0 !important
      }

      .Design-module_upload_dialog__fCkjQ .rc-dialog-body {
        padding: 0
      }

      @media screen and (max-width:959px) {
        .Design-module_wrapper__WGJzH {
          padding: 0 16px
        }

        .eva .parakeet-design--wrapper {
          padding: 0
        }

        .flash .parakeet-design--wrapper {
          padding: 0 8px
        }
      }

      .rc-dialog {
        margin: 10px;
        position: relative;
        width: auto
      }

      .rc-dialog-wrap {
        -webkit-overflow-scrolling: touch;
        bottom: 0;
        left: 0;
        outline: 0;
        overflow: auto;
        position: fixed;
        right: 0;
        top: 0;
        z-index: 1050
      }

      .rc-dialog-title {
        font-size: 14px;
        font-weight: 700;
        line-height: 21px;
        margin: 0
      }

      .rc-dialog-content {
        background-clip: padding-box;
        background-color: #fff;
        border: none;
        border-radius: 6px 6px;
        position: relative
      }

      .rc-dialog-close {
        background: transparent;
        border: 0;
        color: #000;
        cursor: pointer;
        filter: alpha(opacity=20);
        font-size: 21px;
        font-weight: 700;
        line-height: 1;
        opacity: .2;
        position: absolute;
        right: 20px;
        text-decoration: none;
        text-shadow: 0 1px 0 #fff;
        top: 12px
      }

      .rc-dialog-close-x:after {
        content: "×"
      }

      .rc-dialog-close:hover {
        filter: alpha(opacity=100);
        opacity: 1;
        text-decoration: none
      }

      .rc-dialog-header {
        background: #fff;
        border-bottom: 1px solid #e9e9e9;
        border-radius: 5px 5px 0 0;
        color: #666;
        padding: 13px 20px 14px
      }

      .rc-dialog-body {
        padding: 20px
      }

      .rc-dialog-footer {
        border-radius: 0 0 5px 5px;
        border-top: 1px solid #e9e9e9;
        padding: 10px 20px;
        text-align: right
      }

      .rc-dialog-zoom-appear,
      .rc-dialog-zoom-enter {
        animation-duration: .3s;
        animation-fill-mode: both;
        animation-play-state: paused;
        animation-timing-function: cubic-bezier(.08, .82, .17, 1);
        opacity: 0
      }

      .rc-dialog-zoom-leave {
        animation-duration: .3s;
        animation-fill-mode: both;
        animation-play-state: paused;
        animation-timing-function: cubic-bezier(.6, .04, .98, .34)
      }

      .rc-dialog-zoom-appear.rc-dialog-zoom-appear-active,
      .rc-dialog-zoom-enter.rc-dialog-zoom-enter-active {
        animation-name: rcDialogZoomIn;
        animation-play-state: running
      }

      .rc-dialog-zoom-leave.rc-dialog-zoom-leave-active {
        animation-name: rcDialogZoomOut;
        animation-play-state: running
      }

      @keyframes rcDialogZoomIn {
        0% {
          opacity: 0;
          transform: scale(0)
        }

        to {
          opacity: 1;
          transform: scale(1)
        }
      }

      @keyframes rcDialogZoomOut {
        0% {
          transform: scale(1)
        }

        to {
          opacity: 0;
          transform: scale(0)
        }
      }

      @media (min-width:768px) {
        .rc-dialog {
          margin: 30px auto;
          width: 600px
        }
      }

      .rc-dialog-mask {
        background-color: #373737;
        background-color: rgba(55, 55, 55, .6);
        bottom: 0;
        filter: alpha(opacity=50);
        height: 100%;
        left: 0;
        position: fixed;
        right: 0;
        top: 0;
        z-index: 1050
      }

      .rc-dialog-mask-hidden {
        display: none
      }

      .rc-dialog-fade-appear,
      .rc-dialog-fade-enter {
        opacity: 0
      }

      .rc-dialog-fade-appear,
      .rc-dialog-fade-enter,
      .rc-dialog-fade-leave {
        animation-duration: .3s;
        animation-fill-mode: both;
        animation-play-state: paused;
        animation-timing-function: cubic-bezier(.55, 0, .55, .2)
      }

      .rc-dialog-fade-appear.rc-dialog-fade-appear-active,
      .rc-dialog-fade-enter.rc-dialog-fade-enter-active {
        animation-name: rcDialogFadeIn;
        animation-play-state: running
      }

      .rc-dialog-fade-leave.rc-dialog-fade-leave-active {
        animation-name: rcDialogFadeOut;
        animation-play-state: running
      }

      @keyframes rcDialogFadeIn {
        0% {
          opacity: 0
        }

        to {
          opacity: 1
        }
      }

      @keyframes rcDialogFadeOut {
        0% {
          opacity: 1
        }

        to {
          opacity: 0
        }
      }

      .rc-notification {
        align-items: flex-end;
        display: flex;
        max-height: 100vh;
        overflow-y: auto;
        padding: 10px;
        position: fixed;
        z-index: 1000
      }

      .rc-notification-top,
      .rc-notification-topLeft,
      .rc-notification-topRight {
        flex-direction: column;
        top: 0
      }

      .rc-notification-topRight {
        right: 0
      }

      .rc-notification-notice {
        background: #fff;
        border: 0 solid transparent;
        border-radius: 3px 3px;
        box-shadow: 0 0 10px rgba(0, 0, 0, .2);
        box-sizing: border-box;
        display: block;
        line-height: 1.5;
        margin: 12px 0;
        position: relative;
        width: auto
      }

      .rc-notification-notice-content {
        padding: 7px 20px 7px 10px
      }

      .rc-notification-notice-closable .rc-notification-notice-content {
        padding-right: 20px
      }

      .rc-notification-notice-close {
        color: #000;
        cursor: pointer;
        filter: alpha(opacity=20);
        font-size: 16px;
        font-weight: 700;
        line-height: 1;
        opacity: .2;
        outline: none;
        position: absolute;
        right: 5px;
        text-decoration: none;
        text-shadow: 0 1px 0 #fff;
        top: 3px
      }

      .rc-notification-notice-close-x:after {
        content: "×"
      }

      .rc-notification-notice-close:hover {
        filter: alpha(opacity=100);
        opacity: 1;
        text-decoration: none
      }

      .rc-notification-fade {
        overflow: hidden;
        transition: all .3s
      }

      .rc-notification-fade-appear-start {
        opacity: 0;
        transform: translateX(100%)
      }

      .rc-notification-fade-appear-active {
        opacity: 1;
        transform: translateX(0)
      }

      .index-module_preview_wrap__wyD3z {
        background-color: #fff;
        height: 100%;
        left: 0;
        pointer-events: auto;
        position: absolute;
        top: 0;
        width: 100%
      }

      .index-module_upload_dialog__zsPoE {
        border-radius: 8px;
        left: 50%;
        margin: 0 !important;
        padding: 0 !important;
        position: absolute !important;
        top: 50%;
        transform: translateX(-50%) translateY(-50%);
        width: auto !important
      }

      .index-module_upload_dialog__zsPoE .rc-dialog-body {
        padding: 0
      }

      .index-module_canvas-container-fixed__KUEdU {
        border-radius: 6px;
        box-shadow: 0 1px 10px 0 rgba(0, 0, 0, .2);
        left: 0;
        pointer-events: none;
        position: fixed !important;
        top: 1px;
        transition: opacity .5s;
        z-index: 1031
      }

      .index-module_canvas-container-fixed__KUEdU .lower-canvas,
      .index-module_canvas-container-fixed__KUEdU .upper-canvas {
        height: 100% !important;
        width: 100% !important
      }
    </style>
    <style>
      @font-face {
        font-family: 'Bakbak One';
        font-style: normal;
        font-weight: 400;
        font-display: swap;
        src: url('https://fonts.gstatic.com/s/bakbakone/v6/zOL54pXAl6RI-p_ardnu-cNkvg.woff2') format('woff2');
      }
    </style>
    <div id="app-parakeet" data-product-id="f0ad4fc5-a941-4de7-a98a-834ecb5e3305">
      <div>
        <div>
          <div class="pk-my-6 pk-space-y-5">
            <div>
              <div class="pk-break-words pk-text-sm md:pk-text-base pk-mb-2.5" style="hyphens: auto; word-break: break-word;">
                <div class="pk-flex items-center relative !pk-text-[15px]">
                  <div class="pk-font-medium appparkeet_form_item_title">Cloth Color</div>
                  <div class="pk-ml-1.5 pk-flex pk-items-center pk-font-semibold notranslate"></div><span>:</span>
                </div>
              </div>
              <div tabindex="0" class="pk-flex pk-flex-wrap pk--mt-1.5 pk--ml-2 pk-outline-none"><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/86faad731d74bb1e187136ae1e3d89a7.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="White"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/1a4ad490278280173c3efa1874e7c7bf.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Natural"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/f390772d2f53b16d90763a3d65e0db01.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Khaki"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/2c895aabe8676e3098e994a9486264fd.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Buff"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/74d92c5628f26b7e41860a60713b61bc.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Pink"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/185cb62747d6c08f097abbebfd78d53e.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Grey"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/58055b038061fc5843cbfbf74a545936.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Dark Grey"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/5f76ddd80ae3409a652c7d3a281fe1c3.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Navy"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/ba98311d23f1949913cfc7a2b759c22d.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Black"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/1a93f7d69910e6c7cc8d02fd29f0b73c.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Green"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/f7a1deb6859b4ba580646ad561f80d9b.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Maroon"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span><span
                  class="pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden pk-w-18 pk-h-18"><object
                    data="https://img.staticdj.com/b5ba9b98c9f792db2c78b471f281c731.jpg" class="pk-w-full pk-h-full pk-object-cover pk-object-center"><img
                      src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXx8fH///8wmV1OAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" alt="Brown"
                      class="pk-w-full pk-h-full pk-object-cover pk-object-center"></object></span></div><input type="hidden" name="">
              <p class="pk-text-[#DB393A] pk-text-xs md:pk-text-sm" style="hyphens: auto;"></p>
              <p class="pk-text-[#7A7A7A] pk-text-xs md:pk-text-sm pk-break-words" style="hyphens: auto;"></p>
            </div>
            <div class="pk-grid pk-gap-x-3 pk-grid-flow-col pk-grid-rows-[auto,auto,auto,auto]" style="grid-template-columns: minmax(0px, 1fr);">
              <div class="pk-break-words pk-text-sm md:pk-text-base pk-mb-3" style="hyphens: auto; word-break: break-word;">
                <div class="pk-flex items-center relative !pk-text-[15px]">
                  <div class="pk-font-medium appparkeet_form_item_title">Select the Number of Names ( Left sleeve)</div>
                  <div class="pk-ml-1.5 pk-flex pk-items-center pk-font-semibold notranslate"></div><span>:</span>
                </div>
              </div><label tabindex="1" class="pk-block pk-border pk-border-[#D1D1D1] pk-rounded pk-overflow-hidden pk-relative pk-block pk-bg-white pk-leading-[0px] pk-outline-none pk-my-0 pk-border-[#D1D1D1] Dropdown-module_dropdown-label__8sSmb">
                <div class="pk-absolute pk-top-0 pk-left-0 pk-w-full pk-h-full pk-flex pk-items-center pk-cursor-pointer pk-pointer-events-none"><span
                    class="pk-flex-1 pk-truncate pk-ml-3 pk-select-none pk-text-[#93989D] pk-text-sm pk-leading-5">-Please Choose-</span><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"
                    class="pk-ml-auto pk-mr-4 pk-cursor-pointer">
                    <path fill-rule="evenodd" clip-rule="evenodd" d="M3.2 6.4a.8.8 0 0 1 1.366-.566L8 9.27l3.434-3.434a.8.8 0 1 1 1.131 1.13l-4 4a.8.8 0 0 1-1.13 0l-4-4A.798.798 0 0 1 3.2 6.4Z" fill="#6D7175"></path>
                  </svg></div><input type="hidden" name=""><select name="1733046136603" class="pk-w-full pk-py-3.5 pk-pl-4 pk-pr-10.5 pk-cursor-pointer pk-appearance-none pk-text-sm pk-leading-5 pk-outline-none pk-truncate pk-bg-white pk-opacity-0">
                  <option value="">-No selection-</option>
                  <option value="No.Thanks">No.Thanks</option>
                  <option value="1 name">1 name</option>
                  <option value="2 names">2 names</option>
                  <option value="3 names">3 names</option>
                  <option value="4 names">4 names</option>
                </select>
              </label>
              <p class="pk-text-[#DB393A] pk-text-xs md:pk-text-sm" style="hyphens: auto;"></p>
              <p class="pk-text-[#7A7A7A] pk-text-xs md:pk-text-sm pk-break-words" style="hyphens: auto;"></p>
            </div>
            <div class="pk-grid pk-gap-x-3 pk-grid-flow-col pk-grid-rows-[auto,auto,auto,auto]" style="grid-template-columns: minmax(0px, 1fr);">
              <div class="pk-break-words pk-text-sm md:pk-text-base pk-mb-3" style="hyphens: auto; word-break: break-word;">
                <div class="pk-flex items-center relative !pk-text-[15px]">
                  <div class="pk-font-medium appparkeet_form_item_title">Select the Number of Names ( Right sleeve)</div>
                  <div class="pk-ml-1.5 pk-flex pk-items-center pk-font-semibold notranslate"></div><span>:</span>
                </div>
              </div><label tabindex="1" class="pk-block pk-border pk-border-[#D1D1D1] pk-rounded pk-overflow-hidden pk-relative pk-block pk-bg-white pk-leading-[0px] pk-outline-none pk-my-0 pk-border-[#D1D1D1] Dropdown-module_dropdown-label__8sSmb">
                <div class="pk-absolute pk-top-0 pk-left-0 pk-w-full pk-h-full pk-flex pk-items-center pk-cursor-pointer pk-pointer-events-none"><span
                    class="pk-flex-1 pk-truncate pk-ml-3 pk-select-none pk-text-[#93989D] pk-text-sm pk-leading-5">-Please Choose-</span><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"
                    class="pk-ml-auto pk-mr-4 pk-cursor-pointer">
                    <path fill-rule="evenodd" clip-rule="evenodd" d="M3.2 6.4a.8.8 0 0 1 1.366-.566L8 9.27l3.434-3.434a.8.8 0 1 1 1.131 1.13l-4 4a.8.8 0 0 1-1.13 0l-4-4A.798.798 0 0 1 3.2 6.4Z" fill="#6D7175"></path>
                  </svg></div><input type="hidden" name=""><select name="1733046136603" class="pk-w-full pk-py-3.5 pk-pl-4 pk-pr-10.5 pk-cursor-pointer pk-appearance-none pk-text-sm pk-leading-5 pk-outline-none pk-truncate pk-bg-white pk-opacity-0">
                  <option value="">-No selection-</option>
                  <option value="No.Thanks">No.Thanks</option>
                  <option value="1 name">1 name</option>
                  <option value="2 names">2 names</option>
                  <option value="3 names">3 names</option>
                  <option value="4 names">4 names</option>
                </select>
              </label>
              <p class="pk-text-[#DB393A] pk-text-xs md:pk-text-sm" style="hyphens: auto;"></p>
              <p class="pk-text-[#7A7A7A] pk-text-xs md:pk-text-sm pk-break-words" style="hyphens: auto;"></p>
            </div>
          </div>
        </div>
      </div>
    </div>
    <script id="app-parakeet-1539149753700">
      window.appparakeet_data = [{
        "fid": "26eed471-f3c3-43b2-85bb-545c9f8ed9ee",
        "type": "swatch",
        "label": "\u8272\u5361",
        "order": "Cloth Color",
        "product": "Cloth Color",
        "price": "0",
        "options": [{
          "fid": "96046a51-0e93-44a2-8201-ae62b1e22bc0",
          "value": "https:\/\/img.staticdj.com\/86faad731d74bb1e187136ae1e3d89a7.jpg",
          "label": "White",
          "type": "img",
          "price": "0"
        }, {
          "fid": "df084133-0092-418d-b133-78c82b0dc170",
          "value": "https:\/\/img.staticdj.com\/1a4ad490278280173c3efa1874e7c7bf.jpg",
          "label": "Natural",
          "type": "img",
          "price": "0"
        }, {
          "fid": "66a6934f-ef3b-44d9-a736-3e8ef79d67cc",
          "value": "https:\/\/img.staticdj.com\/f390772d2f53b16d90763a3d65e0db01.jpg",
          "label": "Khaki",
          "type": "img",
          "price": "0"
        }, {
          "fid": "0267ef6e-d784-4011-a9d4-eb53f45acfde",
          "value": "https:\/\/img.staticdj.com\/2c895aabe8676e3098e994a9486264fd.jpg",
          "label": "Buff",
          "type": "img",
          "price": "0"
        }, {
          "fid": "e441add7-0728-4dba-a088-59ec911f7bf0",
          "value": "https:\/\/img.staticdj.com\/74d92c5628f26b7e41860a60713b61bc.jpg",
          "label": "Pink",
          "type": "img",
          "price": "0"
        }, {
          "fid": "cb271cf9-138c-44f9-b064-05cfc36dc75f",
          "value": "https:\/\/img.staticdj.com\/185cb62747d6c08f097abbebfd78d53e.jpg",
          "label": "Grey",
          "type": "img",
          "price": "0"
        }, {
          "fid": "43b450f0-3537-48d5-8d86-a33e4c1f4419",
          "value": "https:\/\/img.staticdj.com\/58055b038061fc5843cbfbf74a545936.jpg",
          "label": "Dark Grey",
          "type": "img",
          "price": "0"
        }, {
          "fid": "5f999479-71fe-47af-80f2-138e8e53bee0",
          "value": "https:\/\/img.staticdj.com\/5f76ddd80ae3409a652c7d3a281fe1c3.jpg",
          "label": "Navy",
          "type": "img",
          "price": "0"
        }, {
          "fid": "e5cc2383-8f0f-40db-b2cb-59508f55af9e",
          "value": "https:\/\/img.staticdj.com\/ba98311d23f1949913cfc7a2b759c22d.jpg",
          "label": "Black",
          "type": "img",
          "price": "0"
        }, {
          "fid": "39815949-332e-4941-8d74-dc0932fda24b",
          "value": "https:\/\/img.staticdj.com\/1a93f7d69910e6c7cc8d02fd29f0b73c.jpg",
          "label": "Green",
          "type": "img",
          "price": "0"
        }, {
          "fid": "057a6c3a-fa6f-40d9-944e-f4ccef747089",
          "value": "https:\/\/img.staticdj.com\/f7a1deb6859b4ba580646ad561f80d9b.jpg",
          "label": "Maroon",
          "type": "img",
          "price": "0"
        }, {
          "fid": "c23e4184-fe5a-45d1-a0a0-b162d8e3d7e8",
          "value": "https:\/\/img.staticdj.com\/b5ba9b98c9f792db2c78b471f281c731.jpg",
          "label": "Brown",
          "type": "img",
          "price": "0"
        }],
        "advance": {
          "size": "80px",
          "required": true
        },
        "conditional_setting": {
          "type": "none",
          "field_values": null,
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 0,
          "text_colors": null,
          "text_families": null,
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "3381cf6e-6792-4423-be12-9afdea7cb103",
        "type": "dropdown",
        "label": "\u4e0b\u62c9\u9009\u62e9",
        "order": "Select the Number of Names ( Left sleeve)",
        "product": "Select the Number of Names ( Left sleeve)",
        "price": "0",
        "options": [{
          "value": "531efe56-57c3-4602-8f43-3b014bfd75e8",
          "label": "No.Thanks",
          "price": "0"
        }, {
          "value": "3e8250ff-65db-41fa-91ee-ec3f980cb33c",
          "label": "1 name",
          "price": "0"
        }, {
          "value": "573abee3-465e-42de-ad24-38e15c6f5075",
          "label": "2 names",
          "price": "0"
        }, {
          "value": "644a1ed6-aa09-4071-a213-77f21dd7e377",
          "label": "3 names",
          "price": "1"
        }, {
          "value": "42aa11b8-c513-44df-b8e2-9af4397b42f2",
          "label": "4 names",
          "price": "2"
        }],
        "advance": {
          "columns": 1,
          "required": true,
          "placeholder": "-Please Choose-"
        },
        "conditional_setting": {
          "type": "none",
          "field_values": null,
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 0,
          "text_colors": null,
          "text_families": null,
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "8e13a5b1-b0bc-40bf-bd62-07db5198a5cc",
        "type": "text",
        "label": "\u6587\u672c",
        "order": "Name#1 ",
        "product": "Name#1 ",
        "price": "0",
        "advance": {
          "limit": {
            "max": 500,
            "value": true
          },
          "maximum": 12,
          "required": true,
          "placeholder": "eg: James, A\u2764, 2023..."
        },
        "conditional_setting": {
          "type": "field",
          "field_values": [{
            "fid": "e920574c-5ebb-4dce-9ac8-9d032524db13",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "3e8250ff-65db-41fa-91ee-ec3f980cb33c",
            "field_label": "Select the Number of Names",
            "value_label": "1 name"
          }, {
            "fid": "c7632088-2e9a-4103-8ad6-8b82db59089b",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "573abee3-465e-42de-ad24-38e15c6f5075",
            "field_label": "Select the Number of Names",
            "value_label": "2 names"
          }, {
            "fid": "7b4f9bec-6233-4c23-a8ac-fa88dbda928b",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "644a1ed6-aa09-4071-a213-77f21dd7e377",
            "field_label": "Select the Number of Names",
            "value_label": "3 names"
          }, {
            "fid": "24bea636-1788-4897-a545-5ca466e95c59",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "42aa11b8-c513-44df-b8e2-9af4397b42f2",
            "field_label": "Select the Number of Names",
            "value_label": "4 names"
          }],
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 30,
          "text_colors": ["black"],
          "text_families": ["Lexend"],
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "5006b2d3-930c-44b2-a026-76551f66bc91",
        "type": "text",
        "label": "\u6587\u672c",
        "order": "Name#2",
        "product": "Name#2",
        "price": "0",
        "advance": {
          "limit": {
            "max": 500,
            "value": true
          },
          "maximum": 12,
          "required": true,
          "placeholder": "eg: James, A\u2764, 2023..."
        },
        "conditional_setting": {
          "type": "field",
          "field_values": [{
            "fid": "c7632088-2e9a-4103-8ad6-8b82db59089b",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "573abee3-465e-42de-ad24-38e15c6f5075",
            "field_label": "Select the Number of Names",
            "value_label": "2 names"
          }, {
            "fid": "7b4f9bec-6233-4c23-a8ac-fa88dbda928b",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "644a1ed6-aa09-4071-a213-77f21dd7e377",
            "field_label": "Select the Number of Names",
            "value_label": "3 names"
          }, {
            "fid": "24bea636-1788-4897-a545-5ca466e95c59",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "42aa11b8-c513-44df-b8e2-9af4397b42f2",
            "field_label": "Select the Number of Names",
            "value_label": "4 names"
          }],
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 30,
          "text_colors": ["black"],
          "text_families": ["Lexend"],
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "164cc529-87f8-4cb3-aa7e-1c8d635d6df0",
        "type": "text",
        "label": "\u6587\u672c",
        "order": "Name#3",
        "product": "Name#3",
        "price": "0",
        "advance": {
          "limit": {
            "max": 500,
            "value": true
          },
          "maximum": 12,
          "required": true,
          "placeholder": "eg: James, A\u2764, 2023..."
        },
        "conditional_setting": {
          "type": "field",
          "field_values": [{
            "fid": "7b4f9bec-6233-4c23-a8ac-fa88dbda928b",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "644a1ed6-aa09-4071-a213-77f21dd7e377",
            "field_label": "Select the Number of Names",
            "value_label": "3 names"
          }, {
            "fid": "24bea636-1788-4897-a545-5ca466e95c59",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "42aa11b8-c513-44df-b8e2-9af4397b42f2",
            "field_label": "Select the Number of Names",
            "value_label": "4 names"
          }],
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 30,
          "text_colors": ["black"],
          "text_families": ["Lexend"],
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "cf50809b-c5d2-4b6f-b994-08387c47c350",
        "type": "text",
        "label": "\u6587\u672c",
        "order": "Name#4",
        "product": "Name#4",
        "price": "0",
        "advance": {
          "limit": {
            "max": 500,
            "value": true
          },
          "maximum": 12,
          "required": true,
          "placeholder": "eg: James, A\u2764, 2023..."
        },
        "conditional_setting": {
          "type": "field",
          "field_values": [{
            "fid": "24bea636-1788-4897-a545-5ca466e95c59",
            "field": "3381cf6e-6792-4423-be12-9afdea7cb103",
            "value": "42aa11b8-c513-44df-b8e2-9af4397b42f2",
            "field_label": "Select the Number of Names",
            "value_label": "4 names"
          }],
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 30,
          "text_colors": ["black"],
          "text_families": ["Lexend"],
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "50277559-0dec-4090-81ae-7bf905193a03",
        "type": "dropdown",
        "label": "\u4e0b\u62c9\u9009\u62e9",
        "order": "Select the Number of Names ( Right sleeve)",
        "product": "Select the Number of Names ( Right sleeve)",
        "price": "0",
        "options": [{
          "value": "9c47441a-5f00-446f-ab2c-579976720451",
          "label": "No.Thanks",
          "price": "0"
        }, {
          "value": "b8cc0235-b300-486f-bed0-d9d111cd102e",
          "label": "1 name",
          "price": "0"
        }, {
          "value": "706cf656-8f87-4620-9cbb-cf808fcdbd9c",
          "label": "2 names",
          "price": "0"
        }, {
          "value": "3ed6783b-62d6-4197-8f1d-53d2d8aaa615",
          "label": "3 names",
          "price": "1"
        }, {
          "value": "2004b9ce-0de6-4001-974a-9b5e1e4b0ca0",
          "label": "4 names",
          "price": "2"
        }],
        "advance": {
          "columns": 1,
          "required": true,
          "placeholder": "-Please Choose-"
        },
        "conditional_setting": {
          "type": "none",
          "field_values": null,
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 0,
          "text_colors": null,
          "text_families": null,
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "c19fe576-2209-4f3f-b8f4-dc35295ff732",
        "type": "text",
        "label": "\u6587\u672c",
        "order": "Right-Name#1 ",
        "product": "Name#1 ",
        "price": "0",
        "advance": {
          "limit": {
            "max": 500,
            "value": true
          },
          "maximum": 12,
          "required": true,
          "placeholder": "eg: James, A\u2764, 2023..."
        },
        "conditional_setting": {
          "type": "field",
          "field_values": [{
            "fid": "e920574c-5ebb-4dce-9ac8-9d032524db13",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "b8cc0235-b300-486f-bed0-d9d111cd102e",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "1 name"
          }, {
            "fid": "c7632088-2e9a-4103-8ad6-8b82db59089b",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "706cf656-8f87-4620-9cbb-cf808fcdbd9c",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "2 names"
          }, {
            "fid": "7b4f9bec-6233-4c23-a8ac-fa88dbda928b",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "3ed6783b-62d6-4197-8f1d-53d2d8aaa615",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "3 names"
          }, {
            "fid": "24bea636-1788-4897-a545-5ca466e95c59",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "2004b9ce-0de6-4001-974a-9b5e1e4b0ca0",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "4 names"
          }],
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 30,
          "text_colors": ["black"],
          "text_families": ["Lexend"],
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "71a1ea17-5ef0-41b2-910c-013b0d83ff2e",
        "type": "text",
        "label": "\u6587\u672c",
        "order": "Right-Name#2",
        "product": "Name#2",
        "price": "0",
        "advance": {
          "limit": {
            "max": 500,
            "value": true
          },
          "maximum": 12,
          "required": true,
          "placeholder": "eg: James, A\u2764, 2023..."
        },
        "conditional_setting": {
          "type": "field",
          "field_values": [{
            "fid": "c7632088-2e9a-4103-8ad6-8b82db59089b",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "706cf656-8f87-4620-9cbb-cf808fcdbd9c",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "2 names"
          }, {
            "fid": "7b4f9bec-6233-4c23-a8ac-fa88dbda928b",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "3ed6783b-62d6-4197-8f1d-53d2d8aaa615",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "3 names"
          }, {
            "fid": "24bea636-1788-4897-a545-5ca466e95c59",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "2004b9ce-0de6-4001-974a-9b5e1e4b0ca0",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "4 names"
          }],
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 30,
          "text_colors": ["black"],
          "text_families": ["Lexend"],
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "74bc6a84-d655-4233-8b93-61085df58574",
        "type": "text",
        "label": "\u6587\u672c",
        "order": "Right-Name#3",
        "product": "Name#3",
        "price": "0",
        "advance": {
          "limit": {
            "max": 500,
            "value": true
          },
          "maximum": 12,
          "required": true,
          "placeholder": "eg: James, A\u2764, 2023..."
        },
        "conditional_setting": {
          "type": "field",
          "field_values": [{
            "fid": "7b4f9bec-6233-4c23-a8ac-fa88dbda928b",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "3ed6783b-62d6-4197-8f1d-53d2d8aaa615",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "3 names"
          }, {
            "fid": "24bea636-1788-4897-a545-5ca466e95c59",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "2004b9ce-0de6-4001-974a-9b5e1e4b0ca0",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "4 names"
          }],
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 30,
          "text_colors": ["black"],
          "text_families": ["Lexend"],
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }, {
        "fid": "0a36df32-dba6-4456-9a07-31eb03aaca5d",
        "type": "text",
        "label": "\u6587\u672c",
        "order": "Right-Name#4",
        "product": "Name#4",
        "price": "0",
        "advance": {
          "limit": {
            "max": 500,
            "value": true
          },
          "maximum": 12,
          "required": true,
          "placeholder": "eg: James, A\u2764, 2023..."
        },
        "conditional_setting": {
          "type": "field",
          "field_values": [{
            "fid": "24bea636-1788-4897-a545-5ca466e95c59",
            "field": "50277559-0dec-4090-81ae-7bf905193a03",
            "value": "2004b9ce-0de6-4001-974a-9b5e1e4b0ca0",
            "field_label": "Select the Number of Names ( Right sleeve)",
            "value_label": "4 names"
          }],
          "variant_values": null
        },
        "preview_setting": {
          "preview_open": false,
          "type": 1,
          "text_size": 30,
          "text_colors": ["black"],
          "text_families": ["Lexend"],
          "adjust_font_size": false,
          "moveabled": false,
          "select_color": "",
          "data": [],
          "upload_img_level": "up"
        },
        "text_custom_family_map": {
          "Amelya-Regular": "https:\/\/cdn.shoplazza.com\/f334ede0e63f5ae9a82c9b50b991d814.ttf",
          "Caveat-Regular": "https:\/\/cdn.shoplazza.com\/04c3547e70bd8d53833d325c37f9621f.ttf",
          "Gama Hand-Regular": "https:\/\/cdn.shoplazza.com\/891efdbe39d4a9aad389dc7ffa6404b6.ttf"
        },
        "product_origin_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305"
      }]
      window.appparakeet_variants = [{
        "id": "3b1db809-2255-4e57-9d5d-bd0bf707fd04",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XS-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -29,
        "sku": "thwy020-Sweatshirt-XS-MAMA",
        "barcode": "",
        "position": 1,
        "option1": "Sweatshirt",
        "option2": "XS",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=3b1db809-2255-4e57-9d5d-bd0bf707fd04",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "ddf706d1-b066-4377-8a58-b4ace76804ed",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XS-DADA",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Sweatshirt-XS-DADA",
        "barcode": "",
        "position": 2,
        "option1": "Sweatshirt",
        "option2": "XS",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=ddf706d1-b066-4377-8a58-b4ace76804ed",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "59053286-b74f-4c35-9198-f8dda54ac098",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XS-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Sweatshirt-XS-MOM",
        "barcode": "",
        "position": 3,
        "option1": "Sweatshirt",
        "option2": "XS",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=59053286-b74f-4c35-9198-f8dda54ac098",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "e4a5ee7c-daa4-4280-a73b-030f39e7e46a",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XS-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -2,
        "sku": "thwy020-Sweatshirt-XS-MOMMY",
        "barcode": "",
        "position": 4,
        "option1": "Sweatshirt",
        "option2": "XS",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=e4a5ee7c-daa4-4280-a73b-030f39e7e46a",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "7264cc42-e95d-479e-addc-890db5211f99",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XS-NANA",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Sweatshirt-XS-NANA",
        "barcode": "",
        "position": 5,
        "option1": "Sweatshirt",
        "option2": "XS",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=7264cc42-e95d-479e-addc-890db5211f99",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "fdefce6e-ec75-4889-9565-d6330b5214e2",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-S-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -88,
        "sku": "thwy020-Sweatshirt-S-MAMA",
        "barcode": "",
        "position": 6,
        "option1": "Sweatshirt",
        "option2": "S",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=fdefce6e-ec75-4889-9565-d6330b5214e2",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "49ca63e4-b23b-4e4a-8bb8-c5cdd032f006",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-S-DADA",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Sweatshirt-S-DADA",
        "barcode": "",
        "position": 7,
        "option1": "Sweatshirt",
        "option2": "S",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=49ca63e4-b23b-4e4a-8bb8-c5cdd032f006",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "b58adde3-565f-4c00-8456-164d47ebcba0",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-S-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -6,
        "sku": "thwy020-Sweatshirt-S-MOM",
        "barcode": "",
        "position": 8,
        "option1": "Sweatshirt",
        "option2": "S",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=b58adde3-565f-4c00-8456-164d47ebcba0",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "8488ec3b-e067-49bf-8aab-48885465261e",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-S-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -9,
        "sku": "thwy020-Sweatshirt-S-MOMMY",
        "barcode": "",
        "position": 9,
        "option1": "Sweatshirt",
        "option2": "S",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=8488ec3b-e067-49bf-8aab-48885465261e",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "ffa5db9d-9ed8-4a66-ae17-7eba593469a1",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-S-NANA",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Sweatshirt-S-NANA",
        "barcode": "",
        "position": 10,
        "option1": "Sweatshirt",
        "option2": "S",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=ffa5db9d-9ed8-4a66-ae17-7eba593469a1",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "b548f372-e804-487e-914b-1ca855ddae9c",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-M-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -197,
        "sku": "thwy020-Sweatshirt-M-MAMA",
        "barcode": "",
        "position": 11,
        "option1": "Sweatshirt",
        "option2": "M",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=b548f372-e804-487e-914b-1ca855ddae9c",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "28785ca1-b0f9-4c2d-82e4-58a0e0bf03a3",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-M-DADA",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Sweatshirt-M-DADA",
        "barcode": "",
        "position": 12,
        "option1": "Sweatshirt",
        "option2": "M",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=28785ca1-b0f9-4c2d-82e4-58a0e0bf03a3",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "30df83b7-8bd9-4e05-97ab-3ee4d20505c4",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-M-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -8,
        "sku": "thwy020-Sweatshirt-M-MOM",
        "barcode": "",
        "position": 13,
        "option1": "Sweatshirt",
        "option2": "M",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=30df83b7-8bd9-4e05-97ab-3ee4d20505c4",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "35b67afe-e5eb-493c-b1e7-5be56d0cc2f2",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-M-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -21,
        "sku": "thwy020-Sweatshirt-M-MOMMY",
        "barcode": "",
        "position": 14,
        "option1": "Sweatshirt",
        "option2": "M",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=35b67afe-e5eb-493c-b1e7-5be56d0cc2f2",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "ffe36291-b3ed-4356-abc5-74b9796f67e0",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-M-NANA",
        "weight_unit": "kg",
        "inventory_quantity": -7,
        "sku": "thwy020-Sweatshirt-M-NANA",
        "barcode": "",
        "position": 15,
        "option1": "Sweatshirt",
        "option2": "M",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=ffe36291-b3ed-4356-abc5-74b9796f67e0",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "6b565a00-a3dc-423b-a6ba-79124b733e8e",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-L-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -231,
        "sku": "thwy020-Sweatshirt-L-MAMA",
        "barcode": "",
        "position": 16,
        "option1": "Sweatshirt",
        "option2": "L",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=6b565a00-a3dc-423b-a6ba-79124b733e8e",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "b9472642-ece3-4dcb-bc8b-271e0be5c5cc",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-L-DADA",
        "weight_unit": "kg",
        "inventory_quantity": -2,
        "sku": "thwy020-Sweatshirt-L-DADA",
        "barcode": "",
        "position": 17,
        "option1": "Sweatshirt",
        "option2": "L",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=b9472642-ece3-4dcb-bc8b-271e0be5c5cc",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "fa2cab4b-4b04-46d8-97ec-cdace699f3f3",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-L-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -15,
        "sku": "thwy020-Sweatshirt-L-MOM",
        "barcode": "",
        "position": 18,
        "option1": "Sweatshirt",
        "option2": "L",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=fa2cab4b-4b04-46d8-97ec-cdace699f3f3",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "a8175026-ecf0-49ff-9116-2e8b91406af5",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-L-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -19,
        "sku": "thwy020-Sweatshirt-L-MOMMY",
        "barcode": "",
        "position": 19,
        "option1": "Sweatshirt",
        "option2": "L",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=a8175026-ecf0-49ff-9116-2e8b91406af5",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "5fa13637-e1de-49db-818f-c2e47062fcdc",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-L-NANA",
        "weight_unit": "kg",
        "inventory_quantity": -5,
        "sku": "thwy020-Sweatshirt-L-NANA",
        "barcode": "",
        "position": 20,
        "option1": "Sweatshirt",
        "option2": "L",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=5fa13637-e1de-49db-818f-c2e47062fcdc",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "8fc8a402-0523-4d98-8ca1-1041f9af822b",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XL-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -144,
        "sku": "thwy020-Sweatshirt-XL-MAMA",
        "barcode": "",
        "position": 21,
        "option1": "Sweatshirt",
        "option2": "XL",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=8fc8a402-0523-4d98-8ca1-1041f9af822b",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "401ed91e-6a4c-4629-9f8b-d640c6909247",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XL-DADA",
        "weight_unit": "kg",
        "inventory_quantity": -13,
        "sku": "thwy020-Sweatshirt-XL-DADA",
        "barcode": "",
        "position": 22,
        "option1": "Sweatshirt",
        "option2": "XL",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=401ed91e-6a4c-4629-9f8b-d640c6909247",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "536e4533-f46e-4a7a-8171-c4aea911ed07",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XL-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -4,
        "sku": "thwy020-Sweatshirt-XL-MOM",
        "barcode": "",
        "position": 23,
        "option1": "Sweatshirt",
        "option2": "XL",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=536e4533-f46e-4a7a-8171-c4aea911ed07",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "c47d3382-b156-4cdb-83ed-d44598f8dc7d",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XL-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -10,
        "sku": "thwy020-Sweatshirt-XL-MOMMY",
        "barcode": "",
        "position": 24,
        "option1": "Sweatshirt",
        "option2": "XL",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=c47d3382-b156-4cdb-83ed-d44598f8dc7d",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "cfcc8f4d-0ce7-4268-9631-bbdcda9eec50",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-XL-NANA",
        "weight_unit": "kg",
        "inventory_quantity": -4,
        "sku": "thwy020-Sweatshirt-XL-NANA",
        "barcode": "",
        "position": 25,
        "option1": "Sweatshirt",
        "option2": "XL",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=cfcc8f4d-0ce7-4268-9631-bbdcda9eec50",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "0b0809db-5e72-40c7-b507-7f2cbedc8e4b",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-2XL-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -78,
        "sku": "thwy020-Sweatshirt-2XL-MAMA",
        "barcode": "",
        "position": 26,
        "option1": "Sweatshirt",
        "option2": "2XL",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=0b0809db-5e72-40c7-b507-7f2cbedc8e4b",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "b2892d2f-0b27-4416-b34b-1d123be90020",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-2XL-DADA",
        "weight_unit": "kg",
        "inventory_quantity": -7,
        "sku": "thwy020-Sweatshirt-2XL-DADA",
        "barcode": "",
        "position": 27,
        "option1": "Sweatshirt",
        "option2": "2XL",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=b2892d2f-0b27-4416-b34b-1d123be90020",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "60ab4938-aeee-4e0e-a292-9af8a2b09088",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-2XL-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -4,
        "sku": "thwy020-Sweatshirt-2XL-MOM",
        "barcode": "",
        "position": 28,
        "option1": "Sweatshirt",
        "option2": "2XL",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=60ab4938-aeee-4e0e-a292-9af8a2b09088",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "9fde8dd3-baa0-41c3-989d-e69fcd437f7f",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-2XL-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -9,
        "sku": "thwy020-Sweatshirt-2XL-MOMMY",
        "barcode": "",
        "position": 29,
        "option1": "Sweatshirt",
        "option2": "2XL",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "34.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=9fde8dd3-baa0-41c3-989d-e69fcd437f7f",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 35,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "268cc8ac-499f-4174-bd88-cf835cfb3a24",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Sweatshirt-2XL-NANA",
        "weight_unit": "kg",
        "inventory_quantity": -3,
        "sku": "thwy020-Sweatshirt-2XL-NANA",
        "barcode": "",
        "position": 30,
        "option1": "Sweatshirt",
        "option2": "2XL",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 34.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "34.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=268cc8ac-499f-4174-bd88-cf835cfb3a24",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Sweatshirt"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 39,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "7c56de75-43cf-4388-97c6-0c2b77ea4a4a",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XS-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -5,
        "sku": "thwy020-Hoodie-XS-MAMA",
        "barcode": "",
        "position": 31,
        "option1": "Hoodie",
        "option2": "XS",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=7c56de75-43cf-4388-97c6-0c2b77ea4a4a",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "b31673de-367f-4697-b983-d1d3bb89e418",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XS-DADA",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Hoodie-XS-DADA",
        "barcode": "",
        "position": 32,
        "option1": "Hoodie",
        "option2": "XS",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=b31673de-367f-4697-b983-d1d3bb89e418",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "60be2007-cebe-403d-914d-694a1500c140",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XS-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Hoodie-XS-MOM",
        "barcode": "",
        "position": 33,
        "option1": "Hoodie",
        "option2": "XS",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=60be2007-cebe-403d-914d-694a1500c140",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "b7488ada-fb3e-4baa-81b9-99641dfda023",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XS-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Hoodie-XS-MOMMY",
        "barcode": "",
        "position": 34,
        "option1": "Hoodie",
        "option2": "XS",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=b7488ada-fb3e-4baa-81b9-99641dfda023",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "fb7a540b-aabb-4f02-9a50-a1ff50e8efe8",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XS-NANA",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Hoodie-XS-NANA",
        "barcode": "",
        "position": 35,
        "option1": "Hoodie",
        "option2": "XS",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=fb7a540b-aabb-4f02-9a50-a1ff50e8efe8",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XS"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "bc658fb5-b445-4482-b1cc-af722b7faa6b",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-S-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -16,
        "sku": "thwy020-Hoodie-S-MAMA",
        "barcode": "",
        "position": 36,
        "option1": "Hoodie",
        "option2": "S",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=bc658fb5-b445-4482-b1cc-af722b7faa6b",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "898f7caa-c479-4730-942c-2b18b6e42b7d",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-S-DADA",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Hoodie-S-DADA",
        "barcode": "",
        "position": 37,
        "option1": "Hoodie",
        "option2": "S",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=898f7caa-c479-4730-942c-2b18b6e42b7d",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "970cbc6b-38d3-43f9-9537-ad1234e1f942",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-S-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Hoodie-S-MOM",
        "barcode": "",
        "position": 38,
        "option1": "Hoodie",
        "option2": "S",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=970cbc6b-38d3-43f9-9537-ad1234e1f942",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "40896e56-d862-4a1f-b016-91e85330e42d",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-S-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -3,
        "sku": "thwy020-Hoodie-S-MOMMY",
        "barcode": "",
        "position": 39,
        "option1": "Hoodie",
        "option2": "S",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=40896e56-d862-4a1f-b016-91e85330e42d",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "8e1a0de5-e5f8-4813-b1d6-f5de463c2663",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-S-NANA",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Hoodie-S-NANA",
        "barcode": "",
        "position": 40,
        "option1": "Hoodie",
        "option2": "S",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=8e1a0de5-e5f8-4813-b1d6-f5de463c2663",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "S"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "2f58d9e4-0468-4d90-a8ab-a38f29a04de1",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-M-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -38,
        "sku": "thwy020-Hoodie-M-MAMA",
        "barcode": "",
        "position": 41,
        "option1": "Hoodie",
        "option2": "M",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=2f58d9e4-0468-4d90-a8ab-a38f29a04de1",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "c597a601-1bce-4e39-9e1b-32ca6bcc1cd7",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-M-DADA",
        "weight_unit": "kg",
        "inventory_quantity": -3,
        "sku": "thwy020-Hoodie-M-DADA",
        "barcode": "",
        "position": 42,
        "option1": "Hoodie",
        "option2": "M",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=c597a601-1bce-4e39-9e1b-32ca6bcc1cd7",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "0b80973b-e09f-4361-ab8f-6ff26ae1bebe",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-M-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -2,
        "sku": "thwy020-Hoodie-M-MOM",
        "barcode": "",
        "position": 43,
        "option1": "Hoodie",
        "option2": "M",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=0b80973b-e09f-4361-ab8f-6ff26ae1bebe",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "3138405d-d148-4fc9-b489-2760ebb5c32e",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-M-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -2,
        "sku": "thwy020-Hoodie-M-MOMMY",
        "barcode": "",
        "position": 44,
        "option1": "Hoodie",
        "option2": "M",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=3138405d-d148-4fc9-b489-2760ebb5c32e",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "068512bf-e165-43e4-b458-a6818df669a9",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-M-NANA",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Hoodie-M-NANA",
        "barcode": "",
        "position": 45,
        "option1": "Hoodie",
        "option2": "M",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=068512bf-e165-43e4-b458-a6818df669a9",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "M"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "f9d44872-903b-4df5-beaf-c8cf40316e84",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-L-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -49,
        "sku": "thwy020-Hoodie-L-MAMA",
        "barcode": "",
        "position": 46,
        "option1": "Hoodie",
        "option2": "L",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=f9d44872-903b-4df5-beaf-c8cf40316e84",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "072df371-5c78-4338-b5dc-63b7f15fdd6a",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-L-DADA",
        "weight_unit": "kg",
        "inventory_quantity": -5,
        "sku": "thwy020-Hoodie-L-DADA",
        "barcode": "",
        "position": 47,
        "option1": "Hoodie",
        "option2": "L",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=072df371-5c78-4338-b5dc-63b7f15fdd6a",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "f6a67a56-b1db-4dc7-bf76-7fc6c361080a",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-L-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -2,
        "sku": "thwy020-Hoodie-L-MOM",
        "barcode": "",
        "position": 48,
        "option1": "Hoodie",
        "option2": "L",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=f6a67a56-b1db-4dc7-bf76-7fc6c361080a",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "6c27510e-78d4-44d1-8462-688a9d930ea0",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-L-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -7,
        "sku": "thwy020-Hoodie-L-MOMMY",
        "barcode": "",
        "position": 49,
        "option1": "Hoodie",
        "option2": "L",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=6c27510e-78d4-44d1-8462-688a9d930ea0",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "348c5beb-edb9-4f32-aff3-137eb24e1534",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-L-NANA",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Hoodie-L-NANA",
        "barcode": "",
        "position": 50,
        "option1": "Hoodie",
        "option2": "L",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=348c5beb-edb9-4f32-aff3-137eb24e1534",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "L"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "0ea9a313-a121-404e-a827-e77e794d79fa",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XL-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -28,
        "sku": "thwy020-Hoodie-XL-MAMA",
        "barcode": "",
        "position": 51,
        "option1": "Hoodie",
        "option2": "XL",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=0ea9a313-a121-404e-a827-e77e794d79fa",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "9bd8b355-21d2-4e8c-bb55-1657f7c44b67",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XL-DADA",
        "weight_unit": "kg",
        "inventory_quantity": -5,
        "sku": "thwy020-Hoodie-XL-DADA",
        "barcode": "",
        "position": 52,
        "option1": "Hoodie",
        "option2": "XL",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=9bd8b355-21d2-4e8c-bb55-1657f7c44b67",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "f5dd28f2-3a0f-4c4d-bb2b-773e6eaa3dbf",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XL-MOM",
        "weight_unit": "kg",
        "inventory_quantity": -4,
        "sku": "thwy020-Hoodie-XL-MOM",
        "barcode": "",
        "position": 53,
        "option1": "Hoodie",
        "option2": "XL",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=f5dd28f2-3a0f-4c4d-bb2b-773e6eaa3dbf",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "b8d4ec4c-978c-403b-aa38-d8c971b0a65c",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XL-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": -2,
        "sku": "thwy020-Hoodie-XL-MOMMY",
        "barcode": "",
        "position": 54,
        "option1": "Hoodie",
        "option2": "XL",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=b8d4ec4c-978c-403b-aa38-d8c971b0a65c",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "c708869d-46aa-45ac-a6e3-40a10785e82b",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-XL-NANA",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Hoodie-XL-NANA",
        "barcode": "",
        "position": 55,
        "option1": "Hoodie",
        "option2": "XL",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=c708869d-46aa-45ac-a6e3-40a10785e82b",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "XL"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "05fec079-6ebf-40e8-811a-17c072396134",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-2XL-MAMA",
        "weight_unit": "kg",
        "inventory_quantity": -16,
        "sku": "thwy020-Hoodie-2XL-MAMA",
        "barcode": "",
        "position": 56,
        "option1": "Hoodie",
        "option2": "2XL",
        "option3": "MAMA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
          "path": "b0edbe95b2219b843ca627119c775992.jpg",
          "width": 968,
          "height": 968,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=05fec079-6ebf-40e8-811a-17c072396134",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "MAMA"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "2bab965b-c034-4c9e-aed1-998f485f1b21",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-2XL-DADA",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Hoodie-2XL-DADA",
        "barcode": "",
        "position": 57,
        "option1": "Hoodie",
        "option2": "2XL",
        "option3": "DADA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
          "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
          "width": 3024,
          "height": 3024,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=2bab965b-c034-4c9e-aed1-998f485f1b21",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "DADA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "14b7a3a5-2292-4580-b126-e9d3dcf17071",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-2XL-MOM",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Hoodie-2XL-MOM",
        "barcode": "",
        "position": 58,
        "option1": "Hoodie",
        "option2": "2XL",
        "option3": "MOM",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
          "path": "4568201574ac927e6cd39552edbb4da9.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=14b7a3a5-2292-4580-b126-e9d3dcf17071",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "MOM"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "7dc3e1bc-0e5d-4903-90cb-bde860a332dd",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-2XL-MOMMY",
        "weight_unit": "kg",
        "inventory_quantity": 0,
        "sku": "thwy020-Hoodie-2XL-MOMMY",
        "barcode": "",
        "position": 59,
        "option1": "Hoodie",
        "option2": "2XL",
        "option3": "MOMMY",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "53.95",
        "price": "37.95",
        "retail_price": "53.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=7dc3e1bc-0e5d-4903-90cb-bde860a332dd",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "MOMMY"
        }],
        "off_ratio": 30,
        "flashsale_info": [],
        "sales": 912
      }, {
        "id": "50648ad6-e485-4a85-b9f0-d2556097323f",
        "product_id": "f0ad4fc5-a941-4de7-a98a-834ecb5e3305",
        "title": "Hoodie-2XL-NANA",
        "weight_unit": "kg",
        "inventory_quantity": -1,
        "sku": "thwy020-Hoodie-2XL-NANA",
        "barcode": "",
        "position": 60,
        "option1": "Hoodie",
        "option2": "2XL",
        "option3": "NANA",
        "note": "",
        "image": {
          "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
          "width": 750,
          "height": 750,
          "alt": "",
          "aspect_ratio": 1
        },
        "wholesale_price": [{
          "price": 37.95,
          "min_quantity": 1
        }],
        "weight": "0",
        "compare_at_price": "56.95",
        "price": "37.95",
        "retail_price": "56.95",
        "available": true,
        "url": "\/products\/custom-mama-christmas-sweatshirt-with-kids-names-on-sleeve?variant=50648ad6-e485-4a85-b9f0-d2556097323f",
        "available_quantity": 999999999,
        "options": [{
          "name": "Style",
          "value": "Hoodie"
        }, {
          "name": "Size",
          "value": "2XL"
        }, {
          "name": "Choose Design",
          "value": "NANA"
        }],
        "off_ratio": 33,
        "flashsale_info": [],
        "sales": 912
      }]
      window.appparakeet_images = [{
        "src": "\/\/img.fantaskycdn.com\/4b1282be530b83cf4c870b43c00fe841.jpg",
        "path": "4b1282be530b83cf4c870b43c00fe841.jpg",
        "width": 950,
        "height": 950,
        "alt": "",
        "aspect_ratio": 1
      }, {
        "src": "\/\/img.fantaskycdn.com\/b0edbe95b2219b843ca627119c775992.jpg",
        "path": "b0edbe95b2219b843ca627119c775992.jpg",
        "width": 968,
        "height": 968,
        "alt": "",
        "aspect_ratio": 1
      }, {
        "src": "\/\/img.fantaskycdn.com\/a214dfa342ecd494b4aa94dda84c0877.jpg",
        "path": "a214dfa342ecd494b4aa94dda84c0877.jpg",
        "width": 3024,
        "height": 3024,
        "alt": "",
        "aspect_ratio": 1
      }, {
        "src": "\/\/img.fantaskycdn.com\/4568201574ac927e6cd39552edbb4da9.jpg",
        "path": "4568201574ac927e6cd39552edbb4da9.jpg",
        "width": 750,
        "height": 750,
        "alt": "",
        "aspect_ratio": 1
      }, {
        "src": "\/\/img.fantaskycdn.com\/f5c9fe81bb2be4de54fab56ef054bb2e.png",
        "path": "f5c9fe81bb2be4de54fab56ef054bb2e.png",
        "width": 800,
        "height": 800,
        "alt": "",
        "aspect_ratio": 1
      }, {
        "src": "\/\/img.fantaskycdn.com\/371cb1ce8cdadb1b66f8124ea7c4a127.jpeg",
        "path": "371cb1ce8cdadb1b66f8124ea7c4a127.jpeg",
        "width": 800,
        "height": 800,
        "alt": "",
        "aspect_ratio": 1
      }, {
        "src": "\/\/img.fantaskycdn.com\/8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
        "path": "8b0d802d9ba18f747f15ac1cd9d350bd.jpg",
        "width": 750,
        "height": 750,
        "alt": "",
        "aspect_ratio": 1
      }, {
        "src": "\/\/img.fantaskycdn.com\/26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
        "path": "26976bbe0b3021a9c3c3c5ae5293c6cd.jpg",
        "width": 750,
        "height": 750,
        "alt": "",
        "aspect_ratio": 1
      }]
      try {
        setTimeout(() => {
          console.log('/*********** app parakeet start **** 24.5.14 ****************/');
          if (window.appparakeet_data && window.appparakeet_data.length) {
            let addBtn = document.querySelector('[data-track-source=add_to_cart]');
            let buyBtn = document.querySelector('[data-track-source=buy_now]');
            let paypalBtn = document.querySelector('#paypal-express-button-container');
            if (addBtn && !addBtn.getAttribute('disabled')) {
              addBtn.setAttribute('disabled', 'disabled');
            }
            if (buyBtn && !buyBtn.getAttribute('disabled')) {
              buyBtn.setAttribute('disabled', 'disabled');
            }
            if (paypalBtn && !paypalBtn.getAttribute('disabled')) {
              paypalBtn.setAttribute('disabled', 'disabled');
            }
            setTimeout(() => {
              if (addBtn) {
                addBtn.disabled = null;
              }
              if (buyBtn) {
                buyBtn.disabled = null;
              }
              if (paypalBtn) {
                paypalBtn.disabled = null;
              }
              console.log('/***************** app parakeet end ************************/');
            }, 1500);
          }
        }, 50)
      } catch (error) {
        console.log(error);
      }
      //**app-parakeet.js-start**//
      ! function(e, t) {
        "object" == typeof exports && "undefined" != typeof module ? t(require("jsdom"), require("jsdom/lib/jsdom/living/generated/utils"), require("jsdom/lib/jsdom/utils"), require("sortablejs")) : "function" == typeof define && define.amd ? define(
          ["jsdom", "jsdom/lib/jsdom/living/generated/utils", "jsdom/lib/jsdom/utils", "sortablejs"], t) : t((e = "undefined" != typeof globalThis ? globalThis : e || self).require$$0, e.require$$1, e.require$$2, e.require$$0$1)
      }(this, (function(e, t, n, r) {
        "use strict";

        function i(e) {
          return e && "object" == typeof e && "default" in e ? e : {
            default: e
          }
        }
        var o = i(e),
          a = i(t),
          s = i(n),
          l = i(r),
          c = e => {
            var t = document.querySelector("#app-parakeet-style");
            t && (t.innerHTML = "".concat(t.innerHTML, "\n    ").concat(e))
          };

        function u(e, t) {
          var n = Object.keys(e);
          if (Object.getOwnPropertySymbols) {
            var r = Object.getOwnPropertySymbols(e);
            t && (r = r.filter((function(t) {
              return Object.getOwnPropertyDescriptor(e, t).enumerable
            }))), n.push.apply(n, r)
          }
          return n
        }

        function h(e) {
          for (var t = 1; t < arguments.length; t++) {
            var n = null != arguments[t] ? arguments[t] : {};
            t % 2 ? u(Object(n), !0).forEach((function(t) {
              f(e, t, n[t])
            })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : u(Object(n)).forEach((function(t) {
              Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t))
            }))
          }
          return e
        }

        function p(e, t, n, r, i, o, a) {
          try {
            var s = e[o](a),
              l = s.value
          } catch (e) {
            return void n(e)
          }
          s.done ? t(l) : Promise.resolve(l).then(r, i)
        }

        function d(e) {
          return function() {
            var t = this,
              n = arguments;
            return new Promise((function(r, i) {
              var o = e.apply(t, n);

              function a(e) {
                p(o, r, i, a, s, "next", e)
              }

              function s(e) {
                p(o, r, i, a, s, "throw", e)
              }
              a(void 0)
            }))
          }
        }

        function f(e, t, n) {
          return t in e ? Object.defineProperty(e, t, {
            value: n,
            enumerable: !0,
            configurable: !0,
            writable: !0
          }) : e[t] = n, e
        }

        function g(e, t) {
          if (null == e) return {};
          var n, r, i = function(e, t) {
            if (null == e) return {};
            var n, r, i = {},
              o = Object.keys(e);
            for (r = 0; r < o.length; r++) n = o[r], t.indexOf(n) >= 0 || (i[n] = e[n]);
            return i
          }(e, t);
          if (Object.getOwnPropertySymbols) {
            var o = Object.getOwnPropertySymbols(e);
            for (r = 0; r < o.length; r++) n = o[r], t.indexOf(n) >= 0 || Object.prototype.propertyIsEnumerable.call(e, n) && (i[n] = e[n])
          }
          return i
        }
        c(
        '#app-parakeet *,#app-parakeet :after,#app-parakeet :before,.plugin-parakeet *,.plugin-parakeet :after,.plugin-parakeet :before{border:0 solid #e5e7eb;box-sizing:border-box}#app-parakeet :after,#app-parakeet :before,.plugin-parakeet :after,.plugin-parakeet :before{--tw-content:""}#app-parakeet html,.plugin-parakeet html{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,Helvetica Neue,Arial,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;tab-size:4}#app-parakeet body,.plugin-parakeet body{line-height:inherit;margin:0}#app-parakeet hr,.plugin-parakeet hr{border-top-width:1px;color:inherit;height:0}#app-parakeet abbr:where([title]),.plugin-parakeet abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}#app-parakeet h1,#app-parakeet h2,#app-parakeet h3,#app-parakeet h4,#app-parakeet h5,#app-parakeet h6,.plugin-parakeet h1,.plugin-parakeet h2,.plugin-parakeet h3,.plugin-parakeet h4,.plugin-parakeet h5,.plugin-parakeet h6{font-size:inherit;font-weight:inherit}#app-parakeet a,.plugin-parakeet a{color:inherit;text-decoration:inherit}#app-parakeet b,#app-parakeet strong,.plugin-parakeet b,.plugin-parakeet strong{font-weight:bolder}#app-parakeet code,#app-parakeet kbd,#app-parakeet pre,#app-parakeet samp,.plugin-parakeet code,.plugin-parakeet kbd,.plugin-parakeet pre,.plugin-parakeet samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}#app-parakeet small,.plugin-parakeet small{font-size:80%}#app-parakeet sub,#app-parakeet sup,.plugin-parakeet sub,.plugin-parakeet sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}#app-parakeet sub,.plugin-parakeet sub{bottom:-.25em}#app-parakeet sup,.plugin-parakeet sup{top:-.5em}#app-parakeet table,.plugin-parakeet table{border-collapse:collapse;border-color:inherit;text-indent:0}#app-parakeet button,#app-parakeet input,#app-parakeet optgroup,#app-parakeet select,#app-parakeet textarea,.plugin-parakeet button,.plugin-parakeet input,.plugin-parakeet optgroup,.plugin-parakeet select,.plugin-parakeet textarea{color:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;margin:0;padding:0}#app-parakeet button,#app-parakeet select,.plugin-parakeet button,.plugin-parakeet select{text-transform:none}#app-parakeet [type=button],#app-parakeet [type=reset],#app-parakeet [type=submit],#app-parakeet button,.plugin-parakeet [type=button],.plugin-parakeet [type=reset],.plugin-parakeet [type=submit],.plugin-parakeet button{-webkit-appearance:button;background-color:initial;background-image:none}#app-parakeet :-moz-focusring,.plugin-parakeet :-moz-focusring{outline:auto}#app-parakeet :-moz-ui-invalid,.plugin-parakeet :-moz-ui-invalid{box-shadow:none}#app-parakeet progress,.plugin-parakeet progress{vertical-align:initial}#app-parakeet ::-webkit-inner-spin-button,#app-parakeet ::-webkit-outer-spin-button,.plugin-parakeet ::-webkit-inner-spin-button,.plugin-parakeet ::-webkit-outer-spin-button{height:auto}#app-parakeet [type=search],.plugin-parakeet [type=search]{-webkit-appearance:textfield;outline-offset:-2px}#app-parakeet ::-webkit-search-decoration,.plugin-parakeet ::-webkit-search-decoration{-webkit-appearance:none}#app-parakeet ::-webkit-file-upload-button,.plugin-parakeet ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}#app-parakeet summary,.plugin-parakeet summary{display:list-item}#app-parakeet blockquote,#app-parakeet dd,#app-parakeet dl,#app-parakeet figure,#app-parakeet h1,#app-parakeet h2,#app-parakeet h3,#app-parakeet h4,#app-parakeet h5,#app-parakeet h6,#app-parakeet hr,#app-parakeet p,#app-parakeet pre,.plugin-parakeet blockquote,.plugin-parakeet dd,.plugin-parakeet dl,.plugin-parakeet figure,.plugin-parakeet h1,.plugin-parakeet h2,.plugin-parakeet h3,.plugin-parakeet h4,.plugin-parakeet h5,.plugin-parakeet h6,.plugin-parakeet hr,.plugin-parakeet p,.plugin-parakeet pre{margin:0}#app-parakeet fieldset,.plugin-parakeet fieldset{margin:0;padding:0}#app-parakeet legend,.plugin-parakeet legend{padding:0}#app-parakeet menu,#app-parakeet ol,#app-parakeet ul,.plugin-parakeet menu,.plugin-parakeet ol,.plugin-parakeet ul{list-style:none;margin:0;padding:0}#app-parakeet textarea,.plugin-parakeet textarea{resize:vertical}#app-parakeet input::-webkit-input-placeholder,#app-parakeet textarea::-webkit-input-placeholder,.plugin-parakeet input::-webkit-input-placeholder,.plugin-parakeet textarea::-webkit-input-placeholder{color:#9ca3af;opacity:1}#app-parakeet input::placeholder,#app-parakeet textarea::placeholder,.plugin-parakeet input::placeholder,.plugin-parakeet textarea::placeholder{color:#9ca3af;opacity:1}#app-parakeet [role=button],#app-parakeet button,.plugin-parakeet [role=button],.plugin-parakeet button{cursor:pointer}#app-parakeet :disabled,.plugin-parakeet :disabled{cursor:default}#app-parakeet audio,#app-parakeet canvas,#app-parakeet embed,#app-parakeet iframe,#app-parakeet img,#app-parakeet object,#app-parakeet svg,#app-parakeet video,.plugin-parakeet audio,.plugin-parakeet canvas,.plugin-parakeet embed,.plugin-parakeet iframe,.plugin-parakeet img,.plugin-parakeet object,.plugin-parakeet svg,.plugin-parakeet video{display:block;vertical-align:middle}#app-parakeet img,#app-parakeet video,.plugin-parakeet img,.plugin-parakeet video{height:auto;max-width:100%}#app-parakeet *,#app-parakeet :after,#app-parakeet :before,.plugin-parakeet *,.plugin-parakeet :after,.plugin-parakeet :before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }#app-parakeet ::-webkit-backdrop,.plugin-parakeet ::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }#app-parakeet ::backdrop,.plugin-parakeet ::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }#app-parakeet .pk-pointer-events-none,.plugin-parakeet .pk-pointer-events-none{pointer-events:none}#app-parakeet .pk-absolute,.plugin-parakeet .pk-absolute{position:absolute}#app-parakeet .pk-relative,.plugin-parakeet .pk-relative{position:relative}#app-parakeet .pk-top-0,.plugin-parakeet .pk-top-0{top:0}#app-parakeet .pk-left-0,.plugin-parakeet .pk-left-0{left:0}#app-parakeet .pk--top-3,.plugin-parakeet .pk--top-3{top:-.75rem}#app-parakeet .pk--right-3,.plugin-parakeet .pk--right-3{right:-.75rem}#app-parakeet .pk-z-\\[9999\\],.plugin-parakeet .pk-z-\\[9999\\]{z-index:9999}#app-parakeet .pk-my-6,.plugin-parakeet .pk-my-6{margin-bottom:1.5rem;margin-top:1.5rem}#app-parakeet .pk-mx-1,.plugin-parakeet .pk-mx-1{margin-left:.25rem;margin-right:.25rem}#app-parakeet .pk--mx-4,.plugin-parakeet .pk--mx-4{margin-left:-1rem;margin-right:-1rem}#app-parakeet .pk-my-0,.plugin-parakeet .pk-my-0{margin-bottom:0;margin-top:0}#app-parakeet .pk-ml-\\[10px\\],.plugin-parakeet .pk-ml-\\[10px\\]{margin-left:10px}#app-parakeet .pk-mr-\\[10px\\],.plugin-parakeet .pk-mr-\\[10px\\]{margin-right:10px}#app-parakeet .pk-mb-4,.plugin-parakeet .pk-mb-4{margin-bottom:1rem}#app-parakeet .pk-mr-2\\.5,.plugin-parakeet .pk-mr-2\\.5{margin-right:.625rem}#app-parakeet .pk-mr-2,.plugin-parakeet .pk-mr-2{margin-right:.5rem}#app-parakeet .pk-ml-1\\.5,.plugin-parakeet .pk-ml-1\\.5{margin-left:.375rem}#app-parakeet .pk-ml-1,.plugin-parakeet .pk-ml-1{margin-left:.25rem}#app-parakeet .pk-mb-3,.plugin-parakeet .pk-mb-3{margin-bottom:.75rem}#app-parakeet .pk-mb-2\\.5,.plugin-parakeet .pk-mb-2\\.5{margin-bottom:.625rem}#app-parakeet .pk-mb-2,.plugin-parakeet .pk-mb-2{margin-bottom:.5rem}#app-parakeet .pk-mt-2,.plugin-parakeet .pk-mt-2{margin-top:.5rem}#app-parakeet .\\!pk-mt-7,.plugin-parakeet .\\!pk-mt-7{margin-top:1.75rem!important}#app-parakeet .pk-ml-2,.plugin-parakeet .pk-ml-2{margin-left:.5rem}#app-parakeet .pk--mt-0\\.5,.plugin-parakeet .pk--mt-0\\.5{margin-top:-.125rem}#app-parakeet .pk--mb-1\\.5,.plugin-parakeet .pk--mb-1\\.5{margin-bottom:-.375rem}#app-parakeet .pk--mt-0,.plugin-parakeet .pk--mt-0{margin-top:0}#app-parakeet .pk--mb-1,.plugin-parakeet .pk--mb-1{margin-bottom:-.25rem}#app-parakeet .\\!pk-mb-0,.plugin-parakeet .\\!pk-mb-0{margin-bottom:0!important}#app-parakeet .pk-ml-3,.plugin-parakeet .pk-ml-3{margin-left:.75rem}#app-parakeet .pk-ml-auto,.plugin-parakeet .pk-ml-auto{margin-left:auto}#app-parakeet .pk-mr-4,.plugin-parakeet .pk-mr-4{margin-right:1rem}#app-parakeet .pk--mt-1\\.5,.plugin-parakeet .pk--mt-1\\.5{margin-top:-.375rem}#app-parakeet .pk--ml-2,.plugin-parakeet .pk--ml-2{margin-left:-.5rem}#app-parakeet .pk--mt-1,.plugin-parakeet .pk--mt-1{margin-top:-.25rem}#app-parakeet .pk-mt-3,.plugin-parakeet .pk-mt-3{margin-top:.75rem}#app-parakeet .pk-block,.plugin-parakeet .pk-block{display:block}#app-parakeet .pk-inline-block,.plugin-parakeet .pk-inline-block{display:inline-block}#app-parakeet .pk-flex,.plugin-parakeet .pk-flex{display:flex}#app-parakeet .pk-grid,.plugin-parakeet .pk-grid{display:grid}#app-parakeet .pk-h-4\\.5,.plugin-parakeet .pk-h-4\\.5{height:1.125rem}#app-parakeet .pk-h-4,.plugin-parakeet .pk-h-4{height:1rem}#app-parakeet .pk-h-11\\.5,.plugin-parakeet .pk-h-11\\.5{height:2.875rem}#app-parakeet .pk-h-11,.plugin-parakeet .pk-h-11{height:2.75rem}#app-parakeet .pk-h-full,.plugin-parakeet .pk-h-full{height:100%}#app-parakeet .pk-h-18,.plugin-parakeet .pk-h-18{height:4.5rem}#app-parakeet .pk-h-23,.plugin-parakeet .pk-h-23{height:5.75rem}#app-parakeet .pk-h-20,.plugin-parakeet .pk-h-20{height:5rem}#app-parakeet .pk-w-4\\.5,.plugin-parakeet .pk-w-4\\.5{width:1.125rem}#app-parakeet .pk-w-4,.plugin-parakeet .pk-w-4{width:1rem}#app-parakeet .pk-w-full,.plugin-parakeet .pk-w-full{width:100%}#app-parakeet .pk-w-11,.plugin-parakeet .pk-w-11{width:2.75rem}#app-parakeet .pk-w-18,.plugin-parakeet .pk-w-18{width:4.5rem}#app-parakeet .pk-w-23,.plugin-parakeet .pk-w-23{width:5.75rem}#app-parakeet .pk-w-20,.plugin-parakeet .pk-w-20{width:5rem}#app-parakeet .pk-w-fit,.plugin-parakeet .pk-w-fit{width:-webkit-fit-content;width:fit-content}#app-parakeet .pk-min-w-\\[46px\\],.plugin-parakeet .pk-min-w-\\[46px\\]{min-width:46px}#app-parakeet .pk-min-w-0,.plugin-parakeet .pk-min-w-0{min-width:0}#app-parakeet .pk-max-w-\\[50vw\\],.plugin-parakeet .pk-max-w-\\[50vw\\]{max-width:50vw}#app-parakeet .pk-flex-none,.plugin-parakeet .pk-flex-none{flex:none}#app-parakeet .pk-flex-1,.plugin-parakeet .pk-flex-1{flex:1 1 0%}#app-parakeet .pk-cursor-pointer,.plugin-parakeet .pk-cursor-pointer{cursor:pointer}#app-parakeet .pk-cursor-text,.plugin-parakeet .pk-cursor-text{cursor:text}#app-parakeet .pk-select-none,.plugin-parakeet .pk-select-none{-webkit-user-select:none;user-select:none}#app-parakeet .pk-appearance-none,.plugin-parakeet .pk-appearance-none{-webkit-appearance:none;appearance:none}#app-parakeet .pk-grid-flow-col,.plugin-parakeet .pk-grid-flow-col{grid-auto-flow:column}#app-parakeet .pk-grid-rows-\\[auto\\,auto\\,auto\\,auto\\],.plugin-parakeet .pk-grid-rows-\\[auto\\,auto\\,auto\\,auto\\]{grid-template-rows:auto auto auto auto}#app-parakeet .pk-flex-col,.plugin-parakeet .pk-flex-col{flex-direction:column}#app-parakeet .pk-flex-wrap,.plugin-parakeet .pk-flex-wrap{flex-wrap:wrap}#app-parakeet .pk-items-center,.plugin-parakeet .pk-items-center{align-items:center}#app-parakeet .pk-justify-center,.plugin-parakeet .pk-justify-center{justify-content:center}#app-parakeet .pk-gap-4,.plugin-parakeet .pk-gap-4{gap:1rem}#app-parakeet .pk-gap-x-3,.plugin-parakeet .pk-gap-x-3{column-gap:.75rem}#app-parakeet .pk-gap-y-4,.plugin-parakeet .pk-gap-y-4{row-gap:1rem}#app-parakeet .pk-space-y-4>:not([hidden])~:not([hidden]),.plugin-parakeet .pk-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}#app-parakeet .pk-space-y-5>:not([hidden])~:not([hidden]),.plugin-parakeet .pk-space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}#app-parakeet .pk-self-center,.plugin-parakeet .pk-self-center{align-self:center}#app-parakeet .pk-overflow-hidden,.plugin-parakeet .pk-overflow-hidden{overflow:hidden}#app-parakeet .pk-truncate,.plugin-parakeet .pk-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#app-parakeet .pk-break-words,.plugin-parakeet .pk-break-words{overflow-wrap:break-word}#app-parakeet .pk-break-all,.plugin-parakeet .pk-break-all{word-break:break-all}#app-parakeet .pk-rounded-full,.plugin-parakeet .pk-rounded-full{border-radius:9999px}#app-parakeet .pk-rounded-md,.plugin-parakeet .pk-rounded-md{border-radius:.375rem}#app-parakeet .pk-rounded,.plugin-parakeet .pk-rounded{border-radius:.25rem}#app-parakeet .pk-rounded-\\[3px\\],.plugin-parakeet .pk-rounded-\\[3px\\]{border-radius:3px}#app-parakeet .pk-border-\\[5px\\],.plugin-parakeet .pk-border-\\[5px\\]{border-width:5px}#app-parakeet .pk-border-2,.plugin-parakeet .pk-border-2{border-width:2px}#app-parakeet .pk-border,.plugin-parakeet .pk-border{border-width:1px}#app-parakeet .pk-border-0,.plugin-parakeet .pk-border-0{border-width:0}#app-parakeet .pk-border-solid,.plugin-parakeet .pk-border-solid{border-style:solid}#app-parakeet .pk-border-dashed,.plugin-parakeet .pk-border-dashed{border-style:dashed}#app-parakeet .pk-border-transparent,.plugin-parakeet .pk-border-transparent{border-color:transparent}#app-parakeet .pk-border-\\[\\#333\\],.plugin-parakeet .pk-border-\\[\\#333\\]{--tw-border-opacity:1;border-color:rgba(51,51,51,var(--tw-border-opacity))}#app-parakeet .pk-border-\\[\\#DB393A\\],.plugin-parakeet .pk-border-\\[\\#DB393A\\]{--tw-border-opacity:1;border-color:rgba(219,57,58,var(--tw-border-opacity))}#app-parakeet .pk-border-\\[\\#D1D1D1\\],.plugin-parakeet .pk-border-\\[\\#D1D1D1\\]{--tw-border-opacity:1;border-color:rgba(209,209,209,var(--tw-border-opacity))}#app-parakeet .pk-border-\\[\\#d9d9d9\\],.plugin-parakeet .pk-border-\\[\\#d9d9d9\\]{--tw-border-opacity:1;border-color:rgba(217,217,217,var(--tw-border-opacity))}#app-parakeet .pk-border-t-white,.plugin-parakeet .pk-border-t-white{--tw-border-opacity:1;border-top-color:rgba(255,255,255,var(--tw-border-opacity))}#app-parakeet .pk-bg-\\[\\#E6E6E6\\]\\/40,.plugin-parakeet .pk-bg-\\[\\#E6E6E6\\]\\/40{background-color:hsla(0,0%,90%,.4)}#app-parakeet .pk-bg-white,.plugin-parakeet .pk-bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}#app-parakeet .pk-bg-transparent,.plugin-parakeet .pk-bg-transparent{background-color:initial}#app-parakeet .pk-bg-\\[\\#fdfdfd\\],.plugin-parakeet .pk-bg-\\[\\#fdfdfd\\]{--tw-bg-opacity:1;background-color:rgba(253,253,253,var(--tw-bg-opacity))}#app-parakeet .pk-bg-\\[\\#F6F6F7\\],.plugin-parakeet .pk-bg-\\[\\#F6F6F7\\]{--tw-bg-opacity:1;background-color:rgba(246,246,247,var(--tw-bg-opacity))}#app-parakeet .pk-object-contain,.plugin-parakeet .pk-object-contain{object-fit:contain}#app-parakeet .pk-object-cover,.plugin-parakeet .pk-object-cover{object-fit:cover}#app-parakeet .pk-object-center,.plugin-parakeet .pk-object-center{object-position:center}#app-parakeet .pk-py-2,.plugin-parakeet .pk-py-2{padding-bottom:.5rem;padding-top:.5rem}#app-parakeet .pk-px-3,.plugin-parakeet .pk-px-3{padding-left:.75rem;padding-right:.75rem}#app-parakeet .pk-px-5,.plugin-parakeet .pk-px-5{padding-left:1.25rem;padding-right:1.25rem}#app-parakeet .pk-px-4,.plugin-parakeet .pk-px-4{padding-left:1rem;padding-right:1rem}#app-parakeet .pk-py-1\\.5,.plugin-parakeet .pk-py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}#app-parakeet .pk-py-1,.plugin-parakeet .pk-py-1{padding-bottom:.25rem;padding-top:.25rem}#app-parakeet .pk-py-3\\.5,.plugin-parakeet .pk-py-3\\.5{padding-bottom:.875rem;padding-top:.875rem}#app-parakeet .pk-py-3,.plugin-parakeet .pk-py-3{padding-bottom:.75rem;padding-top:.75rem}#app-parakeet .pk-pt-2,.plugin-parakeet .pk-pt-2{padding-top:.5rem}#app-parakeet .pk-pb-1,.plugin-parakeet .pk-pb-1{padding-bottom:.25rem}#app-parakeet .pk-pl-4,.plugin-parakeet .pk-pl-4{padding-left:1rem}#app-parakeet .pk-pr-10\\.5,.plugin-parakeet .pk-pr-10\\.5{padding-right:2.625rem}#app-parakeet .pk-pr-10,.plugin-parakeet .pk-pr-10{padding-right:2.5rem}#app-parakeet .\\!pk-text-\\[13px\\],.plugin-parakeet .\\!pk-text-\\[13px\\]{font-size:13px!important}#app-parakeet .\\!pk-text-\\[14px\\],.plugin-parakeet .\\!pk-text-\\[14px\\]{font-size:14px!important}#app-parakeet .\\!pk-text-\\[15px\\],.plugin-parakeet .\\!pk-text-\\[15px\\]{font-size:15px!important}#app-parakeet .pk-text-\\[14px\\],.plugin-parakeet .pk-text-\\[14px\\]{font-size:14px}#app-parakeet .pk-text-sm,.plugin-parakeet .pk-text-sm{font-size:.875rem;line-height:1.25rem}#app-parakeet .pk-text-xs,.plugin-parakeet .pk-text-xs{font-size:.75rem;line-height:1rem}#app-parakeet .pk-text-\\[15px\\],.plugin-parakeet .pk-text-\\[15px\\]{font-size:15px}#app-parakeet .\\!pk-text-\\[16px\\],.plugin-parakeet .\\!pk-text-\\[16px\\]{font-size:16px!important}#app-parakeet .pk-font-semibold,.plugin-parakeet .pk-font-semibold{font-weight:600}#app-parakeet .pk-font-medium,.plugin-parakeet .pk-font-medium{font-weight:500}#app-parakeet .pk-leading-none,.plugin-parakeet .pk-leading-none{line-height:1}#app-parakeet .pk-leading-5,.plugin-parakeet .pk-leading-5{line-height:1.25rem}#app-parakeet .pk-leading-\\[0px\\],.plugin-parakeet .pk-leading-\\[0px\\]{line-height:0px}#app-parakeet .pk-text-\\[\\#DB393A\\],.plugin-parakeet .pk-text-\\[\\#DB393A\\]{--tw-text-opacity:1;color:rgba(219,57,58,var(--tw-text-opacity))}#app-parakeet .pk-text-\\[\\#7A7A7A\\],.plugin-parakeet .pk-text-\\[\\#7A7A7A\\]{--tw-text-opacity:1;color:rgba(122,122,122,var(--tw-text-opacity))}#app-parakeet .pk-text-\\[\\#d2d5d8\\],.plugin-parakeet .pk-text-\\[\\#d2d5d8\\]{--tw-text-opacity:1;color:rgba(210,213,216,var(--tw-text-opacity))}#app-parakeet .pk-text-\\[\\#93989D\\],.plugin-parakeet .pk-text-\\[\\#93989D\\]{--tw-text-opacity:1;color:rgba(147,152,157,var(--tw-text-opacity))}#app-parakeet .pk-text-\\[\\#292929\\]\\/75,.plugin-parakeet .pk-text-\\[\\#292929\\]\\/75{color:rgba(41,41,41,.75)}#app-parakeet .pk-text-opacity-80,.plugin-parakeet .pk-text-opacity-80{--tw-text-opacity:0.8}#app-parakeet .pk-opacity-0,.plugin-parakeet .pk-opacity-0{opacity:0}#app-parakeet .pk-shadow-\\[0px_4px_18px_rgb\\(0_0_0_\\/_10\\%\\)\\],.plugin-parakeet .pk-shadow-\\[0px_4px_18px_rgb\\(0_0_0_\\/_10\\%\\)\\]{--tw-shadow:0px 4px 18px rgba(0,0,0,.1);--tw-shadow-colored:0px 4px 18px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}#app-parakeet .pk-outline-none,.plugin-parakeet .pk-outline-none{outline:2px solid transparent;outline-offset:2px}#app-parakeet .pk-ring-2,.plugin-parakeet .pk-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}#app-parakeet .pk-ring-\\[\\#333\\],.plugin-parakeet .pk-ring-\\[\\#333\\]{--tw-ring-opacity:1;--tw-ring-color:rgba(51,51,51,var(--tw-ring-opacity))}#app-parakeet .pk-ring-offset-2,.plugin-parakeet .pk-ring-offset-2{--tw-ring-offset-width:2px}#app-parakeet .placeholder\\:pk-text-\\[color\\:\\#93989D\\]::-webkit-input-placeholder,.plugin-parakeet .placeholder\\:pk-text-\\[color\\:\\#93989D\\]::-webkit-input-placeholder{--tw-text-opacity:1;color:rgba(147,152,157,var(--tw-text-opacity))}#app-parakeet .placeholder\\:pk-text-\\[color\\:\\#93989D\\]::placeholder,.plugin-parakeet .placeholder\\:pk-text-\\[color\\:\\#93989D\\]::placeholder{--tw-text-opacity:1;color:rgba(147,152,157,var(--tw-text-opacity))}#app-parakeet .last\\:pk-mb-0:last-child,.plugin-parakeet .last\\:pk-mb-0:last-child{margin-bottom:0}#app-parakeet .hover\\:pk-bg-\\[\\#f6f6f7\\]:hover,.plugin-parakeet .hover\\:pk-bg-\\[\\#f6f6f7\\]:hover{--tw-bg-opacity:1;background-color:rgba(246,246,247,var(--tw-bg-opacity))}#app-parakeet .focus\\:pk-border-\\[\\#333\\]:focus,.plugin-parakeet .focus\\:pk-border-\\[\\#333\\]:focus{--tw-border-opacity:1;border-color:rgba(51,51,51,var(--tw-border-opacity))}@media (min-width:768px){#app-parakeet .md\\:pk-max-w-\\[33vw\\],.plugin-parakeet .md\\:pk-max-w-\\[33vw\\]{max-width:33vw}#app-parakeet .md\\:pk-text-base,.plugin-parakeet .md\\:pk-text-base{font-size:1rem;line-height:1.5rem}#app-parakeet .md\\:pk-text-sm,.plugin-parakeet .md\\:pk-text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:1024px){#app-parakeet .lg\\:pk-px-8,.plugin-parakeet .lg\\:pk-px-8{padding-left:2rem;padding-right:2rem}}');
        var m = function() {
            return fetch(...arguments).then((e => e.ok ? e : Promise.reject(e)))
          },
          v = () => m("/api/file/signv2").then((e => e.json())),
          _ = (e, t) => m("/api/file/signv2").then((e => e.json())).then((n => {
            var r = n.data,
              i = null == r ? void 0 : r.write_host,
              {
                policy: o,
                access_id: a,
                sign: s,
                read_host: l
              } = r,
              c = new FormData;
            return c.append("policy", o), c.append("OSSAccessKeyId", a), c.append("success_action_status", 200), c.append("signature", s), c.append("x-oss-forbid-overwrite", !0), c.append("key", t), c.append("file", e), ((e, t, n) => m(e, {
              method: "POST",
              body: t
            }).then((() => n)).catch((e => {
              if (String(e).includes("409")) return n;
              throw new Error
            })))(i, c, l + t)
          })),
          b = e => 0 === e.indexOf("image/"),
          y = e => e.split("/")[1] || "",
          w = function() {
            var e = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "").split("/"),
              t = e[e.length - 1].split(/#|\?/)[0];
            return (/\.[^./\\]*$/.exec(t) || [""])[0]
          },
          x = e => {
            if (e.type && !e.thumbUrl) return b(e.type);
            var t = e.thumbUrl || e.url || "",
              n = w(t);
            return !(!/^data:image\//.test(t) && !/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico)$/i.test(n)) || !/^data:/.test(t) && !n
          },
          k = 200;

        function C(e) {
          return new Promise((t => {
            e.type && b(e.type) ? "gif" !== y(e.type) ? (t => {
              var n = document.createElement("canvas");
              n.width = k, n.height = k, n.style.cssText = "position: fixed; left: 0; top: 0; width: ".concat(k, "px; height: ").concat(k, "px; z-index: 9999; display: none;"), document.body.appendChild(n);
              var r = n.getContext("2d"),
                i = new Image;
              i.onload = () => {
                var {
                  width: e,
                  height: o
                } = i, a = k, s = k, l = 0, c = 0;
                e > o ? c = -((s = o * (k / e)) - a) / 2 : l = -((a = e * (k / o)) - s) / 2, r.drawImage(i, l, c, a, s);
                var u = n.toDataURL();
                document.body.removeChild(n), window.URL.revokeObjectURL(i.src), i.src = null, t(u)
              }, i.src = window.URL.createObjectURL(e)
            })(t) : (t => {
              var n = new FileReader;
              n.onload = () => t(n.result), n.readAsDataURL(e)
            })(t) : t("")
          }))
        }
        var S = e => "".concat(window.SHOP_PARAMS.shop_id, "/").concat((new Date).getTime(), ".").concat(e),
          E = (e, t, n) => {
            for (var r = e.split(","), i = window.atob(r[1]), o = i.length, a = new Uint8Array(o); o--;) a[o] = i.charCodeAt(o);
            return new File([a.buffer], t, {
              type: n || "image/png"
            })
          },
          T = 100,
          O = 1890,
          A = "png",
          P = "uploadSuccessEvent",
          M = "removeSuccessEvent",
          D = "addDesignImageEvent",
          I = "deleteDesignEvent",
          N = "loading",
          R = "success",
          j = "en-us",
          L = 10485760,
          F = "swatch_preview_click",
          B = "upload_preview",
          z = "text_preview",
          H = "upload_img_click",
          U = "clear_active",
          W = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {};

        function V(e) {
          var t = e.default;
          if ("function" == typeof t) {
            var n = function() {
              return t.apply(this, arguments)
            };
            n.prototype = t.prototype
          } else n = {};
          return Object.defineProperty(n, "__esModule", {
            value: !0
          }), Object.keys(e).forEach((function(t) {
            var r = Object.getOwnPropertyDescriptor(e, t);
            Object.defineProperty(n, t, r.get ? r : {
              enumerable: !0,
              get: function() {
                return e[t]
              }
            })
          })), n
        }
        var X = {};

        function G(e, t) {
          return void 0 === t && (t = 15), +parseFloat(Number(e).toPrecision(t))
        }

        function Y(e) {
          var t = e.toString().split(/[eE]/),
            n = (t[0].split(".")[1] || "").length - +(t[1] || 0);
          return n > 0 ? n : 0
        }

        function q(e) {
          if (-1 === e.toString().indexOf("e")) return Number(e.toString().replace(".", ""));
          var t = Y(e);
          return t > 0 ? G(Number(e) * Math.pow(10, t)) : Number(e)
        }

        function K(e) {
          te && (e > Number.MAX_SAFE_INTEGER || Number.MIN_SAFE_INTEGER)
        }

        function $(e) {
          return function() {
            for (var t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];
            var r = t[0];
            return t.slice(1).reduce((function(t, n) {
              return e(t, n)
            }), r)
          }
        }! function(e) {
          var t, n, r, i, l, c, u, h, p, d, f, g, m, v = v || {
            version: "5.3.0"
          };
          if (e.fabric = v, "undefined" != typeof document && "undefined" != typeof window) document instanceof("undefined" != typeof HTMLDocument ? HTMLDocument : Document) ? v.document = document : v.document = document.implementation
            .createHTMLDocument(""), v.window = window;
          else {
            var _ = new o.default.JSDOM(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"), {
              features: {
                FetchExternalResources: ["img"]
              },
              resources: "usable"
            }).window;
            v.document = _.document, v.jsdomImplForWrapper = a.default.implForWrapper, v.nodeCanvas = s.default.Canvas, v.window = _, DOMParser = v.window.DOMParser
          }

          function b(e, t) {
            var n = e.canvas,
              r = t.targetCanvas,
              i = r.getContext("2d");
            i.translate(0, r.height), i.scale(1, -1);
            var o = n.height - r.height;
            i.drawImage(n, 0, o, r.width, r.height, 0, 0, r.width, r.height)
          }

          function y(e, t) {
            var n = t.targetCanvas.getContext("2d"),
              r = t.destinationWidth,
              i = t.destinationHeight,
              o = r * i * 4,
              a = new Uint8Array(this.imageBuffer, 0, o),
              s = new Uint8ClampedArray(this.imageBuffer, 0, o);
            e.readPixels(0, 0, r, i, e.RGBA, e.UNSIGNED_BYTE, a);
            var l = new ImageData(s, r, i);
            n.putImageData(l, 0, 0)
          }
          v.isTouchSupported = "ontouchstart" in v.window || "ontouchstart" in v.document || v.window && v.window.navigator && v.window.navigator.maxTouchPoints > 0, v.isLikelyNode = "undefined" != typeof Buffer && "undefined" == typeof window, v
            .SHARED_ATTRIBUTES = ["display", "transform", "fill", "fill-opacity", "fill-rule", "opacity", "stroke", "stroke-dasharray", "stroke-linecap", "stroke-dashoffset", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity",
              "stroke-width", "id", "paint-order", "vector-effect", "instantiated_by_use", "clip-path"
            ], v.DPI = 96, v.reNum = "(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)", v.commaWsp = "(?:\\s+,?\\s*|,\\s*)", v.rePathCommand = /([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/gi, v.reNonWord = /[ \n\.,;!\?\-]/, v
            .fontPaths = {}, v.iMatrix = [1, 0, 0, 1, 0, 0], v.svgNS = "http://www.w3.org/2000/svg", v.perfLimitSizeTotal = 2097152, v.maxCacheSideLimit = 4096, v.minCacheSideLimit = 256, v.charWidthsCache = {}, v.textureSize = 2048, v
            .disableStyleCopyPaste = !1, v.enableGLFiltering = !0, v.devicePixelRatio = v.window.devicePixelRatio || v.window.webkitDevicePixelRatio || v.window.mozDevicePixelRatio || 1, v.browserShadowBlurConstant = 1, v.arcToSegmentsCache = {},
            v.boundsOfCurveCache = {}, v.cachesBoundsOfCurve = !0, v.forceGLPutImageData = !1, v.initFilterBackend = function() {
              return v.enableGLFiltering && v.isWebglSupported && v.isWebglSupported(v.textureSize) ? new v.WebglFilterBackend({
                tileSize: v.textureSize
              }) : v.Canvas2dFilterBackend ? new v.Canvas2dFilterBackend : void 0
            }, "undefined" != typeof document && "undefined" != typeof window && (window.fabric = v),
            function() {
              function e(e, t) {
                if (this.__eventListeners[e]) {
                  var n = this.__eventListeners[e];
                  t ? n[n.indexOf(t)] = !1 : v.util.array.fill(n, !1)
                }
              }

              function t(e, t) {
                var n = function() {
                  t.apply(this, arguments), this.off(e, n)
                }.bind(this);
                this.on(e, n)
              }
              v.Observable = {
                fire: function(e, t) {
                  if (!this.__eventListeners) return this;
                  var n = this.__eventListeners[e];
                  if (!n) return this;
                  for (var r = 0, i = n.length; r < i; r++) n[r] && n[r].call(this, t || {});
                  return this.__eventListeners[e] = n.filter((function(e) {
                    return !1 !== e
                  })), this
                },
                on: function(e, t) {
                  if (this.__eventListeners || (this.__eventListeners = {}), 1 === arguments.length)
                    for (var n in e) this.on(n, e[n]);
                  else this.__eventListeners[e] || (this.__eventListeners[e] = []), this.__eventListeners[e].push(t);
                  return this
                },
                once: function(e, n) {
                  if (1 === arguments.length)
                    for (var r in e) t.call(this, r, e[r]);
                  else t.call(this, e, n);
                  return this
                },
                off: function(t, n) {
                  if (!this.__eventListeners) return this;
                  if (0 === arguments.length)
                    for (t in this.__eventListeners) e.call(this, t);
                  else if (1 === arguments.length && "object" == typeof arguments[0])
                    for (var r in t) e.call(this, r, t[r]);
                  else e.call(this, t, n);
                  return this
                }
              }
            }(), v.Collection = {
              _objects: [],
              add: function() {
                if (this._objects.push.apply(this._objects, arguments), this._onObjectAdded)
                  for (var e = 0, t = arguments.length; e < t; e++) this._onObjectAdded(arguments[e]);
                return this.renderOnAddRemove && this.requestRenderAll(), this
              },
              insertAt: function(e, t, n) {
                var r = this._objects;
                return n ? r[t] = e : r.splice(t, 0, e), this._onObjectAdded && this._onObjectAdded(e), this.renderOnAddRemove && this.requestRenderAll(), this
              },
              remove: function() {
                for (var e, t = this._objects, n = !1, r = 0, i = arguments.length; r < i; r++) - 1 !== (e = t.indexOf(arguments[r])) && (n = !0, t.splice(e, 1), this._onObjectRemoved && this._onObjectRemoved(arguments[r]));
                return this.renderOnAddRemove && n && this.requestRenderAll(), this
              },
              forEachObject: function(e, t) {
                for (var n = this.getObjects(), r = 0, i = n.length; r < i; r++) e.call(t, n[r], r, n);
                return this
              },
              getObjects: function(e) {
                return void 0 === e ? this._objects.concat() : this._objects.filter((function(t) {
                  return t.type === e
                }))
              },
              item: function(e) {
                return this._objects[e]
              },
              isEmpty: function() {
                return 0 === this._objects.length
              },
              size: function() {
                return this._objects.length
              },
              contains: function(e, t) {
                return this._objects.indexOf(e) > -1 || !!t && this._objects.some((function(t) {
                  return "function" == typeof t.contains && t.contains(e, !0)
                }))
              },
              complexity: function() {
                return this._objects.reduce((function(e, t) {
                  return e += t.complexity ? t.complexity() : 0
                }), 0)
              }
            }, v.CommonMethods = {
              _setOptions: function(e) {
                for (var t in e) this.set(t, e[t])
              },
              _initGradient: function(e, t) {
                !e || !e.colorStops || e instanceof v.Gradient || this.set(t, new v.Gradient(e))
              },
              _initPattern: function(e, t, n) {
                !e || !e.source || e instanceof v.Pattern ? n && n() : this.set(t, new v.Pattern(e, n))
              },
              _setObject: function(e) {
                for (var t in e) this._set(t, e[t])
              },
              set: function(e, t) {
                return "object" == typeof e ? this._setObject(e) : this._set(e, t), this
              },
              _set: function(e, t) {
                this[e] = t
              },
              toggle: function(e) {
                var t = this.get(e);
                return "boolean" == typeof t && this.set(e, !t), this
              },
              get: function(e) {
                return this[e]
              }
            },
            function(e) {
              var t = Math.sqrt,
                n = Math.atan2,
                r = Math.pow,
                i = Math.PI / 180,
                o = Math.PI / 2;
              v.util = {
                cos: function(e) {
                  if (0 === e) return 1;
                  switch (e < 0 && (e = -e), e / o) {
                    case 1:
                    case 3:
                      return 0;
                    case 2:
                      return -1
                  }
                  return Math.cos(e)
                },
                sin: function(e) {
                  if (0 === e) return 0;
                  var t = 1;
                  switch (e < 0 && (t = -1), e / o) {
                    case 1:
                      return t;
                    case 2:
                      return 0;
                    case 3:
                      return -t
                  }
                  return Math.sin(e)
                },
                removeFromArray: function(e, t) {
                  var n = e.indexOf(t);
                  return -1 !== n && e.splice(n, 1), e
                },
                getRandomInt: function(e, t) {
                  return Math.floor(Math.random() * (t - e + 1)) + e
                },
                degreesToRadians: function(e) {
                  return e * i
                },
                radiansToDegrees: function(e) {
                  return e / i
                },
                rotatePoint: function(e, t, n) {
                  var r = new v.Point(e.x - t.x, e.y - t.y),
                    i = v.util.rotateVector(r, n);
                  return new v.Point(i.x, i.y).addEquals(t)
                },
                rotateVector: function(e, t) {
                  var n = v.util.sin(t),
                    r = v.util.cos(t);
                  return {
                    x: e.x * r - e.y * n,
                    y: e.x * n + e.y * r
                  }
                },
                createVector: function(e, t) {
                  return new v.Point(t.x - e.x, t.y - e.y)
                },
                calcAngleBetweenVectors: function(e, t) {
                  return Math.acos((e.x * t.x + e.y * t.y) / (Math.hypot(e.x, e.y) * Math.hypot(t.x, t.y)))
                },
                getHatVector: function(e) {
                  return new v.Point(e.x, e.y).multiply(1 / Math.hypot(e.x, e.y))
                },
                getBisector: function(e, t, n) {
                  var r = v.util.createVector(e, t),
                    i = v.util.createVector(e, n),
                    o = v.util.calcAngleBetweenVectors(r, i),
                    a = o * (0 === v.util.calcAngleBetweenVectors(v.util.rotateVector(r, o), i) ? 1 : -1) / 2;
                  return {
                    vector: v.util.getHatVector(v.util.rotateVector(r, a)),
                    angle: o
                  }
                },
                projectStrokeOnPoints: function(e, t, n) {
                  var r = [],
                    i = t.strokeWidth / 2,
                    o = t.strokeUniform ? new v.Point(1 / t.scaleX, 1 / t.scaleY) : new v.Point(1, 1),
                    a = function(e) {
                      var t = i / Math.hypot(e.x, e.y);
                      return new v.Point(e.x * t * o.x, e.y * t * o.y)
                    };
                  return e.length <= 1 || e.forEach((function(s, l) {
                    var c, u, h = new v.Point(s.x, s.y);
                    0 === l ? (u = e[l + 1], c = n ? a(v.util.createVector(u, h)).addEquals(h) : e[e.length - 1]) : l === e.length - 1 ? (c = e[l - 1], u = n ? a(v.util.createVector(c, h)).addEquals(h) : e[0]) : (c = e[l - 1], u = e[l +
                      1]);
                    var p, d, f = v.util.getBisector(h, c, u),
                      g = f.vector,
                      m = f.angle;
                    if ("miter" === t.strokeLineJoin && (p = -i / Math.sin(m / 2), d = new v.Point(g.x * p * o.x, g.y * p * o.y), Math.hypot(d.x, d.y) / i <= t.strokeMiterLimit)) return r.push(h.add(d)), void r.push(h.subtract(d));
                    p = -i * Math.SQRT2, d = new v.Point(g.x * p * o.x, g.y * p * o.y), r.push(h.add(d)), r.push(h.subtract(d))
                  })), r
                },
                transformPoint: function(e, t, n) {
                  return n ? new v.Point(t[0] * e.x + t[2] * e.y, t[1] * e.x + t[3] * e.y) : new v.Point(t[0] * e.x + t[2] * e.y + t[4], t[1] * e.x + t[3] * e.y + t[5])
                },
                makeBoundingBoxFromPoints: function(e, t) {
                  if (t)
                    for (var n = 0; n < e.length; n++) e[n] = v.util.transformPoint(e[n], t);
                  var r = [e[0].x, e[1].x, e[2].x, e[3].x],
                    i = v.util.array.min(r),
                    o = v.util.array.max(r) - i,
                    a = [e[0].y, e[1].y, e[2].y, e[3].y],
                    s = v.util.array.min(a);
                  return {
                    left: i,
                    top: s,
                    width: o,
                    height: v.util.array.max(a) - s
                  }
                },
                invertTransform: function(e) {
                  var t = 1 / (e[0] * e[3] - e[1] * e[2]),
                    n = [t * e[3], -t * e[1], -t * e[2], t * e[0]],
                    r = v.util.transformPoint({
                      x: e[4],
                      y: e[5]
                    }, n, !0);
                  return n[4] = -r.x, n[5] = -r.y, n
                },
                toFixed: function(e, t) {
                  return parseFloat(Number(e).toFixed(t))
                },
                parseUnit: function(e, t) {
                  var n = /\D{0,2}$/.exec(e),
                    r = parseFloat(e);
                  switch (t || (t = v.Text.DEFAULT_SVG_FONT_SIZE), n[0]) {
                    case "mm":
                      return r * v.DPI / 25.4;
                    case "cm":
                      return r * v.DPI / 2.54;
                    case "in":
                      return r * v.DPI;
                    case "pt":
                      return r * v.DPI / 72;
                    case "pc":
                      return r * v.DPI / 72 * 12;
                    case "em":
                      return r * t;
                    default:
                      return r
                  }
                },
                falseFunction: function() {
                  return !1
                },
                getKlass: function(e, t) {
                  return e = v.util.string.camelize(e.charAt(0).toUpperCase() + e.slice(1)), v.util.resolveNamespace(t)[e]
                },
                getSvgAttributes: function(e) {
                  var t = ["instantiated_by_use", "style", "id", "class"];
                  switch (e) {
                    case "linearGradient":
                      t = t.concat(["x1", "y1", "x2", "y2", "gradientUnits", "gradientTransform"]);
                      break;
                    case "radialGradient":
                      t = t.concat(["gradientUnits", "gradientTransform", "cx", "cy", "r", "fx", "fy", "fr"]);
                      break;
                    case "stop":
                      t = t.concat(["offset", "stop-color", "stop-opacity"])
                  }
                  return t
                },
                resolveNamespace: function(t) {
                  if (!t) return v;
                  var n, r = t.split("."),
                    i = r.length,
                    o = e || v.window;
                  for (n = 0; n < i; ++n) o = o[r[n]];
                  return o
                },
                loadImage: function(e, t, n, r) {
                  if (e) {
                    var i = v.util.createImage(),
                      o = function() {
                        t && t.call(n, i, !1), i = i.onload = i.onerror = null
                      };
                    i.onload = o, i.onerror = function() {
                      v.log("Error loading " + i.src), t && t.call(n, null, !0), i = i.onload = i.onerror = null
                    }, 0 !== e.indexOf("data") && null != r && (i.crossOrigin = r), "data:image/svg" === e.substring(0, 14) && (i.onload = null, v.util.loadImageInDom(i, o)), i.src = e
                  } else t && t.call(n, e)
                },
                loadImageInDom: function(e, t) {
                  var n = v.document.createElement("div");
                  n.style.width = n.style.height = "1px", n.style.left = n.style.top = "-100%", n.style.position = "absolute", n.appendChild(e), v.document.querySelector("body").appendChild(n), e.onload = function() {
                    t(), n.parentNode.removeChild(n), n = null
                  }
                },
                enlivenObjects: function(e, t, n, r) {
                  var i = [],
                    o = 0,
                    a = (e = e || []).length;

                  function s() {
                    ++o === a && t && t(i.filter((function(e) {
                      return e
                    })))
                  }
                  a ? e.forEach((function(e, t) {
                    e && e.type ? v.util.getKlass(e.type, n).fromObject(e, (function(n, o) {
                      o || (i[t] = n), r && r(e, n, o), s()
                    })) : s()
                  })) : t && t(i)
                },
                enlivenObjectEnlivables: function(e, t, n) {
                  var r = v.Object.ENLIVEN_PROPS.filter((function(t) {
                    return !!e[t]
                  }));
                  v.util.enlivenObjects(r.map((function(t) {
                    return e[t]
                  })), (function(e) {
                    var i = {};
                    r.forEach((function(n, r) {
                      i[n] = e[r], t && (t[n] = e[r])
                    })), n && n(i)
                  }))
                },
                enlivenPatterns: function(e, t) {
                  function n() {
                    ++i === o && t && t(r)
                  }
                  var r = [],
                    i = 0,
                    o = (e = e || []).length;
                  o ? e.forEach((function(e, t) {
                    e && e.source ? new v.Pattern(e, (function(e) {
                      r[t] = e, n()
                    })) : (r[t] = e, n())
                  })) : t && t(r)
                },
                groupSVGElements: function(e, t, n) {
                  var r;
                  return e && 1 === e.length ? (void 0 !== n && (e[0].sourcePath = n), e[0]) : (t && (t.width && t.height ? t.centerPoint = {
                    x: t.width / 2,
                    y: t.height / 2
                  } : (delete t.width, delete t.height)), r = new v.Group(e, t), void 0 !== n && (r.sourcePath = n), r)
                },
                populateWithProperties: function(e, t, n) {
                  if (n && Array.isArray(n))
                    for (var r = 0, i = n.length; r < i; r++) n[r] in e && (t[n[r]] = e[n[r]])
                },
                createCanvasElement: function() {
                  return v.document.createElement("canvas")
                },
                copyCanvasElement: function(e) {
                  var t = v.util.createCanvasElement();
                  return t.width = e.width, t.height = e.height, t.getContext("2d").drawImage(e, 0, 0), t
                },
                toDataURL: function(e, t, n) {
                  return e.toDataURL("image/" + t, n)
                },
                createImage: function() {
                  return v.document.createElement("img")
                },
                multiplyTransformMatrices: function(e, t, n) {
                  return [e[0] * t[0] + e[2] * t[1], e[1] * t[0] + e[3] * t[1], e[0] * t[2] + e[2] * t[3], e[1] * t[2] + e[3] * t[3], n ? 0 : e[0] * t[4] + e[2] * t[5] + e[4], n ? 0 : e[1] * t[4] + e[3] * t[5] + e[5]]
                },
                qrDecompose: function(e) {
                  var o = n(e[1], e[0]),
                    a = r(e[0], 2) + r(e[1], 2),
                    s = t(a),
                    l = (e[0] * e[3] - e[2] * e[1]) / s,
                    c = n(e[0] * e[2] + e[1] * e[3], a);
                  return {
                    angle: o / i,
                    scaleX: s,
                    scaleY: l,
                    skewX: c / i,
                    skewY: 0,
                    translateX: e[4],
                    translateY: e[5]
                  }
                },
                calcRotateMatrix: function(e) {
                  if (!e.angle) return v.iMatrix.concat();
                  var t = v.util.degreesToRadians(e.angle),
                    n = v.util.cos(t),
                    r = v.util.sin(t);
                  return [n, r, -r, n, 0, 0]
                },
                calcDimensionsMatrix: function(e) {
                  var t = void 0 === e.scaleX ? 1 : e.scaleX,
                    n = void 0 === e.scaleY ? 1 : e.scaleY,
                    r = [e.flipX ? -t : t, 0, 0, e.flipY ? -n : n, 0, 0],
                    i = v.util.multiplyTransformMatrices,
                    o = v.util.degreesToRadians;
                  return e.skewX && (r = i(r, [1, 0, Math.tan(o(e.skewX)), 1], !0)), e.skewY && (r = i(r, [1, Math.tan(o(e.skewY)), 0, 1], !0)), r
                },
                composeMatrix: function(e) {
                  var t = [1, 0, 0, 1, e.translateX || 0, e.translateY || 0],
                    n = v.util.multiplyTransformMatrices;
                  return e.angle && (t = n(t, v.util.calcRotateMatrix(e))), (1 !== e.scaleX || 1 !== e.scaleY || e.skewX || e.skewY || e.flipX || e.flipY) && (t = n(t, v.util.calcDimensionsMatrix(e))), t
                },
                resetObjectTransform: function(e) {
                  e.scaleX = 1, e.scaleY = 1, e.skewX = 0, e.skewY = 0, e.flipX = !1, e.flipY = !1, e.rotate(0)
                },
                saveObjectTransform: function(e) {
                  return {
                    scaleX: e.scaleX,
                    scaleY: e.scaleY,
                    skewX: e.skewX,
                    skewY: e.skewY,
                    angle: e.angle,
                    left: e.left,
                    flipX: e.flipX,
                    flipY: e.flipY,
                    top: e.top
                  }
                },
                isTransparent: function(e, t, n, r) {
                  r > 0 && (t > r ? t -= r : t = 0, n > r ? n -= r : n = 0);
                  var i, o = !0,
                    a = e.getImageData(t, n, 2 * r || 1, 2 * r || 1),
                    s = a.data.length;
                  for (i = 3; i < s && !1 !== (o = a.data[i] <= 0); i += 4);
                  return a = null, o
                },
                parsePreserveAspectRatioAttribute: function(e) {
                  var t, n = "meet",
                    r = e.split(" ");
                  return r && r.length && ("meet" !== (n = r.pop()) && "slice" !== n ? (t = n, n = "meet") : r.length && (t = r.pop())), {
                    meetOrSlice: n,
                    alignX: "none" !== t ? t.slice(1, 4) : "none",
                    alignY: "none" !== t ? t.slice(5, 8) : "none"
                  }
                },
                clearFabricFontCache: function(e) {
                  (e = (e || "").toLowerCase()) ? v.charWidthsCache[e] && delete v.charWidthsCache[e]: v.charWidthsCache = {}
                },
                limitDimsByArea: function(e, t) {
                  var n = Math.sqrt(t * e),
                    r = Math.floor(t / n);
                  return {
                    x: Math.floor(n),
                    y: r
                  }
                },
                capValue: function(e, t, n) {
                  return Math.max(e, Math.min(t, n))
                },
                findScaleToFit: function(e, t) {
                  return Math.min(t.width / e.width, t.height / e.height)
                },
                findScaleToCover: function(e, t) {
                  return Math.max(t.width / e.width, t.height / e.height)
                },
                matrixToSVG: function(e) {
                  return "matrix(" + e.map((function(e) {
                    return v.util.toFixed(e, v.Object.NUM_FRACTION_DIGITS)
                  })).join(" ") + ")"
                },
                removeTransformFromObject: function(e, t) {
                  var n = v.util.invertTransform(t),
                    r = v.util.multiplyTransformMatrices(n, e.calcOwnMatrix());
                  v.util.applyTransformToObject(e, r)
                },
                addTransformToObject: function(e, t) {
                  v.util.applyTransformToObject(e, v.util.multiplyTransformMatrices(t, e.calcOwnMatrix()))
                },
                applyTransformToObject: function(e, t) {
                  var n = v.util.qrDecompose(t),
                    r = new v.Point(n.translateX, n.translateY);
                  e.flipX = !1, e.flipY = !1, e.set("scaleX", n.scaleX), e.set("scaleY", n.scaleY), e.skewX = n.skewX, e.skewY = n.skewY, e.angle = n.angle, e.setPositionByOrigin(r, "center", "center")
                },
                sizeAfterTransform: function(e, t, n) {
                  var r = e / 2,
                    i = t / 2,
                    o = [{
                      x: -r,
                      y: -i
                    }, {
                      x: r,
                      y: -i
                    }, {
                      x: -r,
                      y: i
                    }, {
                      x: r,
                      y: i
                    }],
                    a = v.util.calcDimensionsMatrix(n),
                    s = v.util.makeBoundingBoxFromPoints(o, a);
                  return {
                    x: s.width,
                    y: s.height
                  }
                },
                mergeClipPaths: function(e, t) {
                  var n = e,
                    r = t;
                  n.inverted && !r.inverted && (n = t, r = e), v.util.applyTransformToObject(r, v.util.multiplyTransformMatrices(v.util.invertTransform(n.calcTransformMatrix()), r.calcTransformMatrix()));
                  var i = n.inverted && r.inverted;
                  return i && (n.inverted = r.inverted = !1), new v.Group([n], {
                    clipPath: r,
                    inverted: i
                  })
                },
                hasStyleChanged: function(e, t, n) {
                  return n = n || !1, e.fill !== t.fill || e.stroke !== t.stroke || e.strokeWidth !== t.strokeWidth || e.fontSize !== t.fontSize || e.fontFamily !== t.fontFamily || e.fontWeight !== t.fontWeight || e.fontStyle !== t
                    .fontStyle || e.textBackgroundColor !== t.textBackgroundColor || e.deltaY !== t.deltaY || n && (e.overline !== t.overline || e.underline !== t.underline || e.linethrough !== t.linethrough)
                },
                stylesToArray: function(e, t) {
                  e = v.util.object.clone(e, !0);
                  for (var n = t.split("\n"), r = -1, i = {}, o = [], a = 0; a < n.length; a++)
                    if (e[a])
                      for (var s = 0; s < n[a].length; s++) {
                        r++;
                        var l = e[a][s];
                        if (l && Object.keys(l).length > 0) v.util.hasStyleChanged(i, l, !0) ? o.push({
                          start: r,
                          end: r + 1,
                          style: l
                        }) : o[o.length - 1].end++;
                        i = l || {}
                      } else r += n[a].length;
                  return o
                },
                stylesFromArray: function(e, t) {
                  if (!Array.isArray(e)) return e;
                  for (var n = t.split("\n"), r = -1, i = 0, o = {}, a = 0; a < n.length; a++)
                    for (var s = 0; s < n[a].length; s++) r++, e[i] && e[i].start <= r && r < e[i].end && (o[a] = o[a] || {}, o[a][s] = Object.assign({}, e[i].style), r === e[i].end - 1 && i++);
                  return o
                }
              }
            }(e),
            function() {
              var e = Array.prototype.join,
                t = {
                  m: 2,
                  l: 2,
                  h: 1,
                  v: 1,
                  c: 6,
                  s: 4,
                  q: 4,
                  t: 2,
                  a: 7
                },
                n = {
                  m: "l",
                  M: "L"
                };

              function r(e, t, n, r, i, o, a, s, l, c, u) {
                var h = v.util.cos(e),
                  p = v.util.sin(e),
                  d = v.util.cos(t),
                  f = v.util.sin(t),
                  g = n * i * d - r * o * f + a,
                  m = r * i * d + n * o * f + s;
                return ["C", c + l * (-n * i * p - r * o * h), u + l * (-r * i * p + n * o * h), g + l * (n * i * f + r * o * d), m + l * (r * i * f - n * o * d), g, m]
              }

              function i(e, t, n, r) {
                var i = Math.atan2(t, e),
                  o = Math.atan2(r, n);
                return o >= i ? o - i : 2 * Math.PI - (i - o)
              }

              function o(e, t, n) {
                for (var o = n[1], a = n[2], s = n[3], l = n[4], c = n[5], u = function(e, t, n, o, a, s, l) {
                    var c = Math.PI,
                      u = l * c / 180,
                      h = v.util.sin(u),
                      p = v.util.cos(u),
                      d = 0,
                      f = 0,
                      g = -p * e * .5 - h * t * .5,
                      m = -p * t * .5 + h * e * .5,
                      _ = (n = Math.abs(n)) * n,
                      b = (o = Math.abs(o)) * o,
                      y = m * m,
                      w = g * g,
                      x = _ * b - _ * y - b * w,
                      k = 0;
                    if (x < 0) {
                      var C = Math.sqrt(1 - x / (_ * b));
                      n *= C, o *= C
                    } else k = (a === s ? -1 : 1) * Math.sqrt(x / (_ * y + b * w));
                    var S = k * n * m / o,
                      E = -k * o * g / n,
                      T = p * S - h * E + .5 * e,
                      O = h * S + p * E + .5 * t,
                      A = i(1, 0, (g - S) / n, (m - E) / o),
                      P = i((g - S) / n, (m - E) / o, (-g - S) / n, (-m - E) / o);
                    0 === s && P > 0 ? P -= 2 * c : 1 === s && P < 0 && (P += 2 * c);
                    for (var M = Math.ceil(Math.abs(P / c * 2)), D = [], I = P / M, N = 8 / 3 * Math.sin(I / 4) * Math.sin(I / 4) / Math.sin(I / 2), R = A + I, j = 0; j < M; j++) D[j] = r(A, R, p, h, n, o, T, O, N, d, f), d = D[j][5], f = D[j][
                      6
                    ], A = R, R += I;
                    return D
                  }(n[6] - e, n[7] - t, o, a, l, c, s), h = 0, p = u.length; h < p; h++) u[h][1] += e, u[h][2] += t, u[h][3] += e, u[h][4] += t, u[h][5] += e, u[h][6] += t;
                return u
              }

              function a(e, t, n, r) {
                return Math.sqrt((n - e) * (n - e) + (r - t) * (r - t))
              }

              function s(e, t, n, r, i, o, a, s) {
                return function(l) {
                  var c = function(e) {
                      return e * e * e
                    }(l),
                    u = function(e) {
                      return 3 * e * e * (1 - e)
                    }(l),
                    h = function(e) {
                      return 3 * e * (1 - e) * (1 - e)
                    }(l),
                    p = function(e) {
                      return (1 - e) * (1 - e) * (1 - e)
                    }(l);
                  return {
                    x: a * c + i * u + n * h + e * p,
                    y: s * c + o * u + r * h + t * p
                  }
                }
              }

              function l(e, t, n, r, i, o, a, s) {
                return function(l) {
                  var c = 1 - l,
                    u = 3 * c * c * (n - e) + 6 * c * l * (i - n) + 3 * l * l * (a - i),
                    h = 3 * c * c * (r - t) + 6 * c * l * (o - r) + 3 * l * l * (s - o);
                  return Math.atan2(h, u)
                }
              }

              function c(e, t, n, r, i, o) {
                return function(a) {
                  var s = function(e) {
                      return e * e
                    }(a),
                    l = function(e) {
                      return 2 * e * (1 - e)
                    }(a),
                    c = function(e) {
                      return (1 - e) * (1 - e)
                    }(a);
                  return {
                    x: i * s + n * l + e * c,
                    y: o * s + r * l + t * c
                  }
                }
              }

              function u(e, t, n, r, i, o) {
                return function(a) {
                  var s = 1 - a,
                    l = 2 * s * (n - e) + 2 * a * (i - n),
                    c = 2 * s * (r - t) + 2 * a * (o - r);
                  return Math.atan2(c, l)
                }
              }

              function h(e, t, n) {
                var r, i, o = {
                    x: t,
                    y: n
                  },
                  s = 0;
                for (i = 1; i <= 100; i += 1) r = e(i / 100), s += a(o.x, o.y, r.x, r.y), o = r;
                return s
              }

              function p(e, t) {
                for (var n, r, i, o = 0, s = 0, l = e.iterator, c = {
                    x: e.x,
                    y: e.y
                  }, u = .01, h = e.angleFinder; s < t && u > 1e-4;) n = l(o), i = o, (r = a(c.x, c.y, n.x, n.y)) + s > t ? (o -= u, u /= 2) : (c = n, o += u, s += r);
                return n.angle = h(i), n
              }

              function d(e) {
                for (var t, n, r, i, o = 0, p = e.length, d = 0, f = 0, g = 0, m = 0, v = [], _ = 0; _ < p; _++) {
                  switch (r = {
                      x: d,
                      y: f,
                      command: (t = e[_])[0]
                    }, t[0]) {
                    case "M":
                      r.length = 0, g = d = t[1], m = f = t[2];
                      break;
                    case "L":
                      r.length = a(d, f, t[1], t[2]), d = t[1], f = t[2];
                      break;
                    case "C":
                      n = s(d, f, t[1], t[2], t[3], t[4], t[5], t[6]), i = l(d, f, t[1], t[2], t[3], t[4], t[5], t[6]), r.iterator = n, r.angleFinder = i, r.length = h(n, d, f), d = t[5], f = t[6];
                      break;
                    case "Q":
                      n = c(d, f, t[1], t[2], t[3], t[4]), i = u(d, f, t[1], t[2], t[3], t[4]), r.iterator = n, r.angleFinder = i, r.length = h(n, d, f), d = t[3], f = t[4];
                      break;
                    case "Z":
                    case "z":
                      r.destX = g, r.destY = m, r.length = a(d, f, g, m), d = g, f = m
                  }
                  o += r.length, v.push(r)
                }
                return v.push({
                  length: o,
                  x: d,
                  y: f
                }), v
              }
              v.util.joinPath = function(e) {
                return e.map((function(e) {
                  return e.join(" ")
                })).join(" ")
              }, v.util.parsePath = function(e) {
                var r, i, o, a, s, l = [],
                  c = [],
                  u = v.rePathCommand,
                  h = "[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?\\s*",
                  p = "(" + h + ")" + v.commaWsp,
                  d = "([01])" + v.commaWsp + "?",
                  f = new RegExp(p + "?" + p + "?" + p + d + d + p + "?(" + h + ")", "g");
                if (!e || !e.match) return l;
                for (var g, m = 0, _ = (s = e.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi)).length; m < _; m++) {
                  a = (r = s[m]).slice(1).trim(), c.length = 0;
                  var b = r.charAt(0);
                  if (g = [b], "a" === b.toLowerCase())
                    for (var y; y = f.exec(a);)
                      for (var w = 1; w < y.length; w++) c.push(y[w]);
                  else
                    for (; o = u.exec(a);) c.push(o[0]);
                  w = 0;
                  for (var x = c.length; w < x; w++) i = parseFloat(c[w]), isNaN(i) || g.push(i);
                  var k = t[b.toLowerCase()],
                    C = n[b] || b;
                  if (g.length - 1 > k)
                    for (var S = 1, E = g.length; S < E; S += k) l.push([b].concat(g.slice(S, S + k))), b = C;
                  else l.push(g)
                }
                return l
              }, v.util.makePathSimpler = function(e) {
                var t, n, r, i, a, s, l = 0,
                  c = 0,
                  u = e.length,
                  h = 0,
                  p = 0,
                  d = [];
                for (n = 0; n < u; ++n) {
                  switch (r = !1, (t = e[n].slice(0))[0]) {
                    case "l":
                      t[0] = "L", t[1] += l, t[2] += c;
                    case "L":
                      l = t[1], c = t[2];
                      break;
                    case "h":
                      t[1] += l;
                    case "H":
                      t[0] = "L", t[2] = c, l = t[1];
                      break;
                    case "v":
                      t[1] += c;
                    case "V":
                      t[0] = "L", c = t[1], t[1] = l, t[2] = c;
                      break;
                    case "m":
                      t[0] = "M", t[1] += l, t[2] += c;
                    case "M":
                      l = t[1], c = t[2], h = t[1], p = t[2];
                      break;
                    case "c":
                      t[0] = "C", t[1] += l, t[2] += c, t[3] += l, t[4] += c, t[5] += l, t[6] += c;
                    case "C":
                      a = t[3], s = t[4], l = t[5], c = t[6];
                      break;
                    case "s":
                      t[0] = "S", t[1] += l, t[2] += c, t[3] += l, t[4] += c;
                    case "S":
                      "C" === i ? (a = 2 * l - a, s = 2 * c - s) : (a = l, s = c), l = t[3], c = t[4], t[0] = "C", t[5] = t[3], t[6] = t[4], t[3] = t[1], t[4] = t[2], t[1] = a, t[2] = s, a = t[3], s = t[4];
                      break;
                    case "q":
                      t[0] = "Q", t[1] += l, t[2] += c, t[3] += l, t[4] += c;
                    case "Q":
                      a = t[1], s = t[2], l = t[3], c = t[4];
                      break;
                    case "t":
                      t[0] = "T", t[1] += l, t[2] += c;
                    case "T":
                      "Q" === i ? (a = 2 * l - a, s = 2 * c - s) : (a = l, s = c), t[0] = "Q", l = t[1], c = t[2], t[1] = a, t[2] = s, t[3] = l, t[4] = c;
                      break;
                    case "a":
                      t[0] = "A", t[6] += l, t[7] += c;
                    case "A":
                      r = !0, d = d.concat(o(l, c, t)), l = t[6], c = t[7];
                      break;
                    case "z":
                    case "Z":
                      l = h, c = p
                  }
                  r || d.push(t), i = t[0]
                }
                return d
              }, v.util.getSmoothPathFromPoints = function(e, t) {
                var n, r = [],
                  i = new v.Point(e[0].x, e[0].y),
                  o = new v.Point(e[1].x, e[1].y),
                  a = e.length,
                  s = 1,
                  l = 0,
                  c = a > 2;
                for (t = t || 0, c && (s = e[2].x < o.x ? -1 : e[2].x === o.x ? 0 : 1, l = e[2].y < o.y ? -1 : e[2].y === o.y ? 0 : 1), r.push(["M", i.x - s * t, i.y - l * t]), n = 1; n < a; n++) {
                  if (!i.eq(o)) {
                    var u = i.midPointFrom(o);
                    r.push(["Q", i.x, i.y, u.x, u.y])
                  }
                  i = e[n], n + 1 < e.length && (o = e[n + 1])
                }
                return c && (s = i.x > e[n - 2].x ? 1 : i.x === e[n - 2].x ? 0 : -1, l = i.y > e[n - 2].y ? 1 : i.y === e[n - 2].y ? 0 : -1), r.push(["L", i.x + s * t, i.y + l * t]), r
              }, v.util.getPathSegmentsInfo = d, v.util.getBoundsOfCurve = function(t, n, r, i, o, a, s, l) {
                var c;
                if (v.cachesBoundsOfCurve && (c = e.call(arguments), v.boundsOfCurveCache[c])) return v.boundsOfCurveCache[c];
                var u, h, p, d, f, g, m, _, b = Math.sqrt,
                  y = Math.min,
                  w = Math.max,
                  x = Math.abs,
                  k = [],
                  C = [
                    [],
                    []
                  ];
                h = 6 * t - 12 * r + 6 * o, u = -3 * t + 9 * r - 9 * o + 3 * s, p = 3 * r - 3 * t;
                for (var S = 0; S < 2; ++S)
                  if (S > 0 && (h = 6 * n - 12 * i + 6 * a, u = -3 * n + 9 * i - 9 * a + 3 * l, p = 3 * i - 3 * n), x(u) < 1e-12) {
                    if (x(h) < 1e-12) continue;
                    0 < (d = -p / h) && d < 1 && k.push(d)
                  } else(m = h * h - 4 * p * u) < 0 || (0 < (f = (-h + (_ = b(m))) / (2 * u)) && f < 1 && k.push(f), 0 < (g = (-h - _) / (2 * u)) && g < 1 && k.push(g));
                for (var E, T, O, A = k.length, P = A; A--;) E = (O = 1 - (d = k[A])) * O * O * t + 3 * O * O * d * r + 3 * O * d * d * o + d * d * d * s, C[0][A] = E, T = O * O * O * n + 3 * O * O * d * i + 3 * O * d * d * a + d * d * d * l,
                  C[1][A] = T;
                C[0][P] = t, C[1][P] = n, C[0][P + 1] = s, C[1][P + 1] = l;
                var M = [{
                  x: y.apply(null, C[0]),
                  y: y.apply(null, C[1])
                }, {
                  x: w.apply(null, C[0]),
                  y: w.apply(null, C[1])
                }];
                return v.cachesBoundsOfCurve && (v.boundsOfCurveCache[c] = M), M
              }, v.util.getPointOnPath = function(e, t, n) {
                n || (n = d(e));
                for (var r = 0; t - n[r].length > 0 && r < n.length - 2;) t -= n[r].length, r++;
                var i, o = n[r],
                  a = t / o.length,
                  s = o.command,
                  l = e[r];
                switch (s) {
                  case "M":
                    return {
                      x: o.x, y: o.y, angle: 0
                    };
                  case "Z":
                  case "z":
                    return (i = new v.Point(o.x, o.y).lerp(new v.Point(o.destX, o.destY), a)).angle = Math.atan2(o.destY - o.y, o.destX - o.x), i;
                  case "L":
                    return (i = new v.Point(o.x, o.y).lerp(new v.Point(l[1], l[2]), a)).angle = Math.atan2(l[2] - o.y, l[1] - o.x), i;
                  case "C":
                  case "Q":
                    return p(o, t)
                }
              }, v.util.transformPath = function(e, t, n) {
                return n && (t = v.util.multiplyTransformMatrices(t, [1, 0, 0, 1, -n.x, -n.y])), e.map((function(e) {
                  for (var n = e.slice(0), r = {}, i = 1; i < e.length - 1; i += 2) r.x = e[i], r.y = e[i + 1], r = v.util.transformPoint(r, t), n[i] = r.x, n[i + 1] = r.y;
                  return n
                }))
              }
            }(),
            function() {
              var e = Array.prototype.slice;

              function t(e, t, n) {
                if (e && 0 !== e.length) {
                  var r = e.length - 1,
                    i = t ? e[r][t] : e[r];
                  if (t)
                    for (; r--;) n(e[r][t], i) && (i = e[r][t]);
                  else
                    for (; r--;) n(e[r], i) && (i = e[r]);
                  return i
                }
              }
              v.util.array = {
                fill: function(e, t) {
                  for (var n = e.length; n--;) e[n] = t;
                  return e
                },
                invoke: function(t, n) {
                  for (var r = e.call(arguments, 2), i = [], o = 0, a = t.length; o < a; o++) i[o] = r.length ? t[o][n].apply(t[o], r) : t[o][n].call(t[o]);
                  return i
                },
                min: function(e, n) {
                  return t(e, n, (function(e, t) {
                    return e < t
                  }))
                },
                max: function(e, n) {
                  return t(e, n, (function(e, t) {
                    return e >= t
                  }))
                }
              }
            }(),
            function() {
              function e(t, n, r) {
                if (r)
                  if (!v.isLikelyNode && n instanceof Element) t = n;
                  else if (n instanceof Array) {
                  t = [];
                  for (var i = 0, o = n.length; i < o; i++) t[i] = e({}, n[i], r)
                } else if (n && "object" == typeof n)
                  for (var a in n) "canvas" === a || "group" === a ? t[a] = null : n.hasOwnProperty(a) && (t[a] = e({}, n[a], r));
                else t = n;
                else
                  for (var a in n) t[a] = n[a];
                return t
              }
              v.util.object = {
                extend: e,
                clone: function(t, n) {
                  return e({}, t, n)
                }
              }, v.util.object.extend(v.util, v.Observable)
            }(),
            function() {
              function e(e, t) {
                var n = e.charCodeAt(t);
                if (isNaN(n)) return "";
                if (n < 55296 || n > 57343) return e.charAt(t);
                if (55296 <= n && n <= 56319) {
                  if (e.length <= t + 1) throw "High surrogate without following low surrogate";
                  var r = e.charCodeAt(t + 1);
                  if (56320 > r || r > 57343) throw "High surrogate without following low surrogate";
                  return e.charAt(t) + e.charAt(t + 1)
                }
                if (0 === t) throw "Low surrogate without preceding high surrogate";
                var i = e.charCodeAt(t - 1);
                if (55296 > i || i > 56319) throw "Low surrogate without preceding high surrogate";
                return !1
              }
              v.util.string = {
                camelize: function(e) {
                  return e.replace(/-+(.)?/g, (function(e, t) {
                    return t ? t.toUpperCase() : ""
                  }))
                },
                capitalize: function(e, t) {
                  return e.charAt(0).toUpperCase() + (t ? e.slice(1) : e.slice(1).toLowerCase())
                },
                escapeXml: function(e) {
                  return e.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/'/g, "&apos;").replace(/</g, "&lt;").replace(/>/g, "&gt;")
                },
                graphemeSplit: function(t) {
                  var n, r = 0,
                    i = [];
                  for (r = 0; r < t.length; r++) !1 !== (n = e(t, r)) && i.push(n);
                  return i
                }
              }
            }(),
            function() {
              var e = Array.prototype.slice,
                t = function() {},
                n = function() {
                  for (var e in {
                      toString: 1
                    })
                    if ("toString" === e) return !1;
                  return !0
                }(),
                r = function(e, t, r) {
                  for (var i in t) i in e.prototype && "function" == typeof e.prototype[i] && (t[i] + "").indexOf("callSuper") > -1 ? e.prototype[i] = function(e) {
                    return function() {
                      var n = this.constructor.superclass;
                      this.constructor.superclass = r;
                      var i = t[e].apply(this, arguments);
                      if (this.constructor.superclass = n, "initialize" !== e) return i
                    }
                  }(i) : e.prototype[i] = t[i], n && (t.toString !== Object.prototype.toString && (e.prototype.toString = t.toString), t.valueOf !== Object.prototype.valueOf && (e.prototype.valueOf = t.valueOf))
                };

              function i() {}

              function o(t) {
                for (var n = null, r = this; r.constructor.superclass;) {
                  var i = r.constructor.superclass.prototype[t];
                  if (r[t] !== i) {
                    n = i;
                    break
                  }
                  r = r.constructor.superclass.prototype
                }
                if (n) return arguments.length > 1 ? n.apply(this, e.call(arguments, 1)) : n.call(this)
              }
              v.util.createClass = function() {
                var n = null,
                  a = e.call(arguments, 0);

                function s() {
                  this.initialize.apply(this, arguments)
                }
                "function" == typeof a[0] && (n = a.shift()), s.superclass = n, s.subclasses = [], n && (i.prototype = n.prototype, s.prototype = new i, n.subclasses.push(s));
                for (var l = 0, c = a.length; l < c; l++) r(s, a[l], n);
                return s.prototype.initialize || (s.prototype.initialize = t), s.prototype.constructor = s, s.prototype.callSuper = o, s
              }
            }(), t = !!v.document.createElement("div").attachEvent, n = ["touchstart", "touchmove", "touchend"], v.util.addListener = function(e, n, r, i) {
              e && e.addEventListener(n, r, !t && i)
            }, v.util.removeListener = function(e, n, r, i) {
              e && e.removeEventListener(n, r, !t && i)
            }, v.util.getPointer = function(e) {
              var t = e.target,
                n = v.util.getScrollLeftTop(t),
                r = function(e) {
                  var t = e.changedTouches;
                  return t && t[0] ? t[0] : e
                }(e);
              return {
                x: r.clientX + n.left,
                y: r.clientY + n.top
              }
            }, v.util.isTouchEvent = function(e) {
              return n.indexOf(e.type) > -1 || "touch" === e.pointerType
            }, r = v.document.createElement("div"), i = "string" == typeof r.style.opacity, l = "string" == typeof r.style.filter, c = /alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/, u = function(e) {
              return e
            }, i ? u = function(e, t) {
              return e.style.opacity = t, e
            } : l && (u = function(e, t) {
              var n = e.style;
              return e.currentStyle && !e.currentStyle.hasLayout && (n.zoom = 1), c.test(n.filter) ? (t = t >= .9999 ? "" : "alpha(opacity=" + 100 * t + ")", n.filter = n.filter.replace(c, t)) : n.filter += " alpha(opacity=" + 100 * t + ")", e
            }), v.util.setStyle = function(e, t) {
              var n = e.style;
              if (!n) return e;
              if ("string" == typeof t) return e.style.cssText += ";" + t, t.indexOf("opacity") > -1 ? u(e, t.match(/opacity:\s*(\d?\.?\d*)/)[1]) : e;
              for (var r in t)
                if ("opacity" === r) u(e, t[r]);
                else {
                  var i = "float" === r || "cssFloat" === r ? void 0 === n.styleFloat ? "cssFloat" : "styleFloat" : r;
                  n.setProperty(i, t[r])
                } return e
            },
            function() {
              var e = Array.prototype.slice;
              var t, n, r = function(t) {
                return e.call(t, 0)
              };
              try {
                t = r(v.document.childNodes) instanceof Array
              } catch (e) {}

              function i(e, t) {
                var n = v.document.createElement(e);
                for (var r in t) "class" === r ? n.className = t[r] : "for" === r ? n.htmlFor = t[r] : n.setAttribute(r, t[r]);
                return n
              }

              function o(e) {
                for (var t = 0, n = 0, r = v.document.documentElement, i = v.document.body || {
                    scrollLeft: 0,
                    scrollTop: 0
                  }; e && (e.parentNode || e.host) && ((e = e.parentNode || e.host) === v.document ? (t = i.scrollLeft || r.scrollLeft || 0, n = i.scrollTop || r.scrollTop || 0) : (t += e.scrollLeft || 0, n += e.scrollTop || 0), 1 !== e
                    .nodeType || "fixed" !== e.style.position););
                return {
                  left: t,
                  top: n
                }
              }
              t || (r = function(e) {
                  for (var t = new Array(e.length), n = e.length; n--;) t[n] = e[n];
                  return t
                }), n = v.document.defaultView && v.document.defaultView.getComputedStyle ? function(e, t) {
                  var n = v.document.defaultView.getComputedStyle(e, null);
                  return n ? n[t] : void 0
                } : function(e, t) {
                  var n = e.style[t];
                  return !n && e.currentStyle && (n = e.currentStyle[t]), n
                },
                function() {
                  var e = v.document.documentElement.style,
                    t = "userSelect" in e ? "userSelect" : "MozUserSelect" in e ? "MozUserSelect" : "WebkitUserSelect" in e ? "WebkitUserSelect" : "KhtmlUserSelect" in e ? "KhtmlUserSelect" : "";
                  v.util.makeElementUnselectable = function(e) {
                    return void 0 !== e.onselectstart && (e.onselectstart = v.util.falseFunction), t ? e.style[t] = "none" : "string" == typeof e.unselectable && (e.unselectable = "on"), e
                  }, v.util.makeElementSelectable = function(e) {
                    return void 0 !== e.onselectstart && (e.onselectstart = null), t ? e.style[t] = "" : "string" == typeof e.unselectable && (e.unselectable = ""), e
                  }
                }(), v.util.setImageSmoothing = function(e, t) {
                  e.imageSmoothingEnabled = e.imageSmoothingEnabled || e.webkitImageSmoothingEnabled || e.mozImageSmoothingEnabled || e.msImageSmoothingEnabled || e.oImageSmoothingEnabled, e.imageSmoothingEnabled = t
                }, v.util.getById = function(e) {
                  return "string" == typeof e ? v.document.getElementById(e) : e
                }, v.util.toArray = r, v.util.addClass = function(e, t) {
                  e && -1 === (" " + e.className + " ").indexOf(" " + t + " ") && (e.className += (e.className ? " " : "") + t)
                }, v.util.makeElement = i, v.util.wrapElement = function(e, t, n) {
                  return "string" == typeof t && (t = i(t, n)), e.parentNode && e.parentNode.replaceChild(t, e), t.appendChild(e), t
                }, v.util.getScrollLeftTop = o, v.util.getElementOffset = function(e) {
                  var t, r, i = e && e.ownerDocument,
                    a = {
                      left: 0,
                      top: 0
                    },
                    s = {
                      left: 0,
                      top: 0
                    },
                    l = {
                      borderLeftWidth: "left",
                      borderTopWidth: "top",
                      paddingLeft: "left",
                      paddingTop: "top"
                    };
                  if (!i) return s;
                  for (var c in l) s[l[c]] += parseInt(n(e, c), 10) || 0;
                  return t = i.documentElement, void 0 !== e.getBoundingClientRect && (a = e.getBoundingClientRect()), r = o(e), {
                    left: a.left + r.left - (t.clientLeft || 0) + s.left,
                    top: a.top + r.top - (t.clientTop || 0) + s.top
                  }
                }, v.util.getNodeCanvas = function(e) {
                  var t = v.jsdomImplForWrapper(e);
                  return t._canvas || t._image
                }, v.util.cleanUpJsdomNode = function(e) {
                  if (v.isLikelyNode) {
                    var t = v.jsdomImplForWrapper(e);
                    t && (t._image = null, t._canvas = null, t._currentSrc = null, t._attributes = null, t._classList = null)
                  }
                }
            }(),
            function() {
              function e() {}
              v.util.request = function(t, n) {
                n || (n = {});
                var r = n.method ? n.method.toUpperCase() : "GET",
                  i = n.onComplete || function() {},
                  o = new v.window.XMLHttpRequest,
                  a = n.body || n.parameters;
                return o.onreadystatechange = function() {
                  4 === o.readyState && (i(o), o.onreadystatechange = e)
                }, "GET" === r && (a = null, "string" == typeof n.parameters && (t = function(e, t) {
                  return e + (/\?/.test(e) ? "&" : "?") + t
                }(t, n.parameters))), o.open(r, t, !0), "POST" !== r && "PUT" !== r || o.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"), o.send(a), o
              }
            }(), v.log = console.log, v.warn = console.warn,
            function() {
              var e = v.util.object.extend,
                t = v.util.object.clone,
                n = [];

              function r() {
                return !1
              }

              function i(e, t, n, r) {
                return -n * Math.cos(e / r * (Math.PI / 2)) + n + t
              }
              v.util.object.extend(n, {
                cancelAll: function() {
                  var e = this.splice(0);
                  return e.forEach((function(e) {
                    e.cancel()
                  })), e
                },
                cancelByCanvas: function(e) {
                  if (!e) return [];
                  var t = this.filter((function(t) {
                    return "object" == typeof t.target && t.target.canvas === e
                  }));
                  return t.forEach((function(e) {
                    e.cancel()
                  })), t
                },
                cancelByTarget: function(e) {
                  var t = this.findAnimationsByTarget(e);
                  return t.forEach((function(e) {
                    e.cancel()
                  })), t
                },
                findAnimationIndex: function(e) {
                  return this.indexOf(this.findAnimation(e))
                },
                findAnimation: function(e) {
                  return this.find((function(t) {
                    return t.cancel === e
                  }))
                },
                findAnimationsByTarget: function(e) {
                  return e ? this.filter((function(t) {
                    return t.target === e
                  })) : []
                }
              });
              var o = v.window.requestAnimationFrame || v.window.webkitRequestAnimationFrame || v.window.mozRequestAnimationFrame || v.window.oRequestAnimationFrame || v.window.msRequestAnimationFrame || function(e) {
                  return v.window.setTimeout(e, 1e3 / 60)
                },
                a = v.window.cancelAnimationFrame || v.window.clearTimeout;

              function s() {
                return o.apply(v.window, arguments)
              }
              v.util.animate = function(n) {
                n || (n = {});
                var o, a = !1,
                  l = function() {
                    var e = v.runningAnimations.indexOf(o);
                    return e > -1 && v.runningAnimations.splice(e, 1)[0]
                  };
                return o = e(t(n), {
                  cancel: function() {
                    return a = !0, l()
                  },
                  currentValue: "startValue" in n ? n.startValue : 0,
                  completionRate: 0,
                  durationRate: 0
                }), v.runningAnimations.push(o), s((function(e) {
                  var t, c = e || +new Date,
                    u = n.duration || 500,
                    h = c + u,
                    p = n.onChange || r,
                    d = n.abort || r,
                    f = n.onComplete || r,
                    g = n.easing || i,
                    m = "startValue" in n && n.startValue.length > 0,
                    v = "startValue" in n ? n.startValue : 0,
                    _ = "endValue" in n ? n.endValue : 100,
                    b = n.byValue || (m ? v.map((function(e, t) {
                      return _[t] - v[t]
                    })) : _ - v);
                  n.onStart && n.onStart(),
                    function e(n) {
                      var r = (t = n || +new Date) > h ? u : t - c,
                        i = r / u,
                        y = m ? v.map((function(e, t) {
                          return g(r, v[t], b[t], u)
                        })) : g(r, v, b, u),
                        w = m ? Math.abs((y[0] - v[0]) / b[0]) : Math.abs((y - v) / b);
                      if (o.currentValue = m ? y.slice() : y, o.completionRate = w, o.durationRate = i, !a) {
                        if (!d(y, w, i)) return t > h ? (o.currentValue = m ? _.slice() : _, o.completionRate = 1, o.durationRate = 1, p(m ? _.slice() : _, 1, 1), f(_, 1, 1), void l()) : (p(y, w, i), void s(e));
                        l()
                      }
                    }(c)
                })), o.cancel
              }, v.util.requestAnimFrame = s, v.util.cancelAnimFrame = function() {
                return a.apply(v.window, arguments)
              }, v.runningAnimations = n
            }(),
            function() {
              function e(e, t, n) {
                var r = "rgba(" + parseInt(e[0] + n * (t[0] - e[0]), 10) + "," + parseInt(e[1] + n * (t[1] - e[1]), 10) + "," + parseInt(e[2] + n * (t[2] - e[2]), 10);
                return r += "," + (e && t ? parseFloat(e[3] + n * (t[3] - e[3])) : 1), r += ")"
              }
              v.util.animateColor = function(t, n, r, i) {
                var o = new v.Color(t).getSource(),
                  a = new v.Color(n).getSource(),
                  s = i.onComplete,
                  l = i.onChange;
                return i = i || {}, v.util.animate(v.util.object.extend(i, {
                  duration: r || 500,
                  startValue: o,
                  endValue: a,
                  byValue: a,
                  easing: function(t, n, r, o) {
                    return e(n, r, i.colorEasing ? i.colorEasing(t, o) : 1 - Math.cos(t / o * (Math.PI / 2)))
                  },
                  onComplete: function(t, n, r) {
                    if (s) return s(e(a, a, 0), n, r)
                  },
                  onChange: function(t, n, r) {
                    if (l) {
                      if (Array.isArray(t)) return l(e(t, t, 0), n, r);
                      l(t, n, r)
                    }
                  }
                }))
              }
            }(),
            function() {
              function e(e, t, n, r) {
                return e < Math.abs(t) ? (e = t, r = n / 4) : r = 0 === t && 0 === e ? n / (2 * Math.PI) * Math.asin(1) : n / (2 * Math.PI) * Math.asin(t / e), {
                  a: e,
                  c: t,
                  p: n,
                  s: r
                }
              }

              function t(e, t, n) {
                return e.a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * n - e.s) * (2 * Math.PI) / e.p)
              }

              function n(e, t, n, i) {
                return n - r(i - e, 0, n, i) + t
              }

              function r(e, t, n, r) {
                return (e /= r) < 1 / 2.75 ? n * (7.5625 * e * e) + t : e < 2 / 2.75 ? n * (7.5625 * (e -= 1.5 / 2.75) * e + .75) + t : e < 2.5 / 2.75 ? n * (7.5625 * (e -= 2.25 / 2.75) * e + .9375) + t : n * (7.5625 * (e -= 2.625 / 2.75) * e +
                  .984375) + t
              }
              v.util.ease = {
                easeInQuad: function(e, t, n, r) {
                  return n * (e /= r) * e + t
                },
                easeOutQuad: function(e, t, n, r) {
                  return -n * (e /= r) * (e - 2) + t
                },
                easeInOutQuad: function(e, t, n, r) {
                  return (e /= r / 2) < 1 ? n / 2 * e * e + t : -n / 2 * (--e * (e - 2) - 1) + t
                },
                easeInCubic: function(e, t, n, r) {
                  return n * (e /= r) * e * e + t
                },
                easeOutCubic: function(e, t, n, r) {
                  return n * ((e = e / r - 1) * e * e + 1) + t
                },
                easeInOutCubic: function(e, t, n, r) {
                  return (e /= r / 2) < 1 ? n / 2 * e * e * e + t : n / 2 * ((e -= 2) * e * e + 2) + t
                },
                easeInQuart: function(e, t, n, r) {
                  return n * (e /= r) * e * e * e + t
                },
                easeOutQuart: function(e, t, n, r) {
                  return -n * ((e = e / r - 1) * e * e * e - 1) + t
                },
                easeInOutQuart: function(e, t, n, r) {
                  return (e /= r / 2) < 1 ? n / 2 * e * e * e * e + t : -n / 2 * ((e -= 2) * e * e * e - 2) + t
                },
                easeInQuint: function(e, t, n, r) {
                  return n * (e /= r) * e * e * e * e + t
                },
                easeOutQuint: function(e, t, n, r) {
                  return n * ((e = e / r - 1) * e * e * e * e + 1) + t
                },
                easeInOutQuint: function(e, t, n, r) {
                  return (e /= r / 2) < 1 ? n / 2 * e * e * e * e * e + t : n / 2 * ((e -= 2) * e * e * e * e + 2) + t
                },
                easeInSine: function(e, t, n, r) {
                  return -n * Math.cos(e / r * (Math.PI / 2)) + n + t
                },
                easeOutSine: function(e, t, n, r) {
                  return n * Math.sin(e / r * (Math.PI / 2)) + t
                },
                easeInOutSine: function(e, t, n, r) {
                  return -n / 2 * (Math.cos(Math.PI * e / r) - 1) + t
                },
                easeInExpo: function(e, t, n, r) {
                  return 0 === e ? t : n * Math.pow(2, 10 * (e / r - 1)) + t
                },
                easeOutExpo: function(e, t, n, r) {
                  return e === r ? t + n : n * (1 - Math.pow(2, -10 * e / r)) + t
                },
                easeInOutExpo: function(e, t, n, r) {
                  return 0 === e ? t : e === r ? t + n : (e /= r / 2) < 1 ? n / 2 * Math.pow(2, 10 * (e - 1)) + t : n / 2 * (2 - Math.pow(2, -10 * --e)) + t
                },
                easeInCirc: function(e, t, n, r) {
                  return -n * (Math.sqrt(1 - (e /= r) * e) - 1) + t
                },
                easeOutCirc: function(e, t, n, r) {
                  return n * Math.sqrt(1 - (e = e / r - 1) * e) + t
                },
                easeInOutCirc: function(e, t, n, r) {
                  return (e /= r / 2) < 1 ? -n / 2 * (Math.sqrt(1 - e * e) - 1) + t : n / 2 * (Math.sqrt(1 - (e -= 2) * e) + 1) + t
                },
                easeInElastic: function(n, r, i, o) {
                  var a = 0;
                  return 0 === n ? r : 1 === (n /= o) ? r + i : (a || (a = .3 * o), -t(e(i, i, a, 1.70158), n, o) + r)
                },
                easeOutElastic: function(t, n, r, i) {
                  var o = 0;
                  if (0 === t) return n;
                  if (1 === (t /= i)) return n + r;
                  o || (o = .3 * i);
                  var a = e(r, r, o, 1.70158);
                  return a.a * Math.pow(2, -10 * t) * Math.sin((t * i - a.s) * (2 * Math.PI) / a.p) + a.c + n
                },
                easeInOutElastic: function(n, r, i, o) {
                  var a = 0;
                  if (0 === n) return r;
                  if (2 === (n /= o / 2)) return r + i;
                  a || (a = o * (.3 * 1.5));
                  var s = e(i, i, a, 1.70158);
                  return n < 1 ? -.5 * t(s, n, o) + r : s.a * Math.pow(2, -10 * (n -= 1)) * Math.sin((n * o - s.s) * (2 * Math.PI) / s.p) * .5 + s.c + r
                },
                easeInBack: function(e, t, n, r, i) {
                  return void 0 === i && (i = 1.70158), n * (e /= r) * e * ((i + 1) * e - i) + t
                },
                easeOutBack: function(e, t, n, r, i) {
                  return void 0 === i && (i = 1.70158), n * ((e = e / r - 1) * e * ((i + 1) * e + i) + 1) + t
                },
                easeInOutBack: function(e, t, n, r, i) {
                  return void 0 === i && (i = 1.70158), (e /= r / 2) < 1 ? n / 2 * (e * e * ((1 + (i *= 1.525)) * e - i)) + t : n / 2 * ((e -= 2) * e * ((1 + (i *= 1.525)) * e + i) + 2) + t
                },
                easeInBounce: n,
                easeOutBounce: r,
                easeInOutBounce: function(e, t, i, o) {
                  return e < o / 2 ? .5 * n(2 * e, 0, i, o) + t : .5 * r(2 * e - o, 0, i, o) + .5 * i + t
                }
              }
            }(),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.object.extend,
                r = t.util.object.clone,
                i = t.util.toFixed,
                o = t.util.parseUnit,
                a = t.util.multiplyTransformMatrices,
                s = {
                  cx: "left",
                  x: "left",
                  r: "radius",
                  cy: "top",
                  y: "top",
                  display: "visible",
                  visibility: "visible",
                  transform: "transformMatrix",
                  "fill-opacity": "fillOpacity",
                  "fill-rule": "fillRule",
                  "font-family": "fontFamily",
                  "font-size": "fontSize",
                  "font-style": "fontStyle",
                  "font-weight": "fontWeight",
                  "letter-spacing": "charSpacing",
                  "paint-order": "paintFirst",
                  "stroke-dasharray": "strokeDashArray",
                  "stroke-dashoffset": "strokeDashOffset",
                  "stroke-linecap": "strokeLineCap",
                  "stroke-linejoin": "strokeLineJoin",
                  "stroke-miterlimit": "strokeMiterLimit",
                  "stroke-opacity": "strokeOpacity",
                  "stroke-width": "strokeWidth",
                  "text-decoration": "textDecoration",
                  "text-anchor": "textAnchor",
                  opacity: "opacity",
                  "clip-path": "clipPath",
                  "clip-rule": "clipRule",
                  "vector-effect": "strokeUniform",
                  "image-rendering": "imageSmoothing"
                },
                l = {
                  stroke: "strokeOpacity",
                  fill: "fillOpacity"
                },
                c = "font-size",
                u = "clip-path";

              function h(e) {
                return e in s ? s[e] : e
              }

              function p(e, n, r, i) {
                var s, l = Array.isArray(n);
                if ("fill" !== e && "stroke" !== e || "none" !== n) {
                  if ("strokeUniform" === e) return "non-scaling-stroke" === n;
                  if ("strokeDashArray" === e) n = "none" === n ? null : n.replace(/,/g, " ").split(/\s+/).map(parseFloat);
                  else if ("transformMatrix" === e) n = r && r.transformMatrix ? a(r.transformMatrix, t.parseTransformAttribute(n)) : t.parseTransformAttribute(n);
                  else if ("visible" === e) n = "none" !== n && "hidden" !== n, r && !1 === r.visible && (n = !1);
                  else if ("opacity" === e) n = parseFloat(n), r && void 0 !== r.opacity && (n *= r.opacity);
                  else if ("textAnchor" === e) n = "start" === n ? "left" : "end" === n ? "right" : "center";
                  else if ("charSpacing" === e) s = o(n, i) / i * 1e3;
                  else if ("paintFirst" === e) {
                    var c = n.indexOf("fill"),
                      u = n.indexOf("stroke");
                    n = "fill";
                    (c > -1 && u > -1 && u < c || -1 === c && u > -1) && (n = "stroke")
                  } else {
                    if ("href" === e || "xlink:href" === e || "font" === e) return n;
                    if ("imageSmoothing" === e) return "optimizeQuality" === n;
                    s = l ? n.map(o) : o(n, i)
                  }
                } else n = "";
                return !l && isNaN(s) ? n : s
              }

              function d(e) {
                return new RegExp("^(" + e.join("|") + ")\\b", "i")
              }

              function f(e, t) {
                var n, r, i, o, a = [];
                for (i = 0, o = t.length; i < o; i++) n = t[i], r = e.getElementsByTagName(n), a = a.concat(Array.prototype.slice.call(r));
                return a
              }

              function g(e, t) {
                var n, r = !0;
                return (n = m(e, t.pop())) && t.length && (r = function(e, t) {
                  var n, r = !0;
                  for (; e.parentNode && 1 === e.parentNode.nodeType && t.length;) r && (n = t.pop()), r = m(e = e.parentNode, n);
                  return 0 === t.length
                }(e, t)), n && r && 0 === t.length
              }

              function m(e, t) {
                var n, r, i = e.nodeName,
                  o = e.getAttribute("class"),
                  a = e.getAttribute("id");
                if (n = new RegExp("^" + i, "i"), t = t.replace(n, ""), a && t.length && (n = new RegExp("#" + a + "(?![a-zA-Z\\-]+)", "i"), t = t.replace(n, "")), o && t.length)
                  for (r = (o = o.split(" ")).length; r--;) n = new RegExp("\\." + o[r] + "(?![a-zA-Z\\-]+)", "i"), t = t.replace(n, "");
                return 0 === t.length
              }

              function v(e, t) {
                var n;
                if (e.getElementById && (n = e.getElementById(t)), n) return n;
                var r, i, o, a = e.getElementsByTagName("*");
                for (i = 0, o = a.length; i < o; i++)
                  if (t === (r = a[i]).getAttribute("id")) return r
              }
              t.svgValidTagNamesRegEx = d(["path", "circle", "polygon", "polyline", "ellipse", "rect", "line", "image", "text"]), t.svgViewBoxElementsRegEx = d(["symbol", "image", "marker", "pattern", "view", "svg"]), t.svgInvalidAncestorsRegEx =
                d(["pattern", "defs", "symbol", "metadata", "clipPath", "mask", "desc"]), t.svgValidParentsRegEx = d(["symbol", "g", "a", "svg", "clipPath", "defs"]), t.cssRules = {}, t.gradientDefs = {}, t.clipPaths = {}, t
                .parseTransformAttribute = function() {
                  function e(e, n, r) {
                    e[r] = Math.tan(t.util.degreesToRadians(n[0]))
                  }
                  var n = t.iMatrix,
                    r = t.reNum,
                    i = t.commaWsp,
                    o = "(?:" + ("(?:(matrix)\\s*\\(\\s*(" + r + ")" + i + "(" + r + ")" + i + "(" + r + ")" + i + "(" + r + ")" + i + "(" + r + ")" + i + "(" + r + ")\\s*\\))") + "|" + ("(?:(translate)\\s*\\(\\s*(" + r + ")(?:" + i + "(" + r +
                      "))?\\s*\\))") + "|" + ("(?:(scale)\\s*\\(\\s*(" + r + ")(?:" + i + "(" + r + "))?\\s*\\))") + "|" + ("(?:(rotate)\\s*\\(\\s*(" + r + ")(?:" + i + "(" + r + ")" + i + "(" + r + "))?\\s*\\))") + "|" + (
                      "(?:(skewX)\\s*\\(\\s*(" + r + ")\\s*\\))") + "|" + ("(?:(skewY)\\s*\\(\\s*(" + r + ")\\s*\\))") + ")",
                    a = new RegExp("^\\s*(?:" + ("(?:" + o + "(?:" + i + "*" + o + ")*)") + "?)\\s*$"),
                    s = new RegExp(o, "g");
                  return function(r) {
                    var i = n.concat(),
                      l = [];
                    if (!r || r && !a.test(r)) return i;
                    r.replace(s, (function(r) {
                      var a = new RegExp(o).exec(r).filter((function(e) {
                          return !!e
                        })),
                        s = a[1],
                        c = a.slice(2).map(parseFloat);
                      switch (s) {
                        case "translate":
                          ! function(e, t) {
                            e[4] = t[0], 2 === t.length && (e[5] = t[1])
                          }(i, c);
                          break;
                        case "rotate":
                          c[0] = t.util.degreesToRadians(c[0]),
                            function(e, n) {
                              var r = t.util.cos(n[0]),
                                i = t.util.sin(n[0]),
                                o = 0,
                                a = 0;
                              3 === n.length && (o = n[1], a = n[2]), e[0] = r, e[1] = i, e[2] = -i, e[3] = r, e[4] = o - (r * o - i * a), e[5] = a - (i * o + r * a)
                            }(i, c);
                          break;
                        case "scale":
                          ! function(e, t) {
                            var n = t[0],
                              r = 2 === t.length ? t[1] : t[0];
                            e[0] = n, e[3] = r
                          }(i, c);
                          break;
                        case "skewX":
                          e(i, c, 2);
                          break;
                        case "skewY":
                          e(i, c, 1);
                          break;
                        case "matrix":
                          i = c
                      }
                      l.push(i.concat()), i = n.concat()
                    }));
                    for (var c = l[0]; l.length > 1;) l.shift(), c = t.util.multiplyTransformMatrices(c, l[0]);
                    return c
                  }
                }();
              var _ = new RegExp("^\\s*(" + t.reNum + "+)\\s*,?\\s*(" + t.reNum + "+)\\s*,?\\s*(" + t.reNum + "+)\\s*,?\\s*(" + t.reNum + "+)\\s*$");

              function b(e) {
                if (!t.svgViewBoxElementsRegEx.test(e.nodeName)) return {};
                var n, r, i, a, s, l, c = e.getAttribute("viewBox"),
                  u = 1,
                  h = 1,
                  p = e.getAttribute("width"),
                  d = e.getAttribute("height"),
                  f = e.getAttribute("x") || 0,
                  g = e.getAttribute("y") || 0,
                  m = e.getAttribute("preserveAspectRatio") || "",
                  v = !c || !(c = c.match(_)),
                  b = !p || !d || "100%" === p || "100%" === d,
                  y = v && b,
                  w = {},
                  x = "",
                  k = 0,
                  C = 0;
                if (w.width = 0, w.height = 0, w.toBeParsed = y, v && (f || g) && e.parentNode && "#document" !== e.parentNode.nodeName && (x = " translate(" + o(f) + " " + o(g) + ") ", s = (e.getAttribute("transform") || "") + x, e.setAttribute(
                    "transform", s), e.removeAttribute("x"), e.removeAttribute("y")), y) return w;
                if (v) return w.width = o(p), w.height = o(d), w;
                if (n = -parseFloat(c[1]), r = -parseFloat(c[2]), i = parseFloat(c[3]), a = parseFloat(c[4]), w.minX = n, w.minY = r, w.viewBoxWidth = i, w.viewBoxHeight = a, b ? (w.width = i, w.height = a) : (w.width = o(p), w.height = o(d), u =
                    w.width / i, h = w.height / a), "none" !== (m = t.util.parsePreserveAspectRatioAttribute(m)).alignX && ("meet" === m.meetOrSlice && (h = u = u > h ? h : u), "slice" === m.meetOrSlice && (h = u = u > h ? u : h), k = w.width -
                    i * u, C = w.height - a * u, "Mid" === m.alignX && (k /= 2), "Mid" === m.alignY && (C /= 2), "Min" === m.alignX && (k = 0), "Min" === m.alignY && (C = 0)), 1 === u && 1 === h && 0 === n && 0 === r && 0 === f && 0 === g)
                return w;
                if ((f || g) && "#document" !== e.parentNode.nodeName && (x = " translate(" + o(f) + " " + o(g) + ") "), s = x + " matrix(" + u + " 0 0 " + h + " " + (n * u + k) + " " + (r * h + C) + ") ", "svg" === e.nodeName) {
                  for (l = e.ownerDocument.createElementNS(t.svgNS, "g"); e.firstChild;) l.appendChild(e.firstChild);
                  e.appendChild(l)
                } else(l = e).removeAttribute("x"), l.removeAttribute("y"), s = l.getAttribute("transform") + s;
                return l.setAttribute("transform", s), w
              }

              function y(e, t) {
                var n = "xlink:href",
                  r = v(e, t.getAttribute(n).slice(1));
                if (r && r.getAttribute(n) && y(e, r), ["gradientTransform", "x1", "x2", "y1", "y2", "gradientUnits", "cx", "cy", "r", "fx", "fy"].forEach((function(e) {
                    r && !t.hasAttribute(e) && r.hasAttribute(e) && t.setAttribute(e, r.getAttribute(e))
                  })), !t.children.length)
                  for (var i = r.cloneNode(!0); i.firstChild;) t.appendChild(i.firstChild);
                t.removeAttribute(n)
              }
              t.parseSVGDocument = function(e, n, i, o) {
                if (e) {
                  ! function(e) {
                    for (var n = f(e, ["use", "svg:use"]), r = 0; n.length && r < n.length;) {
                      var i = n[r],
                        o = i.getAttribute("xlink:href") || i.getAttribute("href");
                      if (null === o) return;
                      var a, s, l, c, u = o.slice(1),
                        h = i.getAttribute("x") || 0,
                        p = i.getAttribute("y") || 0,
                        d = v(e, u).cloneNode(!0),
                        g = (d.getAttribute("transform") || "") + " translate(" + h + ", " + p + ")",
                        m = n.length,
                        _ = t.svgNS;
                      if (b(d), /^svg$/i.test(d.nodeName)) {
                        var y = d.ownerDocument.createElementNS(_, "g");
                        for (s = 0, c = (l = d.attributes).length; s < c; s++) a = l.item(s), y.setAttributeNS(_, a.nodeName, a.nodeValue);
                        for (; d.firstChild;) y.appendChild(d.firstChild);
                        d = y
                      }
                      for (s = 0, c = (l = i.attributes).length; s < c; s++) "x" !== (a = l.item(s)).nodeName && "y" !== a.nodeName && "xlink:href" !== a.nodeName && "href" !== a.nodeName && ("transform" === a.nodeName ? g = a.nodeValue + " " +
                        g : d.setAttribute(a.nodeName, a.nodeValue));
                      d.setAttribute("transform", g), d.setAttribute("instantiated_by_use", "1"), d.removeAttribute("id"), i.parentNode.replaceChild(d, i), n.length === m && r++
                    }
                  }(e);
                  var a, s, l = t.Object.__uid++,
                    c = b(e),
                    u = t.util.toArray(e.getElementsByTagName("*"));
                  if (c.crossOrigin = o && o.crossOrigin, c.svgUid = l, 0 === u.length && t.isLikelyNode) {
                    var h = [];
                    for (a = 0, s = (u = e.selectNodes('//*[name(.)!="svg"]')).length; a < s; a++) h[a] = u[a];
                    u = h
                  }
                  var p = u.filter((function(e) {
                    return b(e), t.svgValidTagNamesRegEx.test(e.nodeName.replace("svg:", "")) && ! function(e, t) {
                      for (; e && (e = e.parentNode);)
                        if (e.nodeName && t.test(e.nodeName.replace("svg:", "")) && !e.getAttribute("instantiated_by_use")) return !0;
                      return !1
                    }(e, t.svgInvalidAncestorsRegEx)
                  }));
                  if (!p || p && !p.length) n && n([], {});
                  else {
                    var d = {};
                    u.filter((function(e) {
                      return "clipPath" === e.nodeName.replace("svg:", "")
                    })).forEach((function(e) {
                      var n = e.getAttribute("id");
                      d[n] = t.util.toArray(e.getElementsByTagName("*")).filter((function(e) {
                        return t.svgValidTagNamesRegEx.test(e.nodeName.replace("svg:", ""))
                      }))
                    })), t.gradientDefs[l] = t.getGradientDefs(e), t.cssRules[l] = t.getCSSRules(e), t.clipPaths[l] = d, t.parseElements(p, (function(e, r) {
                      n && (n(e, c, r, u), delete t.gradientDefs[l], delete t.cssRules[l], delete t.clipPaths[l])
                    }), r(c), i, o)
                  }
                }
              };
              var w = new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*(" + t.reNum + "(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|" + t.reNum + "))?\\s+(.*)");
              n(t, {
                parseFontDeclaration: function(e, t) {
                  var n = e.match(w);
                  if (n) {
                    var r = n[1],
                      i = n[3],
                      a = n[4],
                      s = n[5],
                      l = n[6];
                    r && (t.fontStyle = r), i && (t.fontWeight = isNaN(parseFloat(i)) ? i : parseFloat(i)), a && (t.fontSize = o(a)), l && (t.fontFamily = l), s && (t.lineHeight = "normal" === s ? 1 : s)
                  }
                },
                getGradientDefs: function(e) {
                  var t, n = f(e, ["linearGradient", "radialGradient", "svg:linearGradient", "svg:radialGradient"]),
                    r = 0,
                    i = {};
                  for (r = n.length; r--;)(t = n[r]).getAttribute("xlink:href") && y(e, t), i[t.getAttribute("id")] = t;
                  return i
                },
                parseAttributes: function(e, r, a) {
                  if (e) {
                    var s, d, f, m = {};
                    void 0 === a && (a = e.getAttribute("svgUid")), e.parentNode && t.svgValidParentsRegEx.test(e.parentNode.nodeName) && (m = t.parseAttributes(e.parentNode, r, a));
                    var v = r.reduce((function(t, n) {
                        return (s = e.getAttribute(n)) && (t[n] = s), t
                      }), {}),
                      _ = n(function(e, n) {
                        var r = {};
                        for (var i in t.cssRules[n])
                          if (g(e, i.split(" ")))
                            for (var o in t.cssRules[n][i]) r[o] = t.cssRules[n][i][o];
                        return r
                      }(e, a), t.parseStyleAttribute(e));
                    v = n(v, _), _[u] && e.setAttribute(u, _[u]), d = f = m.fontSize || t.Text.DEFAULT_SVG_FONT_SIZE, v[c] && (v[c] = d = o(v[c], f));
                    var b, y, w = {};
                    for (var x in v) y = p(b = h(x), v[x], m, d), w[b] = y;
                    w && w.font && t.parseFontDeclaration(w.font, w);
                    var k = n(m, w);
                    return t.svgValidParentsRegEx.test(e.nodeName) ? k : function(e) {
                      for (var n in l)
                        if (void 0 !== e[l[n]] && "" !== e[n]) {
                          if (void 0 === e[n]) {
                            if (!t.Object.prototype[n]) continue;
                            e[n] = t.Object.prototype[n]
                          }
                          if (0 !== e[n].indexOf("url(")) {
                            var r = new t.Color(e[n]);
                            e[n] = r.setAlpha(i(r.getAlpha() * e[l[n]], 2)).toRgba()
                          }
                        } return e
                    }(k)
                  }
                },
                parseElements: function(e, n, r, i, o) {
                  new t.ElementsParser(e, n, r, i, o).parse()
                },
                parseStyleAttribute: function(e) {
                  var t = {},
                    n = e.getAttribute("style");
                  return n ? ("string" == typeof n ? function(e, t) {
                    var n, r;
                    e.replace(/;\s*$/, "").split(";").forEach((function(e) {
                      var i = e.split(":");
                      n = i[0].trim().toLowerCase(), r = i[1].trim(), t[n] = r
                    }))
                  }(n, t) : function(e, t) {
                    var n, r;
                    for (var i in e) void 0 !== e[i] && (n = i.toLowerCase(), r = e[i], t[n] = r)
                  }(n, t), t) : t
                },
                parsePointsAttribute: function(e) {
                  if (!e) return null;
                  var t, n, r = [];
                  for (t = 0, n = (e = (e = e.replace(/,/g, " ").trim()).split(/\s+/)).length; t < n; t += 2) r.push({
                    x: parseFloat(e[t]),
                    y: parseFloat(e[t + 1])
                  });
                  return r
                },
                getCSSRules: function(e) {
                  var n, r, i = e.getElementsByTagName("style"),
                    o = {};
                  for (n = 0, r = i.length; n < r; n++) {
                    var a = i[n].textContent;
                    "" !== (a = a.replace(/\/\*[\s\S]*?\*\//g, "")).trim() && a.split("}").filter((function(e) {
                      return e.trim()
                    })).forEach((function(e) {
                      var i = e.split("{"),
                        a = {},
                        s = i[1].trim().split(";").filter((function(e) {
                          return e.trim()
                        }));
                      for (n = 0, r = s.length; n < r; n++) {
                        var l = s[n].split(":"),
                          c = l[0].trim(),
                          u = l[1].trim();
                        a[c] = u
                      }(e = i[0].trim()).split(",").forEach((function(e) {
                        "" !== (e = e.replace(/^svg/i, "").trim()) && (o[e] ? t.util.object.extend(o[e], a) : o[e] = t.util.object.clone(a))
                      }))
                    }))
                  }
                  return o
                },
                loadSVGFromURL: function(e, n, r, i) {
                  e = e.replace(/^\n\s*/, "").trim(), new t.util.request(e, {
                    method: "get",
                    onComplete: function(e) {
                      var o = e.responseXML;
                      if (!o || !o.documentElement) return n && n(null), !1;
                      t.parseSVGDocument(o.documentElement, (function(e, t, r, i) {
                        n && n(e, t, r, i)
                      }), r, i)
                    }
                  })
                },
                loadSVGFromString: function(e, n, r, i) {
                  var o = (new t.window.DOMParser).parseFromString(e.trim(), "text/xml");
                  t.parseSVGDocument(o.documentElement, (function(e, t, r, i) {
                    n(e, t, r, i)
                  }), r, i)
                }
              })
            }(e), v.ElementsParser = function(e, t, n, r, i, o) {
              this.elements = e, this.callback = t, this.options = n, this.reviver = r, this.svgUid = n && n.svgUid || 0, this.parsingOptions = i, this.regexUrl = /^url\(['"]?#([^'"]+)['"]?\)/g, this.doc = o
            }, (h = v.ElementsParser.prototype).parse = function() {
              this.instances = new Array(this.elements.length), this.numElements = this.elements.length, this.createObjects()
            }, h.createObjects = function() {
              var e = this;
              this.elements.forEach((function(t, n) {
                t.setAttribute("svgUid", e.svgUid), e.createObject(t, n)
              }))
            }, h.findTag = function(e) {
              return v[v.util.string.capitalize(e.tagName.replace("svg:", ""))]
            }, h.createObject = function(e, t) {
              var n = this.findTag(e);
              if (n && n.fromElement) try {
                n.fromElement(e, this.createCallback(t, e), this.options)
              } catch (e) {
                v.log(e)
              } else this.checkIfDone()
            }, h.createCallback = function(e, t) {
              var n = this;
              return function(r) {
                var i;
                n.resolveGradient(r, t, "fill"), n.resolveGradient(r, t, "stroke"), r instanceof v.Image && r._originalElement && (i = r.parsePreserveAspectRatioAttribute(t)), r._removeTransformMatrix(i), n.resolveClipPath(r, t), n.reviver && n
                  .reviver(t, r), n.instances[e] = r, n.checkIfDone()
              }
            }, h.extractPropertyDefinition = function(e, t, n) {
              var r = e[t],
                i = this.regexUrl;
              if (i.test(r)) {
                i.lastIndex = 0;
                var o = i.exec(r)[1];
                return i.lastIndex = 0, v[n][this.svgUid][o]
              }
            }, h.resolveGradient = function(e, t, n) {
              var r = this.extractPropertyDefinition(e, n, "gradientDefs");
              if (r) {
                var i = t.getAttribute(n + "-opacity"),
                  o = v.Gradient.fromElement(r, e, i, this.options);
                e.set(n, o)
              }
            }, h.createClipPathCallback = function(e, t) {
              return function(e) {
                e._removeTransformMatrix(), e.fillRule = e.clipRule, t.push(e)
              }
            }, h.resolveClipPath = function(e, t) {
              var n, r, i, o, a = this.extractPropertyDefinition(e, "clipPath", "clipPaths");
              if (a) {
                i = [], r = v.util.invertTransform(e.calcTransformMatrix());
                for (var s = a[0].parentNode, l = t; l.parentNode && l.getAttribute("clip-path") !== e.clipPath;) l = l.parentNode;
                l.parentNode.appendChild(s);
                for (var c = 0; c < a.length; c++) n = a[c], this.findTag(n).fromElement(n, this.createClipPathCallback(e, i), this.options);
                a = 1 === i.length ? i[0] : new v.Group(i), o = v.util.multiplyTransformMatrices(r, a.calcTransformMatrix()), a.clipPath && this.resolveClipPath(a, l);
                var u = v.util.qrDecompose(o);
                a.flipX = !1, a.flipY = !1, a.set("scaleX", u.scaleX), a.set("scaleY", u.scaleY), a.angle = u.angle, a.skewX = u.skewX, a.skewY = 0, a.setPositionByOrigin({
                  x: u.translateX,
                  y: u.translateY
                }, "center", "center"), e.clipPath = a
              } else delete e.clipPath
            }, h.checkIfDone = function() {
              0 == --this.numElements && (this.instances = this.instances.filter((function(e) {
                return null != e
              })), this.callback(this.instances, this.elements))
            },
            function(e) {
              var t = e.fabric || (e.fabric = {});

              function n(e, t) {
                this.x = e, this.y = t
              }
              t.Point ? t.warn("fabric.Point is already defined") : (t.Point = n, n.prototype = {
                type: "point",
                constructor: n,
                add: function(e) {
                  return new n(this.x + e.x, this.y + e.y)
                },
                addEquals: function(e) {
                  return this.x += e.x, this.y += e.y, this
                },
                scalarAdd: function(e) {
                  return new n(this.x + e, this.y + e)
                },
                scalarAddEquals: function(e) {
                  return this.x += e, this.y += e, this
                },
                subtract: function(e) {
                  return new n(this.x - e.x, this.y - e.y)
                },
                subtractEquals: function(e) {
                  return this.x -= e.x, this.y -= e.y, this
                },
                scalarSubtract: function(e) {
                  return new n(this.x - e, this.y - e)
                },
                scalarSubtractEquals: function(e) {
                  return this.x -= e, this.y -= e, this
                },
                multiply: function(e) {
                  return new n(this.x * e, this.y * e)
                },
                multiplyEquals: function(e) {
                  return this.x *= e, this.y *= e, this
                },
                divide: function(e) {
                  return new n(this.x / e, this.y / e)
                },
                divideEquals: function(e) {
                  return this.x /= e, this.y /= e, this
                },
                eq: function(e) {
                  return this.x === e.x && this.y === e.y
                },
                lt: function(e) {
                  return this.x < e.x && this.y < e.y
                },
                lte: function(e) {
                  return this.x <= e.x && this.y <= e.y
                },
                gt: function(e) {
                  return this.x > e.x && this.y > e.y
                },
                gte: function(e) {
                  return this.x >= e.x && this.y >= e.y
                },
                lerp: function(e, t) {
                  return void 0 === t && (t = .5), t = Math.max(Math.min(1, t), 0), new n(this.x + (e.x - this.x) * t, this.y + (e.y - this.y) * t)
                },
                distanceFrom: function(e) {
                  var t = this.x - e.x,
                    n = this.y - e.y;
                  return Math.sqrt(t * t + n * n)
                },
                midPointFrom: function(e) {
                  return this.lerp(e)
                },
                min: function(e) {
                  return new n(Math.min(this.x, e.x), Math.min(this.y, e.y))
                },
                max: function(e) {
                  return new n(Math.max(this.x, e.x), Math.max(this.y, e.y))
                },
                toString: function() {
                  return this.x + "," + this.y
                },
                setXY: function(e, t) {
                  return this.x = e, this.y = t, this
                },
                setX: function(e) {
                  return this.x = e, this
                },
                setY: function(e) {
                  return this.y = e, this
                },
                setFromPoint: function(e) {
                  return this.x = e.x, this.y = e.y, this
                },
                swap: function(e) {
                  var t = this.x,
                    n = this.y;
                  this.x = e.x, this.y = e.y, e.x = t, e.y = n
                },
                clone: function() {
                  return new n(this.x, this.y)
                }
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {});

              function n(e) {
                this.status = e, this.points = []
              }
              t.Intersection ? t.warn("fabric.Intersection is already defined") : (t.Intersection = n, t.Intersection.prototype = {
                constructor: n,
                appendPoint: function(e) {
                  return this.points.push(e), this
                },
                appendPoints: function(e) {
                  return this.points = this.points.concat(e), this
                }
              }, t.Intersection.intersectLineLine = function(e, r, i, o) {
                var a, s = (o.x - i.x) * (e.y - i.y) - (o.y - i.y) * (e.x - i.x),
                  l = (r.x - e.x) * (e.y - i.y) - (r.y - e.y) * (e.x - i.x),
                  c = (o.y - i.y) * (r.x - e.x) - (o.x - i.x) * (r.y - e.y);
                if (0 !== c) {
                  var u = s / c,
                    h = l / c;
                  0 <= u && u <= 1 && 0 <= h && h <= 1 ? (a = new n("Intersection")).appendPoint(new t.Point(e.x + u * (r.x - e.x), e.y + u * (r.y - e.y))) : a = new n
                } else a = new n(0 === s || 0 === l ? "Coincident" : "Parallel");
                return a
              }, t.Intersection.intersectLinePolygon = function(e, t, r) {
                var i, o, a, s, l = new n,
                  c = r.length;
                for (s = 0; s < c; s++) i = r[s], o = r[(s + 1) % c], a = n.intersectLineLine(e, t, i, o), l.appendPoints(a.points);
                return l.points.length > 0 && (l.status = "Intersection"), l
              }, t.Intersection.intersectPolygonPolygon = function(e, t) {
                var r, i = new n,
                  o = e.length;
                for (r = 0; r < o; r++) {
                  var a = e[r],
                    s = e[(r + 1) % o],
                    l = n.intersectLinePolygon(a, s, t);
                  i.appendPoints(l.points)
                }
                return i.points.length > 0 && (i.status = "Intersection"), i
              }, t.Intersection.intersectPolygonRectangle = function(e, r, i) {
                var o = r.min(i),
                  a = r.max(i),
                  s = new t.Point(a.x, o.y),
                  l = new t.Point(o.x, a.y),
                  c = n.intersectLinePolygon(o, s, e),
                  u = n.intersectLinePolygon(s, a, e),
                  h = n.intersectLinePolygon(a, l, e),
                  p = n.intersectLinePolygon(l, o, e),
                  d = new n;
                return d.appendPoints(c.points), d.appendPoints(u.points), d.appendPoints(h.points), d.appendPoints(p.points), d.points.length > 0 && (d.status = "Intersection"), d
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {});

              function n(e) {
                e ? this._tryParsingColor(e) : this.setSource([0, 0, 0, 1])
              }

              function r(e, t, n) {
                return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? e + 6 * (t - e) * n : n < .5 ? t : n < 2 / 3 ? e + (t - e) * (2 / 3 - n) * 6 : e
              }
              t.Color ? t.warn("fabric.Color is already defined.") : (t.Color = n, t.Color.prototype = {
                  _tryParsingColor: function(e) {
                    var t;
                    e in n.colorNameMap && (e = n.colorNameMap[e]), "transparent" === e && (t = [255, 255, 255, 0]), t || (t = n.sourceFromHex(e)), t || (t = n.sourceFromRgb(e)), t || (t = n.sourceFromHsl(e)), t || (t = [0, 0, 0, 1]), t &&
                      this.setSource(t)
                  },
                  _rgbToHsl: function(e, n, r) {
                    e /= 255, n /= 255, r /= 255;
                    var i, o, a, s = t.util.array.max([e, n, r]),
                      l = t.util.array.min([e, n, r]);
                    if (a = (s + l) / 2, s === l) i = o = 0;
                    else {
                      var c = s - l;
                      switch (o = a > .5 ? c / (2 - s - l) : c / (s + l), s) {
                        case e:
                          i = (n - r) / c + (n < r ? 6 : 0);
                          break;
                        case n:
                          i = (r - e) / c + 2;
                          break;
                        case r:
                          i = (e - n) / c + 4
                      }
                      i /= 6
                    }
                    return [Math.round(360 * i), Math.round(100 * o), Math.round(100 * a)]
                  },
                  getSource: function() {
                    return this._source
                  },
                  setSource: function(e) {
                    this._source = e
                  },
                  toRgb: function() {
                    var e = this.getSource();
                    return "rgb(" + e[0] + "," + e[1] + "," + e[2] + ")"
                  },
                  toRgba: function() {
                    var e = this.getSource();
                    return "rgba(" + e[0] + "," + e[1] + "," + e[2] + "," + e[3] + ")"
                  },
                  toHsl: function() {
                    var e = this.getSource(),
                      t = this._rgbToHsl(e[0], e[1], e[2]);
                    return "hsl(" + t[0] + "," + t[1] + "%," + t[2] + "%)"
                  },
                  toHsla: function() {
                    var e = this.getSource(),
                      t = this._rgbToHsl(e[0], e[1], e[2]);
                    return "hsla(" + t[0] + "," + t[1] + "%," + t[2] + "%," + e[3] + ")"
                  },
                  toHex: function() {
                    var e, t, n, r = this.getSource();
                    return e = 1 === (e = r[0].toString(16)).length ? "0" + e : e, t = 1 === (t = r[1].toString(16)).length ? "0" + t : t, n = 1 === (n = r[2].toString(16)).length ? "0" + n : n, e.toUpperCase() + t.toUpperCase() + n
                      .toUpperCase()
                  },
                  toHexa: function() {
                    var e, t = this.getSource();
                    return e = 1 === (e = (e = Math.round(255 * t[3])).toString(16)).length ? "0" + e : e, this.toHex() + e.toUpperCase()
                  },
                  getAlpha: function() {
                    return this.getSource()[3]
                  },
                  setAlpha: function(e) {
                    var t = this.getSource();
                    return t[3] = e, this.setSource(t), this
                  },
                  toGrayscale: function() {
                    var e = this.getSource(),
                      t = parseInt((.3 * e[0] + .59 * e[1] + .11 * e[2]).toFixed(0), 10),
                      n = e[3];
                    return this.setSource([t, t, t, n]), this
                  },
                  toBlackWhite: function(e) {
                    var t = this.getSource(),
                      n = (.3 * t[0] + .59 * t[1] + .11 * t[2]).toFixed(0),
                      r = t[3];
                    return e = e || 127, n = Number(n) < Number(e) ? 0 : 255, this.setSource([n, n, n, r]), this
                  },
                  overlayWith: function(e) {
                    e instanceof n || (e = new n(e));
                    var t, r = [],
                      i = this.getAlpha(),
                      o = this.getSource(),
                      a = e.getSource();
                    for (t = 0; t < 3; t++) r.push(Math.round(.5 * o[t] + .5 * a[t]));
                    return r[3] = i, this.setSource(r), this
                  }
                }, t.Color.reRGBa = /^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/i, t.Color.reHSLa =
                /^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i, t.Color.reHex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i, t.Color.colorNameMap = {
                  aliceblue: "#F0F8FF",
                  antiquewhite: "#FAEBD7",
                  aqua: "#00FFFF",
                  aquamarine: "#7FFFD4",
                  azure: "#F0FFFF",
                  beige: "#F5F5DC",
                  bisque: "#FFE4C4",
                  black: "#000000",
                  blanchedalmond: "#FFEBCD",
                  blue: "#0000FF",
                  blueviolet: "#8A2BE2",
                  brown: "#A52A2A",
                  burlywood: "#DEB887",
                  cadetblue: "#5F9EA0",
                  chartreuse: "#7FFF00",
                  chocolate: "#D2691E",
                  coral: "#FF7F50",
                  cornflowerblue: "#6495ED",
                  cornsilk: "#FFF8DC",
                  crimson: "#DC143C",
                  cyan: "#00FFFF",
                  darkblue: "#00008B",
                  darkcyan: "#008B8B",
                  darkgoldenrod: "#B8860B",
                  darkgray: "#A9A9A9",
                  darkgrey: "#A9A9A9",
                  darkgreen: "#006400",
                  darkkhaki: "#BDB76B",
                  darkmagenta: "#8B008B",
                  darkolivegreen: "#556B2F",
                  darkorange: "#FF8C00",
                  darkorchid: "#9932CC",
                  darkred: "#8B0000",
                  darksalmon: "#E9967A",
                  darkseagreen: "#8FBC8F",
                  darkslateblue: "#483D8B",
                  darkslategray: "#2F4F4F",
                  darkslategrey: "#2F4F4F",
                  darkturquoise: "#00CED1",
                  darkviolet: "#9400D3",
                  deeppink: "#FF1493",
                  deepskyblue: "#00BFFF",
                  dimgray: "#696969",
                  dimgrey: "#696969",
                  dodgerblue: "#1E90FF",
                  firebrick: "#B22222",
                  floralwhite: "#FFFAF0",
                  forestgreen: "#228B22",
                  fuchsia: "#FF00FF",
                  gainsboro: "#DCDCDC",
                  ghostwhite: "#F8F8FF",
                  gold: "#FFD700",
                  goldenrod: "#DAA520",
                  gray: "#808080",
                  grey: "#808080",
                  green: "#008000",
                  greenyellow: "#ADFF2F",
                  honeydew: "#F0FFF0",
                  hotpink: "#FF69B4",
                  indianred: "#CD5C5C",
                  indigo: "#4B0082",
                  ivory: "#FFFFF0",
                  khaki: "#F0E68C",
                  lavender: "#E6E6FA",
                  lavenderblush: "#FFF0F5",
                  lawngreen: "#7CFC00",
                  lemonchiffon: "#FFFACD",
                  lightblue: "#ADD8E6",
                  lightcoral: "#F08080",
                  lightcyan: "#E0FFFF",
                  lightgoldenrodyellow: "#FAFAD2",
                  lightgray: "#D3D3D3",
                  lightgrey: "#D3D3D3",
                  lightgreen: "#90EE90",
                  lightpink: "#FFB6C1",
                  lightsalmon: "#FFA07A",
                  lightseagreen: "#20B2AA",
                  lightskyblue: "#87CEFA",
                  lightslategray: "#778899",
                  lightslategrey: "#778899",
                  lightsteelblue: "#B0C4DE",
                  lightyellow: "#FFFFE0",
                  lime: "#00FF00",
                  limegreen: "#32CD32",
                  linen: "#FAF0E6",
                  magenta: "#FF00FF",
                  maroon: "#800000",
                  mediumaquamarine: "#66CDAA",
                  mediumblue: "#0000CD",
                  mediumorchid: "#BA55D3",
                  mediumpurple: "#9370DB",
                  mediumseagreen: "#3CB371",
                  mediumslateblue: "#7B68EE",
                  mediumspringgreen: "#00FA9A",
                  mediumturquoise: "#48D1CC",
                  mediumvioletred: "#C71585",
                  midnightblue: "#191970",
                  mintcream: "#F5FFFA",
                  mistyrose: "#FFE4E1",
                  moccasin: "#FFE4B5",
                  navajowhite: "#FFDEAD",
                  navy: "#000080",
                  oldlace: "#FDF5E6",
                  olive: "#808000",
                  olivedrab: "#6B8E23",
                  orange: "#FFA500",
                  orangered: "#FF4500",
                  orchid: "#DA70D6",
                  palegoldenrod: "#EEE8AA",
                  palegreen: "#98FB98",
                  paleturquoise: "#AFEEEE",
                  palevioletred: "#DB7093",
                  papayawhip: "#FFEFD5",
                  peachpuff: "#FFDAB9",
                  peru: "#CD853F",
                  pink: "#FFC0CB",
                  plum: "#DDA0DD",
                  powderblue: "#B0E0E6",
                  purple: "#800080",
                  rebeccapurple: "#663399",
                  red: "#FF0000",
                  rosybrown: "#BC8F8F",
                  royalblue: "#4169E1",
                  saddlebrown: "#8B4513",
                  salmon: "#FA8072",
                  sandybrown: "#F4A460",
                  seagreen: "#2E8B57",
                  seashell: "#FFF5EE",
                  sienna: "#A0522D",
                  silver: "#C0C0C0",
                  skyblue: "#87CEEB",
                  slateblue: "#6A5ACD",
                  slategray: "#708090",
                  slategrey: "#708090",
                  snow: "#FFFAFA",
                  springgreen: "#00FF7F",
                  steelblue: "#4682B4",
                  tan: "#D2B48C",
                  teal: "#008080",
                  thistle: "#D8BFD8",
                  tomato: "#FF6347",
                  turquoise: "#40E0D0",
                  violet: "#EE82EE",
                  wheat: "#F5DEB3",
                  white: "#FFFFFF",
                  whitesmoke: "#F5F5F5",
                  yellow: "#FFFF00",
                  yellowgreen: "#9ACD32"
                }, t.Color.fromRgb = function(e) {
                  return n.fromSource(n.sourceFromRgb(e))
                }, t.Color.sourceFromRgb = function(e) {
                  var t = e.match(n.reRGBa);
                  if (t) {
                    var r = parseInt(t[1], 10) / (/%$/.test(t[1]) ? 100 : 1) * (/%$/.test(t[1]) ? 255 : 1),
                      i = parseInt(t[2], 10) / (/%$/.test(t[2]) ? 100 : 1) * (/%$/.test(t[2]) ? 255 : 1),
                      o = parseInt(t[3], 10) / (/%$/.test(t[3]) ? 100 : 1) * (/%$/.test(t[3]) ? 255 : 1);
                    return [parseInt(r, 10), parseInt(i, 10), parseInt(o, 10), t[4] ? parseFloat(t[4]) : 1]
                  }
                }, t.Color.fromRgba = n.fromRgb, t.Color.fromHsl = function(e) {
                  return n.fromSource(n.sourceFromHsl(e))
                }, t.Color.sourceFromHsl = function(e) {
                  var t = e.match(n.reHSLa);
                  if (t) {
                    var i, o, a, s = (parseFloat(t[1]) % 360 + 360) % 360 / 360,
                      l = parseFloat(t[2]) / (/%$/.test(t[2]) ? 100 : 1),
                      c = parseFloat(t[3]) / (/%$/.test(t[3]) ? 100 : 1);
                    if (0 === l) i = o = a = c;
                    else {
                      var u = c <= .5 ? c * (l + 1) : c + l - c * l,
                        h = 2 * c - u;
                      i = r(h, u, s + 1 / 3), o = r(h, u, s), a = r(h, u, s - 1 / 3)
                    }
                    return [Math.round(255 * i), Math.round(255 * o), Math.round(255 * a), t[4] ? parseFloat(t[4]) : 1]
                  }
                }, t.Color.fromHsla = n.fromHsl, t.Color.fromHex = function(e) {
                  return n.fromSource(n.sourceFromHex(e))
                }, t.Color.sourceFromHex = function(e) {
                  if (e.match(n.reHex)) {
                    var t = e.slice(e.indexOf("#") + 1),
                      r = 3 === t.length || 4 === t.length,
                      i = 8 === t.length || 4 === t.length,
                      o = r ? t.charAt(0) + t.charAt(0) : t.substring(0, 2),
                      a = r ? t.charAt(1) + t.charAt(1) : t.substring(2, 4),
                      s = r ? t.charAt(2) + t.charAt(2) : t.substring(4, 6),
                      l = i ? r ? t.charAt(3) + t.charAt(3) : t.substring(6, 8) : "FF";
                    return [parseInt(o, 16), parseInt(a, 16), parseInt(s, 16), parseFloat((parseInt(l, 16) / 255).toFixed(2))]
                  }
                }, t.Color.fromSource = function(e) {
                  var t = new n;
                  return t.setSource(e), t
                })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = ["e", "se", "s", "sw", "w", "nw", "n", "ne", "e"],
                r = ["ns", "nesw", "ew", "nwse"],
                i = {},
                o = "left",
                a = "top",
                s = "right",
                l = "bottom",
                c = "center",
                u = {
                  top: l,
                  bottom: a,
                  left: s,
                  right: o,
                  center: c
                },
                h = t.util.radiansToDegrees,
                p = Math.sign || function(e) {
                  return (e > 0) - (e < 0) || +e
                };

              function d(e, t) {
                var n = e.angle + h(Math.atan2(t.y, t.x)) + 360;
                return Math.round(n % 360 / 45)
              }

              function f(e, n) {
                var r = n.transform.target,
                  i = r.canvas,
                  o = t.util.object.clone(n);
                o.target = r, i && i.fire("object:" + e, o), r.fire(e, n)
              }

              function g(e, t) {
                var n = t.canvas,
                  r = e[n.uniScaleKey];
                return n.uniformScaling && !r || !n.uniformScaling && r
              }

              function m(e) {
                return e.originX === c && e.originY === c
              }

              function v(e, t, n) {
                var r = e.lockScalingX,
                  i = e.lockScalingY;
                return !(!r || !i) || (!(t || !r && !i || !n) || (!(!r || "x" !== t) || !(!i || "y" !== t)))
              }

              function _(e, t, n, r) {
                return {
                  e: e,
                  transform: t,
                  pointer: {
                    x: n,
                    y: r
                  }
                }
              }

              function b(e) {
                return function(t, n, r, i) {
                  var o = n.target,
                    a = o.getCenterPoint(),
                    s = o.translateToOriginPoint(a, n.originX, n.originY),
                    l = e(t, n, r, i);
                  return o.setPositionByOrigin(s, n.originX, n.originY), l
                }
              }

              function y(e, t) {
                return function(n, r, i, o) {
                  var a = t(n, r, i, o);
                  return a && f(e, _(n, r, i, o)), a
                }
              }

              function w(e, n, r, i, o) {
                var a = e.target,
                  s = a.controls[e.corner],
                  l = a.canvas.getZoom(),
                  c = a.padding / l,
                  u = a.toLocalPoint(new t.Point(i, o), n, r);
                return u.x >= c && (u.x -= c), u.x <= -c && (u.x += c), u.y >= c && (u.y -= c), u.y <= c && (u.y += c), u.x -= s.offsetX, u.y -= s.offsetY, u
              }

              function x(e) {
                return e.flipX !== e.flipY
              }

              function k(e, t, n, r, i) {
                if (0 !== e[t]) {
                  var o = i / e._getTransformedDimensions()[r] * e[n];
                  e.set(n, o)
                }
              }

              function C(e, t, n, r) {
                var i, c = t.target,
                  u = c._getTransformedDimensions(0, c.skewY),
                  p = w(t, t.originX, t.originY, n, r),
                  d = Math.abs(2 * p.x) - u.x,
                  f = c.skewX;
                d < 2 ? i = 0 : (i = h(Math.atan2(d / c.scaleX, u.y / c.scaleY)), t.originX === o && t.originY === l && (i = -i), t.originX === s && t.originY === a && (i = -i), x(c) && (i = -i));
                var g = f !== i;
                if (g) {
                  var m = c._getTransformedDimensions().y;
                  c.set("skewX", i), k(c, "skewY", "scaleY", "y", m)
                }
                return g
              }

              function S(e, t, n, r) {
                var i, c = t.target,
                  u = c._getTransformedDimensions(c.skewX, 0),
                  p = w(t, t.originX, t.originY, n, r),
                  d = Math.abs(2 * p.y) - u.y,
                  f = c.skewY;
                d < 2 ? i = 0 : (i = h(Math.atan2(d / c.scaleY, u.x / c.scaleX)), t.originX === o && t.originY === l && (i = -i), t.originX === s && t.originY === a && (i = -i), x(c) && (i = -i));
                var g = f !== i;
                if (g) {
                  var m = c._getTransformedDimensions().x;
                  c.set("skewY", i), k(c, "skewX", "scaleX", "x", m)
                }
                return g
              }

              function E(e, t, n, r, i) {
                i = i || {};
                var o, a, s, l, c, h, d = t.target,
                  f = d.lockScalingX,
                  _ = d.lockScalingY,
                  b = i.by,
                  y = g(e, d),
                  x = v(d, b, y),
                  k = t.gestureScale;
                if (x) return !1;
                if (k) a = t.scaleX * k, s = t.scaleY * k;
                else {
                  if (o = w(t, t.originX, t.originY, n, r), c = "y" !== b ? p(o.x) : 1, h = "x" !== b ? p(o.y) : 1, t.signX || (t.signX = c), t.signY || (t.signY = h), d.lockScalingFlip && (t.signX !== c || t.signY !== h)) return !1;
                  if (l = d._getTransformedDimensions(), y && !b) {
                    var C = Math.abs(o.x) + Math.abs(o.y),
                      S = t.original,
                      E = C / (Math.abs(l.x * S.scaleX / d.scaleX) + Math.abs(l.y * S.scaleY / d.scaleY));
                    a = S.scaleX * E, s = S.scaleY * E
                  } else a = Math.abs(o.x * d.scaleX / l.x), s = Math.abs(o.y * d.scaleY / l.y);
                  m(t) && (a *= 2, s *= 2), t.signX !== c && "y" !== b && (t.originX = u[t.originX], a *= -1, t.signX = c), t.signY !== h && "x" !== b && (t.originY = u[t.originY], s *= -1, t.signY = h)
                }
                var T = d.scaleX,
                  O = d.scaleY;
                return b ? ("x" === b && d.set("scaleX", a), "y" === b && d.set("scaleY", s)) : (!f && d.set("scaleX", a), !_ && d.set("scaleY", s)), T !== d.scaleX || O !== d.scaleY
              }
              i.scaleCursorStyleHandler = function(e, t, r) {
                var i = g(e, r),
                  o = "";
                if (0 !== t.x && 0 === t.y ? o = "x" : 0 === t.x && 0 !== t.y && (o = "y"), v(r, o, i)) return "not-allowed";
                var a = d(r, t);
                return n[a] + "-resize"
              }, i.skewCursorStyleHandler = function(e, t, n) {
                var i = "not-allowed";
                if (0 !== t.x && n.lockSkewingY) return i;
                if (0 !== t.y && n.lockSkewingX) return i;
                var o = d(n, t) % 4;
                return r[o] + "-resize"
              }, i.scaleSkewCursorStyleHandler = function(e, t, n) {
                return e[n.canvas.altActionKey] ? i.skewCursorStyleHandler(e, t, n) : i.scaleCursorStyleHandler(e, t, n)
              }, i.rotationWithSnapping = y("rotating", b((function(e, t, n, r) {
                var i = t,
                  o = i.target,
                  a = o.translateToOriginPoint(o.getCenterPoint(), i.originX, i.originY);
                if (o.lockRotation) return !1;
                var s, l = Math.atan2(i.ey - a.y, i.ex - a.x),
                  c = Math.atan2(r - a.y, n - a.x),
                  u = h(c - l + i.theta);
                if (o.snapAngle > 0) {
                  var p = o.snapAngle,
                    d = o.snapThreshold || p,
                    f = Math.ceil(u / p) * p,
                    g = Math.floor(u / p) * p;
                  Math.abs(u - g) < d ? u = g : Math.abs(u - f) < d && (u = f)
                }
                return u < 0 && (u = 360 + u), u %= 360, s = o.angle !== u, o.angle = u, s
              }))), i.scalingEqually = y("scaling", b((function(e, t, n, r) {
                return E(e, t, n, r)
              }))), i.scalingX = y("scaling", b((function(e, t, n, r) {
                return E(e, t, n, r, {
                  by: "x"
                })
              }))), i.scalingY = y("scaling", b((function(e, t, n, r) {
                return E(e, t, n, r, {
                  by: "y"
                })
              }))), i.scalingYOrSkewingX = function(e, t, n, r) {
                return e[t.target.canvas.altActionKey] ? i.skewHandlerX(e, t, n, r) : i.scalingY(e, t, n, r)
              }, i.scalingXOrSkewingY = function(e, t, n, r) {
                return e[t.target.canvas.altActionKey] ? i.skewHandlerY(e, t, n, r) : i.scalingX(e, t, n, r)
              }, i.changeWidth = y("resizing", b((function(e, t, n, r) {
                var i = t.target,
                  o = w(t, t.originX, t.originY, n, r),
                  a = i.strokeWidth / (i.strokeUniform ? i.scaleX : 1),
                  s = m(t) ? 2 : 1,
                  l = i.width,
                  c = Math.abs(o.x * s / i.scaleX) - a;
                return i.set("width", Math.max(c, 0)), l !== c
              }))), i.skewHandlerX = function(e, t, n, r) {
                var i, l = t.target,
                  u = l.skewX,
                  h = t.originY;
                return !l.lockSkewingX && (0 === u ? i = w(t, c, c, n, r).x > 0 ? o : s : (u > 0 && (i = h === a ? o : s), u < 0 && (i = h === a ? s : o), x(l) && (i = i === o ? s : o)), t.originX = i, y("skewing", b(C))(e, t, n, r))
              }, i.skewHandlerY = function(e, t, n, r) {
                var i, s = t.target,
                  u = s.skewY,
                  h = t.originX;
                return !s.lockSkewingY && (0 === u ? i = w(t, c, c, n, r).y > 0 ? a : l : (u > 0 && (i = h === o ? a : l), u < 0 && (i = h === o ? l : a), x(s) && (i = i === a ? l : a)), t.originY = i, y("skewing", b(S))(e, t, n, r))
              }, i.dragHandler = function(e, t, n, r) {
                var i = t.target,
                  o = n - t.offsetX,
                  a = r - t.offsetY,
                  s = !i.get("lockMovementX") && i.left !== o,
                  l = !i.get("lockMovementY") && i.top !== a;
                return s && i.set("left", o), l && i.set("top", a), (s || l) && f("moving", _(e, t, n, r)), s || l
              }, i.scaleOrSkewActionName = function(e, t, n) {
                var r = e[n.canvas.altActionKey];
                return 0 === t.x ? r ? "skewX" : "scaleY" : 0 === t.y ? r ? "skewY" : "scaleX" : void 0
              }, i.rotationStyleHandler = function(e, t, n) {
                return n.lockRotation ? "not-allowed" : t.cursorStyle
              }, i.fireEvent = f, i.wrapWithFixedAnchor = b, i.wrapWithFireEvent = y, i.getLocalPoint = w, t.controlsUtils = i
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.degreesToRadians,
                r = t.controlsUtils;
              r.renderCircleControl = function(e, t, n, r, i) {
                r = r || {};
                var o, a = this.sizeX || r.cornerSize || i.cornerSize,
                  s = this.sizeY || r.cornerSize || i.cornerSize,
                  l = void 0 !== r.transparentCorners ? r.transparentCorners : i.transparentCorners,
                  c = l ? "stroke" : "fill",
                  u = !l && (r.cornerStrokeColor || i.cornerStrokeColor),
                  h = t,
                  p = n;
                e.save(), e.fillStyle = r.cornerColor || i.cornerColor, e.strokeStyle = r.cornerStrokeColor || i.cornerStrokeColor, a > s ? (o = a, e.scale(1, s / a), p = n * a / s) : s > a ? (o = s, e.scale(a / s, 1), h = t * s / a) : o = a, e
                  .lineWidth = 1, e.beginPath(), e.arc(h, p, o / 2, 0, 2 * Math.PI, !1), e[c](), u && e.stroke(), e.restore()
              }, r.renderSquareControl = function(e, t, r, i, o) {
                i = i || {};
                var a = this.sizeX || i.cornerSize || o.cornerSize,
                  s = this.sizeY || i.cornerSize || o.cornerSize,
                  l = void 0 !== i.transparentCorners ? i.transparentCorners : o.transparentCorners,
                  c = l ? "stroke" : "fill",
                  u = !l && (i.cornerStrokeColor || o.cornerStrokeColor),
                  h = a / 2,
                  p = s / 2;
                e.save(), e.fillStyle = i.cornerColor || o.cornerColor, e.strokeStyle = i.cornerStrokeColor || o.cornerStrokeColor, e.lineWidth = 1, e.translate(t, r), e.rotate(n(o.angle)), e[c + "Rect"](-h, -p, a, s), u && e.strokeRect(-h, -p,
                  a, s), e.restore()
              }
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {});
              t.Control = function(e) {
                for (var t in e) this[t] = e[t]
              }, t.Control.prototype = {
                visible: !0,
                actionName: "scale",
                angle: 0,
                x: 0,
                y: 0,
                offsetX: 0,
                offsetY: 0,
                sizeX: null,
                sizeY: null,
                touchSizeX: null,
                touchSizeY: null,
                cursorStyle: "crosshair",
                withConnection: !1,
                actionHandler: function() {},
                mouseDownHandler: function() {},
                mouseUpHandler: function() {},
                getActionHandler: function() {
                  return this.actionHandler
                },
                getMouseDownHandler: function() {
                  return this.mouseDownHandler
                },
                getMouseUpHandler: function() {
                  return this.mouseUpHandler
                },
                cursorStyleHandler: function(e, t) {
                  return t.cursorStyle
                },
                getActionName: function(e, t) {
                  return t.actionName
                },
                getVisibility: function(e, t) {
                  var n = e._controlsVisibility;
                  return n && void 0 !== n[t] ? n[t] : this.visible
                },
                setVisibility: function(e) {
                  this.visible = e
                },
                positionHandler: function(e, n) {
                  return t.util.transformPoint({
                    x: this.x * e.x + this.offsetX,
                    y: this.y * e.y + this.offsetY
                  }, n)
                },
                calcCornerCoords: function(e, n, r, i, o) {
                  var a, s, l, c, u = o ? this.touchSizeX : this.sizeX,
                    h = o ? this.touchSizeY : this.sizeY;
                  if (u && h && u !== h) {
                    var p = Math.atan2(h, u),
                      d = Math.sqrt(u * u + h * h) / 2,
                      f = p - t.util.degreesToRadians(e),
                      g = Math.PI / 2 - p - t.util.degreesToRadians(e);
                    a = d * t.util.cos(f), s = d * t.util.sin(f), l = d * t.util.cos(g), c = d * t.util.sin(g)
                  } else {
                    d = .7071067812 * (u && h ? u : n);
                    f = t.util.degreesToRadians(45 - e);
                    a = l = d * t.util.cos(f), s = c = d * t.util.sin(f)
                  }
                  return {
                    tl: {
                      x: r - c,
                      y: i - l
                    },
                    tr: {
                      x: r + a,
                      y: i - s
                    },
                    bl: {
                      x: r - a,
                      y: i + s
                    },
                    br: {
                      x: r + c,
                      y: i + l
                    }
                  }
                },
                render: function(e, n, r, i, o) {
                  if ("circle" === ((i = i || {}).cornerStyle || o.cornerStyle)) t.controlsUtils.renderCircleControl.call(this, e, n, r, i, o);
                  else t.controlsUtils.renderSquareControl.call(this, e, n, r, i, o)
                }
              }
            }(e),
            function() {
              function e(e, t) {
                var n, r, i, o, a = e.getAttribute("style"),
                  s = e.getAttribute("offset") || 0;
                if (s = (s = parseFloat(s) / (/%$/.test(s) ? 100 : 1)) < 0 ? 0 : s > 1 ? 1 : s, a) {
                  var l = a.split(/\s*;\s*/);
                  for ("" === l[l.length - 1] && l.pop(), o = l.length; o--;) {
                    var c = l[o].split(/\s*:\s*/),
                      u = c[0].trim(),
                      h = c[1].trim();
                    "stop-color" === u ? n = h : "stop-opacity" === u && (i = h)
                  }
                }
                return n || (n = e.getAttribute("stop-color") || "rgb(0,0,0)"), i || (i = e.getAttribute("stop-opacity")), r = (n = new v.Color(n)).getAlpha(), i = isNaN(parseFloat(i)) ? 1 : parseFloat(i), i *= r * t, {
                  offset: s,
                  color: n.toRgb(),
                  opacity: i
                }
              }
              var t = v.util.object.clone;
              v.Gradient = v.util.createClass({
                offsetX: 0,
                offsetY: 0,
                gradientTransform: null,
                gradientUnits: "pixels",
                type: "linear",
                initialize: function(e) {
                  e || (e = {}), e.coords || (e.coords = {});
                  var t, n = this;
                  Object.keys(e).forEach((function(t) {
                    n[t] = e[t]
                  })), this.id ? this.id += "_" + v.Object.__uid++ : this.id = v.Object.__uid++, t = {
                    x1: e.coords.x1 || 0,
                    y1: e.coords.y1 || 0,
                    x2: e.coords.x2 || 0,
                    y2: e.coords.y2 || 0
                  }, "radial" === this.type && (t.r1 = e.coords.r1 || 0, t.r2 = e.coords.r2 || 0), this.coords = t, this.colorStops = e.colorStops.slice()
                },
                addColorStop: function(e) {
                  for (var t in e) {
                    var n = new v.Color(e[t]);
                    this.colorStops.push({
                      offset: parseFloat(t),
                      color: n.toRgb(),
                      opacity: n.getAlpha()
                    })
                  }
                  return this
                },
                toObject: function(e) {
                  var t = {
                    type: this.type,
                    coords: this.coords,
                    colorStops: this.colorStops,
                    offsetX: this.offsetX,
                    offsetY: this.offsetY,
                    gradientUnits: this.gradientUnits,
                    gradientTransform: this.gradientTransform ? this.gradientTransform.concat() : this.gradientTransform
                  };
                  return v.util.populateWithProperties(this, t, e), t
                },
                toSVG: function(e, n) {
                  var r, i, o, a, s = t(this.coords, !0),
                    l = (n = n || {}, t(this.colorStops, !0)),
                    c = s.r1 > s.r2,
                    u = this.gradientTransform ? this.gradientTransform.concat() : v.iMatrix.concat(),
                    h = -this.offsetX,
                    p = -this.offsetY,
                    d = !!n.additionalTransform,
                    f = "pixels" === this.gradientUnits ? "userSpaceOnUse" : "objectBoundingBox";
                  if (l.sort((function(e, t) {
                      return e.offset - t.offset
                    })), "objectBoundingBox" === f ? (h /= e.width, p /= e.height) : (h += e.width / 2, p += e.height / 2), "path" === e.type && "percentage" !== this.gradientUnits && (h -= e.pathOffset.x, p -= e.pathOffset.y), u[4] -= h,
                    u[5] -= p, a = 'id="SVGID_' + this.id + '" gradientUnits="' + f + '"', a += ' gradientTransform="' + (d ? n.additionalTransform + " " : "") + v.util.matrixToSVG(u) + '" ', "linear" === this.type ? o = [
                      "<linearGradient ", a, ' x1="', s.x1, '" y1="', s.y1, '" x2="', s.x2, '" y2="', s.y2, '">\n'
                    ] : "radial" === this.type && (o = ["<radialGradient ", a, ' cx="', c ? s.x1 : s.x2, '" cy="', c ? s.y1 : s.y2, '" r="', c ? s.r1 : s.r2, '" fx="', c ? s.x2 : s.x1, '" fy="', c ? s.y2 : s.y1, '">\n']), "radial" === this
                    .type) {
                    if (c)
                      for ((l = l.concat()).reverse(), r = 0, i = l.length; r < i; r++) l[r].offset = 1 - l[r].offset;
                    var g = Math.min(s.r1, s.r2);
                    if (g > 0) {
                      var m = g / Math.max(s.r1, s.r2);
                      for (r = 0, i = l.length; r < i; r++) l[r].offset += m * (1 - l[r].offset)
                    }
                  }
                  for (r = 0, i = l.length; r < i; r++) {
                    var _ = l[r];
                    o.push("<stop ", 'offset="', 100 * _.offset + "%", '" style="stop-color:', _.color, void 0 !== _.opacity ? ";stop-opacity: " + _.opacity : ";", '"/>\n')
                  }
                  return o.push("linear" === this.type ? "</linearGradient>\n" : "</radialGradient>\n"), o.join("")
                },
                toLive: function(e) {
                  var t, n, r, i = v.util.object.clone(this.coords);
                  if (this.type) {
                    for ("linear" === this.type ? t = e.createLinearGradient(i.x1, i.y1, i.x2, i.y2) : "radial" === this.type && (t = e.createRadialGradient(i.x1, i.y1, i.r1, i.x2, i.y2, i.r2)), n = 0, r = this.colorStops.length; n <
                      r; n++) {
                      var o = this.colorStops[n].color,
                        a = this.colorStops[n].opacity,
                        s = this.colorStops[n].offset;
                      void 0 !== a && (o = new v.Color(o).setAlpha(a).toRgba()), t.addColorStop(s, o)
                    }
                    return t
                  }
                }
              }), v.util.object.extend(v.Gradient, {
                fromElement: function(t, n, r, i) {
                  var o = parseFloat(r) / (/%$/.test(r) ? 100 : 1);
                  o = o < 0 ? 0 : o > 1 ? 1 : o, isNaN(o) && (o = 1);
                  var a, s, l, c, u = t.getElementsByTagName("stop"),
                    h = "userSpaceOnUse" === t.getAttribute("gradientUnits") ? "pixels" : "percentage",
                    p = t.getAttribute("gradientTransform") || "",
                    d = [],
                    f = 0,
                    g = 0;
                  for ("linearGradient" === t.nodeName || "LINEARGRADIENT" === t.nodeName ? (a = "linear", s = function(e) {
                      return {
                        x1: e.getAttribute("x1") || 0,
                        y1: e.getAttribute("y1") || 0,
                        x2: e.getAttribute("x2") || "100%",
                        y2: e.getAttribute("y2") || 0
                      }
                    }(t)) : (a = "radial", s = function(e) {
                      return {
                        x1: e.getAttribute("fx") || e.getAttribute("cx") || "50%",
                        y1: e.getAttribute("fy") || e.getAttribute("cy") || "50%",
                        r1: 0,
                        x2: e.getAttribute("cx") || "50%",
                        y2: e.getAttribute("cy") || "50%",
                        r2: e.getAttribute("r") || "50%"
                      }
                    }(t)), l = u.length; l--;) d.push(e(u[l], o));
                  return c = v.parseTransformAttribute(p),
                    function(e, t, n, r) {
                      var i, o;
                      Object.keys(t).forEach((function(e) {
                        "Infinity" === (i = t[e]) ? o = 1: "-Infinity" === i ? o = 0 : (o = parseFloat(t[e], 10), "string" == typeof i && /^(\d+\.\d+)%|(\d+)%$/.test(i) && (o *= .01, "pixels" === r && ("x1" !== e && "x2" !== e &&
                          "r2" !== e || (o *= n.viewBoxWidth || n.width), "y1" !== e && "y2" !== e || (o *= n.viewBoxHeight || n.height)))), t[e] = o
                      }))
                    }(0, s, i, h), "pixels" === h && (f = -n.left, g = -n.top), new v.Gradient({
                      id: t.getAttribute("id"),
                      type: a,
                      coords: s,
                      colorStops: d,
                      gradientUnits: h,
                      gradientTransform: c,
                      offsetX: f,
                      offsetY: g
                    })
                }
              })
            }(), p = v.util.toFixed, v.Pattern = v.util.createClass({
              repeat: "repeat",
              offsetX: 0,
              offsetY: 0,
              crossOrigin: "",
              patternTransform: null,
              initialize: function(e, t) {
                if (e || (e = {}), this.id = v.Object.__uid++, this.setOptions(e), !e.source || e.source && "string" != typeof e.source) t && t(this);
                else {
                  var n = this;
                  this.source = v.util.createImage(), v.util.loadImage(e.source, (function(e, r) {
                    n.source = e, t && t(n, r)
                  }), null, this.crossOrigin)
                }
              },
              toObject: function(e) {
                var t, n, r = v.Object.NUM_FRACTION_DIGITS;
                return "string" == typeof this.source.src ? t = this.source.src : "object" == typeof this.source && this.source.toDataURL && (t = this.source.toDataURL()), n = {
                  type: "pattern",
                  source: t,
                  repeat: this.repeat,
                  crossOrigin: this.crossOrigin,
                  offsetX: p(this.offsetX, r),
                  offsetY: p(this.offsetY, r),
                  patternTransform: this.patternTransform ? this.patternTransform.concat() : null
                }, v.util.populateWithProperties(this, n, e), n
              },
              toSVG: function(e) {
                var t = "function" == typeof this.source ? this.source() : this.source,
                  n = t.width / e.width,
                  r = t.height / e.height,
                  i = this.offsetX / e.width,
                  o = this.offsetY / e.height,
                  a = "";
                return "repeat-x" !== this.repeat && "no-repeat" !== this.repeat || (r = 1, o && (r += Math.abs(o))), "repeat-y" !== this.repeat && "no-repeat" !== this.repeat || (n = 1, i && (n += Math.abs(i))), t.src ? a = t.src : t
                  .toDataURL && (a = t.toDataURL()), '<pattern id="SVGID_' + this.id + '" x="' + i + '" y="' + o + '" width="' + n + '" height="' + r + '">\n<image x="0" y="0" width="' + t.width + '" height="' + t.height + '" xlink:href="' +
                  a + '"></image>\n</pattern>\n'
              },
              setOptions: function(e) {
                for (var t in e) this[t] = e[t]
              },
              toLive: function(e) {
                var t = this.source;
                if (!t) return "";
                if (void 0 !== t.src) {
                  if (!t.complete) return "";
                  if (0 === t.naturalWidth || 0 === t.naturalHeight) return ""
                }
                return e.createPattern(t, this.repeat)
              }
            }),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.toFixed;
              t.Shadow ? t.warn("fabric.Shadow is already defined.") : (t.Shadow = t.util.createClass({
                color: "rgb(0,0,0)",
                blur: 0,
                offsetX: 0,
                offsetY: 0,
                affectStroke: !1,
                includeDefaultValues: !0,
                nonScaling: !1,
                initialize: function(e) {
                  for (var n in "string" == typeof e && (e = this._parseShadow(e)), e) this[n] = e[n];
                  this.id = t.Object.__uid++
                },
                _parseShadow: function(e) {
                  var n = e.trim(),
                    r = t.Shadow.reOffsetsAndBlur.exec(n) || [];
                  return {
                    color: (n.replace(t.Shadow.reOffsetsAndBlur, "") || "rgb(0,0,0)").trim(),
                    offsetX: parseFloat(r[1], 10) || 0,
                    offsetY: parseFloat(r[2], 10) || 0,
                    blur: parseFloat(r[3], 10) || 0
                  }
                },
                toString: function() {
                  return [this.offsetX, this.offsetY, this.blur, this.color].join("px ")
                },
                toSVG: function(e) {
                  var r = 40,
                    i = 40,
                    o = t.Object.NUM_FRACTION_DIGITS,
                    a = t.util.rotateVector({
                      x: this.offsetX,
                      y: this.offsetY
                    }, t.util.degreesToRadians(-e.angle)),
                    s = new t.Color(this.color);
                  return e.width && e.height && (r = 100 * n((Math.abs(a.x) + this.blur) / e.width, o) + 20, i = 100 * n((Math.abs(a.y) + this.blur) / e.height, o) + 20), e.flipX && (a.x *= -1), e.flipY && (a.y *= -1),
                    '<filter id="SVGID_' + this.id + '" y="-' + i + '%" height="' + (100 + 2 * i) + '%" x="-' + r + '%" width="' + (100 + 2 * r) + '%" >\n\t<feGaussianBlur in="SourceAlpha" stdDeviation="' + n(this.blur ? this.blur / 2 :
                      0, o) + '"></feGaussianBlur>\n\t<feOffset dx="' + n(a.x, o) + '" dy="' + n(a.y, o) + '" result="oBlur" ></feOffset>\n\t<feFlood flood-color="' + s.toRgb() + '" flood-opacity="' + s.getAlpha() +
                    '"/>\n\t<feComposite in2="oBlur" operator="in" />\n\t<feMerge>\n\t\t<feMergeNode></feMergeNode>\n\t\t<feMergeNode in="SourceGraphic"></feMergeNode>\n\t</feMerge>\n</filter>\n'
                },
                toObject: function() {
                  if (this.includeDefaultValues) return {
                    color: this.color,
                    blur: this.blur,
                    offsetX: this.offsetX,
                    offsetY: this.offsetY,
                    affectStroke: this.affectStroke,
                    nonScaling: this.nonScaling
                  };
                  var e = {},
                    n = t.Shadow.prototype;
                  return ["color", "blur", "offsetX", "offsetY", "affectStroke", "nonScaling"].forEach((function(t) {
                    this[t] !== n[t] && (e[t] = this[t])
                  }), this), e
                }
              }), t.Shadow.reOffsetsAndBlur = /(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/)
            }(e),
            function() {
              if (v.StaticCanvas) v.warn("fabric.StaticCanvas is already defined.");
              else {
                var e = v.util.object.extend,
                  t = v.util.getElementOffset,
                  n = v.util.removeFromArray,
                  r = v.util.toFixed,
                  i = v.util.transformPoint,
                  o = v.util.invertTransform,
                  a = v.util.getNodeCanvas,
                  s = v.util.createCanvasElement,
                  l = new Error("Could not initialize `canvas` element");
                v.StaticCanvas = v.util.createClass(v.CommonMethods, {
                  initialize: function(e, t) {
                    t || (t = {}), this.renderAndResetBound = this.renderAndReset.bind(this), this.requestRenderAllBound = this.requestRenderAll.bind(this), this._initStatic(e, t)
                  },
                  backgroundColor: "",
                  backgroundImage: null,
                  overlayColor: "",
                  overlayImage: null,
                  includeDefaultValues: !0,
                  stateful: !1,
                  renderOnAddRemove: !0,
                  controlsAboveOverlay: !1,
                  allowTouchScrolling: !1,
                  imageSmoothingEnabled: !0,
                  viewportTransform: v.iMatrix.concat(),
                  backgroundVpt: !0,
                  overlayVpt: !0,
                  enableRetinaScaling: !0,
                  vptCoords: {},
                  skipOffscreen: !0,
                  clipPath: void 0,
                  _initStatic: function(e, t) {
                    var n = this.requestRenderAllBound;
                    this._objects = [], this._createLowerCanvas(e), this._initOptions(t), this.interactive || this._initRetinaScaling(), t.overlayImage && this.setOverlayImage(t.overlayImage, n), t.backgroundImage && this
                      .setBackgroundImage(t.backgroundImage, n), t.backgroundColor && this.setBackgroundColor(t.backgroundColor, n), t.overlayColor && this.setOverlayColor(t.overlayColor, n), this.calcOffset()
                  },
                  _isRetinaScaling: function() {
                    return v.devicePixelRatio > 1 && this.enableRetinaScaling
                  },
                  getRetinaScaling: function() {
                    return this._isRetinaScaling() ? Math.max(1, v.devicePixelRatio) : 1
                  },
                  _initRetinaScaling: function() {
                    if (this._isRetinaScaling()) {
                      var e = v.devicePixelRatio;
                      this.__initRetinaScaling(e, this.lowerCanvasEl, this.contextContainer), this.upperCanvasEl && this.__initRetinaScaling(e, this.upperCanvasEl, this.contextTop)
                    }
                  },
                  __initRetinaScaling: function(e, t, n) {
                    t.setAttribute("width", this.width * e), t.setAttribute("height", this.height * e), n.scale(e, e)
                  },
                  calcOffset: function() {
                    return this._offset = t(this.lowerCanvasEl), this
                  },
                  setOverlayImage: function(e, t, n) {
                    return this.__setBgOverlayImage("overlayImage", e, t, n)
                  },
                  setBackgroundImage: function(e, t, n) {
                    return this.__setBgOverlayImage("backgroundImage", e, t, n)
                  },
                  setOverlayColor: function(e, t) {
                    return this.__setBgOverlayColor("overlayColor", e, t)
                  },
                  setBackgroundColor: function(e, t) {
                    return this.__setBgOverlayColor("backgroundColor", e, t)
                  },
                  __setBgOverlayImage: function(e, t, n, r) {
                    return "string" == typeof t ? v.util.loadImage(t, (function(t, i) {
                      if (t) {
                        var o = new v.Image(t, r);
                        this[e] = o, o.canvas = this
                      }
                      n && n(t, i)
                    }), this, r && r.crossOrigin) : (r && t.setOptions(r), this[e] = t, t && (t.canvas = this), n && n(t, !1)), this
                  },
                  __setBgOverlayColor: function(e, t, n) {
                    return this[e] = t, this._initGradient(t, e), this._initPattern(t, e, n), this
                  },
                  _createCanvasElement: function() {
                    var e = s();
                    if (!e) throw l;
                    if (e.style || (e.style = {}), void 0 === e.getContext) throw l;
                    return e
                  },
                  _initOptions: function(e) {
                    var t = this.lowerCanvasEl;
                    this._setOptions(e), this.width = this.width || parseInt(t.width, 10) || 0, this.height = this.height || parseInt(t.height, 10) || 0, this.lowerCanvasEl.style && (t.width = this.width, t.height = this.height, t.style
                      .width = this.width + "px", t.style.height = this.height + "px", this.viewportTransform = this.viewportTransform.slice())
                  },
                  _createLowerCanvas: function(e) {
                    e && e.getContext ? this.lowerCanvasEl = e : this.lowerCanvasEl = v.util.getById(e) || this._createCanvasElement(), v.util.addClass(this.lowerCanvasEl, "lower-canvas"), this._originalCanvasStyle = this.lowerCanvasEl
                      .style, this.interactive && this._applyCanvasStyle(this.lowerCanvasEl), this.contextContainer = this.lowerCanvasEl.getContext("2d")
                  },
                  getWidth: function() {
                    return this.width
                  },
                  getHeight: function() {
                    return this.height
                  },
                  setWidth: function(e, t) {
                    return this.setDimensions({
                      width: e
                    }, t)
                  },
                  setHeight: function(e, t) {
                    return this.setDimensions({
                      height: e
                    }, t)
                  },
                  setDimensions: function(e, t) {
                    var n;
                    for (var r in t = t || {}, e) n = e[r], t.cssOnly || (this._setBackstoreDimension(r, e[r]), n += "px", this.hasLostContext = !0), t.backstoreOnly || this._setCssDimension(r, n);
                    return this._isCurrentlyDrawing && this.freeDrawingBrush && this.freeDrawingBrush._setBrushStyles(this.contextTop), this._initRetinaScaling(), this.calcOffset(), t.cssOnly || this.requestRenderAll(), this
                  },
                  _setBackstoreDimension: function(e, t) {
                    return this.lowerCanvasEl[e] = t, this.upperCanvasEl && (this.upperCanvasEl[e] = t), this.cacheCanvasEl && (this.cacheCanvasEl[e] = t), this[e] = t, this
                  },
                  _setCssDimension: function(e, t) {
                    return this.lowerCanvasEl.style[e] = t, this.upperCanvasEl && (this.upperCanvasEl.style[e] = t), this.wrapperEl && (this.wrapperEl.style[e] = t), this
                  },
                  getZoom: function() {
                    return this.viewportTransform[0]
                  },
                  setViewportTransform: function(e) {
                    var t, n, r, i = this._activeObject,
                      o = this.backgroundImage,
                      a = this.overlayImage;
                    for (this.viewportTransform = e, n = 0, r = this._objects.length; n < r; n++)(t = this._objects[n]).group || t.setCoords(!0);
                    return i && i.setCoords(), o && o.setCoords(!0), a && a.setCoords(!0), this.calcViewportBoundaries(), this.renderOnAddRemove && this.requestRenderAll(), this
                  },
                  zoomToPoint: function(e, t) {
                    var n = e,
                      r = this.viewportTransform.slice(0);
                    e = i(e, o(this.viewportTransform)), r[0] = t, r[3] = t;
                    var a = i(e, r);
                    return r[4] += n.x - a.x, r[5] += n.y - a.y, this.setViewportTransform(r)
                  },
                  setZoom: function(e) {
                    return this.zoomToPoint(new v.Point(0, 0), e), this
                  },
                  absolutePan: function(e) {
                    var t = this.viewportTransform.slice(0);
                    return t[4] = -e.x, t[5] = -e.y, this.setViewportTransform(t)
                  },
                  relativePan: function(e) {
                    return this.absolutePan(new v.Point(-e.x - this.viewportTransform[4], -e.y - this.viewportTransform[5]))
                  },
                  getElement: function() {
                    return this.lowerCanvasEl
                  },
                  _onObjectAdded: function(e) {
                    this.stateful && e.setupState(), e._set("canvas", this), e.setCoords(), this.fire("object:added", {
                      target: e
                    }), e.fire("added")
                  },
                  _onObjectRemoved: function(e) {
                    this.fire("object:removed", {
                      target: e
                    }), e.fire("removed"), delete e.canvas
                  },
                  clearContext: function(e) {
                    return e.clearRect(0, 0, this.width, this.height), this
                  },
                  getContext: function() {
                    return this.contextContainer
                  },
                  clear: function() {
                    return this.remove.apply(this, this.getObjects()), this.backgroundImage = null, this.overlayImage = null, this.backgroundColor = "", this.overlayColor = "", this._hasITextHandlers && (this.off("mouse:up", this
                      ._mouseUpITextHandler), this._iTextInstances = null, this._hasITextHandlers = !1), this.clearContext(this.contextContainer), this.fire("canvas:cleared"), this.renderOnAddRemove && this.requestRenderAll(), this
                  },
                  renderAll: function() {
                    var e = this.contextContainer;
                    return this.renderCanvas(e, this._objects), this
                  },
                  renderAndReset: function() {
                    this.isRendering = 0, this.renderAll()
                  },
                  requestRenderAll: function() {
                    return this.isRendering || (this.isRendering = v.util.requestAnimFrame(this.renderAndResetBound)), this
                  },
                  calcViewportBoundaries: function() {
                    var e = {},
                      t = this.width,
                      n = this.height,
                      r = o(this.viewportTransform);
                    return e.tl = i({
                      x: 0,
                      y: 0
                    }, r), e.br = i({
                      x: t,
                      y: n
                    }, r), e.tr = new v.Point(e.br.x, e.tl.y), e.bl = new v.Point(e.tl.x, e.br.y), this.vptCoords = e, e
                  },
                  cancelRequestedRender: function() {
                    this.isRendering && (v.util.cancelAnimFrame(this.isRendering), this.isRendering = 0)
                  },
                  renderCanvas: function(e, t) {
                    var n = this.viewportTransform,
                      r = this.clipPath;
                    this.cancelRequestedRender(), this.calcViewportBoundaries(), this.clearContext(e), v.util.setImageSmoothing(e, this.imageSmoothingEnabled), this.fire("before:render", {
                      ctx: e
                    }), this._renderBackground(e), e.save(), e.transform(n[0], n[1], n[2], n[3], n[4], n[5]), this._renderObjects(e, t), e.restore(), !this.controlsAboveOverlay && this.interactive && this.drawControls(e), r && (r.canvas =
                      this, r.shouldCache(), r._transformDone = !0, r.renderCache({
                        forClipping: !0
                      }), this.drawClipPathOnCanvas(e)), this._renderOverlay(e), this.controlsAboveOverlay && this.interactive && this.drawControls(e), this.fire("after:render", {
                      ctx: e
                    })
                  },
                  drawClipPathOnCanvas: function(e) {
                    var t = this.viewportTransform,
                      n = this.clipPath;
                    e.save(), e.transform(t[0], t[1], t[2], t[3], t[4], t[5]), e.globalCompositeOperation = "destination-in", n.transform(e), e.scale(1 / n.zoomX, 1 / n.zoomY), e.drawImage(n._cacheCanvas, -n.cacheTranslationX, -n
                      .cacheTranslationY), e.restore()
                  },
                  _renderObjects: function(e, t) {
                    var n, r;
                    for (n = 0, r = t.length; n < r; ++n) t[n] && t[n].render(e)
                  },
                  _renderBackgroundOrOverlay: function(e, t) {
                    var n = this[t + "Color"],
                      r = this[t + "Image"],
                      i = this.viewportTransform,
                      o = this[t + "Vpt"];
                    if (n || r) {
                      if (n) {
                        e.save(), e.beginPath(), e.moveTo(0, 0), e.lineTo(this.width, 0), e.lineTo(this.width, this.height), e.lineTo(0, this.height), e.closePath(), e.fillStyle = n.toLive ? n.toLive(e, this) : n, o && e.transform(i[0], i[
                          1], i[2], i[3], i[4], i[5]), e.transform(1, 0, 0, 1, n.offsetX || 0, n.offsetY || 0);
                        var a = n.gradientTransform || n.patternTransform;
                        a && e.transform(a[0], a[1], a[2], a[3], a[4], a[5]), e.fill(), e.restore()
                      }
                      r && (e.save(), o && e.transform(i[0], i[1], i[2], i[3], i[4], i[5]), r.render(e), e.restore())
                    }
                  },
                  _renderBackground: function(e) {
                    this._renderBackgroundOrOverlay(e, "background")
                  },
                  _renderOverlay: function(e) {
                    this._renderBackgroundOrOverlay(e, "overlay")
                  },
                  getCenter: function() {
                    return {
                      top: this.height / 2,
                      left: this.width / 2
                    }
                  },
                  getCenterPoint: function() {
                    return new v.Point(this.width / 2, this.height / 2)
                  },
                  centerObjectH: function(e) {
                    return this._centerObject(e, new v.Point(this.getCenterPoint().x, e.getCenterPoint().y))
                  },
                  centerObjectV: function(e) {
                    return this._centerObject(e, new v.Point(e.getCenterPoint().x, this.getCenterPoint().y))
                  },
                  centerObject: function(e) {
                    var t = this.getCenterPoint();
                    return this._centerObject(e, t)
                  },
                  viewportCenterObject: function(e) {
                    var t = this.getVpCenter();
                    return this._centerObject(e, t)
                  },
                  viewportCenterObjectH: function(e) {
                    var t = this.getVpCenter();
                    return this._centerObject(e, new v.Point(t.x, e.getCenterPoint().y)), this
                  },
                  viewportCenterObjectV: function(e) {
                    var t = this.getVpCenter();
                    return this._centerObject(e, new v.Point(e.getCenterPoint().x, t.y))
                  },
                  getVpCenter: function() {
                    var e = this.getCenterPoint(),
                      t = o(this.viewportTransform);
                    return i(e, t)
                  },
                  _centerObject: function(e, t) {
                    return e.setPositionByOrigin(t, "center", "center"), e.setCoords(), this.renderOnAddRemove && this.requestRenderAll(), this
                  },
                  toDatalessJSON: function(e) {
                    return this.toDatalessObject(e)
                  },
                  toObject: function(e) {
                    return this._toObjectMethod("toObject", e)
                  },
                  toDatalessObject: function(e) {
                    return this._toObjectMethod("toDatalessObject", e)
                  },
                  _toObjectMethod: function(t, n) {
                    var r = this.clipPath,
                      i = {
                        version: v.version,
                        objects: this._toObjects(t, n)
                      };
                    return r && !r.excludeFromExport && (i.clipPath = this._toObject(this.clipPath, t, n)), e(i, this.__serializeBgOverlay(t, n)), v.util.populateWithProperties(this, i, n), i
                  },
                  _toObjects: function(e, t) {
                    return this._objects.filter((function(e) {
                      return !e.excludeFromExport
                    })).map((function(n) {
                      return this._toObject(n, e, t)
                    }), this)
                  },
                  _toObject: function(e, t, n) {
                    var r;
                    this.includeDefaultValues || (r = e.includeDefaultValues, e.includeDefaultValues = !1);
                    var i = e[t](n);
                    return this.includeDefaultValues || (e.includeDefaultValues = r), i
                  },
                  __serializeBgOverlay: function(e, t) {
                    var n = {},
                      r = this.backgroundImage,
                      i = this.overlayImage,
                      o = this.backgroundColor,
                      a = this.overlayColor;
                    return o && o.toObject ? o.excludeFromExport || (n.background = o.toObject(t)) : o && (n.background = o), a && a.toObject ? a.excludeFromExport || (n.overlay = a.toObject(t)) : a && (n.overlay = a), r && !r
                      .excludeFromExport && (n.backgroundImage = this._toObject(r, e, t)), i && !i.excludeFromExport && (n.overlayImage = this._toObject(i, e, t)), n
                  },
                  svgViewportTransformation: !0,
                  toSVG: function(e, t) {
                    e || (e = {}), e.reviver = t;
                    var n = [];
                    return this._setSVGPreamble(n, e), this._setSVGHeader(n, e), this.clipPath && n.push('<g clip-path="url(#' + this.clipPath.clipPathId + ')" >\n'), this._setSVGBgOverlayColor(n, "background"), this._setSVGBgOverlayImage(
                      n, "backgroundImage", t), this._setSVGObjects(n, t), this.clipPath && n.push("</g>\n"), this._setSVGBgOverlayColor(n, "overlay"), this._setSVGBgOverlayImage(n, "overlayImage", t), n.push("</svg>"), n.join("")
                  },
                  _setSVGPreamble: function(e, t) {
                    t.suppressPreamble || e.push('<?xml version="1.0" encoding="', t.encoding || "UTF-8", '" standalone="no" ?>\n', '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ', '"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n')
                  },
                  _setSVGHeader: function(e, t) {
                    var n, i = t.width || this.width,
                      o = t.height || this.height,
                      a = 'viewBox="0 0 ' + this.width + " " + this.height + '" ',
                      s = v.Object.NUM_FRACTION_DIGITS;
                    t.viewBox ? a = 'viewBox="' + t.viewBox.x + " " + t.viewBox.y + " " + t.viewBox.width + " " + t.viewBox.height + '" ' : this.svgViewportTransformation && (n = this.viewportTransform, a = 'viewBox="' + r(-n[4] / n[0],
                      s) + " " + r(-n[5] / n[3], s) + " " + r(this.width / n[0], s) + " " + r(this.height / n[3], s) + '" '), e.push("<svg ", 'xmlns="http://www.w3.org/2000/svg" ', 'xmlns:xlink="http://www.w3.org/1999/xlink" ',
                      'version="1.1" ', 'width="', i, '" ', 'height="', o, '" ', a, 'xml:space="preserve">\n', "<desc>Created with Fabric.js ", v.version, "</desc>\n", "<defs>\n", this.createSVGFontFacesMarkup(), this
                      .createSVGRefElementsMarkup(), this.createSVGClipPathMarkup(t), "</defs>\n")
                  },
                  createSVGClipPathMarkup: function(e) {
                    var t = this.clipPath;
                    return t ? (t.clipPathId = "CLIPPATH_" + v.Object.__uid++, '<clipPath id="' + t.clipPathId + '" >\n' + this.clipPath.toClipPathSVG(e.reviver) + "</clipPath>\n") : ""
                  },
                  createSVGRefElementsMarkup: function() {
                    var e = this;
                    return ["background", "overlay"].map((function(t) {
                      var n = e[t + "Color"];
                      if (n && n.toLive) {
                        var r = e[t + "Vpt"],
                          i = e.viewportTransform,
                          o = {
                            width: e.width / (r ? i[0] : 1),
                            height: e.height / (r ? i[3] : 1)
                          };
                        return n.toSVG(o, {
                          additionalTransform: r ? v.util.matrixToSVG(i) : ""
                        })
                      }
                    })).join("")
                  },
                  createSVGFontFacesMarkup: function() {
                    var e, t, n, r, i, o, a, s, l = "",
                      c = {},
                      u = v.fontPaths,
                      h = [];
                    for (this._objects.forEach((function e(t) {
                        h.push(t), t._objects && t._objects.forEach(e)
                      })), a = 0, s = h.length; a < s; a++)
                      if (t = (e = h[a]).fontFamily, -1 !== e.type.indexOf("text") && !c[t] && u[t] && (c[t] = !0, e.styles))
                        for (i in n = e.styles)
                          for (o in r = n[i]) !c[t = r[o].fontFamily] && u[t] && (c[t] = !0);
                    for (var p in c) l += ["\t\t@font-face {\n", "\t\t\tfont-family: '", p, "';\n", "\t\t\tsrc: url('", u[p], "');\n", "\t\t}\n"].join("");
                    return l && (l = ['\t<style type="text/css">', "<![CDATA[\n", l, "]]>", "</style>\n"].join("")), l
                  },
                  _setSVGObjects: function(e, t) {
                    var n, r, i, o = this._objects;
                    for (r = 0, i = o.length; r < i; r++)(n = o[r]).excludeFromExport || this._setSVGObject(e, n, t)
                  },
                  _setSVGObject: function(e, t, n) {
                    e.push(t.toSVG(n))
                  },
                  _setSVGBgOverlayImage: function(e, t, n) {
                    this[t] && !this[t].excludeFromExport && this[t].toSVG && e.push(this[t].toSVG(n))
                  },
                  _setSVGBgOverlayColor: function(e, t) {
                    var n = this[t + "Color"],
                      r = this.viewportTransform,
                      i = this.width,
                      o = this.height;
                    if (n)
                      if (n.toLive) {
                        var a = n.repeat,
                          s = v.util.invertTransform(r),
                          l = this[t + "Vpt"] ? v.util.matrixToSVG(s) : "";
                        e.push('<rect transform="' + l + " translate(", i / 2, ",", o / 2, ')"', ' x="', n.offsetX - i / 2, '" y="', n.offsetY - o / 2, '" ', 'width="', "repeat-y" === a || "no-repeat" === a ? n.source.width : i,
                          '" height="', "repeat-x" === a || "no-repeat" === a ? n.source.height : o, '" fill="url(#SVGID_' + n.id + ')"', "></rect>\n")
                      } else e.push('<rect x="0" y="0" width="100%" height="100%" ', 'fill="', n, '"', "></rect>\n")
                  },
                  sendToBack: function(e) {
                    if (!e) return this;
                    var t, r, i, o = this._activeObject;
                    if (e === o && "activeSelection" === e.type)
                      for (t = (i = o._objects).length; t--;) r = i[t], n(this._objects, r), this._objects.unshift(r);
                    else n(this._objects, e), this._objects.unshift(e);
                    return this.renderOnAddRemove && this.requestRenderAll(), this
                  },
                  bringToFront: function(e) {
                    if (!e) return this;
                    var t, r, i, o = this._activeObject;
                    if (e === o && "activeSelection" === e.type)
                      for (i = o._objects, t = 0; t < i.length; t++) r = i[t], n(this._objects, r), this._objects.push(r);
                    else n(this._objects, e), this._objects.push(e);
                    return this.renderOnAddRemove && this.requestRenderAll(), this
                  },
                  sendBackwards: function(e, t) {
                    if (!e) return this;
                    var r, i, o, a, s, l = this._activeObject,
                      c = 0;
                    if (e === l && "activeSelection" === e.type)
                      for (s = l._objects, r = 0; r < s.length; r++) i = s[r], (o = this._objects.indexOf(i)) > 0 + c && (a = o - 1, n(this._objects, i), this._objects.splice(a, 0, i)), c++;
                    else 0 !== (o = this._objects.indexOf(e)) && (a = this._findNewLowerIndex(e, o, t), n(this._objects, e), this._objects.splice(a, 0, e));
                    return this.renderOnAddRemove && this.requestRenderAll(), this
                  },
                  _findNewLowerIndex: function(e, t, n) {
                    var r, i;
                    if (n)
                      for (r = t, i = t - 1; i >= 0; --i) {
                        if (e.intersectsWithObject(this._objects[i]) || e.isContainedWithinObject(this._objects[i]) || this._objects[i].isContainedWithinObject(e)) {
                          r = i;
                          break
                        }
                      } else r = t - 1;
                    return r
                  },
                  bringForward: function(e, t) {
                    if (!e) return this;
                    var r, i, o, a, s, l = this._activeObject,
                      c = 0;
                    if (e === l && "activeSelection" === e.type)
                      for (r = (s = l._objects).length; r--;) i = s[r], (o = this._objects.indexOf(i)) < this._objects.length - 1 - c && (a = o + 1, n(this._objects, i), this._objects.splice(a, 0, i)), c++;
                    else(o = this._objects.indexOf(e)) !== this._objects.length - 1 && (a = this._findNewUpperIndex(e, o, t), n(this._objects, e), this._objects.splice(a, 0, e));
                    return this.renderOnAddRemove && this.requestRenderAll(), this
                  },
                  _findNewUpperIndex: function(e, t, n) {
                    var r, i, o;
                    if (n)
                      for (r = t, i = t + 1, o = this._objects.length; i < o; ++i) {
                        if (e.intersectsWithObject(this._objects[i]) || e.isContainedWithinObject(this._objects[i]) || this._objects[i].isContainedWithinObject(e)) {
                          r = i;
                          break
                        }
                      } else r = t + 1;
                    return r
                  },
                  moveTo: function(e, t) {
                    return n(this._objects, e), this._objects.splice(t, 0, e), this.renderOnAddRemove && this.requestRenderAll()
                  },
                  dispose: function() {
                    return this.isRendering && (v.util.cancelAnimFrame(this.isRendering), this.isRendering = 0), this.forEachObject((function(e) {
                        e.dispose && e.dispose()
                      })), this._objects = [], this.backgroundImage && this.backgroundImage.dispose && this.backgroundImage.dispose(), this.backgroundImage = null, this.overlayImage && this.overlayImage.dispose && this.overlayImage
                      .dispose(), this.overlayImage = null, this._iTextInstances = null, this.contextContainer = null, this.lowerCanvasEl.classList.remove("lower-canvas"), v.util.setStyle(this.lowerCanvasEl, this._originalCanvasStyle),
                      delete this._originalCanvasStyle, this.lowerCanvasEl.setAttribute("width", this.width), this.lowerCanvasEl.setAttribute("height", this.height), v.util.cleanUpJsdomNode(this.lowerCanvasEl), this.lowerCanvasEl = void 0,
                      this
                  },
                  toString: function() {
                    return "#<fabric.Canvas (" + this.complexity() + "): { objects: " + this._objects.length + " }>"
                  }
                }), e(v.StaticCanvas.prototype, v.Observable), e(v.StaticCanvas.prototype, v.Collection), e(v.StaticCanvas.prototype, v.DataURLExporter), e(v.StaticCanvas, {
                  EMPTY_JSON: '{"objects": [], "background": "white"}',
                  supports: function(e) {
                    var t = s();
                    if (!t || !t.getContext) return null;
                    var n = t.getContext("2d");
                    return n && "setLineDash" === e ? void 0 !== n.setLineDash : null
                  }
                }), v.StaticCanvas.prototype.toJSON = v.StaticCanvas.prototype.toObject, v.isLikelyNode && (v.StaticCanvas.prototype.createPNGStream = function() {
                  var e = a(this.lowerCanvasEl);
                  return e && e.createPNGStream()
                }, v.StaticCanvas.prototype.createJPEGStream = function(e) {
                  var t = a(this.lowerCanvasEl);
                  return t && t.createJPEGStream(e)
                })
              }
            }(), v.BaseBrush = v.util.createClass({
              color: "rgb(0, 0, 0)",
              width: 1,
              shadow: null,
              strokeLineCap: "round",
              strokeLineJoin: "round",
              strokeMiterLimit: 10,
              strokeDashArray: null,
              limitedToCanvasSize: !1,
              _setBrushStyles: function(e) {
                e.strokeStyle = this.color, e.lineWidth = this.width, e.lineCap = this.strokeLineCap, e.miterLimit = this.strokeMiterLimit, e.lineJoin = this.strokeLineJoin, e.setLineDash(this.strokeDashArray || [])
              },
              _saveAndTransform: function(e) {
                var t = this.canvas.viewportTransform;
                e.save(), e.transform(t[0], t[1], t[2], t[3], t[4], t[5])
              },
              _setShadow: function() {
                if (this.shadow) {
                  var e = this.canvas,
                    t = this.shadow,
                    n = e.contextTop,
                    r = e.getZoom();
                  e && e._isRetinaScaling() && (r *= v.devicePixelRatio), n.shadowColor = t.color, n.shadowBlur = t.blur * r, n.shadowOffsetX = t.offsetX * r, n.shadowOffsetY = t.offsetY * r
                }
              },
              needsFullRender: function() {
                return new v.Color(this.color).getAlpha() < 1 || !!this.shadow
              },
              _resetShadow: function() {
                var e = this.canvas.contextTop;
                e.shadowColor = "", e.shadowBlur = e.shadowOffsetX = e.shadowOffsetY = 0
              },
              _isOutSideCanvas: function(e) {
                return e.x < 0 || e.x > this.canvas.getWidth() || e.y < 0 || e.y > this.canvas.getHeight()
              }
            }), v.PencilBrush = v.util.createClass(v.BaseBrush, {
              decimate: .4,
              drawStraightLine: !1,
              straightLineKey: "shiftKey",
              initialize: function(e) {
                this.canvas = e, this._points = []
              },
              needsFullRender: function() {
                return this.callSuper("needsFullRender") || this._hasStraightLine
              },
              _drawSegment: function(e, t, n) {
                var r = t.midPointFrom(n);
                return e.quadraticCurveTo(t.x, t.y, r.x, r.y), r
              },
              onMouseDown: function(e, t) {
                this.canvas._isMainEvent(t.e) && (this.drawStraightLine = t.e[this.straightLineKey], this._prepareForDrawing(e), this._captureDrawingPath(e), this._render())
              },
              onMouseMove: function(e, t) {
                if (this.canvas._isMainEvent(t.e) && (this.drawStraightLine = t.e[this.straightLineKey], (!0 !== this.limitedToCanvasSize || !this._isOutSideCanvas(e)) && this._captureDrawingPath(e) && this._points.length > 1))
                  if (this.needsFullRender()) this.canvas.clearContext(this.canvas.contextTop), this._render();
                  else {
                    var n = this._points,
                      r = n.length,
                      i = this.canvas.contextTop;
                    this._saveAndTransform(i), this.oldEnd && (i.beginPath(), i.moveTo(this.oldEnd.x, this.oldEnd.y)), this.oldEnd = this._drawSegment(i, n[r - 2], n[r - 1], !0), i.stroke(), i.restore()
                  }
              },
              onMouseUp: function(e) {
                return !this.canvas._isMainEvent(e.e) || (this.drawStraightLine = !1, this.oldEnd = void 0, this._finalizeAndAddPath(), !1)
              },
              _prepareForDrawing: function(e) {
                var t = new v.Point(e.x, e.y);
                this._reset(), this._addPoint(t), this.canvas.contextTop.moveTo(t.x, t.y)
              },
              _addPoint: function(e) {
                return !(this._points.length > 1 && e.eq(this._points[this._points.length - 1]) || (this.drawStraightLine && this._points.length > 1 && (this._hasStraightLine = !0, this._points.pop()), this._points.push(e), 0))
              },
              _reset: function() {
                this._points = [], this._setBrushStyles(this.canvas.contextTop), this._setShadow(), this._hasStraightLine = !1
              },
              _captureDrawingPath: function(e) {
                var t = new v.Point(e.x, e.y);
                return this._addPoint(t)
              },
              _render: function(e) {
                var t, n, r = this._points[0],
                  i = this._points[1];
                if (e = e || this.canvas.contextTop, this._saveAndTransform(e), e.beginPath(), 2 === this._points.length && r.x === i.x && r.y === i.y) {
                  var o = this.width / 1e3;
                  r = new v.Point(r.x, r.y), i = new v.Point(i.x, i.y), r.x -= o, i.x += o
                }
                for (e.moveTo(r.x, r.y), t = 1, n = this._points.length; t < n; t++) this._drawSegment(e, r, i), r = this._points[t], i = this._points[t + 1];
                e.lineTo(r.x, r.y), e.stroke(), e.restore()
              },
              convertPointsToSVGPath: function(e) {
                var t = this.width / 1e3;
                return v.util.getSmoothPathFromPoints(e, t)
              },
              _isEmptySVGPath: function(e) {
                return "M 0 0 Q 0 0 0 0 L 0 0" === v.util.joinPath(e)
              },
              createPath: function(e) {
                var t = new v.Path(e, {
                  fill: null,
                  stroke: this.color,
                  strokeWidth: this.width,
                  strokeLineCap: this.strokeLineCap,
                  strokeMiterLimit: this.strokeMiterLimit,
                  strokeLineJoin: this.strokeLineJoin,
                  strokeDashArray: this.strokeDashArray
                });
                return this.shadow && (this.shadow.affectStroke = !0, t.shadow = new v.Shadow(this.shadow)), t
              },
              decimatePoints: function(e, t) {
                if (e.length <= 2) return e;
                var n, r = this.canvas.getZoom(),
                  i = Math.pow(t / r, 2),
                  o = e.length - 1,
                  a = e[0],
                  s = [a];
                for (n = 1; n < o - 1; n++) Math.pow(a.x - e[n].x, 2) + Math.pow(a.y - e[n].y, 2) >= i && (a = e[n], s.push(a));
                return s.push(e[o]), s
              },
              _finalizeAndAddPath: function() {
                this.canvas.contextTop.closePath(), this.decimate && (this._points = this.decimatePoints(this._points, this.decimate));
                var e = this.convertPointsToSVGPath(this._points);
                if (this._isEmptySVGPath(e)) this.canvas.requestRenderAll();
                else {
                  var t = this.createPath(e);
                  this.canvas.clearContext(this.canvas.contextTop), this.canvas.fire("before:path:created", {
                    path: t
                  }), this.canvas.add(t), this.canvas.requestRenderAll(), t.setCoords(), this._resetShadow(), this.canvas.fire("path:created", {
                    path: t
                  })
                }
              }
            }), v.CircleBrush = v.util.createClass(v.BaseBrush, {
              width: 10,
              initialize: function(e) {
                this.canvas = e, this.points = []
              },
              drawDot: function(e) {
                var t = this.addPoint(e),
                  n = this.canvas.contextTop;
                this._saveAndTransform(n), this.dot(n, t), n.restore()
              },
              dot: function(e, t) {
                e.fillStyle = t.fill, e.beginPath(), e.arc(t.x, t.y, t.radius, 0, 2 * Math.PI, !1), e.closePath(), e.fill()
              },
              onMouseDown: function(e) {
                this.points.length = 0, this.canvas.clearContext(this.canvas.contextTop), this._setShadow(), this.drawDot(e)
              },
              _render: function() {
                var e, t, n = this.canvas.contextTop,
                  r = this.points;
                for (this._saveAndTransform(n), e = 0, t = r.length; e < t; e++) this.dot(n, r[e]);
                n.restore()
              },
              onMouseMove: function(e) {
                !0 === this.limitedToCanvasSize && this._isOutSideCanvas(e) || (this.needsFullRender() ? (this.canvas.clearContext(this.canvas.contextTop), this.addPoint(e), this._render()) : this.drawDot(e))
              },
              onMouseUp: function() {
                var e, t, n = this.canvas.renderOnAddRemove;
                this.canvas.renderOnAddRemove = !1;
                var r = [];
                for (e = 0, t = this.points.length; e < t; e++) {
                  var i = this.points[e],
                    o = new v.Circle({
                      radius: i.radius,
                      left: i.x,
                      top: i.y,
                      originX: "center",
                      originY: "center",
                      fill: i.fill
                    });
                  this.shadow && (o.shadow = new v.Shadow(this.shadow)), r.push(o)
                }
                var a = new v.Group(r);
                a.canvas = this.canvas, this.canvas.fire("before:path:created", {
                  path: a
                }), this.canvas.add(a), this.canvas.fire("path:created", {
                  path: a
                }), this.canvas.clearContext(this.canvas.contextTop), this._resetShadow(), this.canvas.renderOnAddRemove = n, this.canvas.requestRenderAll()
              },
              addPoint: function(e) {
                var t = new v.Point(e.x, e.y),
                  n = v.util.getRandomInt(Math.max(0, this.width - 20), this.width + 20) / 2,
                  r = new v.Color(this.color).setAlpha(v.util.getRandomInt(0, 100) / 100).toRgba();
                return t.radius = n, t.fill = r, this.points.push(t), t
              }
            }), v.SprayBrush = v.util.createClass(v.BaseBrush, {
              width: 10,
              density: 20,
              dotWidth: 1,
              dotWidthVariance: 1,
              randomOpacity: !1,
              optimizeOverlapping: !0,
              initialize: function(e) {
                this.canvas = e, this.sprayChunks = []
              },
              onMouseDown: function(e) {
                this.sprayChunks.length = 0, this.canvas.clearContext(this.canvas.contextTop), this._setShadow(), this.addSprayChunk(e), this.render(this.sprayChunkPoints)
              },
              onMouseMove: function(e) {
                !0 === this.limitedToCanvasSize && this._isOutSideCanvas(e) || (this.addSprayChunk(e), this.render(this.sprayChunkPoints))
              },
              onMouseUp: function() {
                var e = this.canvas.renderOnAddRemove;
                this.canvas.renderOnAddRemove = !1;
                for (var t = [], n = 0, r = this.sprayChunks.length; n < r; n++)
                  for (var i = this.sprayChunks[n], o = 0, a = i.length; o < a; o++) {
                    var s = new v.Rect({
                      width: i[o].width,
                      height: i[o].width,
                      left: i[o].x + 1,
                      top: i[o].y + 1,
                      originX: "center",
                      originY: "center",
                      fill: this.color
                    });
                    t.push(s)
                  }
                this.optimizeOverlapping && (t = this._getOptimizedRects(t));
                var l = new v.Group(t);
                this.shadow && l.set("shadow", new v.Shadow(this.shadow)), this.canvas.fire("before:path:created", {
                  path: l
                }), this.canvas.add(l), this.canvas.fire("path:created", {
                  path: l
                }), this.canvas.clearContext(this.canvas.contextTop), this._resetShadow(), this.canvas.renderOnAddRemove = e, this.canvas.requestRenderAll()
              },
              _getOptimizedRects: function(e) {
                var t, n, r, i = {};
                for (n = 0, r = e.length; n < r; n++) i[t = e[n].left + "" + e[n].top] || (i[t] = e[n]);
                var o = [];
                for (t in i) o.push(i[t]);
                return o
              },
              render: function(e) {
                var t, n, r = this.canvas.contextTop;
                for (r.fillStyle = this.color, this._saveAndTransform(r), t = 0, n = e.length; t < n; t++) {
                  var i = e[t];
                  void 0 !== i.opacity && (r.globalAlpha = i.opacity), r.fillRect(i.x, i.y, i.width, i.width)
                }
                r.restore()
              },
              _render: function() {
                var e, t, n = this.canvas.contextTop;
                for (n.fillStyle = this.color, this._saveAndTransform(n), e = 0, t = this.sprayChunks.length; e < t; e++) this.render(this.sprayChunks[e]);
                n.restore()
              },
              addSprayChunk: function(e) {
                this.sprayChunkPoints = [];
                var t, n, r, i, o = this.width / 2;
                for (i = 0; i < this.density; i++) {
                  t = v.util.getRandomInt(e.x - o, e.x + o), n = v.util.getRandomInt(e.y - o, e.y + o), r = this.dotWidthVariance ? v.util.getRandomInt(Math.max(1, this.dotWidth - this.dotWidthVariance), this.dotWidth + this
                    .dotWidthVariance) : this.dotWidth;
                  var a = new v.Point(t, n);
                  a.width = r, this.randomOpacity && (a.opacity = v.util.getRandomInt(0, 100) / 100), this.sprayChunkPoints.push(a)
                }
                this.sprayChunks.push(this.sprayChunkPoints)
              }
            }), v.PatternBrush = v.util.createClass(v.PencilBrush, {
              getPatternSrc: function() {
                var e = v.util.createCanvasElement(),
                  t = e.getContext("2d");
                return e.width = e.height = 25, t.fillStyle = this.color, t.beginPath(), t.arc(10, 10, 10, 0, 2 * Math.PI, !1), t.closePath(), t.fill(), e
              },
              getPatternSrcFunction: function() {
                return String(this.getPatternSrc).replace("this.color", '"' + this.color + '"')
              },
              getPattern: function(e) {
                return e.createPattern(this.source || this.getPatternSrc(), "repeat")
              },
              _setBrushStyles: function(e) {
                this.callSuper("_setBrushStyles", e), e.strokeStyle = this.getPattern(e)
              },
              createPath: function(e) {
                var t = this.callSuper("createPath", e),
                  n = t._getLeftTopCoords().scalarAdd(t.strokeWidth / 2);
                return t.stroke = new v.Pattern({
                  source: this.source || this.getPatternSrcFunction(),
                  offsetX: -n.x,
                  offsetY: -n.y
                }), t
              }
            }),
            function() {
              var e = v.util.getPointer,
                t = v.util.degreesToRadians,
                n = v.util.isTouchEvent;
              for (var r in v.Canvas = v.util.createClass(v.StaticCanvas, {
                  initialize: function(e, t) {
                    t || (t = {}), this.renderAndResetBound = this.renderAndReset.bind(this), this.requestRenderAllBound = this.requestRenderAll.bind(this), this._initStatic(e, t), this._initInteractive(), this._createCacheCanvas()
                  },
                  uniformScaling: !0,
                  uniScaleKey: "shiftKey",
                  centeredScaling: !1,
                  centeredRotation: !1,
                  centeredKey: "altKey",
                  altActionKey: "shiftKey",
                  interactive: !0,
                  selection: !0,
                  selectionKey: "shiftKey",
                  altSelectionKey: null,
                  selectionColor: "rgba(100, 100, 255, 0.3)",
                  selectionDashArray: [],
                  selectionBorderColor: "rgba(255, 255, 255, 0.3)",
                  selectionLineWidth: 1,
                  selectionFullyContained: !1,
                  hoverCursor: "move",
                  moveCursor: "move",
                  defaultCursor: "default",
                  freeDrawingCursor: "crosshair",
                  notAllowedCursor: "not-allowed",
                  containerClass: "canvas-container",
                  perPixelTargetFind: !1,
                  targetFindTolerance: 0,
                  skipTargetFind: !1,
                  isDrawingMode: !1,
                  preserveObjectStacking: !1,
                  snapAngle: 0,
                  snapThreshold: null,
                  stopContextMenu: !1,
                  fireRightClick: !1,
                  fireMiddleClick: !1,
                  targets: [],
                  enablePointerEvents: !1,
                  _hoveredTarget: null,
                  _hoveredTargets: [],
                  _initInteractive: function() {
                    this._currentTransform = null, this._groupSelector = null, this._initWrapperElement(), this._createUpperCanvas(), this._initEventListeners(), this._initRetinaScaling(), this.freeDrawingBrush = v.PencilBrush && new v
                      .PencilBrush(this), this.calcOffset()
                  },
                  _chooseObjectsToRender: function() {
                    var e, t, n, r = this.getActiveObjects();
                    if (r.length > 0 && !this.preserveObjectStacking) {
                      t = [], n = [];
                      for (var i = 0, o = this._objects.length; i < o; i++) e = this._objects[i], -1 === r.indexOf(e) ? t.push(e) : n.push(e);
                      r.length > 1 && (this._activeObject._objects = n), t.push.apply(t, n)
                    } else t = this._objects;
                    return t
                  },
                  renderAll: function() {
                    !this.contextTopDirty || this._groupSelector || this.isDrawingMode || (this.clearContext(this.contextTop), this.contextTopDirty = !1), this.hasLostContext && (this.renderTopLayer(this.contextTop), this.hasLostContext = !
                      1);
                    var e = this.contextContainer;
                    return this.renderCanvas(e, this._chooseObjectsToRender()), this
                  },
                  renderTopLayer: function(e) {
                    e.save(), this.isDrawingMode && this._isCurrentlyDrawing && (this.freeDrawingBrush && this.freeDrawingBrush._render(), this.contextTopDirty = !0), this.selection && this._groupSelector && (this._drawSelection(e), this
                      .contextTopDirty = !0), e.restore()
                  },
                  renderTop: function() {
                    var e = this.contextTop;
                    return this.clearContext(e), this.renderTopLayer(e), this.fire("after:render"), this
                  },
                  _normalizePointer: function(e, t) {
                    var n = e.calcTransformMatrix(),
                      r = v.util.invertTransform(n),
                      i = this.restorePointerVpt(t);
                    return v.util.transformPoint(i, r)
                  },
                  isTargetTransparent: function(e, t, n) {
                    if (e.shouldCache() && e._cacheCanvas && e !== this._activeObject) {
                      var r = this._normalizePointer(e, {
                          x: t,
                          y: n
                        }),
                        i = Math.max(e.cacheTranslationX + r.x * e.zoomX, 0),
                        o = Math.max(e.cacheTranslationY + r.y * e.zoomY, 0);
                      return v.util.isTransparent(e._cacheContext, Math.round(i), Math.round(o), this.targetFindTolerance)
                    }
                    var a = this.contextCache,
                      s = e.selectionBackgroundColor,
                      l = this.viewportTransform;
                    return e.selectionBackgroundColor = "", this.clearContext(a), a.save(), a.transform(l[0], l[1], l[2], l[3], l[4], l[5]), e.render(a), a.restore(), e.selectionBackgroundColor = s, v.util.isTransparent(a, t, n, this
                      .targetFindTolerance)
                  },
                  _isSelectionKeyPressed: function(e) {
                    return Array.isArray(this.selectionKey) ? !!this.selectionKey.find((function(t) {
                      return !0 === e[t]
                    })) : e[this.selectionKey]
                  },
                  _shouldClearSelection: function(e, t) {
                    var n = this.getActiveObjects(),
                      r = this._activeObject;
                    return !t || t && r && n.length > 1 && -1 === n.indexOf(t) && r !== t && !this._isSelectionKeyPressed(e) || t && !t.evented || t && !t.selectable && r && r !== t
                  },
                  _shouldCenterTransform: function(e, t, n) {
                    var r;
                    if (e) return "scale" === t || "scaleX" === t || "scaleY" === t || "resizing" === t ? r = this.centeredScaling || e.centeredScaling : "rotate" === t && (r = this.centeredRotation || e.centeredRotation), r ? !n : n
                  },
                  _getOriginFromCorner: function(e, t) {
                    var n = {
                      x: e.originX,
                      y: e.originY
                    };
                    return "ml" === t || "tl" === t || "bl" === t ? n.x = "right" : "mr" !== t && "tr" !== t && "br" !== t || (n.x = "left"), "tl" === t || "mt" === t || "tr" === t ? n.y = "bottom" : "bl" !== t && "mb" !== t && "br" !==
                      t || (n.y = "top"), n
                  },
                  _getActionFromCorner: function(e, t, n, r) {
                    if (!t || !e) return "drag";
                    var i = r.controls[t];
                    return i.getActionName(n, i, r)
                  },
                  _setupCurrentTransform: function(e, n, r) {
                    if (n) {
                      var i = this.getPointer(e),
                        o = n.__corner,
                        a = n.controls[o],
                        s = r && o ? a.getActionHandler(e, n, a) : v.controlsUtils.dragHandler,
                        l = this._getActionFromCorner(r, o, e, n),
                        c = this._getOriginFromCorner(n, o),
                        u = e[this.centeredKey],
                        h = {
                          target: n,
                          action: l,
                          actionHandler: s,
                          corner: o,
                          scaleX: n.scaleX,
                          scaleY: n.scaleY,
                          skewX: n.skewX,
                          skewY: n.skewY,
                          offsetX: i.x - n.left,
                          offsetY: i.y - n.top,
                          originX: c.x,
                          originY: c.y,
                          ex: i.x,
                          ey: i.y,
                          lastX: i.x,
                          lastY: i.y,
                          theta: t(n.angle),
                          width: n.width * n.scaleX,
                          shiftKey: e.shiftKey,
                          altKey: u,
                          original: v.util.saveObjectTransform(n)
                        };
                      this._shouldCenterTransform(n, l, u) && (h.originX = "center", h.originY = "center"), h.original.originX = c.x, h.original.originY = c.y, this._currentTransform = h, this._beforeTransform(e)
                    }
                  },
                  setCursor: function(e) {
                    this.upperCanvasEl.style.cursor = e
                  },
                  _drawSelection: function(e) {
                    var t = this._groupSelector,
                      n = new v.Point(t.ex, t.ey),
                      r = v.util.transformPoint(n, this.viewportTransform),
                      i = new v.Point(t.ex + t.left, t.ey + t.top),
                      o = v.util.transformPoint(i, this.viewportTransform),
                      a = Math.min(r.x, o.x),
                      s = Math.min(r.y, o.y),
                      l = Math.max(r.x, o.x),
                      c = Math.max(r.y, o.y),
                      u = this.selectionLineWidth / 2;
                    this.selectionColor && (e.fillStyle = this.selectionColor, e.fillRect(a, s, l - a, c - s)), this.selectionLineWidth && this.selectionBorderColor && (e.lineWidth = this.selectionLineWidth, e.strokeStyle = this
                      .selectionBorderColor, a += u, s += u, l -= u, c -= u, v.Object.prototype._setLineDash.call(this, e, this.selectionDashArray), e.strokeRect(a, s, l - a, c - s))
                  },
                  findTarget: function(e, t) {
                    if (!this.skipTargetFind) {
                      var r, i, o = this.getPointer(e, !0),
                        a = this._activeObject,
                        s = this.getActiveObjects(),
                        l = n(e),
                        c = s.length > 1 && !t || 1 === s.length;
                      if (this.targets = [], c && a._findTargetCorner(o, l)) return a;
                      if (s.length > 1 && !t && a === this._searchPossibleTargets([a], o)) return a;
                      if (1 === s.length && a === this._searchPossibleTargets([a], o)) {
                        if (!this.preserveObjectStacking) return a;
                        r = a, i = this.targets, this.targets = []
                      }
                      var u = this._searchPossibleTargets(this._objects, o);
                      return e[this.altSelectionKey] && u && r && u !== r && (u = r, this.targets = i), u
                    }
                  },
                  _checkTarget: function(e, t, n) {
                    if (t && t.visible && t.evented && t.containsPoint(e)) {
                      if (!this.perPixelTargetFind && !t.perPixelTargetFind || t.isEditing) return !0;
                      if (!this.isTargetTransparent(t, n.x, n.y)) return !0
                    }
                  },
                  _searchPossibleTargets: function(e, t) {
                    for (var n, r, i = e.length; i--;) {
                      var o = e[i],
                        a = o.group ? this._normalizePointer(o.group, t) : t;
                      if (this._checkTarget(a, o, t)) {
                        (n = e[i]).subTargetCheck && n instanceof v.Group && (r = this._searchPossibleTargets(n._objects, t)) && this.targets.push(r);
                        break
                      }
                    }
                    return n
                  },
                  restorePointerVpt: function(e) {
                    return v.util.transformPoint(e, v.util.invertTransform(this.viewportTransform))
                  },
                  getPointer: function(t, n) {
                    if (this._absolutePointer && !n) return this._absolutePointer;
                    if (this._pointer && n) return this._pointer;
                    var r, i = e(t),
                      o = this.upperCanvasEl,
                      a = o.getBoundingClientRect(),
                      s = a.width || 0,
                      l = a.height || 0;
                    s && l || ("top" in a && "bottom" in a && (l = Math.abs(a.top - a.bottom)), "right" in a && "left" in a && (s = Math.abs(a.right - a.left))), this.calcOffset(), i.x = i.x - this._offset.left, i.y = i.y - this._offset
                      .top, n || (i = this.restorePointerVpt(i));
                    var c = this.getRetinaScaling();
                    return 1 !== c && (i.x /= c, i.y /= c), r = 0 === s || 0 === l ? {
                      width: 1,
                      height: 1
                    } : {
                      width: o.width / s,
                      height: o.height / l
                    }, {
                      x: i.x * r.width,
                      y: i.y * r.height
                    }
                  },
                  _createUpperCanvas: function() {
                    var e = this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/, ""),
                      t = this.lowerCanvasEl,
                      n = this.upperCanvasEl;
                    n ? n.className = "" : (n = this._createCanvasElement(), this.upperCanvasEl = n), v.util.addClass(n, "upper-canvas " + e), this.wrapperEl.appendChild(n), this._copyCanvasStyle(t, n), this._applyCanvasStyle(n), this
                      .contextTop = n.getContext("2d")
                  },
                  getTopContext: function() {
                    return this.contextTop
                  },
                  _createCacheCanvas: function() {
                    this.cacheCanvasEl = this._createCanvasElement(), this.cacheCanvasEl.setAttribute("width", this.width), this.cacheCanvasEl.setAttribute("height", this.height), this.contextCache = this.cacheCanvasEl.getContext("2d")
                  },
                  _initWrapperElement: function() {
                    this.wrapperEl = v.util.wrapElement(this.lowerCanvasEl, "div", {
                      class: this.containerClass
                    }), v.util.setStyle(this.wrapperEl, {
                      width: this.width + "px",
                      height: this.height + "px",
                      position: "relative"
                    }), v.util.makeElementUnselectable(this.wrapperEl)
                  },
                  _applyCanvasStyle: function(e) {
                    var t = this.width || e.width,
                      n = this.height || e.height;
                    v.util.setStyle(e, {
                      position: "absolute",
                      width: t + "px",
                      height: n + "px",
                      left: 0,
                      top: 0,
                      "touch-action": this.allowTouchScrolling ? "manipulation" : "none",
                      "-ms-touch-action": this.allowTouchScrolling ? "manipulation" : "none"
                    }), e.width = t, e.height = n, v.util.makeElementUnselectable(e)
                  },
                  _copyCanvasStyle: function(e, t) {
                    t.style.cssText = e.style.cssText
                  },
                  getSelectionContext: function() {
                    return this.contextTop
                  },
                  getSelectionElement: function() {
                    return this.upperCanvasEl
                  },
                  getActiveObject: function() {
                    return this._activeObject
                  },
                  getActiveObjects: function() {
                    var e = this._activeObject;
                    return e ? "activeSelection" === e.type && e._objects ? e._objects.slice(0) : [e] : []
                  },
                  _onObjectRemoved: function(e) {
                    e === this._activeObject && (this.fire("before:selection:cleared", {
                      target: e
                    }), this._discardActiveObject(), this.fire("selection:cleared", {
                      target: e
                    }), e.fire("deselected")), e === this._hoveredTarget && (this._hoveredTarget = null, this._hoveredTargets = []), this.callSuper("_onObjectRemoved", e)
                  },
                  _fireSelectionEvents: function(e, t) {
                    var n = !1,
                      r = this.getActiveObjects(),
                      i = [],
                      o = [];
                    e.forEach((function(e) {
                      -1 === r.indexOf(e) && (n = !0, e.fire("deselected", {
                        e: t,
                        target: e
                      }), o.push(e))
                    })), r.forEach((function(r) {
                      -1 === e.indexOf(r) && (n = !0, r.fire("selected", {
                        e: t,
                        target: r
                      }), i.push(r))
                    })), e.length > 0 && r.length > 0 ? n && this.fire("selection:updated", {
                      e: t,
                      selected: i,
                      deselected: o
                    }) : r.length > 0 ? this.fire("selection:created", {
                      e: t,
                      selected: i
                    }) : e.length > 0 && this.fire("selection:cleared", {
                      e: t,
                      deselected: o
                    })
                  },
                  setActiveObject: function(e, t) {
                    var n = this.getActiveObjects();
                    return this._setActiveObject(e, t), this._fireSelectionEvents(n, t), this
                  },
                  _setActiveObject: function(e, t) {
                    return this._activeObject !== e && (!!this._discardActiveObject(t, e) && (!e.onSelect({
                      e: t
                    }) && (this._activeObject = e, !0)))
                  },
                  _discardActiveObject: function(e, t) {
                    var n = this._activeObject;
                    if (n) {
                      if (n.onDeselect({
                          e: e,
                          object: t
                        })) return !1;
                      this._activeObject = null
                    }
                    return !0
                  },
                  discardActiveObject: function(e) {
                    var t = this.getActiveObjects(),
                      n = this.getActiveObject();
                    return t.length && this.fire("before:selection:cleared", {
                      target: n,
                      e: e
                    }), this._discardActiveObject(e), this._fireSelectionEvents(t, e), this
                  },
                  dispose: function() {
                    var e = this.wrapperEl;
                    return this.removeListeners(), e.removeChild(this.upperCanvasEl), e.removeChild(this.lowerCanvasEl), this.contextCache = null, this.contextTop = null, ["upperCanvasEl", "cacheCanvasEl"].forEach(function(e) {
                      v.util.cleanUpJsdomNode(this[e]), this[e] = void 0
                    }.bind(this)), e.parentNode && e.parentNode.replaceChild(this.lowerCanvasEl, this.wrapperEl), delete this.wrapperEl, v.StaticCanvas.prototype.dispose.call(this), this
                  },
                  clear: function() {
                    return this.discardActiveObject(), this.clearContext(this.contextTop), this.callSuper("clear")
                  },
                  drawControls: function(e) {
                    var t = this._activeObject;
                    t && t._renderControls(e)
                  },
                  _toObject: function(e, t, n) {
                    var r = this._realizeGroupTransformOnObject(e),
                      i = this.callSuper("_toObject", e, t, n);
                    return this._unwindGroupTransformOnObject(e, r), i
                  },
                  _realizeGroupTransformOnObject: function(e) {
                    if (e.group && "activeSelection" === e.group.type && this._activeObject === e.group) {
                      var t = {};
                      return ["angle", "flipX", "flipY", "left", "scaleX", "scaleY", "skewX", "skewY", "top"].forEach((function(n) {
                        t[n] = e[n]
                      })), v.util.addTransformToObject(e, this._activeObject.calcOwnMatrix()), t
                    }
                    return null
                  },
                  _unwindGroupTransformOnObject: function(e, t) {
                    t && e.set(t)
                  },
                  _setSVGObject: function(e, t, n) {
                    var r = this._realizeGroupTransformOnObject(t);
                    this.callSuper("_setSVGObject", e, t, n), this._unwindGroupTransformOnObject(t, r)
                  },
                  setViewportTransform: function(e) {
                    this.renderOnAddRemove && this._activeObject && this._activeObject.isEditing && this._activeObject.clearContextTop(), v.StaticCanvas.prototype.setViewportTransform.call(this, e)
                  }
                }), v.StaticCanvas) "prototype" !== r && (v.Canvas[r] = v.StaticCanvas[r])
            }(),
            function() {
              var e = v.util.addListener,
                t = v.util.removeListener,
                n = {
                  passive: !1
                };

              function r(e, t) {
                return e.button && e.button === t - 1
              }
              v.util.object.extend(v.Canvas.prototype, {
                mainTouchId: null,
                _initEventListeners: function() {
                  this.removeListeners(), this._bindEvents(), this.addOrRemove(e, "add")
                },
                _getEventPrefix: function() {
                  return this.enablePointerEvents ? "pointer" : "mouse"
                },
                addOrRemove: function(e, t) {
                  var r = this.upperCanvasEl,
                    i = this._getEventPrefix();
                  e(v.window, "resize", this._onResize), e(r, i + "down", this._onMouseDown), e(r, i + "move", this._onMouseMove, n), e(r, i + "out", this._onMouseOut), e(r, i + "enter", this._onMouseEnter), e(r, "wheel", this
                    ._onMouseWheel), e(r, "contextmenu", this._onContextMenu), e(r, "dblclick", this._onDoubleClick), e(r, "dragover", this._onDragOver), e(r, "dragenter", this._onDragEnter), e(r, "dragleave", this._onDragLeave), e(r,
                    "drop", this._onDrop), this.enablePointerEvents || e(r, "touchstart", this._onTouchStart, n), "undefined" != typeof eventjs && t in eventjs && (eventjs[t](r, "gesture", this._onGesture), eventjs[t](r, "drag", this
                    ._onDrag), eventjs[t](r, "orientation", this._onOrientationChange), eventjs[t](r, "shake", this._onShake), eventjs[t](r, "longpress", this._onLongPress))
                },
                removeListeners: function() {
                  this.addOrRemove(t, "remove");
                  var e = this._getEventPrefix();
                  t(v.document, e + "up", this._onMouseUp), t(v.document, "touchend", this._onTouchEnd, n), t(v.document, e + "move", this._onMouseMove, n), t(v.document, "touchmove", this._onMouseMove, n)
                },
                _bindEvents: function() {
                  this.eventsBound || (this._onMouseDown = this._onMouseDown.bind(this), this._onTouchStart = this._onTouchStart.bind(this), this._onMouseMove = this._onMouseMove.bind(this), this._onMouseUp = this._onMouseUp.bind(this),
                    this._onTouchEnd = this._onTouchEnd.bind(this), this._onResize = this._onResize.bind(this), this._onGesture = this._onGesture.bind(this), this._onDrag = this._onDrag.bind(this), this._onShake = this._onShake.bind(
                    this), this._onLongPress = this._onLongPress.bind(this), this._onOrientationChange = this._onOrientationChange.bind(this), this._onMouseWheel = this._onMouseWheel.bind(this), this._onMouseOut = this._onMouseOut.bind(
                      this), this._onMouseEnter = this._onMouseEnter.bind(this), this._onContextMenu = this._onContextMenu.bind(this), this._onDoubleClick = this._onDoubleClick.bind(this), this._onDragOver = this._onDragOver.bind(this),
                    this._onDragEnter = this._simpleEventHandler.bind(this, "dragenter"), this._onDragLeave = this._simpleEventHandler.bind(this, "dragleave"), this._onDrop = this._onDrop.bind(this), this.eventsBound = !0)
                },
                _onGesture: function(e, t) {
                  this.__onTransformGesture && this.__onTransformGesture(e, t)
                },
                _onDrag: function(e, t) {
                  this.__onDrag && this.__onDrag(e, t)
                },
                _onMouseWheel: function(e) {
                  this.__onMouseWheel(e)
                },
                _onMouseOut: function(e) {
                  var t = this._hoveredTarget;
                  this.fire("mouse:out", {
                    target: t,
                    e: e
                  }), this._hoveredTarget = null, t && t.fire("mouseout", {
                    e: e
                  });
                  var n = this;
                  this._hoveredTargets.forEach((function(r) {
                    n.fire("mouse:out", {
                      target: t,
                      e: e
                    }), r && t.fire("mouseout", {
                      e: e
                    })
                  })), this._hoveredTargets = []
                },
                _onMouseEnter: function(e) {
                  this._currentTransform || this.findTarget(e) || (this.fire("mouse:over", {
                    target: null,
                    e: e
                  }), this._hoveredTarget = null, this._hoveredTargets = [])
                },
                _onOrientationChange: function(e, t) {
                  this.__onOrientationChange && this.__onOrientationChange(e, t)
                },
                _onShake: function(e, t) {
                  this.__onShake && this.__onShake(e, t)
                },
                _onLongPress: function(e, t) {
                  this.__onLongPress && this.__onLongPress(e, t)
                },
                _onDragOver: function(e) {
                  e.preventDefault();
                  var t = this._simpleEventHandler("dragover", e);
                  this._fireEnterLeaveEvents(t, e)
                },
                _onDrop: function(e) {
                  return this._simpleEventHandler("drop:before", e), this._simpleEventHandler("drop", e)
                },
                _onContextMenu: function(e) {
                  return this.stopContextMenu && (e.stopPropagation(), e.preventDefault()), !1
                },
                _onDoubleClick: function(e) {
                  this._cacheTransformEventData(e), this._handleEvent(e, "dblclick"), this._resetTransformEventData(e)
                },
                getPointerId: function(e) {
                  var t = e.changedTouches;
                  return t ? t[0] && t[0].identifier : this.enablePointerEvents ? e.pointerId : -1
                },
                _isMainEvent: function(e) {
                  return !0 === e.isPrimary || !1 !== e.isPrimary && ("touchend" === e.type && 0 === e.touches.length || (!e.changedTouches || e.changedTouches[0].identifier === this.mainTouchId))
                },
                _onTouchStart: function(r) {
                  r.preventDefault(), null === this.mainTouchId && (this.mainTouchId = this.getPointerId(r)), this.__onMouseDown(r), this._resetTransformEventData();
                  var i = this.upperCanvasEl,
                    o = this._getEventPrefix();
                  e(v.document, "touchend", this._onTouchEnd, n), e(v.document, "touchmove", this._onMouseMove, n), t(i, o + "down", this._onMouseDown)
                },
                _onMouseDown: function(r) {
                  this.__onMouseDown(r), this._resetTransformEventData();
                  var i = this.upperCanvasEl,
                    o = this._getEventPrefix();
                  t(i, o + "move", this._onMouseMove, n), e(v.document, o + "up", this._onMouseUp), e(v.document, o + "move", this._onMouseMove, n)
                },
                _onTouchEnd: function(r) {
                  if (!(r.touches.length > 0)) {
                    this.__onMouseUp(r), this._resetTransformEventData(), this.mainTouchId = null;
                    var i = this._getEventPrefix();
                    t(v.document, "touchend", this._onTouchEnd, n), t(v.document, "touchmove", this._onMouseMove, n);
                    var o = this;
                    this._willAddMouseDown && clearTimeout(this._willAddMouseDown), this._willAddMouseDown = setTimeout((function() {
                      e(o.upperCanvasEl, i + "down", o._onMouseDown), o._willAddMouseDown = 0
                    }), 400)
                  }
                },
                _onMouseUp: function(r) {
                  this.__onMouseUp(r), this._resetTransformEventData();
                  var i = this.upperCanvasEl,
                    o = this._getEventPrefix();
                  this._isMainEvent(r) && (t(v.document, o + "up", this._onMouseUp), t(v.document, o + "move", this._onMouseMove, n), e(i, o + "move", this._onMouseMove, n))
                },
                _onMouseMove: function(e) {
                  !this.allowTouchScrolling && e.preventDefault && e.preventDefault(), this.__onMouseMove(e)
                },
                _onResize: function() {
                  this.calcOffset()
                },
                _shouldRender: function(e) {
                  var t = this._activeObject;
                  return !!(!!t != !!e || t && e && t !== e) || (t && t.isEditing, !1)
                },
                __onMouseUp: function(e) {
                  var t, n = this._currentTransform,
                    i = this._groupSelector,
                    o = !1,
                    a = !i || 0 === i.left && 0 === i.top;
                  if (this._cacheTransformEventData(e), t = this._target, this._handleEvent(e, "up:before"), r(e, 3)) this.fireRightClick && this._handleEvent(e, "up", 3, a);
                  else {
                    if (r(e, 2)) return this.fireMiddleClick && this._handleEvent(e, "up", 2, a), void this._resetTransformEventData();
                    if (this.isDrawingMode && this._isCurrentlyDrawing) this._onMouseUpInDrawingMode(e);
                    else if (this._isMainEvent(e)) {
                      if (n && (this._finalizeCurrentTransform(e), o = n.actionPerformed), !a) {
                        var s = t === this._activeObject;
                        this._maybeGroupObjects(e), o || (o = this._shouldRender(t) || !s && t === this._activeObject)
                      }
                      var l, c;
                      if (t) {
                        if (l = t._findTargetCorner(this.getPointer(e, !0), v.util.isTouchEvent(e)), t.selectable && t !== this._activeObject && "up" === t.activeOn) this.setActiveObject(t, e), o = !0;
                        else {
                          var u = t.controls[l],
                            h = u && u.getMouseUpHandler(e, t, u);
                          h && h(e, n, (c = this.getPointer(e)).x, c.y)
                        }
                        t.isMoving = !1
                      }
                      if (n && (n.target !== t || n.corner !== l)) {
                        var p = n.target && n.target.controls[n.corner],
                          d = p && p.getMouseUpHandler(e, t, u);
                        c = c || this.getPointer(e), d && d(e, n, c.x, c.y)
                      }
                      this._setCursorFromEvent(e, t), this._handleEvent(e, "up", 1, a), this._groupSelector = null, this._currentTransform = null, t && (t.__corner = 0), o ? this.requestRenderAll() : a || this.renderTop()
                    }
                  }
                },
                _simpleEventHandler: function(e, t) {
                  var n = this.findTarget(t),
                    r = this.targets,
                    i = {
                      e: t,
                      target: n,
                      subTargets: r
                    };
                  if (this.fire(e, i), n && n.fire(e, i), !r) return n;
                  for (var o = 0; o < r.length; o++) r[o].fire(e, i);
                  return n
                },
                _handleEvent: function(e, t, n, r) {
                  var i = this._target,
                    o = this.targets || [],
                    a = {
                      e: e,
                      target: i,
                      subTargets: o,
                      button: n || 1,
                      isClick: r || !1,
                      pointer: this._pointer,
                      absolutePointer: this._absolutePointer,
                      transform: this._currentTransform
                    };
                  "up" === t && (a.currentTarget = this.findTarget(e), a.currentSubTargets = this.targets), this.fire("mouse:" + t, a), i && i.fire("mouse" + t, a);
                  for (var s = 0; s < o.length; s++) o[s].fire("mouse" + t, a)
                },
                _finalizeCurrentTransform: function(e) {
                  var t = this._currentTransform,
                    n = t.target,
                    r = {
                      e: e,
                      target: n,
                      transform: t,
                      action: t.action
                    };
                  n._scaling && (n._scaling = !1), n.setCoords(), (t.actionPerformed || this.stateful && n.hasStateChanged()) && this._fire("modified", r)
                },
                _onMouseDownInDrawingMode: function(e) {
                  this._isCurrentlyDrawing = !0, this.getActiveObject() && this.discardActiveObject(e).requestRenderAll();
                  var t = this.getPointer(e);
                  this.freeDrawingBrush.onMouseDown(t, {
                    e: e,
                    pointer: t
                  }), this._handleEvent(e, "down")
                },
                _onMouseMoveInDrawingMode: function(e) {
                  if (this._isCurrentlyDrawing) {
                    var t = this.getPointer(e);
                    this.freeDrawingBrush.onMouseMove(t, {
                      e: e,
                      pointer: t
                    })
                  }
                  this.setCursor(this.freeDrawingCursor), this._handleEvent(e, "move")
                },
                _onMouseUpInDrawingMode: function(e) {
                  var t = this.getPointer(e);
                  this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({
                    e: e,
                    pointer: t
                  }), this._handleEvent(e, "up")
                },
                __onMouseDown: function(e) {
                  this._cacheTransformEventData(e), this._handleEvent(e, "down:before");
                  var t = this._target;
                  if (r(e, 3)) this.fireRightClick && this._handleEvent(e, "down", 3);
                  else if (r(e, 2)) this.fireMiddleClick && this._handleEvent(e, "down", 2);
                  else if (this.isDrawingMode) this._onMouseDownInDrawingMode(e);
                  else if (this._isMainEvent(e) && !this._currentTransform) {
                    var n = this._pointer;
                    this._previousPointer = n;
                    var i = this._shouldRender(t),
                      o = this._shouldGroup(e, t);
                    if (this._shouldClearSelection(e, t) ? this.discardActiveObject(e) : o && (this._handleGrouping(e, t), t = this._activeObject), !this.selection || t && (t.selectable || t.isEditing || t === this._activeObject) || (this
                        ._groupSelector = {
                          ex: this._absolutePointer.x,
                          ey: this._absolutePointer.y,
                          top: 0,
                          left: 0
                        }), t) {
                      var a = t === this._activeObject;
                      t.selectable && "down" === t.activeOn && this.setActiveObject(t, e);
                      var s = t._findTargetCorner(this.getPointer(e, !0), v.util.isTouchEvent(e));
                      if (t.__corner = s, t === this._activeObject && (s || !o)) {
                        this._setupCurrentTransform(e, t, a);
                        var l = t.controls[s],
                          c = (n = this.getPointer(e), l && l.getMouseDownHandler(e, t, l));
                        c && c(e, this._currentTransform, n.x, n.y)
                      }
                    }
                    this._handleEvent(e, "down"), (i || o) && this.requestRenderAll()
                  }
                },
                _resetTransformEventData: function() {
                  this._target = null, this._pointer = null, this._absolutePointer = null
                },
                _cacheTransformEventData: function(e) {
                  this._resetTransformEventData(), this._pointer = this.getPointer(e, !0), this._absolutePointer = this.restorePointerVpt(this._pointer), this._target = this._currentTransform ? this._currentTransform.target : this
                    .findTarget(e) || null
                },
                _beforeTransform: function(e) {
                  var t = this._currentTransform;
                  this.stateful && t.target.saveState(), this.fire("before:transform", {
                    e: e,
                    transform: t
                  })
                },
                __onMouseMove: function(e) {
                  var t, n;
                  if (this._handleEvent(e, "move:before"), this._cacheTransformEventData(e), this.isDrawingMode) this._onMouseMoveInDrawingMode(e);
                  else if (this._isMainEvent(e)) {
                    var r = this._groupSelector;
                    r ? (n = this._absolutePointer, r.left = n.x - r.ex, r.top = n.y - r.ey, this.renderTop()) : this._currentTransform ? this._transformObject(e) : (t = this.findTarget(e) || null, this._setCursorFromEvent(e, t), this
                      ._fireOverOutEvents(t, e)), this._handleEvent(e, "move"), this._resetTransformEventData()
                  }
                },
                _fireOverOutEvents: function(e, t) {
                  var n = this._hoveredTarget,
                    r = this._hoveredTargets,
                    i = this.targets,
                    o = Math.max(r.length, i.length);
                  this.fireSyntheticInOutEvents(e, t, {
                    oldTarget: n,
                    evtOut: "mouseout",
                    canvasEvtOut: "mouse:out",
                    evtIn: "mouseover",
                    canvasEvtIn: "mouse:over"
                  });
                  for (var a = 0; a < o; a++) this.fireSyntheticInOutEvents(i[a], t, {
                    oldTarget: r[a],
                    evtOut: "mouseout",
                    evtIn: "mouseover"
                  });
                  this._hoveredTarget = e, this._hoveredTargets = this.targets.concat()
                },
                _fireEnterLeaveEvents: function(e, t) {
                  var n = this._draggedoverTarget,
                    r = this._hoveredTargets,
                    i = this.targets,
                    o = Math.max(r.length, i.length);
                  this.fireSyntheticInOutEvents(e, t, {
                    oldTarget: n,
                    evtOut: "dragleave",
                    evtIn: "dragenter"
                  });
                  for (var a = 0; a < o; a++) this.fireSyntheticInOutEvents(i[a], t, {
                    oldTarget: r[a],
                    evtOut: "dragleave",
                    evtIn: "dragenter"
                  });
                  this._draggedoverTarget = e
                },
                fireSyntheticInOutEvents: function(e, t, n) {
                  var r, i, o, a = n.oldTarget,
                    s = a !== e,
                    l = n.canvasEvtIn,
                    c = n.canvasEvtOut;
                  s && (r = {
                    e: t,
                    target: e,
                    previousTarget: a
                  }, i = {
                    e: t,
                    target: a,
                    nextTarget: e
                  }), o = e && s, a && s && (c && this.fire(c, i), a.fire(n.evtOut, i)), o && (l && this.fire(l, r), e.fire(n.evtIn, r))
                },
                __onMouseWheel: function(e) {
                  this._cacheTransformEventData(e), this._handleEvent(e, "wheel"), this._resetTransformEventData()
                },
                _transformObject: function(e) {
                  var t = this.getPointer(e),
                    n = this._currentTransform;
                  n.reset = !1, n.shiftKey = e.shiftKey, n.altKey = e[this.centeredKey], this._performTransformAction(e, n, t), n.actionPerformed && this.requestRenderAll()
                },
                _performTransformAction: function(e, t, n) {
                  var r = n.x,
                    i = n.y,
                    o = t.action,
                    a = !1,
                    s = t.actionHandler;
                  s && (a = s(e, t, r, i)), "drag" === o && a && (t.target.isMoving = !0, this.setCursor(t.target.moveCursor || this.moveCursor)), t.actionPerformed = t.actionPerformed || a
                },
                _fire: v.controlsUtils.fireEvent,
                _setCursorFromEvent: function(e, t) {
                  if (!t) return this.setCursor(this.defaultCursor), !1;
                  var n = t.hoverCursor || this.hoverCursor,
                    r = this._activeObject && "activeSelection" === this._activeObject.type ? this._activeObject : null,
                    i = (!r || !r.contains(t)) && t._findTargetCorner(this.getPointer(e, !0));
                  i ? this.setCursor(this.getCornerCursor(i, t, e)) : (t.subTargetCheck && this.targets.concat().reverse().map((function(e) {
                    n = e.hoverCursor || n
                  })), this.setCursor(n))
                },
                getCornerCursor: function(e, t, n) {
                  var r = t.controls[e];
                  return r.cursorStyleHandler(n, r, t)
                }
              })
            }(),
            function() {
              var e = Math.min,
                t = Math.max;
              v.util.object.extend(v.Canvas.prototype, {
                _shouldGroup: function(e, t) {
                  var n = this._activeObject;
                  return n && this._isSelectionKeyPressed(e) && t && t.selectable && this.selection && (n !== t || "activeSelection" === n.type) && !t.onSelect({
                    e: e
                  })
                },
                _handleGrouping: function(e, t) {
                  var n = this._activeObject;
                  n.__corner || (t !== n || (t = this.findTarget(e, !0)) && t.selectable) && (n && "activeSelection" === n.type ? this._updateActiveSelection(t, e) : this._createActiveSelection(t, e))
                },
                _updateActiveSelection: function(e, t) {
                  var n = this._activeObject,
                    r = n._objects.slice(0);
                  n.contains(e) ? (n.removeWithUpdate(e), this._hoveredTarget = e, this._hoveredTargets = this.targets.concat(), 1 === n.size() && this._setActiveObject(n.item(0), t)) : (n.addWithUpdate(e), this._hoveredTarget = n, this
                    ._hoveredTargets = this.targets.concat()), this._fireSelectionEvents(r, t)
                },
                _createActiveSelection: function(e, t) {
                  var n = this.getActiveObjects(),
                    r = this._createGroup(e);
                  this._hoveredTarget = r, this._setActiveObject(r, t), this._fireSelectionEvents(n, t)
                },
                _createGroup: function(e) {
                  var t = this._objects,
                    n = t.indexOf(this._activeObject) < t.indexOf(e) ? [this._activeObject, e] : [e, this._activeObject];
                  return this._activeObject.isEditing && this._activeObject.exitEditing(), new v.ActiveSelection(n, {
                    canvas: this
                  })
                },
                _groupSelectedObjects: function(e) {
                  var t, n = this._collectObjects(e);
                  1 === n.length ? this.setActiveObject(n[0], e) : n.length > 1 && (t = new v.ActiveSelection(n.reverse(), {
                    canvas: this
                  }), this.setActiveObject(t, e))
                },
                _collectObjects: function(n) {
                  for (var r, i = [], o = this._groupSelector.ex, a = this._groupSelector.ey, s = o + this._groupSelector.left, l = a + this._groupSelector.top, c = new v.Point(e(o, s), e(a, l)), u = new v.Point(t(o, s), t(a, l)), h = !this
                      .selectionFullyContained, p = o === s && a === l, d = this._objects.length; d-- && !((r = this._objects[d]) && r.selectable && r.visible && (h && r.intersectsWithRect(c, u, !0) || r.isContainedWithinRect(c, u, !0) ||
                      h && r.containsPoint(c, null, !0) || h && r.containsPoint(u, null, !0)) && (i.push(r), p)););
                  return i.length > 1 && (i = i.filter((function(e) {
                    return !e.onSelect({
                      e: n
                    })
                  }))), i
                },
                _maybeGroupObjects: function(e) {
                  this.selection && this._groupSelector && this._groupSelectedObjects(e), this.setCursor(this.defaultCursor), this._groupSelector = null
                }
              })
            }(), v.util.object.extend(v.StaticCanvas.prototype, {
              toDataURL: function(e) {
                e || (e = {});
                var t = e.format || "png",
                  n = e.quality || 1,
                  r = (e.multiplier || 1) * (e.enableRetinaScaling ? this.getRetinaScaling() : 1),
                  i = this.toCanvasElement(r, e);
                return v.util.toDataURL(i, t, n)
              },
              toCanvasElement: function(e, t) {
                e = e || 1;
                var n = ((t = t || {}).width || this.width) * e,
                  r = (t.height || this.height) * e,
                  i = this.getZoom(),
                  o = this.width,
                  a = this.height,
                  s = i * e,
                  l = this.viewportTransform,
                  c = (l[4] - (t.left || 0)) * e,
                  u = (l[5] - (t.top || 0)) * e,
                  h = this.interactive,
                  p = [s, 0, 0, s, c, u],
                  d = this.enableRetinaScaling,
                  f = v.util.createCanvasElement(),
                  g = this.contextTop;
                return f.width = n, f.height = r, this.contextTop = null, this.enableRetinaScaling = !1, this.interactive = !1, this.viewportTransform = p, this.width = n, this.height = r, this.calcViewportBoundaries(), this.renderCanvas(f
                  .getContext("2d"), this._objects), this.viewportTransform = l, this.width = o, this.height = a, this.calcViewportBoundaries(), this.interactive = h, this.enableRetinaScaling = d, this.contextTop = g, f
              }
            }), v.util.object.extend(v.StaticCanvas.prototype, {
              loadFromJSON: function(e, t, n) {
                if (e) {
                  var r = "string" == typeof e ? JSON.parse(e) : v.util.object.clone(e),
                    i = this,
                    o = r.clipPath,
                    a = this.renderOnAddRemove;
                  return this.renderOnAddRemove = !1, delete r.clipPath, this._enlivenObjects(r.objects, (function(e) {
                    i.clear(), i._setBgOverlay(r, (function() {
                      o ? i._enlivenObjects([o], (function(n) {
                        i.clipPath = n[0], i.__setupCanvas.call(i, r, e, a, t)
                      })) : i.__setupCanvas.call(i, r, e, a, t)
                    }))
                  }), n), this
                }
              },
              __setupCanvas: function(e, t, n, r) {
                var i = this;
                t.forEach((function(e, t) {
                  i.insertAt(e, t)
                })), this.renderOnAddRemove = n, delete e.objects, delete e.backgroundImage, delete e.overlayImage, delete e.background, delete e.overlay, this._setOptions(e), this.renderAll(), r && r()
              },
              _setBgOverlay: function(e, t) {
                var n = {
                  backgroundColor: !1,
                  overlayColor: !1,
                  backgroundImage: !1,
                  overlayImage: !1
                };
                if (e.backgroundImage || e.overlayImage || e.background || e.overlay) {
                  var r = function() {
                    n.backgroundImage && n.overlayImage && n.backgroundColor && n.overlayColor && t && t()
                  };
                  this.__setBgOverlay("backgroundImage", e.backgroundImage, n, r), this.__setBgOverlay("overlayImage", e.overlayImage, n, r), this.__setBgOverlay("backgroundColor", e.background, n, r), this.__setBgOverlay("overlayColor", e
                    .overlay, n, r)
                } else t && t()
              },
              __setBgOverlay: function(e, t, n, r) {
                var i = this;
                if (!t) return n[e] = !0, void(r && r());
                "backgroundImage" === e || "overlayImage" === e ? v.util.enlivenObjects([t], (function(t) {
                  i[e] = t[0], n[e] = !0, r && r()
                })) : this["set" + v.util.string.capitalize(e, !0)](t, (function() {
                  n[e] = !0, r && r()
                }))
              },
              _enlivenObjects: function(e, t, n) {
                e && 0 !== e.length ? v.util.enlivenObjects(e, (function(e) {
                  t && t(e)
                }), null, n) : t && t([])
              },
              _toDataURL: function(e, t) {
                this.clone((function(n) {
                  t(n.toDataURL(e))
                }))
              },
              _toDataURLWithMultiplier: function(e, t, n) {
                this.clone((function(r) {
                  n(r.toDataURLWithMultiplier(e, t))
                }))
              },
              clone: function(e, t) {
                var n = JSON.stringify(this.toJSON(t));
                this.cloneWithoutData((function(t) {
                  t.loadFromJSON(n, (function() {
                    e && e(t)
                  }))
                }))
              },
              cloneWithoutData: function(e) {
                var t = v.util.createCanvasElement();
                t.width = this.width, t.height = this.height;
                var n = new v.Canvas(t);
                this.backgroundImage ? (n.setBackgroundImage(this.backgroundImage.src, (function() {
                  n.renderAll(), e && e(n)
                })), n.backgroundImageOpacity = this.backgroundImageOpacity, n.backgroundImageStretch = this.backgroundImageStretch) : e && e(n)
              }
            }),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.object.extend,
                r = t.util.object.clone,
                i = t.util.toFixed,
                o = t.util.string.capitalize,
                a = t.util.degreesToRadians,
                s = !t.isLikelyNode;
              t.Object || (t.Object = t.util.createClass(t.CommonMethods, {
                type: "object",
                originX: "left",
                originY: "top",
                top: 0,
                left: 0,
                width: 0,
                height: 0,
                scaleX: 1,
                scaleY: 1,
                flipX: !1,
                flipY: !1,
                opacity: 1,
                angle: 0,
                skewX: 0,
                skewY: 0,
                cornerSize: 13,
                touchCornerSize: 24,
                transparentCorners: !0,
                hoverCursor: null,
                moveCursor: null,
                padding: 0,
                borderColor: "rgb(178,204,255)",
                borderDashArray: null,
                cornerColor: "rgb(178,204,255)",
                cornerStrokeColor: null,
                cornerStyle: "rect",
                cornerDashArray: null,
                centeredScaling: !1,
                centeredRotation: !0,
                fill: "rgb(0,0,0)",
                fillRule: "nonzero",
                globalCompositeOperation: "source-over",
                backgroundColor: "",
                selectionBackgroundColor: "",
                stroke: null,
                strokeWidth: 1,
                strokeDashArray: null,
                strokeDashOffset: 0,
                strokeLineCap: "butt",
                strokeLineJoin: "miter",
                strokeMiterLimit: 4,
                shadow: null,
                borderOpacityWhenMoving: .4,
                borderScaleFactor: 1,
                minScaleLimit: 0,
                selectable: !0,
                evented: !0,
                visible: !0,
                hasControls: !0,
                hasBorders: !0,
                perPixelTargetFind: !1,
                includeDefaultValues: !0,
                lockMovementX: !1,
                lockMovementY: !1,
                lockRotation: !1,
                lockScalingX: !1,
                lockScalingY: !1,
                lockSkewingX: !1,
                lockSkewingY: !1,
                lockScalingFlip: !1,
                excludeFromExport: !1,
                objectCaching: s,
                statefullCache: !1,
                noScaleCache: !0,
                strokeUniform: !1,
                dirty: !0,
                __corner: 0,
                paintFirst: "fill",
                activeOn: "down",
                stateProperties: "top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform"
                  .split(" "),
                cacheProperties: "fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),
                colorProperties: "fill stroke backgroundColor".split(" "),
                clipPath: void 0,
                inverted: !1,
                absolutePositioned: !1,
                initialize: function(e) {
                  e && this.setOptions(e)
                },
                _createCacheCanvas: function() {
                  this._cacheProperties = {}, this._cacheCanvas = t.util.createCanvasElement(), this._cacheContext = this._cacheCanvas.getContext("2d"), this._updateCacheCanvas(), this.dirty = !0
                },
                _limitCacheSize: function(e) {
                  var n = t.perfLimitSizeTotal,
                    r = e.width,
                    i = e.height,
                    o = t.maxCacheSideLimit,
                    a = t.minCacheSideLimit;
                  if (r <= o && i <= o && r * i <= n) return r < a && (e.width = a), i < a && (e.height = a), e;
                  var s = r / i,
                    l = t.util.limitDimsByArea(s, n),
                    c = t.util.capValue,
                    u = c(a, l.x, o),
                    h = c(a, l.y, o);
                  return r > u && (e.zoomX /= r / u, e.width = u, e.capped = !0), i > h && (e.zoomY /= i / h, e.height = h, e.capped = !0), e
                },
                _getCacheCanvasDimensions: function() {
                  var e = this.getTotalObjectScaling(),
                    t = this._getTransformedDimensions(0, 0),
                    n = t.x * e.scaleX / this.scaleX,
                    r = t.y * e.scaleY / this.scaleY;
                  return {
                    width: n + 2,
                    height: r + 2,
                    zoomX: e.scaleX,
                    zoomY: e.scaleY,
                    x: n,
                    y: r
                  }
                },
                _updateCacheCanvas: function() {
                  var e = this.canvas;
                  if (this.noScaleCache && e && e._currentTransform) {
                    var n = e._currentTransform.target,
                      r = e._currentTransform.action;
                    if (this === n && r.slice && "scale" === r.slice(0, 5)) return !1
                  }
                  var i, o, a = this._cacheCanvas,
                    s = this._limitCacheSize(this._getCacheCanvasDimensions()),
                    l = t.minCacheSideLimit,
                    c = s.width,
                    u = s.height,
                    h = s.zoomX,
                    p = s.zoomY,
                    d = c !== this.cacheWidth || u !== this.cacheHeight,
                    f = this.zoomX !== h || this.zoomY !== p,
                    g = d || f,
                    m = 0,
                    v = 0,
                    _ = !1;
                  if (d) {
                    var b = this._cacheCanvas.width,
                      y = this._cacheCanvas.height,
                      w = c > b || u > y;
                    _ = w || (c < .9 * b || u < .9 * y) && b > l && y > l, w && !s.capped && (c > l || u > l) && (m = .1 * c, v = .1 * u)
                  }
                  return this instanceof t.Text && this.path && (g = !0, _ = !0, m += this.getHeightOfLine(0) * this.zoomX, v += this.getHeightOfLine(0) * this.zoomY), !!g && (_ ? (a.width = Math.ceil(c + m), a.height = Math.ceil(u +
                    v)) : (this._cacheContext.setTransform(1, 0, 0, 1, 0, 0), this._cacheContext.clearRect(0, 0, a.width, a.height)), i = s.x / 2, o = s.y / 2, this.cacheTranslationX = Math.round(a.width / 2 - i) + i, this
                    .cacheTranslationY = Math.round(a.height / 2 - o) + o, this.cacheWidth = c, this.cacheHeight = u, this._cacheContext.translate(this.cacheTranslationX, this.cacheTranslationY), this._cacheContext.scale(h, p), this
                    .zoomX = h, this.zoomY = p, !0)
                },
                setOptions: function(e) {
                  this._setOptions(e), this._initGradient(e.fill, "fill"), this._initGradient(e.stroke, "stroke"), this._initPattern(e.fill, "fill"), this._initPattern(e.stroke, "stroke")
                },
                transform: function(e) {
                  var t = this.group && !this.group._transformDone || this.group && this.canvas && e === this.canvas.contextTop,
                    n = this.calcTransformMatrix(!t);
                  e.transform(n[0], n[1], n[2], n[3], n[4], n[5])
                },
                toObject: function(e) {
                  var n = t.Object.NUM_FRACTION_DIGITS,
                    r = {
                      type: this.type,
                      version: t.version,
                      originX: this.originX,
                      originY: this.originY,
                      left: i(this.left, n),
                      top: i(this.top, n),
                      width: i(this.width, n),
                      height: i(this.height, n),
                      fill: this.fill && this.fill.toObject ? this.fill.toObject() : this.fill,
                      stroke: this.stroke && this.stroke.toObject ? this.stroke.toObject() : this.stroke,
                      strokeWidth: i(this.strokeWidth, n),
                      strokeDashArray: this.strokeDashArray ? this.strokeDashArray.concat() : this.strokeDashArray,
                      strokeLineCap: this.strokeLineCap,
                      strokeDashOffset: this.strokeDashOffset,
                      strokeLineJoin: this.strokeLineJoin,
                      strokeUniform: this.strokeUniform,
                      strokeMiterLimit: i(this.strokeMiterLimit, n),
                      scaleX: i(this.scaleX, n),
                      scaleY: i(this.scaleY, n),
                      angle: i(this.angle, n),
                      flipX: this.flipX,
                      flipY: this.flipY,
                      opacity: i(this.opacity, n),
                      shadow: this.shadow && this.shadow.toObject ? this.shadow.toObject() : this.shadow,
                      visible: this.visible,
                      backgroundColor: this.backgroundColor,
                      fillRule: this.fillRule,
                      paintFirst: this.paintFirst,
                      globalCompositeOperation: this.globalCompositeOperation,
                      skewX: i(this.skewX, n),
                      skewY: i(this.skewY, n)
                    };
                  return this.clipPath && !this.clipPath.excludeFromExport && (r.clipPath = this.clipPath.toObject(e), r.clipPath.inverted = this.clipPath.inverted, r.clipPath.absolutePositioned = this.clipPath.absolutePositioned), t.util
                    .populateWithProperties(this, r, e), this.includeDefaultValues || (r = this._removeDefaultValues(r)), r
                },
                toDatalessObject: function(e) {
                  return this.toObject(e)
                },
                _removeDefaultValues: function(e) {
                  var n = t.util.getKlass(e.type).prototype;
                  return n.stateProperties.forEach((function(t) {
                    "left" !== t && "top" !== t && (e[t] === n[t] && delete e[t], Array.isArray(e[t]) && Array.isArray(n[t]) && 0 === e[t].length && 0 === n[t].length && delete e[t])
                  })), e
                },
                toString: function() {
                  return "#<fabric." + o(this.type) + ">"
                },
                getObjectScaling: function() {
                  if (!this.group) return {
                    scaleX: this.scaleX,
                    scaleY: this.scaleY
                  };
                  var e = t.util.qrDecompose(this.calcTransformMatrix());
                  return {
                    scaleX: Math.abs(e.scaleX),
                    scaleY: Math.abs(e.scaleY)
                  }
                },
                getTotalObjectScaling: function() {
                  var e = this.getObjectScaling(),
                    t = e.scaleX,
                    n = e.scaleY;
                  if (this.canvas) {
                    var r = this.canvas.getZoom(),
                      i = this.canvas.getRetinaScaling();
                    t *= r * i, n *= r * i
                  }
                  return {
                    scaleX: t,
                    scaleY: n
                  }
                },
                getObjectOpacity: function() {
                  var e = this.opacity;
                  return this.group && (e *= this.group.getObjectOpacity()), e
                },
                _set: function(e, n) {
                  var r = "scaleX" === e || "scaleY" === e,
                    i = this[e] !== n,
                    o = !1;
                  return r && (n = this._constrainScale(n)), "scaleX" === e && n < 0 ? (this.flipX = !this.flipX, n *= -1) : "scaleY" === e && n < 0 ? (this.flipY = !this.flipY, n *= -1) : "shadow" !== e || !n || n instanceof t.Shadow ?
                    "dirty" === e && this.group && this.group.set("dirty", n) : n = new t.Shadow(n), this[e] = n, i && (o = this.group && this.group.isOnACache(), this.cacheProperties.indexOf(e) > -1 ? (this.dirty = !0, o && this.group
                      .set("dirty", !0)) : o && this.stateProperties.indexOf(e) > -1 && this.group.set("dirty", !0)), this
                },
                setOnGroup: function() {},
                getViewportTransform: function() {
                  return this.canvas && this.canvas.viewportTransform ? this.canvas.viewportTransform : t.iMatrix.concat()
                },
                isNotVisible: function() {
                  return 0 === this.opacity || !this.width && !this.height && 0 === this.strokeWidth || !this.visible
                },
                render: function(e) {
                  this.isNotVisible() || this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen() || (e.save(), this._setupCompositeOperation(e), this.drawSelectionBackground(e), this.transform(e), this._setOpacity(
                    e), this._setShadow(e, this), this.shouldCache() ? (this.renderCache(), this.drawCacheOnCanvas(e)) : (this._removeCacheCanvas(), this.dirty = !1, this.drawObject(e), this.objectCaching && this.statefullCache && this
                      .saveState({
                        propertySet: "cacheProperties"
                      })), e.restore())
                },
                renderCache: function(e) {
                  e = e || {}, this._cacheCanvas && this._cacheContext || this._createCacheCanvas(), this.isCacheDirty() && (this.statefullCache && this.saveState({
                    propertySet: "cacheProperties"
                  }), this.drawObject(this._cacheContext, e.forClipping), this.dirty = !1)
                },
                _removeCacheCanvas: function() {
                  this._cacheCanvas = null, this._cacheContext = null, this.cacheWidth = 0, this.cacheHeight = 0
                },
                hasStroke: function() {
                  return this.stroke && "transparent" !== this.stroke && 0 !== this.strokeWidth
                },
                hasFill: function() {
                  return this.fill && "transparent" !== this.fill
                },
                needsItsOwnCache: function() {
                  return !("stroke" !== this.paintFirst || !this.hasFill() || !this.hasStroke() || "object" != typeof this.shadow) || !!this.clipPath
                },
                shouldCache: function() {
                  return this.ownCaching = this.needsItsOwnCache() || this.objectCaching && (!this.group || !this.group.isOnACache()), this.ownCaching
                },
                willDrawShadow: function() {
                  return !!this.shadow && (0 !== this.shadow.offsetX || 0 !== this.shadow.offsetY)
                },
                drawClipPathOnCache: function(e, n) {
                  if (e.save(), n.inverted ? e.globalCompositeOperation = "destination-out" : e.globalCompositeOperation = "destination-in", n.absolutePositioned) {
                    var r = t.util.invertTransform(this.calcTransformMatrix());
                    e.transform(r[0], r[1], r[2], r[3], r[4], r[5])
                  }
                  n.transform(e), e.scale(1 / n.zoomX, 1 / n.zoomY), e.drawImage(n._cacheCanvas, -n.cacheTranslationX, -n.cacheTranslationY), e.restore()
                },
                drawObject: function(e, t) {
                  var n = this.fill,
                    r = this.stroke;
                  t ? (this.fill = "black", this.stroke = "", this._setClippingProperties(e)) : this._renderBackground(e), this._render(e), this._drawClipPath(e, this.clipPath), this.fill = n, this.stroke = r
                },
                _drawClipPath: function(e, t) {
                  t && (t.canvas = this.canvas, t.shouldCache(), t._transformDone = !0, t.renderCache({
                    forClipping: !0
                  }), this.drawClipPathOnCache(e, t))
                },
                drawCacheOnCanvas: function(e) {
                  e.scale(1 / this.zoomX, 1 / this.zoomY), e.drawImage(this._cacheCanvas, -this.cacheTranslationX, -this.cacheTranslationY)
                },
                isCacheDirty: function(e) {
                  if (this.isNotVisible()) return !1;
                  if (this._cacheCanvas && this._cacheContext && !e && this._updateCacheCanvas()) return !0;
                  if (this.dirty || this.clipPath && this.clipPath.absolutePositioned || this.statefullCache && this.hasStateChanged("cacheProperties")) {
                    if (this._cacheCanvas && this._cacheContext && !e) {
                      var t = this.cacheWidth / this.zoomX,
                        n = this.cacheHeight / this.zoomY;
                      this._cacheContext.clearRect(-t / 2, -n / 2, t, n)
                    }
                    return !0
                  }
                  return !1
                },
                _renderBackground: function(e) {
                  if (this.backgroundColor) {
                    var t = this._getNonTransformedDimensions();
                    e.fillStyle = this.backgroundColor, e.fillRect(-t.x / 2, -t.y / 2, t.x, t.y), this._removeShadow(e)
                  }
                },
                _setOpacity: function(e) {
                  this.group && !this.group._transformDone ? e.globalAlpha = this.getObjectOpacity() : e.globalAlpha *= this.opacity
                },
                _setStrokeStyles: function(e, t) {
                  var n = t.stroke;
                  n && (e.lineWidth = t.strokeWidth, e.lineCap = t.strokeLineCap, e.lineDashOffset = t.strokeDashOffset, e.lineJoin = t.strokeLineJoin, e.miterLimit = t.strokeMiterLimit, n.toLive ? "percentage" === n.gradientUnits || n
                    .gradientTransform || n.patternTransform ? this._applyPatternForTransformedGradient(e, n) : (e.strokeStyle = n.toLive(e, this), this._applyPatternGradientTransform(e, n)) : e.strokeStyle = t.stroke)
                },
                _setFillStyles: function(e, t) {
                  var n = t.fill;
                  n && (n.toLive ? (e.fillStyle = n.toLive(e, this), this._applyPatternGradientTransform(e, t.fill)) : e.fillStyle = n)
                },
                _setClippingProperties: function(e) {
                  e.globalAlpha = 1, e.strokeStyle = "transparent", e.fillStyle = "#000000"
                },
                _setLineDash: function(e, t) {
                  t && 0 !== t.length && (1 & t.length && t.push.apply(t, t), e.setLineDash(t))
                },
                _renderControls: function(e, n) {
                  var r, i, o, s = this.getViewportTransform(),
                    l = this.calcTransformMatrix();
                  i = void 0 !== (n = n || {}).hasBorders ? n.hasBorders : this.hasBorders, o = void 0 !== n.hasControls ? n.hasControls : this.hasControls, l = t.util.multiplyTransformMatrices(s, l), r = t.util.qrDecompose(l), e.save(),
                    e.translate(r.translateX, r.translateY), e.lineWidth = 1 * this.borderScaleFactor, this.group || (e.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1), this.flipX && (r.angle -= 180), e.rotate(a(this
                      .group ? r.angle : this.angle)), n.forActiveSelection || this.group ? i && this.drawBordersInGroup(e, r, n) : i && this.drawBorders(e, n), o && this.drawControls(e, n), e.restore()
                },
                _setShadow: function(e) {
                  if (this.shadow) {
                    var n, r = this.shadow,
                      i = this.canvas,
                      o = i && i.viewportTransform[0] || 1,
                      a = i && i.viewportTransform[3] || 1;
                    n = r.nonScaling ? {
                      scaleX: 1,
                      scaleY: 1
                    } : this.getObjectScaling(), i && i._isRetinaScaling() && (o *= t.devicePixelRatio, a *= t.devicePixelRatio), e.shadowColor = r.color, e.shadowBlur = r.blur * t.browserShadowBlurConstant * (o + a) * (n.scaleX + n
                      .scaleY) / 4, e.shadowOffsetX = r.offsetX * o * n.scaleX, e.shadowOffsetY = r.offsetY * a * n.scaleY
                  }
                },
                _removeShadow: function(e) {
                  this.shadow && (e.shadowColor = "", e.shadowBlur = e.shadowOffsetX = e.shadowOffsetY = 0)
                },
                _applyPatternGradientTransform: function(e, t) {
                  if (!t || !t.toLive) return {
                    offsetX: 0,
                    offsetY: 0
                  };
                  var n = t.gradientTransform || t.patternTransform,
                    r = -this.width / 2 + t.offsetX || 0,
                    i = -this.height / 2 + t.offsetY || 0;
                  return "percentage" === t.gradientUnits ? e.transform(this.width, 0, 0, this.height, r, i) : e.transform(1, 0, 0, 1, r, i), n && e.transform(n[0], n[1], n[2], n[3], n[4], n[5]), {
                    offsetX: r,
                    offsetY: i
                  }
                },
                _renderPaintInOrder: function(e) {
                  "stroke" === this.paintFirst ? (this._renderStroke(e), this._renderFill(e)) : (this._renderFill(e), this._renderStroke(e))
                },
                _render: function() {},
                _renderFill: function(e) {
                  this.fill && (e.save(), this._setFillStyles(e, this), "evenodd" === this.fillRule ? e.fill("evenodd") : e.fill(), e.restore())
                },
                _renderStroke: function(e) {
                  if (this.stroke && 0 !== this.strokeWidth) {
                    if (this.shadow && !this.shadow.affectStroke && this._removeShadow(e), e.save(), this.strokeUniform && this.group) {
                      var t = this.getObjectScaling();
                      e.scale(1 / t.scaleX, 1 / t.scaleY)
                    } else this.strokeUniform && e.scale(1 / this.scaleX, 1 / this.scaleY);
                    this._setLineDash(e, this.strokeDashArray), this._setStrokeStyles(e, this), e.stroke(), e.restore()
                  }
                },
                _applyPatternForTransformedGradient: function(e, n) {
                  var r, i = this._limitCacheSize(this._getCacheCanvasDimensions()),
                    o = t.util.createCanvasElement(),
                    a = this.canvas.getRetinaScaling(),
                    s = i.x / this.scaleX / a,
                    l = i.y / this.scaleY / a;
                  o.width = s, o.height = l, (r = o.getContext("2d")).beginPath(), r.moveTo(0, 0), r.lineTo(s, 0), r.lineTo(s, l), r.lineTo(0, l), r.closePath(), r.translate(s / 2, l / 2), r.scale(i.zoomX / this.scaleX / a, i.zoomY / this
                    .scaleY / a), this._applyPatternGradientTransform(r, n), r.fillStyle = n.toLive(e), r.fill(), e.translate(-this.width / 2 - this.strokeWidth / 2, -this.height / 2 - this.strokeWidth / 2), e.scale(a * this.scaleX / i
                    .zoomX, a * this.scaleY / i.zoomY), e.strokeStyle = r.createPattern(o, "no-repeat")
                },
                _findCenterFromElement: function() {
                  return {
                    x: this.left + this.width / 2,
                    y: this.top + this.height / 2
                  }
                },
                _assignTransformMatrixProps: function() {
                  if (this.transformMatrix) {
                    var e = t.util.qrDecompose(this.transformMatrix);
                    this.flipX = !1, this.flipY = !1, this.set("scaleX", e.scaleX), this.set("scaleY", e.scaleY), this.angle = e.angle, this.skewX = e.skewX, this.skewY = 0
                  }
                },
                _removeTransformMatrix: function(e) {
                  var n = this._findCenterFromElement();
                  this.transformMatrix && (this._assignTransformMatrixProps(), n = t.util.transformPoint(n, this.transformMatrix)), this.transformMatrix = null, e && (this.scaleX *= e.scaleX, this.scaleY *= e.scaleY, this.cropX = e.cropX,
                    this.cropY = e.cropY, n.x += e.offsetLeft, n.y += e.offsetTop, this.width = e.width, this.height = e.height), this.setPositionByOrigin(n, "center", "center")
                },
                clone: function(e, n) {
                  var r = this.toObject(n);
                  this.constructor.fromObject ? this.constructor.fromObject(r, e) : t.Object._fromObject("Object", r, e)
                },
                cloneAsImage: function(e, n) {
                  var r = this.toCanvasElement(n);
                  return e && e(new t.Image(r)), this
                },
                toCanvasElement: function(e) {
                  e || (e = {});
                  var n = t.util,
                    r = n.saveObjectTransform(this),
                    i = this.group,
                    o = this.shadow,
                    a = Math.abs,
                    s = (e.multiplier || 1) * (e.enableRetinaScaling ? t.devicePixelRatio : 1);
                  delete this.group, e.withoutTransform && n.resetObjectTransform(this), e.withoutShadow && (this.shadow = null);
                  var l, c, u, h, p = t.util.createCanvasElement(),
                    d = this.getBoundingRect(!0, !0),
                    f = this.shadow,
                    g = {
                      x: 0,
                      y: 0
                    };
                  f && (c = f.blur, l = f.nonScaling ? {
                      scaleX: 1,
                      scaleY: 1
                    } : this.getObjectScaling(), g.x = 2 * Math.round(a(f.offsetX) + c) * a(l.scaleX), g.y = 2 * Math.round(a(f.offsetY) + c) * a(l.scaleY)), u = d.width + g.x, h = d.height + g.y, p.width = Math.ceil(u), p.height = Math
                    .ceil(h);
                  var m = new t.StaticCanvas(p, {
                    enableRetinaScaling: !1,
                    renderOnAddRemove: !1,
                    skipOffscreen: !1
                  });
                  "jpeg" === e.format && (m.backgroundColor = "#fff"), this.setPositionByOrigin(new t.Point(m.width / 2, m.height / 2), "center", "center");
                  var v = this.canvas;
                  m.add(this);
                  var _ = m.toCanvasElement(s || 1, e);
                  return this.shadow = o, this.set("canvas", v), i && (this.group = i), this.set(r).setCoords(), m._objects = [], m.dispose(), m = null, _
                },
                toDataURL: function(e) {
                  return e || (e = {}), t.util.toDataURL(this.toCanvasElement(e), e.format || "png", e.quality || 1)
                },
                isType: function(e) {
                  return arguments.length > 1 ? Array.from(arguments).includes(this.type) : this.type === e
                },
                complexity: function() {
                  return 1
                },
                toJSON: function(e) {
                  return this.toObject(e)
                },
                rotate: function(e) {
                  var t = ("center" !== this.originX || "center" !== this.originY) && this.centeredRotation;
                  return t && this._setOriginToCenter(), this.set("angle", e), t && this._resetOrigin(), this
                },
                centerH: function() {
                  return this.canvas && this.canvas.centerObjectH(this), this
                },
                viewportCenterH: function() {
                  return this.canvas && this.canvas.viewportCenterObjectH(this), this
                },
                centerV: function() {
                  return this.canvas && this.canvas.centerObjectV(this), this
                },
                viewportCenterV: function() {
                  return this.canvas && this.canvas.viewportCenterObjectV(this), this
                },
                center: function() {
                  return this.canvas && this.canvas.centerObject(this), this
                },
                viewportCenter: function() {
                  return this.canvas && this.canvas.viewportCenterObject(this), this
                },
                getLocalPointer: function(e, n) {
                  n = n || this.canvas.getPointer(e);
                  var r = new t.Point(n.x, n.y),
                    i = this._getLeftTopCoords();
                  return this.angle && (r = t.util.rotatePoint(r, i, a(-this.angle))), {
                    x: r.x - i.x,
                    y: r.y - i.y
                  }
                },
                _setupCompositeOperation: function(e) {
                  this.globalCompositeOperation && (e.globalCompositeOperation = this.globalCompositeOperation)
                },
                dispose: function() {
                  t.runningAnimations && t.runningAnimations.cancelByTarget(this)
                }
              }), t.util.createAccessors && t.util.createAccessors(t.Object), n(t.Object.prototype, t.Observable), t.Object.NUM_FRACTION_DIGITS = 2, t.Object.ENLIVEN_PROPS = ["clipPath"], t.Object._fromObject = function(e, n, i, o) {
                var a = t[e];
                n = r(n, !0), t.util.enlivenPatterns([n.fill, n.stroke], (function(e) {
                  void 0 !== e[0] && (n.fill = e[0]), void 0 !== e[1] && (n.stroke = e[1]), t.util.enlivenObjectEnlivables(n, n, (function() {
                    var e = o ? new a(n[o], n) : new a(n);
                    i && i(e)
                  }))
                }))
              }, t.Object.__uid = 0)
            }(e), d = v.util.degreesToRadians, f = {
              left: -.5,
              center: 0,
              right: .5
            }, g = {
              top: -.5,
              center: 0,
              bottom: .5
            }, v.util.object.extend(v.Object.prototype, {
              translateToGivenOrigin: function(e, t, n, r, i) {
                var o, a, s, l = e.x,
                  c = e.y;
                return "string" == typeof t ? t = f[t] : t -= .5, "string" == typeof r ? r = f[r] : r -= .5, "string" == typeof n ? n = g[n] : n -= .5, "string" == typeof i ? i = g[i] : i -= .5, a = i - n, ((o = r - t) || a) && (s = this
                  ._getTransformedDimensions(), l = e.x + o * s.x, c = e.y + a * s.y), new v.Point(l, c)
              },
              translateToCenterPoint: function(e, t, n) {
                var r = this.translateToGivenOrigin(e, t, n, "center", "center");
                return this.angle ? v.util.rotatePoint(r, e, d(this.angle)) : r
              },
              translateToOriginPoint: function(e, t, n) {
                var r = this.translateToGivenOrigin(e, "center", "center", t, n);
                return this.angle ? v.util.rotatePoint(r, e, d(this.angle)) : r
              },
              getCenterPoint: function() {
                var e = new v.Point(this.left, this.top);
                return this.translateToCenterPoint(e, this.originX, this.originY)
              },
              getPointByOrigin: function(e, t) {
                var n = this.getCenterPoint();
                return this.translateToOriginPoint(n, e, t)
              },
              toLocalPoint: function(e, t, n) {
                var r, i, o = this.getCenterPoint();
                return r = void 0 !== t && void 0 !== n ? this.translateToGivenOrigin(o, "center", "center", t, n) : new v.Point(this.left, this.top), i = new v.Point(e.x, e.y), this.angle && (i = v.util.rotatePoint(i, o, -d(this.angle))), i
                  .subtractEquals(r)
              },
              setPositionByOrigin: function(e, t, n) {
                var r = this.translateToCenterPoint(e, t, n),
                  i = this.translateToOriginPoint(r, this.originX, this.originY);
                this.set("left", i.x), this.set("top", i.y)
              },
              adjustPosition: function(e) {
                var t, n, r = d(this.angle),
                  i = this.getScaledWidth(),
                  o = v.util.cos(r) * i,
                  a = v.util.sin(r) * i;
                t = "string" == typeof this.originX ? f[this.originX] : this.originX - .5, n = "string" == typeof e ? f[e] : e - .5, this.left += o * (n - t), this.top += a * (n - t), this.setCoords(), this.originX = e
              },
              _setOriginToCenter: function() {
                this._originalOriginX = this.originX, this._originalOriginY = this.originY;
                var e = this.getCenterPoint();
                this.originX = "center", this.originY = "center", this.left = e.x, this.top = e.y
              },
              _resetOrigin: function() {
                var e = this.translateToOriginPoint(this.getCenterPoint(), this._originalOriginX, this._originalOriginY);
                this.originX = this._originalOriginX, this.originY = this._originalOriginY, this.left = e.x, this.top = e.y, this._originalOriginX = null, this._originalOriginY = null
              },
              _getLeftTopCoords: function() {
                return this.translateToOriginPoint(this.getCenterPoint(), "left", "top")
              }
            }),
            function() {
              var e = v.util,
                t = e.degreesToRadians,
                n = e.multiplyTransformMatrices,
                r = e.transformPoint;
              e.object.extend(v.Object.prototype, {
                oCoords: null,
                aCoords: null,
                lineCoords: null,
                ownMatrixCache: null,
                matrixCache: null,
                controls: {},
                _getCoords: function(e, t) {
                  return t ? e ? this.calcACoords() : this.calcLineCoords() : (this.aCoords && this.lineCoords || this.setCoords(!0), e ? this.aCoords : this.lineCoords)
                },
                getCoords: function(e, t) {
                  return n = this._getCoords(e, t), [new v.Point(n.tl.x, n.tl.y), new v.Point(n.tr.x, n.tr.y), new v.Point(n.br.x, n.br.y), new v.Point(n.bl.x, n.bl.y)];
                  var n
                },
                intersectsWithRect: function(e, t, n, r) {
                  var i = this.getCoords(n, r);
                  return "Intersection" === v.Intersection.intersectPolygonRectangle(i, e, t).status
                },
                intersectsWithObject: function(e, t, n) {
                  return "Intersection" === v.Intersection.intersectPolygonPolygon(this.getCoords(t, n), e.getCoords(t, n)).status || e.isContainedWithinObject(this, t, n) || this.isContainedWithinObject(e, t, n)
                },
                isContainedWithinObject: function(e, t, n) {
                  for (var r = this.getCoords(t, n), i = t ? e.aCoords : e.lineCoords, o = 0, a = e._getImageLines(i); o < 4; o++)
                    if (!e.containsPoint(r[o], a)) return !1;
                  return !0
                },
                isContainedWithinRect: function(e, t, n, r) {
                  var i = this.getBoundingRect(n, r);
                  return i.left >= e.x && i.left + i.width <= t.x && i.top >= e.y && i.top + i.height <= t.y
                },
                containsPoint: function(e, t, n, r) {
                  var i = this._getCoords(n, r),
                    o = (t = t || this._getImageLines(i), this._findCrossPoints(e, t));
                  return 0 !== o && o % 2 == 1
                },
                isOnScreen: function(e) {
                  if (!this.canvas) return !1;
                  var t = this.canvas.vptCoords.tl,
                    n = this.canvas.vptCoords.br;
                  return !!this.getCoords(!0, e).some((function(e) {
                    return e.x <= n.x && e.x >= t.x && e.y <= n.y && e.y >= t.y
                  })) || (!!this.intersectsWithRect(t, n, !0, e) || this._containsCenterOfCanvas(t, n, e))
                },
                _containsCenterOfCanvas: function(e, t, n) {
                  var r = {
                    x: (e.x + t.x) / 2,
                    y: (e.y + t.y) / 2
                  };
                  return !!this.containsPoint(r, null, !0, n)
                },
                isPartiallyOnScreen: function(e) {
                  if (!this.canvas) return !1;
                  var t = this.canvas.vptCoords.tl,
                    n = this.canvas.vptCoords.br;
                  return !!this.intersectsWithRect(t, n, !0, e) || this.getCoords(!0, e).every((function(e) {
                    return (e.x >= n.x || e.x <= t.x) && (e.y >= n.y || e.y <= t.y)
                  })) && this._containsCenterOfCanvas(t, n, e)
                },
                _getImageLines: function(e) {
                  return {
                    topline: {
                      o: e.tl,
                      d: e.tr
                    },
                    rightline: {
                      o: e.tr,
                      d: e.br
                    },
                    bottomline: {
                      o: e.br,
                      d: e.bl
                    },
                    leftline: {
                      o: e.bl,
                      d: e.tl
                    }
                  }
                },
                _findCrossPoints: function(e, t) {
                  var n, r, i, o = 0;
                  for (var a in t)
                    if (!((i = t[a]).o.y < e.y && i.d.y < e.y || i.o.y >= e.y && i.d.y >= e.y || (i.o.x === i.d.x && i.o.x >= e.x ? r = i.o.x : (0, n = (i.d.y - i.o.y) / (i.d.x - i.o.x), r = -(e.y - 0 * e.x - (i.o.y - n * i.o.x)) / (0 -
                        n)), r >= e.x && (o += 1), 2 !== o))) break;
                  return o
                },
                getBoundingRect: function(t, n) {
                  var r = this.getCoords(t, n);
                  return e.makeBoundingBoxFromPoints(r)
                },
                getScaledWidth: function() {
                  return this._getTransformedDimensions().x
                },
                getScaledHeight: function() {
                  return this._getTransformedDimensions().y
                },
                _constrainScale: function(e) {
                  return Math.abs(e) < this.minScaleLimit ? e < 0 ? -this.minScaleLimit : this.minScaleLimit : 0 === e ? 1e-4 : e
                },
                scale: function(e) {
                  return this._set("scaleX", e), this._set("scaleY", e), this.setCoords()
                },
                scaleToWidth: function(e, t) {
                  var n = this.getBoundingRect(t).width / this.getScaledWidth();
                  return this.scale(e / this.width / n)
                },
                scaleToHeight: function(e, t) {
                  var n = this.getBoundingRect(t).height / this.getScaledHeight();
                  return this.scale(e / this.height / n)
                },
                calcLineCoords: function() {
                  var n = this.getViewportTransform(),
                    i = this.padding,
                    o = t(this.angle),
                    a = e.cos(o) * i,
                    s = e.sin(o) * i,
                    l = a + s,
                    c = a - s,
                    u = this.calcACoords(),
                    h = {
                      tl: r(u.tl, n),
                      tr: r(u.tr, n),
                      bl: r(u.bl, n),
                      br: r(u.br, n)
                    };
                  return i && (h.tl.x -= c, h.tl.y -= l, h.tr.x += l, h.tr.y -= c, h.bl.x -= l, h.bl.y += c, h.br.x += c, h.br.y += l), h
                },
                calcOCoords: function() {
                  var e = this._calcRotateMatrix(),
                    t = this._calcTranslateMatrix(),
                    r = this.getViewportTransform(),
                    i = n(r, t),
                    o = n(i, e),
                    a = (o = n(o, [1 / r[0], 0, 0, 1 / r[3], 0, 0]), this._calculateCurrentDimensions()),
                    s = {};
                  return this.forEachControl((function(e, t, n) {
                    s[t] = e.positionHandler(a, o, n)
                  })), s
                },
                calcACoords: function() {
                  var e = this._calcRotateMatrix(),
                    t = this._calcTranslateMatrix(),
                    i = n(t, e),
                    o = this._getTransformedDimensions(),
                    a = o.x / 2,
                    s = o.y / 2;
                  return {
                    tl: r({
                      x: -a,
                      y: -s
                    }, i),
                    tr: r({
                      x: a,
                      y: -s
                    }, i),
                    bl: r({
                      x: -a,
                      y: s
                    }, i),
                    br: r({
                      x: a,
                      y: s
                    }, i)
                  }
                },
                setCoords: function(e) {
                  return this.aCoords = this.calcACoords(), this.lineCoords = this.group ? this.aCoords : this.calcLineCoords(), e || (this.oCoords = this.calcOCoords(), this._setCornerCoords && this._setCornerCoords()), this
                },
                _calcRotateMatrix: function() {
                  return e.calcRotateMatrix(this)
                },
                _calcTranslateMatrix: function() {
                  var e = this.getCenterPoint();
                  return [1, 0, 0, 1, e.x, e.y]
                },
                transformMatrixKey: function(e) {
                  var t = "_",
                    n = "";
                  return !e && this.group && (n = this.group.transformMatrixKey(e) + t), n + this.top + t + this.left + t + this.scaleX + t + this.scaleY + t + this.skewX + t + this.skewY + t + this.angle + t + this.originX + t + this
                    .originY + t + this.width + t + this.height + t + this.strokeWidth + this.flipX + this.flipY
                },
                calcTransformMatrix: function(e) {
                  var t = this.calcOwnMatrix();
                  if (e || !this.group) return t;
                  var r = this.transformMatrixKey(e),
                    i = this.matrixCache || (this.matrixCache = {});
                  return i.key === r ? i.value : (this.group && (t = n(this.group.calcTransformMatrix(!1), t)), i.key = r, i.value = t, t)
                },
                calcOwnMatrix: function() {
                  var t = this.transformMatrixKey(!0),
                    n = this.ownMatrixCache || (this.ownMatrixCache = {});
                  if (n.key === t) return n.value;
                  var r = this._calcTranslateMatrix(),
                    i = {
                      angle: this.angle,
                      translateX: r[4],
                      translateY: r[5],
                      scaleX: this.scaleX,
                      scaleY: this.scaleY,
                      skewX: this.skewX,
                      skewY: this.skewY,
                      flipX: this.flipX,
                      flipY: this.flipY
                    };
                  return n.key = t, n.value = e.composeMatrix(i), n.value
                },
                _getNonTransformedDimensions: function() {
                  var e = this.strokeWidth;
                  return {
                    x: this.width + e,
                    y: this.height + e
                  }
                },
                _getTransformedDimensions: function(t, n) {
                  void 0 === t && (t = this.skewX), void 0 === n && (n = this.skewY);
                  var r, i, o, a = 0 === t && 0 === n;
                  if (this.strokeUniform ? (i = this.width, o = this.height) : (i = (r = this._getNonTransformedDimensions()).x, o = r.y), a) return this._finalizeDimensions(i * this.scaleX, o * this.scaleY);
                  var s = e.sizeAfterTransform(i, o, {
                    scaleX: this.scaleX,
                    scaleY: this.scaleY,
                    skewX: t,
                    skewY: n
                  });
                  return this._finalizeDimensions(s.x, s.y)
                },
                _finalizeDimensions: function(e, t) {
                  return this.strokeUniform ? {
                    x: e + this.strokeWidth,
                    y: t + this.strokeWidth
                  } : {
                    x: e,
                    y: t
                  }
                },
                _calculateCurrentDimensions: function() {
                  var e = this.getViewportTransform(),
                    t = this._getTransformedDimensions();
                  return r(t, e, !0).scalarAdd(2 * this.padding)
                }
              })
            }(), v.util.object.extend(v.Object.prototype, {
              sendToBack: function() {
                return this.group ? v.StaticCanvas.prototype.sendToBack.call(this.group, this) : this.canvas && this.canvas.sendToBack(this), this
              },
              bringToFront: function() {
                return this.group ? v.StaticCanvas.prototype.bringToFront.call(this.group, this) : this.canvas && this.canvas.bringToFront(this), this
              },
              sendBackwards: function(e) {
                return this.group ? v.StaticCanvas.prototype.sendBackwards.call(this.group, this, e) : this.canvas && this.canvas.sendBackwards(this, e), this
              },
              bringForward: function(e) {
                return this.group ? v.StaticCanvas.prototype.bringForward.call(this.group, this, e) : this.canvas && this.canvas.bringForward(this, e), this
              },
              moveTo: function(e) {
                return this.group && "activeSelection" !== this.group.type ? v.StaticCanvas.prototype.moveTo.call(this.group, this, e) : this.canvas && this.canvas.moveTo(this, e), this
              }
            }),
            function() {
              function e(e, t) {
                if (t) {
                  if (t.toLive) return e + ": url(#SVGID_" + t.id + "); ";
                  var n = new v.Color(t),
                    r = e + ": " + n.toRgb() + "; ",
                    i = n.getAlpha();
                  return 1 !== i && (r += e + "-opacity: " + i.toString() + "; "), r
                }
                return e + ": none; "
              }
              var t = v.util.toFixed;
              v.util.object.extend(v.Object.prototype, {
                getSvgStyles: function(t) {
                  var n = this.fillRule ? this.fillRule : "nonzero",
                    r = this.strokeWidth ? this.strokeWidth : "0",
                    i = this.strokeDashArray ? this.strokeDashArray.join(" ") : "none",
                    o = this.strokeDashOffset ? this.strokeDashOffset : "0",
                    a = this.strokeLineCap ? this.strokeLineCap : "butt",
                    s = this.strokeLineJoin ? this.strokeLineJoin : "miter",
                    l = this.strokeMiterLimit ? this.strokeMiterLimit : "4",
                    c = void 0 !== this.opacity ? this.opacity : "1",
                    u = this.visible ? "" : " visibility: hidden;",
                    h = t ? "" : this.getSvgFilter(),
                    p = e("fill", this.fill);
                  return [e("stroke", this.stroke), "stroke-width: ", r, "; ", "stroke-dasharray: ", i, "; ", "stroke-linecap: ", a, "; ", "stroke-dashoffset: ", o, "; ", "stroke-linejoin: ", s, "; ", "stroke-miterlimit: ", l, "; ", p,
                    "fill-rule: ", n, "; ", "opacity: ", c, ";", h, u
                  ].join("")
                },
                getSvgSpanStyles: function(t, n) {
                  var r = "; ",
                    i = t.fontFamily ? "font-family: " + (-1 === t.fontFamily.indexOf("'") && -1 === t.fontFamily.indexOf('"') ? "'" + t.fontFamily + "'" : t.fontFamily) + r : "",
                    o = t.strokeWidth ? "stroke-width: " + t.strokeWidth + r : "",
                    a = (i = i, t.fontSize ? "font-size: " + t.fontSize + "px" + r : ""),
                    s = t.fontStyle ? "font-style: " + t.fontStyle + r : "",
                    l = t.fontWeight ? "font-weight: " + t.fontWeight + r : "",
                    c = t.fill ? e("fill", t.fill) : "",
                    u = t.stroke ? e("stroke", t.stroke) : "",
                    h = this.getSvgTextDecoration(t);
                  return h && (h = "text-decoration: " + h + r), [u, o, i, a, s, l, h, c, t.deltaY ? "baseline-shift: " + -t.deltaY + "; " : "", n ? "white-space: pre; " : ""].join("")
                },
                getSvgTextDecoration: function(e) {
                  return ["overline", "underline", "line-through"].filter((function(t) {
                    return e[t.replace("-", "")]
                  })).join(" ")
                },
                getSvgFilter: function() {
                  return this.shadow ? "filter: url(#SVGID_" + this.shadow.id + ");" : ""
                },
                getSvgCommons: function() {
                  return [this.id ? 'id="' + this.id + '" ' : "", this.clipPath ? 'clip-path="url(#' + this.clipPath.clipPathId + ')" ' : ""].join("")
                },
                getSvgTransform: function(e, t) {
                  var n = e ? this.calcTransformMatrix() : this.calcOwnMatrix();
                  return 'transform="' + v.util.matrixToSVG(n) + (t || "") + '" '
                },
                _setSVGBg: function(e) {
                  if (this.backgroundColor) {
                    var n = v.Object.NUM_FRACTION_DIGITS;
                    e.push("\t\t<rect ", this._getFillAttributes(this.backgroundColor), ' x="', t(-this.width / 2, n), '" y="', t(-this.height / 2, n), '" width="', t(this.width, n), '" height="', t(this.height, n), '"></rect>\n')
                  }
                },
                toSVG: function(e) {
                  return this._createBaseSVGMarkup(this._toSVG(e), {
                    reviver: e
                  })
                },
                toClipPathSVG: function(e) {
                  return "\t" + this._createBaseClipPathSVGMarkup(this._toSVG(e), {
                    reviver: e
                  })
                },
                _createBaseClipPathSVGMarkup: function(e, t) {
                  var n = (t = t || {}).reviver,
                    r = t.additionalTransform || "",
                    i = [this.getSvgTransform(!0, r), this.getSvgCommons()].join(""),
                    o = e.indexOf("COMMON_PARTS");
                  return e[o] = i, n ? n(e.join("")) : e.join("")
                },
                _createBaseSVGMarkup: function(e, t) {
                  var n, r, i = (t = t || {}).noStyle,
                    o = t.reviver,
                    a = i ? "" : 'style="' + this.getSvgStyles() + '" ',
                    s = t.withShadow ? 'style="' + this.getSvgFilter() + '" ' : "",
                    l = this.clipPath,
                    c = this.strokeUniform ? 'vector-effect="non-scaling-stroke" ' : "",
                    u = l && l.absolutePositioned,
                    h = this.stroke,
                    p = this.fill,
                    d = this.shadow,
                    f = [],
                    g = e.indexOf("COMMON_PARTS"),
                    m = t.additionalTransform;
                  return l && (l.clipPathId = "CLIPPATH_" + v.Object.__uid++, r = '<clipPath id="' + l.clipPathId + '" >\n' + l.toClipPathSVG(o) + "</clipPath>\n"), u && f.push("<g ", s, this.getSvgCommons(), " >\n"), f.push("<g ", this
                      .getSvgTransform(!1), u ? "" : s + this.getSvgCommons(), " >\n"), n = [a, c, i ? "" : this.addPaintOrder(), " ", m ? 'transform="' + m + '" ' : ""].join(""), e[g] = n, p && p.toLive && f.push(p.toSVG(this)), h && h
                    .toLive && f.push(h.toSVG(this)), d && f.push(d.toSVG(this)), l && f.push(r), f.push(e.join("")), f.push("</g>\n"), u && f.push("</g>\n"), o ? o(f.join("")) : f.join("")
                },
                addPaintOrder: function() {
                  return "fill" !== this.paintFirst ? ' paint-order="' + this.paintFirst + '" ' : ""
                }
              })
            }(),
            function() {
              var e = v.util.object.extend,
                t = "stateProperties";

              function n(t, n, r) {
                var i = {};
                r.forEach((function(e) {
                  i[e] = t[e]
                })), e(t[n], i, !0)
              }

              function r(e, t, n) {
                if (e === t) return !0;
                if (Array.isArray(e)) {
                  if (!Array.isArray(t) || e.length !== t.length) return !1;
                  for (var i = 0, o = e.length; i < o; i++)
                    if (!r(e[i], t[i])) return !1;
                  return !0
                }
                if (e && "object" == typeof e) {
                  var a, s = Object.keys(e);
                  if (!t || "object" != typeof t || !n && s.length !== Object.keys(t).length) return !1;
                  for (i = 0, o = s.length; i < o; i++)
                    if ("canvas" !== (a = s[i]) && "group" !== a && !r(e[a], t[a])) return !1;
                  return !0
                }
              }
              v.util.object.extend(v.Object.prototype, {
                hasStateChanged: function(e) {
                  var n = "_" + (e = e || t);
                  return Object.keys(this[n]).length < this[e].length || !r(this[n], this, !0)
                },
                saveState: function(e) {
                  var r = e && e.propertySet || t,
                    i = "_" + r;
                  return this[i] ? (n(this, i, this[r]), e && e.stateProperties && n(this, i, e.stateProperties), this) : this.setupState(e)
                },
                setupState: function(e) {
                  var n = (e = e || {}).propertySet || t;
                  return e.propertySet = n, this["_" + n] = {}, this.saveState(e), this
                }
              })
            }(),
            function() {
              var e = v.util.degreesToRadians;
              v.util.object.extend(v.Object.prototype, {
                _findTargetCorner: function(e, t) {
                  if (!this.hasControls || this.group || !this.canvas || this.canvas._activeObject !== this) return !1;
                  var n, r, i, o = e.x,
                    a = e.y,
                    s = Object.keys(this.oCoords),
                    l = s.length - 1;
                  for (this.__corner = 0; l >= 0; l--)
                    if (i = s[l], this.isControlVisible(i) && (r = this._getImageLines(t ? this.oCoords[i].touchCorner : this.oCoords[i].corner), 0 !== (n = this._findCrossPoints({
                        x: o,
                        y: a
                      }, r)) && n % 2 == 1)) return this.__corner = i, i;
                  return !1
                },
                forEachControl: function(e) {
                  for (var t in this.controls) e(this.controls[t], t, this)
                },
                _setCornerCoords: function() {
                  var e = this.oCoords;
                  for (var t in e) {
                    var n = this.controls[t];
                    e[t].corner = n.calcCornerCoords(this.angle, this.cornerSize, e[t].x, e[t].y, !1), e[t].touchCorner = n.calcCornerCoords(this.angle, this.touchCornerSize, e[t].x, e[t].y, !0)
                  }
                },
                drawSelectionBackground: function(t) {
                  if (!this.selectionBackgroundColor || this.canvas && !this.canvas.interactive || this.canvas && this.canvas._activeObject !== this) return this;
                  t.save();
                  var n = this.getCenterPoint(),
                    r = this._calculateCurrentDimensions(),
                    i = this.canvas.viewportTransform;
                  return t.translate(n.x, n.y), t.scale(1 / i[0], 1 / i[3]), t.rotate(e(this.angle)), t.fillStyle = this.selectionBackgroundColor, t.fillRect(-r.x / 2, -r.y / 2, r.x, r.y), t.restore(), this
                },
                drawBorders: function(e, t) {
                  t = t || {};
                  var n = this._calculateCurrentDimensions(),
                    r = this.borderScaleFactor,
                    i = n.x + r,
                    o = n.y + r,
                    a = void 0 !== t.hasControls ? t.hasControls : this.hasControls,
                    s = !1;
                  return e.save(), e.strokeStyle = t.borderColor || this.borderColor, this._setLineDash(e, t.borderDashArray || this.borderDashArray), e.strokeRect(-i / 2, -o / 2, i, o), a && (e.beginPath(), this.forEachControl((function(t,
                    n, r) {
                    t.withConnection && t.getVisibility(r, n) && (s = !0, e.moveTo(t.x * i, t.y * o), e.lineTo(t.x * i + t.offsetX, t.y * o + t.offsetY))
                  })), s && e.stroke()), e.restore(), this
                },
                drawBordersInGroup: function(e, t, n) {
                  n = n || {};
                  var r = v.util.sizeAfterTransform(this.width, this.height, t),
                    i = this.strokeWidth,
                    o = this.strokeUniform,
                    a = this.borderScaleFactor,
                    s = r.x + i * (o ? this.canvas.getZoom() : t.scaleX) + a,
                    l = r.y + i * (o ? this.canvas.getZoom() : t.scaleY) + a;
                  return e.save(), this._setLineDash(e, n.borderDashArray || this.borderDashArray), e.strokeStyle = n.borderColor || this.borderColor, e.strokeRect(-s / 2, -l / 2, s, l), e.restore(), this
                },
                drawControls: function(e, t) {
                  t = t || {}, e.save();
                  var n, r, i = this.canvas.getRetinaScaling();
                  return e.setTransform(i, 0, 0, i, 0, 0), e.strokeStyle = e.fillStyle = t.cornerColor || this.cornerColor, this.transparentCorners || (e.strokeStyle = t.cornerStrokeColor || this.cornerStrokeColor), this._setLineDash(e, t
                    .cornerDashArray || this.cornerDashArray), this.setCoords(), this.group && (n = this.group.calcTransformMatrix()), this.forEachControl((function(i, o, a) {
                    r = a.oCoords[o], i.getVisibility(a, o) && (n && (r = v.util.transformPoint(r, n)), i.render(e, r.x, r.y, t, a))
                  })), e.restore(), this
                },
                isControlVisible: function(e) {
                  return this.controls[e] && this.controls[e].getVisibility(this, e)
                },
                setControlVisible: function(e, t) {
                  return this._controlsVisibility || (this._controlsVisibility = {}), this._controlsVisibility[e] = t, this
                },
                setControlsVisibility: function(e) {
                  for (var t in e || (e = {}), e) this.setControlVisible(t, e[t]);
                  return this
                },
                onDeselect: function() {},
                onSelect: function() {}
              })
            }(), v.util.object.extend(v.StaticCanvas.prototype, {
              FX_DURATION: 500,
              fxCenterObjectH: function(e, t) {
                var n = function() {},
                  r = (t = t || {}).onComplete || n,
                  i = t.onChange || n,
                  o = this;
                return v.util.animate({
                  target: this,
                  startValue: e.left,
                  endValue: this.getCenterPoint().x,
                  duration: this.FX_DURATION,
                  onChange: function(t) {
                    e.set("left", t), o.requestRenderAll(), i()
                  },
                  onComplete: function() {
                    e.setCoords(), r()
                  }
                })
              },
              fxCenterObjectV: function(e, t) {
                var n = function() {},
                  r = (t = t || {}).onComplete || n,
                  i = t.onChange || n,
                  o = this;
                return v.util.animate({
                  target: this,
                  startValue: e.top,
                  endValue: this.getCenterPoint().y,
                  duration: this.FX_DURATION,
                  onChange: function(t) {
                    e.set("top", t), o.requestRenderAll(), i()
                  },
                  onComplete: function() {
                    e.setCoords(), r()
                  }
                })
              },
              fxRemove: function(e, t) {
                var n = function() {},
                  r = (t = t || {}).onComplete || n,
                  i = t.onChange || n,
                  o = this;
                return v.util.animate({
                  target: this,
                  startValue: e.opacity,
                  endValue: 0,
                  duration: this.FX_DURATION,
                  onChange: function(t) {
                    e.set("opacity", t), o.requestRenderAll(), i()
                  },
                  onComplete: function() {
                    o.remove(e), r()
                  }
                })
              }
            }), v.util.object.extend(v.Object.prototype, {
              animate: function() {
                if (arguments[0] && "object" == typeof arguments[0]) {
                  var e, t, n = [],
                    r = [];
                  for (e in arguments[0]) n.push(e);
                  for (var i = 0, o = n.length; i < o; i++) e = n[i], t = i !== o - 1, r.push(this._animate(e, arguments[0][e], arguments[1], t));
                  return r
                }
                return this._animate.apply(this, arguments)
              },
              _animate: function(e, t, n, r) {
                var i, o = this;
                t = t.toString(), n = n ? v.util.object.clone(n) : {}, ~e.indexOf(".") && (i = e.split("."));
                var a = o.colorProperties.indexOf(e) > -1 || i && o.colorProperties.indexOf(i[1]) > -1,
                  s = i ? this.get(i[0])[i[1]] : this.get(e);
                "from" in n || (n.from = s), a || (t = ~t.indexOf("=") ? s + parseFloat(t.replace("=", "")) : parseFloat(t));
                var l = {
                  target: this,
                  startValue: n.from,
                  endValue: t,
                  byValue: n.by,
                  easing: n.easing,
                  duration: n.duration,
                  abort: n.abort && function(e, t, r) {
                    return n.abort.call(o, e, t, r)
                  },
                  onChange: function(t, a, s) {
                    i ? o[i[0]][i[1]] = t : o.set(e, t), r || n.onChange && n.onChange(t, a, s)
                  },
                  onComplete: function(e, t, i) {
                    r || (o.setCoords(), n.onComplete && n.onComplete(e, t, i))
                  }
                };
                return a ? v.util.animateColor(l.startValue, l.endValue, l.duration, l) : v.util.animate(l)
              }
            }),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.object.extend,
                r = t.util.object.clone,
                i = {
                  x1: 1,
                  x2: 1,
                  y1: 1,
                  y2: 1
                };

              function o(e, t) {
                var n = e.origin,
                  r = e.axis1,
                  i = e.axis2,
                  o = e.dimension,
                  a = t.nearest,
                  s = t.center,
                  l = t.farthest;
                return function() {
                  switch (this.get(n)) {
                    case a:
                      return Math.min(this.get(r), this.get(i));
                    case s:
                      return Math.min(this.get(r), this.get(i)) + .5 * this.get(o);
                    case l:
                      return Math.max(this.get(r), this.get(i))
                  }
                }
              }
              t.Line ? t.warn("fabric.Line is already defined") : (t.Line = t.util.createClass(t.Object, {
                type: "line",
                x1: 0,
                y1: 0,
                x2: 0,
                y2: 0,
                cacheProperties: t.Object.prototype.cacheProperties.concat("x1", "x2", "y1", "y2"),
                initialize: function(e, t) {
                  e || (e = [0, 0, 0, 0]), this.callSuper("initialize", t), this.set("x1", e[0]), this.set("y1", e[1]), this.set("x2", e[2]), this.set("y2", e[3]), this._setWidthHeight(t)
                },
                _setWidthHeight: function(e) {
                  e || (e = {}), this.width = Math.abs(this.x2 - this.x1), this.height = Math.abs(this.y2 - this.y1), this.left = "left" in e ? e.left : this._getLeftToOriginX(), this.top = "top" in e ? e.top : this._getTopToOriginY()
                },
                _set: function(e, t) {
                  return this.callSuper("_set", e, t), void 0 !== i[e] && this._setWidthHeight(), this
                },
                _getLeftToOriginX: o({
                  origin: "originX",
                  axis1: "x1",
                  axis2: "x2",
                  dimension: "width"
                }, {
                  nearest: "left",
                  center: "center",
                  farthest: "right"
                }),
                _getTopToOriginY: o({
                  origin: "originY",
                  axis1: "y1",
                  axis2: "y2",
                  dimension: "height"
                }, {
                  nearest: "top",
                  center: "center",
                  farthest: "bottom"
                }),
                _render: function(e) {
                  e.beginPath();
                  var t = this.calcLinePoints();
                  e.moveTo(t.x1, t.y1), e.lineTo(t.x2, t.y2), e.lineWidth = this.strokeWidth;
                  var n = e.strokeStyle;
                  e.strokeStyle = this.stroke || e.fillStyle, this.stroke && this._renderStroke(e), e.strokeStyle = n
                },
                _findCenterFromElement: function() {
                  return {
                    x: (this.x1 + this.x2) / 2,
                    y: (this.y1 + this.y2) / 2
                  }
                },
                toObject: function(e) {
                  return n(this.callSuper("toObject", e), this.calcLinePoints())
                },
                _getNonTransformedDimensions: function() {
                  var e = this.callSuper("_getNonTransformedDimensions");
                  return "butt" === this.strokeLineCap && (0 === this.width && (e.y -= this.strokeWidth), 0 === this.height && (e.x -= this.strokeWidth)), e
                },
                calcLinePoints: function() {
                  var e = this.x1 <= this.x2 ? -1 : 1,
                    t = this.y1 <= this.y2 ? -1 : 1,
                    n = e * this.width * .5,
                    r = t * this.height * .5;
                  return {
                    x1: n,
                    x2: e * this.width * -.5,
                    y1: r,
                    y2: t * this.height * -.5
                  }
                },
                _toSVG: function() {
                  var e = this.calcLinePoints();
                  return ["<line ", "COMMON_PARTS", 'x1="', e.x1, '" y1="', e.y1, '" x2="', e.x2, '" y2="', e.y2, '" />\n']
                }
              }), t.Line.ATTRIBUTE_NAMES = t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")), t.Line.fromElement = function(e, r, i) {
                i = i || {};
                var o = t.parseAttributes(e, t.Line.ATTRIBUTE_NAMES),
                  a = [o.x1 || 0, o.y1 || 0, o.x2 || 0, o.y2 || 0];
                r(new t.Line(a, n(o, i)))
              }, t.Line.fromObject = function(e, n) {
                var i = r(e, !0);
                i.points = [e.x1, e.y1, e.x2, e.y2], t.Object._fromObject("Line", i, (function(e) {
                  delete e.points, n && n(e)
                }), "points")
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.degreesToRadians;
              t.Circle ? t.warn("fabric.Circle is already defined.") : (t.Circle = t.util.createClass(t.Object, {
                type: "circle",
                radius: 0,
                startAngle: 0,
                endAngle: 360,
                cacheProperties: t.Object.prototype.cacheProperties.concat("radius", "startAngle", "endAngle"),
                _set: function(e, t) {
                  return this.callSuper("_set", e, t), "radius" === e && this.setRadius(t), this
                },
                toObject: function(e) {
                  return this.callSuper("toObject", ["radius", "startAngle", "endAngle"].concat(e))
                },
                _toSVG: function() {
                  var e, r = (this.endAngle - this.startAngle) % 360;
                  if (0 === r) e = ["<circle ", "COMMON_PARTS", 'cx="0" cy="0" ', 'r="', this.radius, '" />\n'];
                  else {
                    var i = n(this.startAngle),
                      o = n(this.endAngle),
                      a = this.radius;
                    e = ['<path d="M ' + t.util.cos(i) * a + " " + t.util.sin(i) * a, " A " + a + " " + a, " 0 ", +(r > 180 ? "1" : "0") + " 1", " " + t.util.cos(o) * a + " " + t.util.sin(o) * a, '" ', "COMMON_PARTS", " />\n"]
                  }
                  return e
                },
                _render: function(e) {
                  e.beginPath(), e.arc(0, 0, this.radius, n(this.startAngle), n(this.endAngle), !1), this._renderPaintInOrder(e)
                },
                getRadiusX: function() {
                  return this.get("radius") * this.get("scaleX")
                },
                getRadiusY: function() {
                  return this.get("radius") * this.get("scaleY")
                },
                setRadius: function(e) {
                  return this.radius = e, this.set("width", 2 * e).set("height", 2 * e)
                }
              }), t.Circle.ATTRIBUTE_NAMES = t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")), t.Circle.fromElement = function(e, n) {
                var r = t.parseAttributes(e, t.Circle.ATTRIBUTE_NAMES);
                if (! function(e) {
                    return "radius" in e && e.radius >= 0
                  }(r)) throw new Error("value of `r` attribute is required and can not be negative");
                r.left = (r.left || 0) - r.radius, r.top = (r.top || 0) - r.radius, n(new t.Circle(r))
              }, t.Circle.fromObject = function(e, n) {
                t.Object._fromObject("Circle", e, n)
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {});
              t.Triangle ? t.warn("fabric.Triangle is already defined") : (t.Triangle = t.util.createClass(t.Object, {
                type: "triangle",
                width: 100,
                height: 100,
                _render: function(e) {
                  var t = this.width / 2,
                    n = this.height / 2;
                  e.beginPath(), e.moveTo(-t, n), e.lineTo(0, -n), e.lineTo(t, n), e.closePath(), this._renderPaintInOrder(e)
                },
                _toSVG: function() {
                  var e = this.width / 2,
                    t = this.height / 2;
                  return ["<polygon ", "COMMON_PARTS", 'points="', [-e + " " + t, "0 " + -t, e + " " + t].join(","), '" />']
                }
              }), t.Triangle.fromObject = function(e, n) {
                return t.Object._fromObject("Triangle", e, n)
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = 2 * Math.PI;
              t.Ellipse ? t.warn("fabric.Ellipse is already defined.") : (t.Ellipse = t.util.createClass(t.Object, {
                type: "ellipse",
                rx: 0,
                ry: 0,
                cacheProperties: t.Object.prototype.cacheProperties.concat("rx", "ry"),
                initialize: function(e) {
                  this.callSuper("initialize", e), this.set("rx", e && e.rx || 0), this.set("ry", e && e.ry || 0)
                },
                _set: function(e, t) {
                  switch (this.callSuper("_set", e, t), e) {
                    case "rx":
                      this.rx = t, this.set("width", 2 * t);
                      break;
                    case "ry":
                      this.ry = t, this.set("height", 2 * t)
                  }
                  return this
                },
                getRx: function() {
                  return this.get("rx") * this.get("scaleX")
                },
                getRy: function() {
                  return this.get("ry") * this.get("scaleY")
                },
                toObject: function(e) {
                  return this.callSuper("toObject", ["rx", "ry"].concat(e))
                },
                _toSVG: function() {
                  return ["<ellipse ", "COMMON_PARTS", 'cx="0" cy="0" ', 'rx="', this.rx, '" ry="', this.ry, '" />\n']
                },
                _render: function(e) {
                  e.beginPath(), e.save(), e.transform(1, 0, 0, this.ry / this.rx, 0, 0), e.arc(0, 0, this.rx, 0, n, !1), e.restore(), this._renderPaintInOrder(e)
                }
              }), t.Ellipse.ATTRIBUTE_NAMES = t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")), t.Ellipse.fromElement = function(e, n) {
                var r = t.parseAttributes(e, t.Ellipse.ATTRIBUTE_NAMES);
                r.left = (r.left || 0) - r.rx, r.top = (r.top || 0) - r.ry, n(new t.Ellipse(r))
              }, t.Ellipse.fromObject = function(e, n) {
                t.Object._fromObject("Ellipse", e, n)
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.object.extend;
              t.Rect ? t.warn("fabric.Rect is already defined") : (t.Rect = t.util.createClass(t.Object, {
                stateProperties: t.Object.prototype.stateProperties.concat("rx", "ry"),
                type: "rect",
                rx: 0,
                ry: 0,
                cacheProperties: t.Object.prototype.cacheProperties.concat("rx", "ry"),
                initialize: function(e) {
                  this.callSuper("initialize", e), this._initRxRy()
                },
                _initRxRy: function() {
                  this.rx && !this.ry ? this.ry = this.rx : this.ry && !this.rx && (this.rx = this.ry)
                },
                _render: function(e) {
                  var t = this.rx ? Math.min(this.rx, this.width / 2) : 0,
                    n = this.ry ? Math.min(this.ry, this.height / 2) : 0,
                    r = this.width,
                    i = this.height,
                    o = -this.width / 2,
                    a = -this.height / 2,
                    s = 0 !== t || 0 !== n,
                    l = .4477152502;
                  e.beginPath(), e.moveTo(o + t, a), e.lineTo(o + r - t, a), s && e.bezierCurveTo(o + r - l * t, a, o + r, a + l * n, o + r, a + n), e.lineTo(o + r, a + i - n), s && e.bezierCurveTo(o + r, a + i - l * n, o + r - l * t, a +
                      i, o + r - t, a + i), e.lineTo(o + t, a + i), s && e.bezierCurveTo(o + l * t, a + i, o, a + i - l * n, o, a + i - n), e.lineTo(o, a + n), s && e.bezierCurveTo(o, a + l * n, o + l * t, a, o + t, a), e.closePath(),
                    this._renderPaintInOrder(e)
                },
                toObject: function(e) {
                  return this.callSuper("toObject", ["rx", "ry"].concat(e))
                },
                _toSVG: function() {
                  return ["<rect ", "COMMON_PARTS", 'x="', -this.width / 2, '" y="', -this.height / 2, '" rx="', this.rx, '" ry="', this.ry, '" width="', this.width, '" height="', this.height, '" />\n']
                }
              }), t.Rect.ATTRIBUTE_NAMES = t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")), t.Rect.fromElement = function(e, r, i) {
                if (!e) return r(null);
                i = i || {};
                var o = t.parseAttributes(e, t.Rect.ATTRIBUTE_NAMES);
                o.left = o.left || 0, o.top = o.top || 0, o.height = o.height || 0, o.width = o.width || 0;
                var a = new t.Rect(n(i ? t.util.object.clone(i) : {}, o));
                a.visible = a.visible && a.width > 0 && a.height > 0, r(a)
              }, t.Rect.fromObject = function(e, n) {
                return t.Object._fromObject("Rect", e, n)
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.object.extend,
                r = t.util.array.min,
                i = t.util.array.max,
                o = t.util.toFixed,
                a = t.util.projectStrokeOnPoints;
              t.Polyline ? t.warn("fabric.Polyline is already defined") : (t.Polyline = t.util.createClass(t.Object, {
                type: "polyline",
                points: null,
                exactBoundingBox: !1,
                cacheProperties: t.Object.prototype.cacheProperties.concat("points"),
                initialize: function(e, t) {
                  t = t || {}, this.points = e || [], this.callSuper("initialize", t), this._setPositionDimensions(t)
                },
                _projectStrokeOnPoints: function() {
                  return a(this.points, this, !0)
                },
                _setPositionDimensions: function(e) {
                  var t, n = this._calcDimensions(e),
                    r = this.exactBoundingBox ? this.strokeWidth : 0;
                  this.width = n.width - r, this.height = n.height - r, e.fromSVG || (t = this.translateToGivenOrigin({
                    x: n.left - this.strokeWidth / 2 + r / 2,
                    y: n.top - this.strokeWidth / 2 + r / 2
                  }, "left", "top", this.originX, this.originY)), void 0 === e.left && (this.left = e.fromSVG ? n.left : t.x), void 0 === e.top && (this.top = e.fromSVG ? n.top : t.y), this.pathOffset = {
                    x: n.left + this.width / 2 + r / 2,
                    y: n.top + this.height / 2 + r / 2
                  }
                },
                _calcDimensions: function() {
                  var e = this.exactBoundingBox ? this._projectStrokeOnPoints() : this.points,
                    t = r(e, "x") || 0,
                    n = r(e, "y") || 0;
                  return {
                    left: t,
                    top: n,
                    width: (i(e, "x") || 0) - t,
                    height: (i(e, "y") || 0) - n
                  }
                },
                toObject: function(e) {
                  return n(this.callSuper("toObject", e), {
                    points: this.points.concat()
                  })
                },
                _toSVG: function() {
                  for (var e = [], n = this.pathOffset.x, r = this.pathOffset.y, i = t.Object.NUM_FRACTION_DIGITS, a = 0, s = this.points.length; a < s; a++) e.push(o(this.points[a].x - n, i), ",", o(this.points[a].y - r, i), " ");
                  return ["<" + this.type + " ", "COMMON_PARTS", 'points="', e.join(""), '" />\n']
                },
                commonRender: function(e) {
                  var t, n = this.points.length,
                    r = this.pathOffset.x,
                    i = this.pathOffset.y;
                  if (!n || isNaN(this.points[n - 1].y)) return !1;
                  e.beginPath(), e.moveTo(this.points[0].x - r, this.points[0].y - i);
                  for (var o = 0; o < n; o++) t = this.points[o], e.lineTo(t.x - r, t.y - i);
                  return !0
                },
                _render: function(e) {
                  this.commonRender(e) && this._renderPaintInOrder(e)
                },
                complexity: function() {
                  return this.get("points").length
                }
              }), t.Polyline.ATTRIBUTE_NAMES = t.SHARED_ATTRIBUTES.concat(), t.Polyline.fromElementGenerator = function(e) {
                return function(r, i, o) {
                  if (!r) return i(null);
                  o || (o = {});
                  var a = t.parsePointsAttribute(r.getAttribute("points")),
                    s = t.parseAttributes(r, t[e].ATTRIBUTE_NAMES);
                  s.fromSVG = !0, i(new t[e](a, n(s, o)))
                }
              }, t.Polyline.fromElement = t.Polyline.fromElementGenerator("Polyline"), t.Polyline.fromObject = function(e, n) {
                return t.Object._fromObject("Polyline", e, n, "points")
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.projectStrokeOnPoints;
              t.Polygon ? t.warn("fabric.Polygon is already defined") : (t.Polygon = t.util.createClass(t.Polyline, {
                type: "polygon",
                _projectStrokeOnPoints: function() {
                  return n(this.points, this)
                },
                _render: function(e) {
                  this.commonRender(e) && (e.closePath(), this._renderPaintInOrder(e))
                }
              }), t.Polygon.ATTRIBUTE_NAMES = t.SHARED_ATTRIBUTES.concat(), t.Polygon.fromElement = t.Polyline.fromElementGenerator("Polygon"), t.Polygon.fromObject = function(e, n) {
                t.Object._fromObject("Polygon", e, n, "points")
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.array.min,
                r = t.util.array.max,
                i = t.util.object.extend,
                o = t.util.object.clone,
                a = t.util.toFixed;
              t.Path ? t.warn("fabric.Path is already defined") : (t.Path = t.util.createClass(t.Object, {
                type: "path",
                path: null,
                cacheProperties: t.Object.prototype.cacheProperties.concat("path", "fillRule"),
                stateProperties: t.Object.prototype.stateProperties.concat("path"),
                initialize: function(e, t) {
                  delete(t = o(t || {})).path, this.callSuper("initialize", t), this._setPath(e || [], t)
                },
                _setPath: function(e, n) {
                  this.path = t.util.makePathSimpler(Array.isArray(e) ? e : t.util.parsePath(e)), t.Polyline.prototype._setPositionDimensions.call(this, n || {})
                },
                _renderPathCommands: function(e) {
                  var t, n = 0,
                    r = 0,
                    i = 0,
                    o = 0,
                    a = 0,
                    s = 0,
                    l = -this.pathOffset.x,
                    c = -this.pathOffset.y;
                  e.beginPath();
                  for (var u = 0, h = this.path.length; u < h; ++u) switch ((t = this.path[u])[0]) {
                    case "L":
                      i = t[1], o = t[2], e.lineTo(i + l, o + c);
                      break;
                    case "M":
                      n = i = t[1], r = o = t[2], e.moveTo(i + l, o + c);
                      break;
                    case "C":
                      i = t[5], o = t[6], a = t[3], s = t[4], e.bezierCurveTo(t[1] + l, t[2] + c, a + l, s + c, i + l, o + c);
                      break;
                    case "Q":
                      e.quadraticCurveTo(t[1] + l, t[2] + c, t[3] + l, t[4] + c), i = t[3], o = t[4], a = t[1], s = t[2];
                      break;
                    case "z":
                    case "Z":
                      i = n, o = r, e.closePath()
                  }
                },
                _render: function(e) {
                  this._renderPathCommands(e), this._renderPaintInOrder(e)
                },
                toString: function() {
                  return "#<fabric.Path (" + this.complexity() + '): { "top": ' + this.top + ', "left": ' + this.left + " }>"
                },
                toObject: function(e) {
                  return i(this.callSuper("toObject", e), {
                    path: this.path.map((function(e) {
                      return e.slice()
                    }))
                  })
                },
                toDatalessObject: function(e) {
                  var t = this.toObject(["sourcePath"].concat(e));
                  return t.sourcePath && delete t.path, t
                },
                _toSVG: function() {
                  return ["<path ", "COMMON_PARTS", 'd="', t.util.joinPath(this.path), '" stroke-linecap="round" ', "/>\n"]
                },
                _getOffsetTransform: function() {
                  var e = t.Object.NUM_FRACTION_DIGITS;
                  return " translate(" + a(-this.pathOffset.x, e) + ", " + a(-this.pathOffset.y, e) + ")"
                },
                toClipPathSVG: function(e) {
                  var t = this._getOffsetTransform();
                  return "\t" + this._createBaseClipPathSVGMarkup(this._toSVG(), {
                    reviver: e,
                    additionalTransform: t
                  })
                },
                toSVG: function(e) {
                  var t = this._getOffsetTransform();
                  return this._createBaseSVGMarkup(this._toSVG(), {
                    reviver: e,
                    additionalTransform: t
                  })
                },
                complexity: function() {
                  return this.path.length
                },
                _calcDimensions: function() {
                  for (var e, i, o = [], a = [], s = 0, l = 0, c = 0, u = 0, h = 0, p = this.path.length; h < p; ++h) {
                    switch ((e = this.path[h])[0]) {
                      case "L":
                        c = e[1], u = e[2], i = [];
                        break;
                      case "M":
                        s = c = e[1], l = u = e[2], i = [];
                        break;
                      case "C":
                        i = t.util.getBoundsOfCurve(c, u, e[1], e[2], e[3], e[4], e[5], e[6]), c = e[5], u = e[6];
                        break;
                      case "Q":
                        i = t.util.getBoundsOfCurve(c, u, e[1], e[2], e[1], e[2], e[3], e[4]), c = e[3], u = e[4];
                        break;
                      case "z":
                      case "Z":
                        c = s, u = l
                    }
                    i.forEach((function(e) {
                      o.push(e.x), a.push(e.y)
                    })), o.push(c), a.push(u)
                  }
                  var d = n(o) || 0,
                    f = n(a) || 0;
                  return {
                    left: d,
                    top: f,
                    width: (r(o) || 0) - d,
                    height: (r(a) || 0) - f
                  }
                }
              }), t.Path.fromObject = function(e, n) {
                if ("string" == typeof e.sourcePath) {
                  var r = e.sourcePath;
                  t.loadSVGFromURL(r, (function(r) {
                    var i = r[0];
                    i.setOptions(e), e.clipPath ? t.util.enlivenObjects([e.clipPath], (function(e) {
                      i.clipPath = e[0], n && n(i)
                    })) : n && n(i)
                  }))
                } else t.Object._fromObject("Path", e, n, "path")
              }, t.Path.ATTRIBUTE_NAMES = t.SHARED_ATTRIBUTES.concat(["d"]), t.Path.fromElement = function(e, n, r) {
                var o = t.parseAttributes(e, t.Path.ATTRIBUTE_NAMES);
                o.fromSVG = !0, n(new t.Path(o.d, i(o, r)))
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.array.min,
                r = t.util.array.max;
              t.Group || (t.Group = t.util.createClass(t.Object, t.Collection, {
                type: "group",
                strokeWidth: 0,
                subTargetCheck: !1,
                cacheProperties: [],
                useSetOnGroup: !1,
                initialize: function(e, t, n) {
                  t = t || {}, this._objects = [], n && this.callSuper("initialize", t), this._objects = e || [];
                  for (var r = this._objects.length; r--;) this._objects[r].group = this;
                  if (n) this._updateObjectsACoords();
                  else {
                    var i = t && t.centerPoint;
                    void 0 !== t.originX && (this.originX = t.originX), void 0 !== t.originY && (this.originY = t.originY), i || this._calcBounds(), this._updateObjectsCoords(i), delete t.centerPoint, this.callSuper("initialize", t)
                  }
                  this.setCoords()
                },
                _updateObjectsACoords: function() {
                  for (var e = this._objects.length; e--;) this._objects[e].setCoords(true)
                },
                _updateObjectsCoords: function(e) {
                  e = e || this.getCenterPoint();
                  for (var t = this._objects.length; t--;) this._updateObjectCoords(this._objects[t], e)
                },
                _updateObjectCoords: function(e, t) {
                  var n = e.left,
                    r = e.top;
                  e.set({
                    left: n - t.x,
                    top: r - t.y
                  }), e.group = this, e.setCoords(!0)
                },
                toString: function() {
                  return "#<fabric.Group: (" + this.complexity() + ")>"
                },
                addWithUpdate: function(e) {
                  var n = !!this.group;
                  return this._restoreObjectsState(), t.util.resetObjectTransform(this), e && (n && t.util.removeTransformFromObject(e, this.group.calcTransformMatrix()), this._objects.push(e), e.group = this, e._set("canvas", this
                    .canvas)), this._calcBounds(), this._updateObjectsCoords(), this.dirty = !0, n ? this.group.addWithUpdate() : this.setCoords(), this
                },
                removeWithUpdate: function(e) {
                  return this._restoreObjectsState(), t.util.resetObjectTransform(this), this.remove(e), this._calcBounds(), this._updateObjectsCoords(), this.setCoords(), this.dirty = !0, this
                },
                _onObjectAdded: function(e) {
                  this.dirty = !0, e.group = this, e._set("canvas", this.canvas)
                },
                _onObjectRemoved: function(e) {
                  this.dirty = !0, delete e.group
                },
                _set: function(e, n) {
                  var r = this._objects.length;
                  if (this.useSetOnGroup)
                    for (; r--;) this._objects[r].setOnGroup(e, n);
                  if ("canvas" === e)
                    for (; r--;) this._objects[r]._set(e, n);
                  t.Object.prototype._set.call(this, e, n)
                },
                toObject: function(e) {
                  var n = this.includeDefaultValues,
                    r = this._objects.filter((function(e) {
                      return !e.excludeFromExport
                    })).map((function(t) {
                      var r = t.includeDefaultValues;
                      t.includeDefaultValues = n;
                      var i = t.toObject(e);
                      return t.includeDefaultValues = r, i
                    })),
                    i = t.Object.prototype.toObject.call(this, e);
                  return i.objects = r, i
                },
                toDatalessObject: function(e) {
                  var n, r = this.sourcePath;
                  if (r) n = r;
                  else {
                    var i = this.includeDefaultValues;
                    n = this._objects.map((function(t) {
                      var n = t.includeDefaultValues;
                      t.includeDefaultValues = i;
                      var r = t.toDatalessObject(e);
                      return t.includeDefaultValues = n, r
                    }))
                  }
                  var o = t.Object.prototype.toDatalessObject.call(this, e);
                  return o.objects = n, o
                },
                render: function(e) {
                  this._transformDone = !0, this.callSuper("render", e), this._transformDone = !1
                },
                shouldCache: function() {
                  var e = t.Object.prototype.shouldCache.call(this);
                  if (e)
                    for (var n = 0, r = this._objects.length; n < r; n++)
                      if (this._objects[n].willDrawShadow()) return this.ownCaching = !1, !1;
                  return e
                },
                willDrawShadow: function() {
                  if (t.Object.prototype.willDrawShadow.call(this)) return !0;
                  for (var e = 0, n = this._objects.length; e < n; e++)
                    if (this._objects[e].willDrawShadow()) return !0;
                  return !1
                },
                isOnACache: function() {
                  return this.ownCaching || this.group && this.group.isOnACache()
                },
                drawObject: function(e) {
                  for (var t = 0, n = this._objects.length; t < n; t++) this._objects[t].render(e);
                  this._drawClipPath(e, this.clipPath)
                },
                isCacheDirty: function(e) {
                  if (this.callSuper("isCacheDirty", e)) return !0;
                  if (!this.statefullCache) return !1;
                  for (var t = 0, n = this._objects.length; t < n; t++)
                    if (this._objects[t].isCacheDirty(!0)) {
                      if (this._cacheCanvas) {
                        var r = this.cacheWidth / this.zoomX,
                          i = this.cacheHeight / this.zoomY;
                        this._cacheContext.clearRect(-r / 2, -i / 2, r, i)
                      }
                      return !0
                    } return !1
                },
                _restoreObjectsState: function() {
                  var e = this.calcOwnMatrix();
                  return this._objects.forEach((function(n) {
                    t.util.addTransformToObject(n, e), delete n.group, n.setCoords()
                  })), this
                },
                destroy: function() {
                  return this._objects.forEach((function(e) {
                    e.set("dirty", !0)
                  })), this._restoreObjectsState()
                },
                dispose: function() {
                  this.callSuper("dispose"), this.forEachObject((function(e) {
                    e.dispose && e.dispose()
                  })), this._objects = []
                },
                toActiveSelection: function() {
                  if (this.canvas) {
                    var e = this._objects,
                      n = this.canvas;
                    this._objects = [];
                    var r = this.toObject();
                    delete r.objects;
                    var i = new t.ActiveSelection([]);
                    return i.set(r), i.type = "activeSelection", n.remove(this), e.forEach((function(e) {
                      e.group = i, e.dirty = !0, n.add(e)
                    })), i.canvas = n, i._objects = e, n._activeObject = i, i.setCoords(), i
                  }
                },
                ungroupOnCanvas: function() {
                  return this._restoreObjectsState()
                },
                setObjectsCoords: function() {
                  return this.forEachObject((function(e) {
                    e.setCoords(true)
                  })), this
                },
                _calcBounds: function(e) {
                  for (var t, n, r, i, o = [], a = [], s = ["tr", "br", "bl", "tl"], l = 0, c = this._objects.length, u = s.length; l < c; ++l) {
                    for (r = (t = this._objects[l]).calcACoords(), i = 0; i < u; i++) n = s[i], o.push(r[n].x), a.push(r[n].y);
                    t.aCoords = r
                  }
                  this._getBounds(o, a, e)
                },
                _getBounds: function(e, i, o) {
                  var a = new t.Point(n(e), n(i)),
                    s = new t.Point(r(e), r(i)),
                    l = a.y || 0,
                    c = a.x || 0,
                    u = s.x - a.x || 0,
                    h = s.y - a.y || 0;
                  this.width = u, this.height = h, o || this.setPositionByOrigin({
                    x: c,
                    y: l
                  }, "left", "top")
                },
                _toSVG: function(e) {
                  for (var t = ["<g ", "COMMON_PARTS", " >\n"], n = 0, r = this._objects.length; n < r; n++) t.push("\t\t", this._objects[n].toSVG(e));
                  return t.push("</g>\n"), t
                },
                getSvgStyles: function() {
                  var e = void 0 !== this.opacity && 1 !== this.opacity ? "opacity: " + this.opacity + ";" : "",
                    t = this.visible ? "" : " visibility: hidden;";
                  return [e, this.getSvgFilter(), t].join("")
                },
                toClipPathSVG: function(e) {
                  for (var t = [], n = 0, r = this._objects.length; n < r; n++) t.push("\t", this._objects[n].toClipPathSVG(e));
                  return this._createBaseClipPathSVGMarkup(t, {
                    reviver: e
                  })
                }
              }), t.Group.fromObject = function(e, n) {
                var r = e.objects,
                  i = t.util.object.clone(e, !0);
                delete i.objects, "string" != typeof r ? t.util.enlivenObjects(r, (function(r) {
                  t.util.enlivenObjectEnlivables(e, i, (function() {
                    n && n(new t.Group(r, i, !0))
                  }))
                })) : t.loadSVGFromURL(r, (function(o) {
                  var a = t.util.groupSVGElements(o, e, r),
                    s = i.clipPath;
                  delete i.clipPath, a.set(i), s ? t.util.enlivenObjects([s], (function(e) {
                    a.clipPath = e[0], n && n(a)
                  })) : n && n(a)
                }))
              })
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {});
              t.ActiveSelection || (t.ActiveSelection = t.util.createClass(t.Group, {
                type: "activeSelection",
                initialize: function(e, n) {
                  n = n || {}, this._objects = e || [];
                  for (var r = this._objects.length; r--;) this._objects[r].group = this;
                  n.originX && (this.originX = n.originX), n.originY && (this.originY = n.originY), this._calcBounds(), this._updateObjectsCoords(), t.Object.prototype.initialize.call(this, n), this.setCoords()
                },
                toGroup: function() {
                  var e = this._objects.concat();
                  this._objects = [];
                  var n = t.Object.prototype.toObject.call(this),
                    r = new t.Group([]);
                  if (delete n.type, r.set(n), e.forEach((function(e) {
                      e.canvas.remove(e), e.group = r
                    })), r._objects = e, !this.canvas) return r;
                  var i = this.canvas;
                  return i.add(r), i._activeObject = r, r.setCoords(), r
                },
                onDeselect: function() {
                  return this.destroy(), !1
                },
                toString: function() {
                  return "#<fabric.ActiveSelection: (" + this.complexity() + ")>"
                },
                shouldCache: function() {
                  return !1
                },
                isOnACache: function() {
                  return !1
                },
                _renderControls: function(e, t, n) {
                  e.save(), e.globalAlpha = this.isMoving ? this.borderOpacityWhenMoving : 1, this.callSuper("_renderControls", e, t), void 0 === (n = n || {}).hasControls && (n.hasControls = !1), n.forActiveSelection = !0;
                  for (var r = 0, i = this._objects.length; r < i; r++) this._objects[r]._renderControls(e, n);
                  e.restore()
                }
              }), t.ActiveSelection.fromObject = function(e, n) {
                t.util.enlivenObjects(e.objects, (function(r) {
                  delete e.objects, n && n(new t.ActiveSelection(r, e, !0))
                }))
              })
            }(e),
            function(e) {
              var t = v.util.object.extend;
              e.fabric || (e.fabric = {}), e.fabric.Image ? v.warn("fabric.Image is already defined.") : (v.Image = v.util.createClass(v.Object, {
                type: "image",
                strokeWidth: 0,
                srcFromAttribute: !1,
                _lastScaleX: 1,
                _lastScaleY: 1,
                _filterScalingX: 1,
                _filterScalingY: 1,
                minimumScaleTrigger: .5,
                stateProperties: v.Object.prototype.stateProperties.concat("cropX", "cropY"),
                cacheProperties: v.Object.prototype.cacheProperties.concat("cropX", "cropY"),
                cacheKey: "",
                cropX: 0,
                cropY: 0,
                imageSmoothing: !0,
                initialize: function(e, t) {
                  t || (t = {}), this.filters = [], this.cacheKey = "texture" + v.Object.__uid++, this.callSuper("initialize", t), this._initElement(e, t)
                },
                getElement: function() {
                  return this._element || {}
                },
                setElement: function(e, t) {
                  return this.removeTexture(this.cacheKey), this.removeTexture(this.cacheKey + "_filtered"), this._element = e, this._originalElement = e, this._initConfig(t), 0 !== this.filters.length && this.applyFilters(), this
                    .resizeFilter && this.applyResizeFilters(), this
                },
                removeTexture: function(e) {
                  var t = v.filterBackend;
                  t && t.evictCachesForKey && t.evictCachesForKey(e)
                },
                dispose: function() {
                  this.callSuper("dispose"), this.removeTexture(this.cacheKey), this.removeTexture(this.cacheKey + "_filtered"), this._cacheContext = void 0, ["_originalElement", "_element", "_filteredEl", "_cacheCanvas"].forEach(
                    function(e) {
                      v.util.cleanUpJsdomNode(this[e]), this[e] = void 0
                    }.bind(this))
                },
                getCrossOrigin: function() {
                  return this._originalElement && (this._originalElement.crossOrigin || null)
                },
                getOriginalSize: function() {
                  var e = this.getElement();
                  return {
                    width: e.naturalWidth || e.width,
                    height: e.naturalHeight || e.height
                  }
                },
                _stroke: function(e) {
                  if (this.stroke && 0 !== this.strokeWidth) {
                    var t = this.width / 2,
                      n = this.height / 2;
                    e.beginPath(), e.moveTo(-t, -n), e.lineTo(t, -n), e.lineTo(t, n), e.lineTo(-t, n), e.lineTo(-t, -n), e.closePath()
                  }
                },
                toObject: function(e) {
                  var n = [];
                  this.filters.forEach((function(e) {
                    e && n.push(e.toObject())
                  }));
                  var r = t(this.callSuper("toObject", ["cropX", "cropY"].concat(e)), {
                    src: this.getSrc(),
                    crossOrigin: this.getCrossOrigin(),
                    filters: n
                  });
                  return this.resizeFilter && (r.resizeFilter = this.resizeFilter.toObject()), r
                },
                hasCrop: function() {
                  return this.cropX || this.cropY || this.width < this._element.width || this.height < this._element.height
                },
                _toSVG: function() {
                  var e, t = [],
                    n = [],
                    r = this._element,
                    i = -this.width / 2,
                    o = -this.height / 2,
                    a = "",
                    s = "";
                  if (!r) return [];
                  if (this.hasCrop()) {
                    var l = v.Object.__uid++;
                    t.push('<clipPath id="imageCrop_' + l + '">\n', '\t<rect x="' + i + '" y="' + o + '" width="' + this.width + '" height="' + this.height + '" />\n', "</clipPath>\n"), a = ' clip-path="url(#imageCrop_' + l + ')" '
                  }
                  if (this.imageSmoothing || (s = '" image-rendering="optimizeSpeed'), n.push("\t<image ", "COMMON_PARTS", 'xlink:href="', this.getSvgSrc(!0), '" x="', i - this.cropX, '" y="', o - this.cropY, '" width="', r.width || r
                      .naturalWidth, '" height="', r.height || r.height, s, '"', a, "></image>\n"), this.stroke || this.strokeDashArray) {
                    var c = this.fill;
                    this.fill = null, e = ["\t<rect ", 'x="', i, '" y="', o, '" width="', this.width, '" height="', this.height, '" style="', this.getSvgStyles(), '"/>\n'], this.fill = c
                  }
                  return t = "fill" !== this.paintFirst ? t.concat(e, n) : t.concat(n, e)
                },
                getSrc: function(e) {
                  var t = e ? this._element : this._originalElement;
                  return t ? t.toDataURL ? t.toDataURL() : this.srcFromAttribute ? t.getAttribute("src") : t.src : this.src || ""
                },
                setSrc: function(e, t, n) {
                  return v.util.loadImage(e, (function(e, r) {
                    this.setElement(e, n), this._setWidthHeight(), t && t(this, r)
                  }), this, n && n.crossOrigin), this
                },
                toString: function() {
                  return '#<fabric.Image: { src: "' + this.getSrc() + '" }>'
                },
                applyResizeFilters: function() {
                  var e = this.resizeFilter,
                    t = this.minimumScaleTrigger,
                    n = this.getTotalObjectScaling(),
                    r = n.scaleX,
                    i = n.scaleY,
                    o = this._filteredEl || this._originalElement;
                  if (this.group && this.set("dirty", !0), !e || r > t && i > t) return this._element = o, this._filterScalingX = 1, this._filterScalingY = 1, this._lastScaleX = r, void(this._lastScaleY = i);
                  v.filterBackend || (v.filterBackend = v.initFilterBackend());
                  var a = v.util.createCanvasElement(),
                    s = this._filteredEl ? this.cacheKey + "_filtered" : this.cacheKey,
                    l = o.width,
                    c = o.height;
                  a.width = l, a.height = c, this._element = a, this._lastScaleX = e.scaleX = r, this._lastScaleY = e.scaleY = i, v.filterBackend.applyFilters([e], o, l, c, this._element, s), this._filterScalingX = a.width / this
                    ._originalElement.width, this._filterScalingY = a.height / this._originalElement.height
                },
                applyFilters: function(e) {
                  if (e = (e = e || this.filters || []).filter((function(e) {
                      return e && !e.isNeutralState()
                    })), this.set("dirty", !0), this.removeTexture(this.cacheKey + "_filtered"), 0 === e.length) return this._element = this._originalElement, this._filteredEl = null, this._filterScalingX = 1, this._filterScalingY = 1,
                    this;
                  var t = this._originalElement,
                    n = t.naturalWidth || t.width,
                    r = t.naturalHeight || t.height;
                  if (this._element === this._originalElement) {
                    var i = v.util.createCanvasElement();
                    i.width = n, i.height = r, this._element = i, this._filteredEl = i
                  } else this._element = this._filteredEl, this._filteredEl.getContext("2d").clearRect(0, 0, n, r), this._lastScaleX = 1, this._lastScaleY = 1;
                  return v.filterBackend || (v.filterBackend = v.initFilterBackend()), v.filterBackend.applyFilters(e, this._originalElement, n, r, this._element, this.cacheKey), this._originalElement.width === this._element.width && this
                    ._originalElement.height === this._element.height || (this._filterScalingX = this._element.width / this._originalElement.width, this._filterScalingY = this._element.height / this._originalElement.height), this
                },
                _render: function(e) {
                  v.util.setImageSmoothing(e, this.imageSmoothing), !0 !== this.isMoving && this.resizeFilter && this._needsResize() && this.applyResizeFilters(), this._stroke(e), this._renderPaintInOrder(e)
                },
                drawCacheOnCanvas: function(e) {
                  v.util.setImageSmoothing(e, this.imageSmoothing), v.Object.prototype.drawCacheOnCanvas.call(this, e)
                },
                shouldCache: function() {
                  return this.needsItsOwnCache()
                },
                _renderFill: function(e) {
                  var t = this._element;
                  if (t) {
                    var n = this._filterScalingX,
                      r = this._filterScalingY,
                      i = this.width,
                      o = this.height,
                      a = Math.min,
                      s = Math.max,
                      l = s(this.cropX, 0),
                      c = s(this.cropY, 0),
                      u = t.naturalWidth || t.width,
                      h = t.naturalHeight || t.height,
                      p = l * n,
                      d = c * r,
                      f = a(i * n, u - p),
                      g = a(o * r, h - d),
                      m = -i / 2,
                      v = -o / 2,
                      _ = a(i, u / n - l),
                      b = a(o, h / r - c);
                    t && e.drawImage(t, p, d, f, g, m, v, _, b)
                  }
                },
                _needsResize: function() {
                  var e = this.getTotalObjectScaling();
                  return e.scaleX !== this._lastScaleX || e.scaleY !== this._lastScaleY
                },
                _resetWidthHeight: function() {
                  this.set(this.getOriginalSize())
                },
                _initElement: function(e, t) {
                  this.setElement(v.util.getById(e), t), v.util.addClass(this.getElement(), v.Image.CSS_CANVAS)
                },
                _initConfig: function(e) {
                  e || (e = {}), this.setOptions(e), this._setWidthHeight(e)
                },
                _initFilters: function(e, t) {
                  e && e.length ? v.util.enlivenObjects(e, (function(e) {
                    t && t(e)
                  }), "fabric.Image.filters") : t && t()
                },
                _setWidthHeight: function(e) {
                  e || (e = {});
                  var t = this.getElement();
                  this.width = e.width || t.naturalWidth || t.width || 0, this.height = e.height || t.naturalHeight || t.height || 0
                },
                parsePreserveAspectRatioAttribute: function() {
                  var e, t = v.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio || ""),
                    n = this._element.width,
                    r = this._element.height,
                    i = 1,
                    o = 1,
                    a = 0,
                    s = 0,
                    l = 0,
                    c = 0,
                    u = this.width,
                    h = this.height,
                    p = {
                      width: u,
                      height: h
                    };
                  return !t || "none" === t.alignX && "none" === t.alignY ? (i = u / n, o = h / r) : ("meet" === t.meetOrSlice && (e = (u - n * (i = o = v.util.findScaleToFit(this._element, p))) / 2, "Min" === t.alignX && (a = -e),
                    "Max" === t.alignX && (a = e), e = (h - r * o) / 2, "Min" === t.alignY && (s = -e), "Max" === t.alignY && (s = e)), "slice" === t.meetOrSlice && (e = n - u / (i = o = v.util.findScaleToCover(this._element, p)),
                    "Mid" === t.alignX && (l = e / 2), "Max" === t.alignX && (l = e), e = r - h / o, "Mid" === t.alignY && (c = e / 2), "Max" === t.alignY && (c = e), n = u / i, r = h / o)), {
                    width: n,
                    height: r,
                    scaleX: i,
                    scaleY: o,
                    offsetLeft: a,
                    offsetTop: s,
                    cropX: l,
                    cropY: c
                  }
                }
              }), v.Image.CSS_CANVAS = "canvas-img", v.Image.prototype.getSvgSrc = v.Image.prototype.getSrc, v.Image.fromObject = function(e, t) {
                var n = v.util.object.clone(e);
                v.util.loadImage(n.src, (function(e, r) {
                  r ? t && t(null, !0) : v.Image.prototype._initFilters.call(n, n.filters, (function(r) {
                    n.filters = r || [], v.Image.prototype._initFilters.call(n, [n.resizeFilter], (function(r) {
                      n.resizeFilter = r[0], v.util.enlivenObjectEnlivables(n, n, (function() {
                        var r = new v.Image(e, n);
                        t(r, !1)
                      }))
                    }))
                  }))
                }), null, n.crossOrigin)
              }, v.Image.fromURL = function(e, t, n) {
                v.util.loadImage(e, (function(e, r) {
                  t && t(new v.Image(e, n), r)
                }), null, n && n.crossOrigin)
              }, v.Image.ATTRIBUTE_NAMES = v.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")), v.Image.fromElement = function(e, n, r) {
                var i = v.parseAttributes(e, v.Image.ATTRIBUTE_NAMES);
                v.Image.fromURL(i["xlink:href"], n, t(r ? v.util.object.clone(r) : {}, i))
              })
            }(e), v.util.object.extend(v.Object.prototype, {
              _getAngleValueForStraighten: function() {
                var e = this.angle % 360;
                return e > 0 ? 90 * Math.round((e - 1) / 90) : 90 * Math.round(e / 90)
              },
              straighten: function() {
                return this.rotate(this._getAngleValueForStraighten())
              },
              fxStraighten: function(e) {
                var t = function() {},
                  n = (e = e || {}).onComplete || t,
                  r = e.onChange || t,
                  i = this;
                return v.util.animate({
                  target: this,
                  startValue: this.get("angle"),
                  endValue: this._getAngleValueForStraighten(),
                  duration: this.FX_DURATION,
                  onChange: function(e) {
                    i.rotate(e), r()
                  },
                  onComplete: function() {
                    i.setCoords(), n()
                  }
                })
              }
            }), v.util.object.extend(v.StaticCanvas.prototype, {
              straightenObject: function(e) {
                return e.straighten(), this.requestRenderAll(), this
              },
              fxStraightenObject: function(e) {
                return e.fxStraighten({
                  onChange: this.requestRenderAllBound
                })
              }
            }),
            function() {
              function e(e, t) {
                var n = "precision " + t + " float;\nvoid main(){}",
                  r = e.createShader(e.FRAGMENT_SHADER);
                return e.shaderSource(r, n), e.compileShader(r), !!e.getShaderParameter(r, e.COMPILE_STATUS)
              }

              function t(e) {
                e && e.tileSize && (this.tileSize = e.tileSize), this.setupGLContext(this.tileSize, this.tileSize), this.captureGPUInfo()
              }
              v.isWebglSupported = function(t) {
                if (v.isLikelyNode) return !1;
                t = t || v.WebglFilterBackend.prototype.tileSize;
                var n = document.createElement("canvas"),
                  r = n.getContext("webgl") || n.getContext("experimental-webgl"),
                  i = !1;
                if (r) {
                  v.maxTextureSize = r.getParameter(r.MAX_TEXTURE_SIZE), i = v.maxTextureSize >= t;
                  for (var o = ["highp", "mediump", "lowp"], a = 0; a < 3; a++)
                    if (e(r, o[a])) {
                      v.webGlPrecision = o[a];
                      break
                    }
                }
                return this.isSupported = i, i
              }, v.WebglFilterBackend = t, t.prototype = {
                tileSize: 2048,
                resources: {},
                setupGLContext: function(e, t) {
                  this.dispose(), this.createWebGLCanvas(e, t), this.aPosition = new Float32Array([0, 0, 0, 1, 1, 0, 1, 1]), this.chooseFastestCopyGLTo2DMethod(e, t)
                },
                chooseFastestCopyGLTo2DMethod: function(e, t) {
                  var n, r = void 0 !== window.performance;
                  try {
                    new ImageData(1, 1), n = !0
                  } catch (e) {
                    n = !1
                  }
                  var i = "undefined" != typeof ArrayBuffer,
                    o = "undefined" != typeof Uint8ClampedArray;
                  if (r && n && i && o) {
                    var a = v.util.createCanvasElement(),
                      s = new ArrayBuffer(e * t * 4);
                    if (v.forceGLPutImageData) return this.imageBuffer = s, void(this.copyGLTo2D = y);
                    var l, c, u = {
                      imageBuffer: s,
                      destinationWidth: e,
                      destinationHeight: t,
                      targetCanvas: a
                    };
                    a.width = e, a.height = t, l = window.performance.now(), b.call(u, this.gl, u), c = window.performance.now() - l, l = window.performance.now(), y.call(u, this.gl, u), c > window.performance.now() - l ? (this.imageBuffer =
                      s, this.copyGLTo2D = y) : this.copyGLTo2D = b
                  }
                },
                createWebGLCanvas: function(e, t) {
                  var n = v.util.createCanvasElement();
                  n.width = e, n.height = t;
                  var r = {
                      alpha: !0,
                      premultipliedAlpha: !1,
                      depth: !1,
                      stencil: !1,
                      antialias: !1
                    },
                    i = n.getContext("webgl", r);
                  i || (i = n.getContext("experimental-webgl", r)), i && (i.clearColor(0, 0, 0, 0), this.canvas = n, this.gl = i)
                },
                applyFilters: function(e, t, n, r, i, o) {
                  var a, s = this.gl;
                  o && (a = this.getCachedTexture(o, t));
                  var l = {
                      originalWidth: t.width || t.originalWidth,
                      originalHeight: t.height || t.originalHeight,
                      sourceWidth: n,
                      sourceHeight: r,
                      destinationWidth: n,
                      destinationHeight: r,
                      context: s,
                      sourceTexture: this.createTexture(s, n, r, !a && t),
                      targetTexture: this.createTexture(s, n, r),
                      originalTexture: a || this.createTexture(s, n, r, !a && t),
                      passes: e.length,
                      webgl: !0,
                      aPosition: this.aPosition,
                      programCache: this.programCache,
                      pass: 0,
                      filterBackend: this,
                      targetCanvas: i
                    },
                    c = s.createFramebuffer();
                  return s.bindFramebuffer(s.FRAMEBUFFER, c), e.forEach((function(e) {
                      e && e.applyTo(l)
                    })),
                    function(e) {
                      var t = e.targetCanvas,
                        n = t.width,
                        r = t.height,
                        i = e.destinationWidth,
                        o = e.destinationHeight;
                      n === i && r === o || (t.width = i, t.height = o)
                    }(l), this.copyGLTo2D(s, l), s.bindTexture(s.TEXTURE_2D, null), s.deleteTexture(l.sourceTexture), s.deleteTexture(l.targetTexture), s.deleteFramebuffer(c), i.getContext("2d").setTransform(1, 0, 0, 1, 0, 0), l
                },
                dispose: function() {
                  this.canvas && (this.canvas = null, this.gl = null), this.clearWebGLCaches()
                },
                clearWebGLCaches: function() {
                  this.programCache = {}, this.textureCache = {}
                },
                createTexture: function(e, t, n, r, i) {
                  var o = e.createTexture();
                  return e.bindTexture(e.TEXTURE_2D, o), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MAG_FILTER, i || e.NEAREST), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MIN_FILTER, i || e.NEAREST), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_S,
                    e.CLAMP_TO_EDGE), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_T, e.CLAMP_TO_EDGE), r ? e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, e.RGBA, e.UNSIGNED_BYTE, r) : e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, t, n, 0, e.RGBA, e
                    .UNSIGNED_BYTE, null), o
                },
                getCachedTexture: function(e, t) {
                  if (this.textureCache[e]) return this.textureCache[e];
                  var n = this.createTexture(this.gl, t.width, t.height, t);
                  return this.textureCache[e] = n, n
                },
                evictCachesForKey: function(e) {
                  this.textureCache[e] && (this.gl.deleteTexture(this.textureCache[e]), delete this.textureCache[e])
                },
                copyGLTo2D: b,
                captureGPUInfo: function() {
                  if (this.gpuInfo) return this.gpuInfo;
                  var e = this.gl,
                    t = {
                      renderer: "",
                      vendor: ""
                    };
                  if (!e) return t;
                  var n = e.getExtension("WEBGL_debug_renderer_info");
                  if (n) {
                    var r = e.getParameter(n.UNMASKED_RENDERER_WEBGL),
                      i = e.getParameter(n.UNMASKED_VENDOR_WEBGL);
                    r && (t.renderer = r.toLowerCase()), i && (t.vendor = i.toLowerCase())
                  }
                  return this.gpuInfo = t, t
                }
              }
            }(),
            function() {
              var e = function() {};

              function t() {}
              v.Canvas2dFilterBackend = t, t.prototype = {
                evictCachesForKey: e,
                dispose: e,
                clearWebGLCaches: e,
                resources: {},
                applyFilters: function(e, t, n, r, i) {
                  var o = i.getContext("2d");
                  o.drawImage(t, 0, 0, n, r);
                  var a = {
                    sourceWidth: n,
                    sourceHeight: r,
                    imageData: o.getImageData(0, 0, n, r),
                    originalEl: t,
                    originalImageData: o.getImageData(0, 0, n, r),
                    canvasEl: i,
                    ctx: o,
                    filterBackend: this
                  };
                  return e.forEach((function(e) {
                    e.applyTo(a)
                  })), a.imageData.width === n && a.imageData.height === r || (i.width = a.imageData.width, i.height = a.imageData.height), o.putImageData(a.imageData, 0, 0), a
                }
              }
            }(), v.Image = v.Image || {}, v.Image.filters = v.Image.filters || {}, v.Image.filters.BaseFilter = v.util.createClass({
              type: "BaseFilter",
              vertexSource: "attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",
              fragmentSource: "precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",
              initialize: function(e) {
                e && this.setOptions(e)
              },
              setOptions: function(e) {
                for (var t in e) this[t] = e[t]
              },
              createProgram: function(e, t, n) {
                t = t || this.fragmentSource, n = n || this.vertexSource, "highp" !== v.webGlPrecision && (t = t.replace(/precision highp float/g, "precision " + v.webGlPrecision + " float"));
                var r = e.createShader(e.VERTEX_SHADER);
                if (e.shaderSource(r, n), e.compileShader(r), !e.getShaderParameter(r, e.COMPILE_STATUS)) throw new Error("Vertex shader compile error for " + this.type + ": " + e.getShaderInfoLog(r));
                var i = e.createShader(e.FRAGMENT_SHADER);
                if (e.shaderSource(i, t), e.compileShader(i), !e.getShaderParameter(i, e.COMPILE_STATUS)) throw new Error("Fragment shader compile error for " + this.type + ": " + e.getShaderInfoLog(i));
                var o = e.createProgram();
                if (e.attachShader(o, r), e.attachShader(o, i), e.linkProgram(o), !e.getProgramParameter(o, e.LINK_STATUS)) throw new Error('Shader link error for "${this.type}" ' + e.getProgramInfoLog(o));
                var a = this.getAttributeLocations(e, o),
                  s = this.getUniformLocations(e, o) || {};
                return s.uStepW = e.getUniformLocation(o, "uStepW"), s.uStepH = e.getUniformLocation(o, "uStepH"), {
                  program: o,
                  attributeLocations: a,
                  uniformLocations: s
                }
              },
              getAttributeLocations: function(e, t) {
                return {
                  aPosition: e.getAttribLocation(t, "aPosition")
                }
              },
              getUniformLocations: function() {
                return {}
              },
              sendAttributeData: function(e, t, n) {
                var r = t.aPosition,
                  i = e.createBuffer();
                e.bindBuffer(e.ARRAY_BUFFER, i), e.enableVertexAttribArray(r), e.vertexAttribPointer(r, 2, e.FLOAT, !1, 0, 0), e.bufferData(e.ARRAY_BUFFER, n, e.STATIC_DRAW)
              },
              _setupFrameBuffer: function(e) {
                var t, n, r = e.context;
                e.passes > 1 ? (t = e.destinationWidth, n = e.destinationHeight, e.sourceWidth === t && e.sourceHeight === n || (r.deleteTexture(e.targetTexture), e.targetTexture = e.filterBackend.createTexture(r, t, n)), r
                  .framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, e.targetTexture, 0)) : (r.bindFramebuffer(r.FRAMEBUFFER, null), r.finish())
              },
              _swapTextures: function(e) {
                e.passes--, e.pass++;
                var t = e.targetTexture;
                e.targetTexture = e.sourceTexture, e.sourceTexture = t
              },
              isNeutralState: function() {
                var e = this.mainParameter,
                  t = v.Image.filters[this.type].prototype;
                if (e) {
                  if (Array.isArray(t[e])) {
                    for (var n = t[e].length; n--;)
                      if (this[e][n] !== t[e][n]) return !1;
                    return !0
                  }
                  return t[e] === this[e]
                }
                return !1
              },
              applyTo: function(e) {
                e.webgl ? (this._setupFrameBuffer(e), this.applyToWebGL(e), this._swapTextures(e)) : this.applyTo2d(e)
              },
              retrieveShader: function(e) {
                return e.programCache.hasOwnProperty(this.type) || (e.programCache[this.type] = this.createProgram(e.context)), e.programCache[this.type]
              },
              applyToWebGL: function(e) {
                var t = e.context,
                  n = this.retrieveShader(e);
                0 === e.pass && e.originalTexture ? t.bindTexture(t.TEXTURE_2D, e.originalTexture) : t.bindTexture(t.TEXTURE_2D, e.sourceTexture), t.useProgram(n.program), this.sendAttributeData(t, n.attributeLocations, e.aPosition), t
                  .uniform1f(n.uniformLocations.uStepW, 1 / e.sourceWidth), t.uniform1f(n.uniformLocations.uStepH, 1 / e.sourceHeight), this.sendUniformData(t, n.uniformLocations), t.viewport(0, 0, e.destinationWidth, e.destinationHeight), t
                  .drawArrays(t.TRIANGLE_STRIP, 0, 4)
              },
              bindAdditionalTexture: function(e, t, n) {
                e.activeTexture(n), e.bindTexture(e.TEXTURE_2D, t), e.activeTexture(e.TEXTURE0)
              },
              unbindAdditionalTexture: function(e, t) {
                e.activeTexture(t), e.bindTexture(e.TEXTURE_2D, null), e.activeTexture(e.TEXTURE0)
              },
              getMainParameter: function() {
                return this[this.mainParameter]
              },
              setMainParameter: function(e) {
                this[this.mainParameter] = e
              },
              sendUniformData: function() {},
              createHelpLayer: function(e) {
                if (!e.helpLayer) {
                  var t = document.createElement("canvas");
                  t.width = e.sourceWidth, t.height = e.sourceHeight, e.helpLayer = t
                }
              },
              toObject: function() {
                var e = {
                    type: this.type
                  },
                  t = this.mainParameter;
                return t && (e[t] = this[t]), e
              },
              toJSON: function() {
                return this.toObject()
              }
            }), v.Image.filters.BaseFilter.fromObject = function(e, t) {
              var n = new v.Image.filters[e.type](e);
              return t && t(n), n
            },
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.ColorMatrix = r(n.BaseFilter, {
                type: "ColorMatrix",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",
                matrix: [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
                mainParameter: "matrix",
                colorsOnly: !0,
                initialize: function(e) {
                  this.callSuper("initialize", e), this.matrix = this.matrix.slice(0)
                },
                applyTo2d: function(e) {
                  var t, n, r, i, o, a = e.imageData.data,
                    s = a.length,
                    l = this.matrix,
                    c = this.colorsOnly;
                  for (o = 0; o < s; o += 4) t = a[o], n = a[o + 1], r = a[o + 2], c ? (a[o] = t * l[0] + n * l[1] + r * l[2] + 255 * l[4], a[o + 1] = t * l[5] + n * l[6] + r * l[7] + 255 * l[9], a[o + 2] = t * l[10] + n * l[11] + r * l[
                    12] + 255 * l[14]) : (i = a[o + 3], a[o] = t * l[0] + n * l[1] + r * l[2] + i * l[3] + 255 * l[4], a[o + 1] = t * l[5] + n * l[6] + r * l[7] + i * l[8] + 255 * l[9], a[o + 2] = t * l[10] + n * l[11] + r * l[12] + i *
                    l[13] + 255 * l[14], a[o + 3] = t * l[15] + n * l[16] + r * l[17] + i * l[18] + 255 * l[19])
                },
                getUniformLocations: function(e, t) {
                  return {
                    uColorMatrix: e.getUniformLocation(t, "uColorMatrix"),
                    uConstants: e.getUniformLocation(t, "uConstants")
                  }
                },
                sendUniformData: function(e, t) {
                  var n = this.matrix,
                    r = [n[0], n[1], n[2], n[3], n[5], n[6], n[7], n[8], n[10], n[11], n[12], n[13], n[15], n[16], n[17], n[18]],
                    i = [n[4], n[9], n[14], n[19]];
                  e.uniformMatrix4fv(t.uColorMatrix, !1, r), e.uniform4fv(t.uConstants, i)
                }
              }), t.Image.filters.ColorMatrix.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Brightness = r(n.BaseFilter, {
                type: "Brightness",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uBrightness;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += uBrightness;\ngl_FragColor = color;\n}",
                brightness: 0,
                mainParameter: "brightness",
                applyTo2d: function(e) {
                  if (0 !== this.brightness) {
                    var t, n = e.imageData.data,
                      r = n.length,
                      i = Math.round(255 * this.brightness);
                    for (t = 0; t < r; t += 4) n[t] = n[t] + i, n[t + 1] = n[t + 1] + i, n[t + 2] = n[t + 2] + i
                  }
                },
                getUniformLocations: function(e, t) {
                  return {
                    uBrightness: e.getUniformLocation(t, "uBrightness")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform1f(t.uBrightness, this.brightness)
                }
              }), t.Image.filters.Brightness.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.object.extend,
                r = t.Image.filters,
                i = t.util.createClass;
              r.Convolute = i(r.BaseFilter, {
                type: "Convolute",
                opaque: !1,
                matrix: [0, 0, 0, 0, 1, 0, 0, 0, 0],
                fragmentSource: {
                  Convolute_3_1: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n}\n}\ngl_FragColor = color;\n}",
                  Convolute_3_0: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",
                  Convolute_5_1: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n}\n}\ngl_FragColor = color;\n}",
                  Convolute_5_0: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",
                  Convolute_7_1: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n}\n}\ngl_FragColor = color;\n}",
                  Convolute_7_0: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",
                  Convolute_9_1: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n}\n}\ngl_FragColor = color;\n}",
                  Convolute_9_0: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}"
                },
                retrieveShader: function(e) {
                  var t = Math.sqrt(this.matrix.length),
                    n = this.type + "_" + t + "_" + (this.opaque ? 1 : 0),
                    r = this.fragmentSource[n];
                  return e.programCache.hasOwnProperty(n) || (e.programCache[n] = this.createProgram(e.context, r)), e.programCache[n]
                },
                applyTo2d: function(e) {
                  var t, n, r, i, o, a, s, l, c, u, h, p, d, f = e.imageData,
                    g = f.data,
                    m = this.matrix,
                    v = Math.round(Math.sqrt(m.length)),
                    _ = Math.floor(v / 2),
                    b = f.width,
                    y = f.height,
                    w = e.ctx.createImageData(b, y),
                    x = w.data,
                    k = this.opaque ? 1 : 0;
                  for (h = 0; h < y; h++)
                    for (u = 0; u < b; u++) {
                      for (o = 4 * (h * b + u), t = 0, n = 0, r = 0, i = 0, d = 0; d < v; d++)
                        for (p = 0; p < v; p++) a = u + p - _, (s = h + d - _) < 0 || s >= y || a < 0 || a >= b || (l = 4 * (s * b + a), c = m[d * v + p], t += g[l] * c, n += g[l + 1] * c, r += g[l + 2] * c, k || (i += g[l + 3] * c));
                      x[o] = t, x[o + 1] = n, x[o + 2] = r, x[o + 3] = k ? g[o + 3] : i
                    }
                  e.imageData = w
                },
                getUniformLocations: function(e, t) {
                  return {
                    uMatrix: e.getUniformLocation(t, "uMatrix"),
                    uOpaque: e.getUniformLocation(t, "uOpaque"),
                    uHalfSize: e.getUniformLocation(t, "uHalfSize"),
                    uSize: e.getUniformLocation(t, "uSize")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform1fv(t.uMatrix, this.matrix)
                },
                toObject: function() {
                  return n(this.callSuper("toObject"), {
                    opaque: this.opaque,
                    matrix: this.matrix
                  })
                }
              }), t.Image.filters.Convolute.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Grayscale = r(n.BaseFilter, {
                type: "Grayscale",
                fragmentSource: {
                  average: "precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",
                  lightness: "precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",
                  luminosity: "precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"
                },
                mode: "average",
                mainParameter: "mode",
                applyTo2d: function(e) {
                  var t, n, r = e.imageData.data,
                    i = r.length,
                    o = this.mode;
                  for (t = 0; t < i; t += 4) "average" === o ? n = (r[t] + r[t + 1] + r[t + 2]) / 3 : "lightness" === o ? n = (Math.min(r[t], r[t + 1], r[t + 2]) + Math.max(r[t], r[t + 1], r[t + 2])) / 2 : "luminosity" === o && (n = .21 *
                    r[t] + .72 * r[t + 1] + .07 * r[t + 2]), r[t] = n, r[t + 1] = n, r[t + 2] = n
                },
                retrieveShader: function(e) {
                  var t = this.type + "_" + this.mode;
                  if (!e.programCache.hasOwnProperty(t)) {
                    var n = this.fragmentSource[this.mode];
                    e.programCache[t] = this.createProgram(e.context, n)
                  }
                  return e.programCache[t]
                },
                getUniformLocations: function(e, t) {
                  return {
                    uMode: e.getUniformLocation(t, "uMode")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform1i(t.uMode, 1)
                },
                isNeutralState: function() {
                  return !1
                }
              }), t.Image.filters.Grayscale.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Invert = r(n.BaseFilter, {
                type: "Invert",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform int uInvert;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nif (uInvert == 1) {\ngl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n} else {\ngl_FragColor = color;\n}\n}",
                invert: !0,
                mainParameter: "invert",
                applyTo2d: function(e) {
                  var t, n = e.imageData.data,
                    r = n.length;
                  for (t = 0; t < r; t += 4) n[t] = 255 - n[t], n[t + 1] = 255 - n[t + 1], n[t + 2] = 255 - n[t + 2]
                },
                isNeutralState: function() {
                  return !this.invert
                },
                getUniformLocations: function(e, t) {
                  return {
                    uInvert: e.getUniformLocation(t, "uInvert")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform1i(t.uInvert, this.invert)
                }
              }), t.Image.filters.Invert.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.object.extend,
                r = t.Image.filters,
                i = t.util.createClass;
              r.Noise = i(r.BaseFilter, {
                type: "Noise",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uStepH;\nuniform float uNoise;\nuniform float uSeed;\nvarying vec2 vTexCoord;\nfloat rand(vec2 co, float seed, float vScale) {\nreturn fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n}\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\ngl_FragColor = color;\n}",
                mainParameter: "noise",
                noise: 0,
                applyTo2d: function(e) {
                  if (0 !== this.noise) {
                    var t, n, r = e.imageData.data,
                      i = r.length,
                      o = this.noise;
                    for (t = 0, i = r.length; t < i; t += 4) n = (.5 - Math.random()) * o, r[t] += n, r[t + 1] += n, r[t + 2] += n
                  }
                },
                getUniformLocations: function(e, t) {
                  return {
                    uNoise: e.getUniformLocation(t, "uNoise"),
                    uSeed: e.getUniformLocation(t, "uSeed")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform1f(t.uNoise, this.noise / 255), e.uniform1f(t.uSeed, Math.random())
                },
                toObject: function() {
                  return n(this.callSuper("toObject"), {
                    noise: this.noise
                  })
                }
              }), t.Image.filters.Noise.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Pixelate = r(n.BaseFilter, {
                type: "Pixelate",
                blocksize: 4,
                mainParameter: "blocksize",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uBlocksize;\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nfloat blockW = uBlocksize * uStepW;\nfloat blockH = uBlocksize * uStepW;\nint posX = int(vTexCoord.x / blockW);\nint posY = int(vTexCoord.y / blockH);\nfloat fposX = float(posX);\nfloat fposY = float(posY);\nvec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\nvec4 color = texture2D(uTexture, squareCoords);\ngl_FragColor = color;\n}",
                applyTo2d: function(e) {
                  var t, n, r, i, o, a, s, l, c, u, h, p = e.imageData,
                    d = p.data,
                    f = p.height,
                    g = p.width;
                  for (n = 0; n < f; n += this.blocksize)
                    for (r = 0; r < g; r += this.blocksize)
                      for (i = d[t = 4 * n * g + 4 * r], o = d[t + 1], a = d[t + 2], s = d[t + 3], u = Math.min(n + this.blocksize, f), h = Math.min(r + this.blocksize, g), l = n; l < u; l++)
                        for (c = r; c < h; c++) d[t = 4 * l * g + 4 * c] = i, d[t + 1] = o, d[t + 2] = a, d[t + 3] = s
                },
                isNeutralState: function() {
                  return 1 === this.blocksize
                },
                getUniformLocations: function(e, t) {
                  return {
                    uBlocksize: e.getUniformLocation(t, "uBlocksize"),
                    uStepW: e.getUniformLocation(t, "uStepW"),
                    uStepH: e.getUniformLocation(t, "uStepH")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform1f(t.uBlocksize, this.blocksize)
                }
              }), t.Image.filters.Pixelate.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.object.extend,
                r = t.Image.filters,
                i = t.util.createClass;
              r.RemoveColor = i(r.BaseFilter, {
                type: "RemoveColor",
                color: "#FFFFFF",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\nif(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\ngl_FragColor.a = 0.0;\n}\n}",
                distance: .02,
                useAlpha: !1,
                applyTo2d: function(e) {
                  var n, r, i, o, a = e.imageData.data,
                    s = 255 * this.distance,
                    l = new t.Color(this.color).getSource(),
                    c = [l[0] - s, l[1] - s, l[2] - s],
                    u = [l[0] + s, l[1] + s, l[2] + s];
                  for (n = 0; n < a.length; n += 4) r = a[n], i = a[n + 1], o = a[n + 2], r > c[0] && i > c[1] && o > c[2] && r < u[0] && i < u[1] && o < u[2] && (a[n + 3] = 0)
                },
                getUniformLocations: function(e, t) {
                  return {
                    uLow: e.getUniformLocation(t, "uLow"),
                    uHigh: e.getUniformLocation(t, "uHigh")
                  }
                },
                sendUniformData: function(e, n) {
                  var r = new t.Color(this.color).getSource(),
                    i = parseFloat(this.distance),
                    o = [0 + r[0] / 255 - i, 0 + r[1] / 255 - i, 0 + r[2] / 255 - i, 1],
                    a = [r[0] / 255 + i, r[1] / 255 + i, r[2] / 255 + i, 1];
                  e.uniform4fv(n.uLow, o), e.uniform4fv(n.uHigh, a)
                },
                toObject: function() {
                  return n(this.callSuper("toObject"), {
                    color: this.color,
                    distance: this.distance
                  })
                }
              }), t.Image.filters.RemoveColor.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass,
                i = {
                  Brownie: [.5997, .34553, -.27082, 0, .186, -.0377, .86095, .15059, 0, -.1449, .24113, -.07441, .44972, 0, -.02965, 0, 0, 0, 1, 0],
                  Vintage: [.62793, .32021, -.03965, 0, .03784, .02578, .64411, .03259, 0, .02926, .0466, -.08512, .52416, 0, .02023, 0, 0, 0, 1, 0],
                  Kodachrome: [1.12855, -.39673, -.03992, 0, .24991, -.16404, 1.08352, -.05498, 0, .09698, -.16786, -.56034, 1.60148, 0, .13972, 0, 0, 0, 1, 0],
                  Technicolor: [1.91252, -.85453, -.09155, 0, .04624, -.30878, 1.76589, -.10601, 0, -.27589, -.2311, -.75018, 1.84759, 0, .12137, 0, 0, 0, 1, 0],
                  Polaroid: [1.438, -.062, -.062, 0, 0, -.122, 1.378, -.122, 0, 0, -.016, -.016, 1.483, 0, 0, 0, 0, 0, 1, 0],
                  Sepia: [.393, .769, .189, 0, 0, .349, .686, .168, 0, 0, .272, .534, .131, 0, 0, 0, 0, 0, 1, 0],
                  BlackWhite: [1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 1.5, 1.5, 1.5, 0, -1, 0, 0, 0, 1, 0]
                };
              for (var o in i) n[o] = r(n.ColorMatrix, {
                type: o,
                matrix: i[o],
                mainParameter: !1,
                colorsOnly: !0
              }), t.Image.filters[o].fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric,
                n = t.Image.filters,
                r = t.util.createClass;
              n.BlendColor = r(n.BaseFilter, {
                type: "BlendColor",
                color: "#F95C63",
                mode: "multiply",
                alpha: 1,
                fragmentSource: {
                  multiply: "gl_FragColor.rgb *= uColor.rgb;\n",
                  screen: "gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\n",
                  add: "gl_FragColor.rgb += uColor.rgb;\n",
                  diff: "gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\n",
                  subtract: "gl_FragColor.rgb -= uColor.rgb;\n",
                  lighten: "gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\n",
                  darken: "gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\n",
                  exclusion: "gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\n",
                  overlay: "if (uColor.r < 0.5) {\ngl_FragColor.r *= 2.0 * uColor.r;\n} else {\ngl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\n}\nif (uColor.g < 0.5) {\ngl_FragColor.g *= 2.0 * uColor.g;\n} else {\ngl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\n}\nif (uColor.b < 0.5) {\ngl_FragColor.b *= 2.0 * uColor.b;\n} else {\ngl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\n}\n",
                  tint: "gl_FragColor.rgb *= (1.0 - uColor.a);\ngl_FragColor.rgb += uColor.rgb;\n"
                },
                buildSource: function(e) {
                  return "precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ngl_FragColor = color;\nif (color.a > 0.0) {\n" + this
                    .fragmentSource[e] + "}\n}"
                },
                retrieveShader: function(e) {
                  var t, n = this.type + "_" + this.mode;
                  return e.programCache.hasOwnProperty(n) || (t = this.buildSource(this.mode), e.programCache[n] = this.createProgram(e.context, t)), e.programCache[n]
                },
                applyTo2d: function(e) {
                  var n, r, i, o, a, s, l, c = e.imageData.data,
                    u = c.length,
                    h = 1 - this.alpha;
                  n = (l = new t.Color(this.color).getSource())[0] * this.alpha, r = l[1] * this.alpha, i = l[2] * this.alpha;
                  for (var p = 0; p < u; p += 4) switch (o = c[p], a = c[p + 1], s = c[p + 2], this.mode) {
                    case "multiply":
                      c[p] = o * n / 255, c[p + 1] = a * r / 255, c[p + 2] = s * i / 255;
                      break;
                    case "screen":
                      c[p] = 255 - (255 - o) * (255 - n) / 255, c[p + 1] = 255 - (255 - a) * (255 - r) / 255, c[p + 2] = 255 - (255 - s) * (255 - i) / 255;
                      break;
                    case "add":
                      c[p] = o + n, c[p + 1] = a + r, c[p + 2] = s + i;
                      break;
                    case "diff":
                    case "difference":
                      c[p] = Math.abs(o - n), c[p + 1] = Math.abs(a - r), c[p + 2] = Math.abs(s - i);
                      break;
                    case "subtract":
                      c[p] = o - n, c[p + 1] = a - r, c[p + 2] = s - i;
                      break;
                    case "darken":
                      c[p] = Math.min(o, n), c[p + 1] = Math.min(a, r), c[p + 2] = Math.min(s, i);
                      break;
                    case "lighten":
                      c[p] = Math.max(o, n), c[p + 1] = Math.max(a, r), c[p + 2] = Math.max(s, i);
                      break;
                    case "overlay":
                      c[p] = n < 128 ? 2 * o * n / 255 : 255 - 2 * (255 - o) * (255 - n) / 255, c[p + 1] = r < 128 ? 2 * a * r / 255 : 255 - 2 * (255 - a) * (255 - r) / 255, c[p + 2] = i < 128 ? 2 * s * i / 255 : 255 - 2 * (255 - s) * (
                        255 - i) / 255;
                      break;
                    case "exclusion":
                      c[p] = n + o - 2 * n * o / 255, c[p + 1] = r + a - 2 * r * a / 255, c[p + 2] = i + s - 2 * i * s / 255;
                      break;
                    case "tint":
                      c[p] = n + o * h, c[p + 1] = r + a * h, c[p + 2] = i + s * h
                  }
                },
                getUniformLocations: function(e, t) {
                  return {
                    uColor: e.getUniformLocation(t, "uColor")
                  }
                },
                sendUniformData: function(e, n) {
                  var r = new t.Color(this.color).getSource();
                  r[0] = this.alpha * r[0] / 255, r[1] = this.alpha * r[1] / 255, r[2] = this.alpha * r[2] / 255, r[3] = this.alpha, e.uniform4fv(n.uColor, r)
                },
                toObject: function() {
                  return {
                    type: this.type,
                    color: this.color,
                    mode: this.mode,
                    alpha: this.alpha
                  }
                }
              }), t.Image.filters.BlendColor.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric,
                n = t.Image.filters,
                r = t.util.createClass;
              n.BlendImage = r(n.BaseFilter, {
                type: "BlendImage",
                image: null,
                mode: "multiply",
                alpha: 1,
                vertexSource: "attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nuniform mat3 uTransformMatrix;\nvoid main() {\nvTexCoord = aPosition;\nvTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",
                fragmentSource: {
                  multiply: "precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.rgba *= color2.rgba;\ngl_FragColor = color;\n}",
                  mask: "precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.a = color2.a;\ngl_FragColor = color;\n}"
                },
                retrieveShader: function(e) {
                  var t = this.type + "_" + this.mode,
                    n = this.fragmentSource[this.mode];
                  return e.programCache.hasOwnProperty(t) || (e.programCache[t] = this.createProgram(e.context, n)), e.programCache[t]
                },
                applyToWebGL: function(e) {
                  var t = e.context,
                    n = this.createTexture(e.filterBackend, this.image);
                  this.bindAdditionalTexture(t, n, t.TEXTURE1), this.callSuper("applyToWebGL", e), this.unbindAdditionalTexture(t, t.TEXTURE1)
                },
                createTexture: function(e, t) {
                  return e.getCachedTexture(t.cacheKey, t._element)
                },
                calculateMatrix: function() {
                  var e = this.image,
                    t = e._element.width,
                    n = e._element.height;
                  return [1 / e.scaleX, 0, 0, 0, 1 / e.scaleY, 0, -e.left / t, -e.top / n, 1]
                },
                applyTo2d: function(e) {
                  var n, r, i, o, a, s, l, c, u, h, p, d = e.imageData,
                    f = e.filterBackend.resources,
                    g = d.data,
                    m = g.length,
                    v = d.width,
                    _ = d.height,
                    b = this.image;
                  f.blendImage || (f.blendImage = t.util.createCanvasElement()), h = (u = f.blendImage).getContext("2d"), u.width !== v || u.height !== _ ? (u.width = v, u.height = _) : h.clearRect(0, 0, v, _), h.setTransform(b.scaleX, 0,
                    0, b.scaleY, b.left, b.top), h.drawImage(b._element, 0, 0, v, _), p = h.getImageData(0, 0, v, _).data;
                  for (var y = 0; y < m; y += 4) switch (a = g[y], s = g[y + 1], l = g[y + 2], c = g[y + 3], n = p[y], r = p[y + 1], i = p[y + 2], o = p[y + 3], this.mode) {
                    case "multiply":
                      g[y] = a * n / 255, g[y + 1] = s * r / 255, g[y + 2] = l * i / 255, g[y + 3] = c * o / 255;
                      break;
                    case "mask":
                      g[y + 3] = o
                  }
                },
                getUniformLocations: function(e, t) {
                  return {
                    uTransformMatrix: e.getUniformLocation(t, "uTransformMatrix"),
                    uImage: e.getUniformLocation(t, "uImage")
                  }
                },
                sendUniformData: function(e, t) {
                  var n = this.calculateMatrix();
                  e.uniform1i(t.uImage, 1), e.uniformMatrix3fv(t.uTransformMatrix, !1, n)
                },
                toObject: function() {
                  return {
                    type: this.type,
                    image: this.image && this.image.toObject(),
                    mode: this.mode,
                    alpha: this.alpha
                  }
                }
              }), t.Image.filters.BlendImage.fromObject = function(e, n) {
                t.Image.fromObject(e.image, (function(r) {
                  var i = t.util.object.clone(e);
                  i.image = r, n(new t.Image.filters.BlendImage(i))
                }))
              }
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = Math.pow,
                r = Math.floor,
                i = Math.sqrt,
                o = Math.abs,
                a = Math.round,
                s = Math.sin,
                l = Math.ceil,
                c = t.Image.filters,
                u = t.util.createClass;
              c.Resize = u(c.BaseFilter, {
                type: "Resize",
                resizeType: "hermite",
                scaleX: 1,
                scaleY: 1,
                lanczosLobes: 3,
                getUniformLocations: function(e, t) {
                  return {
                    uDelta: e.getUniformLocation(t, "uDelta"),
                    uTaps: e.getUniformLocation(t, "uTaps")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform2fv(t.uDelta, this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height]), e.uniform1fv(t.uTaps, this.taps)
                },
                retrieveShader: function(e) {
                  var t = this.getFilterWindow(),
                    n = this.type + "_" + t;
                  if (!e.programCache.hasOwnProperty(n)) {
                    var r = this.generateShader(t);
                    e.programCache[n] = this.createProgram(e.context, r)
                  }
                  return e.programCache[n]
                },
                getFilterWindow: function() {
                  var e = this.tempScale;
                  return Math.ceil(this.lanczosLobes / e)
                },
                getTaps: function() {
                  for (var e = this.lanczosCreate(this.lanczosLobes), t = this.tempScale, n = this.getFilterWindow(), r = new Array(n), i = 1; i <= n; i++) r[i - 1] = e(i * t);
                  return r
                },
                generateShader: function(e) {
                  for (var t = new Array(e), n = this.fragmentSourceTOP, r = 1; r <= e; r++) t[r - 1] = r + ".0 * uDelta";
                  return n += "uniform float uTaps[" + e + "];\n", n += "void main() {\n", n += "  vec4 color = texture2D(uTexture, vTexCoord);\n", n += "  float sum = 1.0;\n", t.forEach((function(e, t) {
                    n += "  color += texture2D(uTexture, vTexCoord + " + e + ") * uTaps[" + t + "];\n", n += "  color += texture2D(uTexture, vTexCoord - " + e + ") * uTaps[" + t + "];\n", n += "  sum += 2.0 * uTaps[" + t + "];\n"
                  })), n += "  gl_FragColor = color / sum;\n", n += "}"
                },
                fragmentSourceTOP: "precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\n",
                applyTo: function(e) {
                  e.webgl ? (e.passes++, this.width = e.sourceWidth, this.horizontal = !0, this.dW = Math.round(this.width * this.scaleX), this.dH = e.sourceHeight, this.tempScale = this.dW / this.width, this.taps = this.getTaps(), e
                    .destinationWidth = this.dW, this._setupFrameBuffer(e), this.applyToWebGL(e), this._swapTextures(e), e.sourceWidth = e.destinationWidth, this.height = e.sourceHeight, this.horizontal = !1, this.dH = Math.round(this
                      .height * this.scaleY), this.tempScale = this.dH / this.height, this.taps = this.getTaps(), e.destinationHeight = this.dH, this._setupFrameBuffer(e), this.applyToWebGL(e), this._swapTextures(e), e.sourceHeight = e
                    .destinationHeight) : this.applyTo2d(e)
                },
                isNeutralState: function() {
                  return 1 === this.scaleX && 1 === this.scaleY
                },
                lanczosCreate: function(e) {
                  return function(t) {
                    if (t >= e || t <= -e) return 0;
                    if (t < 1.1920929e-7 && t > -1.1920929e-7) return 1;
                    var n = (t *= Math.PI) / e;
                    return s(t) / t * s(n) / n
                  }
                },
                applyTo2d: function(e) {
                  var t = e.imageData,
                    n = this.scaleX,
                    r = this.scaleY;
                  this.rcpScaleX = 1 / n, this.rcpScaleY = 1 / r;
                  var i, o = t.width,
                    s = t.height,
                    l = a(o * n),
                    c = a(s * r);
                  "sliceHack" === this.resizeType ? i = this.sliceByTwo(e, o, s, l, c) : "hermite" === this.resizeType ? i = this.hermiteFastResize(e, o, s, l, c) : "bilinear" === this.resizeType ? i = this.bilinearFiltering(e, o, s, l,
                    c) : "lanczos" === this.resizeType && (i = this.lanczosResize(e, o, s, l, c)), e.imageData = i
                },
                sliceByTwo: function(e, n, i, o, a) {
                  var s, l, c = e.imageData,
                    u = .5,
                    h = !1,
                    p = !1,
                    d = n * u,
                    f = i * u,
                    g = t.filterBackend.resources,
                    m = 0,
                    v = 0,
                    _ = n,
                    b = 0;
                  for (g.sliceByTwo || (g.sliceByTwo = document.createElement("canvas")), ((s = g.sliceByTwo).width < 1.5 * n || s.height < i) && (s.width = 1.5 * n, s.height = i), (l = s.getContext("2d")).clearRect(0, 0, 1.5 * n, i), l
                    .putImageData(c, 0, 0), o = r(o), a = r(a); !h || !p;) n = d, i = f, o < r(d * u) ? d = r(d * u) : (d = o, h = !0), a < r(f * u) ? f = r(f * u) : (f = a, p = !0), l.drawImage(s, m, v, n, i, _, b, d, f), m = _, v = b,
                    b += f;
                  return l.getImageData(m, v, o, a)
                },
                lanczosResize: function(e, t, a, s, c) {
                  var u = e.imageData.data,
                    h = e.ctx.createImageData(s, c),
                    p = h.data,
                    d = this.lanczosCreate(this.lanczosLobes),
                    f = this.rcpScaleX,
                    g = this.rcpScaleY,
                    m = 2 / this.rcpScaleX,
                    v = 2 / this.rcpScaleY,
                    _ = l(f * this.lanczosLobes / 2),
                    b = l(g * this.lanczosLobes / 2),
                    y = {},
                    w = {},
                    x = {};
                  return function e(l) {
                    var k, C, S, E, T, O, A, P, M, D, I;
                    for (w.x = (l + .5) * f, x.x = r(w.x), k = 0; k < c; k++) {
                      for (w.y = (k + .5) * g, x.y = r(w.y), T = 0, O = 0, A = 0, P = 0, M = 0, C = x.x - _; C <= x.x + _; C++)
                        if (!(C < 0 || C >= t)) {
                          D = r(1e3 * o(C - w.x)), y[D] || (y[D] = {});
                          for (var N = x.y - b; N <= x.y + b; N++) N < 0 || N >= a || (I = r(1e3 * o(N - w.y)), y[D][I] || (y[D][I] = d(i(n(D * m, 2) + n(I * v, 2)) / 1e3)), (S = y[D][I]) > 0 && (T += S, O += S * u[E = 4 * (N * t + C)],
                            A += S * u[E + 1], P += S * u[E + 2], M += S * u[E + 3]))
                        } p[E = 4 * (k * s + l)] = O / T, p[E + 1] = A / T, p[E + 2] = P / T, p[E + 3] = M / T
                    }
                    return ++l < s ? e(l) : h
                  }(0)
                },
                bilinearFiltering: function(e, t, n, i, o) {
                  var a, s, l, c, u, h, p, d, f, g = 0,
                    m = this.rcpScaleX,
                    v = this.rcpScaleY,
                    _ = 4 * (t - 1),
                    b = e.imageData.data,
                    y = e.ctx.createImageData(i, o),
                    w = y.data;
                  for (l = 0; l < o; l++)
                    for (c = 0; c < i; c++)
                      for (u = m * c - (a = r(m * c)), h = v * l - (s = r(v * l)), f = 4 * (s * t + a), p = 0; p < 4; p++) d = b[f + p] * (1 - u) * (1 - h) + b[f + 4 + p] * u * (1 - h) + b[f + _ + p] * h * (1 - u) + b[f + _ + 4 + p] * u *
                        h, w[g++] = d;
                  return y
                },
                hermiteFastResize: function(e, t, n, a, s) {
                  for (var c = this.rcpScaleX, u = this.rcpScaleY, h = l(c / 2), p = l(u / 2), d = e.imageData.data, f = e.ctx.createImageData(a, s), g = f.data, m = 0; m < s; m++)
                    for (var v = 0; v < a; v++) {
                      for (var _ = 4 * (v + m * a), b = 0, y = 0, w = 0, x = 0, k = 0, C = 0, S = 0, E = (m + .5) * u, T = r(m * u); T < (m + 1) * u; T++)
                        for (var O = o(E - (T + .5)) / p, A = (v + .5) * c, P = O * O, M = r(v * c); M < (v + 1) * c; M++) {
                          var D = o(A - (M + .5)) / h,
                            I = i(P + D * D);
                          I > 1 && I < -1 || (b = 2 * I * I * I - 3 * I * I + 1) > 0 && (S += b * d[(D = 4 * (M + T * t)) + 3], w += b, d[D + 3] < 255 && (b = b * d[D + 3] / 250), x += b * d[D], k += b * d[D + 1], C += b * d[D + 2], y += b)
                        }
                      g[_] = x / y, g[_ + 1] = k / y, g[_ + 2] = C / y, g[_ + 3] = S / w
                    }
                  return f
                },
                toObject: function() {
                  return {
                    type: this.type,
                    scaleX: this.scaleX,
                    scaleY: this.scaleY,
                    resizeType: this.resizeType,
                    lanczosLobes: this.lanczosLobes
                  }
                }
              }), t.Image.filters.Resize.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Contrast = r(n.BaseFilter, {
                type: "Contrast",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",
                contrast: 0,
                mainParameter: "contrast",
                applyTo2d: function(e) {
                  if (0 !== this.contrast) {
                    var t, n = e.imageData.data,
                      r = n.length,
                      i = Math.floor(255 * this.contrast),
                      o = 259 * (i + 255) / (255 * (259 - i));
                    for (t = 0; t < r; t += 4) n[t] = o * (n[t] - 128) + 128, n[t + 1] = o * (n[t + 1] - 128) + 128, n[t + 2] = o * (n[t + 2] - 128) + 128
                  }
                },
                getUniformLocations: function(e, t) {
                  return {
                    uContrast: e.getUniformLocation(t, "uContrast")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform1f(t.uContrast, this.contrast)
                }
              }), t.Image.filters.Contrast.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Saturation = r(n.BaseFilter, {
                type: "Saturation",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uSaturation;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat rgMax = max(color.r, color.g);\nfloat rgbMax = max(rgMax, color.b);\ncolor.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\ncolor.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\ncolor.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\ngl_FragColor = color;\n}",
                saturation: 0,
                mainParameter: "saturation",
                applyTo2d: function(e) {
                  if (0 !== this.saturation) {
                    var t, n, r = e.imageData.data,
                      i = r.length,
                      o = -this.saturation;
                    for (t = 0; t < i; t += 4) n = Math.max(r[t], r[t + 1], r[t + 2]), r[t] += n !== r[t] ? (n - r[t]) * o : 0, r[t + 1] += n !== r[t + 1] ? (n - r[t + 1]) * o : 0, r[t + 2] += n !== r[t + 2] ? (n - r[t + 2]) * o : 0
                  }
                },
                getUniformLocations: function(e, t) {
                  return {
                    uSaturation: e.getUniformLocation(t, "uSaturation")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform1f(t.uSaturation, -this.saturation)
                }
              }), t.Image.filters.Saturation.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Vibrance = r(n.BaseFilter, {
                type: "Vibrance",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform float uVibrance;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat max = max(color.r, max(color.g, color.b));\nfloat avg = (color.r + color.g + color.b) / 3.0;\nfloat amt = (abs(max - avg) * 2.0) * uVibrance;\ncolor.r += max != color.r ? (max - color.r) * amt : 0.00;\ncolor.g += max != color.g ? (max - color.g) * amt : 0.00;\ncolor.b += max != color.b ? (max - color.b) * amt : 0.00;\ngl_FragColor = color;\n}",
                vibrance: 0,
                mainParameter: "vibrance",
                applyTo2d: function(e) {
                  if (0 !== this.vibrance) {
                    var t, n, r, i, o = e.imageData.data,
                      a = o.length,
                      s = -this.vibrance;
                    for (t = 0; t < a; t += 4) n = Math.max(o[t], o[t + 1], o[t + 2]), r = (o[t] + o[t + 1] + o[t + 2]) / 3, i = 2 * Math.abs(n - r) / 255 * s, o[t] += n !== o[t] ? (n - o[t]) * i : 0, o[t + 1] += n !== o[t + 1] ? (n - o[t +
                      1]) * i : 0, o[t + 2] += n !== o[t + 2] ? (n - o[t + 2]) * i : 0
                  }
                },
                getUniformLocations: function(e, t) {
                  return {
                    uVibrance: e.getUniformLocation(t, "uVibrance")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform1f(t.uVibrance, -this.vibrance)
                }
              }), t.Image.filters.Vibrance.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Blur = r(n.BaseFilter, {
                type: "Blur",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\nconst float nSamples = 15.0;\nvec3 v3offset = vec3(12.9898, 78.233, 151.7182);\nfloat random(vec3 scale) {\nreturn fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n}\nvoid main() {\nvec4 color = vec4(0.0);\nfloat total = 0.0;\nfloat offset = random(v3offset);\nfor (float t = -nSamples; t <= nSamples; t++) {\nfloat percent = (t + offset - 0.5) / nSamples;\nfloat weight = 1.0 - abs(percent);\ncolor += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\ntotal += weight;\n}\ngl_FragColor = color / total;\n}",
                blur: 0,
                mainParameter: "blur",
                applyTo: function(e) {
                  e.webgl ? (this.aspectRatio = e.sourceWidth / e.sourceHeight, e.passes++, this._setupFrameBuffer(e), this.horizontal = !0, this.applyToWebGL(e), this._swapTextures(e), this._setupFrameBuffer(e), this.horizontal = !1, this
                    .applyToWebGL(e), this._swapTextures(e)) : this.applyTo2d(e)
                },
                applyTo2d: function(e) {
                  e.imageData = this.simpleBlur(e)
                },
                simpleBlur: function(e) {
                  var n, r, i = e.filterBackend.resources,
                    o = e.imageData.width,
                    a = e.imageData.height;
                  i.blurLayer1 || (i.blurLayer1 = t.util.createCanvasElement(), i.blurLayer2 = t.util.createCanvasElement()), n = i.blurLayer1, r = i.blurLayer2, n.width === o && n.height === a || (r.width = n.width = o, r.height = n
                    .height = a);
                  var s, l, c, u, h = n.getContext("2d"),
                    p = r.getContext("2d"),
                    d = 15,
                    f = .06 * this.blur * .5;
                  for (h.putImageData(e.imageData, 0, 0), p.clearRect(0, 0, o, a), u = -15; u <= d; u++) c = f * (l = u / d) * o + (s = (Math.random() - .5) / 4), p.globalAlpha = 1 - Math.abs(l), p.drawImage(n, c, s), h.drawImage(r, 0, 0),
                    p.globalAlpha = 1, p.clearRect(0, 0, r.width, r.height);
                  for (u = -15; u <= d; u++) c = f * (l = u / d) * a + (s = (Math.random() - .5) / 4), p.globalAlpha = 1 - Math.abs(l), p.drawImage(n, s, c), h.drawImage(r, 0, 0), p.globalAlpha = 1, p.clearRect(0, 0, r.width, r.height);
                  e.ctx.drawImage(n, 0, 0);
                  var g = e.ctx.getImageData(0, 0, n.width, n.height);
                  return h.globalAlpha = 1, h.clearRect(0, 0, n.width, n.height), g
                },
                getUniformLocations: function(e, t) {
                  return {
                    delta: e.getUniformLocation(t, "uDelta")
                  }
                },
                sendUniformData: function(e, t) {
                  var n = this.chooseRightDelta();
                  e.uniform2fv(t.delta, n)
                },
                chooseRightDelta: function() {
                  var e, t = 1,
                    n = [0, 0];
                  return this.horizontal ? this.aspectRatio > 1 && (t = 1 / this.aspectRatio) : this.aspectRatio < 1 && (t = this.aspectRatio), e = t * this.blur * .12, this.horizontal ? n[0] = e : n[1] = e, n
                }
              }), n.Blur.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Gamma = r(n.BaseFilter, {
                type: "Gamma",
                fragmentSource: "precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",
                gamma: [1, 1, 1],
                mainParameter: "gamma",
                initialize: function(e) {
                  this.gamma = [1, 1, 1], n.BaseFilter.prototype.initialize.call(this, e)
                },
                applyTo2d: function(e) {
                  var t, n = e.imageData.data,
                    r = this.gamma,
                    i = n.length,
                    o = 1 / r[0],
                    a = 1 / r[1],
                    s = 1 / r[2];
                  for (this.rVals || (this.rVals = new Uint8Array(256), this.gVals = new Uint8Array(256), this.bVals = new Uint8Array(256)), t = 0, i = 256; t < i; t++) this.rVals[t] = 255 * Math.pow(t / 255, o), this.gVals[t] = 255 * Math
                    .pow(t / 255, a), this.bVals[t] = 255 * Math.pow(t / 255, s);
                  for (t = 0, i = n.length; t < i; t += 4) n[t] = this.rVals[n[t]], n[t + 1] = this.gVals[n[t + 1]], n[t + 2] = this.bVals[n[t + 2]]
                },
                getUniformLocations: function(e, t) {
                  return {
                    uGamma: e.getUniformLocation(t, "uGamma")
                  }
                },
                sendUniformData: function(e, t) {
                  e.uniform3fv(t.uGamma, this.gamma)
                }
              }), t.Image.filters.Gamma.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.Composed = r(n.BaseFilter, {
                type: "Composed",
                subFilters: [],
                initialize: function(e) {
                  this.callSuper("initialize", e), this.subFilters = this.subFilters.slice(0)
                },
                applyTo: function(e) {
                  e.passes += this.subFilters.length - 1, this.subFilters.forEach((function(t) {
                    t.applyTo(e)
                  }))
                },
                toObject: function() {
                  return t.util.object.extend(this.callSuper("toObject"), {
                    subFilters: this.subFilters.map((function(e) {
                      return e.toObject()
                    }))
                  })
                },
                isNeutralState: function() {
                  return !this.subFilters.some((function(e) {
                    return !e.isNeutralState()
                  }))
                }
              }), t.Image.filters.Composed.fromObject = function(e, n) {
                var r = (e.subFilters || []).map((function(e) {
                    return new t.Image.filters[e.type](e)
                  })),
                  i = new t.Image.filters.Composed({
                    subFilters: r
                  });
                return n && n(i), i
              }
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.Image.filters,
                r = t.util.createClass;
              n.HueRotation = r(n.ColorMatrix, {
                type: "HueRotation",
                rotation: 0,
                mainParameter: "rotation",
                calculateMatrix: function() {
                  var e = this.rotation * Math.PI,
                    n = t.util.cos(e),
                    r = t.util.sin(e),
                    i = 1 / 3,
                    o = Math.sqrt(i) * r,
                    a = 1 - n;
                  this.matrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0], this.matrix[0] = n + a / 3, this.matrix[1] = i * a - o, this.matrix[2] = i * a + o, this.matrix[5] = i * a + o, this.matrix[6] = n + i * a, this
                    .matrix[7] = i * a - o, this.matrix[10] = i * a - o, this.matrix[11] = i * a + o, this.matrix[12] = n + i * a
                },
                isNeutralState: function(e) {
                  return this.calculateMatrix(), n.BaseFilter.prototype.isNeutralState.call(this, e)
                },
                applyTo: function(e) {
                  this.calculateMatrix(), n.BaseFilter.prototype.applyTo.call(this, e)
                }
              }), t.Image.filters.HueRotation.fromObject = t.Image.filters.BaseFilter.fromObject
            }(e),
            function(e) {
              var t = e.fabric || (e.fabric = {}),
                n = t.util.object.clone;
              if (t.Text) t.warn("fabric.Text is already defined");
              else {
                var r = "fontFamily fontWeight fontSize text underline overline linethrough textAlign fontStyle lineHeight textBackgroundColor charSpacing styles direction path pathStartOffset pathSide pathAlign".split(" ");
                t.Text = t.util.createClass(t.Object, {
                    _dimensionAffectingProps: ["fontSize", "fontWeight", "fontFamily", "fontStyle", "lineHeight", "text", "charSpacing", "textAlign", "styles", "path", "pathStartOffset", "pathSide", "pathAlign"],
                    _reNewline: /\r?\n/,
                    _reSpacesAndTabs: /[ \t\r]/g,
                    _reSpaceAndTab: /[ \t\r]/,
                    _reWords: /\S+/g,
                    type: "text",
                    fontSize: 40,
                    fontWeight: "normal",
                    fontFamily: "Times New Roman",
                    underline: !1,
                    overline: !1,
                    linethrough: !1,
                    textAlign: "left",
                    fontStyle: "normal",
                    lineHeight: 1.16,
                    superscript: {
                      size: .6,
                      baseline: -.35
                    },
                    subscript: {
                      size: .6,
                      baseline: .11
                    },
                    textBackgroundColor: "",
                    stateProperties: t.Object.prototype.stateProperties.concat(r),
                    cacheProperties: t.Object.prototype.cacheProperties.concat(r),
                    stroke: null,
                    shadow: null,
                    path: null,
                    pathStartOffset: 0,
                    pathSide: "left",
                    pathAlign: "baseline",
                    _fontSizeFraction: .222,
                    offsets: {
                      underline: .1,
                      linethrough: -.315,
                      overline: -.88
                    },
                    _fontSizeMult: 1.13,
                    charSpacing: 0,
                    styles: null,
                    _measuringContext: null,
                    deltaY: 0,
                    direction: "ltr",
                    _styleProperties: ["stroke", "strokeWidth", "fill", "fontFamily", "fontSize", "fontWeight", "fontStyle", "underline", "overline", "linethrough", "deltaY", "textBackgroundColor"],
                    __charBounds: [],
                    CACHE_FONT_SIZE: 400,
                    MIN_TEXT_WIDTH: 2,
                    initialize: function(e, t) {
                      this.styles = t && t.styles || {}, this.text = e, this.__skipDimension = !0, this.callSuper("initialize", t), this.path && this.setPathInfo(), this.__skipDimension = !1, this.initDimensions(), this.setCoords(), this
                        .setupState({
                          propertySet: "_dimensionAffectingProps"
                        })
                    },
                    setPathInfo: function() {
                      var e = this.path;
                      e && (e.segmentsInfo = t.util.getPathSegmentsInfo(e.path))
                    },
                    getMeasuringContext: function() {
                      return t._measuringContext || (t._measuringContext = this.canvas && this.canvas.contextCache || t.util.createCanvasElement().getContext("2d")), t._measuringContext
                    },
                    _splitText: function() {
                      var e = this._splitTextIntoLines(this.text);
                      return this.textLines = e.lines, this._textLines = e.graphemeLines, this._unwrappedTextLines = e._unwrappedLines, this._text = e.graphemeText, e
                    },
                    initDimensions: function() {
                      this.__skipDimension || (this._splitText(), this._clearCache(), this.path ? (this.width = this.path.width, this.height = this.path.height) : (this.width = this.calcTextWidth() || this.cursorWidth || this.MIN_TEXT_WIDTH,
                        this.height = this.calcTextHeight()), -1 !== this.textAlign.indexOf("justify") && this.enlargeSpaces(), this.saveState({
                        propertySet: "_dimensionAffectingProps"
                      }))
                    },
                    enlargeSpaces: function() {
                      for (var e, t, n, r, i, o, a, s = 0, l = this._textLines.length; s < l; s++)
                        if (("justify" === this.textAlign || s !== l - 1 && !this.isEndOfWrapping(s)) && (r = 0, i = this._textLines[s], (t = this.getLineWidth(s)) < this.width && (a = this.textLines[s].match(this._reSpacesAndTabs)))) {
                          n = a.length, e = (this.width - t) / n;
                          for (var c = 0, u = i.length; c <= u; c++) o = this.__charBounds[s][c], this._reSpaceAndTab.test(i[c]) ? (o.width += e, o.kernedWidth += e, o.left += r, r += e) : o.left += r
                        }
                    },
                    isEndOfWrapping: function(e) {
                      return e === this._textLines.length - 1
                    },
                    missingNewlineOffset: function() {
                      return 1
                    },
                    toString: function() {
                      return "#<fabric.Text (" + this.complexity() + '): { "text": "' + this.text + '", "fontFamily": "' + this.fontFamily + '" }>'
                    },
                    _getCacheCanvasDimensions: function() {
                      var e = this.callSuper("_getCacheCanvasDimensions"),
                        t = this.fontSize;
                      return e.width += t * e.zoomX, e.height += t * e.zoomY, e
                    },
                    _render: function(e) {
                      var t = this.path;
                      t && !t.isNotVisible() && t._render(e), this._setTextStyles(e), this._renderTextLinesBackground(e), this._renderTextDecoration(e, "underline"), this._renderText(e), this._renderTextDecoration(e, "overline"), this
                        ._renderTextDecoration(e, "linethrough")
                    },
                    _renderText: function(e) {
                      "stroke" === this.paintFirst ? (this._renderTextStroke(e), this._renderTextFill(e)) : (this._renderTextFill(e), this._renderTextStroke(e))
                    },
                    _setTextStyles: function(e, t, n) {
                      if (e.textBaseline = "alphabetical", this.path) switch (this.pathAlign) {
                        case "center":
                          e.textBaseline = "middle";
                          break;
                        case "ascender":
                          e.textBaseline = "top";
                          break;
                        case "descender":
                          e.textBaseline = "bottom"
                      }
                      e.font = this._getFontDeclaration(t, n)
                    },
                    calcTextWidth: function() {
                      for (var e = this.getLineWidth(0), t = 1, n = this._textLines.length; t < n; t++) {
                        var r = this.getLineWidth(t);
                        r > e && (e = r)
                      }
                      return e
                    },
                    _renderTextLine: function(e, t, n, r, i, o) {
                      this._renderChars(e, t, n, r, i, o)
                    },
                    _renderTextLinesBackground: function(e) {
                      if (this.textBackgroundColor || this.styleHas("textBackgroundColor")) {
                        for (var t, n, r, i, o, a, s, l = e.fillStyle, c = this._getLeftOffset(), u = this._getTopOffset(), h = 0, p = 0, d = this.path, f = 0, g = this._textLines.length; f < g; f++)
                          if (t = this.getHeightOfLine(f), this.textBackgroundColor || this.styleHas("textBackgroundColor", f)) {
                            r = this._textLines[f], n = this._getLineLeftOffset(f), p = 0, h = 0, i = this.getValueOfPropertyAt(f, 0, "textBackgroundColor");
                            for (var m = 0, v = r.length; m < v; m++) o = this.__charBounds[f][m], a = this.getValueOfPropertyAt(f, m, "textBackgroundColor"), d ? (e.save(), e.translate(o.renderLeft, o.renderTop), e.rotate(o.angle), e
                              .fillStyle = a, a && e.fillRect(-o.width / 2, -t / this.lineHeight * (1 - this._fontSizeFraction), o.width, t / this.lineHeight), e.restore()) : a !== i ? (s = c + n + h, "rtl" === this.direction && (s = this
                              .width - s - p), e.fillStyle = i, i && e.fillRect(s, u, p, t / this.lineHeight), h = o.left, p = o.width, i = a) : p += o.kernedWidth;
                            a && !d && (s = c + n + h, "rtl" === this.direction && (s = this.width - s - p), e.fillStyle = a, e.fillRect(s, u, p, t / this.lineHeight)), u += t
                          } else u += t;
                        e.fillStyle = l, this._removeShadow(e)
                      }
                    },
                    getFontCache: function(e) {
                      var n = e.fontFamily.toLowerCase();
                      t.charWidthsCache[n] || (t.charWidthsCache[n] = {});
                      var r = t.charWidthsCache[n],
                        i = e.fontStyle.toLowerCase() + "_" + (e.fontWeight + "").toLowerCase();
                      return r[i] || (r[i] = {}), r[i]
                    },
                    _measureChar: function(e, t, n, r) {
                      var i, o, a, s, l = this.getFontCache(t),
                        c = n + e,
                        u = this._getFontDeclaration(t) === this._getFontDeclaration(r),
                        h = t.fontSize / this.CACHE_FONT_SIZE;
                      if (n && void 0 !== l[n] && (a = l[n]), void 0 !== l[e] && (s = i = l[e]), u && void 0 !== l[c] && (s = (o = l[c]) - a), void 0 === i || void 0 === a || void 0 === o) {
                        var p = this.getMeasuringContext();
                        this._setTextStyles(p, t, !0)
                      }
                      return void 0 === i && (s = i = p.measureText(e).width, l[e] = i), void 0 === a && u && n && (a = p.measureText(n).width, l[n] = a), u && void 0 === o && (o = p.measureText(c).width, l[c] = o, s = o - a), {
                        width: i * h,
                        kernedWidth: s * h
                      }
                    },
                    getHeightOfChar: function(e, t) {
                      return this.getValueOfPropertyAt(e, t, "fontSize")
                    },
                    measureLine: function(e) {
                      var t = this._measureLine(e);
                      return 0 !== this.charSpacing && (t.width -= this._getWidthOfCharSpacing()), t.width < 0 && (t.width = 0), t
                    },
                    _measureLine: function(e) {
                      var n, r, i, o, a, s, l = 0,
                        c = this._textLines[e],
                        u = new Array(c.length),
                        h = 0,
                        p = this.path,
                        d = "right" === this.pathSide;
                      for (this.__charBounds[e] = u, n = 0; n < c.length; n++) r = c[n], o = this._getGraphemeBox(r, e, n, i), u[n] = o, l += o.kernedWidth, i = r;
                      if (u[n] = {
                          left: o ? o.left + o.width : 0,
                          width: 0,
                          kernedWidth: 0,
                          height: this.fontSize
                        }, p) {
                        switch (s = p.segmentsInfo[p.segmentsInfo.length - 1].length, (a = t.util.getPointOnPath(p.path, 0, p.segmentsInfo)).x += p.pathOffset.x, a.y += p.pathOffset.y, this.textAlign) {
                          case "left":
                            h = d ? s - l : 0;
                            break;
                          case "center":
                            h = (s - l) / 2;
                            break;
                          case "right":
                            h = d ? 0 : s - l
                        }
                        for (h += this.pathStartOffset * (d ? -1 : 1), n = d ? c.length - 1 : 0; d ? n >= 0 : n < c.length; d ? n-- : n++) o = u[n], h > s ? h %= s : h < 0 && (h += s), this._setGraphemeOnPath(h, o, a), h += o.kernedWidth
                      }
                      return {
                        width: l,
                        numOfSpaces: 0
                      }
                    },
                    _setGraphemeOnPath: function(e, n, r) {
                      var i = e + n.kernedWidth / 2,
                        o = this.path,
                        a = t.util.getPointOnPath(o.path, i, o.segmentsInfo);
                      n.renderLeft = a.x - r.x, n.renderTop = a.y - r.y, n.angle = a.angle + ("right" === this.pathSide ? Math.PI : 0)
                    },
                    _getGraphemeBox: function(e, t, n, r, i) {
                      var o, a = this.getCompleteStyleDeclaration(t, n),
                        s = r ? this.getCompleteStyleDeclaration(t, n - 1) : {},
                        l = this._measureChar(e, a, r, s),
                        c = l.kernedWidth,
                        u = l.width;
                      0 !== this.charSpacing && (u += o = this._getWidthOfCharSpacing(), c += o);
                      var h = {
                        width: u,
                        left: 0,
                        height: a.fontSize,
                        kernedWidth: c,
                        deltaY: a.deltaY
                      };
                      if (n > 0 && !i) {
                        var p = this.__charBounds[t][n - 1];
                        h.left = p.left + p.width + l.kernedWidth - l.width
                      }
                      return h
                    },
                    getHeightOfLine: function(e) {
                      if (this.__lineHeights[e]) return this.__lineHeights[e];
                      for (var t = this._textLines[e], n = this.getHeightOfChar(e, 0), r = 1, i = t.length; r < i; r++) n = Math.max(this.getHeightOfChar(e, r), n);
                      return this.__lineHeights[e] = n * this.lineHeight * this._fontSizeMult
                    },
                    calcTextHeight: function() {
                      for (var e, t = 0, n = 0, r = this._textLines.length; n < r; n++) e = this.getHeightOfLine(n), t += n === r - 1 ? e / this.lineHeight : e;
                      return t
                    },
                    _getLeftOffset: function() {
                      return "ltr" === this.direction ? -this.width / 2 : this.width / 2
                    },
                    _getTopOffset: function() {
                      return -this.height / 2
                    },
                    _renderTextCommon: function(e, t) {
                      e.save();
                      for (var n = 0, r = this._getLeftOffset(), i = this._getTopOffset(), o = 0, a = this._textLines.length; o < a; o++) {
                        var s = this.getHeightOfLine(o),
                          l = s / this.lineHeight,
                          c = this._getLineLeftOffset(o);
                        this._renderTextLine(t, e, this._textLines[o], r + c, i + n + l, o), n += s
                      }
                      e.restore()
                    },
                    _renderTextFill: function(e) {
                      (this.fill || this.styleHas("fill")) && this._renderTextCommon(e, "fillText")
                    },
                    _renderTextStroke: function(e) {
                      (this.stroke && 0 !== this.strokeWidth || !this.isEmptyStyles()) && (this.shadow && !this.shadow.affectStroke && this._removeShadow(e), e.save(), this._setLineDash(e, this.strokeDashArray), e.beginPath(), this
                        ._renderTextCommon(e, "strokeText"), e.closePath(), e.restore())
                    },
                    _renderChars: function(e, n, r, i, o, a) {
                      var s, l, c, u, h, p = this.getHeightOfLine(a),
                        d = -1 !== this.textAlign.indexOf("justify"),
                        f = "",
                        g = 0,
                        m = this.path,
                        v = !d && 0 === this.charSpacing && this.isEmptyStyles(a) && !m,
                        _ = "ltr" === this.direction,
                        b = "ltr" === this.direction ? 1 : -1,
                        y = n.canvas.getAttribute("dir");
                      if (n.save(), y !== this.direction && (n.canvas.setAttribute("dir", _ ? "ltr" : "rtl"), n.direction = _ ? "ltr" : "rtl", n.textAlign = _ ? "left" : "right"), o -= p * this._fontSizeFraction / this.lineHeight, v)
                      return this._renderChar(e, n, a, 0, r.join(""), i, o, p), void n.restore();
                      for (var w = 0, x = r.length - 1; w <= x; w++) u = w === x || this.charSpacing || m, f += r[w], c = this.__charBounds[a][w], 0 === g ? (i += b * (c.kernedWidth - c.width), g += c.width) : g += c.kernedWidth, d && !u &&
                        this._reSpaceAndTab.test(r[w]) && (u = !0), u || (s = s || this.getCompleteStyleDeclaration(a, w), l = this.getCompleteStyleDeclaration(a, w + 1), u = t.util.hasStyleChanged(s, l, !1)), u && (m ? (n.save(), n
                          .translate(c.renderLeft, c.renderTop), n.rotate(c.angle), this._renderChar(e, n, a, w, f, -g / 2, 0, p), n.restore()) : (h = i, this._renderChar(e, n, a, w, f, h, o, p)), f = "", s = l, i += b * g, g = 0);
                      n.restore()
                    },
                    _applyPatternGradientTransformText: function(e) {
                      var n, r = t.util.createCanvasElement(),
                        i = this.width + this.strokeWidth,
                        o = this.height + this.strokeWidth;
                      return r.width = i, r.height = o, (n = r.getContext("2d")).beginPath(), n.moveTo(0, 0), n.lineTo(i, 0), n.lineTo(i, o), n.lineTo(0, o), n.closePath(), n.translate(i / 2, o / 2), n.fillStyle = e.toLive(n), this
                        ._applyPatternGradientTransform(n, e), n.fill(), n.createPattern(r, "no-repeat")
                    },
                    handleFiller: function(e, t, n) {
                      var r, i;
                      return n.toLive ? "percentage" === n.gradientUnits || n.gradientTransform || n.patternTransform ? (r = -this.width / 2, i = -this.height / 2, e.translate(r, i), e[t] = this._applyPatternGradientTransformText(n), {
                        offsetX: r,
                        offsetY: i
                      }) : (e[t] = n.toLive(e, this), this._applyPatternGradientTransform(e, n)) : (e[t] = n, {
                        offsetX: 0,
                        offsetY: 0
                      })
                    },
                    _setStrokeStyles: function(e, t) {
                      return e.lineWidth = t.strokeWidth, e.lineCap = this.strokeLineCap, e.lineDashOffset = this.strokeDashOffset, e.lineJoin = this.strokeLineJoin, e.miterLimit = this.strokeMiterLimit, this.handleFiller(e, "strokeStyle", t
                        .stroke)
                    },
                    _setFillStyles: function(e, t) {
                      return this.handleFiller(e, "fillStyle", t.fill)
                    },
                    _renderChar: function(e, t, n, r, i, o, a) {
                      var s, l, c = this._getStyleDeclaration(n, r),
                        u = this.getCompleteStyleDeclaration(n, r),
                        h = "fillText" === e && u.fill,
                        p = "strokeText" === e && u.stroke && u.strokeWidth;
                      (p || h) && (t.save(), h && (s = this._setFillStyles(t, u)), p && (l = this._setStrokeStyles(t, u)), t.font = this._getFontDeclaration(u), c && c.textBackgroundColor && this._removeShadow(t), c && c.deltaY && (a += c
                        .deltaY), h && t.fillText(i, o - s.offsetX, a - s.offsetY), p && t.strokeText(i, o - l.offsetX, a - l.offsetY), t.restore())
                    },
                    setSuperscript: function(e, t) {
                      return this._setScript(e, t, this.superscript)
                    },
                    setSubscript: function(e, t) {
                      return this._setScript(e, t, this.subscript)
                    },
                    _setScript: function(e, t, n) {
                      var r = this.get2DCursorLocation(e, !0),
                        i = this.getValueOfPropertyAt(r.lineIndex, r.charIndex, "fontSize"),
                        o = this.getValueOfPropertyAt(r.lineIndex, r.charIndex, "deltaY"),
                        a = {
                          fontSize: i * n.size,
                          deltaY: o + i * n.baseline
                        };
                      return this.setSelectionStyles(a, e, t), this
                    },
                    _getLineLeftOffset: function(e) {
                      var t = this.getLineWidth(e),
                        n = this.width - t,
                        r = this.textAlign,
                        i = this.direction,
                        o = 0,
                        a = this.isEndOfWrapping(e);
                      return "justify" === r || "justify-center" === r && !a || "justify-right" === r && !a || "justify-left" === r && !a ? 0 : ("center" === r && (o = n / 2), "right" === r && (o = n), "justify-center" === r && (o = n / 2),
                        "justify-right" === r && (o = n), "rtl" === i && (o -= n), o)
                    },
                    _clearCache: function() {
                      this.__lineWidths = [], this.__lineHeights = [], this.__charBounds = []
                    },
                    _shouldClearDimensionCache: function() {
                      var e = this._forceClearCache;
                      return e || (e = this.hasStateChanged("_dimensionAffectingProps")), e && (this.dirty = !0, this._forceClearCache = !1), e
                    },
                    getLineWidth: function(e) {
                      if (void 0 !== this.__lineWidths[e]) return this.__lineWidths[e];
                      var t = this.measureLine(e).width;
                      return this.__lineWidths[e] = t, t
                    },
                    _getWidthOfCharSpacing: function() {
                      return 0 !== this.charSpacing ? this.fontSize * this.charSpacing / 1e3 : 0
                    },
                    getValueOfPropertyAt: function(e, t, n) {
                      var r = this._getStyleDeclaration(e, t);
                      return r && void 0 !== r[n] ? r[n] : this[n]
                    },
                    _renderTextDecoration: function(e, t) {
                      if (this[t] || this.styleHas(t)) {
                        for (var n, r, i, o, a, s, l, c, u, h, p, d, f, g, m, v, _ = this._getLeftOffset(), b = this._getTopOffset(), y = this.path, w = this._getWidthOfCharSpacing(), x = this.offsets[t], k = 0, C = this._textLines
                          .length; k < C; k++)
                          if (n = this.getHeightOfLine(k), this[t] || this.styleHas(t, k)) {
                            l = this._textLines[k], g = n / this.lineHeight, o = this._getLineLeftOffset(k), h = 0, p = 0, c = this.getValueOfPropertyAt(k, 0, t), v = this.getValueOfPropertyAt(k, 0, "fill"), u = b + g * (1 - this
                              ._fontSizeFraction), r = this.getHeightOfChar(k, 0), a = this.getValueOfPropertyAt(k, 0, "deltaY");
                            for (var S = 0, E = l.length; S < E; S++)
                              if (d = this.__charBounds[k][S], f = this.getValueOfPropertyAt(k, S, t), m = this.getValueOfPropertyAt(k, S, "fill"), i = this.getHeightOfChar(k, S), s = this.getValueOfPropertyAt(k, S, "deltaY"), y && f && m) e
                                .save(), e.fillStyle = v, e.translate(d.renderLeft, d.renderTop), e.rotate(d.angle), e.fillRect(-d.kernedWidth / 2, x * i + s, d.kernedWidth, this.fontSize / 15), e.restore();
                              else if ((f !== c || m !== v || i !== r || s !== a) && p > 0) {
                              var T = _ + o + h;
                              "rtl" === this.direction && (T = this.width - T - p), c && v && (e.fillStyle = v, e.fillRect(T, u + x * r + a, p, this.fontSize / 15)), h = d.left, p = d.width, c = f, v = m, r = i, a = s
                            } else p += d.kernedWidth;
                            T = _ + o + h;
                            "rtl" === this.direction && (T = this.width - T - p), e.fillStyle = m, f && m && e.fillRect(T, u + x * r + a, p - w, this.fontSize / 15), b += n
                          } else b += n;
                        this._removeShadow(e)
                      }
                    },
                    _getFontDeclaration: function(e, n) {
                      var r = e || this,
                        i = this.fontFamily,
                        o = t.Text.genericFonts.indexOf(i.toLowerCase()) > -1,
                        a = void 0 === i || i.indexOf("'") > -1 || i.indexOf(",") > -1 || i.indexOf('"') > -1 || o ? r.fontFamily : '"' + r.fontFamily + '"';
                      return [t.isLikelyNode ? r.fontWeight : r.fontStyle, t.isLikelyNode ? r.fontStyle : r.fontWeight, n ? this.CACHE_FONT_SIZE + "px" : r.fontSize + "px", a].join(" ")
                    },
                    render: function(e) {
                      this.visible && (this.canvas && this.canvas.skipOffscreen && !this.group && !this.isOnScreen() || (this._shouldClearDimensionCache() && this.initDimensions(), this.callSuper("render", e)))
                    },
                    _splitTextIntoLines: function(e) {
                      for (var n = e.split(this._reNewline), r = new Array(n.length), i = ["\n"], o = [], a = 0; a < n.length; a++) r[a] = t.util.string.graphemeSplit(n[a]), o = o.concat(r[a], i);
                      return o.pop(), {
                        _unwrappedLines: r,
                        lines: n,
                        graphemeText: o,
                        graphemeLines: r
                      }
                    },
                    toObject: function(e) {
                      var n = r.concat(e),
                        i = this.callSuper("toObject", n);
                      return i.styles = t.util.stylesToArray(this.styles, this.text), i.path && (i.path = this.path.toObject()), i
                    },
                    set: function(e, t) {
                      this.callSuper("set", e, t);
                      var n = !1,
                        r = !1;
                      if ("object" == typeof e)
                        for (var i in e) "path" === i && this.setPathInfo(), n = n || -1 !== this._dimensionAffectingProps.indexOf(i), r = r || "path" === i;
                      else n = -1 !== this._dimensionAffectingProps.indexOf(e), r = "path" === e;
                      return r && this.setPathInfo(), n && (this.initDimensions(), this.setCoords()), this
                    },
                    complexity: function() {
                      return 1
                    }
                  }), t.Text.ATTRIBUTE_NAMES = t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor".split(" ")), t.Text.DEFAULT_SVG_FONT_SIZE = 16, t.Text.fromElement =
                  function(e, r, i) {
                    if (!e) return r(null);
                    var o = t.parseAttributes(e, t.Text.ATTRIBUTE_NAMES),
                      a = o.textAnchor || "left";
                    if ((i = t.util.object.extend(i ? n(i) : {}, o)).top = i.top || 0, i.left = i.left || 0, o.textDecoration) {
                      var s = o.textDecoration; - 1 !== s.indexOf("underline") && (i.underline = !0), -1 !== s.indexOf("overline") && (i.overline = !0), -1 !== s.indexOf("line-through") && (i.linethrough = !0), delete i.textDecoration
                    }
                    "dx" in o && (i.left += o.dx), "dy" in o && (i.top += o.dy), "fontSize" in i || (i.fontSize = t.Text.DEFAULT_SVG_FONT_SIZE);
                    var l = "";
                    "textContent" in e ? l = e.textContent : "firstChild" in e && null !== e.firstChild && "data" in e.firstChild && null !== e.firstChild.data && (l = e.firstChild.data), l = l.replace(/^\s+|\s+$|\n+/g, "").replace(/\s+/g, " ");
                    var c = i.strokeWidth;
                    i.strokeWidth = 0;
                    var u = new t.Text(l, i),
                      h = u.getScaledHeight() / u.height,
                      p = ((u.height + u.strokeWidth) * u.lineHeight - u.height) * h,
                      d = u.getScaledHeight() + p,
                      f = 0;
                    "center" === a && (f = u.getScaledWidth() / 2), "right" === a && (f = u.getScaledWidth()), u.set({
                      left: u.left - f,
                      top: u.top - (d - u.fontSize * (.07 + u._fontSizeFraction)) / u.lineHeight,
                      strokeWidth: void 0 !== c ? c : 1
                    }), r(u)
                  }, t.Text.fromObject = function(e, r) {
                    var i = n(e),
                      o = e.path;
                    return delete i.path, t.Object._fromObject("Text", i, (function(n) {
                      n.styles = t.util.stylesFromArray(e.styles, e.text), o ? t.Object._fromObject("Path", o, (function(e) {
                        n.set("path", e), r(n)
                      }), "path") : r(n)
                    }), "text")
                  }, t.Text.genericFonts = ["sans-serif", "serif", "cursive", "fantasy", "monospace"], t.util.createAccessors && t.util.createAccessors(t.Text)
              }
            }(e), v.util.object.extend(v.Text.prototype, {
              isEmptyStyles: function(e) {
                if (!this.styles) return !0;
                if (void 0 !== e && !this.styles[e]) return !0;
                var t = void 0 === e ? this.styles : {
                  line: this.styles[e]
                };
                for (var n in t)
                  for (var r in t[n])
                    for (var i in t[n][r]) return !1;
                return !0
              },
              styleHas: function(e, t) {
                if (!this.styles || !e || "" === e) return !1;
                if (void 0 !== t && !this.styles[t]) return !1;
                var n = void 0 === t ? this.styles : {
                  0: this.styles[t]
                };
                for (var r in n)
                  for (var i in n[r])
                    if (void 0 !== n[r][i][e]) return !0;
                return !1
              },
              cleanStyle: function(e) {
                if (!this.styles || !e || "" === e) return !1;
                var t, n, r = this.styles,
                  i = 0,
                  o = !0,
                  a = 0;
                for (var s in r) {
                  for (var l in t = 0, r[s]) {
                    var c;
                    i++, (c = r[s][l]).hasOwnProperty(e) ? (n ? c[e] !== n && (o = !1) : n = c[e], c[e] === this[e] && delete c[e]) : o = !1, 0 !== Object.keys(c).length ? t++ : delete r[s][l]
                  }
                  0 === t && delete r[s]
                }
                for (var u = 0; u < this._textLines.length; u++) a += this._textLines[u].length;
                o && i === a && (this[e] = n, this.removeStyle(e))
              },
              removeStyle: function(e) {
                if (this.styles && e && "" !== e) {
                  var t, n, r, i = this.styles;
                  for (n in i) {
                    for (r in t = i[n]) delete t[r][e], 0 === Object.keys(t[r]).length && delete t[r];
                    0 === Object.keys(t).length && delete i[n]
                  }
                }
              },
              _extendStyles: function(e, t) {
                var n = this.get2DCursorLocation(e);
                this._getLineStyle(n.lineIndex) || this._setLineStyle(n.lineIndex), this._getStyleDeclaration(n.lineIndex, n.charIndex) || this._setStyleDeclaration(n.lineIndex, n.charIndex, {}), v.util.object.extend(this
                  ._getStyleDeclaration(n.lineIndex, n.charIndex), t)
              },
              get2DCursorLocation: function(e, t) {
                void 0 === e && (e = this.selectionStart);
                for (var n = t ? this._unwrappedTextLines : this._textLines, r = n.length, i = 0; i < r; i++) {
                  if (e <= n[i].length) return {
                    lineIndex: i,
                    charIndex: e
                  };
                  e -= n[i].length + this.missingNewlineOffset(i)
                }
                return {
                  lineIndex: i - 1,
                  charIndex: n[i - 1].length < e ? n[i - 1].length : e
                }
              },
              getSelectionStyles: function(e, t, n) {
                void 0 === e && (e = this.selectionStart || 0), void 0 === t && (t = this.selectionEnd || e);
                for (var r = [], i = e; i < t; i++) r.push(this.getStyleAtPosition(i, n));
                return r
              },
              getStyleAtPosition: function(e, t) {
                var n = this.get2DCursorLocation(e);
                return (t ? this.getCompleteStyleDeclaration(n.lineIndex, n.charIndex) : this._getStyleDeclaration(n.lineIndex, n.charIndex)) || {}
              },
              setSelectionStyles: function(e, t, n) {
                void 0 === t && (t = this.selectionStart || 0), void 0 === n && (n = this.selectionEnd || t);
                for (var r = t; r < n; r++) this._extendStyles(r, e);
                return this._forceClearCache = !0, this
              },
              _getStyleDeclaration: function(e, t) {
                var n = this.styles && this.styles[e];
                return n ? n[t] : null
              },
              getCompleteStyleDeclaration: function(e, t) {
                for (var n, r = this._getStyleDeclaration(e, t) || {}, i = {}, o = 0; o < this._styleProperties.length; o++) i[n = this._styleProperties[o]] = void 0 === r[n] ? this[n] : r[n];
                return i
              },
              _setStyleDeclaration: function(e, t, n) {
                this.styles[e][t] = n
              },
              _deleteStyleDeclaration: function(e, t) {
                delete this.styles[e][t]
              },
              _getLineStyle: function(e) {
                return !!this.styles[e]
              },
              _setLineStyle: function(e) {
                this.styles[e] = {}
              },
              _deleteLineStyle: function(e) {
                delete this.styles[e]
              }
            }),
            function() {
              function e(e) {
                e.textDecoration && (e.textDecoration.indexOf("underline") > -1 && (e.underline = !0), e.textDecoration.indexOf("line-through") > -1 && (e.linethrough = !0), e.textDecoration.indexOf("overline") > -1 && (e.overline = !0), delete e
                  .textDecoration)
              }
              v.IText = v.util.createClass(v.Text, v.Observable, {
                type: "i-text",
                selectionStart: 0,
                selectionEnd: 0,
                selectionColor: "rgba(17,119,255,0.3)",
                isEditing: !1,
                editable: !0,
                editingBorderColor: "rgba(102,153,255,0.25)",
                cursorWidth: 2,
                cursorColor: "",
                cursorDelay: 1e3,
                cursorDuration: 600,
                caching: !0,
                hiddenTextareaContainer: null,
                _reSpace: /\s|\n/,
                _currentCursorOpacity: 0,
                _selectionDirection: null,
                _abortCursorAnimation: !1,
                __widthOfSpace: [],
                inCompositionMode: !1,
                initialize: function(e, t) {
                  this.callSuper("initialize", e, t), this.initBehavior()
                },
                setSelectionStart: function(e) {
                  e = Math.max(e, 0), this._updateAndFire("selectionStart", e)
                },
                setSelectionEnd: function(e) {
                  e = Math.min(e, this.text.length), this._updateAndFire("selectionEnd", e)
                },
                _updateAndFire: function(e, t) {
                  this[e] !== t && (this._fireSelectionChanged(), this[e] = t), this._updateTextarea()
                },
                _fireSelectionChanged: function() {
                  this.fire("selection:changed"), this.canvas && this.canvas.fire("text:selection:changed", {
                    target: this
                  })
                },
                initDimensions: function() {
                  this.isEditing && this.initDelayedCursor(), this.clearContextTop(), this.callSuper("initDimensions")
                },
                render: function(e) {
                  this.clearContextTop(), this.callSuper("render", e), this.cursorOffsetCache = {}, this.renderCursorOrSelection()
                },
                _render: function(e) {
                  this.callSuper("_render", e)
                },
                clearContextTop: function(e) {
                  if (this.isEditing && this.canvas && this.canvas.contextTop) {
                    var t = this.canvas.contextTop,
                      n = this.canvas.viewportTransform;
                    t.save(), t.transform(n[0], n[1], n[2], n[3], n[4], n[5]), this.transform(t), this._clearTextArea(t), e || t.restore()
                  }
                },
                renderCursorOrSelection: function() {
                  if (this.isEditing && this.canvas && this.canvas.contextTop) {
                    var e = this._getCursorBoundaries(),
                      t = this.canvas.contextTop;
                    this.clearContextTop(!0), this.selectionStart === this.selectionEnd ? this.renderCursor(e, t) : this.renderSelection(e, t), t.restore()
                  }
                },
                _clearTextArea: function(e) {
                  var t = this.width + 4,
                    n = this.height + 4;
                  e.clearRect(-t / 2, -n / 2, t, n)
                },
                _getCursorBoundaries: function(e) {
                  void 0 === e && (e = this.selectionStart);
                  var t = this._getLeftOffset(),
                    n = this._getTopOffset(),
                    r = this._getCursorBoundariesOffsets(e);
                  return {
                    left: t,
                    top: n,
                    leftOffset: r.left,
                    topOffset: r.top
                  }
                },
                _getCursorBoundariesOffsets: function(e) {
                  if (this.cursorOffsetCache && "top" in this.cursorOffsetCache) return this.cursorOffsetCache;
                  var t, n, r, i, o = 0,
                    a = 0,
                    s = this.get2DCursorLocation(e);
                  r = s.charIndex, n = s.lineIndex;
                  for (var l = 0; l < n; l++) o += this.getHeightOfLine(l);
                  t = this._getLineLeftOffset(n);
                  var c = this.__charBounds[n][r];
                  return c && (a = c.left), 0 !== this.charSpacing && r === this._textLines[n].length && (a -= this._getWidthOfCharSpacing()), i = {
                    top: o,
                    left: t + (a > 0 ? a : 0)
                  }, "rtl" === this.direction && (i.left *= -1), this.cursorOffsetCache = i, this.cursorOffsetCache
                },
                renderCursor: function(e, t) {
                  var n = this.get2DCursorLocation(),
                    r = n.lineIndex,
                    i = n.charIndex > 0 ? n.charIndex - 1 : 0,
                    o = this.getValueOfPropertyAt(r, i, "fontSize"),
                    a = this.scaleX * this.canvas.getZoom(),
                    s = this.cursorWidth / a,
                    l = e.topOffset,
                    c = this.getValueOfPropertyAt(r, i, "deltaY");
                  l += (1 - this._fontSizeFraction) * this.getHeightOfLine(r) / this.lineHeight - o * (1 - this._fontSizeFraction), this.inCompositionMode && this.renderSelection(e, t), t.fillStyle = this.cursorColor || this
                    .getValueOfPropertyAt(r, i, "fill"), t.globalAlpha = this.__isMousedown ? 1 : this._currentCursorOpacity, t.fillRect(e.left + e.leftOffset - s / 2, l + e.top + c, s, o)
                },
                renderSelection: function(e, t) {
                  for (var n = this.inCompositionMode ? this.hiddenTextarea.selectionStart : this.selectionStart, r = this.inCompositionMode ? this.hiddenTextarea.selectionEnd : this.selectionEnd, i = -1 !== this.textAlign.indexOf(
                      "justify"), o = this.get2DCursorLocation(n), a = this.get2DCursorLocation(r), s = o.lineIndex, l = a.lineIndex, c = o.charIndex < 0 ? 0 : o.charIndex, u = a.charIndex < 0 ? 0 : a.charIndex, h = s; h <= l; h++) {
                    var p, d = this._getLineLeftOffset(h) || 0,
                      f = this.getHeightOfLine(h),
                      g = 0,
                      m = 0;
                    if (h === s && (g = this.__charBounds[s][c].left), h >= s && h < l) m = i && !this.isEndOfWrapping(h) ? this.width : this.getLineWidth(h) || 5;
                    else if (h === l)
                      if (0 === u) m = this.__charBounds[l][u].left;
                      else {
                        var v = this._getWidthOfCharSpacing();
                        m = this.__charBounds[l][u - 1].left + this.__charBounds[l][u - 1].width - v
                      } p = f, (this.lineHeight < 1 || h === l && this.lineHeight > 1) && (f /= this.lineHeight);
                    var _ = e.left + d + g,
                      b = m - g,
                      y = f,
                      w = 0;
                    this.inCompositionMode ? (t.fillStyle = this.compositionColor || "black", y = 1, w = f) : t.fillStyle = this.selectionColor, "rtl" === this.direction && (_ = this.width - _ - b), t.fillRect(_, e.top + e.topOffset + w, b,
                      y), e.topOffset += p
                  }
                },
                getCurrentCharFontSize: function() {
                  var e = this._getCurrentCharIndex();
                  return this.getValueOfPropertyAt(e.l, e.c, "fontSize")
                },
                getCurrentCharColor: function() {
                  var e = this._getCurrentCharIndex();
                  return this.getValueOfPropertyAt(e.l, e.c, "fill")
                },
                _getCurrentCharIndex: function() {
                  var e = this.get2DCursorLocation(this.selectionStart, !0),
                    t = e.charIndex > 0 ? e.charIndex - 1 : 0;
                  return {
                    l: e.lineIndex,
                    c: t
                  }
                }
              }), v.IText.fromObject = function(t, n) {
                var r = v.util.stylesFromArray(t.styles, t.text),
                  i = Object.assign({}, t, {
                    styles: r
                  });
                if (e(i), i.styles)
                  for (var o in i.styles)
                    for (var a in i.styles[o]) e(i.styles[o][a]);
                v.Object._fromObject("IText", i, n, "text")
              }
            }(), m = v.util.object.clone, v.util.object.extend(v.IText.prototype, {
              initBehavior: function() {
                this.initAddedHandler(), this.initRemovedHandler(), this.initCursorSelectionHandlers(), this.initDoubleClickSimulation(), this.mouseMoveHandler = this.mouseMoveHandler.bind(this)
              },
              onDeselect: function() {
                this.isEditing && this.exitEditing(), this.selected = !1
              },
              initAddedHandler: function() {
                var e = this;
                this.on("added", (function() {
                  var t = e.canvas;
                  t && (t._hasITextHandlers || (t._hasITextHandlers = !0, e._initCanvasHandlers(t)), t._iTextInstances = t._iTextInstances || [], t._iTextInstances.push(e))
                }))
              },
              initRemovedHandler: function() {
                var e = this;
                this.on("removed", (function() {
                  var t = e.canvas;
                  t && (t._iTextInstances = t._iTextInstances || [], v.util.removeFromArray(t._iTextInstances, e), 0 === t._iTextInstances.length && (t._hasITextHandlers = !1, e._removeCanvasHandlers(t)))
                }))
              },
              _initCanvasHandlers: function(e) {
                e._mouseUpITextHandler = function() {
                  e._iTextInstances && e._iTextInstances.forEach((function(e) {
                    e.__isMousedown = !1
                  }))
                }, e.on("mouse:up", e._mouseUpITextHandler)
              },
              _removeCanvasHandlers: function(e) {
                e.off("mouse:up", e._mouseUpITextHandler)
              },
              _tick: function() {
                this._currentTickState = this._animateCursor(this, 1, this.cursorDuration, "_onTickComplete")
              },
              _animateCursor: function(e, t, n, r) {
                var i;
                return i = {
                  isAborted: !1,
                  abort: function() {
                    this.isAborted = !0
                  }
                }, e.animate("_currentCursorOpacity", t, {
                  duration: n,
                  onComplete: function() {
                    i.isAborted || e[r]()
                  },
                  onChange: function() {
                    e.canvas && e.selectionStart === e.selectionEnd && e.renderCursorOrSelection()
                  },
                  abort: function() {
                    return i.isAborted
                  }
                }), i
              },
              _onTickComplete: function() {
                var e = this;
                this._cursorTimeout1 && clearTimeout(this._cursorTimeout1), this._cursorTimeout1 = setTimeout((function() {
                  e._currentTickCompleteState = e._animateCursor(e, 0, this.cursorDuration / 2, "_tick")
                }), 100)
              },
              initDelayedCursor: function(e) {
                var t = this,
                  n = e ? 0 : this.cursorDelay;
                this.abortCursorAnimation(), this._currentCursorOpacity = 1, this._cursorTimeout2 = setTimeout((function() {
                  t._tick()
                }), n)
              },
              abortCursorAnimation: function() {
                var e = this._currentTickState || this._currentTickCompleteState,
                  t = this.canvas;
                this._currentTickState && this._currentTickState.abort(), this._currentTickCompleteState && this._currentTickCompleteState.abort(), clearTimeout(this._cursorTimeout1), clearTimeout(this._cursorTimeout2), this
                  ._currentCursorOpacity = 0, e && t && t.clearContext(t.contextTop || t.contextContainer)
              },
              selectAll: function() {
                return this.selectionStart = 0, this.selectionEnd = this._text.length, this._fireSelectionChanged(), this._updateTextarea(), this
              },
              getSelectedText: function() {
                return this._text.slice(this.selectionStart, this.selectionEnd).join("")
              },
              findWordBoundaryLeft: function(e) {
                var t = 0,
                  n = e - 1;
                if (this._reSpace.test(this._text[n]))
                  for (; this._reSpace.test(this._text[n]);) t++, n--;
                for (;
                  /\S/.test(this._text[n]) && n > -1;) t++, n--;
                return e - t
              },
              findWordBoundaryRight: function(e) {
                var t = 0,
                  n = e;
                if (this._reSpace.test(this._text[n]))
                  for (; this._reSpace.test(this._text[n]);) t++, n++;
                for (;
                  /\S/.test(this._text[n]) && n < this._text.length;) t++, n++;
                return e + t
              },
              findLineBoundaryLeft: function(e) {
                for (var t = 0, n = e - 1; !/\n/.test(this._text[n]) && n > -1;) t++, n--;
                return e - t
              },
              findLineBoundaryRight: function(e) {
                for (var t = 0, n = e; !/\n/.test(this._text[n]) && n < this._text.length;) t++, n++;
                return e + t
              },
              searchWordBoundary: function(e, t) {
                for (var n = this._text, r = this._reSpace.test(n[e]) ? e - 1 : e, i = n[r], o = v.reNonWord; !o.test(i) && r > 0 && r < n.length;) i = n[r += t];
                return o.test(i) && (r += 1 === t ? 0 : 1), r
              },
              selectWord: function(e) {
                e = e || this.selectionStart;
                var t = this.searchWordBoundary(e, -1),
                  n = this.searchWordBoundary(e, 1);
                this.selectionStart = t, this.selectionEnd = n, this._fireSelectionChanged(), this._updateTextarea(), this.renderCursorOrSelection()
              },
              selectLine: function(e) {
                e = e || this.selectionStart;
                var t = this.findLineBoundaryLeft(e),
                  n = this.findLineBoundaryRight(e);
                return this.selectionStart = t, this.selectionEnd = n, this._fireSelectionChanged(), this._updateTextarea(), this
              },
              enterEditing: function(e) {
                if (!this.isEditing && this.editable) return this.canvas && (this.canvas.calcOffset(), this.exitEditingOnOthers(this.canvas)), this.isEditing = !0, this.initHiddenTextarea(e), this.hiddenTextarea.focus(), this.hiddenTextarea
                  .value = this.text, this._updateTextarea(), this._saveEditingProps(), this._setEditingProps(), this._textBeforeEdit = this.text, this._tick(), this.fire("editing:entered"), this._fireSelectionChanged(), this.canvas ? (this
                    .canvas.fire("text:editing:entered", {
                      target: this
                    }), this.initMouseMoveHandler(), this.canvas.requestRenderAll(), this) : this
              },
              exitEditingOnOthers: function(e) {
                e._iTextInstances && e._iTextInstances.forEach((function(e) {
                  e.selected = !1, e.isEditing && e.exitEditing()
                }))
              },
              initMouseMoveHandler: function() {
                this.canvas.on("mouse:move", this.mouseMoveHandler)
              },
              mouseMoveHandler: function(e) {
                if (this.__isMousedown && this.isEditing) {
                  document.activeElement !== this.hiddenTextarea && this.hiddenTextarea.focus();
                  var t = this.getSelectionStartFromPointer(e.e),
                    n = this.selectionStart,
                    r = this.selectionEnd;
                  (t === this.__selectionStartOnMouseDown && n !== r || n !== t && r !== t) && (t > this.__selectionStartOnMouseDown ? (this.selectionStart = this.__selectionStartOnMouseDown, this.selectionEnd = t) : (this.selectionStart = t,
                    this.selectionEnd = this.__selectionStartOnMouseDown), this.selectionStart === n && this.selectionEnd === r || (this.restartCursorIfNeeded(), this._fireSelectionChanged(), this._updateTextarea(), this
                    .renderCursorOrSelection()))
                }
              },
              _setEditingProps: function() {
                this.hoverCursor = "text", this.canvas && (this.canvas.defaultCursor = this.canvas.moveCursor = "text"), this.borderColor = this.editingBorderColor, this.hasControls = this.selectable = !1, this.lockMovementX = this
                  .lockMovementY = !0
              },
              fromStringToGraphemeSelection: function(e, t, n) {
                var r = n.slice(0, e),
                  i = v.util.string.graphemeSplit(r).length;
                if (e === t) return {
                  selectionStart: i,
                  selectionEnd: i
                };
                var o = n.slice(e, t);
                return {
                  selectionStart: i,
                  selectionEnd: i + v.util.string.graphemeSplit(o).length
                }
              },
              fromGraphemeToStringSelection: function(e, t, n) {
                var r = n.slice(0, e).join("").length;
                return e === t ? {
                  selectionStart: r,
                  selectionEnd: r
                } : {
                  selectionStart: r,
                  selectionEnd: r + n.slice(e, t).join("").length
                }
              },
              _updateTextarea: function() {
                if (this.cursorOffsetCache = {}, this.hiddenTextarea) {
                  if (!this.inCompositionMode) {
                    var e = this.fromGraphemeToStringSelection(this.selectionStart, this.selectionEnd, this._text);
                    this.hiddenTextarea.selectionStart = e.selectionStart, this.hiddenTextarea.selectionEnd = e.selectionEnd
                  }
                  this.updateTextareaPosition()
                }
              },
              updateFromTextArea: function() {
                if (this.hiddenTextarea) {
                  this.cursorOffsetCache = {}, this.text = this.hiddenTextarea.value, this._shouldClearDimensionCache() && (this.initDimensions(), this.setCoords());
                  var e = this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart, this.hiddenTextarea.selectionEnd, this.hiddenTextarea.value);
                  this.selectionEnd = this.selectionStart = e.selectionEnd, this.inCompositionMode || (this.selectionStart = e.selectionStart), this.updateTextareaPosition()
                }
              },
              updateTextareaPosition: function() {
                if (this.selectionStart === this.selectionEnd) {
                  var e = this._calcTextareaPosition();
                  this.hiddenTextarea.style.left = e.left, this.hiddenTextarea.style.top = e.top
                }
              },
              _calcTextareaPosition: function() {
                if (!this.canvas) return {
                  x: 1,
                  y: 1
                };
                var e = this.inCompositionMode ? this.compositionStart : this.selectionStart,
                  t = this._getCursorBoundaries(e),
                  n = this.get2DCursorLocation(e),
                  r = n.lineIndex,
                  i = n.charIndex,
                  o = this.getValueOfPropertyAt(r, i, "fontSize") * this.lineHeight,
                  a = t.leftOffset,
                  s = this.calcTransformMatrix(),
                  l = {
                    x: t.left + a,
                    y: t.top + t.topOffset + o
                  },
                  c = this.canvas.getRetinaScaling(),
                  u = this.canvas.upperCanvasEl,
                  h = u.width / c,
                  p = u.height / c,
                  d = h - o,
                  f = p - o,
                  g = u.clientWidth / h,
                  m = u.clientHeight / p;
                return l = v.util.transformPoint(l, s), (l = v.util.transformPoint(l, this.canvas.viewportTransform)).x *= g, l.y *= m, l.x < 0 && (l.x = 0), l.x > d && (l.x = d), l.y < 0 && (l.y = 0), l.y > f && (l.y = f), l.x += this.canvas
                  ._offset.left, l.y += this.canvas._offset.top, {
                    left: l.x + "px",
                    top: l.y + "px",
                    fontSize: o + "px",
                    charHeight: o
                  }
              },
              _saveEditingProps: function() {
                this._savedProps = {
                  hasControls: this.hasControls,
                  borderColor: this.borderColor,
                  lockMovementX: this.lockMovementX,
                  lockMovementY: this.lockMovementY,
                  hoverCursor: this.hoverCursor,
                  selectable: this.selectable,
                  defaultCursor: this.canvas && this.canvas.defaultCursor,
                  moveCursor: this.canvas && this.canvas.moveCursor
                }
              },
              _restoreEditingProps: function() {
                this._savedProps && (this.hoverCursor = this._savedProps.hoverCursor, this.hasControls = this._savedProps.hasControls, this.borderColor = this._savedProps.borderColor, this.selectable = this._savedProps.selectable, this
                  .lockMovementX = this._savedProps.lockMovementX, this.lockMovementY = this._savedProps.lockMovementY, this.canvas && (this.canvas.defaultCursor = this._savedProps.defaultCursor, this.canvas.moveCursor = this._savedProps
                    .moveCursor))
              },
              exitEditing: function() {
                var e = this._textBeforeEdit !== this.text,
                  t = this.hiddenTextarea;
                return this.selected = !1, this.isEditing = !1, this.selectionEnd = this.selectionStart, t && (t.blur && t.blur(), t.parentNode && t.parentNode.removeChild(t)), this.hiddenTextarea = null, this.abortCursorAnimation(), this
                  ._restoreEditingProps(), this._currentCursorOpacity = 0, this._shouldClearDimensionCache() && (this.initDimensions(), this.setCoords()), this.fire("editing:exited"), e && this.fire("modified"), this.canvas && (this.canvas
                    .off("mouse:move", this.mouseMoveHandler), this.canvas.fire("text:editing:exited", {
                      target: this
                    }), e && this.canvas.fire("object:modified", {
                      target: this
                    })), this
              },
              _removeExtraneousStyles: function() {
                for (var e in this.styles) this._textLines[e] || delete this.styles[e]
              },
              removeStyleFromTo: function(e, t) {
                var n, r, i = this.get2DCursorLocation(e, !0),
                  o = this.get2DCursorLocation(t, !0),
                  a = i.lineIndex,
                  s = i.charIndex,
                  l = o.lineIndex,
                  c = o.charIndex;
                if (a !== l) {
                  if (this.styles[a])
                    for (n = s; n < this._unwrappedTextLines[a].length; n++) delete this.styles[a][n];
                  if (this.styles[l])
                    for (n = c; n < this._unwrappedTextLines[l].length; n++)(r = this.styles[l][n]) && (this.styles[a] || (this.styles[a] = {}), this.styles[a][s + n - c] = r);
                  for (n = a + 1; n <= l; n++) delete this.styles[n];
                  this.shiftLineStyles(l, a - l)
                } else if (this.styles[a]) {
                  r = this.styles[a];
                  var u, h, p = c - s;
                  for (n = s; n < c; n++) delete r[n];
                  for (h in this.styles[a])(u = parseInt(h, 10)) >= c && (r[u - p] = r[h], delete r[h])
                }
              },
              shiftLineStyles: function(e, t) {
                var n = m(this.styles);
                for (var r in this.styles) {
                  var i = parseInt(r, 10);
                  i > e && (this.styles[i + t] = n[i], n[i - t] || delete this.styles[i])
                }
              },
              restartCursorIfNeeded: function() {
                this._currentTickState && !this._currentTickState.isAborted && this._currentTickCompleteState && !this._currentTickCompleteState.isAborted || this.initDelayedCursor()
              },
              insertNewlineStyleObject: function(e, t, n, r) {
                var i, o = {},
                  a = !1,
                  s = this._unwrappedTextLines[e].length === t;
                for (var l in n || (n = 1), this.shiftLineStyles(e, n), this.styles[e] && (i = this.styles[e][0 === t ? t : t - 1]), this.styles[e]) {
                  var c = parseInt(l, 10);
                  c >= t && (a = !0, o[c - t] = this.styles[e][l], s && 0 === t || delete this.styles[e][l])
                }
                var u = !1;
                for (a && !s && (this.styles[e + n] = o, u = !0), u && n--; n > 0;) r && r[n - 1] ? this.styles[e + n] = {
                  0: m(r[n - 1])
                } : i ? this.styles[e + n] = {
                  0: m(i)
                } : delete this.styles[e + n], n--;
                this._forceClearCache = !0
              },
              insertCharStyleObject: function(e, t, n, r) {
                this.styles || (this.styles = {});
                var i = this.styles[e],
                  o = i ? m(i) : {};
                for (var a in n || (n = 1), o) {
                  var s = parseInt(a, 10);
                  s >= t && (i[s + n] = o[s], o[s - n] || delete i[s])
                }
                if (this._forceClearCache = !0, r)
                  for (; n--;) Object.keys(r[n]).length && (this.styles[e] || (this.styles[e] = {}), this.styles[e][t + n] = m(r[n]));
                else if (i)
                  for (var l = i[t ? t - 1 : 1]; l && n--;) this.styles[e][t + n] = m(l)
              },
              insertNewStyleBlock: function(e, t, n) {
                for (var r = this.get2DCursorLocation(t, !0), i = [0], o = 0, a = 0; a < e.length; a++) "\n" === e[a] ? i[++o] = 0 : i[o]++;
                for (i[0] > 0 && (this.insertCharStyleObject(r.lineIndex, r.charIndex, i[0], n), n = n && n.slice(i[0] + 1)), o && this.insertNewlineStyleObject(r.lineIndex, r.charIndex + i[0], o), a = 1; a < o; a++) i[a] > 0 ? this
                  .insertCharStyleObject(r.lineIndex + a, 0, i[a], n) : n && this.styles[r.lineIndex + a] && n[0] && (this.styles[r.lineIndex + a][0] = n[0]), n = n && n.slice(i[a] + 1);
                i[a] > 0 && this.insertCharStyleObject(r.lineIndex + a, 0, i[a], n)
              },
              setSelectionStartEndWithShift: function(e, t, n) {
                n <= e ? (t === e ? this._selectionDirection = "left" : "right" === this._selectionDirection && (this._selectionDirection = "left", this.selectionEnd = e), this.selectionStart = n) : n > e && n < t ? "right" === this
                  ._selectionDirection ? this.selectionEnd = n : this.selectionStart = n : (t === e ? this._selectionDirection = "right" : "left" === this._selectionDirection && (this._selectionDirection = "right", this.selectionStart = t),
                    this.selectionEnd = n)
              },
              setSelectionInBoundaries: function() {
                var e = this.text.length;
                this.selectionStart > e ? this.selectionStart = e : this.selectionStart < 0 && (this.selectionStart = 0), this.selectionEnd > e ? this.selectionEnd = e : this.selectionEnd < 0 && (this.selectionEnd = 0)
              }
            }), v.util.object.extend(v.IText.prototype, {
              initDoubleClickSimulation: function() {
                this.__lastClickTime = +new Date, this.__lastLastClickTime = +new Date, this.__lastPointer = {}, this.on("mousedown", this.onMouseDown)
              },
              onMouseDown: function(e) {
                if (this.canvas) {
                  this.__newClickTime = +new Date;
                  var t = e.pointer;
                  this.isTripleClick(t) && (this.fire("tripleclick", e), this._stopEvent(e.e)), this.__lastLastClickTime = this.__lastClickTime, this.__lastClickTime = this.__newClickTime, this.__lastPointer = t, this.__lastIsEditing = this
                    .isEditing, this.__lastSelected = this.selected
                }
              },
              isTripleClick: function(e) {
                return this.__newClickTime - this.__lastClickTime < 500 && this.__lastClickTime - this.__lastLastClickTime < 500 && this.__lastPointer.x === e.x && this.__lastPointer.y === e.y
              },
              _stopEvent: function(e) {
                e.preventDefault && e.preventDefault(), e.stopPropagation && e.stopPropagation()
              },
              initCursorSelectionHandlers: function() {
                this.initMousedownHandler(), this.initMouseupHandler(), this.initClicks()
              },
              doubleClickHandler: function(e) {
                this.isEditing && this.selectWord(this.getSelectionStartFromPointer(e.e))
              },
              tripleClickHandler: function(e) {
                this.isEditing && this.selectLine(this.getSelectionStartFromPointer(e.e))
              },
              initClicks: function() {
                this.on("mousedblclick", this.doubleClickHandler), this.on("tripleclick", this.tripleClickHandler)
              },
              _mouseDownHandler: function(e) {
                !this.canvas || !this.editable || e.e.button && 1 !== e.e.button || (this.__isMousedown = !0, this.selected && (this.inCompositionMode = !1, this.setCursorByClick(e.e)), this.isEditing && (this.__selectionStartOnMouseDown =
                  this.selectionStart, this.selectionStart === this.selectionEnd && this.abortCursorAnimation(), this.renderCursorOrSelection()))
              },
              _mouseDownHandlerBefore: function(e) {
                !this.canvas || !this.editable || e.e.button && 1 !== e.e.button || (this.selected = this === this.canvas._activeObject)
              },
              initMousedownHandler: function() {
                this.on("mousedown", this._mouseDownHandler), this.on("mousedown:before", this._mouseDownHandlerBefore)
              },
              initMouseupHandler: function() {
                this.on("mouseup", this.mouseUpHandler)
              },
              mouseUpHandler: function(e) {
                if (this.__isMousedown = !1, !(!this.editable || this.group || e.transform && e.transform.actionPerformed || e.e.button && 1 !== e.e.button)) {
                  if (this.canvas) {
                    var t = this.canvas._activeObject;
                    if (t && t !== this) return
                  }
                  this.__lastSelected && !this.__corner ? (this.selected = !1, this.__lastSelected = !1, this.enterEditing(e.e), this.selectionStart === this.selectionEnd ? this.initDelayedCursor(!0) : this.renderCursorOrSelection()) : this
                    .selected = !0
                }
              },
              setCursorByClick: function(e) {
                var t = this.getSelectionStartFromPointer(e),
                  n = this.selectionStart,
                  r = this.selectionEnd;
                e.shiftKey ? this.setSelectionStartEndWithShift(n, r, t) : (this.selectionStart = t, this.selectionEnd = t), this.isEditing && (this._fireSelectionChanged(), this._updateTextarea())
              },
              getSelectionStartFromPointer: function(e) {
                for (var t, n = this.getLocalPointer(e), r = 0, i = 0, o = 0, a = 0, s = 0, l = 0, c = this._textLines.length; l < c && o <= n.y; l++) o += this.getHeightOfLine(l) * this.scaleY, s = l, l > 0 && (a += this._textLines[l - 1]
                  .length + this.missingNewlineOffset(l - 1));
                i = this._getLineLeftOffset(s) * this.scaleX, t = this._textLines[s], "rtl" === this.direction && (n.x = this.width * this.scaleX - n.x + i);
                for (var u = 0, h = t.length; u < h && (r = i, (i += this.__charBounds[s][u].kernedWidth * this.scaleX) <= n.x); u++) a++;
                return this._getNewSelectionStartFromOffset(n, r, i, a, h)
              },
              _getNewSelectionStartFromOffset: function(e, t, n, r, i) {
                var o = e.x - t,
                  a = n - e.x,
                  s = r + (a > o || a < 0 ? 0 : 1);
                return this.flipX && (s = i - s), s > this._text.length && (s = this._text.length), s
              }
            }), v.util.object.extend(v.IText.prototype, {
              initHiddenTextarea: function() {
                this.hiddenTextarea = v.document.createElement("textarea"), this.hiddenTextarea.setAttribute("autocapitalize", "off"), this.hiddenTextarea.setAttribute("autocorrect", "off"), this.hiddenTextarea.setAttribute("autocomplete",
                  "off"), this.hiddenTextarea.setAttribute("spellcheck", "false"), this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea", ""), this.hiddenTextarea.setAttribute("wrap", "off");
                var e = this._calcTextareaPosition();
                this.hiddenTextarea.style.cssText = "position: absolute; top: " + e.top + "; left: " + e.left + "; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding-top: " + e.fontSize + ";", this
                  .hiddenTextareaContainer ? this.hiddenTextareaContainer.appendChild(this.hiddenTextarea) : v.document.body.appendChild(this.hiddenTextarea), v.util.addListener(this.hiddenTextarea, "keydown", this.onKeyDown.bind(this)), v
                  .util.addListener(this.hiddenTextarea, "keyup", this.onKeyUp.bind(this)), v.util.addListener(this.hiddenTextarea, "input", this.onInput.bind(this)), v.util.addListener(this.hiddenTextarea, "copy", this.copy.bind(this)), v
                  .util.addListener(this.hiddenTextarea, "cut", this.copy.bind(this)), v.util.addListener(this.hiddenTextarea, "paste", this.paste.bind(this)), v.util.addListener(this.hiddenTextarea, "compositionstart", this
                    .onCompositionStart.bind(this)), v.util.addListener(this.hiddenTextarea, "compositionupdate", this.onCompositionUpdate.bind(this)), v.util.addListener(this.hiddenTextarea, "compositionend", this.onCompositionEnd.bind(
                    this)), !this._clickHandlerInitialized && this.canvas && (v.util.addListener(this.canvas.upperCanvasEl, "click", this.onClick.bind(this)), this._clickHandlerInitialized = !0)
              },
              keysMap: {
                9: "exitEditing",
                27: "exitEditing",
                33: "moveCursorUp",
                34: "moveCursorDown",
                35: "moveCursorRight",
                36: "moveCursorLeft",
                37: "moveCursorLeft",
                38: "moveCursorUp",
                39: "moveCursorRight",
                40: "moveCursorDown"
              },
              keysMapRtl: {
                9: "exitEditing",
                27: "exitEditing",
                33: "moveCursorUp",
                34: "moveCursorDown",
                35: "moveCursorLeft",
                36: "moveCursorRight",
                37: "moveCursorRight",
                38: "moveCursorUp",
                39: "moveCursorLeft",
                40: "moveCursorDown"
              },
              ctrlKeysMapUp: {
                67: "copy",
                88: "cut"
              },
              ctrlKeysMapDown: {
                65: "selectAll"
              },
              onClick: function() {
                this.hiddenTextarea && this.hiddenTextarea.focus()
              },
              onKeyDown: function(e) {
                if (this.isEditing) {
                  var t = "rtl" === this.direction ? this.keysMapRtl : this.keysMap;
                  if (e.keyCode in t) this[t[e.keyCode]](e);
                  else {
                    if (!(e.keyCode in this.ctrlKeysMapDown) || !e.ctrlKey && !e.metaKey) return;
                    this[this.ctrlKeysMapDown[e.keyCode]](e)
                  }
                  e.stopImmediatePropagation(), e.preventDefault(), e.keyCode >= 33 && e.keyCode <= 40 ? (this.inCompositionMode = !1, this.clearContextTop(), this.renderCursorOrSelection()) : this.canvas && this.canvas.requestRenderAll()
                }
              },
              onKeyUp: function(e) {
                !this.isEditing || this._copyDone || this.inCompositionMode ? this._copyDone = !1 : e.keyCode in this.ctrlKeysMapUp && (e.ctrlKey || e.metaKey) && (this[this.ctrlKeysMapUp[e.keyCode]](e), e.stopImmediatePropagation(), e
                  .preventDefault(), this.canvas && this.canvas.requestRenderAll())
              },
              onInput: function(e) {
                var t = this.fromPaste;
                if (this.fromPaste = !1, e && e.stopPropagation(), this.isEditing) {
                  var n, r, i, o, a, s = this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,
                    l = this._text.length,
                    c = s.length,
                    u = c - l,
                    h = this.selectionStart,
                    p = this.selectionEnd,
                    d = h !== p;
                  if ("" === this.hiddenTextarea.value) return this.styles = {}, this.updateFromTextArea(), this.fire("changed"), void(this.canvas && (this.canvas.fire("text:changed", {
                    target: this
                  }), this.canvas.requestRenderAll()));
                  var f = this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart, this.hiddenTextarea.selectionEnd, this.hiddenTextarea.value),
                    g = h > f.selectionStart;
                  d ? (n = this._text.slice(h, p), u += p - h) : c < l && (n = g ? this._text.slice(p + u, p) : this._text.slice(h, h - u)), r = s.slice(f.selectionEnd - u, f.selectionEnd), n && n.length && (r.length && (i = this
                    .getSelectionStyles(h, h + 1, !1), i = r.map((function() {
                      return i[0]
                    }))), d ? (o = h, a = p) : g ? (o = p - n.length, a = p) : (o = p, a = p + n.length), this.removeStyleFromTo(o, a)), r.length && (t && r.join("") === v.copiedText && !v.disableStyleCopyPaste && (i = v.copiedTextStyle),
                    this.insertNewStyleBlock(r, h, i)), this.updateFromTextArea(), this.fire("changed"), this.canvas && (this.canvas.fire("text:changed", {
                    target: this
                  }), this.canvas.requestRenderAll())
                }
              },
              onCompositionStart: function() {
                this.inCompositionMode = !0
              },
              onCompositionEnd: function() {
                this.inCompositionMode = !1
              },
              onCompositionUpdate: function(e) {
                this.compositionStart = e.target.selectionStart, this.compositionEnd = e.target.selectionEnd, this.updateTextareaPosition()
              },
              copy: function() {
                this.selectionStart !== this.selectionEnd && (v.copiedText = this.getSelectedText(), v.disableStyleCopyPaste ? v.copiedTextStyle = null : v.copiedTextStyle = this.getSelectionStyles(this.selectionStart, this.selectionEnd, !0),
                  this._copyDone = !0)
              },
              paste: function() {
                this.fromPaste = !0
              },
              _getClipboardData: function(e) {
                return e && e.clipboardData || v.window.clipboardData
              },
              _getWidthBeforeCursor: function(e, t) {
                var n, r = this._getLineLeftOffset(e);
                return t > 0 && (r += (n = this.__charBounds[e][t - 1]).left + n.width), r
              },
              getDownCursorOffset: function(e, t) {
                var n = this._getSelectionForOffset(e, t),
                  r = this.get2DCursorLocation(n),
                  i = r.lineIndex;
                if (i === this._textLines.length - 1 || e.metaKey || 34 === e.keyCode) return this._text.length - n;
                var o = r.charIndex,
                  a = this._getWidthBeforeCursor(i, o),
                  s = this._getIndexOnLine(i + 1, a);
                return this._textLines[i].slice(o).length + s + 1 + this.missingNewlineOffset(i)
              },
              _getSelectionForOffset: function(e, t) {
                return e.shiftKey && this.selectionStart !== this.selectionEnd && t ? this.selectionEnd : this.selectionStart
              },
              getUpCursorOffset: function(e, t) {
                var n = this._getSelectionForOffset(e, t),
                  r = this.get2DCursorLocation(n),
                  i = r.lineIndex;
                if (0 === i || e.metaKey || 33 === e.keyCode) return -n;
                var o = r.charIndex,
                  a = this._getWidthBeforeCursor(i, o),
                  s = this._getIndexOnLine(i - 1, a),
                  l = this._textLines[i].slice(0, o),
                  c = this.missingNewlineOffset(i - 1);
                return -this._textLines[i - 1].length + s - l.length + (1 - c)
              },
              _getIndexOnLine: function(e, t) {
                for (var n, r, i = this._textLines[e], o = this._getLineLeftOffset(e), a = 0, s = 0, l = i.length; s < l; s++)
                  if ((o += n = this.__charBounds[e][s].width) > t) {
                    r = !0;
                    var c = o - n,
                      u = o,
                      h = Math.abs(c - t);
                    a = Math.abs(u - t) < h ? s : s - 1;
                    break
                  } return r || (a = i.length - 1), a
              },
              moveCursorDown: function(e) {
                this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length || this._moveCursorUpOrDown("Down", e)
              },
              moveCursorUp: function(e) {
                0 === this.selectionStart && 0 === this.selectionEnd || this._moveCursorUpOrDown("Up", e)
              },
              _moveCursorUpOrDown: function(e, t) {
                var n = this["get" + e + "CursorOffset"](t, "right" === this._selectionDirection);
                t.shiftKey ? this.moveCursorWithShift(n) : this.moveCursorWithoutShift(n), 0 !== n && (this.setSelectionInBoundaries(), this.abortCursorAnimation(), this._currentCursorOpacity = 1, this.initDelayedCursor(), this
                  ._fireSelectionChanged(), this._updateTextarea())
              },
              moveCursorWithShift: function(e) {
                var t = "left" === this._selectionDirection ? this.selectionStart + e : this.selectionEnd + e;
                return this.setSelectionStartEndWithShift(this.selectionStart, this.selectionEnd, t), 0 !== e
              },
              moveCursorWithoutShift: function(e) {
                return e < 0 ? (this.selectionStart += e, this.selectionEnd = this.selectionStart) : (this.selectionEnd += e, this.selectionStart = this.selectionEnd), 0 !== e
              },
              moveCursorLeft: function(e) {
                0 === this.selectionStart && 0 === this.selectionEnd || this._moveCursorLeftOrRight("Left", e)
              },
              _move: function(e, t, n) {
                var r;
                if (e.altKey) r = this["findWordBoundary" + n](this[t]);
                else {
                  if (!e.metaKey && 35 !== e.keyCode && 36 !== e.keyCode) return this[t] += "Left" === n ? -1 : 1, !0;
                  r = this["findLineBoundary" + n](this[t])
                }
                if (void 0 !== r && this[t] !== r) return this[t] = r, !0
              },
              _moveLeft: function(e, t) {
                return this._move(e, t, "Left")
              },
              _moveRight: function(e, t) {
                return this._move(e, t, "Right")
              },
              moveCursorLeftWithoutShift: function(e) {
                var t = !0;
                return this._selectionDirection = "left", this.selectionEnd === this.selectionStart && 0 !== this.selectionStart && (t = this._moveLeft(e, "selectionStart")), this.selectionEnd = this.selectionStart, t
              },
              moveCursorLeftWithShift: function(e) {
                return "right" === this._selectionDirection && this.selectionStart !== this.selectionEnd ? this._moveLeft(e, "selectionEnd") : 0 !== this.selectionStart ? (this._selectionDirection = "left", this._moveLeft(e,
                  "selectionStart")) : void 0
              },
              moveCursorRight: function(e) {
                this.selectionStart >= this._text.length && this.selectionEnd >= this._text.length || this._moveCursorLeftOrRight("Right", e)
              },
              _moveCursorLeftOrRight: function(e, t) {
                var n = "moveCursor" + e + "With";
                this._currentCursorOpacity = 1, t.shiftKey ? n += "Shift" : n += "outShift", this[n](t) && (this.abortCursorAnimation(), this.initDelayedCursor(), this._fireSelectionChanged(), this._updateTextarea())
              },
              moveCursorRightWithShift: function(e) {
                return "left" === this._selectionDirection && this.selectionStart !== this.selectionEnd ? this._moveRight(e, "selectionStart") : this.selectionEnd !== this._text.length ? (this._selectionDirection = "right", this._moveRight(e,
                  "selectionEnd")) : void 0
              },
              moveCursorRightWithoutShift: function(e) {
                var t = !0;
                return this._selectionDirection = "right", this.selectionStart === this.selectionEnd ? (t = this._moveRight(e, "selectionStart"), this.selectionEnd = this.selectionStart) : this.selectionStart = this.selectionEnd, t
              },
              removeChars: function(e, t) {
                void 0 === t && (t = e + 1), this.removeStyleFromTo(e, t), this._text.splice(e, t - e), this.text = this._text.join(""), this.set("dirty", !0), this._shouldClearDimensionCache() && (this.initDimensions(), this.setCoords()),
                  this._removeExtraneousStyles()
              },
              insertChars: function(e, t, n, r) {
                void 0 === r && (r = n), r > n && this.removeStyleFromTo(n, r);
                var i = v.util.string.graphemeSplit(e);
                this.insertNewStyleBlock(i, n, t), this._text = [].concat(this._text.slice(0, n), i, this._text.slice(r)), this.text = this._text.join(""), this.set("dirty", !0), this._shouldClearDimensionCache() && (this.initDimensions(),
                  this.setCoords()), this._removeExtraneousStyles()
              }
            }),
            function() {
              var e = v.util.toFixed,
                t = /  +/g;
              v.util.object.extend(v.Text.prototype, {
                _toSVG: function() {
                  var e = this._getSVGLeftTopOffsets(),
                    t = this._getSVGTextAndBg(e.textTop, e.textLeft);
                  return this._wrapSVGTextAndBg(t)
                },
                toSVG: function(e) {
                  return this._createBaseSVGMarkup(this._toSVG(), {
                    reviver: e,
                    noStyle: !0,
                    withShadow: !0
                  })
                },
                _getSVGLeftTopOffsets: function() {
                  return {
                    textLeft: -this.width / 2,
                    textTop: -this.height / 2,
                    lineTop: this.getHeightOfLine(0)
                  }
                },
                _wrapSVGTextAndBg: function(e) {
                  var t = this.getSvgTextDecoration(this);
                  return [e.textBgRects.join(""), '\t\t<text xml:space="preserve" ', this.fontFamily ? 'font-family="' + this.fontFamily.replace(/"/g, "'") + '" ' : "", this.fontSize ? 'font-size="' + this.fontSize + '" ' : "", this
                    .fontStyle ? 'font-style="' + this.fontStyle + '" ' : "", this.fontWeight ? 'font-weight="' + this.fontWeight + '" ' : "", t ? 'text-decoration="' + t + '" ' : "", 'style="', this.getSvgStyles(!0), '"', this
                    .addPaintOrder(), " >", e.textSpans.join(""), "</text>\n"
                  ]
                },
                _getSVGTextAndBg: function(e, t) {
                  var n, r = [],
                    i = [],
                    o = e;
                  this._setSVGBg(i);
                  for (var a = 0, s = this._textLines.length; a < s; a++) n = this._getLineLeftOffset(a), (this.textBackgroundColor || this.styleHas("textBackgroundColor", a)) && this._setSVGTextLineBg(i, a, t + n, o), this
                    ._setSVGTextLineText(r, a, t + n, o), o += this.getHeightOfLine(a);
                  return {
                    textSpans: r,
                    textBgRects: i
                  }
                },
                _createTextCharSpan: function(n, r, i, o) {
                  var a = n !== n.trim() || n.match(t),
                    s = this.getSvgSpanStyles(r, a),
                    l = s ? 'style="' + s + '"' : "",
                    c = r.deltaY,
                    u = "",
                    h = v.Object.NUM_FRACTION_DIGITS;
                  return c && (u = ' dy="' + e(c, h) + '" '), ['<tspan x="', e(i, h), '" y="', e(o, h), '" ', u, l, ">", v.util.string.escapeXml(n), "</tspan>"].join("")
                },
                _setSVGTextLineText: function(e, t, n, r) {
                  var i, o, a, s, l, c = this.getHeightOfLine(t),
                    u = -1 !== this.textAlign.indexOf("justify"),
                    h = "",
                    p = 0,
                    d = this._textLines[t];
                  r += c * (1 - this._fontSizeFraction) / this.lineHeight;
                  for (var f = 0, g = d.length - 1; f <= g; f++) l = f === g || this.charSpacing, h += d[f], a = this.__charBounds[t][f], 0 === p ? (n += a.kernedWidth - a.width, p += a.width) : p += a.kernedWidth, u && !l && this
                    ._reSpaceAndTab.test(d[f]) && (l = !0), l || (i = i || this.getCompleteStyleDeclaration(t, f), o = this.getCompleteStyleDeclaration(t, f + 1), l = v.util.hasStyleChanged(i, o, !0)), l && (s = this._getStyleDeclaration(t,
                      f) || {}, e.push(this._createTextCharSpan(h, s, n, r)), h = "", i = o, n += p, p = 0)
                },
                _pushTextBgRect: function(t, n, r, i, o, a) {
                  var s = v.Object.NUM_FRACTION_DIGITS;
                  t.push("\t\t<rect ", this._getFillAttributes(n), ' x="', e(r, s), '" y="', e(i, s), '" width="', e(o, s), '" height="', e(a, s), '"></rect>\n')
                },
                _setSVGTextLineBg: function(e, t, n, r) {
                  for (var i, o, a = this._textLines[t], s = this.getHeightOfLine(t) / this.lineHeight, l = 0, c = 0, u = this.getValueOfPropertyAt(t, 0, "textBackgroundColor"), h = 0, p = a.length; h < p; h++) i = this.__charBounds[t][h],
                    (o = this.getValueOfPropertyAt(t, h, "textBackgroundColor")) !== u ? (u && this._pushTextBgRect(e, u, n + c, r, l, s), c = i.left, l = i.width, u = o) : l += i.kernedWidth;
                  o && this._pushTextBgRect(e, o, n + c, r, l, s)
                },
                _getFillAttributes: function(e) {
                  var t = e && "string" == typeof e ? new v.Color(e) : "";
                  return t && t.getSource() && 1 !== t.getAlpha() ? 'opacity="' + t.getAlpha() + '" fill="' + t.setAlpha(1).toRgb() + '"' : 'fill="' + e + '"'
                },
                _getSVGLineTopOffset: function(e) {
                  for (var t, n = 0, r = 0; r < e; r++) n += this.getHeightOfLine(r);
                  return t = this.getHeightOfLine(r), {
                    lineTop: n,
                    offset: (this._fontSizeMult - this._fontSizeFraction) * t / (this.lineHeight * this._fontSizeMult)
                  }
                },
                getSvgStyles: function(e) {
                  return v.Object.prototype.getSvgStyles.call(this, e) + " white-space: pre;"
                }
              })
            }(),
            function(e) {
              var t = e.fabric || (e.fabric = {});
              t.Textbox = t.util.createClass(t.IText, t.Observable, {
                type: "textbox",
                minWidth: 20,
                dynamicMinWidth: 2,
                __cachedLines: null,
                lockScalingFlip: !0,
                noScaleCache: !1,
                _dimensionAffectingProps: t.Text.prototype._dimensionAffectingProps.concat("width"),
                _wordJoiners: /[ \t\r]/,
                splitByGrapheme: !1,
                initDimensions: function() {
                  this.__skipDimension || (this.isEditing && this.initDelayedCursor(), this.clearContextTop(), this._clearCache(), this.dynamicMinWidth = 0, this._styleMap = this._generateStyleMap(this._splitText()), this.dynamicMinWidth >
                    this.width && this._set("width", this.dynamicMinWidth), -1 !== this.textAlign.indexOf("justify") && this.enlargeSpaces(), this.height = this.calcTextHeight(), this.saveState({
                      propertySet: "_dimensionAffectingProps"
                    }))
                },
                _generateStyleMap: function(e) {
                  for (var t = 0, n = 0, r = 0, i = {}, o = 0; o < e.graphemeLines.length; o++) "\n" === e.graphemeText[r] && o > 0 ? (n = 0, r++, t++) : !this.splitByGrapheme && this._reSpaceAndTab.test(e.graphemeText[r]) && o > 0 && (n++,
                    r++), i[o] = {
                    line: t,
                    offset: n
                  }, r += e.graphemeLines[o].length, n += e.graphemeLines[o].length;
                  return i
                },
                styleHas: function(e, n) {
                  if (this._styleMap && !this.isWrapping) {
                    var r = this._styleMap[n];
                    r && (n = r.line)
                  }
                  return t.Text.prototype.styleHas.call(this, e, n)
                },
                isEmptyStyles: function(e) {
                  if (!this.styles) return !0;
                  var t, n, r = 0,
                    i = !1,
                    o = this._styleMap[e],
                    a = this._styleMap[e + 1];
                  for (var s in o && (e = o.line, r = o.offset), a && (i = a.line === e, t = a.offset), n = void 0 === e ? this.styles : {
                      line: this.styles[e]
                    })
                    for (var l in n[s])
                      if (l >= r && (!i || l < t))
                        for (var c in n[s][l]) return !1;
                  return !0
                },
                _getStyleDeclaration: function(e, t) {
                  if (this._styleMap && !this.isWrapping) {
                    var n = this._styleMap[e];
                    if (!n) return null;
                    e = n.line, t = n.offset + t
                  }
                  return this.callSuper("_getStyleDeclaration", e, t)
                },
                _setStyleDeclaration: function(e, t, n) {
                  var r = this._styleMap[e];
                  e = r.line, t = r.offset + t, this.styles[e][t] = n
                },
                _deleteStyleDeclaration: function(e, t) {
                  var n = this._styleMap[e];
                  e = n.line, t = n.offset + t, delete this.styles[e][t]
                },
                _getLineStyle: function(e) {
                  var t = this._styleMap[e];
                  return !!this.styles[t.line]
                },
                _setLineStyle: function(e) {
                  var t = this._styleMap[e];
                  this.styles[t.line] = {}
                },
                _wrapText: function(e, t) {
                  var n, r = [];
                  for (this.isWrapping = !0, n = 0; n < e.length; n++) r = r.concat(this._wrapLine(e[n], n, t));
                  return this.isWrapping = !1, r
                },
                _measureWord: function(e, t, n) {
                  var r, i = 0;
                  n = n || 0;
                  for (var o = 0, a = e.length; o < a; o++) {
                    i += this._getGraphemeBox(e[o], t, o + n, r, true).kernedWidth, r = e[o]
                  }
                  return i
                },
                _wrapLine: function(e, n, r, i) {
                  var o = 0,
                    a = this.splitByGrapheme,
                    s = [],
                    l = [],
                    c = a ? t.util.string.graphemeSplit(e) : e.split(this._wordJoiners),
                    u = "",
                    h = 0,
                    p = a ? "" : " ",
                    d = 0,
                    f = 0,
                    g = 0,
                    m = !0,
                    v = this._getWidthOfCharSpacing();
                  i = i || 0;
                  0 === c.length && c.push([]), r -= i;
                  for (var _ = 0; _ < c.length; _++) u = a ? c[_] : t.util.string.graphemeSplit(c[_]), d = this._measureWord(u, n, h), h += u.length, (o += f + d - v) > r && !m ? (s.push(l), l = [], o = d, m = !0) : o += v, m || a || l
                    .push(p), l = l.concat(u), f = a ? 0 : this._measureWord([p], n, h), h++, m = !1, d > g && (g = d);
                  return _ && s.push(l), g + i > this.dynamicMinWidth && (this.dynamicMinWidth = g - v + i), s
                },
                isEndOfWrapping: function(e) {
                  return !this._styleMap[e + 1] || this._styleMap[e + 1].line !== this._styleMap[e].line
                },
                missingNewlineOffset: function(e) {
                  return this.splitByGrapheme ? this.isEndOfWrapping(e) ? 1 : 0 : 1
                },
                _splitTextIntoLines: function(e) {
                  for (var n = t.Text.prototype._splitTextIntoLines.call(this, e), r = this._wrapText(n.lines, this.width), i = new Array(r.length), o = 0; o < r.length; o++) i[o] = r[o].join("");
                  return n.lines = i, n.graphemeLines = r, n
                },
                getMinWidth: function() {
                  return Math.max(this.minWidth, this.dynamicMinWidth)
                },
                _removeExtraneousStyles: function() {
                  var e = {};
                  for (var t in this._styleMap) this._textLines[t] && (e[this._styleMap[t].line] = 1);
                  for (var t in this.styles) e[t] || delete this.styles[t]
                },
                toObject: function(e) {
                  return this.callSuper("toObject", ["minWidth", "splitByGrapheme"].concat(e))
                }
              }), t.Textbox.fromObject = function(e, n) {
                var r = t.util.stylesFromArray(e.styles, e.text),
                  i = Object.assign({}, e, {
                    styles: r
                  });
                return t.Object._fromObject("Textbox", i, n, "text")
              }
            }(e),
            function() {
              var e = v.controlsUtils,
                t = e.scaleSkewCursorStyleHandler,
                n = e.scaleCursorStyleHandler,
                r = e.scalingEqually,
                i = e.scalingYOrSkewingX,
                o = e.scalingXOrSkewingY,
                a = e.scaleOrSkewActionName,
                s = v.Object.prototype.controls;
              if (s.ml = new v.Control({
                  x: -.5,
                  y: 0,
                  cursorStyleHandler: t,
                  actionHandler: o,
                  getActionName: a
                }), s.mr = new v.Control({
                  x: .5,
                  y: 0,
                  cursorStyleHandler: t,
                  actionHandler: o,
                  getActionName: a
                }), s.mb = new v.Control({
                  x: 0,
                  y: .5,
                  cursorStyleHandler: t,
                  actionHandler: i,
                  getActionName: a
                }), s.mt = new v.Control({
                  x: 0,
                  y: -.5,
                  cursorStyleHandler: t,
                  actionHandler: i,
                  getActionName: a
                }), s.tl = new v.Control({
                  x: -.5,
                  y: -.5,
                  cursorStyleHandler: n,
                  actionHandler: r
                }), s.tr = new v.Control({
                  x: .5,
                  y: -.5,
                  cursorStyleHandler: n,
                  actionHandler: r
                }), s.bl = new v.Control({
                  x: -.5,
                  y: .5,
                  cursorStyleHandler: n,
                  actionHandler: r
                }), s.br = new v.Control({
                  x: .5,
                  y: .5,
                  cursorStyleHandler: n,
                  actionHandler: r
                }), s.mtr = new v.Control({
                  x: 0,
                  y: -.5,
                  actionHandler: e.rotationWithSnapping,
                  cursorStyleHandler: e.rotationStyleHandler,
                  offsetY: -40,
                  withConnection: !0,
                  actionName: "rotate"
                }), v.Textbox) {
                var l = v.Textbox.prototype.controls = {};
                l.mtr = s.mtr, l.tr = s.tr, l.br = s.br, l.tl = s.tl, l.bl = s.bl, l.mt = s.mt, l.mb = s.mb, l.mr = new v.Control({
                  x: .5,
                  y: 0,
                  actionHandler: e.changeWidth,
                  cursorStyleHandler: t,
                  actionName: "resizing"
                }), l.ml = new v.Control({
                  x: -.5,
                  y: 0,
                  actionHandler: e.changeWidth,
                  cursorStyleHandler: t,
                  actionName: "resizing"
                })
              }
            }()
        }(X);
        var Z = $((function(e, t) {
            var n = q(e),
              r = q(t),
              i = Y(e) + Y(t),
              o = n * r;
            return K(o), o / Math.pow(10, i)
          })),
          J = $((function(e, t) {
            var n = Math.pow(10, Math.max(Y(e), Y(t)));
            return (Z(e, n) + Z(t, n)) / n
          })),
          Q = $((function(e, t) {
            var n = Math.pow(10, Math.max(Y(e), Y(t)));
            return (Z(e, n) - Z(t, n)) / n
          })),
          ee = $((function(e, t) {
            var n = q(e),
              r = q(t);
            return K(n), K(r), Z(n / r, G(Math.pow(10, Y(t) - Y(e))))
          }));
        var te = !0;
        var ne = {
            strip: G,
            plus: J,
            minus: Q,
            times: Z,
            divide: ee,
            round: function(e, t) {
              var n = Math.pow(10, t),
                r = ee(Math.round(Math.abs(Z(e, n))), n);
              return e < 0 && 0 !== r && (r = Z(r, -1)), r
            },
            digitLength: Y,
            float2Fixed: q,
            enableBoundaryChecking: function(e) {
              void 0 === e && (e = !0), te = e
            }
          },
          re = {
            exports: {}
          };
        ! function(e, t) {
          (function() {
            var n, r = "Expected a function",
              i = "__lodash_hash_undefined__",
              o = "__lodash_placeholder__",
              a = 16,
              s = 32,
              l = 64,
              c = 128,
              u = 256,
              h = 1 / 0,
              p = 9007199254740991,
              d = NaN,
              f = 4294967295,
              g = [
                ["ary", c],
                ["bind", 1],
                ["bindKey", 2],
                ["curry", 8],
                ["curryRight", a],
                ["flip", 512],
                ["partial", s],
                ["partialRight", l],
                ["rearg", u]
              ],
              m = "[object Arguments]",
              v = "[object Array]",
              _ = "[object Boolean]",
              b = "[object Date]",
              y = "[object Error]",
              w = "[object Function]",
              x = "[object GeneratorFunction]",
              k = "[object Map]",
              C = "[object Number]",
              S = "[object Object]",
              E = "[object Promise]",
              T = "[object RegExp]",
              O = "[object Set]",
              A = "[object String]",
              P = "[object Symbol]",
              M = "[object WeakMap]",
              D = "[object ArrayBuffer]",
              I = "[object DataView]",
              N = "[object Float32Array]",
              R = "[object Float64Array]",
              j = "[object Int8Array]",
              L = "[object Int16Array]",
              F = "[object Int32Array]",
              B = "[object Uint8Array]",
              z = "[object Uint8ClampedArray]",
              H = "[object Uint16Array]",
              U = "[object Uint32Array]",
              V = /\b__p \+= '';/g,
              X = /\b(__p \+=) '' \+/g,
              G = /(__e\(.*?\)|\b__t\)) \+\n'';/g,
              Y = /&(?:amp|lt|gt|quot|#39);/g,
              q = /[&<>"']/g,
              K = RegExp(Y.source),
              $ = RegExp(q.source),
              Z = /<%-([\s\S]+?)%>/g,
              J = /<%([\s\S]+?)%>/g,
              Q = /<%=([\s\S]+?)%>/g,
              ee = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
              te = /^\w*$/,
              ne = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,
              re = /[\\^$.*+?()[\]{}|]/g,
              ie = RegExp(re.source),
              oe = /^\s+/,
              ae = /\s/,
              se = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
              le = /\{\n\/\* \[wrapped with (.+)\] \*/,
              ce = /,? & /,
              ue = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,
              he = /[()=,{}\[\]\/\s]/,
              pe = /\\(\\)?/g,
              de = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,
              fe = /\w*$/,
              ge = /^[-+]0x[0-9a-f]+$/i,
              me = /^0b[01]+$/i,
              ve = /^\[object .+?Constructor\]$/,
              _e = /^0o[0-7]+$/i,
              be = /^(?:0|[1-9]\d*)$/,
              ye = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,
              we = /($^)/,
              xe = /['\n\r\u2028\u2029\\]/g,
              ke = "\\ud800-\\udfff",
              Ce = "\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",
              Se = "\\u2700-\\u27bf",
              Ee = "a-z\\xdf-\\xf6\\xf8-\\xff",
              Te = "A-Z\\xc0-\\xd6\\xd8-\\xde",
              Oe = "\\ufe0e\\ufe0f",
              Ae =
              "\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",
              Pe = "['’]",
              Me = "[" + ke + "]",
              De = "[" + Ae + "]",
              Ie = "[" + Ce + "]",
              Ne = "\\d+",
              Re = "[" + Se + "]",
              je = "[" + Ee + "]",
              Le = "[^" + ke + Ae + Ne + Se + Ee + Te + "]",
              Fe = "\\ud83c[\\udffb-\\udfff]",
              Be = "[^" + ke + "]",
              ze = "(?:\\ud83c[\\udde6-\\uddff]){2}",
              He = "[\\ud800-\\udbff][\\udc00-\\udfff]",
              Ue = "[" + Te + "]",
              We = "\\u200d",
              Ve = "(?:" + je + "|" + Le + ")",
              Xe = "(?:" + Ue + "|" + Le + ")",
              Ge = "(?:['’](?:d|ll|m|re|s|t|ve))?",
              Ye = "(?:['’](?:D|LL|M|RE|S|T|VE))?",
              qe = "(?:" + Ie + "|" + Fe + ")" + "?",
              Ke = "[" + Oe + "]?",
              $e = Ke + qe + ("(?:" + We + "(?:" + [Be, ze, He].join("|") + ")" + Ke + qe + ")*"),
              Ze = "(?:" + [Re, ze, He].join("|") + ")" + $e,
              Je = "(?:" + [Be + Ie + "?", Ie, ze, He, Me].join("|") + ")",
              Qe = RegExp(Pe, "g"),
              et = RegExp(Ie, "g"),
              tt = RegExp(Fe + "(?=" + Fe + ")|" + Je + $e, "g"),
              nt = RegExp([Ue + "?" + je + "+" + Ge + "(?=" + [De, Ue, "$"].join("|") + ")", Xe + "+" + Ye + "(?=" + [De, Ue + Ve, "$"].join("|") + ")", Ue + "?" + Ve + "+" + Ge, Ue + "+" + Ye,
                "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", Ne, Ze
              ].join("|"), "g"),
              rt = RegExp("[" + We + ke + Ce + Oe + "]"),
              it = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,
              ot = ["Array", "Buffer", "DataView", "Date", "Error", "Float32Array", "Float64Array", "Function", "Int8Array", "Int16Array", "Int32Array", "Map", "Math", "Object", "Promise", "RegExp", "Set", "String", "Symbol", "TypeError",
                "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "WeakMap", "_", "clearTimeout", "isFinite", "parseInt", "setTimeout"
              ],
              at = -1,
              st = {};
            st[N] = st[R] = st[j] = st[L] = st[F] = st[B] = st[z] = st[H] = st[U] = !0, st[m] = st[v] = st[D] = st[_] = st[I] = st[b] = st[y] = st[w] = st[k] = st[C] = st[S] = st[T] = st[O] = st[A] = st[M] = !1;
            var lt = {};
            lt[m] = lt[v] = lt[D] = lt[I] = lt[_] = lt[b] = lt[N] = lt[R] = lt[j] = lt[L] = lt[F] = lt[k] = lt[C] = lt[S] = lt[T] = lt[O] = lt[A] = lt[P] = lt[B] = lt[z] = lt[H] = lt[U] = !0, lt[y] = lt[w] = lt[M] = !1;
            var ct = {
                "\\": "\\",
                "'": "'",
                "\n": "n",
                "\r": "r",
                "\u2028": "u2028",
                "\u2029": "u2029"
              },
              ut = parseFloat,
              ht = parseInt,
              pt = "object" == typeof W && W && W.Object === Object && W,
              dt = "object" == typeof self && self && self.Object === Object && self,
              ft = pt || dt || Function("return this")(),
              gt = t && !t.nodeType && t,
              mt = gt && e && !e.nodeType && e,
              vt = mt && mt.exports === gt,
              _t = vt && pt.process,
              bt = function() {
                try {
                  var e = mt && mt.require && mt.require("util").types;
                  return e || _t && _t.binding && _t.binding("util")
                } catch (e) {}
              }(),
              yt = bt && bt.isArrayBuffer,
              wt = bt && bt.isDate,
              xt = bt && bt.isMap,
              kt = bt && bt.isRegExp,
              Ct = bt && bt.isSet,
              St = bt && bt.isTypedArray;

            function Et(e, t, n) {
              switch (n.length) {
                case 0:
                  return e.call(t);
                case 1:
                  return e.call(t, n[0]);
                case 2:
                  return e.call(t, n[0], n[1]);
                case 3:
                  return e.call(t, n[0], n[1], n[2])
              }
              return e.apply(t, n)
            }

            function Tt(e, t, n, r) {
              for (var i = -1, o = null == e ? 0 : e.length; ++i < o;) {
                var a = e[i];
                t(r, a, n(a), e)
              }
              return r
            }

            function Ot(e, t) {
              for (var n = -1, r = null == e ? 0 : e.length; ++n < r && !1 !== t(e[n], n, e););
              return e
            }

            function At(e, t) {
              for (var n = null == e ? 0 : e.length; n-- && !1 !== t(e[n], n, e););
              return e
            }

            function Pt(e, t) {
              for (var n = -1, r = null == e ? 0 : e.length; ++n < r;)
                if (!t(e[n], n, e)) return !1;
              return !0
            }

            function Mt(e, t) {
              for (var n = -1, r = null == e ? 0 : e.length, i = 0, o = []; ++n < r;) {
                var a = e[n];
                t(a, n, e) && (o[i++] = a)
              }
              return o
            }

            function Dt(e, t) {
              return !!(null == e ? 0 : e.length) && Ut(e, t, 0) > -1
            }

            function It(e, t, n) {
              for (var r = -1, i = null == e ? 0 : e.length; ++r < i;)
                if (n(t, e[r])) return !0;
              return !1
            }

            function Nt(e, t) {
              for (var n = -1, r = null == e ? 0 : e.length, i = Array(r); ++n < r;) i[n] = t(e[n], n, e);
              return i
            }

            function Rt(e, t) {
              for (var n = -1, r = t.length, i = e.length; ++n < r;) e[i + n] = t[n];
              return e
            }

            function jt(e, t, n, r) {
              var i = -1,
                o = null == e ? 0 : e.length;
              for (r && o && (n = e[++i]); ++i < o;) n = t(n, e[i], i, e);
              return n
            }

            function Lt(e, t, n, r) {
              var i = null == e ? 0 : e.length;
              for (r && i && (n = e[--i]); i--;) n = t(n, e[i], i, e);
              return n
            }

            function Ft(e, t) {
              for (var n = -1, r = null == e ? 0 : e.length; ++n < r;)
                if (t(e[n], n, e)) return !0;
              return !1
            }
            var Bt = Gt("length");

            function zt(e, t, n) {
              var r;
              return n(e, (function(e, n, i) {
                if (t(e, n, i)) return r = n, !1
              })), r
            }

            function Ht(e, t, n, r) {
              for (var i = e.length, o = n + (r ? 1 : -1); r ? o-- : ++o < i;)
                if (t(e[o], o, e)) return o;
              return -1
            }

            function Ut(e, t, n) {
              return t == t ? function(e, t, n) {
                var r = n - 1,
                  i = e.length;
                for (; ++r < i;)
                  if (e[r] === t) return r;
                return -1
              }(e, t, n) : Ht(e, Vt, n)
            }

            function Wt(e, t, n, r) {
              for (var i = n - 1, o = e.length; ++i < o;)
                if (r(e[i], t)) return i;
              return -1
            }

            function Vt(e) {
              return e != e
            }

            function Xt(e, t) {
              var n = null == e ? 0 : e.length;
              return n ? Kt(e, t) / n : d
            }

            function Gt(e) {
              return function(t) {
                return null == t ? n : t[e]
              }
            }

            function Yt(e) {
              return function(t) {
                return null == e ? n : e[t]
              }
            }

            function qt(e, t, n, r, i) {
              return i(e, (function(e, i, o) {
                n = r ? (r = !1, e) : t(n, e, i, o)
              })), n
            }

            function Kt(e, t) {
              for (var r, i = -1, o = e.length; ++i < o;) {
                var a = t(e[i]);
                a !== n && (r = r === n ? a : r + a)
              }
              return r
            }

            function $t(e, t) {
              for (var n = -1, r = Array(e); ++n < e;) r[n] = t(n);
              return r
            }

            function Zt(e) {
              return e ? e.slice(0, gn(e) + 1).replace(oe, "") : e
            }

            function Jt(e) {
              return function(t) {
                return e(t)
              }
            }

            function Qt(e, t) {
              return Nt(t, (function(t) {
                return e[t]
              }))
            }

            function en(e, t) {
              return e.has(t)
            }

            function tn(e, t) {
              for (var n = -1, r = e.length; ++n < r && Ut(t, e[n], 0) > -1;);
              return n
            }

            function nn(e, t) {
              for (var n = e.length; n-- && Ut(t, e[n], 0) > -1;);
              return n
            }
            var rn = Yt({
                "À": "A",
                "Á": "A",
                "Â": "A",
                "Ã": "A",
                "Ä": "A",
                "Å": "A",
                "à": "a",
                "á": "a",
                "â": "a",
                "ã": "a",
                "ä": "a",
                "å": "a",
                "Ç": "C",
                "ç": "c",
                "Ð": "D",
                "ð": "d",
                "È": "E",
                "É": "E",
                "Ê": "E",
                "Ë": "E",
                "è": "e",
                "é": "e",
                "ê": "e",
                "ë": "e",
                "Ì": "I",
                "Í": "I",
                "Î": "I",
                "Ï": "I",
                "ì": "i",
                "í": "i",
                "î": "i",
                "ï": "i",
                "Ñ": "N",
                "ñ": "n",
                "Ò": "O",
                "Ó": "O",
                "Ô": "O",
                "Õ": "O",
                "Ö": "O",
                "Ø": "O",
                "ò": "o",
                "ó": "o",
                "ô": "o",
                "õ": "o",
                "ö": "o",
                "ø": "o",
                "Ù": "U",
                "Ú": "U",
                "Û": "U",
                "Ü": "U",
                "ù": "u",
                "ú": "u",
                "û": "u",
                "ü": "u",
                "Ý": "Y",
                "ý": "y",
                "ÿ": "y",
                "Æ": "Ae",
                "æ": "ae",
                "Þ": "Th",
                "þ": "th",
                "ß": "ss",
                "Ā": "A",
                "Ă": "A",
                "Ą": "A",
                "ā": "a",
                "ă": "a",
                "ą": "a",
                "Ć": "C",
                "Ĉ": "C",
                "Ċ": "C",
                "Č": "C",
                "ć": "c",
                "ĉ": "c",
                "ċ": "c",
                "č": "c",
                "Ď": "D",
                "Đ": "D",
                "ď": "d",
                "đ": "d",
                "Ē": "E",
                "Ĕ": "E",
                "Ė": "E",
                "Ę": "E",
                "Ě": "E",
                "ē": "e",
                "ĕ": "e",
                "ė": "e",
                "ę": "e",
                "ě": "e",
                "Ĝ": "G",
                "Ğ": "G",
                "Ġ": "G",
                "Ģ": "G",
                "ĝ": "g",
                "ğ": "g",
                "ġ": "g",
                "ģ": "g",
                "Ĥ": "H",
                "Ħ": "H",
                "ĥ": "h",
                "ħ": "h",
                "Ĩ": "I",
                "Ī": "I",
                "Ĭ": "I",
                "Į": "I",
                "İ": "I",
                "ĩ": "i",
                "ī": "i",
                "ĭ": "i",
                "į": "i",
                "ı": "i",
                "Ĵ": "J",
                "ĵ": "j",
                "Ķ": "K",
                "ķ": "k",
                "ĸ": "k",
                "Ĺ": "L",
                "Ļ": "L",
                "Ľ": "L",
                "Ŀ": "L",
                "Ł": "L",
                "ĺ": "l",
                "ļ": "l",
                "ľ": "l",
                "ŀ": "l",
                "ł": "l",
                "Ń": "N",
                "Ņ": "N",
                "Ň": "N",
                "Ŋ": "N",
                "ń": "n",
                "ņ": "n",
                "ň": "n",
                "ŋ": "n",
                "Ō": "O",
                "Ŏ": "O",
                "Ő": "O",
                "ō": "o",
                "ŏ": "o",
                "ő": "o",
                "Ŕ": "R",
                "Ŗ": "R",
                "Ř": "R",
                "ŕ": "r",
                "ŗ": "r",
                "ř": "r",
                "Ś": "S",
                "Ŝ": "S",
                "Ş": "S",
                "Š": "S",
                "ś": "s",
                "ŝ": "s",
                "ş": "s",
                "š": "s",
                "Ţ": "T",
                "Ť": "T",
                "Ŧ": "T",
                "ţ": "t",
                "ť": "t",
                "ŧ": "t",
                "Ũ": "U",
                "Ū": "U",
                "Ŭ": "U",
                "Ů": "U",
                "Ű": "U",
                "Ų": "U",
                "ũ": "u",
                "ū": "u",
                "ŭ": "u",
                "ů": "u",
                "ű": "u",
                "ų": "u",
                "Ŵ": "W",
                "ŵ": "w",
                "Ŷ": "Y",
                "ŷ": "y",
                "Ÿ": "Y",
                "Ź": "Z",
                "Ż": "Z",
                "Ž": "Z",
                "ź": "z",
                "ż": "z",
                "ž": "z",
                "IJ": "IJ",
                "ij": "ij",
                "Œ": "Oe",
                "œ": "oe",
                "ʼn": "'n",
                "ſ": "s"
              }),
              on = Yt({
                "&": "&amp;",
                "<": "&lt;",
                ">": "&gt;",
                '"': "&quot;",
                "'": "&#39;"
              });

            function an(e) {
              return "\\" + ct[e]
            }

            function sn(e) {
              return rt.test(e)
            }

            function ln(e) {
              var t = -1,
                n = Array(e.size);
              return e.forEach((function(e, r) {
                n[++t] = [r, e]
              })), n
            }

            function cn(e, t) {
              return function(n) {
                return e(t(n))
              }
            }

            function un(e, t) {
              for (var n = -1, r = e.length, i = 0, a = []; ++n < r;) {
                var s = e[n];
                s !== t && s !== o || (e[n] = o, a[i++] = n)
              }
              return a
            }

            function hn(e) {
              var t = -1,
                n = Array(e.size);
              return e.forEach((function(e) {
                n[++t] = e
              })), n
            }

            function pn(e) {
              var t = -1,
                n = Array(e.size);
              return e.forEach((function(e) {
                n[++t] = [e, e]
              })), n
            }

            function dn(e) {
              return sn(e) ? function(e) {
                var t = tt.lastIndex = 0;
                for (; tt.test(e);) ++t;
                return t
              }(e) : Bt(e)
            }

            function fn(e) {
              return sn(e) ? function(e) {
                return e.match(tt) || []
              }(e) : function(e) {
                return e.split("")
              }(e)
            }

            function gn(e) {
              for (var t = e.length; t-- && ae.test(e.charAt(t)););
              return t
            }
            var mn = Yt({
              "&amp;": "&",
              "&lt;": "<",
              "&gt;": ">",
              "&quot;": '"',
              "&#39;": "'"
            });
            var vn = function e(t) {
              var W = (t = null == t ? ft : vn.defaults(ft.Object(), t, vn.pick(ft, ot))).Array,
                ae = t.Date,
                ke = t.Error,
                Ce = t.Function,
                Se = t.Math,
                Ee = t.Object,
                Te = t.RegExp,
                Oe = t.String,
                Ae = t.TypeError,
                Pe = W.prototype,
                Me = Ce.prototype,
                De = Ee.prototype,
                Ie = t["__core-js_shared__"],
                Ne = Me.toString,
                Re = De.hasOwnProperty,
                je = 0,
                Le = function() {
                  var e = /[^.]+$/.exec(Ie && Ie.keys && Ie.keys.IE_PROTO || "");
                  return e ? "Symbol(src)_1." + e : ""
                }(),
                Fe = De.toString,
                Be = Ne.call(Ee),
                ze = ft._,
                He = Te("^" + Ne.call(Re).replace(re, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"),
                Ue = vt ? t.Buffer : n,
                We = t.Symbol,
                Ve = t.Uint8Array,
                Xe = Ue ? Ue.allocUnsafe : n,
                Ge = cn(Ee.getPrototypeOf, Ee),
                Ye = Ee.create,
                qe = De.propertyIsEnumerable,
                Ke = Pe.splice,
                $e = We ? We.isConcatSpreadable : n,
                Ze = We ? We.iterator : n,
                Je = We ? We.toStringTag : n,
                tt = function() {
                  try {
                    var e = ho(Ee, "defineProperty");
                    return e({}, "", {}), e
                  } catch (e) {}
                }(),
                rt = t.clearTimeout !== ft.clearTimeout && t.clearTimeout,
                ct = ae && ae.now !== ft.Date.now && ae.now,
                pt = t.setTimeout !== ft.setTimeout && t.setTimeout,
                dt = Se.ceil,
                gt = Se.floor,
                mt = Ee.getOwnPropertySymbols,
                _t = Ue ? Ue.isBuffer : n,
                bt = t.isFinite,
                Bt = Pe.join,
                Yt = cn(Ee.keys, Ee),
                _n = Se.max,
                bn = Se.min,
                yn = ae.now,
                wn = t.parseInt,
                xn = Se.random,
                kn = Pe.reverse,
                Cn = ho(t, "DataView"),
                Sn = ho(t, "Map"),
                En = ho(t, "Promise"),
                Tn = ho(t, "Set"),
                On = ho(t, "WeakMap"),
                An = ho(Ee, "create"),
                Pn = On && new On,
                Mn = {},
                Dn = Fo(Cn),
                In = Fo(Sn),
                Nn = Fo(En),
                Rn = Fo(Tn),
                jn = Fo(On),
                Ln = We ? We.prototype : n,
                Fn = Ln ? Ln.valueOf : n,
                Bn = Ln ? Ln.toString : n;

              function zn(e) {
                if (ts(e) && !Va(e) && !(e instanceof Vn)) {
                  if (e instanceof Wn) return e;
                  if (Re.call(e, "__wrapped__")) return Bo(e)
                }
                return new Wn(e)
              }
              var Hn = function() {
                function e() {}
                return function(t) {
                  if (!es(t)) return {};
                  if (Ye) return Ye(t);
                  e.prototype = t;
                  var r = new e;
                  return e.prototype = n, r
                }
              }();

              function Un() {}

              function Wn(e, t) {
                this.__wrapped__ = e, this.__actions__ = [], this.__chain__ = !!t, this.__index__ = 0, this.__values__ = n
              }

              function Vn(e) {
                this.__wrapped__ = e, this.__actions__ = [], this.__dir__ = 1, this.__filtered__ = !1, this.__iteratees__ = [], this.__takeCount__ = f, this.__views__ = []
              }

              function Xn(e) {
                var t = -1,
                  n = null == e ? 0 : e.length;
                for (this.clear(); ++t < n;) {
                  var r = e[t];
                  this.set(r[0], r[1])
                }
              }

              function Gn(e) {
                var t = -1,
                  n = null == e ? 0 : e.length;
                for (this.clear(); ++t < n;) {
                  var r = e[t];
                  this.set(r[0], r[1])
                }
              }

              function Yn(e) {
                var t = -1,
                  n = null == e ? 0 : e.length;
                for (this.clear(); ++t < n;) {
                  var r = e[t];
                  this.set(r[0], r[1])
                }
              }

              function qn(e) {
                var t = -1,
                  n = null == e ? 0 : e.length;
                for (this.__data__ = new Yn; ++t < n;) this.add(e[t])
              }

              function Kn(e) {
                var t = this.__data__ = new Gn(e);
                this.size = t.size
              }

              function $n(e, t) {
                var n = Va(e),
                  r = !n && Wa(e),
                  i = !n && !r && qa(e),
                  o = !n && !r && !i && cs(e),
                  a = n || r || i || o,
                  s = a ? $t(e.length, Oe) : [],
                  l = s.length;
                for (var c in e) !t && !Re.call(e, c) || a && ("length" == c || i && ("offset" == c || "parent" == c) || o && ("buffer" == c || "byteLength" == c || "byteOffset" == c) || bo(c, l)) || s.push(c);
                return s
              }

              function Zn(e) {
                var t = e.length;
                return t ? e[qr(0, t - 1)] : n
              }

              function Jn(e, t) {
                return Ro(Ai(e), sr(t, 0, e.length))
              }

              function Qn(e) {
                return Ro(Ai(e))
              }

              function er(e, t, r) {
                (r !== n && !za(e[t], r) || r === n && !(t in e)) && or(e, t, r)
              }

              function tr(e, t, r) {
                var i = e[t];
                Re.call(e, t) && za(i, r) && (r !== n || t in e) || or(e, t, r)
              }

              function nr(e, t) {
                for (var n = e.length; n--;)
                  if (za(e[n][0], t)) return n;
                return -1
              }

              function rr(e, t, n, r) {
                return pr(e, (function(e, i, o) {
                  t(r, e, n(e), o)
                })), r
              }

              function ir(e, t) {
                return e && Pi(t, Ms(t), e)
              }

              function or(e, t, n) {
                "__proto__" == t && tt ? tt(e, t, {
                  configurable: !0,
                  enumerable: !0,
                  value: n,
                  writable: !0
                }) : e[t] = n
              }

              function ar(e, t) {
                for (var r = -1, i = t.length, o = W(i), a = null == e; ++r < i;) o[r] = a ? n : Es(e, t[r]);
                return o
              }

              function sr(e, t, r) {
                return e == e && (r !== n && (e = e <= r ? e : r), t !== n && (e = e >= t ? e : t)), e
              }

              function lr(e, t, r, i, o, a) {
                var s, l = 1 & t,
                  c = 2 & t,
                  u = 4 & t;
                if (r && (s = o ? r(e, i, o, a) : r(e)), s !== n) return s;
                if (!es(e)) return e;
                var h = Va(e);
                if (h) {
                  if (s = function(e) {
                      var t = e.length,
                        n = new e.constructor(t);
                      t && "string" == typeof e[0] && Re.call(e, "index") && (n.index = e.index, n.input = e.input);
                      return n
                    }(e), !l) return Ai(e, s)
                } else {
                  var p = go(e),
                    d = p == w || p == x;
                  if (qa(e)) return ki(e, l);
                  if (p == S || p == m || d && !o) {
                    if (s = c || d ? {} : vo(e), !l) return c ? function(e, t) {
                      return Pi(e, fo(e), t)
                    }(e, function(e, t) {
                      return e && Pi(t, Ds(t), e)
                    }(s, e)) : function(e, t) {
                      return Pi(e, po(e), t)
                    }(e, ir(s, e))
                  } else {
                    if (!lt[p]) return o ? e : {};
                    s = function(e, t, n) {
                      var r = e.constructor;
                      switch (t) {
                        case D:
                          return Ci(e);
                        case _:
                        case b:
                          return new r(+e);
                        case I:
                          return function(e, t) {
                            var n = t ? Ci(e.buffer) : e.buffer;
                            return new e.constructor(n, e.byteOffset, e.byteLength)
                          }(e, n);
                        case N:
                        case R:
                        case j:
                        case L:
                        case F:
                        case B:
                        case z:
                        case H:
                        case U:
                          return Si(e, n);
                        case k:
                          return new r;
                        case C:
                        case A:
                          return new r(e);
                        case T:
                          return function(e) {
                            var t = new e.constructor(e.source, fe.exec(e));
                            return t.lastIndex = e.lastIndex, t
                          }(e);
                        case O:
                          return new r;
                        case P:
                          return i = e, Fn ? Ee(Fn.call(i)) : {}
                      }
                      var i
                    }(e, p, l)
                  }
                }
                a || (a = new Kn);
                var f = a.get(e);
                if (f) return f;
                a.set(e, s), as(e) ? e.forEach((function(n) {
                  s.add(lr(n, t, r, n, e, a))
                })) : ns(e) && e.forEach((function(n, i) {
                  s.set(i, lr(n, t, r, i, e, a))
                }));
                var g = h ? n : (u ? c ? io : ro : c ? Ds : Ms)(e);
                return Ot(g || e, (function(n, i) {
                  g && (n = e[i = n]), tr(s, i, lr(n, t, r, i, e, a))
                })), s
              }

              function cr(e, t, r) {
                var i = r.length;
                if (null == e) return !i;
                for (e = Ee(e); i--;) {
                  var o = r[i],
                    a = t[o],
                    s = e[o];
                  if (s === n && !(o in e) || !a(s)) return !1
                }
                return !0
              }

              function ur(e, t, i) {
                if ("function" != typeof e) throw new Ae(r);
                return Mo((function() {
                  e.apply(n, i)
                }), t)
              }

              function hr(e, t, n, r) {
                var i = -1,
                  o = Dt,
                  a = !0,
                  s = e.length,
                  l = [],
                  c = t.length;
                if (!s) return l;
                n && (t = Nt(t, Jt(n))), r ? (o = It, a = !1) : t.length >= 200 && (o = en, a = !1, t = new qn(t));
                e: for (; ++i < s;) {
                  var u = e[i],
                    h = null == n ? u : n(u);
                  if (u = r || 0 !== u ? u : 0, a && h == h) {
                    for (var p = c; p--;)
                      if (t[p] === h) continue e;
                    l.push(u)
                  } else o(t, h, r) || l.push(u)
                }
                return l
              }
              zn.templateSettings = {
                escape: Z,
                evaluate: J,
                interpolate: Q,
                variable: "",
                imports: {
                  _: zn
                }
              }, zn.prototype = Un.prototype, zn.prototype.constructor = zn, Wn.prototype = Hn(Un.prototype), Wn.prototype.constructor = Wn, Vn.prototype = Hn(Un.prototype), Vn.prototype.constructor = Vn, Xn.prototype.clear = function() {
                this.__data__ = An ? An(null) : {}, this.size = 0
              }, Xn.prototype.delete = function(e) {
                var t = this.has(e) && delete this.__data__[e];
                return this.size -= t ? 1 : 0, t
              }, Xn.prototype.get = function(e) {
                var t = this.__data__;
                if (An) {
                  var r = t[e];
                  return r === i ? n : r
                }
                return Re.call(t, e) ? t[e] : n
              }, Xn.prototype.has = function(e) {
                var t = this.__data__;
                return An ? t[e] !== n : Re.call(t, e)
              }, Xn.prototype.set = function(e, t) {
                var r = this.__data__;
                return this.size += this.has(e) ? 0 : 1, r[e] = An && t === n ? i : t, this
              }, Gn.prototype.clear = function() {
                this.__data__ = [], this.size = 0
              }, Gn.prototype.delete = function(e) {
                var t = this.__data__,
                  n = nr(t, e);
                return !(n < 0) && (n == t.length - 1 ? t.pop() : Ke.call(t, n, 1), --this.size, !0)
              }, Gn.prototype.get = function(e) {
                var t = this.__data__,
                  r = nr(t, e);
                return r < 0 ? n : t[r][1]
              }, Gn.prototype.has = function(e) {
                return nr(this.__data__, e) > -1
              }, Gn.prototype.set = function(e, t) {
                var n = this.__data__,
                  r = nr(n, e);
                return r < 0 ? (++this.size, n.push([e, t])) : n[r][1] = t, this
              }, Yn.prototype.clear = function() {
                this.size = 0, this.__data__ = {
                  hash: new Xn,
                  map: new(Sn || Gn),
                  string: new Xn
                }
              }, Yn.prototype.delete = function(e) {
                var t = co(this, e).delete(e);
                return this.size -= t ? 1 : 0, t
              }, Yn.prototype.get = function(e) {
                return co(this, e).get(e)
              }, Yn.prototype.has = function(e) {
                return co(this, e).has(e)
              }, Yn.prototype.set = function(e, t) {
                var n = co(this, e),
                  r = n.size;
                return n.set(e, t), this.size += n.size == r ? 0 : 1, this
              }, qn.prototype.add = qn.prototype.push = function(e) {
                return this.__data__.set(e, i), this
              }, qn.prototype.has = function(e) {
                return this.__data__.has(e)
              }, Kn.prototype.clear = function() {
                this.__data__ = new Gn, this.size = 0
              }, Kn.prototype.delete = function(e) {
                var t = this.__data__,
                  n = t.delete(e);
                return this.size = t.size, n
              }, Kn.prototype.get = function(e) {
                return this.__data__.get(e)
              }, Kn.prototype.has = function(e) {
                return this.__data__.has(e)
              }, Kn.prototype.set = function(e, t) {
                var n = this.__data__;
                if (n instanceof Gn) {
                  var r = n.__data__;
                  if (!Sn || r.length < 199) return r.push([e, t]), this.size = ++n.size, this;
                  n = this.__data__ = new Yn(r)
                }
                return n.set(e, t), this.size = n.size, this
              };
              var pr = Ii(yr),
                dr = Ii(wr, !0);

              function fr(e, t) {
                var n = !0;
                return pr(e, (function(e, r, i) {
                  return n = !!t(e, r, i)
                })), n
              }

              function gr(e, t, r) {
                for (var i = -1, o = e.length; ++i < o;) {
                  var a = e[i],
                    s = t(a);
                  if (null != s && (l === n ? s == s && !ls(s) : r(s, l))) var l = s,
                    c = a
                }
                return c
              }

              function mr(e, t) {
                var n = [];
                return pr(e, (function(e, r, i) {
                  t(e, r, i) && n.push(e)
                })), n
              }

              function vr(e, t, n, r, i) {
                var o = -1,
                  a = e.length;
                for (n || (n = _o), i || (i = []); ++o < a;) {
                  var s = e[o];
                  t > 0 && n(s) ? t > 1 ? vr(s, t - 1, n, r, i) : Rt(i, s) : r || (i[i.length] = s)
                }
                return i
              }
              var _r = Ni(),
                br = Ni(!0);

              function yr(e, t) {
                return e && _r(e, t, Ms)
              }

              function wr(e, t) {
                return e && br(e, t, Ms)
              }

              function xr(e, t) {
                return Mt(t, (function(t) {
                  return Za(e[t])
                }))
              }

              function kr(e, t) {
                for (var r = 0, i = (t = bi(t, e)).length; null != e && r < i;) e = e[Lo(t[r++])];
                return r && r == i ? e : n
              }

              function Cr(e, t, n) {
                var r = t(e);
                return Va(e) ? r : Rt(r, n(e))
              }

              function Sr(e) {
                return null == e ? e === n ? "[object Undefined]" : "[object Null]" : Je && Je in Ee(e) ? function(e) {
                  var t = Re.call(e, Je),
                    r = e[Je];
                  try {
                    e[Je] = n;
                    var i = !0
                  } catch (e) {}
                  var o = Fe.call(e);
                  i && (t ? e[Je] = r : delete e[Je]);
                  return o
                }(e) : function(e) {
                  return Fe.call(e)
                }(e)
              }

              function Er(e, t) {
                return e > t
              }

              function Tr(e, t) {
                return null != e && Re.call(e, t)
              }

              function Or(e, t) {
                return null != e && t in Ee(e)
              }

              function Ar(e, t, r) {
                for (var i = r ? It : Dt, o = e[0].length, a = e.length, s = a, l = W(a), c = 1 / 0, u = []; s--;) {
                  var h = e[s];
                  s && t && (h = Nt(h, Jt(t))), c = bn(h.length, c), l[s] = !r && (t || o >= 120 && h.length >= 120) ? new qn(s && h) : n
                }
                h = e[0];
                var p = -1,
                  d = l[0];
                e: for (; ++p < o && u.length < c;) {
                  var f = h[p],
                    g = t ? t(f) : f;
                  if (f = r || 0 !== f ? f : 0, !(d ? en(d, g) : i(u, g, r))) {
                    for (s = a; --s;) {
                      var m = l[s];
                      if (!(m ? en(m, g) : i(e[s], g, r))) continue e
                    }
                    d && d.push(g), u.push(f)
                  }
                }
                return u
              }

              function Pr(e, t, r) {
                var i = null == (e = Oo(e, t = bi(t, e))) ? e : e[Lo($o(t))];
                return null == i ? n : Et(i, e, r)
              }

              function Mr(e) {
                return ts(e) && Sr(e) == m
              }

              function Dr(e, t, r, i, o) {
                return e === t || (null == e || null == t || !ts(e) && !ts(t) ? e != e && t != t : function(e, t, r, i, o, a) {
                  var s = Va(e),
                    l = Va(t),
                    c = s ? v : go(e),
                    u = l ? v : go(t),
                    h = (c = c == m ? S : c) == S,
                    p = (u = u == m ? S : u) == S,
                    d = c == u;
                  if (d && qa(e)) {
                    if (!qa(t)) return !1;
                    s = !0, h = !1
                  }
                  if (d && !h) return a || (a = new Kn), s || cs(e) ? to(e, t, r, i, o, a) : function(e, t, n, r, i, o, a) {
                    switch (n) {
                      case I:
                        if (e.byteLength != t.byteLength || e.byteOffset != t.byteOffset) return !1;
                        e = e.buffer, t = t.buffer;
                      case D:
                        return !(e.byteLength != t.byteLength || !o(new Ve(e), new Ve(t)));
                      case _:
                      case b:
                      case C:
                        return za(+e, +t);
                      case y:
                        return e.name == t.name && e.message == t.message;
                      case T:
                      case A:
                        return e == t + "";
                      case k:
                        var s = ln;
                      case O:
                        var l = 1 & r;
                        if (s || (s = hn), e.size != t.size && !l) return !1;
                        var c = a.get(e);
                        if (c) return c == t;
                        r |= 2, a.set(e, t);
                        var u = to(s(e), s(t), r, i, o, a);
                        return a.delete(e), u;
                      case P:
                        if (Fn) return Fn.call(e) == Fn.call(t)
                    }
                    return !1
                  }(e, t, c, r, i, o, a);
                  if (!(1 & r)) {
                    var f = h && Re.call(e, "__wrapped__"),
                      g = p && Re.call(t, "__wrapped__");
                    if (f || g) {
                      var w = f ? e.value() : e,
                        x = g ? t.value() : t;
                      return a || (a = new Kn), o(w, x, r, i, a)
                    }
                  }
                  if (!d) return !1;
                  return a || (a = new Kn),
                    function(e, t, r, i, o, a) {
                      var s = 1 & r,
                        l = ro(e),
                        c = l.length,
                        u = ro(t),
                        h = u.length;
                      if (c != h && !s) return !1;
                      var p = c;
                      for (; p--;) {
                        var d = l[p];
                        if (!(s ? d in t : Re.call(t, d))) return !1
                      }
                      var f = a.get(e),
                        g = a.get(t);
                      if (f && g) return f == t && g == e;
                      var m = !0;
                      a.set(e, t), a.set(t, e);
                      var v = s;
                      for (; ++p < c;) {
                        var _ = e[d = l[p]],
                          b = t[d];
                        if (i) var y = s ? i(b, _, d, t, e, a) : i(_, b, d, e, t, a);
                        if (!(y === n ? _ === b || o(_, b, r, i, a) : y)) {
                          m = !1;
                          break
                        }
                        v || (v = "constructor" == d)
                      }
                      if (m && !v) {
                        var w = e.constructor,
                          x = t.constructor;
                        w == x || !("constructor" in e) || !("constructor" in t) || "function" == typeof w && w instanceof w && "function" == typeof x && x instanceof x || (m = !1)
                      }
                      return a.delete(e), a.delete(t), m
                    }(e, t, r, i, o, a)
                }(e, t, r, i, Dr, o))
              }

              function Ir(e, t, r, i) {
                var o = r.length,
                  a = o,
                  s = !i;
                if (null == e) return !a;
                for (e = Ee(e); o--;) {
                  var l = r[o];
                  if (s && l[2] ? l[1] !== e[l[0]] : !(l[0] in e)) return !1
                }
                for (; ++o < a;) {
                  var c = (l = r[o])[0],
                    u = e[c],
                    h = l[1];
                  if (s && l[2]) {
                    if (u === n && !(c in e)) return !1
                  } else {
                    var p = new Kn;
                    if (i) var d = i(u, h, c, e, t, p);
                    if (!(d === n ? Dr(h, u, 3, i, p) : d)) return !1
                  }
                }
                return !0
              }

              function Nr(e) {
                return !(!es(e) || (t = e, Le && Le in t)) && (Za(e) ? He : ve).test(Fo(e));
                var t
              }

              function Rr(e) {
                return "function" == typeof e ? e : null == e ? rl : "object" == typeof e ? Va(e) ? Hr(e[0], e[1]) : zr(e) : pl(e)
              }

              function jr(e) {
                if (!Co(e)) return Yt(e);
                var t = [];
                for (var n in Ee(e)) Re.call(e, n) && "constructor" != n && t.push(n);
                return t
              }

              function Lr(e) {
                if (!es(e)) return function(e) {
                  var t = [];
                  if (null != e)
                    for (var n in Ee(e)) t.push(n);
                  return t
                }(e);
                var t = Co(e),
                  n = [];
                for (var r in e)("constructor" != r || !t && Re.call(e, r)) && n.push(r);
                return n
              }

              function Fr(e, t) {
                return e < t
              }

              function Br(e, t) {
                var n = -1,
                  r = Ga(e) ? W(e.length) : [];
                return pr(e, (function(e, i, o) {
                  r[++n] = t(e, i, o)
                })), r
              }

              function zr(e) {
                var t = uo(e);
                return 1 == t.length && t[0][2] ? Eo(t[0][0], t[0][1]) : function(n) {
                  return n === e || Ir(n, e, t)
                }
              }

              function Hr(e, t) {
                return wo(e) && So(t) ? Eo(Lo(e), t) : function(r) {
                  var i = Es(r, e);
                  return i === n && i === t ? Ts(r, e) : Dr(t, i, 3)
                }
              }

              function Ur(e, t, r, i, o) {
                e !== t && _r(t, (function(a, s) {
                  if (o || (o = new Kn), es(a)) ! function(e, t, r, i, o, a, s) {
                    var l = Ao(e, r),
                      c = Ao(t, r),
                      u = s.get(c);
                    if (u) return void er(e, r, u);
                    var h = a ? a(l, c, r + "", e, t, s) : n,
                      p = h === n;
                    if (p) {
                      var d = Va(c),
                        f = !d && qa(c),
                        g = !d && !f && cs(c);
                      h = c, d || f || g ? Va(l) ? h = l : Ya(l) ? h = Ai(l) : f ? (p = !1, h = ki(c, !0)) : g ? (p = !1, h = Si(c, !0)) : h = [] : is(c) || Wa(c) ? (h = l, Wa(l) ? h = vs(l) : es(l) && !Za(l) || (h = vo(c))) : p = !1
                    }
                    p && (s.set(c, h), o(h, c, i, a, s), s.delete(c));
                    er(e, r, h)
                  }(e, t, s, r, Ur, i, o);
                  else {
                    var l = i ? i(Ao(e, s), a, s + "", e, t, o) : n;
                    l === n && (l = a), er(e, s, l)
                  }
                }), Ds)
              }

              function Wr(e, t) {
                var r = e.length;
                if (r) return bo(t += t < 0 ? r : 0, r) ? e[t] : n
              }

              function Vr(e, t, n) {
                t = t.length ? Nt(t, (function(e) {
                  return Va(e) ? function(t) {
                    return kr(t, 1 === e.length ? e[0] : e)
                  } : e
                })) : [rl];
                var r = -1;
                t = Nt(t, Jt(lo()));
                var i = Br(e, (function(e, n, i) {
                  var o = Nt(t, (function(t) {
                    return t(e)
                  }));
                  return {
                    criteria: o,
                    index: ++r,
                    value: e
                  }
                }));
                return function(e, t) {
                  var n = e.length;
                  for (e.sort(t); n--;) e[n] = e[n].value;
                  return e
                }(i, (function(e, t) {
                  return function(e, t, n) {
                    var r = -1,
                      i = e.criteria,
                      o = t.criteria,
                      a = i.length,
                      s = n.length;
                    for (; ++r < a;) {
                      var l = Ei(i[r], o[r]);
                      if (l) return r >= s ? l : l * ("desc" == n[r] ? -1 : 1)
                    }
                    return e.index - t.index
                  }(e, t, n)
                }))
              }

              function Xr(e, t, n) {
                for (var r = -1, i = t.length, o = {}; ++r < i;) {
                  var a = t[r],
                    s = kr(e, a);
                  n(s, a) && Qr(o, bi(a, e), s)
                }
                return o
              }

              function Gr(e, t, n, r) {
                var i = r ? Wt : Ut,
                  o = -1,
                  a = t.length,
                  s = e;
                for (e === t && (t = Ai(t)), n && (s = Nt(e, Jt(n))); ++o < a;)
                  for (var l = 0, c = t[o], u = n ? n(c) : c;
                    (l = i(s, u, l, r)) > -1;) s !== e && Ke.call(s, l, 1), Ke.call(e, l, 1);
                return e
              }

              function Yr(e, t) {
                for (var n = e ? t.length : 0, r = n - 1; n--;) {
                  var i = t[n];
                  if (n == r || i !== o) {
                    var o = i;
                    bo(i) ? Ke.call(e, i, 1) : hi(e, i)
                  }
                }
                return e
              }

              function qr(e, t) {
                return e + gt(xn() * (t - e + 1))
              }

              function Kr(e, t) {
                var n = "";
                if (!e || t < 1 || t > p) return n;
                do {
                  t % 2 && (n += e), (t = gt(t / 2)) && (e += e)
                } while (t);
                return n
              }

              function $r(e, t) {
                return Do(To(e, t, rl), e + "")
              }

              function Zr(e) {
                return Zn(zs(e))
              }

              function Jr(e, t) {
                var n = zs(e);
                return Ro(n, sr(t, 0, n.length))
              }

              function Qr(e, t, r, i) {
                if (!es(e)) return e;
                for (var o = -1, a = (t = bi(t, e)).length, s = a - 1, l = e; null != l && ++o < a;) {
                  var c = Lo(t[o]),
                    u = r;
                  if ("__proto__" === c || "constructor" === c || "prototype" === c) return e;
                  if (o != s) {
                    var h = l[c];
                    (u = i ? i(h, c, l) : n) === n && (u = es(h) ? h : bo(t[o + 1]) ? [] : {})
                  }
                  tr(l, c, u), l = l[c]
                }
                return e
              }
              var ei = Pn ? function(e, t) {
                  return Pn.set(e, t), e
                } : rl,
                ti = tt ? function(e, t) {
                  return tt(e, "toString", {
                    configurable: !0,
                    enumerable: !1,
                    value: el(t),
                    writable: !0
                  })
                } : rl;

              function ni(e) {
                return Ro(zs(e))
              }

              function ri(e, t, n) {
                var r = -1,
                  i = e.length;
                t < 0 && (t = -t > i ? 0 : i + t), (n = n > i ? i : n) < 0 && (n += i), i = t > n ? 0 : n - t >>> 0, t >>>= 0;
                for (var o = W(i); ++r < i;) o[r] = e[r + t];
                return o
              }

              function ii(e, t) {
                var n;
                return pr(e, (function(e, r, i) {
                  return !(n = t(e, r, i))
                })), !!n
              }

              function oi(e, t, n) {
                var r = 0,
                  i = null == e ? r : e.length;
                if ("number" == typeof t && t == t && i <= 2147483647) {
                  for (; r < i;) {
                    var o = r + i >>> 1,
                      a = e[o];
                    null !== a && !ls(a) && (n ? a <= t : a < t) ? r = o + 1 : i = o
                  }
                  return i
                }
                return ai(e, t, rl, n)
              }

              function ai(e, t, r, i) {
                var o = 0,
                  a = null == e ? 0 : e.length;
                if (0 === a) return 0;
                for (var s = (t = r(t)) != t, l = null === t, c = ls(t), u = t === n; o < a;) {
                  var h = gt((o + a) / 2),
                    p = r(e[h]),
                    d = p !== n,
                    f = null === p,
                    g = p == p,
                    m = ls(p);
                  if (s) var v = i || g;
                  else v = u ? g && (i || d) : l ? g && d && (i || !f) : c ? g && d && !f && (i || !m) : !f && !m && (i ? p <= t : p < t);
                  v ? o = h + 1 : a = h
                }
                return bn(a, 4294967294)
              }

              function si(e, t) {
                for (var n = -1, r = e.length, i = 0, o = []; ++n < r;) {
                  var a = e[n],
                    s = t ? t(a) : a;
                  if (!n || !za(s, l)) {
                    var l = s;
                    o[i++] = 0 === a ? 0 : a
                  }
                }
                return o
              }

              function li(e) {
                return "number" == typeof e ? e : ls(e) ? d : +e
              }

              function ci(e) {
                if ("string" == typeof e) return e;
                if (Va(e)) return Nt(e, ci) + "";
                if (ls(e)) return Bn ? Bn.call(e) : "";
                var t = e + "";
                return "0" == t && 1 / e == -1 / 0 ? "-0" : t
              }

              function ui(e, t, n) {
                var r = -1,
                  i = Dt,
                  o = e.length,
                  a = !0,
                  s = [],
                  l = s;
                if (n) a = !1, i = It;
                else if (o >= 200) {
                  var c = t ? null : Ki(e);
                  if (c) return hn(c);
                  a = !1, i = en, l = new qn
                } else l = t ? [] : s;
                e: for (; ++r < o;) {
                  var u = e[r],
                    h = t ? t(u) : u;
                  if (u = n || 0 !== u ? u : 0, a && h == h) {
                    for (var p = l.length; p--;)
                      if (l[p] === h) continue e;
                    t && l.push(h), s.push(u)
                  } else i(l, h, n) || (l !== s && l.push(h), s.push(u))
                }
                return s
              }

              function hi(e, t) {
                return null == (e = Oo(e, t = bi(t, e))) || delete e[Lo($o(t))]
              }

              function pi(e, t, n, r) {
                return Qr(e, t, n(kr(e, t)), r)
              }

              function di(e, t, n, r) {
                for (var i = e.length, o = r ? i : -1;
                  (r ? o-- : ++o < i) && t(e[o], o, e););
                return n ? ri(e, r ? 0 : o, r ? o + 1 : i) : ri(e, r ? o + 1 : 0, r ? i : o)
              }

              function fi(e, t) {
                var n = e;
                return n instanceof Vn && (n = n.value()), jt(t, (function(e, t) {
                  return t.func.apply(t.thisArg, Rt([e], t.args))
                }), n)
              }

              function gi(e, t, n) {
                var r = e.length;
                if (r < 2) return r ? ui(e[0]) : [];
                for (var i = -1, o = W(r); ++i < r;)
                  for (var a = e[i], s = -1; ++s < r;) s != i && (o[i] = hr(o[i] || a, e[s], t, n));
                return ui(vr(o, 1), t, n)
              }

              function mi(e, t, r) {
                for (var i = -1, o = e.length, a = t.length, s = {}; ++i < o;) {
                  var l = i < a ? t[i] : n;
                  r(s, e[i], l)
                }
                return s
              }

              function vi(e) {
                return Ya(e) ? e : []
              }

              function _i(e) {
                return "function" == typeof e ? e : rl
              }

              function bi(e, t) {
                return Va(e) ? e : wo(e, t) ? [e] : jo(_s(e))
              }
              var yi = $r;

              function wi(e, t, r) {
                var i = e.length;
                return r = r === n ? i : r, !t && r >= i ? e : ri(e, t, r)
              }
              var xi = rt || function(e) {
                return ft.clearTimeout(e)
              };

              function ki(e, t) {
                if (t) return e.slice();
                var n = e.length,
                  r = Xe ? Xe(n) : new e.constructor(n);
                return e.copy(r), r
              }

              function Ci(e) {
                var t = new e.constructor(e.byteLength);
                return new Ve(t).set(new Ve(e)), t
              }

              function Si(e, t) {
                var n = t ? Ci(e.buffer) : e.buffer;
                return new e.constructor(n, e.byteOffset, e.length)
              }

              function Ei(e, t) {
                if (e !== t) {
                  var r = e !== n,
                    i = null === e,
                    o = e == e,
                    a = ls(e),
                    s = t !== n,
                    l = null === t,
                    c = t == t,
                    u = ls(t);
                  if (!l && !u && !a && e > t || a && s && c && !l && !u || i && s && c || !r && c || !o) return 1;
                  if (!i && !a && !u && e < t || u && r && o && !i && !a || l && r && o || !s && o || !c) return -1
                }
                return 0
              }

              function Ti(e, t, n, r) {
                for (var i = -1, o = e.length, a = n.length, s = -1, l = t.length, c = _n(o - a, 0), u = W(l + c), h = !r; ++s < l;) u[s] = t[s];
                for (; ++i < a;)(h || i < o) && (u[n[i]] = e[i]);
                for (; c--;) u[s++] = e[i++];
                return u
              }

              function Oi(e, t, n, r) {
                for (var i = -1, o = e.length, a = -1, s = n.length, l = -1, c = t.length, u = _n(o - s, 0), h = W(u + c), p = !r; ++i < u;) h[i] = e[i];
                for (var d = i; ++l < c;) h[d + l] = t[l];
                for (; ++a < s;)(p || i < o) && (h[d + n[a]] = e[i++]);
                return h
              }

              function Ai(e, t) {
                var n = -1,
                  r = e.length;
                for (t || (t = W(r)); ++n < r;) t[n] = e[n];
                return t
              }

              function Pi(e, t, r, i) {
                var o = !r;
                r || (r = {});
                for (var a = -1, s = t.length; ++a < s;) {
                  var l = t[a],
                    c = i ? i(r[l], e[l], l, r, e) : n;
                  c === n && (c = e[l]), o ? or(r, l, c) : tr(r, l, c)
                }
                return r
              }

              function Mi(e, t) {
                return function(n, r) {
                  var i = Va(n) ? Tt : rr,
                    o = t ? t() : {};
                  return i(n, e, lo(r, 2), o)
                }
              }

              function Di(e) {
                return $r((function(t, r) {
                  var i = -1,
                    o = r.length,
                    a = o > 1 ? r[o - 1] : n,
                    s = o > 2 ? r[2] : n;
                  for (a = e.length > 3 && "function" == typeof a ? (o--, a) : n, s && yo(r[0], r[1], s) && (a = o < 3 ? n : a, o = 1), t = Ee(t); ++i < o;) {
                    var l = r[i];
                    l && e(t, l, i, a)
                  }
                  return t
                }))
              }

              function Ii(e, t) {
                return function(n, r) {
                  if (null == n) return n;
                  if (!Ga(n)) return e(n, r);
                  for (var i = n.length, o = t ? i : -1, a = Ee(n);
                    (t ? o-- : ++o < i) && !1 !== r(a[o], o, a););
                  return n
                }
              }

              function Ni(e) {
                return function(t, n, r) {
                  for (var i = -1, o = Ee(t), a = r(t), s = a.length; s--;) {
                    var l = a[e ? s : ++i];
                    if (!1 === n(o[l], l, o)) break
                  }
                  return t
                }
              }

              function Ri(e) {
                return function(t) {
                  var r = sn(t = _s(t)) ? fn(t) : n,
                    i = r ? r[0] : t.charAt(0),
                    o = r ? wi(r, 1).join("") : t.slice(1);
                  return i[e]() + o
                }
              }

              function ji(e) {
                return function(t) {
                  return jt(Zs(Ws(t).replace(Qe, "")), e, "")
                }
              }

              function Li(e) {
                return function() {
                  var t = arguments;
                  switch (t.length) {
                    case 0:
                      return new e;
                    case 1:
                      return new e(t[0]);
                    case 2:
                      return new e(t[0], t[1]);
                    case 3:
                      return new e(t[0], t[1], t[2]);
                    case 4:
                      return new e(t[0], t[1], t[2], t[3]);
                    case 5:
                      return new e(t[0], t[1], t[2], t[3], t[4]);
                    case 6:
                      return new e(t[0], t[1], t[2], t[3], t[4], t[5]);
                    case 7:
                      return new e(t[0], t[1], t[2], t[3], t[4], t[5], t[6])
                  }
                  var n = Hn(e.prototype),
                    r = e.apply(n, t);
                  return es(r) ? r : n
                }
              }

              function Fi(e) {
                return function(t, r, i) {
                  var o = Ee(t);
                  if (!Ga(t)) {
                    var a = lo(r, 3);
                    t = Ms(t), r = function(e) {
                      return a(o[e], e, o)
                    }
                  }
                  var s = e(t, r, i);
                  return s > -1 ? o[a ? t[s] : s] : n
                }
              }

              function Bi(e) {
                return no((function(t) {
                  var i = t.length,
                    o = i,
                    a = Wn.prototype.thru;
                  for (e && t.reverse(); o--;) {
                    var s = t[o];
                    if ("function" != typeof s) throw new Ae(r);
                    if (a && !l && "wrapper" == ao(s)) var l = new Wn([], !0)
                  }
                  for (o = l ? o : i; ++o < i;) {
                    var c = ao(s = t[o]),
                      u = "wrapper" == c ? oo(s) : n;
                    l = u && xo(u[0]) && 424 == u[1] && !u[4].length && 1 == u[9] ? l[ao(u[0])].apply(l, u[3]) : 1 == s.length && xo(s) ? l[c]() : l.thru(s)
                  }
                  return function() {
                    var e = arguments,
                      n = e[0];
                    if (l && 1 == e.length && Va(n)) return l.plant(n).value();
                    for (var r = 0, o = i ? t[r].apply(this, e) : n; ++r < i;) o = t[r].call(this, o);
                    return o
                  }
                }))
              }

              function zi(e, t, r, i, o, a, s, l, u, h) {
                var p = t & c,
                  d = 1 & t,
                  f = 2 & t,
                  g = 24 & t,
                  m = 512 & t,
                  v = f ? n : Li(e);
                return function c() {
                  for (var _ = arguments.length, b = W(_), y = _; y--;) b[y] = arguments[y];
                  if (g) var w = so(c),
                    x = function(e, t) {
                      for (var n = e.length, r = 0; n--;) e[n] === t && ++r;
                      return r
                    }(b, w);
                  if (i && (b = Ti(b, i, o, g)), a && (b = Oi(b, a, s, g)), _ -= x, g && _ < h) {
                    var k = un(b, w);
                    return Yi(e, t, zi, c.placeholder, r, b, k, l, u, h - _)
                  }
                  var C = d ? r : this,
                    S = f ? C[e] : e;
                  return _ = b.length, l ? b = function(e, t) {
                    var r = e.length,
                      i = bn(t.length, r),
                      o = Ai(e);
                    for (; i--;) {
                      var a = t[i];
                      e[i] = bo(a, r) ? o[a] : n
                    }
                    return e
                  }(b, l) : m && _ > 1 && b.reverse(), p && u < _ && (b.length = u), this && this !== ft && this instanceof c && (S = v || Li(S)), S.apply(C, b)
                }
              }

              function Hi(e, t) {
                return function(n, r) {
                  return function(e, t, n, r) {
                    return yr(e, (function(e, i, o) {
                      t(r, n(e), i, o)
                    })), r
                  }(n, e, t(r), {})
                }
              }

              function Ui(e, t) {
                return function(r, i) {
                  var o;
                  if (r === n && i === n) return t;
                  if (r !== n && (o = r), i !== n) {
                    if (o === n) return i;
                    "string" == typeof r || "string" == typeof i ? (r = ci(r), i = ci(i)) : (r = li(r), i = li(i)), o = e(r, i)
                  }
                  return o
                }
              }

              function Wi(e) {
                return no((function(t) {
                  return t = Nt(t, Jt(lo())), $r((function(n) {
                    var r = this;
                    return e(t, (function(e) {
                      return Et(e, r, n)
                    }))
                  }))
                }))
              }

              function Vi(e, t) {
                var r = (t = t === n ? " " : ci(t)).length;
                if (r < 2) return r ? Kr(t, e) : t;
                var i = Kr(t, dt(e / dn(t)));
                return sn(t) ? wi(fn(i), 0, e).join("") : i.slice(0, e)
              }

              function Xi(e) {
                return function(t, r, i) {
                  return i && "number" != typeof i && yo(t, r, i) && (r = i = n), t = ds(t), r === n ? (r = t, t = 0) : r = ds(r),
                    function(e, t, n, r) {
                      for (var i = -1, o = _n(dt((t - e) / (n || 1)), 0), a = W(o); o--;) a[r ? o : ++i] = e, e += n;
                      return a
                    }(t, r, i = i === n ? t < r ? 1 : -1 : ds(i), e)
                }
              }

              function Gi(e) {
                return function(t, n) {
                  return "string" == typeof t && "string" == typeof n || (t = ms(t), n = ms(n)), e(t, n)
                }
              }

              function Yi(e, t, r, i, o, a, c, u, h, p) {
                var d = 8 & t;
                t |= d ? s : l, 4 & (t &= ~(d ? l : s)) || (t &= -4);
                var f = [e, t, o, d ? a : n, d ? c : n, d ? n : a, d ? n : c, u, h, p],
                  g = r.apply(n, f);
                return xo(e) && Po(g, f), g.placeholder = i, Io(g, e, t)
              }

              function qi(e) {
                var t = Se[e];
                return function(e, n) {
                  if (e = ms(e), (n = null == n ? 0 : bn(fs(n), 292)) && bt(e)) {
                    var r = (_s(e) + "e").split("e");
                    return +((r = (_s(t(r[0] + "e" + (+r[1] + n))) + "e").split("e"))[0] + "e" + (+r[1] - n))
                  }
                  return t(e)
                }
              }
              var Ki = Tn && 1 / hn(new Tn([, -0]))[1] == h ? function(e) {
                return new Tn(e)
              } : ll;

              function $i(e) {
                return function(t) {
                  var n = go(t);
                  return n == k ? ln(t) : n == O ? pn(t) : function(e, t) {
                    return Nt(t, (function(t) {
                      return [t, e[t]]
                    }))
                  }(t, e(t))
                }
              }

              function Zi(e, t, i, h, p, d, f, g) {
                var m = 2 & t;
                if (!m && "function" != typeof e) throw new Ae(r);
                var v = h ? h.length : 0;
                if (v || (t &= -97, h = p = n), f = f === n ? f : _n(fs(f), 0), g = g === n ? g : fs(g), v -= p ? p.length : 0, t & l) {
                  var _ = h,
                    b = p;
                  h = p = n
                }
                var y = m ? n : oo(e),
                  w = [e, t, i, h, p, _, b, d, f, g];
                if (y && function(e, t) {
                    var n = e[1],
                      r = t[1],
                      i = n | r,
                      a = i < 131,
                      s = r == c && 8 == n || r == c && n == u && e[7].length <= t[8] || 384 == r && t[7].length <= t[8] && 8 == n;
                    if (!a && !s) return e;
                    1 & r && (e[2] = t[2], i |= 1 & n ? 0 : 4);
                    var l = t[3];
                    if (l) {
                      var h = e[3];
                      e[3] = h ? Ti(h, l, t[4]) : l, e[4] = h ? un(e[3], o) : t[4]
                    }(l = t[5]) && (h = e[5], e[5] = h ? Oi(h, l, t[6]) : l, e[6] = h ? un(e[5], o) : t[6]);
                    (l = t[7]) && (e[7] = l);
                    r & c && (e[8] = null == e[8] ? t[8] : bn(e[8], t[8]));
                    null == e[9] && (e[9] = t[9]);
                    e[0] = t[0], e[1] = i
                  }(w, y), e = w[0], t = w[1], i = w[2], h = w[3], p = w[4], !(g = w[9] = w[9] === n ? m ? 0 : e.length : _n(w[9] - v, 0)) && 24 & t && (t &= -25), t && 1 != t) x = 8 == t || t == a ? function(e, t, r) {
                  var i = Li(e);
                  return function o() {
                    for (var a = arguments.length, s = W(a), l = a, c = so(o); l--;) s[l] = arguments[l];
                    var u = a < 3 && s[0] !== c && s[a - 1] !== c ? [] : un(s, c);
                    return (a -= u.length) < r ? Yi(e, t, zi, o.placeholder, n, s, u, n, n, r - a) : Et(this && this !== ft && this instanceof o ? i : e, this, s)
                  }
                }(e, t, g) : t != s && 33 != t || p.length ? zi.apply(n, w) : function(e, t, n, r) {
                  var i = 1 & t,
                    o = Li(e);
                  return function t() {
                    for (var a = -1, s = arguments.length, l = -1, c = r.length, u = W(c + s), h = this && this !== ft && this instanceof t ? o : e; ++l < c;) u[l] = r[l];
                    for (; s--;) u[l++] = arguments[++a];
                    return Et(h, i ? n : this, u)
                  }
                }(e, t, i, h);
                else var x = function(e, t, n) {
                  var r = 1 & t,
                    i = Li(e);
                  return function t() {
                    return (this && this !== ft && this instanceof t ? i : e).apply(r ? n : this, arguments)
                  }
                }(e, t, i);
                return Io((y ? ei : Po)(x, w), e, t)
              }

              function Ji(e, t, r, i) {
                return e === n || za(e, De[r]) && !Re.call(i, r) ? t : e
              }

              function Qi(e, t, r, i, o, a) {
                return es(e) && es(t) && (a.set(t, e), Ur(e, t, n, Qi, a), a.delete(t)), e
              }

              function eo(e) {
                return is(e) ? n : e
              }

              function to(e, t, r, i, o, a) {
                var s = 1 & r,
                  l = e.length,
                  c = t.length;
                if (l != c && !(s && c > l)) return !1;
                var u = a.get(e),
                  h = a.get(t);
                if (u && h) return u == t && h == e;
                var p = -1,
                  d = !0,
                  f = 2 & r ? new qn : n;
                for (a.set(e, t), a.set(t, e); ++p < l;) {
                  var g = e[p],
                    m = t[p];
                  if (i) var v = s ? i(m, g, p, t, e, a) : i(g, m, p, e, t, a);
                  if (v !== n) {
                    if (v) continue;
                    d = !1;
                    break
                  }
                  if (f) {
                    if (!Ft(t, (function(e, t) {
                        if (!en(f, t) && (g === e || o(g, e, r, i, a))) return f.push(t)
                      }))) {
                      d = !1;
                      break
                    }
                  } else if (g !== m && !o(g, m, r, i, a)) {
                    d = !1;
                    break
                  }
                }
                return a.delete(e), a.delete(t), d
              }

              function no(e) {
                return Do(To(e, n, Xo), e + "")
              }

              function ro(e) {
                return Cr(e, Ms, po)
              }

              function io(e) {
                return Cr(e, Ds, fo)
              }
              var oo = Pn ? function(e) {
                return Pn.get(e)
              } : ll;

              function ao(e) {
                for (var t = e.name + "", n = Mn[t], r = Re.call(Mn, t) ? n.length : 0; r--;) {
                  var i = n[r],
                    o = i.func;
                  if (null == o || o == e) return i.name
                }
                return t
              }

              function so(e) {
                return (Re.call(zn, "placeholder") ? zn : e).placeholder
              }

              function lo() {
                var e = zn.iteratee || il;
                return e = e === il ? Rr : e, arguments.length ? e(arguments[0], arguments[1]) : e
              }

              function co(e, t) {
                var n, r, i = e.__data__;
                return ("string" == (r = typeof(n = t)) || "number" == r || "symbol" == r || "boolean" == r ? "__proto__" !== n : null === n) ? i["string" == typeof t ? "string" : "hash"] : i.map
              }

              function uo(e) {
                for (var t = Ms(e), n = t.length; n--;) {
                  var r = t[n],
                    i = e[r];
                  t[n] = [r, i, So(i)]
                }
                return t
              }

              function ho(e, t) {
                var r = function(e, t) {
                  return null == e ? n : e[t]
                }(e, t);
                return Nr(r) ? r : n
              }
              var po = mt ? function(e) {
                  return null == e ? [] : (e = Ee(e), Mt(mt(e), (function(t) {
                    return qe.call(e, t)
                  })))
                } : gl,
                fo = mt ? function(e) {
                  for (var t = []; e;) Rt(t, po(e)), e = Ge(e);
                  return t
                } : gl,
                go = Sr;

              function mo(e, t, n) {
                for (var r = -1, i = (t = bi(t, e)).length, o = !1; ++r < i;) {
                  var a = Lo(t[r]);
                  if (!(o = null != e && n(e, a))) break;
                  e = e[a]
                }
                return o || ++r != i ? o : !!(i = null == e ? 0 : e.length) && Qa(i) && bo(a, i) && (Va(e) || Wa(e))
              }

              function vo(e) {
                return "function" != typeof e.constructor || Co(e) ? {} : Hn(Ge(e))
              }

              function _o(e) {
                return Va(e) || Wa(e) || !!($e && e && e[$e])
              }

              function bo(e, t) {
                var n = typeof e;
                return !!(t = null == t ? p : t) && ("number" == n || "symbol" != n && be.test(e)) && e > -1 && e % 1 == 0 && e < t
              }

              function yo(e, t, n) {
                if (!es(n)) return !1;
                var r = typeof t;
                return !!("number" == r ? Ga(n) && bo(t, n.length) : "string" == r && t in n) && za(n[t], e)
              }

              function wo(e, t) {
                if (Va(e)) return !1;
                var n = typeof e;
                return !("number" != n && "symbol" != n && "boolean" != n && null != e && !ls(e)) || (te.test(e) || !ee.test(e) || null != t && e in Ee(t))
              }

              function xo(e) {
                var t = ao(e),
                  n = zn[t];
                if ("function" != typeof n || !(t in Vn.prototype)) return !1;
                if (e === n) return !0;
                var r = oo(n);
                return !!r && e === r[0]
              }(Cn && go(new Cn(new ArrayBuffer(1))) != I || Sn && go(new Sn) != k || En && go(En.resolve()) != E || Tn && go(new Tn) != O || On && go(new On) != M) && (go = function(e) {
                var t = Sr(e),
                  r = t == S ? e.constructor : n,
                  i = r ? Fo(r) : "";
                if (i) switch (i) {
                  case Dn:
                    return I;
                  case In:
                    return k;
                  case Nn:
                    return E;
                  case Rn:
                    return O;
                  case jn:
                    return M
                }
                return t
              });
              var ko = Ie ? Za : ml;

              function Co(e) {
                var t = e && e.constructor;
                return e === ("function" == typeof t && t.prototype || De)
              }

              function So(e) {
                return e == e && !es(e)
              }

              function Eo(e, t) {
                return function(r) {
                  return null != r && (r[e] === t && (t !== n || e in Ee(r)))
                }
              }

              function To(e, t, r) {
                return t = _n(t === n ? e.length - 1 : t, 0),
                  function() {
                    for (var n = arguments, i = -1, o = _n(n.length - t, 0), a = W(o); ++i < o;) a[i] = n[t + i];
                    i = -1;
                    for (var s = W(t + 1); ++i < t;) s[i] = n[i];
                    return s[t] = r(a), Et(e, this, s)
                  }
              }

              function Oo(e, t) {
                return t.length < 2 ? e : kr(e, ri(t, 0, -1))
              }

              function Ao(e, t) {
                if (("constructor" !== t || "function" != typeof e[t]) && "__proto__" != t) return e[t]
              }
              var Po = No(ei),
                Mo = pt || function(e, t) {
                  return ft.setTimeout(e, t)
                },
                Do = No(ti);

              function Io(e, t, n) {
                var r = t + "";
                return Do(e, function(e, t) {
                  var n = t.length;
                  if (!n) return e;
                  var r = n - 1;
                  return t[r] = (n > 1 ? "& " : "") + t[r], t = t.join(n > 2 ? ", " : " "), e.replace(se, "{\n/* [wrapped with " + t + "] */\n")
                }(r, function(e, t) {
                  return Ot(g, (function(n) {
                    var r = "_." + n[0];
                    t & n[1] && !Dt(e, r) && e.push(r)
                  })), e.sort()
                }(function(e) {
                  var t = e.match(le);
                  return t ? t[1].split(ce) : []
                }(r), n)))
              }

              function No(e) {
                var t = 0,
                  r = 0;
                return function() {
                  var i = yn(),
                    o = 16 - (i - r);
                  if (r = i, o > 0) {
                    if (++t >= 800) return arguments[0]
                  } else t = 0;
                  return e.apply(n, arguments)
                }
              }

              function Ro(e, t) {
                var r = -1,
                  i = e.length,
                  o = i - 1;
                for (t = t === n ? i : t; ++r < t;) {
                  var a = qr(r, o),
                    s = e[a];
                  e[a] = e[r], e[r] = s
                }
                return e.length = t, e
              }
              var jo = function(e) {
                var t = Na(e, (function(e) {
                    return 500 === n.size && n.clear(), e
                  })),
                  n = t.cache;
                return t
              }((function(e) {
                var t = [];
                return 46 === e.charCodeAt(0) && t.push(""), e.replace(ne, (function(e, n, r, i) {
                  t.push(r ? i.replace(pe, "$1") : n || e)
                })), t
              }));

              function Lo(e) {
                if ("string" == typeof e || ls(e)) return e;
                var t = e + "";
                return "0" == t && 1 / e == -1 / 0 ? "-0" : t
              }

              function Fo(e) {
                if (null != e) {
                  try {
                    return Ne.call(e)
                  } catch (e) {}
                  try {
                    return e + ""
                  } catch (e) {}
                }
                return ""
              }

              function Bo(e) {
                if (e instanceof Vn) return e.clone();
                var t = new Wn(e.__wrapped__, e.__chain__);
                return t.__actions__ = Ai(e.__actions__), t.__index__ = e.__index__, t.__values__ = e.__values__, t
              }
              var zo = $r((function(e, t) {
                  return Ya(e) ? hr(e, vr(t, 1, Ya, !0)) : []
                })),
                Ho = $r((function(e, t) {
                  var r = $o(t);
                  return Ya(r) && (r = n), Ya(e) ? hr(e, vr(t, 1, Ya, !0), lo(r, 2)) : []
                })),
                Uo = $r((function(e, t) {
                  var r = $o(t);
                  return Ya(r) && (r = n), Ya(e) ? hr(e, vr(t, 1, Ya, !0), n, r) : []
                }));

              function Wo(e, t, n) {
                var r = null == e ? 0 : e.length;
                if (!r) return -1;
                var i = null == n ? 0 : fs(n);
                return i < 0 && (i = _n(r + i, 0)), Ht(e, lo(t, 3), i)
              }

              function Vo(e, t, r) {
                var i = null == e ? 0 : e.length;
                if (!i) return -1;
                var o = i - 1;
                return r !== n && (o = fs(r), o = r < 0 ? _n(i + o, 0) : bn(o, i - 1)), Ht(e, lo(t, 3), o, !0)
              }

              function Xo(e) {
                return (null == e ? 0 : e.length) ? vr(e, 1) : []
              }

              function Go(e) {
                return e && e.length ? e[0] : n
              }
              var Yo = $r((function(e) {
                  var t = Nt(e, vi);
                  return t.length && t[0] === e[0] ? Ar(t) : []
                })),
                qo = $r((function(e) {
                  var t = $o(e),
                    r = Nt(e, vi);
                  return t === $o(r) ? t = n : r.pop(), r.length && r[0] === e[0] ? Ar(r, lo(t, 2)) : []
                })),
                Ko = $r((function(e) {
                  var t = $o(e),
                    r = Nt(e, vi);
                  return (t = "function" == typeof t ? t : n) && r.pop(), r.length && r[0] === e[0] ? Ar(r, n, t) : []
                }));

              function $o(e) {
                var t = null == e ? 0 : e.length;
                return t ? e[t - 1] : n
              }
              var Zo = $r(Jo);

              function Jo(e, t) {
                return e && e.length && t && t.length ? Gr(e, t) : e
              }
              var Qo = no((function(e, t) {
                var n = null == e ? 0 : e.length,
                  r = ar(e, t);
                return Yr(e, Nt(t, (function(e) {
                  return bo(e, n) ? +e : e
                })).sort(Ei)), r
              }));

              function ea(e) {
                return null == e ? e : kn.call(e)
              }
              var ta = $r((function(e) {
                  return ui(vr(e, 1, Ya, !0))
                })),
                na = $r((function(e) {
                  var t = $o(e);
                  return Ya(t) && (t = n), ui(vr(e, 1, Ya, !0), lo(t, 2))
                })),
                ra = $r((function(e) {
                  var t = $o(e);
                  return t = "function" == typeof t ? t : n, ui(vr(e, 1, Ya, !0), n, t)
                }));

              function ia(e) {
                if (!e || !e.length) return [];
                var t = 0;
                return e = Mt(e, (function(e) {
                  if (Ya(e)) return t = _n(e.length, t), !0
                })), $t(t, (function(t) {
                  return Nt(e, Gt(t))
                }))
              }

              function oa(e, t) {
                if (!e || !e.length) return [];
                var r = ia(e);
                return null == t ? r : Nt(r, (function(e) {
                  return Et(t, n, e)
                }))
              }
              var aa = $r((function(e, t) {
                  return Ya(e) ? hr(e, t) : []
                })),
                sa = $r((function(e) {
                  return gi(Mt(e, Ya))
                })),
                la = $r((function(e) {
                  var t = $o(e);
                  return Ya(t) && (t = n), gi(Mt(e, Ya), lo(t, 2))
                })),
                ca = $r((function(e) {
                  var t = $o(e);
                  return t = "function" == typeof t ? t : n, gi(Mt(e, Ya), n, t)
                })),
                ua = $r(ia);
              var ha = $r((function(e) {
                var t = e.length,
                  r = t > 1 ? e[t - 1] : n;
                return r = "function" == typeof r ? (e.pop(), r) : n, oa(e, r)
              }));

              function pa(e) {
                var t = zn(e);
                return t.__chain__ = !0, t
              }

              function da(e, t) {
                return t(e)
              }
              var fa = no((function(e) {
                var t = e.length,
                  r = t ? e[0] : 0,
                  i = this.__wrapped__,
                  o = function(t) {
                    return ar(t, e)
                  };
                return !(t > 1 || this.__actions__.length) && i instanceof Vn && bo(r) ? ((i = i.slice(r, +r + (t ? 1 : 0))).__actions__.push({
                  func: da,
                  args: [o],
                  thisArg: n
                }), new Wn(i, this.__chain__).thru((function(e) {
                  return t && !e.length && e.push(n), e
                }))) : this.thru(o)
              }));
              var ga = Mi((function(e, t, n) {
                Re.call(e, n) ? ++e[n] : or(e, n, 1)
              }));
              var ma = Fi(Wo),
                va = Fi(Vo);

              function _a(e, t) {
                return (Va(e) ? Ot : pr)(e, lo(t, 3))
              }

              function ba(e, t) {
                return (Va(e) ? At : dr)(e, lo(t, 3))
              }
              var ya = Mi((function(e, t, n) {
                Re.call(e, n) ? e[n].push(t) : or(e, n, [t])
              }));
              var wa = $r((function(e, t, n) {
                  var r = -1,
                    i = "function" == typeof t,
                    o = Ga(e) ? W(e.length) : [];
                  return pr(e, (function(e) {
                    o[++r] = i ? Et(t, e, n) : Pr(e, t, n)
                  })), o
                })),
                xa = Mi((function(e, t, n) {
                  or(e, n, t)
                }));

              function ka(e, t) {
                return (Va(e) ? Nt : Br)(e, lo(t, 3))
              }
              var Ca = Mi((function(e, t, n) {
                e[n ? 0 : 1].push(t)
              }), (function() {
                return [
                  [],
                  []
                ]
              }));
              var Sa = $r((function(e, t) {
                  if (null == e) return [];
                  var n = t.length;
                  return n > 1 && yo(e, t[0], t[1]) ? t = [] : n > 2 && yo(t[0], t[1], t[2]) && (t = [t[0]]), Vr(e, vr(t, 1), [])
                })),
                Ea = ct || function() {
                  return ft.Date.now()
                };

              function Ta(e, t, r) {
                return t = r ? n : t, t = e && null == t ? e.length : t, Zi(e, c, n, n, n, n, t)
              }

              function Oa(e, t) {
                var i;
                if ("function" != typeof t) throw new Ae(r);
                return e = fs(e),
                  function() {
                    return --e > 0 && (i = t.apply(this, arguments)), e <= 1 && (t = n), i
                  }
              }
              var Aa = $r((function(e, t, n) {
                  var r = 1;
                  if (n.length) {
                    var i = un(n, so(Aa));
                    r |= s
                  }
                  return Zi(e, r, t, n, i)
                })),
                Pa = $r((function(e, t, n) {
                  var r = 3;
                  if (n.length) {
                    var i = un(n, so(Pa));
                    r |= s
                  }
                  return Zi(t, r, e, n, i)
                }));

              function Ma(e, t, i) {
                var o, a, s, l, c, u, h = 0,
                  p = !1,
                  d = !1,
                  f = !0;
                if ("function" != typeof e) throw new Ae(r);

                function g(t) {
                  var r = o,
                    i = a;
                  return o = a = n, h = t, l = e.apply(i, r)
                }

                function m(e) {
                  var r = e - u;
                  return u === n || r >= t || r < 0 || d && e - h >= s
                }

                function v() {
                  var e = Ea();
                  if (m(e)) return _(e);
                  c = Mo(v, function(e) {
                    var n = t - (e - u);
                    return d ? bn(n, s - (e - h)) : n
                  }(e))
                }

                function _(e) {
                  return c = n, f && o ? g(e) : (o = a = n, l)
                }

                function b() {
                  var e = Ea(),
                    r = m(e);
                  if (o = arguments, a = this, u = e, r) {
                    if (c === n) return function(e) {
                      return h = e, c = Mo(v, t), p ? g(e) : l
                    }(u);
                    if (d) return xi(c), c = Mo(v, t), g(u)
                  }
                  return c === n && (c = Mo(v, t)), l
                }
                return t = ms(t) || 0, es(i) && (p = !!i.leading, s = (d = "maxWait" in i) ? _n(ms(i.maxWait) || 0, t) : s, f = "trailing" in i ? !!i.trailing : f), b.cancel = function() {
                  c !== n && xi(c), h = 0, o = u = a = c = n
                }, b.flush = function() {
                  return c === n ? l : _(Ea())
                }, b
              }
              var Da = $r((function(e, t) {
                  return ur(e, 1, t)
                })),
                Ia = $r((function(e, t, n) {
                  return ur(e, ms(t) || 0, n)
                }));

              function Na(e, t) {
                if ("function" != typeof e || null != t && "function" != typeof t) throw new Ae(r);
                var n = function() {
                  var r = arguments,
                    i = t ? t.apply(this, r) : r[0],
                    o = n.cache;
                  if (o.has(i)) return o.get(i);
                  var a = e.apply(this, r);
                  return n.cache = o.set(i, a) || o, a
                };
                return n.cache = new(Na.Cache || Yn), n
              }

              function Ra(e) {
                if ("function" != typeof e) throw new Ae(r);
                return function() {
                  var t = arguments;
                  switch (t.length) {
                    case 0:
                      return !e.call(this);
                    case 1:
                      return !e.call(this, t[0]);
                    case 2:
                      return !e.call(this, t[0], t[1]);
                    case 3:
                      return !e.call(this, t[0], t[1], t[2])
                  }
                  return !e.apply(this, t)
                }
              }
              Na.Cache = Yn;
              var ja = yi((function(e, t) {
                  var n = (t = 1 == t.length && Va(t[0]) ? Nt(t[0], Jt(lo())) : Nt(vr(t, 1), Jt(lo()))).length;
                  return $r((function(r) {
                    for (var i = -1, o = bn(r.length, n); ++i < o;) r[i] = t[i].call(this, r[i]);
                    return Et(e, this, r)
                  }))
                })),
                La = $r((function(e, t) {
                  var r = un(t, so(La));
                  return Zi(e, s, n, t, r)
                })),
                Fa = $r((function(e, t) {
                  var r = un(t, so(Fa));
                  return Zi(e, l, n, t, r)
                })),
                Ba = no((function(e, t) {
                  return Zi(e, u, n, n, n, t)
                }));

              function za(e, t) {
                return e === t || e != e && t != t
              }
              var Ha = Gi(Er),
                Ua = Gi((function(e, t) {
                  return e >= t
                })),
                Wa = Mr(function() {
                  return arguments
                }()) ? Mr : function(e) {
                  return ts(e) && Re.call(e, "callee") && !qe.call(e, "callee")
                },
                Va = W.isArray,
                Xa = yt ? Jt(yt) : function(e) {
                  return ts(e) && Sr(e) == D
                };

              function Ga(e) {
                return null != e && Qa(e.length) && !Za(e)
              }

              function Ya(e) {
                return ts(e) && Ga(e)
              }
              var qa = _t || ml,
                Ka = wt ? Jt(wt) : function(e) {
                  return ts(e) && Sr(e) == b
                };

              function $a(e) {
                if (!ts(e)) return !1;
                var t = Sr(e);
                return t == y || "[object DOMException]" == t || "string" == typeof e.message && "string" == typeof e.name && !is(e)
              }

              function Za(e) {
                if (!es(e)) return !1;
                var t = Sr(e);
                return t == w || t == x || "[object AsyncFunction]" == t || "[object Proxy]" == t
              }

              function Ja(e) {
                return "number" == typeof e && e == fs(e)
              }

              function Qa(e) {
                return "number" == typeof e && e > -1 && e % 1 == 0 && e <= p
              }

              function es(e) {
                var t = typeof e;
                return null != e && ("object" == t || "function" == t)
              }

              function ts(e) {
                return null != e && "object" == typeof e
              }
              var ns = xt ? Jt(xt) : function(e) {
                return ts(e) && go(e) == k
              };

              function rs(e) {
                return "number" == typeof e || ts(e) && Sr(e) == C
              }

              function is(e) {
                if (!ts(e) || Sr(e) != S) return !1;
                var t = Ge(e);
                if (null === t) return !0;
                var n = Re.call(t, "constructor") && t.constructor;
                return "function" == typeof n && n instanceof n && Ne.call(n) == Be
              }
              var os = kt ? Jt(kt) : function(e) {
                return ts(e) && Sr(e) == T
              };
              var as = Ct ? Jt(Ct) : function(e) {
                return ts(e) && go(e) == O
              };

              function ss(e) {
                return "string" == typeof e || !Va(e) && ts(e) && Sr(e) == A
              }

              function ls(e) {
                return "symbol" == typeof e || ts(e) && Sr(e) == P
              }
              var cs = St ? Jt(St) : function(e) {
                return ts(e) && Qa(e.length) && !!st[Sr(e)]
              };
              var us = Gi(Fr),
                hs = Gi((function(e, t) {
                  return e <= t
                }));

              function ps(e) {
                if (!e) return [];
                if (Ga(e)) return ss(e) ? fn(e) : Ai(e);
                if (Ze && e[Ze]) return function(e) {
                  for (var t, n = []; !(t = e.next()).done;) n.push(t.value);
                  return n
                }(e[Ze]());
                var t = go(e);
                return (t == k ? ln : t == O ? hn : zs)(e)
              }

              function ds(e) {
                return e ? (e = ms(e)) === h || e === -1 / 0 ? 17976931348623157e292 * (e < 0 ? -1 : 1) : e == e ? e : 0 : 0 === e ? e : 0
              }

              function fs(e) {
                var t = ds(e),
                  n = t % 1;
                return t == t ? n ? t - n : t : 0
              }

              function gs(e) {
                return e ? sr(fs(e), 0, f) : 0
              }

              function ms(e) {
                if ("number" == typeof e) return e;
                if (ls(e)) return d;
                if (es(e)) {
                  var t = "function" == typeof e.valueOf ? e.valueOf() : e;
                  e = es(t) ? t + "" : t
                }
                if ("string" != typeof e) return 0 === e ? e : +e;
                e = Zt(e);
                var n = me.test(e);
                return n || _e.test(e) ? ht(e.slice(2), n ? 2 : 8) : ge.test(e) ? d : +e
              }

              function vs(e) {
                return Pi(e, Ds(e))
              }

              function _s(e) {
                return null == e ? "" : ci(e)
              }
              var bs = Di((function(e, t) {
                  if (Co(t) || Ga(t)) Pi(t, Ms(t), e);
                  else
                    for (var n in t) Re.call(t, n) && tr(e, n, t[n])
                })),
                ys = Di((function(e, t) {
                  Pi(t, Ds(t), e)
                })),
                ws = Di((function(e, t, n, r) {
                  Pi(t, Ds(t), e, r)
                })),
                xs = Di((function(e, t, n, r) {
                  Pi(t, Ms(t), e, r)
                })),
                ks = no(ar);
              var Cs = $r((function(e, t) {
                  e = Ee(e);
                  var r = -1,
                    i = t.length,
                    o = i > 2 ? t[2] : n;
                  for (o && yo(t[0], t[1], o) && (i = 1); ++r < i;)
                    for (var a = t[r], s = Ds(a), l = -1, c = s.length; ++l < c;) {
                      var u = s[l],
                        h = e[u];
                      (h === n || za(h, De[u]) && !Re.call(e, u)) && (e[u] = a[u])
                    }
                  return e
                })),
                Ss = $r((function(e) {
                  return e.push(n, Qi), Et(Ns, n, e)
                }));

              function Es(e, t, r) {
                var i = null == e ? n : kr(e, t);
                return i === n ? r : i
              }

              function Ts(e, t) {
                return null != e && mo(e, t, Or)
              }
              var Os = Hi((function(e, t, n) {
                  null != t && "function" != typeof t.toString && (t = Fe.call(t)), e[t] = n
                }), el(rl)),
                As = Hi((function(e, t, n) {
                  null != t && "function" != typeof t.toString && (t = Fe.call(t)), Re.call(e, t) ? e[t].push(n) : e[t] = [n]
                }), lo),
                Ps = $r(Pr);

              function Ms(e) {
                return Ga(e) ? $n(e) : jr(e)
              }

              function Ds(e) {
                return Ga(e) ? $n(e, !0) : Lr(e)
              }
              var Is = Di((function(e, t, n) {
                  Ur(e, t, n)
                })),
                Ns = Di((function(e, t, n, r) {
                  Ur(e, t, n, r)
                })),
                Rs = no((function(e, t) {
                  var n = {};
                  if (null == e) return n;
                  var r = !1;
                  t = Nt(t, (function(t) {
                    return t = bi(t, e), r || (r = t.length > 1), t
                  })), Pi(e, io(e), n), r && (n = lr(n, 7, eo));
                  for (var i = t.length; i--;) hi(n, t[i]);
                  return n
                }));
              var js = no((function(e, t) {
                return null == e ? {} : function(e, t) {
                  return Xr(e, t, (function(t, n) {
                    return Ts(e, n)
                  }))
                }(e, t)
              }));

              function Ls(e, t) {
                if (null == e) return {};
                var n = Nt(io(e), (function(e) {
                  return [e]
                }));
                return t = lo(t), Xr(e, n, (function(e, n) {
                  return t(e, n[0])
                }))
              }
              var Fs = $i(Ms),
                Bs = $i(Ds);

              function zs(e) {
                return null == e ? [] : Qt(e, Ms(e))
              }
              var Hs = ji((function(e, t, n) {
                return t = t.toLowerCase(), e + (n ? Us(t) : t)
              }));

              function Us(e) {
                return $s(_s(e).toLowerCase())
              }

              function Ws(e) {
                return (e = _s(e)) && e.replace(ye, rn).replace(et, "")
              }
              var Vs = ji((function(e, t, n) {
                  return e + (n ? "-" : "") + t.toLowerCase()
                })),
                Xs = ji((function(e, t, n) {
                  return e + (n ? " " : "") + t.toLowerCase()
                })),
                Gs = Ri("toLowerCase");
              var Ys = ji((function(e, t, n) {
                return e + (n ? "_" : "") + t.toLowerCase()
              }));
              var qs = ji((function(e, t, n) {
                return e + (n ? " " : "") + $s(t)
              }));
              var Ks = ji((function(e, t, n) {
                  return e + (n ? " " : "") + t.toUpperCase()
                })),
                $s = Ri("toUpperCase");

              function Zs(e, t, r) {
                return e = _s(e), (t = r ? n : t) === n ? function(e) {
                  return it.test(e)
                }(e) ? function(e) {
                  return e.match(nt) || []
                }(e) : function(e) {
                  return e.match(ue) || []
                }(e) : e.match(t) || []
              }
              var Js = $r((function(e, t) {
                  try {
                    return Et(e, n, t)
                  } catch (e) {
                    return $a(e) ? e : new ke(e)
                  }
                })),
                Qs = no((function(e, t) {
                  return Ot(t, (function(t) {
                    t = Lo(t), or(e, t, Aa(e[t], e))
                  })), e
                }));

              function el(e) {
                return function() {
                  return e
                }
              }
              var tl = Bi(),
                nl = Bi(!0);

              function rl(e) {
                return e
              }

              function il(e) {
                return Rr("function" == typeof e ? e : lr(e, 1))
              }
              var ol = $r((function(e, t) {
                  return function(n) {
                    return Pr(n, e, t)
                  }
                })),
                al = $r((function(e, t) {
                  return function(n) {
                    return Pr(e, n, t)
                  }
                }));

              function sl(e, t, n) {
                var r = Ms(t),
                  i = xr(t, r);
                null != n || es(t) && (i.length || !r.length) || (n = t, t = e, e = this, i = xr(t, Ms(t)));
                var o = !(es(n) && "chain" in n && !n.chain),
                  a = Za(e);
                return Ot(i, (function(n) {
                  var r = t[n];
                  e[n] = r, a && (e.prototype[n] = function() {
                    var t = this.__chain__;
                    if (o || t) {
                      var n = e(this.__wrapped__);
                      return (n.__actions__ = Ai(this.__actions__)).push({
                        func: r,
                        args: arguments,
                        thisArg: e
                      }), n.__chain__ = t, n
                    }
                    return r.apply(e, Rt([this.value()], arguments))
                  })
                })), e
              }

              function ll() {}
              var cl = Wi(Nt),
                ul = Wi(Pt),
                hl = Wi(Ft);

              function pl(e) {
                return wo(e) ? Gt(Lo(e)) : function(e) {
                  return function(t) {
                    return kr(t, e)
                  }
                }(e)
              }
              var dl = Xi(),
                fl = Xi(!0);

              function gl() {
                return []
              }

              function ml() {
                return !1
              }
              var vl = Ui((function(e, t) {
                  return e + t
                }), 0),
                _l = qi("ceil"),
                bl = Ui((function(e, t) {
                  return e / t
                }), 1),
                yl = qi("floor");
              var wl, xl = Ui((function(e, t) {
                  return e * t
                }), 1),
                kl = qi("round"),
                Cl = Ui((function(e, t) {
                  return e - t
                }), 0);
              return zn.after = function(e, t) {
                if ("function" != typeof t) throw new Ae(r);
                return e = fs(e),
                  function() {
                    if (--e < 1) return t.apply(this, arguments)
                  }
              }, zn.ary = Ta, zn.assign = bs, zn.assignIn = ys, zn.assignInWith = ws, zn.assignWith = xs, zn.at = ks, zn.before = Oa, zn.bind = Aa, zn.bindAll = Qs, zn.bindKey = Pa, zn.castArray = function() {
                if (!arguments.length) return [];
                var e = arguments[0];
                return Va(e) ? e : [e]
              }, zn.chain = pa, zn.chunk = function(e, t, r) {
                t = (r ? yo(e, t, r) : t === n) ? 1 : _n(fs(t), 0);
                var i = null == e ? 0 : e.length;
                if (!i || t < 1) return [];
                for (var o = 0, a = 0, s = W(dt(i / t)); o < i;) s[a++] = ri(e, o, o += t);
                return s
              }, zn.compact = function(e) {
                for (var t = -1, n = null == e ? 0 : e.length, r = 0, i = []; ++t < n;) {
                  var o = e[t];
                  o && (i[r++] = o)
                }
                return i
              }, zn.concat = function() {
                var e = arguments.length;
                if (!e) return [];
                for (var t = W(e - 1), n = arguments[0], r = e; r--;) t[r - 1] = arguments[r];
                return Rt(Va(n) ? Ai(n) : [n], vr(t, 1))
              }, zn.cond = function(e) {
                var t = null == e ? 0 : e.length,
                  n = lo();
                return e = t ? Nt(e, (function(e) {
                  if ("function" != typeof e[1]) throw new Ae(r);
                  return [n(e[0]), e[1]]
                })) : [], $r((function(n) {
                  for (var r = -1; ++r < t;) {
                    var i = e[r];
                    if (Et(i[0], this, n)) return Et(i[1], this, n)
                  }
                }))
              }, zn.conforms = function(e) {
                return function(e) {
                  var t = Ms(e);
                  return function(n) {
                    return cr(n, e, t)
                  }
                }(lr(e, 1))
              }, zn.constant = el, zn.countBy = ga, zn.create = function(e, t) {
                var n = Hn(e);
                return null == t ? n : ir(n, t)
              }, zn.curry = function e(t, r, i) {
                var o = Zi(t, 8, n, n, n, n, n, r = i ? n : r);
                return o.placeholder = e.placeholder, o
              }, zn.curryRight = function e(t, r, i) {
                var o = Zi(t, a, n, n, n, n, n, r = i ? n : r);
                return o.placeholder = e.placeholder, o
              }, zn.debounce = Ma, zn.defaults = Cs, zn.defaultsDeep = Ss, zn.defer = Da, zn.delay = Ia, zn.difference = zo, zn.differenceBy = Ho, zn.differenceWith = Uo, zn.drop = function(e, t, r) {
                var i = null == e ? 0 : e.length;
                return i ? ri(e, (t = r || t === n ? 1 : fs(t)) < 0 ? 0 : t, i) : []
              }, zn.dropRight = function(e, t, r) {
                var i = null == e ? 0 : e.length;
                return i ? ri(e, 0, (t = i - (t = r || t === n ? 1 : fs(t))) < 0 ? 0 : t) : []
              }, zn.dropRightWhile = function(e, t) {
                return e && e.length ? di(e, lo(t, 3), !0, !0) : []
              }, zn.dropWhile = function(e, t) {
                return e && e.length ? di(e, lo(t, 3), !0) : []
              }, zn.fill = function(e, t, r, i) {
                var o = null == e ? 0 : e.length;
                return o ? (r && "number" != typeof r && yo(e, t, r) && (r = 0, i = o), function(e, t, r, i) {
                  var o = e.length;
                  for ((r = fs(r)) < 0 && (r = -r > o ? 0 : o + r), (i = i === n || i > o ? o : fs(i)) < 0 && (i += o), i = r > i ? 0 : gs(i); r < i;) e[r++] = t;
                  return e
                }(e, t, r, i)) : []
              }, zn.filter = function(e, t) {
                return (Va(e) ? Mt : mr)(e, lo(t, 3))
              }, zn.flatMap = function(e, t) {
                return vr(ka(e, t), 1)
              }, zn.flatMapDeep = function(e, t) {
                return vr(ka(e, t), h)
              }, zn.flatMapDepth = function(e, t, r) {
                return r = r === n ? 1 : fs(r), vr(ka(e, t), r)
              }, zn.flatten = Xo, zn.flattenDeep = function(e) {
                return (null == e ? 0 : e.length) ? vr(e, h) : []
              }, zn.flattenDepth = function(e, t) {
                return (null == e ? 0 : e.length) ? vr(e, t = t === n ? 1 : fs(t)) : []
              }, zn.flip = function(e) {
                return Zi(e, 512)
              }, zn.flow = tl, zn.flowRight = nl, zn.fromPairs = function(e) {
                for (var t = -1, n = null == e ? 0 : e.length, r = {}; ++t < n;) {
                  var i = e[t];
                  r[i[0]] = i[1]
                }
                return r
              }, zn.functions = function(e) {
                return null == e ? [] : xr(e, Ms(e))
              }, zn.functionsIn = function(e) {
                return null == e ? [] : xr(e, Ds(e))
              }, zn.groupBy = ya, zn.initial = function(e) {
                return (null == e ? 0 : e.length) ? ri(e, 0, -1) : []
              }, zn.intersection = Yo, zn.intersectionBy = qo, zn.intersectionWith = Ko, zn.invert = Os, zn.invertBy = As, zn.invokeMap = wa, zn.iteratee = il, zn.keyBy = xa, zn.keys = Ms, zn.keysIn = Ds, zn.map = ka, zn.mapKeys = function(
                e, t) {
                var n = {};
                return t = lo(t, 3), yr(e, (function(e, r, i) {
                  or(n, t(e, r, i), e)
                })), n
              }, zn.mapValues = function(e, t) {
                var n = {};
                return t = lo(t, 3), yr(e, (function(e, r, i) {
                  or(n, r, t(e, r, i))
                })), n
              }, zn.matches = function(e) {
                return zr(lr(e, 1))
              }, zn.matchesProperty = function(e, t) {
                return Hr(e, lr(t, 1))
              }, zn.memoize = Na, zn.merge = Is, zn.mergeWith = Ns, zn.method = ol, zn.methodOf = al, zn.mixin = sl, zn.negate = Ra, zn.nthArg = function(e) {
                return e = fs(e), $r((function(t) {
                  return Wr(t, e)
                }))
              }, zn.omit = Rs, zn.omitBy = function(e, t) {
                return Ls(e, Ra(lo(t)))
              }, zn.once = function(e) {
                return Oa(2, e)
              }, zn.orderBy = function(e, t, r, i) {
                return null == e ? [] : (Va(t) || (t = null == t ? [] : [t]), Va(r = i ? n : r) || (r = null == r ? [] : [r]), Vr(e, t, r))
              }, zn.over = cl, zn.overArgs = ja, zn.overEvery = ul, zn.overSome = hl, zn.partial = La, zn.partialRight = Fa, zn.partition = Ca, zn.pick = js, zn.pickBy = Ls, zn.property = pl, zn.propertyOf = function(e) {
                return function(t) {
                  return null == e ? n : kr(e, t)
                }
              }, zn.pull = Zo, zn.pullAll = Jo, zn.pullAllBy = function(e, t, n) {
                return e && e.length && t && t.length ? Gr(e, t, lo(n, 2)) : e
              }, zn.pullAllWith = function(e, t, r) {
                return e && e.length && t && t.length ? Gr(e, t, n, r) : e
              }, zn.pullAt = Qo, zn.range = dl, zn.rangeRight = fl, zn.rearg = Ba, zn.reject = function(e, t) {
                return (Va(e) ? Mt : mr)(e, Ra(lo(t, 3)))
              }, zn.remove = function(e, t) {
                var n = [];
                if (!e || !e.length) return n;
                var r = -1,
                  i = [],
                  o = e.length;
                for (t = lo(t, 3); ++r < o;) {
                  var a = e[r];
                  t(a, r, e) && (n.push(a), i.push(r))
                }
                return Yr(e, i), n
              }, zn.rest = function(e, t) {
                if ("function" != typeof e) throw new Ae(r);
                return $r(e, t = t === n ? t : fs(t))
              }, zn.reverse = ea, zn.sampleSize = function(e, t, r) {
                return t = (r ? yo(e, t, r) : t === n) ? 1 : fs(t), (Va(e) ? Jn : Jr)(e, t)
              }, zn.set = function(e, t, n) {
                return null == e ? e : Qr(e, t, n)
              }, zn.setWith = function(e, t, r, i) {
                return i = "function" == typeof i ? i : n, null == e ? e : Qr(e, t, r, i)
              }, zn.shuffle = function(e) {
                return (Va(e) ? Qn : ni)(e)
              }, zn.slice = function(e, t, r) {
                var i = null == e ? 0 : e.length;
                return i ? (r && "number" != typeof r && yo(e, t, r) ? (t = 0, r = i) : (t = null == t ? 0 : fs(t), r = r === n ? i : fs(r)), ri(e, t, r)) : []
              }, zn.sortBy = Sa, zn.sortedUniq = function(e) {
                return e && e.length ? si(e) : []
              }, zn.sortedUniqBy = function(e, t) {
                return e && e.length ? si(e, lo(t, 2)) : []
              }, zn.split = function(e, t, r) {
                return r && "number" != typeof r && yo(e, t, r) && (t = r = n), (r = r === n ? f : r >>> 0) ? (e = _s(e)) && ("string" == typeof t || null != t && !os(t)) && !(t = ci(t)) && sn(e) ? wi(fn(e), 0, r) : e.split(t, r) : []
              }, zn.spread = function(e, t) {
                if ("function" != typeof e) throw new Ae(r);
                return t = null == t ? 0 : _n(fs(t), 0), $r((function(n) {
                  var r = n[t],
                    i = wi(n, 0, t);
                  return r && Rt(i, r), Et(e, this, i)
                }))
              }, zn.tail = function(e) {
                var t = null == e ? 0 : e.length;
                return t ? ri(e, 1, t) : []
              }, zn.take = function(e, t, r) {
                return e && e.length ? ri(e, 0, (t = r || t === n ? 1 : fs(t)) < 0 ? 0 : t) : []
              }, zn.takeRight = function(e, t, r) {
                var i = null == e ? 0 : e.length;
                return i ? ri(e, (t = i - (t = r || t === n ? 1 : fs(t))) < 0 ? 0 : t, i) : []
              }, zn.takeRightWhile = function(e, t) {
                return e && e.length ? di(e, lo(t, 3), !1, !0) : []
              }, zn.takeWhile = function(e, t) {
                return e && e.length ? di(e, lo(t, 3)) : []
              }, zn.tap = function(e, t) {
                return t(e), e
              }, zn.throttle = function(e, t, n) {
                var i = !0,
                  o = !0;
                if ("function" != typeof e) throw new Ae(r);
                return es(n) && (i = "leading" in n ? !!n.leading : i, o = "trailing" in n ? !!n.trailing : o), Ma(e, t, {
                  leading: i,
                  maxWait: t,
                  trailing: o
                })
              }, zn.thru = da, zn.toArray = ps, zn.toPairs = Fs, zn.toPairsIn = Bs, zn.toPath = function(e) {
                return Va(e) ? Nt(e, Lo) : ls(e) ? [e] : Ai(jo(_s(e)))
              }, zn.toPlainObject = vs, zn.transform = function(e, t, n) {
                var r = Va(e),
                  i = r || qa(e) || cs(e);
                if (t = lo(t, 4), null == n) {
                  var o = e && e.constructor;
                  n = i ? r ? new o : [] : es(e) && Za(o) ? Hn(Ge(e)) : {}
                }
                return (i ? Ot : yr)(e, (function(e, r, i) {
                  return t(n, e, r, i)
                })), n
              }, zn.unary = function(e) {
                return Ta(e, 1)
              }, zn.union = ta, zn.unionBy = na, zn.unionWith = ra, zn.uniq = function(e) {
                return e && e.length ? ui(e) : []
              }, zn.uniqBy = function(e, t) {
                return e && e.length ? ui(e, lo(t, 2)) : []
              }, zn.uniqWith = function(e, t) {
                return t = "function" == typeof t ? t : n, e && e.length ? ui(e, n, t) : []
              }, zn.unset = function(e, t) {
                return null == e || hi(e, t)
              }, zn.unzip = ia, zn.unzipWith = oa, zn.update = function(e, t, n) {
                return null == e ? e : pi(e, t, _i(n))
              }, zn.updateWith = function(e, t, r, i) {
                return i = "function" == typeof i ? i : n, null == e ? e : pi(e, t, _i(r), i)
              }, zn.values = zs, zn.valuesIn = function(e) {
                return null == e ? [] : Qt(e, Ds(e))
              }, zn.without = aa, zn.words = Zs, zn.wrap = function(e, t) {
                return La(_i(t), e)
              }, zn.xor = sa, zn.xorBy = la, zn.xorWith = ca, zn.zip = ua, zn.zipObject = function(e, t) {
                return mi(e || [], t || [], tr)
              }, zn.zipObjectDeep = function(e, t) {
                return mi(e || [], t || [], Qr)
              }, zn.zipWith = ha, zn.entries = Fs, zn.entriesIn = Bs, zn.extend = ys, zn.extendWith = ws, sl(zn, zn), zn.add = vl, zn.attempt = Js, zn.camelCase = Hs, zn.capitalize = Us, zn.ceil = _l, zn.clamp = function(e, t, r) {
                return r === n && (r = t, t = n), r !== n && (r = (r = ms(r)) == r ? r : 0), t !== n && (t = (t = ms(t)) == t ? t : 0), sr(ms(e), t, r)
              }, zn.clone = function(e) {
                return lr(e, 4)
              }, zn.cloneDeep = function(e) {
                return lr(e, 5)
              }, zn.cloneDeepWith = function(e, t) {
                return lr(e, 5, t = "function" == typeof t ? t : n)
              }, zn.cloneWith = function(e, t) {
                return lr(e, 4, t = "function" == typeof t ? t : n)
              }, zn.conformsTo = function(e, t) {
                return null == t || cr(e, t, Ms(t))
              }, zn.deburr = Ws, zn.defaultTo = function(e, t) {
                return null == e || e != e ? t : e
              }, zn.divide = bl, zn.endsWith = function(e, t, r) {
                e = _s(e), t = ci(t);
                var i = e.length,
                  o = r = r === n ? i : sr(fs(r), 0, i);
                return (r -= t.length) >= 0 && e.slice(r, o) == t
              }, zn.eq = za, zn.escape = function(e) {
                return (e = _s(e)) && $.test(e) ? e.replace(q, on) : e
              }, zn.escapeRegExp = function(e) {
                return (e = _s(e)) && ie.test(e) ? e.replace(re, "\\$&") : e
              }, zn.every = function(e, t, r) {
                var i = Va(e) ? Pt : fr;
                return r && yo(e, t, r) && (t = n), i(e, lo(t, 3))
              }, zn.find = ma, zn.findIndex = Wo, zn.findKey = function(e, t) {
                return zt(e, lo(t, 3), yr)
              }, zn.findLast = va, zn.findLastIndex = Vo, zn.findLastKey = function(e, t) {
                return zt(e, lo(t, 3), wr)
              }, zn.floor = yl, zn.forEach = _a, zn.forEachRight = ba, zn.forIn = function(e, t) {
                return null == e ? e : _r(e, lo(t, 3), Ds)
              }, zn.forInRight = function(e, t) {
                return null == e ? e : br(e, lo(t, 3), Ds)
              }, zn.forOwn = function(e, t) {
                return e && yr(e, lo(t, 3))
              }, zn.forOwnRight = function(e, t) {
                return e && wr(e, lo(t, 3))
              }, zn.get = Es, zn.gt = Ha, zn.gte = Ua, zn.has = function(e, t) {
                return null != e && mo(e, t, Tr)
              }, zn.hasIn = Ts, zn.head = Go, zn.identity = rl, zn.includes = function(e, t, n, r) {
                e = Ga(e) ? e : zs(e), n = n && !r ? fs(n) : 0;
                var i = e.length;
                return n < 0 && (n = _n(i + n, 0)), ss(e) ? n <= i && e.indexOf(t, n) > -1 : !!i && Ut(e, t, n) > -1
              }, zn.indexOf = function(e, t, n) {
                var r = null == e ? 0 : e.length;
                if (!r) return -1;
                var i = null == n ? 0 : fs(n);
                return i < 0 && (i = _n(r + i, 0)), Ut(e, t, i)
              }, zn.inRange = function(e, t, r) {
                return t = ds(t), r === n ? (r = t, t = 0) : r = ds(r),
                  function(e, t, n) {
                    return e >= bn(t, n) && e < _n(t, n)
                  }(e = ms(e), t, r)
              }, zn.invoke = Ps, zn.isArguments = Wa, zn.isArray = Va, zn.isArrayBuffer = Xa, zn.isArrayLike = Ga, zn.isArrayLikeObject = Ya, zn.isBoolean = function(e) {
                return !0 === e || !1 === e || ts(e) && Sr(e) == _
              }, zn.isBuffer = qa, zn.isDate = Ka, zn.isElement = function(e) {
                return ts(e) && 1 === e.nodeType && !is(e)
              }, zn.isEmpty = function(e) {
                if (null == e) return !0;
                if (Ga(e) && (Va(e) || "string" == typeof e || "function" == typeof e.splice || qa(e) || cs(e) || Wa(e))) return !e.length;
                var t = go(e);
                if (t == k || t == O) return !e.size;
                if (Co(e)) return !jr(e).length;
                for (var n in e)
                  if (Re.call(e, n)) return !1;
                return !0
              }, zn.isEqual = function(e, t) {
                return Dr(e, t)
              }, zn.isEqualWith = function(e, t, r) {
                var i = (r = "function" == typeof r ? r : n) ? r(e, t) : n;
                return i === n ? Dr(e, t, n, r) : !!i
              }, zn.isError = $a, zn.isFinite = function(e) {
                return "number" == typeof e && bt(e)
              }, zn.isFunction = Za, zn.isInteger = Ja, zn.isLength = Qa, zn.isMap = ns, zn.isMatch = function(e, t) {
                return e === t || Ir(e, t, uo(t))
              }, zn.isMatchWith = function(e, t, r) {
                return r = "function" == typeof r ? r : n, Ir(e, t, uo(t), r)
              }, zn.isNaN = function(e) {
                return rs(e) && e != +e
              }, zn.isNative = function(e) {
                if (ko(e)) throw new ke("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");
                return Nr(e)
              }, zn.isNil = function(e) {
                return null == e
              }, zn.isNull = function(e) {
                return null === e
              }, zn.isNumber = rs, zn.isObject = es, zn.isObjectLike = ts, zn.isPlainObject = is, zn.isRegExp = os, zn.isSafeInteger = function(e) {
                return Ja(e) && e >= -9007199254740991 && e <= p
              }, zn.isSet = as, zn.isString = ss, zn.isSymbol = ls, zn.isTypedArray = cs, zn.isUndefined = function(e) {
                return e === n
              }, zn.isWeakMap = function(e) {
                return ts(e) && go(e) == M
              }, zn.isWeakSet = function(e) {
                return ts(e) && "[object WeakSet]" == Sr(e)
              }, zn.join = function(e, t) {
                return null == e ? "" : Bt.call(e, t)
              }, zn.kebabCase = Vs, zn.last = $o, zn.lastIndexOf = function(e, t, r) {
                var i = null == e ? 0 : e.length;
                if (!i) return -1;
                var o = i;
                return r !== n && (o = (o = fs(r)) < 0 ? _n(i + o, 0) : bn(o, i - 1)), t == t ? function(e, t, n) {
                  for (var r = n + 1; r--;)
                    if (e[r] === t) return r;
                  return r
                }(e, t, o) : Ht(e, Vt, o, !0)
              }, zn.lowerCase = Xs, zn.lowerFirst = Gs, zn.lt = us, zn.lte = hs, zn.max = function(e) {
                return e && e.length ? gr(e, rl, Er) : n
              }, zn.maxBy = function(e, t) {
                return e && e.length ? gr(e, lo(t, 2), Er) : n
              }, zn.mean = function(e) {
                return Xt(e, rl)
              }, zn.meanBy = function(e, t) {
                return Xt(e, lo(t, 2))
              }, zn.min = function(e) {
                return e && e.length ? gr(e, rl, Fr) : n
              }, zn.minBy = function(e, t) {
                return e && e.length ? gr(e, lo(t, 2), Fr) : n
              }, zn.stubArray = gl, zn.stubFalse = ml, zn.stubObject = function() {
                return {}
              }, zn.stubString = function() {
                return ""
              }, zn.stubTrue = function() {
                return !0
              }, zn.multiply = xl, zn.nth = function(e, t) {
                return e && e.length ? Wr(e, fs(t)) : n
              }, zn.noConflict = function() {
                return ft._ === this && (ft._ = ze), this
              }, zn.noop = ll, zn.now = Ea, zn.pad = function(e, t, n) {
                e = _s(e);
                var r = (t = fs(t)) ? dn(e) : 0;
                if (!t || r >= t) return e;
                var i = (t - r) / 2;
                return Vi(gt(i), n) + e + Vi(dt(i), n)
              }, zn.padEnd = function(e, t, n) {
                e = _s(e);
                var r = (t = fs(t)) ? dn(e) : 0;
                return t && r < t ? e + Vi(t - r, n) : e
              }, zn.padStart = function(e, t, n) {
                e = _s(e);
                var r = (t = fs(t)) ? dn(e) : 0;
                return t && r < t ? Vi(t - r, n) + e : e
              }, zn.parseInt = function(e, t, n) {
                return n || null == t ? t = 0 : t && (t = +t), wn(_s(e).replace(oe, ""), t || 0)
              }, zn.random = function(e, t, r) {
                if (r && "boolean" != typeof r && yo(e, t, r) && (t = r = n), r === n && ("boolean" == typeof t ? (r = t, t = n) : "boolean" == typeof e && (r = e, e = n)), e === n && t === n ? (e = 0, t = 1) : (e = ds(e), t === n ? (t = e,
                    e = 0) : t = ds(t)), e > t) {
                  var i = e;
                  e = t, t = i
                }
                if (r || e % 1 || t % 1) {
                  var o = xn();
                  return bn(e + o * (t - e + ut("1e-" + ((o + "").length - 1))), t)
                }
                return qr(e, t)
              }, zn.reduce = function(e, t, n) {
                var r = Va(e) ? jt : qt,
                  i = arguments.length < 3;
                return r(e, lo(t, 4), n, i, pr)
              }, zn.reduceRight = function(e, t, n) {
                var r = Va(e) ? Lt : qt,
                  i = arguments.length < 3;
                return r(e, lo(t, 4), n, i, dr)
              }, zn.repeat = function(e, t, r) {
                return t = (r ? yo(e, t, r) : t === n) ? 1 : fs(t), Kr(_s(e), t)
              }, zn.replace = function() {
                var e = arguments,
                  t = _s(e[0]);
                return e.length < 3 ? t : t.replace(e[1], e[2])
              }, zn.result = function(e, t, r) {
                var i = -1,
                  o = (t = bi(t, e)).length;
                for (o || (o = 1, e = n); ++i < o;) {
                  var a = null == e ? n : e[Lo(t[i])];
                  a === n && (i = o, a = r), e = Za(a) ? a.call(e) : a
                }
                return e
              }, zn.round = kl, zn.runInContext = e, zn.sample = function(e) {
                return (Va(e) ? Zn : Zr)(e)
              }, zn.size = function(e) {
                if (null == e) return 0;
                if (Ga(e)) return ss(e) ? dn(e) : e.length;
                var t = go(e);
                return t == k || t == O ? e.size : jr(e).length
              }, zn.snakeCase = Ys, zn.some = function(e, t, r) {
                var i = Va(e) ? Ft : ii;
                return r && yo(e, t, r) && (t = n), i(e, lo(t, 3))
              }, zn.sortedIndex = function(e, t) {
                return oi(e, t)
              }, zn.sortedIndexBy = function(e, t, n) {
                return ai(e, t, lo(n, 2))
              }, zn.sortedIndexOf = function(e, t) {
                var n = null == e ? 0 : e.length;
                if (n) {
                  var r = oi(e, t);
                  if (r < n && za(e[r], t)) return r
                }
                return -1
              }, zn.sortedLastIndex = function(e, t) {
                return oi(e, t, !0)
              }, zn.sortedLastIndexBy = function(e, t, n) {
                return ai(e, t, lo(n, 2), !0)
              }, zn.sortedLastIndexOf = function(e, t) {
                if (null == e ? 0 : e.length) {
                  var n = oi(e, t, !0) - 1;
                  if (za(e[n], t)) return n
                }
                return -1
              }, zn.startCase = qs, zn.startsWith = function(e, t, n) {
                return e = _s(e), n = null == n ? 0 : sr(fs(n), 0, e.length), t = ci(t), e.slice(n, n + t.length) == t
              }, zn.subtract = Cl, zn.sum = function(e) {
                return e && e.length ? Kt(e, rl) : 0
              }, zn.sumBy = function(e, t) {
                return e && e.length ? Kt(e, lo(t, 2)) : 0
              }, zn.template = function(e, t, r) {
                var i = zn.templateSettings;
                r && yo(e, t, r) && (t = n), e = _s(e), t = ws({}, t, i, Ji);
                var o, a, s = ws({}, t.imports, i.imports, Ji),
                  l = Ms(s),
                  c = Qt(s, l),
                  u = 0,
                  h = t.interpolate || we,
                  p = "__p += '",
                  d = Te((t.escape || we).source + "|" + h.source + "|" + (h === Q ? de : we).source + "|" + (t.evaluate || we).source + "|$", "g"),
                  f = "//# sourceURL=" + (Re.call(t, "sourceURL") ? (t.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++at + "]") + "\n";
                e.replace(d, (function(t, n, r, i, s, l) {
                  return r || (r = i), p += e.slice(u, l).replace(xe, an), n && (o = !0, p += "' +\n__e(" + n + ") +\n'"), s && (a = !0, p += "';\n" + s + ";\n__p += '"), r && (p += "' +\n((__t = (" + r +
                    ")) == null ? '' : __t) +\n'"), u = l + t.length, t
                })), p += "';\n";
                var g = Re.call(t, "variable") && t.variable;
                if (g) {
                  if (he.test(g)) throw new ke("Invalid `variable` option passed into `_.template`")
                } else p = "with (obj) {\n" + p + "\n}\n";
                p = (a ? p.replace(V, "") : p).replace(X, "$1").replace(G, "$1;"), p = "function(" + (g || "obj") + ") {\n" + (g ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (o ? ", __e = _.escape" : "") + (a ?
                  ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + p + "return __p\n}";
                var m = Js((function() {
                  return Ce(l, f + "return " + p).apply(n, c)
                }));
                if (m.source = p, $a(m)) throw m;
                return m
              }, zn.times = function(e, t) {
                if ((e = fs(e)) < 1 || e > p) return [];
                var n = f,
                  r = bn(e, f);
                t = lo(t), e -= f;
                for (var i = $t(r, t); ++n < e;) t(n);
                return i
              }, zn.toFinite = ds, zn.toInteger = fs, zn.toLength = gs, zn.toLower = function(e) {
                return _s(e).toLowerCase()
              }, zn.toNumber = ms, zn.toSafeInteger = function(e) {
                return e ? sr(fs(e), -9007199254740991, p) : 0 === e ? e : 0
              }, zn.toString = _s, zn.toUpper = function(e) {
                return _s(e).toUpperCase()
              }, zn.trim = function(e, t, r) {
                if ((e = _s(e)) && (r || t === n)) return Zt(e);
                if (!e || !(t = ci(t))) return e;
                var i = fn(e),
                  o = fn(t);
                return wi(i, tn(i, o), nn(i, o) + 1).join("")
              }, zn.trimEnd = function(e, t, r) {
                if ((e = _s(e)) && (r || t === n)) return e.slice(0, gn(e) + 1);
                if (!e || !(t = ci(t))) return e;
                var i = fn(e);
                return wi(i, 0, nn(i, fn(t)) + 1).join("")
              }, zn.trimStart = function(e, t, r) {
                if ((e = _s(e)) && (r || t === n)) return e.replace(oe, "");
                if (!e || !(t = ci(t))) return e;
                var i = fn(e);
                return wi(i, tn(i, fn(t))).join("")
              }, zn.truncate = function(e, t) {
                var r = 30,
                  i = "...";
                if (es(t)) {
                  var o = "separator" in t ? t.separator : o;
                  r = "length" in t ? fs(t.length) : r, i = "omission" in t ? ci(t.omission) : i
                }
                var a = (e = _s(e)).length;
                if (sn(e)) {
                  var s = fn(e);
                  a = s.length
                }
                if (r >= a) return e;
                var l = r - dn(i);
                if (l < 1) return i;
                var c = s ? wi(s, 0, l).join("") : e.slice(0, l);
                if (o === n) return c + i;
                if (s && (l += c.length - l), os(o)) {
                  if (e.slice(l).search(o)) {
                    var u, h = c;
                    for (o.global || (o = Te(o.source, _s(fe.exec(o)) + "g")), o.lastIndex = 0; u = o.exec(h);) var p = u.index;
                    c = c.slice(0, p === n ? l : p)
                  }
                } else if (e.indexOf(ci(o), l) != l) {
                  var d = c.lastIndexOf(o);
                  d > -1 && (c = c.slice(0, d))
                }
                return c + i
              }, zn.unescape = function(e) {
                return (e = _s(e)) && K.test(e) ? e.replace(Y, mn) : e
              }, zn.uniqueId = function(e) {
                var t = ++je;
                return _s(e) + t
              }, zn.upperCase = Ks, zn.upperFirst = $s, zn.each = _a, zn.eachRight = ba, zn.first = Go, sl(zn, (wl = {}, yr(zn, (function(e, t) {
                Re.call(zn.prototype, t) || (wl[t] = e)
              })), wl), {
                chain: !1
              }), zn.VERSION = "4.17.21", Ot(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], (function(e) {
                zn[e].placeholder = zn
              })), Ot(["drop", "take"], (function(e, t) {
                Vn.prototype[e] = function(r) {
                  r = r === n ? 1 : _n(fs(r), 0);
                  var i = this.__filtered__ && !t ? new Vn(this) : this.clone();
                  return i.__filtered__ ? i.__takeCount__ = bn(r, i.__takeCount__) : i.__views__.push({
                    size: bn(r, f),
                    type: e + (i.__dir__ < 0 ? "Right" : "")
                  }), i
                }, Vn.prototype[e + "Right"] = function(t) {
                  return this.reverse()[e](t).reverse()
                }
              })), Ot(["filter", "map", "takeWhile"], (function(e, t) {
                var n = t + 1,
                  r = 1 == n || 3 == n;
                Vn.prototype[e] = function(e) {
                  var t = this.clone();
                  return t.__iteratees__.push({
                    iteratee: lo(e, 3),
                    type: n
                  }), t.__filtered__ = t.__filtered__ || r, t
                }
              })), Ot(["head", "last"], (function(e, t) {
                var n = "take" + (t ? "Right" : "");
                Vn.prototype[e] = function() {
                  return this[n](1).value()[0]
                }
              })), Ot(["initial", "tail"], (function(e, t) {
                var n = "drop" + (t ? "" : "Right");
                Vn.prototype[e] = function() {
                  return this.__filtered__ ? new Vn(this) : this[n](1)
                }
              })), Vn.prototype.compact = function() {
                return this.filter(rl)
              }, Vn.prototype.find = function(e) {
                return this.filter(e).head()
              }, Vn.prototype.findLast = function(e) {
                return this.reverse().find(e)
              }, Vn.prototype.invokeMap = $r((function(e, t) {
                return "function" == typeof e ? new Vn(this) : this.map((function(n) {
                  return Pr(n, e, t)
                }))
              })), Vn.prototype.reject = function(e) {
                return this.filter(Ra(lo(e)))
              }, Vn.prototype.slice = function(e, t) {
                e = fs(e);
                var r = this;
                return r.__filtered__ && (e > 0 || t < 0) ? new Vn(r) : (e < 0 ? r = r.takeRight(-e) : e && (r = r.drop(e)), t !== n && (r = (t = fs(t)) < 0 ? r.dropRight(-t) : r.take(t - e)), r)
              }, Vn.prototype.takeRightWhile = function(e) {
                return this.reverse().takeWhile(e).reverse()
              }, Vn.prototype.toArray = function() {
                return this.take(f)
              }, yr(Vn.prototype, (function(e, t) {
                var r = /^(?:filter|find|map|reject)|While$/.test(t),
                  i = /^(?:head|last)$/.test(t),
                  o = zn[i ? "take" + ("last" == t ? "Right" : "") : t],
                  a = i || /^find/.test(t);
                o && (zn.prototype[t] = function() {
                  var t = this.__wrapped__,
                    s = i ? [1] : arguments,
                    l = t instanceof Vn,
                    c = s[0],
                    u = l || Va(t),
                    h = function(e) {
                      var t = o.apply(zn, Rt([e], s));
                      return i && p ? t[0] : t
                    };
                  u && r && "function" == typeof c && 1 != c.length && (l = u = !1);
                  var p = this.__chain__,
                    d = !!this.__actions__.length,
                    f = a && !p,
                    g = l && !d;
                  if (!a && u) {
                    t = g ? t : new Vn(this);
                    var m = e.apply(t, s);
                    return m.__actions__.push({
                      func: da,
                      args: [h],
                      thisArg: n
                    }), new Wn(m, p)
                  }
                  return f && g ? e.apply(this, s) : (m = this.thru(h), f ? i ? m.value()[0] : m.value() : m)
                })
              })), Ot(["pop", "push", "shift", "sort", "splice", "unshift"], (function(e) {
                var t = Pe[e],
                  n = /^(?:push|sort|unshift)$/.test(e) ? "tap" : "thru",
                  r = /^(?:pop|shift)$/.test(e);
                zn.prototype[e] = function() {
                  var e = arguments;
                  if (r && !this.__chain__) {
                    var i = this.value();
                    return t.apply(Va(i) ? i : [], e)
                  }
                  return this[n]((function(n) {
                    return t.apply(Va(n) ? n : [], e)
                  }))
                }
              })), yr(Vn.prototype, (function(e, t) {
                var n = zn[t];
                if (n) {
                  var r = n.name + "";
                  Re.call(Mn, r) || (Mn[r] = []), Mn[r].push({
                    name: t,
                    func: n
                  })
                }
              })), Mn[zi(n, 2).name] = [{
                name: "wrapper",
                func: n
              }], Vn.prototype.clone = function() {
                var e = new Vn(this.__wrapped__);
                return e.__actions__ = Ai(this.__actions__), e.__dir__ = this.__dir__, e.__filtered__ = this.__filtered__, e.__iteratees__ = Ai(this.__iteratees__), e.__takeCount__ = this.__takeCount__, e.__views__ = Ai(this.__views__), e
              }, Vn.prototype.reverse = function() {
                if (this.__filtered__) {
                  var e = new Vn(this);
                  e.__dir__ = -1, e.__filtered__ = !0
                } else(e = this.clone()).__dir__ *= -1;
                return e
              }, Vn.prototype.value = function() {
                var e = this.__wrapped__.value(),
                  t = this.__dir__,
                  n = Va(e),
                  r = t < 0,
                  i = n ? e.length : 0,
                  o = function(e, t, n) {
                    var r = -1,
                      i = n.length;
                    for (; ++r < i;) {
                      var o = n[r],
                        a = o.size;
                      switch (o.type) {
                        case "drop":
                          e += a;
                          break;
                        case "dropRight":
                          t -= a;
                          break;
                        case "take":
                          t = bn(t, e + a);
                          break;
                        case "takeRight":
                          e = _n(e, t - a)
                      }
                    }
                    return {
                      start: e,
                      end: t
                    }
                  }(0, i, this.__views__),
                  a = o.start,
                  s = o.end,
                  l = s - a,
                  c = r ? s : a - 1,
                  u = this.__iteratees__,
                  h = u.length,
                  p = 0,
                  d = bn(l, this.__takeCount__);
                if (!n || !r && i == l && d == l) return fi(e, this.__actions__);
                var f = [];
                e: for (; l-- && p < d;) {
                  for (var g = -1, m = e[c += t]; ++g < h;) {
                    var v = u[g],
                      _ = v.iteratee,
                      b = v.type,
                      y = _(m);
                    if (2 == b) m = y;
                    else if (!y) {
                      if (1 == b) continue e;
                      break e
                    }
                  }
                  f[p++] = m
                }
                return f
              }, zn.prototype.at = fa, zn.prototype.chain = function() {
                return pa(this)
              }, zn.prototype.commit = function() {
                return new Wn(this.value(), this.__chain__)
              }, zn.prototype.next = function() {
                this.__values__ === n && (this.__values__ = ps(this.value()));
                var e = this.__index__ >= this.__values__.length;
                return {
                  done: e,
                  value: e ? n : this.__values__[this.__index__++]
                }
              }, zn.prototype.plant = function(e) {
                for (var t, r = this; r instanceof Un;) {
                  var i = Bo(r);
                  i.__index__ = 0, i.__values__ = n, t ? o.__wrapped__ = i : t = i;
                  var o = i;
                  r = r.__wrapped__
                }
                return o.__wrapped__ = e, t
              }, zn.prototype.reverse = function() {
                var e = this.__wrapped__;
                if (e instanceof Vn) {
                  var t = e;
                  return this.__actions__.length && (t = new Vn(this)), (t = t.reverse()).__actions__.push({
                    func: da,
                    args: [ea],
                    thisArg: n
                  }), new Wn(t, this.__chain__)
                }
                return this.thru(ea)
              }, zn.prototype.toJSON = zn.prototype.valueOf = zn.prototype.value = function() {
                return fi(this.__wrapped__, this.__actions__)
              }, zn.prototype.first = zn.prototype.head, Ze && (zn.prototype[Ze] = function() {
                return this
              }), zn
            }();
            mt ? ((mt.exports = vn)._ = vn, gt._ = vn) : ft._ = vn
          }).call(W)
        }(re, re.exports);
        var ie = new class {
            constructor() {
              f(this, "instances", []), f(this, "imgOrders", []), f(this, "customOrder", [])
            }
            addInstance(e, t) {
              e && (this.instances[t] = e, window.appparakeet_fabric_instance = this.instances)
            }
            addImgOrders(e, t) {
              !this.imgOrders[t] && e && (this.imgOrders[t] = e)
            }
            getCoordinates() {
              var e = this;
              if (this.instances.length > 0) {
                var t = function() {
                  var t = [],
                    n = e.instances.reduce(((e, t) => t === e)),
                    r = e.instances.length;
                  n && (r = 1);
                  for (var i = function(n) {
                      var r = e.instances[n].getObjects(),
                        i = e.instances[n].height,
                        o = e.instances[n].width;
                      r.forEach(((e, n) => {
                        "text" === e.configType ? t.push({
                          canvasHeight: i,
                          canvasWidth: o,
                          configType: e.configType,
                          left: e.left - e.width / 2,
                          top: e.top - e.height / 2,
                          height: e.height * e.scaleY,
                          width: e.width * e.scaleX,
                          angle: e.angle,
                          oid: e.oid,
                          fid: e.fid
                        }) : "boundsReact" !== e.shapeType && "overlay" !== e.shapeType && t.push({
                          canvasHeight: i,
                          canvasWidth: o,
                          configType: e.configType,
                          oid: e.oid,
                          fid: e.fid,
                          left: e.left,
                          top: e.top,
                          height: e.height * e.scaleY,
                          width: e.width * e.scaleX,
                          angle: e.angle
                        })
                      }))
                    }, o = 0; o < r; o++) i(o);
                  return {
                    v: t
                  }
                }();
                if ("object" == typeof t) return t.v
              }
            }
            createImgs() {
              var e = this;
              return d((function*() {
                for (var t = [], n = 0; n < (null === (r = e.instances) || void 0 === r ? void 0 : r.length); n++) {
                  var r, i = yield e._createImg(e.instances[n], n);
                  i && t.push(i)
                }
                return t
              }))()
            }
            _createImg(e, t) {
              var n = this;
              return d((function*() {
                var r, i, o;
                if (null === (r = e.getObjects()) || void 0 === r || !r.length) return null;
                e.discardActiveObject(), null === (i = e.getObjects("rect")) || void 0 === i || i.forEach((function(e) {
                  e.set({
                    fill: "transparent"
                  })
                })), null === (o = e.getObjects()) || void 0 === o || o.forEach((function(e) {
                  "text" == e.configTye && e.previewOrder && e.moveTo(e.previewOrder)
                }));
                var a = e.toDataURL({
                    multiplier: 2,
                    format: A
                  }),
                  s = S(A),
                  l = "";
                try {
                  l = yield _(E(a), s)
                } catch (e) {
                  return null
                }
                return {
                  type: "preview",
                  key: ["composite", "image"].concat(n.imgOrders[t]).join("_"),
                  value: l
                }
              }))()
            }
            createPrintImgs(e) {
              var t = this;
              return d((function*() {
                var n = [];
                t.customOrder = e;
                for (var r = 0; r < (null === (i = t.instances) || void 0 === i ? void 0 : i.length); r++) {
                  var i, o = yield t._createPrintImg(t.instances[r], r);
                  o && n.push(o)
                }
                return n
              }))()
            }
            _createPrintImg(e, t) {
              var n = this;
              return d((function*() {
                var t, r, i;
                return null !== (t = e.getObjects()) && void 0 !== t && t.length ? (e.discardActiveObject(), null === (r = e.getObjects("rect")) || void 0 === r || r.forEach((function(e) {
                  e.set({
                    fill: "transparent"
                  })
                })), null === (i = e.getObjects()) || void 0 === i || i.forEach((function(e) {
                  "text" == e.configTye && e.previewOrder && e.moveTo(e.previewOrder)
                })), n.createPrintResults(e)) : null
              }))()
            }
            createPrintResults(e) {
              var t = this;
              return d((function*() {
                var n = t,
                  r = re.exports.cloneDeep(e).getObjects().filter((e => "boundsReact" !== e.shapeType)),
                  i = r.map(((e, t) => n.getPrintUrl(e).then((t => {
                    var r = n.customOrder.find((t => e.fid === t.fid)).order;
                    return {
                      type: "print",
                      key: ["print", "image"].concat([r]).join("_"),
                      value: t
                    }
                  })))),
                  o = new X.fabric.Group(r),
                  a = n.getPrintUrl(o).then((e => {
                    var t = n.customOrder.map((e => e.order));
                    return {
                      type: "print",
                      key: ["print", "image"].concat(t).join("_"),
                      value: e
                    }
                  }));
                i.push(a);
                var s = [];
                try {
                  s = (yield Promise.allSettled(i)).filter((e => "fulfilled" === e.status)).map((e => e.value))
                } catch (e) {}
                return s
              }))()
            }
            getPrintUrl(e) {
              return d((function*() {
                var t = e.toDataURL({
                    multiplier: ne.divide(3500, e.getScaledWidth()),
                    format: A
                  }),
                  n = S(A),
                  r = "";
                try {
                  r = yield _(E(t), n)
                } catch (e) {
                  return null
                }
                return r
              }))()
            }
          },
          oe = function(e, t) {
            return oe = Object.setPrototypeOf || {
              __proto__: []
            }
            instanceof Array && function(e, t) {
              e.__proto__ = t
            } || function(e, t) {
              for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n])
            }, oe(e, t)
          };

        function ae(e, t) {
          if ("function" != typeof t && null !== t) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null");

          function n() {
            this.constructor = e
          }
          oe(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n)
        }
        var se = function() {
          return se = Object.assign || function(e) {
            for (var t, n = 1, r = arguments.length; n < r; n++)
              for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
            return e
          }, se.apply(this, arguments)
        };

        function le(e, t) {
          var n = {};
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]);
          if (null != e && "function" == typeof Object.getOwnPropertySymbols) {
            var i = 0;
            for (r = Object.getOwnPropertySymbols(e); i < r.length; i++) t.indexOf(r[i]) < 0 && Object.prototype.propertyIsEnumerable.call(e, r[i]) && (n[r[i]] = e[r[i]])
          }
          return n
        }

        function ce(e, t, n, r) {
          return new(n || (n = Promise))((function(i, o) {
            function a(e) {
              try {
                l(r.next(e))
              } catch (e) {
                o(e)
              }
            }

            function s(e) {
              try {
                l(r.throw(e))
              } catch (e) {
                o(e)
              }
            }

            function l(e) {
              var t;
              e.done ? i(e.value) : (t = e.value, t instanceof n ? t : new n((function(e) {
                e(t)
              }))).then(a, s)
            }
            l((r = r.apply(e, t || [])).next())
          }))
        }

        function ue(e, t) {
          var n, r, i, o, a = {
            label: 0,
            sent: function() {
              if (1 & i[0]) throw i[1];
              return i[1]
            },
            trys: [],
            ops: []
          };
          return o = {
            next: s(0),
            throw: s(1),
            return: s(2)
          }, "function" == typeof Symbol && (o[Symbol.iterator] = function() {
            return this
          }), o;

          function s(s) {
            return function(l) {
              return function(s) {
                if (n) throw new TypeError("Generator is already executing.");
                for (; o && (o = 0, s[0] && (a = 0)), a;) try {
                  if (n = 1, r && (i = 2 & s[0] ? r.return : s[0] ? r.throw || ((i = r.return) && i.call(r), 0) : r.next) && !(i = i.call(r, s[1])).done) return i;
                  switch (r = 0, i && (s = [2 & s[0], i.value]), s[0]) {
                    case 0:
                    case 1:
                      i = s;
                      break;
                    case 4:
                      return a.label++, {
                        value: s[1],
                        done: !1
                      };
                    case 5:
                      a.label++, r = s[1], s = [0];
                      continue;
                    case 7:
                      s = a.ops.pop(), a.trys.pop();
                      continue;
                    default:
                      if (!(i = a.trys, (i = i.length > 0 && i[i.length - 1]) || 6 !== s[0] && 2 !== s[0])) {
                        a = 0;
                        continue
                      }
                      if (3 === s[0] && (!i || s[1] > i[0] && s[1] < i[3])) {
                        a.label = s[1];
                        break
                      }
                      if (6 === s[0] && a.label < i[1]) {
                        a.label = i[1], i = s;
                        break
                      }
                      if (i && a.label < i[2]) {
                        a.label = i[2], a.ops.push(s);
                        break
                      }
                      i[2] && a.ops.pop(), a.trys.pop();
                      continue
                  }
                  s = t.call(e, a)
                } catch (e) {
                  s = [6, e], r = 0
                } finally {
                  n = i = 0
                }
                if (5 & s[0]) throw s[1];
                return {
                  value: s[0] ? s[1] : void 0,
                  done: !0
                }
              }([s, l])
            }
          }
        }

        function he(e, t) {
          var n = "function" == typeof Symbol && e[Symbol.iterator];
          if (!n) return e;
          var r, i, o = n.call(e),
            a = [];
          try {
            for (;
              (void 0 === t || t-- > 0) && !(r = o.next()).done;) a.push(r.value)
          } catch (e) {
            i = {
              error: e
            }
          } finally {
            try {
              r && !r.done && (n = o.return) && n.call(o)
            } finally {
              if (i) throw i.error
            }
          }
          return a
        }

        function pe(e, t, n) {
          if (n || 2 === arguments.length)
            for (var r, i = 0, o = t.length; i < o; i++) !r && i in t || (r || (r = Array.prototype.slice.call(t, 0, i)), r[i] = t[i]);
          return e.concat(r || Array.prototype.slice.call(t))
        }
        var de, fe, ge, me, ve, _e, be, ye, we = {},
          xe = [],
          ke = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,
          Ce = Array.isArray;

        function Se(e, t) {
          for (var n in t) e[n] = t[n];
          return e
        }

        function Ee(e) {
          var t = e.parentNode;
          t && t.removeChild(e)
        }

        function Te(e, t, n) {
          var r, i, o, a = {};
          for (o in t) "key" == o ? r = t[o] : "ref" == o ? i = t[o] : a[o] = t[o];
          if (arguments.length > 2 && (a.children = arguments.length > 3 ? de.call(arguments, 2) : n), "function" == typeof e && null != e.defaultProps)
            for (o in e.defaultProps) void 0 === a[o] && (a[o] = e.defaultProps[o]);
          return Oe(e, a, r, i, null)
        }

        function Oe(e, t, n, r, i) {
          var o = {
            type: e,
            props: t,
            key: n,
            ref: r,
            __k: null,
            __: null,
            __b: 0,
            __e: null,
            __d: void 0,
            __c: null,
            __h: null,
            constructor: void 0,
            __v: null == i ? ++ge : i
          };
          return null == i && null != fe.vnode && fe.vnode(o), o
        }

        function Ae() {
          return {
            current: null
          }
        }

        function Pe(e) {
          return e.children
        }

        function Me(e, t) {
          this.props = e, this.context = t
        }

        function De(e, t) {
          if (null == t) return e.__ ? De(e.__, e.__.__k.indexOf(e) + 1) : null;
          for (var n; t < e.__k.length; t++)
            if (null != (n = e.__k[t]) && null != n.__e) return n.__e;
          return "function" == typeof e.type ? De(e) : null
        }

        function Ie(e) {
          var t, n;
          if (null != (e = e.__) && null != e.__c) {
            for (e.__e = e.__c.base = null, t = 0; t < e.__k.length; t++)
              if (null != (n = e.__k[t]) && null != n.__e) {
                e.__e = e.__c.base = n.__e;
                break
              } return Ie(e)
          }
        }

        function Ne(e) {
          (!e.__d && (e.__d = !0) && me.push(e) && !Re.__r++ || ve !== fe.debounceRendering) && ((ve = fe.debounceRendering) || _e)(Re)
        }

        function Re() {
          var e, t, n, r, i, o, a, s, l;
          for (me.sort(be); e = me.shift();) e.__d && (t = me.length, r = void 0, i = void 0, o = void 0, s = (a = (n = e).__v).__e, (l = n.__P) && (r = [], i = [], (o = Se({}, a)).__v = a.__v + 1, Xe(l, a, o, n.__n, void 0 !== l.ownerSVGElement,
            null != a.__h ? [s] : null, r, null == s ? De(a) : s, a.__h, i), Ge(r, a, i), a.__e != s && Ie(a)), me.length > t && me.sort(be));
          Re.__r = 0
        }

        function je(e, t, n, r, i, o, a, s, l, c, u) {
          var h, p, d, f, g, m, v, _, b, y, w = 0,
            x = r && r.__k || xe,
            k = x.length,
            C = k,
            S = t.length;
          for (n.__k = [], h = 0; h < S; h++) null != (f = n.__k[h] = null == (f = t[h]) || "boolean" == typeof f || "function" == typeof f ? null : "string" == typeof f || "number" == typeof f || "bigint" == typeof f ? Oe(null, f, null, null,
            f) : Ce(f) ? Oe(Pe, {
              children: f
            }, null, null, null) : f.__b > 0 ? Oe(f.type, f.props, f.key, f.ref ? f.ref : null, f.__v) : f) && (f.__ = n, f.__b = n.__b + 1, -1 === (_ = ze(f, x, v = h + w, C)) ? d = we : (d = x[_] || we, x[_] = void 0, C--), Xe(e, f, d, i, o,
            a, s, l, c, u), g = f.__e, (p = f.ref) && d.ref != p && (d.ref && Ye(d.ref, null, f), u.push(p, f.__c || g, f)), null != g && (null == m && (m = g), y = !(b = d === we || null === d.__v) && _ === v, b ? -1 == _ && w-- : _ !== v &&
            (_ === v + 1 ? (w++, y = !0) : _ > v ? C > S - v ? (w += _ - v, y = !0) : w-- : w = _ < v && _ == v - 1 ? _ - v : 0), v = h + w, y = y || _ == h && !b, "function" != typeof f.type || _ === v && d.__k !== f.__k ? "function" ==
            typeof f.type || y ? void 0 !== f.__d ? (l = f.__d, f.__d = void 0) : l = g.nextSibling : l = Be(e, g, l) : l = Le(f, l, e), "function" == typeof n.type && (n.__d = l)));
          for (n.__e = m, h = k; h--;) null != x[h] && ("function" == typeof n.type && null != x[h].__e && x[h].__e == n.__d && (n.__d = x[h].__e.nextSibling), qe(x[h], x[h]))
        }

        function Le(e, t, n) {
          for (var r, i = e.__k, o = 0; i && o < i.length; o++)(r = i[o]) && (r.__ = e, t = "function" == typeof r.type ? Le(r, t, n) : Be(n, r.__e, t));
          return t
        }

        function Fe(e, t) {
          return t = t || [], null == e || "boolean" == typeof e || (Ce(e) ? e.some((function(e) {
            Fe(e, t)
          })) : t.push(e)), t
        }

        function Be(e, t, n) {
          return null == n || n.parentNode !== e ? e.insertBefore(t, null) : t == n && null != t.parentNode || e.insertBefore(t, n), t.nextSibling
        }

        function ze(e, t, n, r) {
          var i = e.key,
            o = e.type,
            a = n - 1,
            s = n + 1,
            l = t[n];
          if (null === l || l && i == l.key && o === l.type) return n;
          if (r > (null != l ? 1 : 0))
            for (; a >= 0 || s < t.length;) {
              if (a >= 0) {
                if ((l = t[a]) && i == l.key && o === l.type) return a;
                a--
              }
              if (s < t.length) {
                if ((l = t[s]) && i == l.key && o === l.type) return s;
                s++
              }
            }
          return -1
        }

        function He(e, t, n) {
          "-" === t[0] ? e.setProperty(t, null == n ? "" : n) : e[t] = null == n ? "" : "number" != typeof n || ke.test(t) ? n : n + "px"
        }

        function Ue(e, t, n, r, i) {
          var o;
          e: if ("style" === t)
            if ("string" == typeof n) e.style.cssText = n;
            else {
              if ("string" == typeof r && (e.style.cssText = r = ""), r)
                for (t in r) n && t in n || He(e.style, t, "");
              if (n)
                for (t in n) r && n[t] === r[t] || He(e.style, t, n[t])
            }
          else if ("o" === t[0] && "n" === t[1]) o = t !== (t = t.replace(/Capture$/, "")), t = t.toLowerCase() in e ? t.toLowerCase().slice(2) : t.slice(2), e.l || (e.l = {}), e.l[t + o] = n, n ? r || e.addEventListener(t, o ? Ve : We, o) : e
            .removeEventListener(t, o ? Ve : We, o);
          else if ("dangerouslySetInnerHTML" !== t) {
            if (i) t = t.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s");
            else if ("width" !== t && "height" !== t && "href" !== t && "list" !== t && "form" !== t && "tabIndex" !== t && "download" !== t && "rowSpan" !== t && "colSpan" !== t && t in e) try {
              e[t] = null == n ? "" : n;
              break e
            } catch (e) {}
            "function" == typeof n || (null == n || !1 === n && "-" !== t[4] ? e.removeAttribute(t) : e.setAttribute(t, n))
          }
        }

        function We(e) {
          return this.l[e.type + !1](fe.event ? fe.event(e) : e)
        }

        function Ve(e) {
          return this.l[e.type + !0](fe.event ? fe.event(e) : e)
        }

        function Xe(e, t, n, r, i, o, a, s, l, c) {
          var u, h, p, d, f, g, m, v, _, b, y, w, x, k, C, S = t.type;
          if (void 0 !== t.constructor) return null;
          null != n.__h && (l = n.__h, s = t.__e = n.__e, t.__h = null, o = [s]), (u = fe.__b) && u(t);
          try {
            e: if ("function" == typeof S) {
              if (v = t.props, _ = (u = S.contextType) && r[u.__c], b = u ? _ ? _.props.value : u.__ : r, n.__c ? m = (h = t.__c = n.__c).__ = h.__E : ("prototype" in S && S.prototype.render ? t.__c = h = new S(v, b) : (t.__c = h = new Me(v,
                  b), h.constructor = S, h.render = Ke), _ && _.sub(h), h.props = v, h.state || (h.state = {}), h.context = b, h.__n = r, p = h.__d = !0, h.__h = [], h._sb = []), null == h.__s && (h.__s = h.state), null != S
                .getDerivedStateFromProps && (h.__s == h.state && (h.__s = Se({}, h.__s)), Se(h.__s, S.getDerivedStateFromProps(v, h.__s))), d = h.props, f = h.state, h.__v = t, p) null == S.getDerivedStateFromProps && null != h
                .componentWillMount && h.componentWillMount(), null != h.componentDidMount && h.__h.push(h.componentDidMount);
              else {
                if (null == S.getDerivedStateFromProps && v !== d && null != h.componentWillReceiveProps && h.componentWillReceiveProps(v, b), !h.__e && (null != h.shouldComponentUpdate && !1 === h.shouldComponentUpdate(v, h.__s, b) || t
                    .__v === n.__v)) {
                  for (t.__v !== n.__v && (h.props = v, h.state = h.__s, h.__d = !1), t.__e = n.__e, t.__k = n.__k, t.__k.forEach((function(e) {
                      e && (e.__ = t)
                    })), y = 0; y < h._sb.length; y++) h.__h.push(h._sb[y]);
                  h._sb = [], h.__h.length && a.push(h);
                  break e
                }
                null != h.componentWillUpdate && h.componentWillUpdate(v, h.__s, b), null != h.componentDidUpdate && h.__h.push((function() {
                  h.componentDidUpdate(d, f, g)
                }))
              }
              if (h.context = b, h.props = v, h.__P = e, h.__e = !1, w = fe.__r, x = 0, "prototype" in S && S.prototype.render) {
                for (h.state = h.__s, h.__d = !1, w && w(t), u = h.render(h.props, h.state, h.context), k = 0; k < h._sb.length; k++) h.__h.push(h._sb[k]);
                h._sb = []
              } else
                do {
                  h.__d = !1, w && w(t), u = h.render(h.props, h.state, h.context), h.state = h.__s
                } while (h.__d && ++x < 25);
              h.state = h.__s, null != h.getChildContext && (r = Se(Se({}, r), h.getChildContext())), p || null == h.getSnapshotBeforeUpdate || (g = h.getSnapshotBeforeUpdate(d, f)), je(e, Ce(C = null != u && u.type === Pe && null == u.key ? u
                .props.children : u) ? C : [C], t, n, r, i, o, a, s, l, c), h.base = t.__e, t.__h = null, h.__h.length && a.push(h), m && (h.__E = h.__ = null)
            } else null == o && t.__v === n.__v ? (t.__k = n.__k, t.__e = n.__e) : t.__e = function(e, t, n, r, i, o, a, s, l) {
              var c, u, h, p = n.props,
                d = t.props,
                f = t.type,
                g = 0;
              if ("svg" === f && (i = !0), null != o)
                for (; g < o.length; g++)
                  if ((c = o[g]) && "setAttribute" in c == !!f && (f ? c.localName === f : 3 === c.nodeType)) {
                    e = c, o[g] = null;
                    break
                  } if (null == e) {
                if (null === f) return document.createTextNode(d);
                e = i ? document.createElementNS("http://www.w3.org/2000/svg", f) : document.createElement(f, d.is && d), o = null, s = !1
              }
              if (null === f) p === d || s && e.data === d || (e.data = d);
              else {
                if (o = o && de.call(e.childNodes), u = (p = n.props || we).dangerouslySetInnerHTML, h = d.dangerouslySetInnerHTML, !s) {
                  if (null != o)
                    for (p = {}, g = 0; g < e.attributes.length; g++) p[e.attributes[g].name] = e.attributes[g].value;
                  (h || u) && (h && (u && h.__html == u.__html || h.__html === e.innerHTML) || (e.innerHTML = h && h.__html || ""))
                }
                if (function(e, t, n, r, i) {
                    var o;
                    for (o in n) "children" === o || "key" === o || o in t || Ue(e, o, null, n[o], r);
                    for (o in t) i && "function" != typeof t[o] || "children" === o || "key" === o || "value" === o || "checked" === o || n[o] === t[o] || Ue(e, o, t[o], n[o], r)
                  }(e, d, p, i, s), h) t.__k = [];
                else if (je(e, Ce(g = t.props.children) ? g : [g], t, n, r, i && "foreignObject" !== f, o, a, o ? o[0] : n.__k && De(n, 0), s, l), null != o)
                  for (g = o.length; g--;) null != o[g] && Ee(o[g]);
                s || ("value" in d && void 0 !== (g = d.value) && (g !== e.value || "progress" === f && !g || "option" === f && g !== p.value) && Ue(e, "value", g, p.value, !1), "checked" in d && void 0 !== (g = d.checked) && g !== e
                  .checked && Ue(e, "checked", g, p.checked, !1))
              }
              return e
            }(n.__e, t, n, r, i, o, a, l, c);
            (u = fe.diffed) && u(t)
          }
          catch (e) {
            t.__v = null, (l || null != o) && (t.__e = s, t.__h = !!l, o[o.indexOf(s)] = null), fe.__e(e, t, n)
          }
        }

        function Ge(e, t, n) {
          for (var r = 0; r < n.length; r++) Ye(n[r], n[++r], n[++r]);
          fe.__c && fe.__c(t, e), e.some((function(t) {
            try {
              e = t.__h, t.__h = [], e.some((function(e) {
                e.call(t)
              }))
            } catch (e) {
              fe.__e(e, t.__v)
            }
          }))
        }

        function Ye(e, t, n) {
          try {
            "function" == typeof e ? e(t) : e.current = t
          } catch (e) {
            fe.__e(e, n)
          }
        }

        function qe(e, t, n) {
          var r, i;
          if (fe.unmount && fe.unmount(e), (r = e.ref) && (r.current && r.current !== e.__e || Ye(r, null, t)), null != (r = e.__c)) {
            if (r.componentWillUnmount) try {
              r.componentWillUnmount()
            } catch (e) {
              fe.__e(e, t)
            }
            r.base = r.__P = null, e.__c = void 0
          }
          if (r = e.__k)
            for (i = 0; i < r.length; i++) r[i] && qe(r[i], t, n || "function" != typeof e.type);
          n || null == e.__e || Ee(e.__e), e.__ = e.__e = e.__d = void 0
        }

        function Ke(e, t, n) {
          return this.constructor(e, n)
        }

        function $e(e, t, n) {
          var r, i, o, a;
          fe.__ && fe.__(e, t), i = (r = "function" == typeof n) ? null : n && n.__k || t.__k, o = [], a = [], Xe(t, e = (!r && n || t).__k = Te(Pe, null, [e]), i || we, we, void 0 !== t.ownerSVGElement, !r && n ? [n] : i ? null : t.firstChild ?
            de.call(t.childNodes) : null, o, !r && n ? n : i ? i.__e : t.firstChild, r, a), Ge(o, e, a)
        }

        function Ze(e, t) {
          $e(e, t, Ze)
        }

        function Je(e, t, n) {
          var r, i, o, a, s = Se({}, e.props);
          for (o in e.type && e.type.defaultProps && (a = e.type.defaultProps), t) "key" == o ? r = t[o] : "ref" == o ? i = t[o] : s[o] = void 0 === t[o] && void 0 !== a ? a[o] : t[o];
          return arguments.length > 2 && (s.children = arguments.length > 3 ? de.call(arguments, 2) : n), Oe(e.type, s, r || e.key, i || e.ref, null)
        }

        function Qe(e, t) {
          var n = {
            __c: t = "__cC" + ye++,
            __: e,
            Consumer: function(e, t) {
              return e.children(t)
            },
            Provider: function(e) {
              var n, r;
              return this.getChildContext || (n = [], (r = {})[t] = this, this.getChildContext = function() {
                return r
              }, this.shouldComponentUpdate = function(e) {
                this.props.value !== e.value && n.some((function(e) {
                  e.__e = !0, Ne(e)
                }))
              }, this.sub = function(e) {
                n.push(e);
                var t = e.componentWillUnmount;
                e.componentWillUnmount = function() {
                  n.splice(n.indexOf(e), 1), t && t.call(e)
                }
              }), e.children
            }
          };
          return n.Provider.__ = n.Consumer.contextType = n
        }
        de = xe.slice, fe = {
          __e: function(e, t, n, r) {
            for (var i, o, a; t = t.__;)
              if ((i = t.__c) && !i.__) try {
                if ((o = i.constructor) && null != o.getDerivedStateFromError && (i.setState(o.getDerivedStateFromError(e)), a = i.__d), null != i.componentDidCatch && (i.componentDidCatch(e, r || {}), a = i.__d), a) return i.__E = i
              } catch (t) {
                e = t
              }
            throw e
          }
        }, ge = 0, Me.prototype.setState = function(e, t) {
          var n;
          n = null != this.__s && this.__s !== this.state ? this.__s : this.__s = Se({}, this.state), "function" == typeof e && (e = e(Se({}, n), this.props)), e && Se(n, e), null != e && this.__v && (t && this._sb.push(t), Ne(this))
        }, Me.prototype.forceUpdate = function(e) {
          this.__v && (this.__e = !0, e && this.__h.push(e), Ne(this))
        }, Me.prototype.render = Pe, me = [], _e = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, be = function(e, t) {
          return e.__v.__b - t.__v.__b
        }, Re.__r = 0, ye = 0;
        var et, tt, nt, rt, it = 0,
          ot = [],
          at = [],
          st = fe.__b,
          lt = fe.__r,
          ct = fe.diffed,
          ut = fe.__c,
          ht = fe.unmount;

        function pt(e, t) {
          fe.__h && fe.__h(tt, e, it || t), it = 0;
          var n = tt.__H || (tt.__H = {
            __: [],
            __h: []
          });
          return e >= n.__.length && n.__.push({
            __V: at
          }), n.__[e]
        }

        function dt(e) {
          return it = 1, ft(Pt, e)
        }

        function ft(e, t, n) {
          var r = pt(et++, 2);
          if (r.t = e, !r.__c && (r.__ = [n ? n(t) : Pt(void 0, t), function(e) {
              var t = r.__N ? r.__N[0] : r.__[0],
                n = r.t(t, e);
              t !== n && (r.__N = [n, r.__[1]], r.__c.setState({}))
            }], r.__c = tt, !tt.u)) {
            var i = function(e, t, n) {
              if (!r.__c.__H) return !0;
              var i = r.__c.__H.__.filter((function(e) {
                return e.__c
              }));
              if (i.every((function(e) {
                  return !e.__N
                }))) return !o || o.call(this, e, t, n);
              var a = !1;
              return i.forEach((function(e) {
                if (e.__N) {
                  var t = e.__[0];
                  e.__ = e.__N, e.__N = void 0, t !== e.__[0] && (a = !0)
                }
              })), !(!a && r.__c.props === e) && (!o || o.call(this, e, t, n))
            };
            tt.u = !0;
            var o = tt.shouldComponentUpdate,
              a = tt.componentWillUpdate;
            tt.componentWillUpdate = function(e, t, n) {
              if (this.__e) {
                var r = o;
                o = void 0, i(e, t, n), o = r
              }
              a && a.call(this, e, t, n)
            }, tt.shouldComponentUpdate = i
          }
          return r.__N || r.__
        }

        function gt(e, t) {
          var n = pt(et++, 3);
          !fe.__s && At(n.__H, t) && (n.__ = e, n.i = t, tt.__H.__h.push(n))
        }

        function mt(e, t) {
          var n = pt(et++, 4);
          !fe.__s && At(n.__H, t) && (n.__ = e, n.i = t, tt.__h.push(n))
        }

        function vt(e) {
          return it = 5, bt((function() {
            return {
              current: e
            }
          }), [])
        }

        function _t(e, t, n) {
          it = 6, mt((function() {
            return "function" == typeof e ? (e(t()), function() {
              return e(null)
            }) : e ? (e.current = t(), function() {
              return e.current = null
            }) : void 0
          }), null == n ? n : n.concat(e))
        }

        function bt(e, t) {
          var n = pt(et++, 7);
          return At(n.__H, t) ? (n.__V = e(), n.i = t, n.__h = e, n.__V) : n.__
        }

        function yt(e, t) {
          return it = 8, bt((function() {
            return e
          }), t)
        }

        function wt(e) {
          var t = tt.context[e.__c],
            n = pt(et++, 9);
          return n.c = e, t ? (null == n.__ && (n.__ = !0, t.sub(tt)), t.props.value) : e.__
        }

        function xt(e, t) {
          fe.useDebugValue && fe.useDebugValue(t ? t(e) : e)
        }

        function kt() {
          var e = pt(et++, 11);
          if (!e.__) {
            for (var t = tt.__v; null !== t && !t.__m && null !== t.__;) t = t.__;
            var n = t.__m || (t.__m = [0, 0]);
            e.__ = "P" + n[0] + "-" + n[1]++
          }
          return e.__
        }

        function Ct() {
          for (var e; e = ot.shift();)
            if (e.__P && e.__H) try {
              e.__H.__h.forEach(Tt), e.__H.__h.forEach(Ot), e.__H.__h = []
            } catch (t) {
              e.__H.__h = [], fe.__e(t, e.__v)
            }
        }
        fe.__b = function(e) {
          tt = null, st && st(e)
        }, fe.__r = function(e) {
          lt && lt(e), et = 0;
          var t = (tt = e.__c).__H;
          t && (nt === tt ? (t.__h = [], tt.__h = [], t.__.forEach((function(e) {
            e.__N && (e.__ = e.__N), e.__V = at, e.__N = e.i = void 0
          }))) : (t.__h.forEach(Tt), t.__h.forEach(Ot), t.__h = [], et = 0)), nt = tt
        }, fe.diffed = function(e) {
          ct && ct(e);
          var t = e.__c;
          t && t.__H && (t.__H.__h.length && (1 !== ot.push(t) && rt === fe.requestAnimationFrame || ((rt = fe.requestAnimationFrame) || Et)(Ct)), t.__H.__.forEach((function(e) {
            e.i && (e.__H = e.i), e.__V !== at && (e.__ = e.__V), e.i = void 0, e.__V = at
          }))), nt = tt = null
        }, fe.__c = function(e, t) {
          t.some((function(e) {
            try {
              e.__h.forEach(Tt), e.__h = e.__h.filter((function(e) {
                return !e.__ || Ot(e)
              }))
            } catch (n) {
              t.some((function(e) {
                e.__h && (e.__h = [])
              })), t = [], fe.__e(n, e.__v)
            }
          })), ut && ut(e, t)
        }, fe.unmount = function(e) {
          ht && ht(e);
          var t, n = e.__c;
          n && n.__H && (n.__H.__.forEach((function(e) {
            try {
              Tt(e)
            } catch (e) {
              t = e
            }
          })), n.__H = void 0, t && fe.__e(t, n.__v))
        };
        var St = "function" == typeof requestAnimationFrame;

        function Et(e) {
          var t, n = function() {
              clearTimeout(r), St && cancelAnimationFrame(t), setTimeout(e)
            },
            r = setTimeout(n, 100);
          St && (t = requestAnimationFrame(n))
        }

        function Tt(e) {
          var t = tt,
            n = e.__c;
          "function" == typeof n && (e.__c = void 0, n()), tt = t
        }

        function Ot(e) {
          var t = tt;
          e.__c = e.__(), tt = t
        }

        function At(e, t) {
          return !e || e.length !== t.length || t.some((function(t, n) {
            return t !== e[n]
          }))
        }

        function Pt(e, t) {
          return "function" == typeof t ? t(e) : t
        }

        function Mt(e, t) {
          for (var n in t) e[n] = t[n];
          return e
        }

        function Dt(e, t) {
          for (var n in e)
            if ("__source" !== n && !(n in t)) return !0;
          for (var r in t)
            if ("__source" !== r && e[r] !== t[r]) return !0;
          return !1
        }

        function It(e, t) {
          return e === t && (0 !== e || 1 / e == 1 / t) || e != e && t != t
        }

        function Nt(e) {
          this.props = e
        }

        function Rt(e, t) {
          function n(e) {
            var n = this.props.ref,
              r = n == e.ref;
            return !r && n && (n.call ? n(null) : n.current = null), t ? !t(this.props, e) || !r : Dt(this.props, e)
          }

          function r(t) {
            return this.shouldComponentUpdate = n, Te(e, t)
          }
          return r.displayName = "Memo(" + (e.displayName || e.name) + ")", r.prototype.isReactComponent = !0, r.__f = !0, r
        }(Nt.prototype = new Me).isPureReactComponent = !0, Nt.prototype.shouldComponentUpdate = function(e, t) {
          return Dt(this.props, e) || Dt(this.state, t)
        };
        var jt = fe.__b;
        fe.__b = function(e) {
          e.type && e.type.__f && e.ref && (e.props.ref = e.ref, e.ref = null), jt && jt(e)
        };
        var Lt = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911;

        function Ft(e) {
          function t(t) {
            var n = Mt({}, t);
            return delete n.ref, e(n, t.ref || null)
          }
          return t.$$typeof = Lt, t.render = t, t.prototype.isReactComponent = t.__f = !0, t.displayName = "ForwardRef(" + (e.displayName || e.name) + ")", t
        }
        var Bt = function(e, t) {
            return null == e ? null : Fe(Fe(e).map(t))
          },
          zt = {
            map: Bt,
            forEach: Bt,
            count: function(e) {
              return e ? Fe(e).length : 0
            },
            only: function(e) {
              var t = Fe(e);
              if (1 !== t.length) throw "Children.only";
              return t[0]
            },
            toArray: Fe
          },
          Ht = fe.__e;
        fe.__e = function(e, t, n, r) {
          if (e.then)
            for (var i, o = t; o = o.__;)
              if ((i = o.__c) && i.__c) return null == t.__e && (t.__e = n.__e, t.__k = n.__k), i.__c(e, t);
          Ht(e, t, n, r)
        };
        var Ut = fe.unmount;

        function Wt(e, t, n) {
          return e && (e.__c && e.__c.__H && (e.__c.__H.__.forEach((function(e) {
            "function" == typeof e.__c && e.__c()
          })), e.__c.__H = null), null != (e = Mt({}, e)).__c && (e.__c.__P === n && (e.__c.__P = t), e.__c = null), e.__k = e.__k && e.__k.map((function(e) {
            return Wt(e, t, n)
          }))), e
        }

        function Vt(e, t, n) {
          return e && (e.__v = null, e.__k = e.__k && e.__k.map((function(e) {
            return Vt(e, t, n)
          })), e.__c && e.__c.__P === t && (e.__e && n.insertBefore(e.__e, e.__d), e.__c.__e = !0, e.__c.__P = n)), e
        }

        function Xt() {
          this.__u = 0, this.t = null, this.__b = null
        }

        function Gt(e) {
          var t = e.__.__c;
          return t && t.__a && t.__a(e)
        }

        function Yt(e) {
          var t, n, r;

          function i(i) {
            if (t || (t = e()).then((function(e) {
                n = e.default || e
              }), (function(e) {
                r = e
              })), r) throw r;
            if (!n) throw t;
            return Te(n, i)
          }
          return i.displayName = "Lazy", i.__f = !0, i
        }

        function qt() {
          this.u = null, this.o = null
        }
        fe.unmount = function(e) {
          var t = e.__c;
          t && t.__R && t.__R(), t && !0 === e.__h && (e.type = null), Ut && Ut(e)
        }, (Xt.prototype = new Me).__c = function(e, t) {
          var n = t.__c,
            r = this;
          null == r.t && (r.t = []), r.t.push(n);
          var i = Gt(r.__v),
            o = !1,
            a = function() {
              o || (o = !0, n.__R = null, i ? i(s) : s())
            };
          n.__R = a;
          var s = function() {
              if (!--r.__u) {
                if (r.state.__a) {
                  var e = r.state.__a;
                  r.__v.__k[0] = Vt(e, e.__c.__P, e.__c.__O)
                }
                var t;
                for (r.setState({
                    __a: r.__b = null
                  }); t = r.t.pop();) t.forceUpdate()
              }
            },
            l = !0 === t.__h;
          r.__u++ || l || r.setState({
            __a: r.__b = r.__v.__k[0]
          }), e.then(a, a)
        }, Xt.prototype.componentWillUnmount = function() {
          this.t = []
        }, Xt.prototype.render = function(e, t) {
          if (this.__b) {
            if (this.__v.__k) {
              var n = document.createElement("div"),
                r = this.__v.__k[0].__c;
              this.__v.__k[0] = Wt(this.__b, n, r.__O = r.__P)
            }
            this.__b = null
          }
          var i = t.__a && Te(Pe, null, e.fallback);
          return i && (i.__h = null), [Te(Pe, null, t.__a ? null : e.children), i]
        };
        var Kt = function(e, t, n) {
          if (++n[1] === n[0] && e.o.delete(t), e.props.revealOrder && ("t" !== e.props.revealOrder[0] || !e.o.size))
            for (n = e.u; n;) {
              for (; n.length > 3;) n.pop()();
              if (n[1] < n[0]) break;
              e.u = n = n[2]
            }
        };

        function $t(e) {
          return this.getChildContext = function() {
            return e.context
          }, e.children
        }

        function Zt(e) {
          var t = this,
            n = e.i;
          t.componentWillUnmount = function() {
            $e(null, t.l), t.l = null, t.i = null
          }, t.i && t.i !== n && t.componentWillUnmount(), e.__v ? (t.l || (t.i = n, t.l = {
            nodeType: 1,
            parentNode: n,
            childNodes: [],
            appendChild: function(e) {
              this.childNodes.push(e), t.i.appendChild(e)
            },
            insertBefore: function(e, n) {
              this.childNodes.push(e), t.i.appendChild(e)
            },
            removeChild: function(e) {
              this.childNodes.splice(this.childNodes.indexOf(e) >>> 1, 1), t.i.removeChild(e)
            }
          }), $e(Te($t, {
            context: t.context
          }, e.__v), t.l)) : t.l && t.componentWillUnmount()
        }

        function Jt(e, t) {
          var n = Te(Zt, {
            __v: e,
            i: t
          });
          return n.containerInfo = t, n
        }(qt.prototype = new Me).__a = function(e) {
          var t = this,
            n = Gt(t.__v),
            r = t.o.get(e);
          return r[0]++,
            function(i) {
              var o = function() {
                t.props.revealOrder ? (r.push(i), Kt(t, e, r)) : i()
              };
              n ? n(o) : o()
            }
        }, qt.prototype.render = function(e) {
          this.u = null, this.o = new Map;
          var t = Fe(e.children);
          e.revealOrder && "b" === e.revealOrder[0] && t.reverse();
          for (var n = t.length; n--;) this.o.set(t[n], this.u = [1, 0, this.u]);
          return e.children
        }, qt.prototype.componentDidUpdate = qt.prototype.componentDidMount = function() {
          var e = this;
          this.o.forEach((function(t, n) {
            Kt(e, n, t)
          }))
        };
        var Qt = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103,
          en =
          /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,
          tn = /^on(Ani|Tra|Tou|BeforeInp|Compo)/,
          nn = /[A-Z0-9]/g,
          rn = "undefined" != typeof document,
          on = function(e) {
            return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(e)
          };

        function an(e, t, n) {
          return null == t.__k && (t.textContent = ""), $e(e, t), "function" == typeof n && n(), e ? e.__c : null
        }

        function sn(e, t, n) {
          return Ze(e, t), "function" == typeof n && n(), e ? e.__c : null
        }
        Me.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach((function(e) {
          Object.defineProperty(Me.prototype, e, {
            configurable: !0,
            get: function() {
              return this["UNSAFE_" + e]
            },
            set: function(t) {
              Object.defineProperty(this, e, {
                configurable: !0,
                writable: !0,
                value: t
              })
            }
          })
        }));
        var ln = fe.event;

        function cn() {}

        function un() {
          return this.cancelBubble
        }

        function hn() {
          return this.defaultPrevented
        }
        fe.event = function(e) {
          return ln && (e = ln(e)), e.persist = cn, e.isPropagationStopped = un, e.isDefaultPrevented = hn, e.nativeEvent = e
        };
        var pn, dn = {
            enumerable: !1,
            configurable: !0,
            get: function() {
              return this.class
            }
          },
          fn = fe.vnode;
        fe.vnode = function(e) {
          "string" == typeof e.type && function(e) {
            var t = e.props,
              n = e.type,
              r = {};
            for (var i in t) {
              var o = t[i];
              if (!("value" === i && "defaultValue" in t && null == o || rn && "children" === i && "noscript" === n || "class" === i || "className" === i)) {
                var a = i.toLowerCase();
                "defaultValue" === i && "value" in t && null == t.value ? i = "value" : "download" === i && !0 === o ? o = "" : "ondoubleclick" === a ? i = "ondblclick" : "onchange" !== a || "input" !== n && "textarea" !== n || on(t.type) ?
                  "onfocus" === a ? i = "onfocusin" : "onblur" === a ? i = "onfocusout" : tn.test(i) ? i = a : -1 === n.indexOf("-") && en.test(i) ? i = i.replace(nn, "-$&").toLowerCase() : null === o && (o = void 0) : a = i = "oninput",
                  "oninput" === a && r[i = a] && (i = "oninputCapture"), r[i] = o
              }
            }
            "select" == n && r.multiple && Array.isArray(r.value) && (r.value = Fe(t.children).forEach((function(e) {
              e.props.selected = -1 != r.value.indexOf(e.props.value)
            }))), "select" == n && null != r.defaultValue && (r.value = Fe(t.children).forEach((function(e) {
              e.props.selected = r.multiple ? -1 != r.defaultValue.indexOf(e.props.value) : r.defaultValue == e.props.value
            }))), t.class && !t.className ? (r.class = t.class, Object.defineProperty(r, "className", dn)) : (t.className && !t.class || t.class && t.className) && (r.class = r.className = t.className), e.props = r
          }(e), e.$$typeof = Qt, fn && fn(e)
        };
        var gn = fe.__r;
        fe.__r = function(e) {
          gn && gn(e), pn = e.__c
        };
        var mn = fe.diffed;
        fe.diffed = function(e) {
          mn && mn(e);
          var t = e.props,
            n = e.__e;
          null != n && "textarea" === e.type && "value" in t && t.value !== n.value && (n.value = null == t.value ? "" : t.value), pn = null
        };
        var vn = {
          ReactCurrentDispatcher: {
            current: {
              readContext: function(e) {
                return pn.__n[e.__c].props.value
              }
            }
          }
        };

        function _n(e) {
          return Te.bind(null, e)
        }

        function bn(e) {
          return !!e && e.$$typeof === Qt
        }

        function yn(e) {
          return bn(e) ? Je.apply(null, arguments) : e
        }

        function wn(e) {
          return !!e.__k && ($e(null, e), !0)
        }

        function xn(e) {
          return e && (e.base || 1 === e.nodeType && e) || null
        }
        var kn = function(e, t) {
            return e(t)
          },
          Cn = function(e, t) {
            return e(t)
          },
          Sn = Pe;

        function En(e) {
          e()
        }

        function Tn(e) {
          return e
        }

        function On() {
          return [!1, En]
        }
        var An = mt;

        function Pn(e, t) {
          var n = t(),
            r = dt({
              h: {
                __: n,
                v: t
              }
            }),
            i = r[0].h,
            o = r[1];
          return mt((function() {
            i.__ = n, i.v = t, It(i.__, t()) || o({
              h: i
            })
          }), [e, n, t]), gt((function() {
            return It(i.__, i.v()) || o({
              h: i
            }), e((function() {
              It(i.__, i.v()) || o({
                h: i
              })
            }))
          }), [e]), n
        }
        var Mn, Dn, In, Nn = {
            useState: dt,
            useId: kt,
            useReducer: ft,
            useEffect: gt,
            useLayoutEffect: mt,
            useInsertionEffect: An,
            useTransition: On,
            useDeferredValue: Tn,
            useSyncExternalStore: Pn,
            startTransition: En,
            useRef: vt,
            useImperativeHandle: _t,
            useMemo: bt,
            useCallback: yt,
            useContext: wt,
            useDebugValue: xt,
            version: "17.0.2",
            Children: zt,
            render: an,
            hydrate: sn,
            unmountComponentAtNode: wn,
            createPortal: Jt,
            createElement: Te,
            createContext: Qe,
            createFactory: _n,
            cloneElement: yn,
            createRef: Ae,
            Fragment: Pe,
            isValidElement: bn,
            findDOMNode: xn,
            Component: Me,
            PureComponent: Nt,
            memo: Rt,
            forwardRef: Ft,
            flushSync: Cn,
            unstable_batchedUpdates: kn,
            StrictMode: Sn,
            Suspense: Xt,
            SuspenseList: qt,
            lazy: Yt,
            __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: vn
          },
          Rn = Object.freeze({
            __proto__: null,
            Children: zt,
            PureComponent: Nt,
            StrictMode: Sn,
            Suspense: Xt,
            SuspenseList: qt,
            __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: vn,
            cloneElement: yn,
            createFactory: _n,
            createPortal: Jt,
            default: Nn,
            findDOMNode: xn,
            flushSync: Cn,
            forwardRef: Ft,
            hydrate: sn,
            isValidElement: bn,
            lazy: Yt,
            memo: Rt,
            render: an,
            startTransition: En,
            unmountComponentAtNode: wn,
            unstable_batchedUpdates: kn,
            useDeferredValue: Tn,
            useInsertionEffect: An,
            useSyncExternalStore: Pn,
            useTransition: On,
            version: "17.0.2",
            Component: Me,
            Fragment: Pe,
            createContext: Qe,
            createElement: Te,
            createRef: Ae,
            useCallback: yt,
            useContext: wt,
            useDebugValue: xt,
            useEffect: gt,
            useErrorBoundary: function(e) {
              var t = pt(et++, 10),
                n = dt();
              return t.__ = e, tt.componentDidCatch || (tt.componentDidCatch = function(e, r) {
                t.__ && t.__(e, r), n[1](e)
              }), [n[0], function() {
                n[1](void 0)
              }]
            },
            useId: kt,
            useImperativeHandle: _t,
            useLayoutEffect: mt,
            useMemo: bt,
            useReducer: ft,
            useRef: vt,
            useState: dt
          }),
          jn = {
            exports: {}
          },
          Ln = {},
          Fn = "function" == typeof Symbol && Symbol.for,
          Bn = Fn ? Symbol.for("react.element") : 60103,
          zn = Fn ? Symbol.for("react.portal") : 60106,
          Hn = Fn ? Symbol.for("react.fragment") : 60107,
          Un = Fn ? Symbol.for("react.strict_mode") : 60108,
          Wn = Fn ? Symbol.for("react.profiler") : 60114,
          Vn = Fn ? Symbol.for("react.provider") : 60109,
          Xn = Fn ? Symbol.for("react.context") : 60110,
          Gn = Fn ? Symbol.for("react.async_mode") : 60111,
          Yn = Fn ? Symbol.for("react.concurrent_mode") : 60111,
          qn = Fn ? Symbol.for("react.forward_ref") : 60112,
          Kn = Fn ? Symbol.for("react.suspense") : 60113,
          $n = Fn ? Symbol.for("react.suspense_list") : 60120,
          Zn = Fn ? Symbol.for("react.memo") : 60115,
          Jn = Fn ? Symbol.for("react.lazy") : 60116,
          Qn = Fn ? Symbol.for("react.block") : 60121,
          er = Fn ? Symbol.for("react.fundamental") : 60117,
          tr = Fn ? Symbol.for("react.responder") : 60118,
          nr = Fn ? Symbol.for("react.scope") : 60119;

        function rr(e) {
          if ("object" == typeof e && null !== e) {
            var t = e.$$typeof;
            switch (t) {
              case Bn:
                switch (e = e.type) {
                  case Gn:
                  case Yn:
                  case Hn:
                  case Wn:
                  case Un:
                  case Kn:
                    return e;
                  default:
                    switch (e = e && e.$$typeof) {
                      case Xn:
                      case qn:
                      case Jn:
                      case Zn:
                      case Vn:
                        return e;
                      default:
                        return t
                    }
                }
              case zn:
                return t
            }
          }
        }

        function ir(e) {
          return rr(e) === Yn
        }

        function or(e, t, n) {
          if (void 0 === n && (n = Error), !e) throw new n(t)
        }

        function ar(e) {
          return e.type === Dn.literal
        }

        function sr(e) {
          return e.type === Dn.argument
        }

        function lr(e) {
          return e.type === Dn.number
        }

        function cr(e) {
          return e.type === Dn.date
        }

        function ur(e) {
          return e.type === Dn.time
        }

        function hr(e) {
          return e.type === Dn.select
        }

        function pr(e) {
          return e.type === Dn.plural
        }

        function dr(e) {
          return e.type === Dn.pound
        }

        function fr(e) {
          return e.type === Dn.tag
        }

        function gr(e) {
          return !(!e || "object" != typeof e || e.type !== In.number)
        }

        function mr(e) {
          return !(!e || "object" != typeof e || e.type !== In.dateTime)
        }
        Ln.AsyncMode = Gn, Ln.ConcurrentMode = Yn, Ln.ContextConsumer = Xn, Ln.ContextProvider = Vn, Ln.Element = Bn, Ln.ForwardRef = qn, Ln.Fragment = Hn, Ln.Lazy = Jn, Ln.Memo = Zn, Ln.Portal = zn, Ln.Profiler = Wn, Ln.StrictMode = Un, Ln
          .Suspense = Kn, Ln.isAsyncMode = function(e) {
            return ir(e) || rr(e) === Gn
          }, Ln.isConcurrentMode = ir, Ln.isContextConsumer = function(e) {
            return rr(e) === Xn
          }, Ln.isContextProvider = function(e) {
            return rr(e) === Vn
          }, Ln.isElement = function(e) {
            return "object" == typeof e && null !== e && e.$$typeof === Bn
          }, Ln.isForwardRef = function(e) {
            return rr(e) === qn
          }, Ln.isFragment = function(e) {
            return rr(e) === Hn
          }, Ln.isLazy = function(e) {
            return rr(e) === Jn
          }, Ln.isMemo = function(e) {
            return rr(e) === Zn
          }, Ln.isPortal = function(e) {
            return rr(e) === zn
          }, Ln.isProfiler = function(e) {
            return rr(e) === Wn
          }, Ln.isStrictMode = function(e) {
            return rr(e) === Un
          }, Ln.isSuspense = function(e) {
            return rr(e) === Kn
          }, Ln.isValidElementType = function(e) {
            return "string" == typeof e || "function" == typeof e || e === Hn || e === Yn || e === Wn || e === Un || e === Kn || e === $n || "object" == typeof e && null !== e && (e.$$typeof === Jn || e.$$typeof === Zn || e.$$typeof === Vn || e
              .$$typeof === Xn || e.$$typeof === qn || e.$$typeof === er || e.$$typeof === tr || e.$$typeof === nr || e.$$typeof === Qn)
          }, Ln.typeOf = rr,
          function(e) {
            e.exports = Ln
          }(jn),
          function(e) {
            e[e.EXPECT_ARGUMENT_CLOSING_BRACE = 1] = "EXPECT_ARGUMENT_CLOSING_BRACE", e[e.EMPTY_ARGUMENT = 2] = "EMPTY_ARGUMENT", e[e.MALFORMED_ARGUMENT = 3] = "MALFORMED_ARGUMENT", e[e.EXPECT_ARGUMENT_TYPE = 4] = "EXPECT_ARGUMENT_TYPE", e[e
                .INVALID_ARGUMENT_TYPE = 5] = "INVALID_ARGUMENT_TYPE", e[e.EXPECT_ARGUMENT_STYLE = 6] = "EXPECT_ARGUMENT_STYLE", e[e.INVALID_NUMBER_SKELETON = 7] = "INVALID_NUMBER_SKELETON", e[e.INVALID_DATE_TIME_SKELETON = 8] =
              "INVALID_DATE_TIME_SKELETON", e[e.EXPECT_NUMBER_SKELETON = 9] = "EXPECT_NUMBER_SKELETON", e[e.EXPECT_DATE_TIME_SKELETON = 10] = "EXPECT_DATE_TIME_SKELETON", e[e.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE = 11] =
              "UNCLOSED_QUOTE_IN_ARGUMENT_STYLE", e[e.EXPECT_SELECT_ARGUMENT_OPTIONS = 12] = "EXPECT_SELECT_ARGUMENT_OPTIONS", e[e.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE = 13] = "EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE", e[e
                .INVALID_PLURAL_ARGUMENT_OFFSET_VALUE = 14] = "INVALID_PLURAL_ARGUMENT_OFFSET_VALUE", e[e.EXPECT_SELECT_ARGUMENT_SELECTOR = 15] = "EXPECT_SELECT_ARGUMENT_SELECTOR", e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR = 16] =
              "EXPECT_PLURAL_ARGUMENT_SELECTOR", e[e.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT = 17] = "EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT", e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT = 18] = "EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT", e[e
                .INVALID_PLURAL_ARGUMENT_SELECTOR = 19] = "INVALID_PLURAL_ARGUMENT_SELECTOR", e[e.DUPLICATE_PLURAL_ARGUMENT_SELECTOR = 20] = "DUPLICATE_PLURAL_ARGUMENT_SELECTOR", e[e.DUPLICATE_SELECT_ARGUMENT_SELECTOR = 21] =
              "DUPLICATE_SELECT_ARGUMENT_SELECTOR", e[e.MISSING_OTHER_CLAUSE = 22] = "MISSING_OTHER_CLAUSE", e[e.INVALID_TAG = 23] = "INVALID_TAG", e[e.INVALID_TAG_NAME = 25] = "INVALID_TAG_NAME", e[e.UNMATCHED_CLOSING_TAG = 26] =
              "UNMATCHED_CLOSING_TAG", e[e.UNCLOSED_TAG = 27] = "UNCLOSED_TAG"
          }(Mn || (Mn = {})),
          function(e) {
            e[e.literal = 0] = "literal", e[e.argument = 1] = "argument", e[e.number = 2] = "number", e[e.date = 3] = "date", e[e.time = 4] = "time", e[e.select = 5] = "select", e[e.plural = 6] = "plural", e[e.pound = 7] = "pound", e[e.tag = 8] =
              "tag"
          }(Dn || (Dn = {})),
          function(e) {
            e[e.number = 0] = "number", e[e.dateTime = 1] = "dateTime"
          }(In || (In = {}));
        var vr = /[ \xA0\u1680\u2000-\u200A\u202F\u205F\u3000]/,
          _r = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;

        function br(e) {
          var t = {};
          return e.replace(_r, (function(e) {
            var n = e.length;
            switch (e[0]) {
              case "G":
                t.era = 4 === n ? "long" : 5 === n ? "narrow" : "short";
                break;
              case "y":
                t.year = 2 === n ? "2-digit" : "numeric";
                break;
              case "Y":
              case "u":
              case "U":
              case "r":
                throw new RangeError("`Y/u/U/r` (year) patterns are not supported, use `y` instead");
              case "q":
              case "Q":
                throw new RangeError("`q/Q` (quarter) patterns are not supported");
              case "M":
              case "L":
                t.month = ["numeric", "2-digit", "short", "long", "narrow"][n - 1];
                break;
              case "w":
              case "W":
                throw new RangeError("`w/W` (week) patterns are not supported");
              case "d":
                t.day = ["numeric", "2-digit"][n - 1];
                break;
              case "D":
              case "F":
              case "g":
                throw new RangeError("`D/F/g` (day) patterns are not supported, use `d` instead");
              case "E":
                t.weekday = 4 === n ? "short" : 5 === n ? "narrow" : "short";
                break;
              case "e":
                if (n < 4) throw new RangeError("`e..eee` (weekday) patterns are not supported");
                t.weekday = ["short", "long", "narrow", "short"][n - 4];
                break;
              case "c":
                if (n < 4) throw new RangeError("`c..ccc` (weekday) patterns are not supported");
                t.weekday = ["short", "long", "narrow", "short"][n - 4];
                break;
              case "a":
                t.hour12 = !0;
                break;
              case "b":
              case "B":
                throw new RangeError("`b/B` (period) patterns are not supported, use `a` instead");
              case "h":
                t.hourCycle = "h12", t.hour = ["numeric", "2-digit"][n - 1];
                break;
              case "H":
                t.hourCycle = "h23", t.hour = ["numeric", "2-digit"][n - 1];
                break;
              case "K":
                t.hourCycle = "h11", t.hour = ["numeric", "2-digit"][n - 1];
                break;
              case "k":
                t.hourCycle = "h24", t.hour = ["numeric", "2-digit"][n - 1];
                break;
              case "j":
              case "J":
              case "C":
                throw new RangeError("`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead");
              case "m":
                t.minute = ["numeric", "2-digit"][n - 1];
                break;
              case "s":
                t.second = ["numeric", "2-digit"][n - 1];
                break;
              case "S":
              case "A":
                throw new RangeError("`S/A` (second) patterns are not supported, use `s` instead");
              case "z":
                t.timeZoneName = n < 4 ? "short" : "long";
                break;
              case "Z":
              case "O":
              case "v":
              case "V":
              case "X":
              case "x":
                throw new RangeError("`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead")
            }
            return ""
          })), t
        }
        var yr = /[\t-\r \x85\u200E\u200F\u2028\u2029]/i;
        var wr = /^\.(?:(0+)(\*)?|(#+)|(0+)(#+))$/g,
          xr = /^(@+)?(\+|#+)?[rs]?$/g,
          kr = /(\*)(0+)|(#+)(0+)|(0+)/g,
          Cr = /^(0+)$/;

        function Sr(e) {
          var t = {};
          return "r" === e[e.length - 1] ? t.roundingPriority = "morePrecision" : "s" === e[e.length - 1] && (t.roundingPriority = "lessPrecision"), e.replace(xr, (function(e, n, r) {
            return "string" != typeof r ? (t.minimumSignificantDigits = n.length, t.maximumSignificantDigits = n.length) : "+" === r ? t.minimumSignificantDigits = n.length : "#" === n[0] ? t.maximumSignificantDigits = n.length : (t
              .minimumSignificantDigits = n.length, t.maximumSignificantDigits = n.length + ("string" == typeof r ? r.length : 0)), ""
          })), t
        }

        function Er(e) {
          switch (e) {
            case "sign-auto":
              return {
                signDisplay: "auto"
              };
            case "sign-accounting":
            case "()":
              return {
                currencySign: "accounting"
              };
            case "sign-always":
            case "+!":
              return {
                signDisplay: "always"
              };
            case "sign-accounting-always":
            case "()!":
              return {
                signDisplay: "always", currencySign: "accounting"
              };
            case "sign-except-zero":
            case "+?":
              return {
                signDisplay: "exceptZero"
              };
            case "sign-accounting-except-zero":
            case "()?":
              return {
                signDisplay: "exceptZero", currencySign: "accounting"
              };
            case "sign-never":
            case "+_":
              return {
                signDisplay: "never"
              }
          }
        }

        function Tr(e) {
          var t;
          if ("E" === e[0] && "E" === e[1] ? (t = {
              notation: "engineering"
            }, e = e.slice(2)) : "E" === e[0] && (t = {
              notation: "scientific"
            }, e = e.slice(1)), t) {
            var n = e.slice(0, 2);
            if ("+!" === n ? (t.signDisplay = "always", e = e.slice(2)) : "+?" === n && (t.signDisplay = "exceptZero", e = e.slice(2)), !Cr.test(e)) throw new Error("Malformed concise eng/scientific notation");
            t.minimumIntegerDigits = e.length
          }
          return t
        }

        function Or(e) {
          var t = Er(e);
          return t || {}
        }

        function Ar(e) {
          for (var t = {}, n = 0, r = e; n < r.length; n++) {
            var i = r[n];
            switch (i.stem) {
              case "percent":
              case "%":
                t.style = "percent";
                continue;
              case "%x100":
                t.style = "percent", t.scale = 100;
                continue;
              case "currency":
                t.style = "currency", t.currency = i.options[0];
                continue;
              case "group-off":
              case ",_":
                t.useGrouping = !1;
                continue;
              case "precision-integer":
              case ".":
                t.maximumFractionDigits = 0;
                continue;
              case "measure-unit":
              case "unit":
                t.style = "unit", t.unit = i.options[0].replace(/^(.*?)-/, "");
                continue;
              case "compact-short":
              case "K":
                t.notation = "compact", t.compactDisplay = "short";
                continue;
              case "compact-long":
              case "KK":
                t.notation = "compact", t.compactDisplay = "long";
                continue;
              case "scientific":
                t = se(se(se({}, t), {
                  notation: "scientific"
                }), i.options.reduce((function(e, t) {
                  return se(se({}, e), Or(t))
                }), {}));
                continue;
              case "engineering":
                t = se(se(se({}, t), {
                  notation: "engineering"
                }), i.options.reduce((function(e, t) {
                  return se(se({}, e), Or(t))
                }), {}));
                continue;
              case "notation-simple":
                t.notation = "standard";
                continue;
              case "unit-width-narrow":
                t.currencyDisplay = "narrowSymbol", t.unitDisplay = "narrow";
                continue;
              case "unit-width-short":
                t.currencyDisplay = "code", t.unitDisplay = "short";
                continue;
              case "unit-width-full-name":
                t.currencyDisplay = "name", t.unitDisplay = "long";
                continue;
              case "unit-width-iso-code":
                t.currencyDisplay = "symbol";
                continue;
              case "scale":
                t.scale = parseFloat(i.options[0]);
                continue;
              case "integer-width":
                if (i.options.length > 1) throw new RangeError("integer-width stems only accept a single optional option");
                i.options[0].replace(kr, (function(e, n, r, i, o, a) {
                  if (n) t.minimumIntegerDigits = r.length;
                  else {
                    if (i && o) throw new Error("We currently do not support maximum integer digits");
                    if (a) throw new Error("We currently do not support exact integer digits")
                  }
                  return ""
                }));
                continue
            }
            if (Cr.test(i.stem)) t.minimumIntegerDigits = i.stem.length;
            else if (wr.test(i.stem)) {
              if (i.options.length > 1) throw new RangeError("Fraction-precision stems only accept a single optional option");
              i.stem.replace(wr, (function(e, n, r, i, o, a) {
                return "*" === r ? t.minimumFractionDigits = n.length : i && "#" === i[0] ? t.maximumFractionDigits = i.length : o && a ? (t.minimumFractionDigits = o.length, t.maximumFractionDigits = o.length + a.length) : (t
                  .minimumFractionDigits = n.length, t.maximumFractionDigits = n.length), ""
              }));
              var o = i.options[0];
              "w" === o ? t = se(se({}, t), {
                trailingZeroDisplay: "stripIfInteger"
              }) : o && (t = se(se({}, t), Sr(o)))
            } else if (xr.test(i.stem)) t = se(se({}, t), Sr(i.stem));
            else {
              var a = Er(i.stem);
              a && (t = se(se({}, t), a));
              var s = Tr(i.stem);
              s && (t = se(se({}, t), s))
            }
          }
          return t
        }
        var Pr, Mr = {
          AX: ["H"],
          BQ: ["H"],
          CP: ["H"],
          CZ: ["H"],
          DK: ["H"],
          FI: ["H"],
          ID: ["H"],
          IS: ["H"],
          ML: ["H"],
          NE: ["H"],
          RU: ["H"],
          SE: ["H"],
          SJ: ["H"],
          SK: ["H"],
          AS: ["h", "H"],
          BT: ["h", "H"],
          DJ: ["h", "H"],
          ER: ["h", "H"],
          GH: ["h", "H"],
          IN: ["h", "H"],
          LS: ["h", "H"],
          PG: ["h", "H"],
          PW: ["h", "H"],
          SO: ["h", "H"],
          TO: ["h", "H"],
          VU: ["h", "H"],
          WS: ["h", "H"],
          "001": ["H", "h"],
          AL: ["h", "H", "hB"],
          TD: ["h", "H", "hB"],
          "ca-ES": ["H", "h", "hB"],
          CF: ["H", "h", "hB"],
          CM: ["H", "h", "hB"],
          "fr-CA": ["H", "h", "hB"],
          "gl-ES": ["H", "h", "hB"],
          "it-CH": ["H", "h", "hB"],
          "it-IT": ["H", "h", "hB"],
          LU: ["H", "h", "hB"],
          NP: ["H", "h", "hB"],
          PF: ["H", "h", "hB"],
          SC: ["H", "h", "hB"],
          SM: ["H", "h", "hB"],
          SN: ["H", "h", "hB"],
          TF: ["H", "h", "hB"],
          VA: ["H", "h", "hB"],
          CY: ["h", "H", "hb", "hB"],
          GR: ["h", "H", "hb", "hB"],
          CO: ["h", "H", "hB", "hb"],
          DO: ["h", "H", "hB", "hb"],
          KP: ["h", "H", "hB", "hb"],
          KR: ["h", "H", "hB", "hb"],
          NA: ["h", "H", "hB", "hb"],
          PA: ["h", "H", "hB", "hb"],
          PR: ["h", "H", "hB", "hb"],
          VE: ["h", "H", "hB", "hb"],
          AC: ["H", "h", "hb", "hB"],
          AI: ["H", "h", "hb", "hB"],
          BW: ["H", "h", "hb", "hB"],
          BZ: ["H", "h", "hb", "hB"],
          CC: ["H", "h", "hb", "hB"],
          CK: ["H", "h", "hb", "hB"],
          CX: ["H", "h", "hb", "hB"],
          DG: ["H", "h", "hb", "hB"],
          FK: ["H", "h", "hb", "hB"],
          GB: ["H", "h", "hb", "hB"],
          GG: ["H", "h", "hb", "hB"],
          GI: ["H", "h", "hb", "hB"],
          IE: ["H", "h", "hb", "hB"],
          IM: ["H", "h", "hb", "hB"],
          IO: ["H", "h", "hb", "hB"],
          JE: ["H", "h", "hb", "hB"],
          LT: ["H", "h", "hb", "hB"],
          MK: ["H", "h", "hb", "hB"],
          MN: ["H", "h", "hb", "hB"],
          MS: ["H", "h", "hb", "hB"],
          NF: ["H", "h", "hb", "hB"],
          NG: ["H", "h", "hb", "hB"],
          NR: ["H", "h", "hb", "hB"],
          NU: ["H", "h", "hb", "hB"],
          PN: ["H", "h", "hb", "hB"],
          SH: ["H", "h", "hb", "hB"],
          SX: ["H", "h", "hb", "hB"],
          TA: ["H", "h", "hb", "hB"],
          ZA: ["H", "h", "hb", "hB"],
          "af-ZA": ["H", "h", "hB", "hb"],
          AR: ["H", "h", "hB", "hb"],
          CL: ["H", "h", "hB", "hb"],
          CR: ["H", "h", "hB", "hb"],
          CU: ["H", "h", "hB", "hb"],
          EA: ["H", "h", "hB", "hb"],
          "es-BO": ["H", "h", "hB", "hb"],
          "es-BR": ["H", "h", "hB", "hb"],
          "es-EC": ["H", "h", "hB", "hb"],
          "es-ES": ["H", "h", "hB", "hb"],
          "es-GQ": ["H", "h", "hB", "hb"],
          "es-PE": ["H", "h", "hB", "hb"],
          GT: ["H", "h", "hB", "hb"],
          HN: ["H", "h", "hB", "hb"],
          IC: ["H", "h", "hB", "hb"],
          KG: ["H", "h", "hB", "hb"],
          KM: ["H", "h", "hB", "hb"],
          LK: ["H", "h", "hB", "hb"],
          MA: ["H", "h", "hB", "hb"],
          MX: ["H", "h", "hB", "hb"],
          NI: ["H", "h", "hB", "hb"],
          PY: ["H", "h", "hB", "hb"],
          SV: ["H", "h", "hB", "hb"],
          UY: ["H", "h", "hB", "hb"],
          JP: ["H", "h", "K"],
          AD: ["H", "hB"],
          AM: ["H", "hB"],
          AO: ["H", "hB"],
          AT: ["H", "hB"],
          AW: ["H", "hB"],
          BE: ["H", "hB"],
          BF: ["H", "hB"],
          BJ: ["H", "hB"],
          BL: ["H", "hB"],
          BR: ["H", "hB"],
          CG: ["H", "hB"],
          CI: ["H", "hB"],
          CV: ["H", "hB"],
          DE: ["H", "hB"],
          EE: ["H", "hB"],
          FR: ["H", "hB"],
          GA: ["H", "hB"],
          GF: ["H", "hB"],
          GN: ["H", "hB"],
          GP: ["H", "hB"],
          GW: ["H", "hB"],
          HR: ["H", "hB"],
          IL: ["H", "hB"],
          IT: ["H", "hB"],
          KZ: ["H", "hB"],
          MC: ["H", "hB"],
          MD: ["H", "hB"],
          MF: ["H", "hB"],
          MQ: ["H", "hB"],
          MZ: ["H", "hB"],
          NC: ["H", "hB"],
          NL: ["H", "hB"],
          PM: ["H", "hB"],
          PT: ["H", "hB"],
          RE: ["H", "hB"],
          RO: ["H", "hB"],
          SI: ["H", "hB"],
          SR: ["H", "hB"],
          ST: ["H", "hB"],
          TG: ["H", "hB"],
          TR: ["H", "hB"],
          WF: ["H", "hB"],
          YT: ["H", "hB"],
          BD: ["h", "hB", "H"],
          PK: ["h", "hB", "H"],
          AZ: ["H", "hB", "h"],
          BA: ["H", "hB", "h"],
          BG: ["H", "hB", "h"],
          CH: ["H", "hB", "h"],
          GE: ["H", "hB", "h"],
          LI: ["H", "hB", "h"],
          ME: ["H", "hB", "h"],
          RS: ["H", "hB", "h"],
          UA: ["H", "hB", "h"],
          UZ: ["H", "hB", "h"],
          XK: ["H", "hB", "h"],
          AG: ["h", "hb", "H", "hB"],
          AU: ["h", "hb", "H", "hB"],
          BB: ["h", "hb", "H", "hB"],
          BM: ["h", "hb", "H", "hB"],
          BS: ["h", "hb", "H", "hB"],
          CA: ["h", "hb", "H", "hB"],
          DM: ["h", "hb", "H", "hB"],
          "en-001": ["h", "hb", "H", "hB"],
          FJ: ["h", "hb", "H", "hB"],
          FM: ["h", "hb", "H", "hB"],
          GD: ["h", "hb", "H", "hB"],
          GM: ["h", "hb", "H", "hB"],
          GU: ["h", "hb", "H", "hB"],
          GY: ["h", "hb", "H", "hB"],
          JM: ["h", "hb", "H", "hB"],
          KI: ["h", "hb", "H", "hB"],
          KN: ["h", "hb", "H", "hB"],
          KY: ["h", "hb", "H", "hB"],
          LC: ["h", "hb", "H", "hB"],
          LR: ["h", "hb", "H", "hB"],
          MH: ["h", "hb", "H", "hB"],
          MP: ["h", "hb", "H", "hB"],
          MW: ["h", "hb", "H", "hB"],
          NZ: ["h", "hb", "H", "hB"],
          SB: ["h", "hb", "H", "hB"],
          SG: ["h", "hb", "H", "hB"],
          SL: ["h", "hb", "H", "hB"],
          SS: ["h", "hb", "H", "hB"],
          SZ: ["h", "hb", "H", "hB"],
          TC: ["h", "hb", "H", "hB"],
          TT: ["h", "hb", "H", "hB"],
          UM: ["h", "hb", "H", "hB"],
          US: ["h", "hb", "H", "hB"],
          VC: ["h", "hb", "H", "hB"],
          VG: ["h", "hb", "H", "hB"],
          VI: ["h", "hb", "H", "hB"],
          ZM: ["h", "hb", "H", "hB"],
          BO: ["H", "hB", "h", "hb"],
          EC: ["H", "hB", "h", "hb"],
          ES: ["H", "hB", "h", "hb"],
          GQ: ["H", "hB", "h", "hb"],
          PE: ["H", "hB", "h", "hb"],
          AE: ["h", "hB", "hb", "H"],
          "ar-001": ["h", "hB", "hb", "H"],
          BH: ["h", "hB", "hb", "H"],
          DZ: ["h", "hB", "hb", "H"],
          EG: ["h", "hB", "hb", "H"],
          EH: ["h", "hB", "hb", "H"],
          HK: ["h", "hB", "hb", "H"],
          IQ: ["h", "hB", "hb", "H"],
          JO: ["h", "hB", "hb", "H"],
          KW: ["h", "hB", "hb", "H"],
          LB: ["h", "hB", "hb", "H"],
          LY: ["h", "hB", "hb", "H"],
          MO: ["h", "hB", "hb", "H"],
          MR: ["h", "hB", "hb", "H"],
          OM: ["h", "hB", "hb", "H"],
          PH: ["h", "hB", "hb", "H"],
          PS: ["h", "hB", "hb", "H"],
          QA: ["h", "hB", "hb", "H"],
          SA: ["h", "hB", "hb", "H"],
          SD: ["h", "hB", "hb", "H"],
          SY: ["h", "hB", "hb", "H"],
          TN: ["h", "hB", "hb", "H"],
          YE: ["h", "hB", "hb", "H"],
          AF: ["H", "hb", "hB", "h"],
          LA: ["H", "hb", "hB", "h"],
          CN: ["H", "hB", "hb", "h"],
          LV: ["H", "hB", "hb", "h"],
          TL: ["H", "hB", "hb", "h"],
          "zu-ZA": ["H", "hB", "hb", "h"],
          CD: ["hB", "H"],
          IR: ["hB", "H"],
          "hi-IN": ["hB", "h", "H"],
          "kn-IN": ["hB", "h", "H"],
          "ml-IN": ["hB", "h", "H"],
          "te-IN": ["hB", "h", "H"],
          KH: ["hB", "h", "H", "hb"],
          "ta-IN": ["hB", "h", "hb", "H"],
          BN: ["hb", "hB", "h", "H"],
          MY: ["hb", "hB", "h", "H"],
          ET: ["hB", "hb", "h", "H"],
          "gu-IN": ["hB", "hb", "h", "H"],
          "mr-IN": ["hB", "hb", "h", "H"],
          "pa-IN": ["hB", "hb", "h", "H"],
          TW: ["hB", "hb", "h", "H"],
          KE: ["hB", "hb", "H", "h"],
          MM: ["hB", "hb", "H", "h"],
          TZ: ["hB", "hb", "H", "h"],
          UG: ["hB", "hb", "H", "h"]
        };

        function Dr(e) {
          var t = e.hourCycle;
          if (void 0 === t && e.hourCycles && e.hourCycles.length && (t = e.hourCycles[0]), t) switch (t) {
            case "h24":
              return "k";
            case "h23":
              return "H";
            case "h12":
              return "h";
            case "h11":
              return "K";
            default:
              throw new Error("Invalid hourCycle")
          }
          var n, r = e.language;
          return "root" !== r && (n = e.maximize().region), (Mr[n || ""] || Mr[r || ""] || Mr["".concat(r, "-001")] || Mr["001"])[0]
        }
        var Ir = new RegExp("^".concat(vr.source, "*")),
          Nr = new RegExp("".concat(vr.source, "*$"));

        function Rr(e, t) {
          return {
            start: e,
            end: t
          }
        }
        var jr = !!String.prototype.startsWith,
          Lr = !!String.fromCodePoint,
          Fr = !!Object.fromEntries,
          Br = !!String.prototype.codePointAt,
          zr = !!String.prototype.trimStart,
          Hr = !!String.prototype.trimEnd,
          Ur = !!Number.isSafeInteger ? Number.isSafeInteger : function(e) {
            return "number" == typeof e && isFinite(e) && Math.floor(e) === e && Math.abs(e) <= 9007199254740991
          },
          Wr = !0;
        try {
          Wr = "a" === (null === (Pr = Zr("([^\\p{White_Space}\\p{Pattern_Syntax}]*)", "yu").exec("a")) || void 0 === Pr ? void 0 : Pr[0])
        } catch (vS) {
          Wr = !1
        }
        var Vr, Xr = jr ? function(e, t, n) {
            return e.startsWith(t, n)
          } : function(e, t, n) {
            return e.slice(n, n + t.length) === t
          },
          Gr = Lr ? String.fromCodePoint : function() {
            for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
            for (var n, r = "", i = e.length, o = 0; i > o;) {
              if ((n = e[o++]) > 1114111) throw RangeError(n + " is not a valid code point");
              r += n < 65536 ? String.fromCharCode(n) : String.fromCharCode(55296 + ((n -= 65536) >> 10), n % 1024 + 56320)
            }
            return r
          },
          Yr = Fr ? Object.fromEntries : function(e) {
            for (var t = {}, n = 0, r = e; n < r.length; n++) {
              var i = r[n],
                o = i[0],
                a = i[1];
              t[o] = a
            }
            return t
          },
          qr = Br ? function(e, t) {
            return e.codePointAt(t)
          } : function(e, t) {
            var n = e.length;
            if (!(t < 0 || t >= n)) {
              var r, i = e.charCodeAt(t);
              return i < 55296 || i > 56319 || t + 1 === n || (r = e.charCodeAt(t + 1)) < 56320 || r > 57343 ? i : r - 56320 + (i - 55296 << 10) + 65536
            }
          },
          Kr = zr ? function(e) {
            return e.trimStart()
          } : function(e) {
            return e.replace(Ir, "")
          },
          $r = Hr ? function(e) {
            return e.trimEnd()
          } : function(e) {
            return e.replace(Nr, "")
          };

        function Zr(e, t) {
          return new RegExp(e, t)
        }
        if (Wr) {
          var Jr = Zr("([^\\p{White_Space}\\p{Pattern_Syntax}]*)", "yu");
          Vr = function(e, t) {
            var n;
            return Jr.lastIndex = t, null !== (n = Jr.exec(e)[1]) && void 0 !== n ? n : ""
          }
        } else Vr = function(e, t) {
          for (var n = [];;) {
            var r = qr(e, t);
            if (void 0 === r || ni(r) || ri(r)) break;
            n.push(r), t += r >= 65536 ? 2 : 1
          }
          return Gr.apply(void 0, n)
        };
        var Qr = function() {
          function e(e, t) {
            void 0 === t && (t = {}), this.message = e, this.position = {
              offset: 0,
              line: 1,
              column: 1
            }, this.ignoreTag = !!t.ignoreTag, this.locale = t.locale, this.requiresOtherClause = !!t.requiresOtherClause, this.shouldParseSkeletons = !!t.shouldParseSkeletons
          }
          return e.prototype.parse = function() {
            if (0 !== this.offset()) throw Error("parser can only be used once");
            return this.parseMessage(0, "", !1)
          }, e.prototype.parseMessage = function(e, t, n) {
            for (var r = []; !this.isEOF();) {
              var i = this.char();
              if (123 === i) {
                if ((o = this.parseArgument(e, n)).err) return o;
                r.push(o.val)
              } else {
                if (125 === i && e > 0) break;
                if (35 !== i || "plural" !== t && "selectordinal" !== t) {
                  if (60 === i && !this.ignoreTag && 47 === this.peek()) {
                    if (n) break;
                    return this.error(Mn.UNMATCHED_CLOSING_TAG, Rr(this.clonePosition(), this.clonePosition()))
                  }
                  if (60 === i && !this.ignoreTag && ei(this.peek() || 0)) {
                    if ((o = this.parseTag(e, t)).err) return o;
                    r.push(o.val)
                  } else {
                    var o;
                    if ((o = this.parseLiteral(e, t)).err) return o;
                    r.push(o.val)
                  }
                } else {
                  var a = this.clonePosition();
                  this.bump(), r.push({
                    type: Dn.pound,
                    location: Rr(a, this.clonePosition())
                  })
                }
              }
            }
            return {
              val: r,
              err: null
            }
          }, e.prototype.parseTag = function(e, t) {
            var n = this.clonePosition();
            this.bump();
            var r = this.parseTagName();
            if (this.bumpSpace(), this.bumpIf("/>")) return {
              val: {
                type: Dn.literal,
                value: "<".concat(r, "/>"),
                location: Rr(n, this.clonePosition())
              },
              err: null
            };
            if (this.bumpIf(">")) {
              var i = this.parseMessage(e + 1, t, !0);
              if (i.err) return i;
              var o = i.val,
                a = this.clonePosition();
              if (this.bumpIf("</")) {
                if (this.isEOF() || !ei(this.char())) return this.error(Mn.INVALID_TAG, Rr(a, this.clonePosition()));
                var s = this.clonePosition();
                return r !== this.parseTagName() ? this.error(Mn.UNMATCHED_CLOSING_TAG, Rr(s, this.clonePosition())) : (this.bumpSpace(), this.bumpIf(">") ? {
                  val: {
                    type: Dn.tag,
                    value: r,
                    children: o,
                    location: Rr(n, this.clonePosition())
                  },
                  err: null
                } : this.error(Mn.INVALID_TAG, Rr(a, this.clonePosition())))
              }
              return this.error(Mn.UNCLOSED_TAG, Rr(n, this.clonePosition()))
            }
            return this.error(Mn.INVALID_TAG, Rr(n, this.clonePosition()))
          }, e.prototype.parseTagName = function() {
            var e = this.offset();
            for (this.bump(); !this.isEOF() && ti(this.char());) this.bump();
            return this.message.slice(e, this.offset())
          }, e.prototype.parseLiteral = function(e, t) {
            for (var n = this.clonePosition(), r = "";;) {
              var i = this.tryParseQuote(t);
              if (i) r += i;
              else {
                var o = this.tryParseUnquoted(e, t);
                if (o) r += o;
                else {
                  var a = this.tryParseLeftAngleBracket();
                  if (!a) break;
                  r += a
                }
              }
            }
            var s = Rr(n, this.clonePosition());
            return {
              val: {
                type: Dn.literal,
                value: r,
                location: s
              },
              err: null
            }
          }, e.prototype.tryParseLeftAngleBracket = function() {
            return this.isEOF() || 60 !== this.char() || !this.ignoreTag && (ei(e = this.peek() || 0) || 47 === e) ? null : (this.bump(), "<");
            var e
          }, e.prototype.tryParseQuote = function(e) {
            if (this.isEOF() || 39 !== this.char()) return null;
            switch (this.peek()) {
              case 39:
                return this.bump(), this.bump(), "'";
              case 123:
              case 60:
              case 62:
              case 125:
                break;
              case 35:
                if ("plural" === e || "selectordinal" === e) break;
                return null;
              default:
                return null
            }
            this.bump();
            var t = [this.char()];
            for (this.bump(); !this.isEOF();) {
              var n = this.char();
              if (39 === n) {
                if (39 !== this.peek()) {
                  this.bump();
                  break
                }
                t.push(39), this.bump()
              } else t.push(n);
              this.bump()
            }
            return Gr.apply(void 0, t)
          }, e.prototype.tryParseUnquoted = function(e, t) {
            if (this.isEOF()) return null;
            var n = this.char();
            return 60 === n || 123 === n || 35 === n && ("plural" === t || "selectordinal" === t) || 125 === n && e > 0 ? null : (this.bump(), Gr(n))
          }, e.prototype.parseArgument = function(e, t) {
            var n = this.clonePosition();
            if (this.bump(), this.bumpSpace(), this.isEOF()) return this.error(Mn.EXPECT_ARGUMENT_CLOSING_BRACE, Rr(n, this.clonePosition()));
            if (125 === this.char()) return this.bump(), this.error(Mn.EMPTY_ARGUMENT, Rr(n, this.clonePosition()));
            var r = this.parseIdentifierIfPossible().value;
            if (!r) return this.error(Mn.MALFORMED_ARGUMENT, Rr(n, this.clonePosition()));
            if (this.bumpSpace(), this.isEOF()) return this.error(Mn.EXPECT_ARGUMENT_CLOSING_BRACE, Rr(n, this.clonePosition()));
            switch (this.char()) {
              case 125:
                return this.bump(), {
                  val: {
                    type: Dn.argument,
                    value: r,
                    location: Rr(n, this.clonePosition())
                  },
                  err: null
                };
              case 44:
                return this.bump(), this.bumpSpace(), this.isEOF() ? this.error(Mn.EXPECT_ARGUMENT_CLOSING_BRACE, Rr(n, this.clonePosition())) : this.parseArgumentOptions(e, t, r, n);
              default:
                return this.error(Mn.MALFORMED_ARGUMENT, Rr(n, this.clonePosition()))
            }
          }, e.prototype.parseIdentifierIfPossible = function() {
            var e = this.clonePosition(),
              t = this.offset(),
              n = Vr(this.message, t),
              r = t + n.length;
            return this.bumpTo(r), {
              value: n,
              location: Rr(e, this.clonePosition())
            }
          }, e.prototype.parseArgumentOptions = function(e, t, n, r) {
            var i, o = this.clonePosition(),
              a = this.parseIdentifierIfPossible().value,
              s = this.clonePosition();
            switch (a) {
              case "":
                return this.error(Mn.EXPECT_ARGUMENT_TYPE, Rr(o, s));
              case "number":
              case "date":
              case "time":
                this.bumpSpace();
                var l = null;
                if (this.bumpIf(",")) {
                  this.bumpSpace();
                  var c = this.clonePosition();
                  if ((v = this.parseSimpleArgStyleIfPossible()).err) return v;
                  if (0 === (d = $r(v.val)).length) return this.error(Mn.EXPECT_ARGUMENT_STYLE, Rr(this.clonePosition(), this.clonePosition()));
                  l = {
                    style: d,
                    styleLocation: Rr(c, this.clonePosition())
                  }
                }
                if ((_ = this.tryParseArgumentClose(r)).err) return _;
                var u = Rr(r, this.clonePosition());
                if (l && Xr(null == l ? void 0 : l.style, "::", 0)) {
                  var h = Kr(l.style.slice(2));
                  if ("number" === a) return (v = this.parseNumberSkeletonFromString(h, l.styleLocation)).err ? v : {
                    val: {
                      type: Dn.number,
                      value: n,
                      location: u,
                      style: v.val
                    },
                    err: null
                  };
                  if (0 === h.length) return this.error(Mn.EXPECT_DATE_TIME_SKELETON, u);
                  var p = h;
                  this.locale && (p = function(e, t) {
                    for (var n = "", r = 0; r < e.length; r++) {
                      var i = e.charAt(r);
                      if ("j" === i) {
                        for (var o = 0; r + 1 < e.length && e.charAt(r + 1) === i;) o++, r++;
                        var a = 1 + (1 & o),
                          s = o < 2 ? 1 : 3 + (o >> 1),
                          l = Dr(t);
                        for ("H" != l && "k" != l || (s = 0); s-- > 0;) n += "a";
                        for (; a-- > 0;) n = l + n
                      } else n += "J" === i ? "H" : i
                    }
                    return n
                  }(h, this.locale));
                  var d = {
                    type: In.dateTime,
                    pattern: p,
                    location: l.styleLocation,
                    parsedOptions: this.shouldParseSkeletons ? br(p) : {}
                  };
                  return {
                    val: {
                      type: "date" === a ? Dn.date : Dn.time,
                      value: n,
                      location: u,
                      style: d
                    },
                    err: null
                  }
                }
                return {
                  val: {
                    type: "number" === a ? Dn.number : "date" === a ? Dn.date : Dn.time,
                    value: n,
                    location: u,
                    style: null !== (i = null == l ? void 0 : l.style) && void 0 !== i ? i : null
                  }, err: null
                };
              case "plural":
              case "selectordinal":
              case "select":
                var f = this.clonePosition();
                if (this.bumpSpace(), !this.bumpIf(",")) return this.error(Mn.EXPECT_SELECT_ARGUMENT_OPTIONS, Rr(f, se({}, f)));
                this.bumpSpace();
                var g = this.parseIdentifierIfPossible(),
                  m = 0;
                if ("select" !== a && "offset" === g.value) {
                  if (!this.bumpIf(":")) return this.error(Mn.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, Rr(this.clonePosition(), this.clonePosition()));
                  var v;
                  if (this.bumpSpace(), (v = this.tryParseDecimalInteger(Mn.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, Mn.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE)).err) return v;
                  this.bumpSpace(), g = this.parseIdentifierIfPossible(), m = v.val
                }
                var _, b = this.tryParsePluralOrSelectOptions(e, a, t, g);
                if (b.err) return b;
                if ((_ = this.tryParseArgumentClose(r)).err) return _;
                var y = Rr(r, this.clonePosition());
                return "select" === a ? {
                  val: {
                    type: Dn.select,
                    value: n,
                    options: Yr(b.val),
                    location: y
                  },
                  err: null
                } : {
                  val: {
                    type: Dn.plural,
                    value: n,
                    options: Yr(b.val),
                    offset: m,
                    pluralType: "plural" === a ? "cardinal" : "ordinal",
                    location: y
                  },
                  err: null
                };
              default:
                return this.error(Mn.INVALID_ARGUMENT_TYPE, Rr(o, s))
            }
          }, e.prototype.tryParseArgumentClose = function(e) {
            return this.isEOF() || 125 !== this.char() ? this.error(Mn.EXPECT_ARGUMENT_CLOSING_BRACE, Rr(e, this.clonePosition())) : (this.bump(), {
              val: !0,
              err: null
            })
          }, e.prototype.parseSimpleArgStyleIfPossible = function() {
            for (var e = 0, t = this.clonePosition(); !this.isEOF();) {
              switch (this.char()) {
                case 39:
                  this.bump();
                  var n = this.clonePosition();
                  if (!this.bumpUntil("'")) return this.error(Mn.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, Rr(n, this.clonePosition()));
                  this.bump();
                  break;
                case 123:
                  e += 1, this.bump();
                  break;
                case 125:
                  if (!(e > 0)) return {
                    val: this.message.slice(t.offset, this.offset()),
                    err: null
                  };
                  e -= 1;
                  break;
                default:
                  this.bump()
              }
            }
            return {
              val: this.message.slice(t.offset, this.offset()),
              err: null
            }
          }, e.prototype.parseNumberSkeletonFromString = function(e, t) {
            var n = [];
            try {
              n = function(e) {
                if (0 === e.length) throw new Error("Number skeleton cannot be empty");
                for (var t = e.split(yr).filter((function(e) {
                    return e.length > 0
                  })), n = [], r = 0, i = t; r < i.length; r++) {
                  var o = i[r].split("/");
                  if (0 === o.length) throw new Error("Invalid number skeleton");
                  for (var a = o[0], s = o.slice(1), l = 0, c = s; l < c.length; l++)
                    if (0 === c[l].length) throw new Error("Invalid number skeleton");
                  n.push({
                    stem: a,
                    options: s
                  })
                }
                return n
              }(e)
            } catch (e) {
              return this.error(Mn.INVALID_NUMBER_SKELETON, t)
            }
            return {
              val: {
                type: In.number,
                tokens: n,
                location: t,
                parsedOptions: this.shouldParseSkeletons ? Ar(n) : {}
              },
              err: null
            }
          }, e.prototype.tryParsePluralOrSelectOptions = function(e, t, n, r) {
            for (var i, o = !1, a = [], s = new Set, l = r.value, c = r.location;;) {
              if (0 === l.length) {
                var u = this.clonePosition();
                if ("select" === t || !this.bumpIf("=")) break;
                var h = this.tryParseDecimalInteger(Mn.EXPECT_PLURAL_ARGUMENT_SELECTOR, Mn.INVALID_PLURAL_ARGUMENT_SELECTOR);
                if (h.err) return h;
                c = Rr(u, this.clonePosition()), l = this.message.slice(u.offset, this.offset())
              }
              if (s.has(l)) return this.error("select" === t ? Mn.DUPLICATE_SELECT_ARGUMENT_SELECTOR : Mn.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, c);
              "other" === l && (o = !0), this.bumpSpace();
              var p = this.clonePosition();
              if (!this.bumpIf("{")) return this.error("select" === t ? Mn.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT : Mn.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, Rr(this.clonePosition(), this.clonePosition()));
              var d = this.parseMessage(e + 1, t, n);
              if (d.err) return d;
              var f = this.tryParseArgumentClose(p);
              if (f.err) return f;
              a.push([l, {
                value: d.val,
                location: Rr(p, this.clonePosition())
              }]), s.add(l), this.bumpSpace(), l = (i = this.parseIdentifierIfPossible()).value, c = i.location
            }
            return 0 === a.length ? this.error("select" === t ? Mn.EXPECT_SELECT_ARGUMENT_SELECTOR : Mn.EXPECT_PLURAL_ARGUMENT_SELECTOR, Rr(this.clonePosition(), this.clonePosition())) : this.requiresOtherClause && !o ? this.error(Mn
              .MISSING_OTHER_CLAUSE, Rr(this.clonePosition(), this.clonePosition())) : {
              val: a,
              err: null
            }
          }, e.prototype.tryParseDecimalInteger = function(e, t) {
            var n = 1,
              r = this.clonePosition();
            this.bumpIf("+") || this.bumpIf("-") && (n = -1);
            for (var i = !1, o = 0; !this.isEOF();) {
              var a = this.char();
              if (!(a >= 48 && a <= 57)) break;
              i = !0, o = 10 * o + (a - 48), this.bump()
            }
            var s = Rr(r, this.clonePosition());
            return i ? Ur(o *= n) ? {
              val: o,
              err: null
            } : this.error(t, s) : this.error(e, s)
          }, e.prototype.offset = function() {
            return this.position.offset
          }, e.prototype.isEOF = function() {
            return this.offset() === this.message.length
          }, e.prototype.clonePosition = function() {
            return {
              offset: this.position.offset,
              line: this.position.line,
              column: this.position.column
            }
          }, e.prototype.char = function() {
            var e = this.position.offset;
            if (e >= this.message.length) throw Error("out of bound");
            var t = qr(this.message, e);
            if (void 0 === t) throw Error("Offset ".concat(e, " is at invalid UTF-16 code unit boundary"));
            return t
          }, e.prototype.error = function(e, t) {
            return {
              val: null,
              err: {
                kind: e,
                message: this.message,
                location: t
              }
            }
          }, e.prototype.bump = function() {
            if (!this.isEOF()) {
              var e = this.char();
              10 === e ? (this.position.line += 1, this.position.column = 1, this.position.offset += 1) : (this.position.column += 1, this.position.offset += e < 65536 ? 1 : 2)
            }
          }, e.prototype.bumpIf = function(e) {
            if (Xr(this.message, e, this.offset())) {
              for (var t = 0; t < e.length; t++) this.bump();
              return !0
            }
            return !1
          }, e.prototype.bumpUntil = function(e) {
            var t = this.offset(),
              n = this.message.indexOf(e, t);
            return n >= 0 ? (this.bumpTo(n), !0) : (this.bumpTo(this.message.length), !1)
          }, e.prototype.bumpTo = function(e) {
            if (this.offset() > e) throw Error("targetOffset ".concat(e, " must be greater than or equal to the current offset ").concat(this.offset()));
            for (e = Math.min(e, this.message.length);;) {
              var t = this.offset();
              if (t === e) break;
              if (t > e) throw Error("targetOffset ".concat(e, " is at invalid UTF-16 code unit boundary"));
              if (this.bump(), this.isEOF()) break
            }
          }, e.prototype.bumpSpace = function() {
            for (; !this.isEOF() && ni(this.char());) this.bump()
          }, e.prototype.peek = function() {
            if (this.isEOF()) return null;
            var e = this.char(),
              t = this.offset(),
              n = this.message.charCodeAt(t + (e >= 65536 ? 2 : 1));
            return null != n ? n : null
          }, e
        }();

        function ei(e) {
          return e >= 97 && e <= 122 || e >= 65 && e <= 90
        }

        function ti(e) {
          return 45 === e || 46 === e || e >= 48 && e <= 57 || 95 === e || e >= 97 && e <= 122 || e >= 65 && e <= 90 || 183 == e || e >= 192 && e <= 214 || e >= 216 && e <= 246 || e >= 248 && e <= 893 || e >= 895 && e <= 8191 || e >= 8204 && e <=
            8205 || e >= 8255 && e <= 8256 || e >= 8304 && e <= 8591 || e >= 11264 && e <= 12271 || e >= 12289 && e <= 55295 || e >= 63744 && e <= 64975 || e >= 65008 && e <= 65533 || e >= 65536 && e <= 983039
        }

        function ni(e) {
          return e >= 9 && e <= 13 || 32 === e || 133 === e || e >= 8206 && e <= 8207 || 8232 === e || 8233 === e
        }

        function ri(e) {
          return e >= 33 && e <= 35 || 36 === e || e >= 37 && e <= 39 || 40 === e || 41 === e || 42 === e || 43 === e || 44 === e || 45 === e || e >= 46 && e <= 47 || e >= 58 && e <= 59 || e >= 60 && e <= 62 || e >= 63 && e <= 64 || 91 === e ||
            92 === e || 93 === e || 94 === e || 96 === e || 123 === e || 124 === e || 125 === e || 126 === e || 161 === e || e >= 162 && e <= 165 || 166 === e || 167 === e || 169 === e || 171 === e || 172 === e || 174 === e || 176 === e ||
            177 === e || 182 === e || 187 === e || 191 === e || 215 === e || 247 === e || e >= 8208 && e <= 8213 || e >= 8214 && e <= 8215 || 8216 === e || 8217 === e || 8218 === e || e >= 8219 && e <= 8220 || 8221 === e || 8222 === e || 8223 ===
            e || e >= 8224 && e <= 8231 || e >= 8240 && e <= 8248 || 8249 === e || 8250 === e || e >= 8251 && e <= 8254 || e >= 8257 && e <= 8259 || 8260 === e || 8261 === e || 8262 === e || e >= 8263 && e <= 8273 || 8274 === e || 8275 === e ||
            e >= 8277 && e <= 8286 || e >= 8592 && e <= 8596 || e >= 8597 && e <= 8601 || e >= 8602 && e <= 8603 || e >= 8604 && e <= 8607 || 8608 === e || e >= 8609 && e <= 8610 || 8611 === e || e >= 8612 && e <= 8613 || 8614 === e || e >=
            8615 && e <= 8621 || 8622 === e || e >= 8623 && e <= 8653 || e >= 8654 && e <= 8655 || e >= 8656 && e <= 8657 || 8658 === e || 8659 === e || 8660 === e || e >= 8661 && e <= 8691 || e >= 8692 && e <= 8959 || e >= 8960 && e <= 8967 ||
            8968 === e || 8969 === e || 8970 === e || 8971 === e || e >= 8972 && e <= 8991 || e >= 8992 && e <= 8993 || e >= 8994 && e <= 9e3 || 9001 === e || 9002 === e || e >= 9003 && e <= 9083 || 9084 === e || e >= 9085 && e <= 9114 || e >=
            9115 && e <= 9139 || e >= 9140 && e <= 9179 || e >= 9180 && e <= 9185 || e >= 9186 && e <= 9254 || e >= 9255 && e <= 9279 || e >= 9280 && e <= 9290 || e >= 9291 && e <= 9311 || e >= 9472 && e <= 9654 || 9655 === e || e >= 9656 && e <=
            9664 || 9665 === e || e >= 9666 && e <= 9719 || e >= 9720 && e <= 9727 || e >= 9728 && e <= 9838 || 9839 === e || e >= 9840 && e <= 10087 || 10088 === e || 10089 === e || 10090 === e || 10091 === e || 10092 === e || 10093 === e ||
            10094 === e || 10095 === e || 10096 === e || 10097 === e || 10098 === e || 10099 === e || 10100 === e || 10101 === e || e >= 10132 && e <= 10175 || e >= 10176 && e <= 10180 || 10181 === e || 10182 === e || e >= 10183 && e <= 10213 ||
            10214 === e || 10215 === e || 10216 === e || 10217 === e || 10218 === e || 10219 === e || 10220 === e || 10221 === e || 10222 === e || 10223 === e || e >= 10224 && e <= 10239 || e >= 10240 && e <= 10495 || e >= 10496 && e <= 10626 ||
            10627 === e || 10628 === e || 10629 === e || 10630 === e || 10631 === e || 10632 === e || 10633 === e || 10634 === e || 10635 === e || 10636 === e || 10637 === e || 10638 === e || 10639 === e || 10640 === e || 10641 === e || 10642 ===
            e || 10643 === e || 10644 === e || 10645 === e || 10646 === e || 10647 === e || 10648 === e || e >= 10649 && e <= 10711 || 10712 === e || 10713 === e || 10714 === e || 10715 === e || e >= 10716 && e <= 10747 || 10748 === e ||
            10749 === e || e >= 10750 && e <= 11007 || e >= 11008 && e <= 11055 || e >= 11056 && e <= 11076 || e >= 11077 && e <= 11078 || e >= 11079 && e <= 11084 || e >= 11085 && e <= 11123 || e >= 11124 && e <= 11125 || e >= 11126 && e <=
            11157 || 11158 === e || e >= 11159 && e <= 11263 || e >= 11776 && e <= 11777 || 11778 === e || 11779 === e || 11780 === e || 11781 === e || e >= 11782 && e <= 11784 || 11785 === e || 11786 === e || 11787 === e || 11788 === e ||
            11789 === e || e >= 11790 && e <= 11798 || 11799 === e || e >= 11800 && e <= 11801 || 11802 === e || 11803 === e || 11804 === e || 11805 === e || e >= 11806 && e <= 11807 || 11808 === e || 11809 === e || 11810 === e || 11811 === e ||
            11812 === e || 11813 === e || 11814 === e || 11815 === e || 11816 === e || 11817 === e || e >= 11818 && e <= 11822 || 11823 === e || e >= 11824 && e <= 11833 || e >= 11834 && e <= 11835 || e >= 11836 && e <= 11839 || 11840 === e ||
            11841 === e || 11842 === e || e >= 11843 && e <= 11855 || e >= 11856 && e <= 11857 || 11858 === e || e >= 11859 && e <= 11903 || e >= 12289 && e <= 12291 || 12296 === e || 12297 === e || 12298 === e || 12299 === e || 12300 === e ||
            12301 === e || 12302 === e || 12303 === e || 12304 === e || 12305 === e || e >= 12306 && e <= 12307 || 12308 === e || 12309 === e || 12310 === e || 12311 === e || 12312 === e || 12313 === e || 12314 === e || 12315 === e || 12316 ===
            e || 12317 === e || e >= 12318 && e <= 12319 || 12320 === e || 12336 === e || 64830 === e || 64831 === e || e >= 65093 && e <= 65094
        }

        function ii(e) {
          e.forEach((function(e) {
            if (delete e.location, hr(e) || pr(e))
              for (var t in e.options) delete e.options[t].location, ii(e.options[t].value);
            else lr(e) && gr(e.style) || (cr(e) || ur(e)) && mr(e.style) ? delete e.style.location : fr(e) && ii(e.children)
          }))
        }

        function oi(e, t) {
          void 0 === t && (t = {}), t = se({
            shouldParseSkeletons: !0,
            requiresOtherClause: !0
          }, t);
          var n = new Qr(e, t).parse();
          if (n.err) {
            var r = SyntaxError(Mn[n.err.kind]);
            throw r.location = n.err.location, r.originalMessage = n.err.message, r
          }
          return (null == t ? void 0 : t.captureLocation) || ii(n.val), n.val
        }

        function ai(e, t) {
          var n = t && t.cache ? t.cache : fi,
            r = t && t.serializer ? t.serializer : hi;
          return (t && t.strategy ? t.strategy : ui)(e, {
            cache: n,
            serializer: r
          })
        }

        function si(e, t, n, r) {
          var i, o = null == (i = r) || "number" == typeof i || "boolean" == typeof i ? r : n(r),
            a = t.get(o);
          return void 0 === a && (a = e.call(this, r), t.set(o, a)), a
        }

        function li(e, t, n) {
          var r = Array.prototype.slice.call(arguments, 3),
            i = n(r),
            o = t.get(i);
          return void 0 === o && (o = e.apply(this, r), t.set(i, o)), o
        }

        function ci(e, t, n, r, i) {
          return n.bind(t, e, r, i)
        }

        function ui(e, t) {
          return ci(e, this, 1 === e.length ? si : li, t.cache.create(), t.serializer)
        }
        var hi = function() {
          return JSON.stringify(arguments)
        };

        function pi() {
          this.cache = Object.create(null)
        }
        pi.prototype.get = function(e) {
          return this.cache[e]
        }, pi.prototype.set = function(e, t) {
          this.cache[e] = t
        };
        var di, fi = {
            create: function() {
              return new pi
            }
          },
          gi = {
            variadic: function(e, t) {
              return ci(e, this, li, t.cache.create(), t.serializer)
            },
            monadic: function(e, t) {
              return ci(e, this, si, t.cache.create(), t.serializer)
            }
          };
        ! function(e) {
          e.MISSING_VALUE = "MISSING_VALUE", e.INVALID_VALUE = "INVALID_VALUE", e.MISSING_INTL_API = "MISSING_INTL_API"
        }(di || (di = {}));
        var mi, vi = function(e) {
            function t(t, n, r) {
              var i = e.call(this, t) || this;
              return i.code = n, i.originalMessage = r, i
            }
            return ae(t, e), t.prototype.toString = function() {
              return "[formatjs Error: ".concat(this.code, "] ").concat(this.message)
            }, t
          }(Error),
          _i = function(e) {
            function t(t, n, r, i) {
              return e.call(this, 'Invalid values for "'.concat(t, '": "').concat(n, '". Options are "').concat(Object.keys(r).join('", "'), '"'), di.INVALID_VALUE, i) || this
            }
            return ae(t, e), t
          }(vi),
          bi = function(e) {
            function t(t, n, r) {
              return e.call(this, 'Value for "'.concat(t, '" must be of type ').concat(n), di.INVALID_VALUE, r) || this
            }
            return ae(t, e), t
          }(vi),
          yi = function(e) {
            function t(t, n) {
              return e.call(this, 'The intl string context variable "'.concat(t, '" was not provided to the string "').concat(n, '"'), di.MISSING_VALUE, n) || this
            }
            return ae(t, e), t
          }(vi);

        function wi(e) {
          return "function" == typeof e
        }

        function xi(e, t, n, r, i, o, a) {
          if (1 === e.length && ar(e[0])) return [{
            type: mi.literal,
            value: e[0].value
          }];
          for (var s = [], l = 0, c = e; l < c.length; l++) {
            var u = c[l];
            if (ar(u)) s.push({
              type: mi.literal,
              value: u.value
            });
            else if (dr(u)) "number" == typeof o && s.push({
              type: mi.literal,
              value: n.getNumberFormat(t).format(o)
            });
            else {
              var h = u.value;
              if (!i || !(h in i)) throw new yi(h, a);
              var p = i[h];
              if (sr(u)) p && "string" != typeof p && "number" != typeof p || (p = "string" == typeof p || "number" == typeof p ? String(p) : ""), s.push({
                type: "string" == typeof p ? mi.literal : mi.object,
                value: p
              });
              else if (cr(u)) {
                var d = "string" == typeof u.style ? r.date[u.style] : mr(u.style) ? u.style.parsedOptions : void 0;
                s.push({
                  type: mi.literal,
                  value: n.getDateTimeFormat(t, d).format(p)
                })
              } else if (ur(u)) {
                d = "string" == typeof u.style ? r.time[u.style] : mr(u.style) ? u.style.parsedOptions : r.time.medium;
                s.push({
                  type: mi.literal,
                  value: n.getDateTimeFormat(t, d).format(p)
                })
              } else if (lr(u)) {
                (d = "string" == typeof u.style ? r.number[u.style] : gr(u.style) ? u.style.parsedOptions : void 0) && d.scale && (p *= d.scale || 1), s.push({
                  type: mi.literal,
                  value: n.getNumberFormat(t, d).format(p)
                })
              } else {
                if (fr(u)) {
                  var f = u.children,
                    g = u.value,
                    m = i[g];
                  if (!wi(m)) throw new bi(g, "function", a);
                  var v = m(xi(f, t, n, r, i, o).map((function(e) {
                    return e.value
                  })));
                  Array.isArray(v) || (v = [v]), s.push.apply(s, v.map((function(e) {
                    return {
                      type: "string" == typeof e ? mi.literal : mi.object,
                      value: e
                    }
                  })))
                }
                if (hr(u)) {
                  if (!(_ = u.options[p] || u.options.other)) throw new _i(u.value, p, Object.keys(u.options), a);
                  s.push.apply(s, xi(_.value, t, n, r, i))
                } else if (pr(u)) {
                  var _;
                  if (!(_ = u.options["=".concat(p)])) {
                    if (!Intl.PluralRules) throw new vi('Intl.PluralRules is not available in this environment.\nTry polyfilling it using "@formatjs/intl-pluralrules"\n', di.MISSING_INTL_API, a);
                    var b = n.getPluralRules(t, {
                      type: u.pluralType
                    }).select(p - (u.offset || 0));
                    _ = u.options[b] || u.options.other
                  }
                  if (!_) throw new _i(u.value, p, Object.keys(u.options), a);
                  s.push.apply(s, xi(_.value, t, n, r, i, p - (u.offset || 0)))
                } else;
              }
            }
          }
          return function(e) {
            return e.length < 2 ? e : e.reduce((function(e, t) {
              var n = e[e.length - 1];
              return n && n.type === mi.literal && t.type === mi.literal ? n.value += t.value : e.push(t), e
            }), [])
          }(s)
        }

        function ki(e, t) {
          return t ? Object.keys(e).reduce((function(n, r) {
            var i, o;
            return n[r] = (i = e[r], (o = t[r]) ? se(se(se({}, i || {}), o || {}), Object.keys(i).reduce((function(e, t) {
              return e[t] = se(se({}, i[t]), o[t] || {}), e
            }), {})) : i), n
          }), se({}, e)) : e
        }

        function Ci(e) {
          return {
            create: function() {
              return {
                get: function(t) {
                  return e[t]
                },
                set: function(t, n) {
                  e[t] = n
                }
              }
            }
          }
        }! function(e) {
          e[e.literal = 0] = "literal", e[e.object = 1] = "object"
        }(mi || (mi = {}));
        var Si, Ei = function() {
          function e(t, n, r, i) {
            void 0 === n && (n = e.defaultLocale);
            var o, a = this;
            if (this.formatterCache = {
                number: {},
                dateTime: {},
                pluralRules: {}
              }, this.format = function(e) {
                var t = a.formatToParts(e);
                if (1 === t.length) return t[0].value;
                var n = t.reduce((function(e, t) {
                  return e.length && t.type === mi.literal && "string" == typeof e[e.length - 1] ? e[e.length - 1] += t.value : e.push(t.value), e
                }), []);
                return n.length <= 1 ? n[0] || "" : n
              }, this.formatToParts = function(e) {
                return xi(a.ast, a.locales, a.formatters, a.formats, e, void 0, a.message)
              }, this.resolvedOptions = function() {
                var e;
                return {
                  locale: (null === (e = a.resolvedLocale) || void 0 === e ? void 0 : e.toString()) || Intl.NumberFormat.supportedLocalesOf(a.locales)[0]
                }
              }, this.getAst = function() {
                return a.ast
              }, this.locales = n, this.resolvedLocale = e.resolveLocale(n), "string" == typeof t) {
              if (this.message = t, !e.__parse) throw new TypeError("IntlMessageFormat.__parse must be set to process `message` of type `string`");
              var s = le(i || {}, ["formatters"]);
              this.ast = e.__parse(t, se(se({}, s), {
                locale: this.resolvedLocale
              }))
            } else this.ast = t;
            if (!Array.isArray(this.ast)) throw new TypeError("A message must be provided as a String or AST.");
            this.formats = ki(e.formats, r), this.formatters = i && i.formatters || (void 0 === (o = this.formatterCache) && (o = {
              number: {},
              dateTime: {},
              pluralRules: {}
            }), {
              getNumberFormat: ai((function() {
                for (var e, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];
                return new((e = Intl.NumberFormat).bind.apply(e, pe([void 0], t, !1)))
              }), {
                cache: Ci(o.number),
                strategy: gi.variadic
              }),
              getDateTimeFormat: ai((function() {
                for (var e, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];
                return new((e = Intl.DateTimeFormat).bind.apply(e, pe([void 0], t, !1)))
              }), {
                cache: Ci(o.dateTime),
                strategy: gi.variadic
              }),
              getPluralRules: ai((function() {
                for (var e, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];
                return new((e = Intl.PluralRules).bind.apply(e, pe([void 0], t, !1)))
              }), {
                cache: Ci(o.pluralRules),
                strategy: gi.variadic
              })
            })
          }
          return Object.defineProperty(e, "defaultLocale", {
            get: function() {
              return e.memoizedDefaultLocale || (e.memoizedDefaultLocale = (new Intl.NumberFormat).resolvedOptions().locale), e.memoizedDefaultLocale
            },
            enumerable: !1,
            configurable: !0
          }), e.memoizedDefaultLocale = null, e.resolveLocale = function(e) {
            if (void 0 !== Intl.Locale) {
              var t = Intl.NumberFormat.supportedLocalesOf(e);
              return t.length > 0 ? new Intl.Locale(t[0]) : new Intl.Locale("string" == typeof e ? e : e[0])
            }
          }, e.__parse = oi, e.formats = {
            number: {
              integer: {
                maximumFractionDigits: 0
              },
              currency: {
                style: "currency"
              },
              percent: {
                style: "percent"
              }
            },
            date: {
              short: {
                month: "numeric",
                day: "numeric",
                year: "2-digit"
              },
              medium: {
                month: "short",
                day: "numeric",
                year: "numeric"
              },
              long: {
                month: "long",
                day: "numeric",
                year: "numeric"
              },
              full: {
                weekday: "long",
                month: "long",
                day: "numeric",
                year: "numeric"
              }
            },
            time: {
              short: {
                hour: "numeric",
                minute: "numeric"
              },
              medium: {
                hour: "numeric",
                minute: "numeric",
                second: "numeric"
              },
              long: {
                hour: "numeric",
                minute: "numeric",
                second: "numeric",
                timeZoneName: "short"
              },
              full: {
                hour: "numeric",
                minute: "numeric",
                second: "numeric",
                timeZoneName: "short"
              }
            }
          }, e
        }();
        ! function(e) {
          e.FORMAT_ERROR = "FORMAT_ERROR", e.UNSUPPORTED_FORMATTER = "UNSUPPORTED_FORMATTER", e.INVALID_CONFIG = "INVALID_CONFIG", e.MISSING_DATA = "MISSING_DATA", e.MISSING_TRANSLATION = "MISSING_TRANSLATION"
        }(Si || (Si = {}));
        var Ti = function(e) {
            function t(n, r, i) {
              var o = this,
                a = i ? i instanceof Error ? i : new Error(String(i)) : void 0;
              return (o = e.call(this, "[@formatjs/intl Error ".concat(n, "] ").concat(r, "\n").concat(a ? "\n".concat(a.message, "\n").concat(a.stack) : "")) || this).code = n, "function" == typeof Error.captureStackTrace && Error
                .captureStackTrace(o, t), o
            }
            return ae(t, e), t
          }(Error),
          Oi = function(e) {
            function t(t, n) {
              return e.call(this, Si.UNSUPPORTED_FORMATTER, t, n) || this
            }
            return ae(t, e), t
          }(Ti),
          Ai = function(e) {
            function t(t, n) {
              return e.call(this, Si.INVALID_CONFIG, t, n) || this
            }
            return ae(t, e), t
          }(Ti),
          Pi = function(e) {
            function t(t, n) {
              return e.call(this, Si.MISSING_DATA, t, n) || this
            }
            return ae(t, e), t
          }(Ti),
          Mi = function(e) {
            function t(t, n, r) {
              return e.call(this, Si.FORMAT_ERROR, "".concat(t, "\nLocale: ").concat(n, "\n"), r) || this
            }
            return ae(t, e), t
          }(Ti),
          Di = function(e) {
            function t(t, n, r, i) {
              var o = e.call(this, "".concat(t, "\nMessageID: ").concat(null == r ? void 0 : r.id, "\nDefault Message: ").concat(null == r ? void 0 : r.defaultMessage, "\nDescription: ").concat(null == r ? void 0 : r.description, "\n"), n, i) ||
                this;
              return o.descriptor = r, o
            }
            return ae(t, e), t
          }(Mi),
          Ii = function(e) {
            function t(t, n) {
              var r = e.call(this, Si.MISSING_TRANSLATION, 'Missing message: "'.concat(t.id, '" for locale "').concat(n, '", using ').concat(t.defaultMessage ? "default message (".concat("string" == typeof t.defaultMessage ? t.defaultMessage : t
                .defaultMessage.map((function(e) {
                  var t;
                  return null !== (t = e.value) && void 0 !== t ? t : JSON.stringify(e)
                })).join(), ")") : "id", " as fallback.")) || this;
              return r.descriptor = t, r
            }
            return ae(t, e), t
          }(Ti);

        function Ni(e, t, n) {
          return void 0 === n && (n = {}), t.reduce((function(t, r) {
            return r in e ? t[r] = e[r] : r in n && (t[r] = n[r]), t
          }), {})
        }
        var Ri = {
          formats: {},
          messages: {},
          timeZone: void 0,
          defaultLocale: "en",
          defaultFormats: {},
          fallbackOnEmptyString: !0,
          onError: function(e) {},
          onWarn: function(e) {}
        };

        function ji(e) {
          return {
            create: function() {
              return {
                get: function(t) {
                  return e[t]
                },
                set: function(t, n) {
                  e[t] = n
                }
              }
            }
          }
        }

        function Li(e, t, n, r) {
          var i, o = e && e[t];
          if (o && (i = o[n]), i) return i;
          r(new Oi("No ".concat(t, " format named: ").concat(n)))
        }

        function Fi(e, t) {
          return Object.keys(e).reduce((function(n, r) {
            return n[r] = se({
              timeZone: t
            }, e[r]), n
          }), {})
        }

        function Bi(e, t) {
          return Object.keys(se(se({}, e), t)).reduce((function(n, r) {
            return n[r] = se(se({}, e[r] || {}), t[r] || {}), n
          }), {})
        }

        function zi(e, t) {
          if (!t) return e;
          var n = Ei.formats;
          return se(se(se({}, n), e), {
            date: Bi(Fi(n.date, t), Fi(e.date || {}, t)),
            time: Bi(Fi(n.time, t), Fi(e.time || {}, t))
          })
        }
        var Hi = function(e, t, n, r, i) {
            var o = e.locale,
              a = e.formats,
              s = e.messages,
              l = e.defaultLocale,
              c = e.defaultFormats,
              u = e.fallbackOnEmptyString,
              h = e.onError,
              p = e.timeZone,
              d = e.defaultRichTextElements;
            void 0 === n && (n = {
              id: ""
            });
            var f = n.id,
              g = n.defaultMessage;
            or(!!f,
              "[@formatjs/intl] An `id` must be provided to format a message. You can either:\n1. Configure your build toolchain with [babel-plugin-formatjs](https://formatjs.io/docs/tooling/babel-plugin)\nor [@formatjs/ts-transformer](https://formatjs.io/docs/tooling/ts-transformer) OR\n2. Configure your `eslint` config to include [eslint-plugin-formatjs](https://formatjs.io/docs/tooling/linter#enforce-id)\nto autofix this issue"
              );
            var m = String(f),
              v = s && Object.prototype.hasOwnProperty.call(s, m) && s[m];
            if (Array.isArray(v) && 1 === v.length && v[0].type === Dn.literal) return v[0].value;
            if (!r && v && "string" == typeof v && !d) return v.replace(/'\{(.*?)\}'/gi, "{$1}");
            if (r = se(se({}, d), r || {}), a = zi(a, p), c = zi(c, p), !v) {
              if (!1 === u && "" === v) return v;
              if ((!g || o && o.toLowerCase() !== l.toLowerCase()) && h(new Ii(n, o)), g) try {
                return t.getMessageFormat(g, l, c, i).format(r)
              } catch (e) {
                return h(new Di('Error formatting default message for: "'.concat(m, '", rendering default message verbatim'), o, n, e)), "string" == typeof g ? g : m
              }
              return m
            }
            try {
              return t.getMessageFormat(v, o, a, se({
                formatters: t
              }, i || {})).format(r)
            } catch (e) {
              h(new Di('Error formatting message: "'.concat(m, '", using ').concat(g ? "default message" : "id", " as fallback."), o, n, e))
            }
            if (g) try {
              return t.getMessageFormat(g, l, c, i).format(r)
            } catch (e) {
              h(new Di('Error formatting the default message for: "'.concat(m, '", rendering message verbatim'), o, n, e))
            }
            return "string" == typeof v ? v : "string" == typeof g ? g : m
          },
          Ui = ["formatMatcher", "timeZone", "hour12", "weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName", "hourCycle", "dateStyle", "timeStyle", "calendar", "numberingSystem", "fractionalSecondDigits"];

        function Wi(e, t, n, r) {
          var i = e.locale,
            o = e.formats,
            a = e.onError,
            s = e.timeZone;
          void 0 === r && (r = {});
          var l = r.format,
            c = se(se({}, s && {
              timeZone: s
            }), l && Li(o, t, l, a)),
            u = Ni(r, Ui, c);
          return "time" !== t || u.hour || u.minute || u.second || u.timeStyle || u.dateStyle || (u = se(se({}, u), {
            hour: "numeric",
            minute: "numeric"
          })), n(i, u)
        }

        function Vi(e, t) {
          for (var n = [], r = 2; r < arguments.length; r++) n[r - 2] = arguments[r];
          var i = n[0],
            o = n[1],
            a = void 0 === o ? {} : o,
            s = "string" == typeof i ? new Date(i || 0) : i;
          try {
            return Wi(e, "date", t, a).format(s)
          } catch (t) {
            e.onError(new Ti(Si.FORMAT_ERROR, "Error formatting date.", t))
          }
          return String(s)
        }

        function Xi(e, t) {
          for (var n = [], r = 2; r < arguments.length; r++) n[r - 2] = arguments[r];
          var i = n[0],
            o = n[1],
            a = void 0 === o ? {} : o,
            s = "string" == typeof i ? new Date(i || 0) : i;
          try {
            return Wi(e, "time", t, a).format(s)
          } catch (t) {
            e.onError(new Ti(Si.FORMAT_ERROR, "Error formatting time.", t))
          }
          return String(s)
        }

        function Gi(e, t) {
          for (var n = [], r = 2; r < arguments.length; r++) n[r - 2] = arguments[r];
          var i = n[0],
            o = n[1],
            a = n[2],
            s = void 0 === a ? {} : a,
            l = e.timeZone,
            c = e.locale,
            u = e.onError,
            h = Ni(s, Ui, l ? {
              timeZone: l
            } : {});
          try {
            return t(c, h).formatRange(i, o)
          } catch (e) {
            u(new Ti(Si.FORMAT_ERROR, "Error formatting date time range.", e))
          }
          return String(i)
        }

        function Yi(e, t) {
          for (var n = [], r = 2; r < arguments.length; r++) n[r - 2] = arguments[r];
          var i = n[0],
            o = n[1],
            a = void 0 === o ? {} : o,
            s = "string" == typeof i ? new Date(i || 0) : i;
          try {
            return Wi(e, "date", t, a).formatToParts(s)
          } catch (t) {
            e.onError(new Ti(Si.FORMAT_ERROR, "Error formatting date.", t))
          }
          return []
        }

        function qi(e, t) {
          for (var n = [], r = 2; r < arguments.length; r++) n[r - 2] = arguments[r];
          var i = n[0],
            o = n[1],
            a = void 0 === o ? {} : o,
            s = "string" == typeof i ? new Date(i || 0) : i;
          try {
            return Wi(e, "time", t, a).formatToParts(s)
          } catch (t) {
            e.onError(new Ti(Si.FORMAT_ERROR, "Error formatting time.", t))
          }
          return []
        }
        var Ki = ["style", "type", "fallback", "languageDisplay"];

        function $i(e, t, n, r) {
          var i = e.locale,
            o = e.onError;
          Intl.DisplayNames || o(new vi('Intl.DisplayNames is not available in this environment.\nTry polyfilling it using "@formatjs/intl-displaynames"\n', di.MISSING_INTL_API));
          var a = Ni(r, Ki);
          try {
            return t(i, a).of(n)
          } catch (e) {
            o(new Ti(Si.FORMAT_ERROR, "Error formatting display name.", e))
          }
        }
        var Zi = ["type", "style"],
          Ji = Date.now();

        function Qi(e, t, n, r) {
          void 0 === r && (r = {});
          var i = eo(e, t, n, r).reduce((function(e, t) {
            var n = t.value;
            return "string" != typeof n ? e.push(n) : "string" == typeof e[e.length - 1] ? e[e.length - 1] += n : e.push(n), e
          }), []);
          return 1 === i.length ? i[0] : 0 === i.length ? "" : i
        }

        function eo(e, t, n, r) {
          var i = e.locale,
            o = e.onError;
          void 0 === r && (r = {}), Intl.ListFormat || o(new vi('Intl.ListFormat is not available in this environment.\nTry polyfilling it using "@formatjs/intl-listformat"\n', di.MISSING_INTL_API));
          var a = Ni(r, Zi);
          try {
            var s = {},
              l = n.map((function(e, t) {
                if ("object" == typeof e) {
                  var n = function(e) {
                    return "".concat(Ji, "_").concat(e, "_").concat(Ji)
                  }(t);
                  return s[n] = e, n
                }
                return String(e)
              }));
            return t(i, a).formatToParts(l).map((function(e) {
              return "literal" === e.type ? e : se(se({}, e), {
                value: s[e.value] || e.value
              })
            }))
          } catch (e) {
            o(new Ti(Si.FORMAT_ERROR, "Error formatting list.", e))
          }
          return n
        }
        var to = ["type"];

        function no(e, t, n, r) {
          var i = e.locale,
            o = e.onError;
          void 0 === r && (r = {}), Intl.PluralRules || o(new vi('Intl.PluralRules is not available in this environment.\nTry polyfilling it using "@formatjs/intl-pluralrules"\n', di.MISSING_INTL_API));
          var a = Ni(r, to);
          try {
            return t(i, a).select(n)
          } catch (e) {
            o(new Mi("Error formatting plural.", i, e))
          }
          return "other"
        }
        var ro = ["numeric", "style"];

        function io(e, t, n, r, i) {
          void 0 === i && (i = {}), r || (r = "second"), Intl.RelativeTimeFormat || e.onError(new vi('Intl.RelativeTimeFormat is not available in this environment.\nTry polyfilling it using "@formatjs/intl-relativetimeformat"\n', di
            .MISSING_INTL_API));
          try {
            return function(e, t, n) {
              var r = e.locale,
                i = e.formats,
                o = e.onError;
              void 0 === n && (n = {});
              var a = n.format,
                s = !!a && Li(i, "relative", a, o) || {};
              return t(r, Ni(n, ro, s))
            }(e, t, i).format(n, r)
          } catch (t) {
            e.onError(new Mi("Error formatting relative time.", e.locale, t))
          }
          return String(n)
        }
        var oo = ["style", "currency", "currencyDisplay", "unit", "unitDisplay", "useGrouping", "minimumIntegerDigits", "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits", "compactDisplay",
          "currencyDisplay", "currencySign", "notation", "signDisplay", "unit", "unitDisplay", "numberingSystem"
        ];

        function ao(e, t, n) {
          var r = e.locale,
            i = e.formats,
            o = e.onError;
          void 0 === n && (n = {});
          var a = n.format,
            s = a && Li(i, "number", a, o) || {};
          return t(r, Ni(n, oo, s))
        }

        function so(e, t, n, r) {
          void 0 === r && (r = {});
          try {
            return ao(e, t, r).format(n)
          } catch (t) {
            e.onError(new Ti(Si.FORMAT_ERROR, "Error formatting number.", t))
          }
          return String(n)
        }

        function lo(e, t, n, r) {
          void 0 === r && (r = {});
          try {
            return ao(e, t, r).formatToParts(n)
          } catch (t) {
            e.onError(new Ti(Si.FORMAT_ERROR, "Error formatting number.", t))
          }
          return []
        }

        function co(e) {
          var t;
          e.onWarn && e.defaultRichTextElements && "string" == typeof((t = e.messages || {}) ? t[Object.keys(t)[0]] : void 0) && e.onWarn(
            '[@formatjs/intl] "defaultRichTextElements" was specified but "message" was not pre-compiled. \nPlease consider using "@formatjs/cli" to pre-compile your messages for performance.\nFor more details see https://formatjs.io/docs/getting-started/message-distribution'
            )
        }

        function uo(e, t) {
          var n = function(e) {
              void 0 === e && (e = {
                dateTime: {},
                number: {},
                message: {},
                relativeTime: {},
                pluralRules: {},
                list: {},
                displayNames: {}
              });
              var t = Intl.RelativeTimeFormat,
                n = Intl.ListFormat,
                r = Intl.DisplayNames,
                i = ai((function() {
                  for (var e, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];
                  return new((e = Intl.DateTimeFormat).bind.apply(e, pe([void 0], t, !1)))
                }), {
                  cache: ji(e.dateTime),
                  strategy: gi.variadic
                }),
                o = ai((function() {
                  for (var e, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];
                  return new((e = Intl.NumberFormat).bind.apply(e, pe([void 0], t, !1)))
                }), {
                  cache: ji(e.number),
                  strategy: gi.variadic
                }),
                a = ai((function() {
                  for (var e, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n];
                  return new((e = Intl.PluralRules).bind.apply(e, pe([void 0], t, !1)))
                }), {
                  cache: ji(e.pluralRules),
                  strategy: gi.variadic
                });
              return {
                getDateTimeFormat: i,
                getNumberFormat: o,
                getMessageFormat: ai((function(e, t, n, r) {
                  return new Ei(e, t, n, se({
                    formatters: {
                      getNumberFormat: o,
                      getDateTimeFormat: i,
                      getPluralRules: a
                    }
                  }, r || {}))
                }), {
                  cache: ji(e.message),
                  strategy: gi.variadic
                }),
                getRelativeTimeFormat: ai((function() {
                  for (var e = [], n = 0; n < arguments.length; n++) e[n] = arguments[n];
                  return new(t.bind.apply(t, pe([void 0], e, !1)))
                }), {
                  cache: ji(e.relativeTime),
                  strategy: gi.variadic
                }),
                getPluralRules: a,
                getListFormat: ai((function() {
                  for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
                  return new(n.bind.apply(n, pe([void 0], e, !1)))
                }), {
                  cache: ji(e.list),
                  strategy: gi.variadic
                }),
                getDisplayNames: ai((function() {
                  for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t];
                  return new(r.bind.apply(r, pe([void 0], e, !1)))
                }), {
                  cache: ji(e.displayNames),
                  strategy: gi.variadic
                })
              }
            }(t),
            r = se(se({}, Ri), e),
            i = r.locale,
            o = r.defaultLocale,
            a = r.onError;
          return i ? !Intl.NumberFormat.supportedLocalesOf(i).length && a ? a(new Pi('Missing locale data for locale: "'.concat(i, '" in Intl.NumberFormat. Using default locale: "').concat(o,
            '" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details'))) : !Intl.DateTimeFormat.supportedLocalesOf(i).length && a && a(new Pi('Missing locale data for locale: "'.concat(i,
            '" in Intl.DateTimeFormat. Using default locale: "').concat(o, '" as fallback. See https://formatjs.io/docs/react-intl#runtime-requirements for more details'))) : (a && a(new Ai('"locale" was not configured, using "'.concat(o,
            '" as fallback. See https://formatjs.io/docs/react-intl/api#intlshape for more details'))), r.locale = r.defaultLocale || "en"), co(r), se(se({}, r), {
            formatters: n,
            formatNumber: so.bind(null, r, n.getNumberFormat),
            formatNumberToParts: lo.bind(null, r, n.getNumberFormat),
            formatRelativeTime: io.bind(null, r, n.getRelativeTimeFormat),
            formatDate: Vi.bind(null, r, n.getDateTimeFormat),
            formatDateToParts: Yi.bind(null, r, n.getDateTimeFormat),
            formatTime: Xi.bind(null, r, n.getDateTimeFormat),
            formatDateTimeRange: Gi.bind(null, r, n.getDateTimeFormat),
            formatTimeToParts: qi.bind(null, r, n.getDateTimeFormat),
            formatPlural: no.bind(null, r, n.getPluralRules),
            formatMessage: Hi.bind(null, r, n),
            $t: Hi.bind(null, r, n),
            formatList: Qi.bind(null, r, n.getListFormat),
            formatListToParts: eo.bind(null, r, n.getListFormat),
            formatDisplayName: $i.bind(null, r, n.getDisplayNames)
          })
        }

        function ho(e) {
          or(e, "[React Intl] Could not find required `intl` object. <IntlProvider> needs to exist in the component ancestry.")
        }
        var po = se(se({}, Ri), {
          textComponent: Pe
        });
        var fo = Qe(null),
          go = fo.Provider,
          mo = fo;

        function vo() {
          var e = wt(mo);
          return ho(e), e
        }

        function _o(e) {
          return {
            locale: e.locale,
            timeZone: e.timeZone,
            fallbackOnEmptyString: e.fallbackOnEmptyString,
            formats: e.formats,
            textComponent: e.textComponent,
            messages: e.messages,
            defaultLocale: e.defaultLocale,
            defaultFormats: e.defaultFormats,
            onError: e.onError,
            onWarn: e.onWarn,
            wrapRichTextChunksInFragment: e.wrapRichTextChunksInFragment,
            defaultRichTextElements: e.defaultRichTextElements
          }
        }

        function bo(e) {
          return e ? Object.keys(e).reduce((function(t, n) {
            var r, i = e[n];
            return t[n] = wi(i) ? (r = i, function(e) {
              return r(zt.toArray(e))
            }) : i, t
          }), {}) : e
        }
        var yo = function(e, t, n, r) {
            for (var i = [], o = 4; o < arguments.length; o++) i[o - 4] = arguments[o];
            var a = bo(r),
              s = Hi.apply(void 0, pe([e, t, n, a], i, !1));
            return Array.isArray(s) ? zt.toArray(s) : s
          },
          wo = function(e, t) {
            var n = e.defaultRichTextElements,
              r = le(e, ["defaultRichTextElements"]),
              i = bo(n),
              o = uo(se(se(se({}, po), r), {
                defaultRichTextElements: i
              }), t),
              a = {
                locale: o.locale,
                timeZone: o.timeZone,
                fallbackOnEmptyString: o.fallbackOnEmptyString,
                formats: o.formats,
                defaultLocale: o.defaultLocale,
                defaultFormats: o.defaultFormats,
                messages: o.messages,
                onError: o.onError,
                defaultRichTextElements: i
              };
            return se(se({}, o), {
              formatMessage: yo.bind(null, a, o.formatters),
              $t: yo.bind(null, a, o.formatters)
            })
          },
          xo = function(e) {
            function t() {
              var t = null !== e && e.apply(this, arguments) || this;
              return t.cache = {
                dateTime: {},
                number: {},
                message: {},
                relativeTime: {},
                pluralRules: {},
                list: {},
                displayNames: {}
              }, t.state = {
                cache: t.cache,
                intl: wo(_o(t.props), t.cache),
                prevConfig: _o(t.props)
              }, t
            }
            return ae(t, e), t.getDerivedStateFromProps = function(e, t) {
              var n = t.prevConfig,
                r = t.cache,
                i = _o(e);
              return function(e, t) {
                if (e === t) return !0;
                if (!e || !t) return !1;
                var n = Object.keys(e),
                  r = Object.keys(t),
                  i = n.length;
                if (r.length !== i) return !1;
                for (var o = 0; o < i; o++) {
                  var a = n[o];
                  if (e[a] !== t[a] || !Object.prototype.hasOwnProperty.call(t, a)) return !1
                }
                return !0
              }(n, i) ? null : {
                intl: wo(i, r),
                prevConfig: i
              }
            }, t.prototype.render = function() {
              return ho(this.state.intl), Te(go, {
                value: this.state.intl
              }, this.props.children)
            }, t.displayName = "IntlProvider", t.defaultProps = po, t
          }(Nt),
          ko = xo;
        var Co = function(e) {
            var t = typeof e;
            return null != e && ("object" == t || "function" == t)
          },
          So = "object" == typeof W && W && W.Object === Object && W,
          Eo = "object" == typeof self && self && self.Object === Object && self,
          To = So || Eo || Function("return this")(),
          Oo = To,
          Ao = function() {
            return Oo.Date.now()
          },
          Po = /\s/;
        var Mo = function(e) {
            for (var t = e.length; t-- && Po.test(e.charAt(t)););
            return t
          },
          Do = Mo,
          Io = /^\s+/;
        var No = function(e) {
            return e ? e.slice(0, Do(e) + 1).replace(Io, "") : e
          },
          Ro = To.Symbol,
          jo = Ro,
          Lo = Object.prototype,
          Fo = Lo.hasOwnProperty,
          Bo = Lo.toString,
          zo = jo ? jo.toStringTag : void 0;
        var Ho = function(e) {
            var t = Fo.call(e, zo),
              n = e[zo];
            try {
              e[zo] = void 0;
              var r = !0
            } catch (e) {}
            var i = Bo.call(e);
            return r && (t ? e[zo] = n : delete e[zo]), i
          },
          Uo = Object.prototype.toString;
        var Wo = Ho,
          Vo = function(e) {
            return Uo.call(e)
          },
          Xo = Ro ? Ro.toStringTag : void 0;
        var Go = function(e) {
            return null == e ? void 0 === e ? "[object Undefined]" : "[object Null]" : Xo && Xo in Object(e) ? Wo(e) : Vo(e)
          },
          Yo = function(e) {
            return null != e && "object" == typeof e
          };
        var qo = No,
          Ko = Co,
          $o = function(e) {
            return "symbol" == typeof e || Yo(e) && "[object Symbol]" == Go(e)
          },
          Zo = /^[-+]0x[0-9a-f]+$/i,
          Jo = /^0b[01]+$/i,
          Qo = /^0o[0-7]+$/i,
          ea = parseInt;
        var ta = Co,
          na = Ao,
          ra = function(e) {
            if ("number" == typeof e) return e;
            if ($o(e)) return NaN;
            if (Ko(e)) {
              var t = "function" == typeof e.valueOf ? e.valueOf() : e;
              e = Ko(t) ? t + "" : t
            }
            if ("string" != typeof e) return 0 === e ? e : +e;
            e = qo(e);
            var n = Jo.test(e);
            return n || Qo.test(e) ? ea(e.slice(2), n ? 2 : 8) : Zo.test(e) ? NaN : +e
          },
          ia = Math.max,
          oa = Math.min;
        var aa = function(e, t, n) {
            var r, i, o, a, s, l, c = 0,
              u = !1,
              h = !1,
              p = !0;
            if ("function" != typeof e) throw new TypeError("Expected a function");

            function d(t) {
              var n = r,
                o = i;
              return r = i = void 0, c = t, a = e.apply(o, n)
            }

            function f(e) {
              var n = e - l;
              return void 0 === l || n >= t || n < 0 || h && e - c >= o
            }

            function g() {
              var e = na();
              if (f(e)) return m(e);
              s = setTimeout(g, function(e) {
                var n = t - (e - l);
                return h ? oa(n, o - (e - c)) : n
              }(e))
            }

            function m(e) {
              return s = void 0, p && r ? d(e) : (r = i = void 0, a)
            }

            function v() {
              var e = na(),
                n = f(e);
              if (r = arguments, i = this, l = e, n) {
                if (void 0 === s) return function(e) {
                  return c = e, s = setTimeout(g, t), u ? d(e) : a
                }(l);
                if (h) return clearTimeout(s), s = setTimeout(g, t), d(l)
              }
              return void 0 === s && (s = setTimeout(g, t)), a
            }
            return t = ra(t) || 0, ta(n) && (u = !!n.leading, o = (h = "maxWait" in n) ? ia(ra(n.maxWait) || 0, t) : o, p = "trailing" in n ? !!n.trailing : p), v.cancel = function() {
              void 0 !== s && clearTimeout(s), c = 0, r = l = i = s = void 0
            }, v.flush = function() {
              return void 0 === s ? a : m(na())
            }, v
          },
          sa = aa,
          la = function() {
            for (var e, t, n, r = arguments.length, i = new Array(r), o = 0; o < r; o++) i[o] = arguments[o];
            return null === (e = window) || void 0 === e || null === (t = e.sa) || void 0 === t || null === (n = t.track) || void 0 === n ? void 0 : n.call(t, ...i)
          },
          ca = Date.now().toString(),
          ua = sa((() => {
            if (window.sizeGuideLoaded) {
              var e = new CustomEvent("refreshSizeGuide", {
                detail: {},
                bubbles: !1,
                cancelable: !1
              });
              document.dispatchEvent(e)
            }
          }), 500);
        var ha = (e, t) => {
          var n, r = null == e ? void 0 : e.conditional_setting,
            i = !1;
          r.field_values.some((e => e.field)) || (i = !0);
          var o = Object.keys(t);
          return null === (n = r.field_values) || void 0 === n || n.some((e => {
            var n;
            return !!o.includes(e.field) && ((Array.isArray(t[e.field]) ? null === (n = t[e.field]) || void 0 === n ? void 0 : n.includes(e.value_label) : t[e.field] === e.value_label) ? (i = !0, !0) : void 0)
          })), i
        };

        function pa() {
          var e, t;
          return navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) || (null === (e = document) || void 0 === e || null ===
            (t = e.documentElement) || void 0 === t ? void 0 : t.clientWidth) <= 960
        }
        var da = window.SHOP_PARAMS.finance_symbol,
          fa = function(e, t) {
            var n, r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0;
            try {
              var i, o, a, s;
              if (!ma()) return;
              var l = function(e, t) {
                  var n = ["text", "upload", "design"];
                  return e.reduce(((e, r) => {
                    var i, o;
                    return null != r && r.isHidden || null === (i = t[r.fid]) || void 0 === i || !i.length ? e : n.includes(r.type) ? e += Number(r.price) || 0 : (null == r || null === (o = r.options) || void 0 === o || o.forEach((n => {
                      ("dropdown" === r.type ? t[r.fid] === n.label : t[r.fid].includes(n.label)) && (e += Number(n.price) || 0)
                    })), e)
                  }), 0)
                }(e, t),
                c = (null === (i = window) || void 0 === i || null === (o = i.C_SETTINGS) || void 0 === o || null === (a = o.market) || void 0 === a || null === (s = a.market_price_setting) || void 0 === s ? void 0 : s.actual_rate) || 1,
                u = 1e5;
              l = (l * u * c / u).toFixed(2);
              var h = (n = Number(r) + Number(l), isNaN(n) ? "" : n.toLocaleString("en-US", {
                style: "currency",
                currency: "USD"
              }).slice(1));
              setTimeout((() => {
                var e, t = null === (e = document.querySelector("[data-track-source=add_to_cart]")) || void 0 === e ? void 0 : e.getElementsByClassName("money");
                null != t && t.length && (t[0].innerHTML = da + h, document.dispatchEvent(new Event("plugin_currency_update")))
              }), 200)
            } catch (e) {}
          },
          ga = ["Nova 2022", "Nova 2023", "Hero", "Eva", "Life Style", "Geek", "Wind", "Flash", "Farida"],
          ma = () => {
            var e, t, n = ka();
            return ga.includes(n) && !(null === (e = window) || void 0 === e || null === (t = e.appparakeet_data) || void 0 === t || !t.length)
          },
          va = function() {
            var e = d((function*(e, t, n, r, i, o) {
              var a, s, l, c, u, {
                  url: h,
                  method: p,
                  body: d
                } = e,
                f = h === xa("/api/cart") && ("POST" === p || "post" === p),
                g = h === xa("/api/checkout/order") && ("POST" === p || "post" === p);
              f && window.SHOPLAZZA.meta.page.resource_id === e.body.product_id && (e.redirect = xa("/api/product-customizer/cart/add"), i((() => {}))(), e.headers["Content-Type"].startsWith("application/json") ? (e.body.custom_properties =
                yield ya(t, n, r, o), e.body.quantity = Number(null === (s = e.body) || void 0 === s ? void 0 : s.quantity) || 0) : (e.headers["Content-Type"] = "application/json;charset=utf-8", e.body = yield _a(e, t, n, r, o)));
              !g || "buy_now" !== d["refer_info[source]"] && "buy_now" !== (null == d || null === (a = d.refer_info) || void 0 === a ? void 0 : a.source) || (e.redirect = xa("/api/product-customizer/checkout/order/create"), i((() => {}))(),
                e.headers["Content-Type"].startsWith("application/json") ? (e.body.line_items[0].custom_properties = yield ya(t, n, r, o), e.body.line_items[0].quantity = Number(null === (l = e.body) || void 0 === l || null === (c = l
                  .line_items) || void 0 === c || null === (u = c[0]) || void 0 === u ? void 0 : u.quantity) || 0) : (e.headers["Content-Type"] = "application/json;charset=utf-8", e.body = yield ba(e, t, n, r, o)));
              return e
            }));
            return function(t, n, r, i, o, a) {
              return e.apply(this, arguments)
            }
          }(),
          _a = function() {
            var e = d((function*(e, t, n, r, i) {
              return h(h({}, e.body), {}, {
                quantity: Number(e.body.quantity),
                custom_properties: yield ya(t, n, r, i)
              })
            }));
            return function(t, n, r, i, o) {
              return e.apply(this, arguments)
            }
          }(),
          ba = function() {
            var e = d((function*(e, t, n, r, i) {
              var o, a = e.body || {},
                s = function(e) {
                  var t = {};
                  for (var n in e)
                    for (var r = e[n], i = n.split(/[\[\]]/).filter(Boolean), o = t, a = 0; a < i.length; a++) {
                      var s = i[a];
                      a === i.length - 1 ? o[s] = r : (o[s] || (/\d+/.test(i[a + 1]) ? o[s] = [] : o[s] = {}), o = o[s])
                    }
                  return t
                }(a);
              (s.customer_note = a["line_items[0][note]"], s.line_items) && (s.line_items[0].properties = void 0, s.line_items[0].custom_properties = yield ya(t, n, r, i), s.line_items = null === (o = s.line_items) || void 0 === o ?
                void 0 : o.map((e => h(h({}, e), {}, {
                  quantity: Number(e.quantity) || 1
                }))));
              return s
            }));
            return function(t, n, r, i, o) {
              return e.apply(this, arguments)
            }
          }(),
          ya = function() {
            var e = d((function*(e, t, n, r) {
              var i, o, a = t.reduce(((t, n) => {
                if (null != n && n.isHidden) return t;
                if (n.options) {
                  var i = 0;
                  return n.options.forEach((r => {
                    var o;
                    ("dropdown" === n.type ? e[n.fid] === r.label : null === (o = e[n.fid]) || void 0 === o ? void 0 : o.includes(r.label)) && (i++, t.push({
                      fid: n.fid,
                      id: "swatch" === n.type ? r.fid : r.value,
                      key: n.order,
                      value: r.label
                    }))
                  })), i || t.push({
                    fid: n.fid,
                    key: n.order,
                    value: ""
                  }), t
                }
                var o;
                if ("upload" === n.type || "design" === n.type) return null !== (o = e[n.fid]) && void 0 !== o && o.length ? e[n.fid].forEach(((e, r) => {
                  t.push({
                    fid: n.fid,
                    key: "".concat(n.order, "_").concat(r + 1),
                    value: e.url || ""
                  })
                })) : t.push({
                  fid: n.fid,
                  key: "".concat(n.order, "_1"),
                  value: ""
                }), t;
                if ("text" === n.type) {
                  var a, s, l, c, u, h, p = "";
                  if (null != n && null !== (a = n.preview_setting) && void 0 !== a && a.preview_open) "black" === (p = n.preview_setting.data[0].cards[0].textColor || (null == n || null === (u = n.preview_setting) || void 0 === u ?
                    void 0 : u.selected_color) || (null == n || null === (h = n.preview_setting.text_colors) || void 0 === h ? void 0 : h[0])) && (p = "#000000");
                  var d = null != n && null !== (s = n.preview_setting) && void 0 !== s && s.preview_open && e[n.fid] ? "".concat(e[n.fid], " (").concat(r({
                      id: "font_color"
                    }), ": ").concat(p, " ").concat(r({
                      id: "font"
                    }), ": ").concat(n.preview_setting.data[0].cards[0].textFont || (null == n || null === (l = n.preview_setting) || void 0 === l ? void 0 : l.text_families[0]), " ").concat(r({
                      id: "font_size"
                    }), ": ").concat(n.preview_setting.data[0].cards[0].textSize || (null == n || null === (c = n.preview_setting) || void 0 === c ? void 0 : c.text_size), ")") : e[n.fid],
                    f = {
                      fid: n.fid,
                      key: n.order,
                      value: d || ""
                    };
                  try {
                    var g, m;
                    "date" === (null === (g = window) || void 0 === g || null === (m = g.appparakeet_custom_type) || void 0 === m ? void 0 : m[n.order]) && /(\d{4})-(\d\d)-(\d\d)/g.test(d) && (d = d.replace(/(\d{4})-(\d\d)-(\d\d)/g,
                      "$2/$3/$1"), f.value = d)
                  } catch (e) {}
                  t.push(f)
                }
                return t
              }), []);
              if (n) {
                var s = t.find((e => "design" === e.type));
                s && a.push({
                  fid: s.fid,
                  key: "".concat(s.order, "_composite_image"),
                  value: n
                })
              }
              var l = ie.getCoordinates();
              if (l && l.length > 0) {
                var c = l.map((e => {
                    var t = a.find((t => e.oid && "swatch" === e.configType ? t.fid === e.fid && t.id === e.oid : t.fid === e.fid)),
                      n = t.key,
                      r = {
                        key: n,
                        value: t.value,
                        canvasHeight: e.canvasHeight,
                        canvasWidth: e.canvasWidth,
                        fid: e.fid,
                        oid: e.oid,
                        w: e.width,
                        h: e.height,
                        x: e.left,
                        y: e.top,
                        angle: e.angle
                      };
                    return {
                      key: "_coordinate_".concat(n, "_").concat(t.value),
                      fid: e.fid,
                      oid: e.oid,
                      value: JSON.stringify(r),
                      type: "coordinate"
                    }
                  })),
                  u = {};
                c.forEach((e => u[e.fid + e.oid] = e)), c = Object.keys(u).map((e => u[e])).map((e => ({
                  key: e.key,
                  value: e.value,
                  type: e.type
                }))), a = [...a, ...c]
              }
              var h = yield ie.createImgs();
              if (null != h && h.length && (a = [...a, ...h]), null !== (i = window) && void 0 !== i && null !== (o = i.appparakeet_switch) && void 0 !== o && o.print_img) {
                var p = yield ie.createPrintImgs(t);
                null != p && p.length && (a = a.concat(...p))
              }
              return a
            }));
            return function(t, n, r, i) {
              return e.apply(this, arguments)
            }
          }(),
          wa = e => {
            try {
              var {
                url: t,
                method: n
              } = e.detail.request, r = t === xa("/api/cart") && "POST" === n, i = t === xa("/api/checkout/order") && "POST" === n;
              if (r || i) {
                var {
                  status: o
                } = e.detail.response || {};
                401 === o && setTimeout((() => {
                  window.location.reload()
                }), 1e3)
              }
            } catch (e) {}
          },
          xa = e => {
            var {
              globalizePath: t
            } = window.C_APPS_COMMON || {};
            return t ? t(e) : window.C_SETTINGS.routes.root + e
          };

        function ka() {
          var e, t, n, r, i;
          return (null === (e = window) || void 0 === e || null === (t = e.C_SETTINGS) || void 0 === t || null === (n = t.theme) || void 0 === n ? void 0 : n.merchant_theme_name) || (null === (r = window) || void 0 === r || null === (i = r
            .SHOP_PARAMS) || void 0 === i ? void 0 : i.theme_name)
        }

        function Ca(e) {
          var t = ka();
          return Array.isArray(e) ? e.includes(t) : e === t
        }
        var Sa = e => {
            if (!e) return e;
            var t = e.split("/");
            return t[t.length - 1]
          },
          Ea = e => {
            var t, n, r = "https:".concat((null === (t = window) || void 0 === t || null === (n = t.C_SETTINGS) || void 0 === n ? void 0 : n.image_domain) || "//img.staticdj.com/");
            return null == e ? void 0 : e.replace("https://cdn.shoplazza.com/", r)
          },
          Ta = ["name"],
          Oa = ["_f"],
          Aa = ["_f"],
          Pa = e => "checkbox" === e.type,
          Ma = e => e instanceof Date,
          Da = e => null == e,
          Ia = e => "object" == typeof e,
          Na = e => !Da(e) && !Array.isArray(e) && Ia(e) && !Ma(e),
          Ra = e => Na(e) && e.target ? Pa(e.target) ? e.target.checked : e.target.value : e,
          ja = (e, t) => e.has((e => e.substring(0, e.search(/\.\d+(\.|$)/)) || e)(t)),
          La = e => Array.isArray(e) ? e.filter(Boolean) : [],
          Fa = e => void 0 === e,
          Ba = (e, t, n) => {
            if (!t || !Na(e)) return n;
            var r = La(t.split(/[,[\].]+?/)).reduce(((e, t) => Da(e) ? e : e[t]), e);
            return Fa(r) || r === e ? Fa(e[t]) ? n : e[t] : r
          },
          za = {
            BLUR: "blur",
            FOCUS_OUT: "focusout",
            CHANGE: "change"
          },
          Ha = {
            onBlur: "onBlur",
            onChange: "onChange",
            onSubmit: "onSubmit",
            onTouched: "onTouched",
            all: "all"
          },
          Ua = "max",
          Wa = "min",
          Va = "maxLength",
          Xa = "minLength",
          Ga = "pattern",
          Ya = "required",
          qa = "validate",
          Ka = Nn.createContext(null),
          $a = () => Nn.useContext(Ka),
          Za = function(e, t, n) {
            var r = !(arguments.length > 3 && void 0 !== arguments[3]) || arguments[3],
              i = {
                defaultValues: t._defaultValues
              },
              o = function(o) {
                Object.defineProperty(i, o, {
                  get: () => {
                    var i = o;
                    return t._proxyFormState[i] !== Ha.all && (t._proxyFormState[i] = !r || Ha.all), n && (n[i] = !0), e[i]
                  }
                })
              };
            for (var a in e) o(a);
            return i
          },
          Ja = e => Na(e) && !Object.keys(e).length,
          Qa = (e, t, n) => {
            var r = g(e, Ta);
            return Ja(r) || Object.keys(r).length >= Object.keys(t).length || Object.keys(r).find((e => t[e] === (!n || Ha.all)))
          },
          es = e => Array.isArray(e) ? e : [e],
          ts = (e, t, n) => n && t ? e === t : !e || !t || e === t || es(e).some((e => e && (e.startsWith(t) || t.startsWith(e))));

        function ns(e) {
          var t = Nn.useRef(e);
          t.current = e, Nn.useEffect((() => {
            var n = !e.disabled && t.current.subject.subscribe({
              next: t.current.callback
            });
            return () => {
              n && n.unsubscribe()
            }
          }), [e.disabled])
        }

        function rs(e) {
          var t = $a(),
            {
              control: n = t.control,
              disabled: r,
              name: i,
              exact: o
            } = e || {},
            [a, s] = Nn.useState(n._formState),
            l = Nn.useRef(!0),
            c = Nn.useRef({
              isDirty: !1,
              dirtyFields: !1,
              touchedFields: !1,
              isValidating: !1,
              isValid: !1,
              errors: !1
            }),
            u = Nn.useRef(i);
          return u.current = i, ns({
            disabled: r,
            callback: Nn.useCallback((e => l.current && ts(u.current, e.name, o) && Qa(e, c.current) && s(h(h({}, n._formState), e))), [n, o]),
            subject: n._subjects.state
          }), Nn.useEffect((() => (l.current = !0, () => {
            l.current = !1
          })), []), Za(a, n, c.current, !1)
        }
        var is = e => "string" == typeof e,
          os = (e, t, n, r) => {
            var i = Array.isArray(e);
            return is(e) ? (r && t.watch.add(e), Ba(n, e)) : i ? e.map((e => (r && t.watch.add(e), Ba(n, e)))) : (r && (t.watchAll = !0), n)
          },
          as = e => "function" == typeof e,
          ss = e => {
            for (var t in e)
              if (as(e[t])) return !0;
            return !1
          };

        function ls(e) {
          var t = $a(),
            {
              control: n = t.control,
              name: r,
              defaultValue: i,
              disabled: o,
              exact: a
            } = e || {},
            s = Nn.useRef(r);
          s.current = r, ns({
            disabled: o,
            subject: n._subjects.watch,
            callback: Nn.useCallback((e => {
              if (ts(s.current, e.name, a)) {
                var t = os(s.current, n._names, e.values || n._formValues);
                c(Fa(s.current) || Na(t) && !ss(t) ? h({}, t) : Array.isArray(t) ? [...t] : Fa(t) ? i : t)
              }
            }), [n, a, i])
          });
          var [l, c] = Nn.useState(Fa(i) ? n._getWatch(r) : i);
          return Nn.useEffect((() => n._removeUnmounted())), l
        }

        function cs(e) {
          var t = $a(),
            {
              name: n,
              control: r = t.control,
              shouldUnregister: i
            } = e,
            o = ja(r._names.array, n),
            a = ls({
              control: r,
              name: n,
              defaultValue: Ba(r._formValues, n, Ba(r._defaultValues, n, e.defaultValue)),
              exact: !0
            }),
            s = rs({
              control: r,
              name: n
            }),
            l = Nn.useRef(r.register(n, h(h({}, e.rules), {}, {
              value: a
            })));
          return Nn.useEffect((() => {
            var e = (e, t) => {
              var n = Ba(r._fields, e);
              n && (n._f.mount = t)
            };
            return e(n, !0), () => {
              var t = r._options.shouldUnregister || i;
              (o ? t && !r._stateFlags.action : t) ? r.unregister(n): e(n, !1)
            }
          }), [n, r, o, i]), {
            field: {
              name: n,
              value: a,
              onChange: Nn.useCallback((e => l.current.onChange({
                target: {
                  value: Ra(e),
                  name: n
                },
                type: za.CHANGE
              })), [n]),
              onBlur: Nn.useCallback((() => l.current.onBlur({
                target: {
                  value: Ba(r._formValues, n),
                  name: n
                },
                type: za.BLUR
              })), [n, r]),
              ref: e => {
                var t = Ba(r._fields, n);
                t && e && (t._f.ref = {
                  focus: () => e.focus(),
                  select: () => e.select(),
                  setCustomValidity: t => e.setCustomValidity(t),
                  reportValidity: () => e.reportValidity()
                })
              }
            },
            formState: s,
            fieldState: Object.defineProperties({}, {
              invalid: {
                enumerable: !0,
                get: () => !!Ba(s.errors, n)
              },
              isDirty: {
                enumerable: !0,
                get: () => !!Ba(s.dirtyFields, n)
              },
              isTouched: {
                enumerable: !0,
                get: () => !!Ba(s.touchedFields, n)
              },
              error: {
                enumerable: !0,
                get: () => Ba(s.errors, n)
              }
            })
          }
        }
        var us = (e, t, n, r, i) => t ? h(h({}, n[e]), {}, {
            types: h(h({}, n[e] && n[e].types ? n[e].types : {}), {}, {
              [r]: i || !0
            })
          }) : {},
          hs = e => /^\w*$/.test(e),
          ps = e => La(e.replace(/["|']|\]/g, "").split(/\.|\[/));

        function ds(e, t, n) {
          for (var r = -1, i = hs(t) ? [t] : ps(t), o = i.length, a = o - 1; ++r < o;) {
            var s = i[r],
              l = n;
            if (r !== a) {
              var c = e[s];
              l = Na(c) || Array.isArray(c) ? c : isNaN(+i[r + 1]) ? {} : []
            }
            e[s] = l, e = e[s]
          }
          return e
        }
        var fs = (e, t, n) => {
            for (var r of n || Object.keys(e)) {
              var i = Ba(e, r);
              if (i) {
                var {
                  _f: o
                } = i, a = g(i, Oa);
                if (o && t(o.name)) {
                  if (o.ref.focus) {
                    o.ref.focus();
                    break
                  }
                  if (o.refs && o.refs[0].focus) {
                    o.refs[0].focus();
                    break
                  }
                } else Na(a) && fs(a, t)
              }
            }
          },
          gs = (e, t, n) => !n && (t.watchAll || t.watch.has(e) || [...t.watch].some((t => e.startsWith(t) && /^\.\w+/.test(e.slice(t.length))))),
          ms = (e, t, n) => {
            var r = La(Ba(e, n));
            return ds(r, "root", t[n]), ds(e, n, r), e
          },
          vs = e => "boolean" == typeof e,
          _s = e => "file" === e.type,
          bs = e => is(e) || Nn.isValidElement(e),
          ys = e => "radio" === e.type,
          ws = e => e instanceof RegExp,
          xs = {
            value: !1,
            isValid: !1
          },
          ks = {
            value: !0,
            isValid: !0
          },
          Cs = e => {
            if (Array.isArray(e)) {
              if (e.length > 1) {
                var t = e.filter((e => e && e.checked && !e.disabled)).map((e => e.value));
                return {
                  value: t,
                  isValid: !!t.length
                }
              }
              return e[0].checked && !e[0].disabled ? e[0].attributes && !Fa(e[0].attributes.value) ? Fa(e[0].value) || "" === e[0].value ? ks : {
                value: e[0].value,
                isValid: !0
              } : ks : xs
            }
            return xs
          },
          Ss = {
            isValid: !1,
            value: null
          },
          Es = e => Array.isArray(e) ? e.reduce(((e, t) => t && t.checked && !t.disabled ? {
            isValid: !0,
            value: t.value
          } : e), Ss) : Ss;

        function Ts(e, t) {
          var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : "validate";
          if (bs(e) || Array.isArray(e) && e.every(bs) || vs(e) && !e) return {
            type: n,
            message: bs(e) ? e : "",
            ref: t
          }
        }
        var Os = e => Na(e) && !ws(e) ? e : {
            value: e,
            message: ""
          },
          As = function() {
            var e = d((function*(e, t, n, r, i) {
              var {
                ref: o,
                refs: a,
                required: s,
                maxLength: l,
                minLength: c,
                min: u,
                max: p,
                pattern: d,
                validate: f,
                name: g,
                valueAsNumber: m,
                mount: v,
                disabled: _
              } = e._f;
              if (!v || _) return {};
              var b = a ? a[0] : o,
                y = e => {
                  r && b.reportValidity && (b.setCustomValidity(vs(e) ? "" : e || " "), b.reportValidity())
                },
                w = {},
                x = ys(o),
                k = Pa(o),
                C = x || k,
                S = (m || _s(o)) && !o.value || "" === t || Array.isArray(t) && !t.length,
                E = us.bind(null, g, n, w),
                T = function(e, t, n) {
                  var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : Va,
                    i = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : Xa,
                    a = e ? t : n;
                  w[g] = h({
                    type: e ? r : i,
                    message: a,
                    ref: o
                  }, E(e ? r : i, a))
                };
              if (i ? !Array.isArray(t) || !t.length : s && (!C && (S || Da(t)) || vs(t) && !t || k && !Cs(a).isValid || x && !Es(a).isValid)) {
                var {
                  value: O,
                  message: A
                } = bs(s) ? {
                  value: !!s,
                  message: s
                } : Os(s);
                if (O && (w[g] = h({
                    type: Ya,
                    message: A,
                    ref: b
                  }, E(Ya, A)), !n)) return y(A), w
              }
              if (!(S || Da(u) && Da(p))) {
                var P, M, D = Os(p),
                  I = Os(u);
                if (Da(t) || isNaN(t)) {
                  var N = o.valueAsDate || new Date(t),
                    R = e => new Date((new Date).toDateString() + " " + e),
                    j = "time" == o.type,
                    L = "week" == o.type;
                  is(D.value) && t && (P = j ? R(t) > R(D.value) : L ? t > D.value : N > new Date(D.value)), is(I.value) && t && (M = j ? R(t) < R(I.value) : L ? t < I.value : N < new Date(I.value))
                } else {
                  var F = o.valueAsNumber || (t ? +t : t);
                  Da(D.value) || (P = F > D.value), Da(I.value) || (M = F < I.value)
                }
                if ((P || M) && (T(!!P, D.message, I.message, Ua, Wa), !n)) return y(w[g].message), w
              }
              if ((l || c) && !S && (is(t) || i && Array.isArray(t))) {
                var B = Os(l),
                  z = Os(c),
                  H = !Da(B.value) && t.length > B.value,
                  U = !Da(z.value) && t.length < z.value;
                if ((H || U) && (T(H, B.message, z.message), !n)) return y(w[g].message), w
              }
              if (d && !S && is(t)) {
                var {
                  value: W,
                  message: V
                } = Os(d);
                if (ws(W) && !t.match(W) && (w[g] = h({
                    type: Ga,
                    message: V,
                    ref: o
                  }, E(Ga, V)), !n)) return y(V), w
              }
              if (f)
                if (as(f)) {
                  var X = Ts(yield f(t), b);
                  if (X && (w[g] = h(h({}, X), E(qa, X.message)), !n)) return y(X.message), w
                } else if (Na(f)) {
                var G = {};
                for (var Y in f) {
                  if (!Ja(G) && !n) break;
                  var q = Ts(yield f[Y](t), b, Y);
                  q && (G = h(h({}, q), E(Y, q.message)), y(q.message), n && (w[g] = G))
                }
                if (!Ja(G) && (w[g] = h({
                    ref: b
                  }, G), !n)) return w
              }
              return y(!0), w
            }));
            return function(t, n, r, i, o) {
              return e.apply(this, arguments)
            }
          }(),
          Ps = e => {
            var t = e.constructor && e.constructor.prototype;
            return Na(t) && t.hasOwnProperty("isPrototypeOf")
          },
          Ms = "undefined" != typeof window && void 0 !== window.HTMLElement && "undefined" != typeof document;

        function Ds(e) {
          var t, n = Array.isArray(e);
          if (e instanceof Date) t = new Date(e);
          else if (e instanceof Set) t = new Set(e);
          else {
            if (Ms && (e instanceof Blob || e instanceof FileList) || !n && !Na(e)) return e;
            if (t = n ? [] : {}, Array.isArray(e) || Ps(e))
              for (var r in e) t[r] = Ds(e[r]);
            else t = e
          }
          return t
        }
        var Is = e => ({
          isOnSubmit: !e || e === Ha.onSubmit,
          isOnBlur: e === Ha.onBlur,
          isOnChange: e === Ha.onChange,
          isOnAll: e === Ha.all,
          isOnTouch: e === Ha.onTouched
        });

        function Ns(e) {
          for (var t in e)
            if (!Fa(e[t])) return !1;
          return !0
        }

        function Rs(e, t) {
          var n, r = hs(t) ? [t] : ps(t),
            i = 1 == r.length ? e : function(e, t) {
              for (var n = t.slice(0, -1).length, r = 0; r < n;) e = Fa(e) ? r++ : e[t[r++]];
              return e
            }(e, r),
            o = r[r.length - 1];
          i && delete i[o];
          for (var a = 0; a < r.slice(0, -1).length; a++) {
            var s = -1,
              l = void 0,
              c = r.slice(0, -(a + 1)),
              u = c.length - 1;
            for (a > 0 && (n = e); ++s < c.length;) {
              var h = c[s];
              l = l ? l[h] : e[h], u === s && (Na(l) && Ja(l) || Array.isArray(l) && Ns(l)) && (n ? delete n[h] : delete e[h]), n = l
            }
          }
          return e
        }

        function js() {
          var e = [];
          return {
            get observers() {
              return e
            },
            next: t => {
              for (var n of e) n.next(t)
            },
            subscribe: t => (e.push(t), {
              unsubscribe: () => {
                e = e.filter((e => e !== t))
              }
            }),
            unsubscribe: () => {
              e = []
            }
          }
        }
        var Ls = e => Da(e) || !Ia(e);

        function Fs(e, t) {
          if (Ls(e) || Ls(t)) return e === t;
          if (Ma(e) && Ma(t)) return e.getTime() === t.getTime();
          var n = Object.keys(e),
            r = Object.keys(t);
          if (n.length !== r.length) return !1;
          for (var i of n) {
            var o = e[i];
            if (!r.includes(i)) return !1;
            if ("ref" !== i) {
              var a = t[i];
              if (Ma(o) && Ma(a) || Na(o) && Na(a) || Array.isArray(o) && Array.isArray(a) ? !Fs(o, a) : o !== a) return !1
            }
          }
          return !0
        }
        var Bs = e => {
            var t = e ? e.ownerDocument : 0;
            return e instanceof(t && t.defaultView ? t.defaultView.HTMLElement : HTMLElement)
          },
          zs = e => "select-multiple" === e.type,
          Hs = e => ys(e) || Pa(e),
          Us = e => Bs(e) && e.isConnected;

        function Ws(e) {
          var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
            n = Array.isArray(e);
          if (Na(e) || n)
            for (var r in e) Array.isArray(e[r]) || Na(e[r]) && !ss(e[r]) ? (t[r] = Array.isArray(e[r]) ? [] : {}, Ws(e[r], t[r])) : Da(e[r]) || (t[r] = !0);
          return t
        }

        function Vs(e, t, n) {
          var r = Array.isArray(e);
          if (Na(e) || r)
            for (var i in e) Array.isArray(e[i]) || Na(e[i]) && !ss(e[i]) ? Fa(t) || Ls(n[i]) ? n[i] = Array.isArray(e[i]) ? Ws(e[i], []) : h({}, Ws(e[i])) : Vs(e[i], Da(t) ? {} : t[i], n[i]) : n[i] = !Fs(e[i], t[i]);
          return n
        }
        var Xs = (e, t) => Vs(e, t, Ws(t)),
          Gs = (e, t) => {
            var {
              valueAsNumber: n,
              valueAsDate: r,
              setValueAs: i
            } = t;
            return Fa(e) ? e : n ? "" === e ? NaN : e ? +e : e : r && is(e) ? new Date(e) : i ? i(e) : e
          };

        function Ys(e) {
          var t = e.ref;
          if (!(e.refs ? e.refs.every((e => e.disabled)) : t.disabled)) return _s(t) ? t.files : ys(t) ? Es(e.refs).value : zs(t) ? [...t.selectedOptions].map((e => {
            var {
              value: t
            } = e;
            return t
          })) : Pa(t) ? Cs(e.refs).value : Gs(Fa(t.value) ? e.ref.value : t.value, e)
        }
        var qs = (e, t, n, r) => {
            var i = {};
            for (var o of e) {
              var a = Ba(t, o);
              a && ds(i, o, a._f)
            }
            return {
              criteriaMode: n,
              names: [...e],
              fields: i,
              shouldUseNativeValidation: r
            }
          },
          Ks = e => Fa(e) ? void 0 : ws(e) ? e.source : Na(e) ? ws(e.value) ? e.value.source : e.value : e,
          $s = e => e.mount && (e.required || e.min || e.max || e.maxLength || e.minLength || e.pattern || e.validate);

        function Zs(e, t, n) {
          var r = Ba(e, n);
          if (r || hs(n)) return {
            error: r,
            name: n
          };
          for (var i = n.split("."); i.length;) {
            var o = i.join("."),
              a = Ba(t, o),
              s = Ba(e, o);
            if (a && !Array.isArray(a) && n !== o) return {
              name: n
            };
            if (s && s.type) return {
              name: o,
              error: s
            };
            i.pop()
          }
          return {
            name: n
          }
        }
        var Js = (e, t, n, r, i) => !i.isOnAll && (!n && i.isOnTouch ? !(t || e) : (n ? r.isOnBlur : i.isOnBlur) ? !e : !(n ? r.isOnChange : i.isOnChange) || e),
          Qs = (e, t) => !La(Ba(e, t)).length && Rs(e, t),
          el = {
            mode: Ha.onSubmit,
            reValidateMode: Ha.onChange,
            shouldFocusError: !0
          };

        function tl() {
          var e, t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
            n = h(h({}, el), t),
            r = {
              submitCount: 0,
              isDirty: !1,
              isValidating: !1,
              isSubmitted: !1,
              isSubmitting: !1,
              isSubmitSuccessful: !1,
              isValid: !1,
              touchedFields: {},
              dirtyFields: {},
              errors: {}
            },
            i = {},
            o = Ds(n.defaultValues) || {},
            a = n.shouldUnregister ? {} : Ds(o),
            s = {
              action: !1,
              mount: !1,
              watch: !1
            },
            l = {
              mount: new Set,
              unMount: new Set,
              array: new Set,
              watch: new Set
            },
            c = 0,
            u = {},
            p = {
              isDirty: !1,
              dirtyFields: !1,
              touchedFields: !1,
              isValidating: !1,
              isValid: !1,
              errors: !1
            },
            f = {
              watch: js(),
              array: js(),
              state: js()
            },
            m = Is(n.mode),
            v = Is(n.reValidateMode),
            _ = n.criteriaMode === Ha.all,
            b = function() {
              var e = d((function*(e) {
                var t = !1;
                return p.isValid && (t = n.resolver ? Ja((yield k()).errors) : yield S(i, !0), e || t === r.isValid || (r.isValid = t, f.state.next({
                  isValid: t
                }))), t
              }));
              return function(t) {
                return e.apply(this, arguments)
              }
            }(),
            y = (e, t, n, r) => {
              var l = Ba(i, e);
              if (l) {
                var c = Ba(a, e, Fa(n) ? Ba(o, e) : n);
                Fa(c) || r && r.defaultChecked || t ? ds(a, e, t ? c : Ys(l._f)) : O(e, c), s.mount && b()
              }
            },
            w = (e, t, n, i, a) => {
              var s = !1,
                l = {
                  name: e
                },
                c = Ba(r.touchedFields, e);
              if (p.isDirty) {
                var u = r.isDirty;
                r.isDirty = l.isDirty = E(), s = u !== l.isDirty
              }
              if (p.dirtyFields && (!n || i)) {
                var h = Ba(r.dirtyFields, e);
                Fs(Ba(o, e), t) ? Rs(r.dirtyFields, e) : ds(r.dirtyFields, e, !0), l.dirtyFields = r.dirtyFields, s = s || h !== Ba(r.dirtyFields, e)
              }
              return n && !c && (ds(r.touchedFields, e, n), l.touchedFields = r.touchedFields, s = s || p.touchedFields && c !== n), s && a && f.state.next(l), s ? l : {}
            },
            x = function() {
              var n = d((function*(n, i, o, a) {
                var s, l = Ba(r.errors, n),
                  d = p.isValid && r.isValid !== i;
                if (t.delayError && o ? (s = () => ((e, t) => {
                    ds(r.errors, e, t), f.state.next({
                      errors: r.errors
                    })
                  })(n, o), (e = e => {
                    clearTimeout(c), c = window.setTimeout(s, e)
                  })(t.delayError)) : (clearTimeout(c), e = null, o ? ds(r.errors, n, o) : Rs(r.errors, n)), (o ? !Fs(l, o) : l) || !Ja(a) || d) {
                  var g = h(h(h({}, a), d ? {
                    isValid: i
                  } : {}), {}, {
                    errors: r.errors,
                    name: n
                  });
                  r = h(h({}, r), g), f.state.next(g)
                }
                u[n]--, p.isValidating && !Object.values(u).some((e => e)) && (f.state.next({
                  isValidating: !1
                }), u = {})
              }));
              return function(e, t, r, i) {
                return n.apply(this, arguments)
              }
            }(),
            k = function() {
              var e = d((function*(e) {
                return n.resolver ? yield n.resolver(h({}, a), n.context, qs(e || l.mount, i, n.criteriaMode, n.shouldUseNativeValidation)): {}
              }));
              return function(t) {
                return e.apply(this, arguments)
              }
            }(),
            C = function() {
              var e = d((function*(e) {
                var {
                  errors: t
                } = yield k();
                if (e)
                  for (var n of e) {
                    var i = Ba(t, n);
                    i ? ds(r.errors, n, i) : Rs(r.errors, n)
                  } else r.errors = t;
                return t
              }));
              return function(t) {
                return e.apply(this, arguments)
              }
            }(),
            S = function() {
              var e = d((function*(e, t) {
                var i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {
                  valid: !0
                };
                for (var o in e) {
                  var s = e[o];
                  if (s) {
                    var {
                      _f: c
                    } = s, u = g(s, Aa);
                    if (c) {
                      var h = l.array.has(c.name),
                        p = yield As(s, Ba(a, c.name), _, n.shouldUseNativeValidation, h);
                      if (p[c.name] && (i.valid = !1, t)) break;
                      !t && (Ba(p, c.name) ? h ? ms(r.errors, p, c.name) : ds(r.errors, c.name, p[c.name]) : Rs(r.errors, c.name))
                    }
                    u && (yield S(u, t, i))
                  }
                }
                return i.valid
              }));
              return function(t, n) {
                return e.apply(this, arguments)
              }
            }(),
            E = (e, t) => (e && t && ds(a, e, t), !Fs(I(), o)),
            T = (e, t, n) => {
              var r = h({}, s.mount ? a : Fa(t) ? o : is(e) ? {
                [e]: t
              } : t);
              return os(e, l, r, n)
            },
            O = function(e, t) {
              var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                r = Ba(i, e),
                o = t;
              if (r) {
                var s = r._f;
                s && (!s.disabled && ds(a, e, Gs(t, s)), o = Ms && Bs(s.ref) && Da(t) ? "" : t, zs(s.ref) ? [...s.ref.options].forEach((e => e.selected = o.includes(e.value))) : s.refs ? Pa(s.ref) ? s.refs.length > 1 ? s.refs.forEach((e => (!e
                    .defaultChecked || !e.disabled) && (e.checked = Array.isArray(o) ? !!o.find((t => t === e.value)) : o === e.value))) : s.refs[0] && (s.refs[0].checked = !!o) : s.refs.forEach((e => e.checked = e.value === o)) : _s(s.ref) ? s
                  .ref.value = "" : (s.ref.value = o, s.ref.type || f.watch.next({
                    name: e
                  })))
              }(n.shouldDirty || n.shouldTouch) && w(e, o, n.shouldTouch, n.shouldDirty, !0), n.shouldValidate && D(e)
            },
            A = (e, t, n) => {
              for (var r in t) {
                var o = t[r],
                  a = "".concat(e, ".").concat(r),
                  s = Ba(i, a);
                !l.array.has(e) && Ls(o) && (!s || s._f) || Ma(o) ? O(a, o, n) : A(a, o, n)
              }
            },
            P = function(e, t) {
              var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},
                s = Ba(i, e),
                c = l.array.has(e),
                u = Ds(t);
              ds(a, e, u), c ? (f.array.next({
                name: e,
                values: a
              }), (p.isDirty || p.dirtyFields) && n.shouldDirty && (r.dirtyFields = Xs(o, a), f.state.next({
                name: e,
                dirtyFields: r.dirtyFields,
                isDirty: E(e, u)
              }))) : !s || s._f || Da(u) ? O(e, u, n) : A(e, u, n), gs(e, l) && f.state.next({}), f.watch.next({
                name: e
              })
            },
            M = function() {
              var t = d((function*(t) {
                var o = t.target,
                  s = o.name,
                  c = Ba(i, s);
                if (c) {
                  var p, d, g = o.type ? Ys(c._f) : Ra(t),
                    y = t.type === za.BLUR || t.type === za.FOCUS_OUT,
                    C = !$s(c._f) && !n.resolver && !Ba(r.errors, s) && !c._f.deps || Js(y, Ba(r.touchedFields, s), r.isSubmitted, v, m),
                    S = gs(s, l, y);
                  ds(a, s, g), y ? (c._f.onBlur && c._f.onBlur(t), e && e(0)) : c._f.onChange && c._f.onChange(t);
                  var E = w(s, g, y, !1),
                    T = !Ja(E) || S;
                  if (!y && f.watch.next({
                      name: s,
                      type: t.type
                    }), C) return T && f.state.next(h({
                    name: s
                  }, S ? {} : E));
                  if (!y && S && f.state.next({}), u[s] = (u[s], 1), f.state.next({
                      isValidating: !0
                    }), n.resolver) {
                    var {
                      errors: O
                    } = yield k([s]), A = Zs(r.errors, i, s), P = Zs(O, i, A.name || s);
                    p = P.error, s = P.name, d = Ja(O)
                  } else p = (yield As(c, Ba(a, s), _, n.shouldUseNativeValidation))[s], d = yield b(!0);
                  c._f.deps && D(c._f.deps), x(s, d, p, E)
                }
              }));
              return function(e) {
                return t.apply(this, arguments)
              }
            }(),
            D = function() {
              var e = d((function*(e) {
                var t, o, a = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                  s = es(e);
                if (f.state.next({
                    isValidating: !0
                  }), n.resolver) {
                  var c = yield C(Fa(e) ? e : s);
                  t = Ja(c), o = e ? !s.some((e => Ba(c, e))) : t
                } else e ? (o = (yield Promise.all(s.map(function() {
                  var e = d((function*(e) {
                    var t = Ba(i, e);
                    return yield S(t && t._f ? {
                      [e]: t
                    } : t)
                  }));
                  return function(t) {
                    return e.apply(this, arguments)
                  }
                }()))).every(Boolean), (o || r.isValid) && b()) : o = t = yield S(i);
                return f.state.next(h(h(h({}, !is(e) || p.isValid && t !== r.isValid ? {} : {
                  name: e
                }), n.resolver || !e ? {
                  isValid: t
                } : {}), {}, {
                  errors: r.errors,
                  isValidating: !1
                })), a.shouldFocus && !o && fs(i, (e => e && Ba(r.errors, e)), e ? s : l.mount), o
              }));
              return function(t) {
                return e.apply(this, arguments)
              }
            }(),
            I = e => {
              var t = h(h({}, o), s.mount ? a : {});
              return Fa(e) ? t : is(e) ? Ba(t, e) : e.map((e => Ba(t, e)))
            },
            N = (e, t) => ({
              invalid: !!Ba((t || r).errors, e),
              isDirty: !!Ba((t || r).dirtyFields, e),
              isTouched: !!Ba((t || r).touchedFields, e),
              error: Ba((t || r).errors, e)
            }),
            R = function(e) {
              var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
              for (var s of e ? es(e) : l.mount) l.mount.delete(s), l.array.delete(s), Ba(i, s) && (t.keepValue || (Rs(i, s), Rs(a, s)), !t.keepError && Rs(r.errors, s), !t.keepDirty && Rs(r.dirtyFields, s), !t.keepTouched && Rs(r.touchedFields,
                s), !n.shouldUnregister && !t.keepDefaultValue && Rs(o, s));
              f.watch.next({}), f.state.next(h(h({}, r), t.keepDirty ? {
                isDirty: E()
              } : {})), !t.keepIsValid && b()
            },
            j = function(e) {
              var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                r = Ba(i, e),
                c = vs(t.disabled);
              return ds(i, e, h(h({}, r || {}), {}, {
                _f: h(h({}, r && r._f ? r._f : {
                  ref: {
                    name: e
                  }
                }), {}, {
                  name: e,
                  mount: !0
                }, t)
              })), l.mount.add(e), r ? c && ds(a, e, t.disabled ? void 0 : Ba(a, e, Ys(r._f))) : y(e, !0, t.value), h(h(h({}, c ? {
                disabled: t.disabled
              } : {}), n.shouldUseNativeValidation ? {
                required: !!t.required,
                min: Ks(t.min),
                max: Ks(t.max),
                minLength: Ks(t.minLength),
                maxLength: Ks(t.maxLength),
                pattern: Ks(t.pattern)
              } : {}), {}, {
                name: e,
                onChange: M,
                onBlur: M,
                ref: a => {
                  if (a) {
                    j(e, t), r = Ba(i, e);
                    var c = Fa(a.value) && a.querySelectorAll && a.querySelectorAll("input,select,textarea")[0] || a,
                      u = Hs(c),
                      p = r._f.refs || [];
                    if (u ? p.find((e => e === c)) : c === r._f.ref) return;
                    ds(i, e, {
                      _f: h(h({}, r._f), u ? {
                        refs: [...p.filter(Us), c, ...Array.isArray(Ba(o, e)) ? [{}] : []],
                        ref: {
                          type: c.type,
                          name: e
                        }
                      } : {
                        ref: c
                      })
                    }), y(e, !1, void 0, c)
                  } else(r = Ba(i, e, {}))._f && (r._f.mount = !1), (n.shouldUnregister || t.shouldUnregister) && (!ja(l.array, e) || !s.action) && l.unMount.add(e)
                }
              })
            },
            L = () => n.shouldFocusError && fs(i, (e => e && Ba(r.errors, e)), l.mount);
          return {
            control: {
              register: j,
              unregister: R,
              getFieldState: N,
              _executeSchema: k,
              _focusError: L,
              _getWatch: T,
              _getDirty: E,
              _updateValid: b,
              _removeUnmounted: () => {
                for (var e of l.unMount) {
                  var t = Ba(i, e);
                  t && (t._f.refs ? t._f.refs.every((e => !Us(e))) : !Us(t._f.ref)) && R(e)
                }
                l.unMount = new Set
              },
              _updateFieldArray: function(e) {
                var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [],
                  n = arguments.length > 2 ? arguments[2] : void 0,
                  l = arguments.length > 3 ? arguments[3] : void 0,
                  c = !(arguments.length > 4 && void 0 !== arguments[4]) || arguments[4],
                  u = !(arguments.length > 5 && void 0 !== arguments[5]) || arguments[5];
                if (l && n) {
                  if (s.action = !0, u && Array.isArray(Ba(i, e))) {
                    var h = n(Ba(i, e), l.argA, l.argB);
                    c && ds(i, e, h)
                  }
                  if (p.errors && u && Array.isArray(Ba(r.errors, e))) {
                    var d = n(Ba(r.errors, e), l.argA, l.argB);
                    c && ds(r.errors, e, d), Qs(r.errors, e)
                  }
                  if (p.touchedFields && u && Array.isArray(Ba(r.touchedFields, e))) {
                    var g = n(Ba(r.touchedFields, e), l.argA, l.argB);
                    c && ds(r.touchedFields, e, g)
                  }
                  p.dirtyFields && (r.dirtyFields = Xs(o, a)), f.state.next({
                    isDirty: E(e, t),
                    dirtyFields: r.dirtyFields,
                    errors: r.errors,
                    isValid: r.isValid
                  })
                } else ds(a, e, t)
              },
              _getFieldArray: e => La(Ba(s.mount ? a : o, e, t.shouldUnregister ? Ba(o, e, []) : [])),
              _subjects: f,
              _proxyFormState: p,
              get _fields() {
                return i
              },
              get _formValues() {
                return a
              },
              get _stateFlags() {
                return s
              },
              set _stateFlags(e) {
                s = e
              },
              get _defaultValues() {
                return o
              },
              get _names() {
                return l
              },
              set _names(e) {
                l = e
              },
              get _formState() {
                return r
              },
              set _formState(e) {
                r = e
              },
              get _options() {
                return n
              },
              set _options(e) {
                n = h(h({}, n), e)
              }
            },
            trigger: D,
            register: j,
            handleSubmit: (e, t) => function() {
              var o = d((function*(o) {
                o && (o.preventDefault && o.preventDefault(), o.persist && o.persist());
                var s = !0,
                  l = Ds(a);
                f.state.next({
                  isSubmitting: !0
                });
                try {
                  if (n.resolver) {
                    var {
                      errors: c,
                      values: u
                    } = yield k();
                    r.errors = c, l = u
                  } else yield S(i);
                  Ja(r.errors) ? (f.state.next({
                    errors: {},
                    isSubmitting: !0
                  }), yield e(l, o)) : (t && (yield t(h({}, r.errors), o)), L())
                } catch (e) {
                  throw s = !1, e
                } finally {
                  r.isSubmitted = !0, f.state.next({
                    isSubmitted: !0,
                    isSubmitting: !1,
                    isSubmitSuccessful: Ja(r.errors) && s,
                    submitCount: r.submitCount + 1,
                    errors: r.errors
                  })
                }
              }));
              return function(e) {
                return o.apply(this, arguments)
              }
            }(),
            watch: (e, t) => as(e) ? f.watch.subscribe({
              next: n => e(T(void 0, t), n)
            }) : T(e, t, !0),
            setValue: P,
            getValues: I,
            reset: (e, n) => function(e) {
              var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                c = e || o,
                u = Ds(c),
                h = e && !Ja(e) ? u : o;
              if (n.keepDefaultValues || (o = c), !n.keepValues) {
                if (n.keepDirtyValues)
                  for (var d of l.mount) Ba(r.dirtyFields, d) ? ds(h, d, Ba(a, d)) : P(d, Ba(h, d));
                else {
                  if (Ms && Fa(e))
                    for (var g of l.mount) {
                      var m = Ba(i, g);
                      if (m && m._f) {
                        var v = Array.isArray(m._f.refs) ? m._f.refs[0] : m._f.ref;
                        try {
                          if (Bs(v)) {
                            v.closest("form").reset();
                            break
                          }
                        } catch (e) {}
                      }
                    }
                  i = {}
                }
                a = t.shouldUnregister ? n.keepDefaultValues ? Ds(o) : {} : u, f.array.next({
                  values: h
                }), f.watch.next({
                  values: h
                })
              }
              l = {
                mount: new Set,
                unMount: new Set,
                array: new Set,
                watch: new Set,
                watchAll: !1,
                focus: ""
              }, s.mount = !p.isValid || !!n.keepIsValid, s.watch = !!t.shouldUnregister, f.state.next({
                submitCount: n.keepSubmitCount ? r.submitCount : 0,
                isDirty: n.keepDirty || n.keepDirtyValues ? r.isDirty : !(!n.keepDefaultValues || Fs(e, o)),
                isSubmitted: !!n.keepIsSubmitted && r.isSubmitted,
                dirtyFields: n.keepDirty || n.keepDirtyValues ? r.dirtyFields : n.keepDefaultValues && e ? Xs(o, e) : {},
                touchedFields: n.keepTouched ? r.touchedFields : {},
                errors: n.keepErrors ? r.errors : {},
                isSubmitting: !1,
                isSubmitSuccessful: !1
              })
            }(as(e) ? e(a) : e, n),
            resetField: function(e) {
              var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
              Ba(i, e) && (Fa(t.defaultValue) ? P(e, Ba(o, e)) : (P(e, t.defaultValue), ds(o, e, t.defaultValue)), t.keepTouched || Rs(r.touchedFields, e), t.keepDirty || (Rs(r.dirtyFields, e), r.isDirty = t.defaultValue ? E(e, Ba(o, e)) :
              E()), t.keepError || (Rs(r.errors, e), p.isValid && b()), f.state.next(h({}, r)))
            },
            clearErrors: e => {
              e ? es(e).forEach((e => Rs(r.errors, e))) : r.errors = {}, f.state.next({
                errors: r.errors
              })
            },
            unregister: R,
            setError: (e, t, n) => {
              var o = (Ba(i, e, {
                _f: {}
              })._f || {}).ref;
              ds(r.errors, e, h(h({}, t), {}, {
                ref: o
              })), f.state.next({
                name: e,
                errors: r.errors,
                isValid: !1
              }), n && n.shouldFocus && o && o.focus && o.focus()
            },
            setFocus: function(e) {
              var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
                n = Ba(i, e),
                r = n && n._f;
              if (r) {
                var o = r.refs ? r.refs[0] : r.ref;
                o.focus && (o.focus(), t.shouldSelect && o.select())
              }
            },
            getFieldState: N
          }
        }
        class nl {
          constructor(e) {
            f(this, "addToCartBtnDomRaw", null), f(this, "buyNowBtnDomRaw", null), f(this, "btnWrapperRaw", null), f(this, "queryWrapperTarget", null), f(this, "disableListeners", []), f(this, "enableListeners", []), this.queryWrapperTarget = e
          }
          get productInfo() {
            return this.queryWrapperTarget || (this.queryWrapperTarget = document.querySelector(".product-info__btn") || document.querySelector(".product-info__btns") || document.querySelector("[id=product-info-atc]") || document.querySelector(
              "[quantity='#product-info-quantity']") || document.querySelector(".product-info")) || document.querySelector("#product-info-body-inner-container")
          }
          get addToCardBtnDom() {
            var e;
            return this.addToCartBtnDomRaw || (this.addToCartBtnDomRaw = null === (e = this.productInfo) || void 0 === e ? void 0 : e.querySelector("[data-click*=addToCart],[data-click*=AddToCart],[data-track-source=add_to_cart]"))
          }
          get buyNowBtnDom() {
            var e;
            return this.buyNowBtnDomRaw || (this.buyNowBtnDomRaw = null === (e = this.productInfo) || void 0 === e ? void 0 : e.querySelector("[data-click*=submit],[data-click*=Submit],[data-track-source=buy_now]"))
          }
          get btnWrapper() {
            var e;
            return this.btnWrapperRaw || (this.btnWrapperRaw = null === (e = this.addToCardBtnDom) || void 0 === e ? void 0 : e.parentElement), this.btnWrapperRaw
          }
          getLatestBtn(e) {
            var t;
            return null === (t = e.target) || void 0 === t ? void 0 : t.closest("[data-click*=addToCart],[data-click*=AddToCart],[data-click*=submit],[data-click*=Submit],[data-track-source=add_to_cart],[data-track-source=buy_now]")
          }
          wrapFn(e, t) {
            return n => {
              var r;
              !t || null !== (r = n.target) && void 0 !== r && r.closest("[data-wishlist=product-love]") || (e(), n.preventDefault(), n.stopPropagation());
              var i = this.getLatestBtn(n);
              i !== this.addToCardBtnDom && i !== this.buyNowBtnDom || e()
            }
          }
          addEnableListener(e) {
            var t, n = this.wrapFn(e, !1);
            this.enableListeners.push(n), null === (t = this.btnWrapper) || void 0 === t || t.addEventListener("click", n, !0)
          }
          addDisableListener(e) {
            var t, n = this.wrapFn(e, !0);
            this.disableListeners.push(n), null === (t = this.btnWrapper) || void 0 === t || t.addEventListener("click", n, !0)
          }
          removeAllEnableListeners() {
            this.enableListeners.forEach((e => {
              var t;
              null === (t = this.btnWrapper) || void 0 === t || t.removeEventListener("click", e, !0)
            }))
          }
          removeAllDisableListeners() {
            this.disableListeners.forEach((e => {
              var t;
              null === (t = this.btnWrapper) || void 0 === t || t.removeEventListener("click", e, !0)
            }))
          }
          disableATCAndBNBtNs(e) {
            this.removeAllEnableListeners(), e && this.addDisableListener(e)
          }
          enableATCAndBNBtNs(e) {
            this.removeAllDisableListeners(), e && this.addEnableListener(e)
          }
        }
        var rl, il = new nl,
          ol = () => {
            var e;
            return null === (e = il.productInfo) || void 0 === e ? void 0 : e.querySelector("#paypal-express-button-container")
          },
          {
            disablePaypalBtn: al,
            enablePaypalBtn: sl
          } = {
            disablePaypalBtn: e => {
              var t = ol();
              t && (t.style.pointerEvents = "none", rl = t => {
                t.preventDefault(), t.stopPropagation(), e()
              }, null == t || t.addEventListener("click", rl, !0))
            },
            enablePaypalBtn: () => {
              var e = ol();
              e && (e.style.pointerEvents = "auto", null == e || e.removeEventListener("click", rl, !0))
            }
          };
        var ll, cl = (ll = gt, (e, t) => {
            const n = vt(!1);
            ll((() => () => {
              n.current = !1
            }), []), ll((() => {
              if (n.current) return e();
              n.current = !0
            }), t)
          }),
          ul = function() {
            if ("undefined" != typeof Map) return Map;

            function e(e, t) {
              var n = -1;
              return e.some((function(e, r) {
                return e[0] === t && (n = r, !0)
              })), n
            }
            return function() {
              function t() {
                this.__entries__ = []
              }
              return Object.defineProperty(t.prototype, "size", {
                get: function() {
                  return this.__entries__.length
                },
                enumerable: !0,
                configurable: !0
              }), t.prototype.get = function(t) {
                var n = e(this.__entries__, t),
                  r = this.__entries__[n];
                return r && r[1]
              }, t.prototype.set = function(t, n) {
                var r = e(this.__entries__, t);
                ~r ? this.__entries__[r][1] = n : this.__entries__.push([t, n])
              }, t.prototype.delete = function(t) {
                var n = this.__entries__,
                  r = e(n, t);
                ~r && n.splice(r, 1)
              }, t.prototype.has = function(t) {
                return !!~e(this.__entries__, t)
              }, t.prototype.clear = function() {
                this.__entries__.splice(0)
              }, t.prototype.forEach = function(e, t) {
                void 0 === t && (t = null);
                for (var n = 0, r = this.__entries__; n < r.length; n++) {
                  var i = r[n];
                  e.call(t, i[1], i[0])
                }
              }, t
            }()
          }(),
          hl = "undefined" != typeof window && "undefined" != typeof document && window.document === document,
          pl = "undefined" != typeof global && global.Math === Math ? global : "undefined" != typeof self && self.Math === Math ? self : "undefined" != typeof window && window.Math === Math ? window : Function("return this")(),
          dl = "function" == typeof requestAnimationFrame ? requestAnimationFrame.bind(pl) : function(e) {
            return setTimeout((function() {
              return e(Date.now())
            }), 1e3 / 60)
          };
        var fl = ["top", "right", "bottom", "left", "width", "height", "size", "weight"],
          gl = "undefined" != typeof MutationObserver,
          ml = function() {
            function e() {
              this.connected_ = !1, this.mutationEventsAdded_ = !1, this.mutationsObserver_ = null, this.observers_ = [], this.onTransitionEnd_ = this.onTransitionEnd_.bind(this), this.refresh = function(e, t) {
                var n = !1,
                  r = !1,
                  i = 0;

                function o() {
                  n && (n = !1, e()), r && s()
                }

                function a() {
                  dl(o)
                }

                function s() {
                  var e = Date.now();
                  if (n) {
                    if (e - i < 2) return;
                    r = !0
                  } else n = !0, r = !1, setTimeout(a, t);
                  i = e
                }
                return s
              }(this.refresh.bind(this), 20)
            }
            return e.prototype.addObserver = function(e) {
              ~this.observers_.indexOf(e) || this.observers_.push(e), this.connected_ || this.connect_()
            }, e.prototype.removeObserver = function(e) {
              var t = this.observers_,
                n = t.indexOf(e);
              ~n && t.splice(n, 1), !t.length && this.connected_ && this.disconnect_()
            }, e.prototype.refresh = function() {
              this.updateObservers_() && this.refresh()
            }, e.prototype.updateObservers_ = function() {
              var e = this.observers_.filter((function(e) {
                return e.gatherActive(), e.hasActive()
              }));
              return e.forEach((function(e) {
                return e.broadcastActive()
              })), e.length > 0
            }, e.prototype.connect_ = function() {
              hl && !this.connected_ && (document.addEventListener("transitionend", this.onTransitionEnd_), window.addEventListener("resize", this.refresh), gl ? (this.mutationsObserver_ = new MutationObserver(this.refresh), this
                .mutationsObserver_.observe(document, {
                  attributes: !0,
                  childList: !0,
                  characterData: !0,
                  subtree: !0
                })) : (document.addEventListener("DOMSubtreeModified", this.refresh), this.mutationEventsAdded_ = !0), this.connected_ = !0)
            }, e.prototype.disconnect_ = function() {
              hl && this.connected_ && (document.removeEventListener("transitionend", this.onTransitionEnd_), window.removeEventListener("resize", this.refresh), this.mutationsObserver_ && this.mutationsObserver_.disconnect(), this
                .mutationEventsAdded_ && document.removeEventListener("DOMSubtreeModified", this.refresh), this.mutationsObserver_ = null, this.mutationEventsAdded_ = !1, this.connected_ = !1)
            }, e.prototype.onTransitionEnd_ = function(e) {
              var t = e.propertyName,
                n = void 0 === t ? "" : t;
              fl.some((function(e) {
                return !!~n.indexOf(e)
              })) && this.refresh()
            }, e.getInstance = function() {
              return this.instance_ || (this.instance_ = new e), this.instance_
            }, e.instance_ = null, e
          }(),
          vl = function(e, t) {
            for (var n = 0, r = Object.keys(t); n < r.length; n++) {
              var i = r[n];
              Object.defineProperty(e, i, {
                value: t[i],
                enumerable: !1,
                writable: !1,
                configurable: !0
              })
            }
            return e
          },
          _l = function(e) {
            return e && e.ownerDocument && e.ownerDocument.defaultView || pl
          },
          bl = Sl(0, 0, 0, 0);

        function yl(e) {
          return parseFloat(e) || 0
        }

        function wl(e) {
          for (var t = [], n = 1; n < arguments.length; n++) t[n - 1] = arguments[n];
          return t.reduce((function(t, n) {
            return t + yl(e["border-" + n + "-width"])
          }), 0)
        }

        function xl(e) {
          var t = e.clientWidth,
            n = e.clientHeight;
          if (!t && !n) return bl;
          var r = _l(e).getComputedStyle(e),
            i = function(e) {
              for (var t = {}, n = 0, r = ["top", "right", "bottom", "left"]; n < r.length; n++) {
                var i = r[n],
                  o = e["padding-" + i];
                t[i] = yl(o)
              }
              return t
            }(r),
            o = i.left + i.right,
            a = i.top + i.bottom,
            s = yl(r.width),
            l = yl(r.height);
          if ("border-box" === r.boxSizing && (Math.round(s + o) !== t && (s -= wl(r, "left", "right") + o), Math.round(l + a) !== n && (l -= wl(r, "top", "bottom") + a)), ! function(e) {
              return e === _l(e).document.documentElement
            }(e)) {
            var c = Math.round(s + o) - t,
              u = Math.round(l + a) - n;
            1 !== Math.abs(c) && (s -= c), 1 !== Math.abs(u) && (l -= u)
          }
          return Sl(i.left, i.top, s, l)
        }
        var kl = "undefined" != typeof SVGGraphicsElement ? function(e) {
          return e instanceof _l(e).SVGGraphicsElement
        } : function(e) {
          return e instanceof _l(e).SVGElement && "function" == typeof e.getBBox
        };

        function Cl(e) {
          return hl ? kl(e) ? function(e) {
            var t = e.getBBox();
            return Sl(0, 0, t.width, t.height)
          }(e) : xl(e) : bl
        }

        function Sl(e, t, n, r) {
          return {
            x: e,
            y: t,
            width: n,
            height: r
          }
        }
        var El = function() {
            function e(e) {
              this.broadcastWidth = 0, this.broadcastHeight = 0, this.contentRect_ = Sl(0, 0, 0, 0), this.target = e
            }
            return e.prototype.isActive = function() {
              var e = Cl(this.target);
              return this.contentRect_ = e, e.width !== this.broadcastWidth || e.height !== this.broadcastHeight
            }, e.prototype.broadcastRect = function() {
              var e = this.contentRect_;
              return this.broadcastWidth = e.width, this.broadcastHeight = e.height, e
            }, e
          }(),
          Tl = function(e, t) {
            var n = function(e) {
              var t = e.x,
                n = e.y,
                r = e.width,
                i = e.height,
                o = "undefined" != typeof DOMRectReadOnly ? DOMRectReadOnly : Object,
                a = Object.create(o.prototype);
              return vl(a, {
                x: t,
                y: n,
                width: r,
                height: i,
                top: n,
                right: t + r,
                bottom: i + n,
                left: t
              }), a
            }(t);
            vl(this, {
              target: e,
              contentRect: n
            })
          },
          Ol = function() {
            function e(e, t, n) {
              if (this.activeObservations_ = [], this.observations_ = new ul, "function" != typeof e) throw new TypeError("The callback provided as parameter 1 is not a function.");
              this.callback_ = e, this.controller_ = t, this.callbackCtx_ = n
            }
            return e.prototype.observe = function(e) {
              if (!arguments.length) throw new TypeError("1 argument required, but only 0 present.");
              if ("undefined" != typeof Element && Element instanceof Object) {
                if (!(e instanceof _l(e).Element)) throw new TypeError('parameter 1 is not of type "Element".');
                var t = this.observations_;
                t.has(e) || (t.set(e, new El(e)), this.controller_.addObserver(this), this.controller_.refresh())
              }
            }, e.prototype.unobserve = function(e) {
              if (!arguments.length) throw new TypeError("1 argument required, but only 0 present.");
              if ("undefined" != typeof Element && Element instanceof Object) {
                if (!(e instanceof _l(e).Element)) throw new TypeError('parameter 1 is not of type "Element".');
                var t = this.observations_;
                t.has(e) && (t.delete(e), t.size || this.controller_.removeObserver(this))
              }
            }, e.prototype.disconnect = function() {
              this.clearActive(), this.observations_.clear(), this.controller_.removeObserver(this)
            }, e.prototype.gatherActive = function() {
              var e = this;
              this.clearActive(), this.observations_.forEach((function(t) {
                t.isActive() && e.activeObservations_.push(t)
              }))
            }, e.prototype.broadcastActive = function() {
              if (this.hasActive()) {
                var e = this.callbackCtx_,
                  t = this.activeObservations_.map((function(e) {
                    return new Tl(e.target, e.broadcastRect())
                  }));
                this.callback_.call(e, t, e), this.clearActive()
              }
            }, e.prototype.clearActive = function() {
              this.activeObservations_.splice(0)
            }, e.prototype.hasActive = function() {
              return this.activeObservations_.length > 0
            }, e
          }(),
          Al = "undefined" != typeof WeakMap ? new WeakMap : new ul,
          Pl = function e(t) {
            if (!(this instanceof e)) throw new TypeError("Cannot call a class as a function.");
            if (!arguments.length) throw new TypeError("1 argument required, but only 0 present.");
            var n = ml.getInstance(),
              r = new Ol(t, n, this);
            Al.set(this, r)
          };
        ["observe", "unobserve", "disconnect"].forEach((function(e) {
          Pl.prototype[e] = function() {
            var t;
            return (t = Al.get(this))[e].apply(t, arguments)
          }
        }));
        var Ml = void 0 !== pl.ResizeObserver ? pl.ResizeObserver : Pl,
          Dl = (e, t) => {
            gt((() => ("loading" !== document.readyState ? e() : document.addEventListener("DOMContentLoaded", e), () => {
              document.removeEventListener("DOMContentLoaded", e)
            })), t)
          },
          Il = {
            exports: {}
          };
        ! function(e) {
          ! function() {
            var t = {}.hasOwnProperty;

            function n() {
              for (var e = [], r = 0; r < arguments.length; r++) {
                var i = arguments[r];
                if (i) {
                  var o = typeof i;
                  if ("string" === o || "number" === o) e.push(i);
                  else if (Array.isArray(i)) {
                    if (i.length) {
                      var a = n.apply(null, i);
                      a && e.push(a)
                    }
                  } else if ("object" === o)
                    if (i.toString === Object.prototype.toString)
                      for (var s in i) t.call(i, s) && i[s] && e.push(s);
                    else e.push(i.toString())
                }
              }
              return e.join(" ")
            }
            e.exports ? (n.default = n, e.exports = n) : window.classNames = n
          }()
        }(Il);
        var Nl, Rl, jl = Il.exports,
          Ll = e => "Please select at least ".concat(e, " options");

        function Fl() {
          return Fl = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Fl.apply(this, arguments)
        }
        var Bl = e => Te("svg", Fl({
            width: 16,
            height: 16,
            fill: "none",
            xmlns: "http://www.w3.org/2000/svg"
          }, e), Nl || (Nl = Te("path", {
            d: "M7.915 1.675a6.41 6.41 0 1 0 0 12.822 6.41 6.41 0 0 0 0-12.822Zm-5.666.744A8.014 8.014 0 1 1 13.58 13.751 8.013 8.013 0 0 1 2.249 2.421v-.002Z",
            fill: "#6D7175"
          })), Rl || (Rl = Te("path", {
            d: "M8.578 10.16H7.082v-.8c.007-1.379.344-1.58.962-1.95.066-.04.134-.08.206-.125.511-.322.905-.728.905-1.32 0-.664-.52-1.096-1.167-1.096-.597 0-1.162.28-1.2 1.075H5.2C5.242 4.336 6.515 3.5 7.996 3.5c1.616 0 2.729 1.014 2.729 2.444 0 .969-.487 1.604-1.266 2.069l-.166.1c-.553.334-.707.426-.715 1.246v.8Zm.12 1.41a.942.942 0 0 1-.93.93.925.925 0 0 1-.517-1.7.924.924 0 0 1 .517-.153.94.94 0 0 1 .93.922Z",
            fill: "#6D7175"
          }))),
          zl = 0;

        function Hl(e, t, n, r, i, o) {
          var a, s, l = {};
          for (s in t) "ref" == s ? a = t[s] : l[s] = t[s];
          var c = {
            type: e,
            props: l,
            key: n,
            ref: a,
            __k: null,
            __: null,
            __b: 0,
            __e: null,
            __d: void 0,
            __c: null,
            __h: null,
            constructor: void 0,
            __v: --zl,
            __source: i,
            __self: o
          };
          if ("function" == typeof e && (a = e.defaultProps))
            for (s in a) void 0 === l[s] && (l[s] = a[s]);
          return fe.vnode && fe.vnode(c), c
        }
        var Ul = ["tagName", "children"],
          Wl = Rt((e => {
            var {
              tagName: t,
              children: n
            } = e;
            return Hl(t || "span", h(h({}, g(e, Ul)), {}, {
              children: n
            }))
          }));

        function Vl(e) {
          return e.split("-")[0]
        }

        function Xl(e) {
          return e.split("-")[1]
        }

        function Gl(e) {
          return ["top", "bottom"].includes(Vl(e)) ? "x" : "y"
        }

        function Yl(e) {
          return "y" === e ? "height" : "width"
        }

        function ql(e, t, n) {
          let {
            reference: r,
            floating: i
          } = e;
          const o = r.x + r.width / 2 - i.width / 2,
            a = r.y + r.height / 2 - i.height / 2,
            s = Gl(t),
            l = Yl(s),
            c = r[l] / 2 - i[l] / 2,
            u = "x" === s;
          let h;
          switch (Vl(t)) {
            case "top":
              h = {
                x: o,
                y: r.y - i.height
              };
              break;
            case "bottom":
              h = {
                x: o,
                y: r.y + r.height
              };
              break;
            case "right":
              h = {
                x: r.x + r.width,
                y: a
              };
              break;
            case "left":
              h = {
                x: r.x - i.width,
                y: a
              };
              break;
            default:
              h = {
                x: r.x,
                y: r.y
              }
          }
          switch (Xl(t)) {
            case "start":
              h[s] -= c * (n && u ? -1 : 1);
              break;
            case "end":
              h[s] += c * (n && u ? -1 : 1)
          }
          return h
        }

        function Kl(e) {
          return "number" != typeof e ? function(e) {
            return {
              top: 0,
              right: 0,
              bottom: 0,
              left: 0,
              ...e
            }
          }(e) : {
            top: e,
            right: e,
            bottom: e,
            left: e
          }
        }

        function $l(e) {
          return {
            ...e,
            top: e.y,
            left: e.x,
            right: e.x + e.width,
            bottom: e.y + e.height
          }
        }
        const Zl = Math.min,
          Jl = Math.max;

        function Ql(e, t, n) {
          return Jl(e, Zl(t, n))
        }
        const ec = e => ({
          name: "arrow",
          options: e,
          async fn(t) {
            const {
              element: n,
              padding: r = 0
            } = null != e ? e : {}, {
              x: i,
              y: o,
              placement: a,
              rects: s,
              platform: l
            } = t;
            if (null == n) return {};
            const c = Kl(r),
              u = {
                x: i,
                y: o
              },
              h = Gl(a),
              p = Xl(a),
              d = Yl(h),
              f = await l.getDimensions(n),
              g = "y" === h ? "top" : "left",
              m = "y" === h ? "bottom" : "right",
              v = s.reference[d] + s.reference[h] - u[h] - s.floating[d],
              _ = u[h] - s.reference[h],
              b = await (null == l.getOffsetParent ? void 0 : l.getOffsetParent(n));
            let y = b ? "y" === h ? b.clientHeight || 0 : b.clientWidth || 0 : 0;
            0 === y && (y = s.floating[d]);
            const w = v / 2 - _ / 2,
              x = c[g],
              k = y - f[d] - c[m],
              C = y / 2 - f[d] / 2 + w,
              S = Ql(x, C, k),
              E = ("start" === p ? c[g] : c[m]) > 0 && C !== S && s.reference[d] <= s.floating[d] ? C < x ? x - C : k - C : 0;
            return {
              [h]: u[h] - E,
              data: {
                [h]: S,
                centerOffset: C - S
              }
            }
          }
        });
        const tc = function(e) {
          return void 0 === e && (e = 0), {
            name: "offset",
            options: e,
            async fn(t) {
              const {
                x: n,
                y: r
              } = t, i = await async function(e, t) {
                const {
                  placement: n,
                  platform: r,
                  elements: i
                } = e, o = await (null == r.isRTL ? void 0 : r.isRTL(i.floating)), a = Vl(n), s = Xl(n), l = "x" === Gl(n), c = ["left", "top"].includes(a) ? -1 : 1, u = o && l ? -1 : 1, h = "function" == typeof t ? t(e) : t;
                let {
                  mainAxis: p,
                  crossAxis: d,
                  alignmentAxis: f
                } = "number" == typeof h ? {
                  mainAxis: h,
                  crossAxis: 0,
                  alignmentAxis: null
                } : {
                  mainAxis: 0,
                  crossAxis: 0,
                  alignmentAxis: null,
                  ...h
                };
                return s && "number" == typeof f && (d = "end" === s ? -1 * f : f), l ? {
                  x: d * u,
                  y: p * c
                } : {
                  x: p * c,
                  y: d * u
                }
              }(t, e);
              return {
                x: n + i.x,
                y: r + i.y,
                data: i
              }
            }
          }
        };
        const nc = function(e) {
          return void 0 === e && (e = {}), {
            name: "shift",
            options: e,
            async fn(t) {
              const {
                x: n,
                y: r,
                placement: i
              } = t, {
                mainAxis: o = !0,
                crossAxis: a = !1,
                limiter: s = {
                  fn: e => {
                    let {
                      x: t,
                      y: n
                    } = e;
                    return {
                      x: t,
                      y: n
                    }
                  }
                },
                ...l
              } = e, c = {
                x: n,
                y: r
              }, u = await async function(e, t) {
                var n;
                void 0 === t && (t = {});
                const {
                  x: r,
                  y: i,
                  platform: o,
                  rects: a,
                  elements: s,
                  strategy: l
                } = e, {
                  boundary: c = "clippingAncestors",
                  rootBoundary: u = "viewport",
                  elementContext: h = "floating",
                  altBoundary: p = !1,
                  padding: d = 0
                } = t, f = Kl(d), g = s[p ? "floating" === h ? "reference" : "floating" : h], m = $l(await o.getClippingRect({
                  element: null == (n = await (null == o.isElement ? void 0 : o.isElement(g))) || n ? g : g.contextElement || await (null == o.getDocumentElement ? void 0 : o.getDocumentElement(s.floating)),
                  boundary: c,
                  rootBoundary: u,
                  strategy: l
                })), v = $l(o.convertOffsetParentRelativeRectToViewportRelativeRect ? await o.convertOffsetParentRelativeRectToViewportRelativeRect({
                  rect: "floating" === h ? {
                    ...a.floating,
                    x: r,
                    y: i
                  } : a.reference,
                  offsetParent: await (null == o.getOffsetParent ? void 0 : o.getOffsetParent(s.floating)),
                  strategy: l
                }) : a[h]);
                return {
                  top: m.top - v.top + f.top,
                  bottom: v.bottom - m.bottom + f.bottom,
                  left: m.left - v.left + f.left,
                  right: v.right - m.right + f.right
                }
              }(t, l), h = Gl(Vl(i)), p = "x" === h ? "y" : "x";
              let d = c[h],
                f = c[p];
              if (o) {
                const e = "y" === h ? "bottom" : "right";
                d = Ql(d + u["y" === h ? "top" : "left"], d, d - u[e])
              }
              if (a) {
                const e = "y" === p ? "bottom" : "right";
                f = Ql(f + u["y" === p ? "top" : "left"], f, f - u[e])
              }
              const g = s.fn({
                ...t,
                [h]: d,
                [p]: f
              });
              return {
                ...g,
                data: {
                  x: g.x - n,
                  y: g.y - r
                }
              }
            }
          }
        };

        function rc(e) {
          return e && e.document && e.location && e.alert && e.setInterval
        }

        function ic(e) {
          if (null == e) return window;
          if (!rc(e)) {
            const t = e.ownerDocument;
            return t && t.defaultView || window
          }
          return e
        }

        function oc(e) {
          return ic(e).getComputedStyle(e)
        }

        function ac(e) {
          return rc(e) ? "" : e ? (e.nodeName || "").toLowerCase() : ""
        }

        function sc() {
          const e = navigator.userAgentData;
          return null != e && e.brands ? e.brands.map((e => e.brand + "/" + e.version)).join(" ") : navigator.userAgent
        }

        function lc(e) {
          return e instanceof ic(e).HTMLElement
        }

        function cc(e) {
          return e instanceof ic(e).Element
        }

        function uc(e) {
          if ("undefined" == typeof ShadowRoot) return !1;
          return e instanceof ic(e).ShadowRoot || e instanceof ShadowRoot
        }

        function hc(e) {
          const {
            overflow: t,
            overflowX: n,
            overflowY: r
          } = oc(e);
          return /auto|scroll|overlay|hidden/.test(t + r + n)
        }

        function pc(e) {
          return ["table", "td", "th"].includes(ac(e))
        }

        function dc(e) {
          const t = /firefox/i.test(sc()),
            n = oc(e);
          return "none" !== n.transform || "none" !== n.perspective || "paint" === n.contain || ["transform", "perspective"].includes(n.willChange) || t && "filter" === n.willChange || t && !!n.filter && "none" !== n.filter
        }

        function fc() {
          return !/^((?!chrome|android).)*safari/i.test(sc())
        }
        const gc = Math.min,
          mc = Math.max,
          vc = Math.round;

        function _c(e, t, n) {
          var r, i, o, a;
          void 0 === t && (t = !1), void 0 === n && (n = !1);
          const s = e.getBoundingClientRect();
          let l = 1,
            c = 1;
          t && lc(e) && (l = e.offsetWidth > 0 && vc(s.width) / e.offsetWidth || 1, c = e.offsetHeight > 0 && vc(s.height) / e.offsetHeight || 1);
          const u = cc(e) ? ic(e) : window,
            h = !fc() && n,
            p = (s.left + (h && null != (r = null == (i = u.visualViewport) ? void 0 : i.offsetLeft) ? r : 0)) / l,
            d = (s.top + (h && null != (o = null == (a = u.visualViewport) ? void 0 : a.offsetTop) ? o : 0)) / c,
            f = s.width / l,
            g = s.height / c;
          return {
            width: f,
            height: g,
            top: d,
            right: p + f,
            bottom: d + g,
            left: p,
            x: p,
            y: d
          }
        }

        function bc(e) {
          return (t = e, (t instanceof ic(t).Node ? e.ownerDocument : e.document) || window.document).documentElement;
          var t
        }

        function yc(e) {
          return cc(e) ? {
            scrollLeft: e.scrollLeft,
            scrollTop: e.scrollTop
          } : {
            scrollLeft: e.pageXOffset,
            scrollTop: e.pageYOffset
          }
        }

        function wc(e) {
          return _c(bc(e)).left + yc(e).scrollLeft
        }

        function xc(e, t, n) {
          const r = lc(t),
            i = bc(t),
            o = _c(e, r && function(e) {
              const t = _c(e);
              return vc(t.width) !== e.offsetWidth || vc(t.height) !== e.offsetHeight
            }(t), "fixed" === n);
          let a = {
            scrollLeft: 0,
            scrollTop: 0
          };
          const s = {
            x: 0,
            y: 0
          };
          if (r || !r && "fixed" !== n)
            if (("body" !== ac(t) || hc(i)) && (a = yc(t)), lc(t)) {
              const e = _c(t, !0);
              s.x = e.x + t.clientLeft, s.y = e.y + t.clientTop
            } else i && (s.x = wc(i));
          return {
            x: o.left + a.scrollLeft - s.x,
            y: o.top + a.scrollTop - s.y,
            width: o.width,
            height: o.height
          }
        }

        function kc(e) {
          return "html" === ac(e) ? e : e.assignedSlot || e.parentNode || (uc(e) ? e.host : null) || bc(e)
        }

        function Cc(e) {
          return lc(e) && "fixed" !== oc(e).position ? e.offsetParent : null
        }

        function Sc(e) {
          const t = ic(e);
          let n = Cc(e);
          for (; n && pc(n) && "static" === oc(n).position;) n = Cc(n);
          return n && ("html" === ac(n) || "body" === ac(n) && "static" === oc(n).position && !dc(n)) ? t : n || function(e) {
            let t = kc(e);
            for (uc(t) && (t = t.host); lc(t) && !["html", "body"].includes(ac(t));) {
              if (dc(t)) return t;
              {
                const e = t.parentNode;
                t = uc(e) ? e.host : e
              }
            }
            return null
          }(e) || t
        }

        function Ec(e) {
          if (lc(e)) return {
            width: e.offsetWidth,
            height: e.offsetHeight
          };
          const t = _c(e);
          return {
            width: t.width,
            height: t.height
          }
        }

        function Tc(e) {
          const t = kc(e);
          return ["html", "body", "#document"].includes(ac(t)) ? e.ownerDocument.body : lc(t) && hc(t) ? t : Tc(t)
        }

        function Oc(e, t) {
          var n;
          void 0 === t && (t = []);
          const r = Tc(e),
            i = r === (null == (n = e.ownerDocument) ? void 0 : n.body),
            o = ic(r),
            a = i ? [o].concat(o.visualViewport || [], hc(r) ? r : []) : r,
            s = t.concat(a);
          return i ? s : s.concat(Oc(a))
        }

        function Ac(e, t, n) {
          return "viewport" === t ? $l(function(e, t) {
            const n = ic(e),
              r = bc(e),
              i = n.visualViewport;
            let o = r.clientWidth,
              a = r.clientHeight,
              s = 0,
              l = 0;
            if (i) {
              o = i.width, a = i.height;
              const e = fc();
              (e || !e && "fixed" === t) && (s = i.offsetLeft, l = i.offsetTop)
            }
            return {
              width: o,
              height: a,
              x: s,
              y: l
            }
          }(e, n)) : cc(t) ? function(e, t) {
            const n = _c(e, !1, "fixed" === t),
              r = n.top + e.clientTop,
              i = n.left + e.clientLeft;
            return {
              top: r,
              left: i,
              x: i,
              y: r,
              right: i + e.clientWidth,
              bottom: r + e.clientHeight,
              width: e.clientWidth,
              height: e.clientHeight
            }
          }(t, n) : $l(function(e) {
            var t;
            const n = bc(e),
              r = yc(e),
              i = null == (t = e.ownerDocument) ? void 0 : t.body,
              o = mc(n.scrollWidth, n.clientWidth, i ? i.scrollWidth : 0, i ? i.clientWidth : 0),
              a = mc(n.scrollHeight, n.clientHeight, i ? i.scrollHeight : 0, i ? i.clientHeight : 0);
            let s = -r.scrollLeft + wc(e);
            const l = -r.scrollTop;
            return "rtl" === oc(i || n).direction && (s += mc(n.clientWidth, i ? i.clientWidth : 0) - o), {
              width: o,
              height: a,
              x: s,
              y: l
            }
          }(bc(e)))
        }

        function Pc(e) {
          const t = Oc(e),
            n = ["absolute", "fixed"].includes(oc(e).position) && lc(e) ? Sc(e) : e;
          return cc(n) ? t.filter((e => cc(e) && function(e, t) {
            const n = null == t.getRootNode ? void 0 : t.getRootNode();
            if (e.contains(t)) return !0;
            if (n && uc(n)) {
              let n = t;
              do {
                if (n && e === n) return !0;
                n = n.parentNode || n.host
              } while (n)
            }
            return !1
          }(e, n) && "body" !== ac(e))) : []
        }
        const Mc = {
          getClippingRect: function(e) {
            let {
              element: t,
              boundary: n,
              rootBoundary: r,
              strategy: i
            } = e;
            const o = [..."clippingAncestors" === n ? Pc(t) : [].concat(n), r],
              a = o[0],
              s = o.reduce(((e, n) => {
                const r = Ac(t, n, i);
                return e.top = mc(r.top, e.top), e.right = gc(r.right, e.right), e.bottom = gc(r.bottom, e.bottom), e.left = mc(r.left, e.left), e
              }), Ac(t, a, i));
            return {
              width: s.right - s.left,
              height: s.bottom - s.top,
              x: s.left,
              y: s.top
            }
          },
          convertOffsetParentRelativeRectToViewportRelativeRect: function(e) {
            let {
              rect: t,
              offsetParent: n,
              strategy: r
            } = e;
            const i = lc(n),
              o = bc(n);
            if (n === o) return t;
            let a = {
              scrollLeft: 0,
              scrollTop: 0
            };
            const s = {
              x: 0,
              y: 0
            };
            if ((i || !i && "fixed" !== r) && (("body" !== ac(n) || hc(o)) && (a = yc(n)), lc(n))) {
              const e = _c(n, !0);
              s.x = e.x + n.clientLeft, s.y = e.y + n.clientTop
            }
            return {
              ...t,
              x: t.x - a.scrollLeft + s.x,
              y: t.y - a.scrollTop + s.y
            }
          },
          isElement: cc,
          getDimensions: Ec,
          getOffsetParent: Sc,
          getDocumentElement: bc,
          getElementRects: e => {
            let {
              reference: t,
              floating: n,
              strategy: r
            } = e;
            return {
              reference: xc(t, Sc(n), r),
              floating: {
                ...Ec(n),
                x: 0,
                y: 0
              }
            }
          },
          getClientRects: e => Array.from(e.getClientRects()),
          isRTL: e => "rtl" === oc(e).direction
        };

        function Dc(e, t, n, r) {
          void 0 === r && (r = {});
          const {
            ancestorScroll: i = !0,
            ancestorResize: o = !0,
            elementResize: a = !0,
            animationFrame: s = !1
          } = r, l = i && !s, c = o && !s, u = l || c ? [...cc(e) ? Oc(e) : [], ...Oc(t)] : [];
          u.forEach((e => {
            l && e.addEventListener("scroll", n, {
              passive: !0
            }), c && e.addEventListener("resize", n)
          }));
          let h, p = null;
          if (a) {
            let r = !0;
            p = new ResizeObserver((() => {
              r || n(), r = !1
            })), cc(e) && !s && p.observe(e), p.observe(t)
          }
          let d = s ? _c(e) : null;
          return s && function t() {
            const r = _c(e);
            !d || r.x === d.x && r.y === d.y && r.width === d.width && r.height === d.height || n();
            d = r, h = requestAnimationFrame(t)
          }(), n(), () => {
            var e;
            u.forEach((e => {
              l && e.removeEventListener("scroll", n), c && e.removeEventListener("resize", n)
            })), null == (e = p) || e.disconnect(), p = null, s && cancelAnimationFrame(h)
          }
        }
        const Ic = (e, t, n) => (async (e, t, n) => {
          const {
            placement: r = "bottom",
            strategy: i = "absolute",
            middleware: o = [],
            platform: a
          } = n, s = await (null == a.isRTL ? void 0 : a.isRTL(t));
          let l = await a.getElementRects({
              reference: e,
              floating: t,
              strategy: i
            }),
            {
              x: c,
              y: u
            } = ql(l, r, s),
            h = r,
            p = {},
            d = 0;
          for (let n = 0; n < o.length; n++) {
            const {
              name: f,
              fn: g
            } = o[n], {
              x: m,
              y: v,
              data: _,
              reset: b
            } = await g({
              x: c,
              y: u,
              initialPlacement: r,
              placement: h,
              strategy: i,
              middlewareData: p,
              rects: l,
              platform: a,
              elements: {
                reference: e,
                floating: t
              }
            });
            c = null != m ? m : c, u = null != v ? v : u, p = {
              ...p,
              [f]: {
                ...p[f],
                ..._
              }
            }, b && d <= 50 && (d++, "object" == typeof b && (b.placement && (h = b.placement), b.rects && (l = !0 === b.rects ? await a.getElementRects({
              reference: e,
              floating: t,
              strategy: i
            }) : b.rects), ({
              x: c,
              y: u
            } = ql(l, h, s))), n = -1)
          }
          return {
            x: c,
            y: u,
            placement: h,
            strategy: i,
            middlewareData: p
          }
        })(e, t, {
          platform: Mc,
          ...n
        });
        var Nc = "undefined" != typeof document ? mt : gt;

        function Rc(e, t) {
          if (e === t) return !0;
          if (typeof e != typeof t) return !1;
          if ("function" == typeof e && e.toString() === t.toString()) return !0;
          let n, r, i;
          if (e && t && "object" == typeof e) {
            if (Array.isArray(e)) {
              if (n = e.length, n != t.length) return !1;
              for (r = n; 0 != r--;)
                if (!Rc(e[r], t[r])) return !1;
              return !0
            }
            if (i = Object.keys(e), n = i.length, n !== Object.keys(t).length) return !1;
            for (r = n; 0 != r--;)
              if (!Object.prototype.hasOwnProperty.call(t, i[r])) return !1;
            for (r = n; 0 != r--;) {
              const n = i[r];
              if (("_owner" !== n || !e.$$typeof) && !Rc(e[n], t[n])) return !1
            }
            return !0
          }
          return e != e && t != t
        }

        function jc(e) {
          let {
            middleware: t,
            placement: n = "bottom",
            strategy: r = "absolute",
            whileElementsMounted: i
          } = void 0 === e ? {} : e;
          const [o, a] = dt({
            x: null,
            y: null,
            strategy: r,
            placement: n,
            middlewareData: {}
          }), [s, l] = dt(t);
          Rc(null == s ? void 0 : s.map((e => {
            let {
              name: t,
              options: n
            } = e;
            return {
              name: t,
              options: n
            }
          })), null == t ? void 0 : t.map((e => {
            let {
              name: t,
              options: n
            } = e;
            return {
              name: t,
              options: n
            }
          }))) || l(t);
          const c = vt(null),
            u = vt(null),
            h = vt(null),
            p = vt(o),
            d = function(e) {
              const t = vt(e);
              return Nc((() => {
                t.current = e
              })), t
            }(i),
            f = yt((() => {
              c.current && u.current && Ic(c.current, u.current, {
                middleware: s,
                placement: n,
                strategy: r
              }).then((e => {
                g.current && !Rc(p.current, e) && (p.current = e, Cn((() => {
                  a(e)
                })))
              }))
            }), [s, n, r]);
          Nc((() => {
            g.current && f()
          }), [f]);
          const g = vt(!1);
          Nc((() => (g.current = !0, () => {
            g.current = !1
          })), []);
          const m = yt((() => {
              if ("function" == typeof h.current && (h.current(), h.current = null), c.current && u.current)
                if (d.current) {
                  const e = d.current(c.current, u.current, f);
                  h.current = e
                } else f()
            }), [f, d]),
            v = yt((e => {
              c.current = e, m()
            }), [m]),
            _ = yt((e => {
              u.current = e, m()
            }), [m]),
            b = bt((() => ({
              reference: c,
              floating: u
            })), []);
          return bt((() => ({
            ...o,
            update: f,
            refs: b,
            reference: v,
            floating: _
          })), [o, f, b, v, _])
        }
        const Lc = e => {
          const {
            element: t,
            padding: n
          } = e;
          return {
            name: "arrow",
            options: e,
            fn(e) {
              return r = t, Object.prototype.hasOwnProperty.call(r, "current") ? null != t.current ? ec({
                element: t.current,
                padding: n
              }).fn(e) : {} : t ? ec({
                element: t,
                padding: n
              }).fn(e) : {};
              var r
            }
          }
        };
        var Fc = "undefined" != typeof document ? mt : gt;
        const Bc = Qe(null),
          zc = Qe(null),
          Hc = () => wt(zc);

        function Uc(e) {
          var t;
          return null != (t = null == e ? void 0 : e.ownerDocument) ? t : document
        }

        function Wc(e) {
          return !!e && e instanceof
          function(e) {
            var t;
            return null != (t = Uc(e).defaultView) ? t : window
          }(e).Element
        }
        const Vc = Rn["useInsertionEffect".toString()];

        function Xc(e) {
          let {
            open: t = !1,
            onOpenChange: n,
            whileElementsMounted: r,
            placement: i,
            middleware: o,
            strategy: a,
            nodeId: s
          } = void 0 === e ? {} : e;
          const [l, c] = dt(null), u = Hc(), h = vt(null), p = vt({}), d = dt((() => function() {
            const e = new Map;
            return {
              emit(t, n) {
                var r;
                null == (r = e.get(t)) || r.forEach((e => e(n)))
              },
              on(t, n) {
                e.set(t, [...e.get(t) || [], n])
              },
              off(t, n) {
                e.set(t, (e.get(t) || []).filter((e => e !== n)))
              }
            }
          }()))[0], f = jc({
            placement: i,
            middleware: o,
            strategy: a,
            whileElementsMounted: r
          }), g = function(e) {
            const t = vt((() => {}));
            return Vc ? Vc((() => {
              t.current = e
            })) : t.current = e, yt((function() {
              for (var e = arguments.length, n = new Array(e), r = 0; r < e; r++) n[r] = arguments[r];
              return null == t.current ? void 0 : t.current(...n)
            }), [])
          }(n), m = bt((() => ({
            ...f.refs,
            domReference: h
          })), [f.refs]), v = bt((() => ({
            ...f,
            refs: m,
            dataRef: p,
            nodeId: s,
            events: d,
            open: t,
            onOpenChange: g,
            _: {
              domReference: l
            }
          })), [f, s, d, t, g, m, l]);
          Fc((() => {
            const e = null == u ? void 0 : u.nodesRef.current.find((e => e.id === s));
            e && (e.context = v)
          }));
          const {
            reference: _
          } = f, b = yt((e => {
            (Wc(e) || null === e) && (v.refs.domReference.current = e, c(e)), _(e)
          }), [_, v.refs]);
          return bt((() => ({
            ...f,
            context: v,
            refs: m,
            reference: b
          })), [f, m, v, b])
        }

        function Gc(e, t, n) {
          const r = new Map;
          return {
            ..."floating" === n && {
              tabIndex: -1
            },
            ...e,
            ...t.map((e => e ? e[n] : null)).concat(e).reduce(((e, t) => t ? (Object.entries(t).forEach((t => {
              let [n, i] = t;
              var o;
              0 === n.indexOf("on") ? (r.has(n) || r.set(n, []), "function" == typeof i && (null == (o = r.get(n)) || o.push(i), e[n] = function() {
                for (var e, t = arguments.length, i = new Array(t), o = 0; o < t; o++) i[o] = arguments[o];
                null == (e = r.get(n)) || e.forEach((e => e(...i)))
              })) : e[n] = i
            })), e) : e), {})
          }
        }
        const Yc = function(e) {
          return void 0 === e && (e = []), {
            getReferenceProps: t => Gc(t, e, "reference"),
            getFloatingProps: t => Gc(t, e, "floating"),
            getItemProps: t => Gc(t, e, "item")
          }
        };

        function qc(e) {
          const t = vt(e);
          return Fc((() => {
            t.current = e
          })), t
        }

        function Kc(e, t, n) {
          return n && "mouse" !== n ? 0 : "number" == typeof e ? e : null == e ? void 0 : e[t]
        }
        const $c = function(e, t) {
          let {
            enabled: n = !0,
            delay: r = 0,
            handleClose: i = null,
            mouseOnly: o = !1,
            restMs: a = 0,
            move: s = !0
          } = void 0 === t ? {} : t;
          const {
            open: l,
            onOpenChange: c,
            dataRef: u,
            events: h,
            refs: p,
            _: d
          } = e, f = Hc(), g = null != (m = null == (v = wt(Bc)) ? void 0 : v.id) ? m : null;
          var m, v;
          const _ = qc(i),
            b = qc(r),
            y = function(e) {
              const t = vt();
              return Fc((() => {
                t.current = e
              }), [e]), t.current
            }(l),
            w = vt(),
            x = vt(),
            k = vt(),
            C = vt(),
            S = vt(!0),
            E = vt(!1),
            T = yt((() => {
              var e;
              const t = null == (e = u.current.openEvent) ? void 0 : e.type;
              return (null == t ? void 0 : t.includes("mouse")) && "mousedown" !== t
            }), [u]);
          gt((() => {
            if (n) return h.on("dismiss", e), () => {
              h.off("dismiss", e)
            };

            function e() {
              clearTimeout(x.current), clearTimeout(C.current), S.current = !0
            }
          }), [n, h, p]), gt((() => {
            if (!n || !_.current) return;

            function e() {
              T() && c(!1)
            }
            const t = Uc(p.floating.current).documentElement;
            return t.addEventListener("mouseleave", e), () => {
              t.removeEventListener("mouseleave", e)
            }
          }), [p, c, n, _, u, T]);
          const O = yt((function(e) {
              void 0 === e && (e = !0);
              const t = Kc(b.current, "close", w.current);
              t && !k.current ? (clearTimeout(x.current), x.current = setTimeout((() => c(!1)), t)) : e && (clearTimeout(x.current), c(!1))
            }), [b, c]),
            A = yt((() => {
              k.current && (Uc(p.floating.current).removeEventListener("pointermove", k.current), k.current = void 0)
            }), [p]),
            P = yt((() => {
              Uc(p.floating.current).body.style.pointerEvents = "", E.current = !1
            }), [p]);
          if (gt((() => {
              if (!n) return;

              function t() {
                return !!u.current.openEvent && ["click", "mousedown"].includes(u.current.openEvent.type)
              }

              function r(e) {
                if (clearTimeout(x.current), S.current = !1, o && "mouse" !== w.current || a > 0 && 0 === Kc(b.current, "open")) return;
                u.current.openEvent = e;
                const t = Kc(b.current, "open", w.current);
                t ? x.current = setTimeout((() => {
                  c(!0)
                }), t) : c(!0)
              }

              function i(n) {
                if (t()) return;
                const r = Uc(p.floating.current);
                if (clearTimeout(C.current), _.current) return clearTimeout(x.current), k.current && r.removeEventListener("pointermove", k.current), k.current = _.current({
                  ...e,
                  tree: f,
                  x: n.clientX,
                  y: n.clientY,
                  onClose() {
                    P(), A(), O()
                  }
                }), void r.addEventListener("pointermove", k.current);
                O()
              }

              function h(n) {
                t() || null == _.current || _.current({
                  ...e,
                  tree: f,
                  x: n.clientX,
                  y: n.clientY,
                  leave: !0,
                  onClose() {
                    P(), A(), O()
                  }
                })(n)
              }
              const d = p.floating.current,
                g = p.domReference.current;
              return Wc(g) ? (l && g.addEventListener("mouseleave", h), null == d || d.addEventListener("mouseleave", h), s && g.addEventListener("mousemove", r, {
                once: !0
              }), g.addEventListener("mouseenter", r), g.addEventListener("mouseleave", i), () => {
                l && g.removeEventListener("mouseleave", h), null == d || d.removeEventListener("mouseleave", h), s && g.removeEventListener("mousemove", r), g.removeEventListener("mouseenter", r), g.removeEventListener("mouseleave", i)
              }) : void 0
            }), [d.domReference, n, e, o, a, s, O, A, P, c, l, f, p, b, _, u]), Fc((() => {
              if (n && l && _.current && _.current.__options.blockPointerEvents && T()) {
                Uc(p.floating.current).body.style.pointerEvents = "none", E.current = !0;
                const n = p.domReference.current,
                  r = p.floating.current;
                if (Wc(n) && r) {
                  var e, t;
                  const i = null == f || null == (e = f.nodesRef.current.find((e => e.id === g))) || null == (t = e.context) ? void 0 : t.refs.floating.current;
                  return i && (i.style.pointerEvents = ""), n.style.pointerEvents = "auto", r.style.pointerEvents = "auto", () => {
                    n.style.pointerEvents = "", r.style.pointerEvents = ""
                  }
                }
              }
            }), [n, l, g, p, f, _, u, T]), Fc((() => {
              y && !l && (w.current = void 0, A(), P())
            })), gt((() => () => {
              A(), clearTimeout(x.current), clearTimeout(C.current), E.current && P()
            }), [n, A, P]), !n) return {};

          function M(e) {
            w.current = e.pointerType
          }
          return {
            reference: {
              onPointerDown: M,
              onPointerEnter: M,
              onMouseMove() {
                l || 0 === a || (clearTimeout(C.current), C.current = setTimeout((() => {
                  S.current || c(!0)
                }), a))
              }
            },
            floating: {
              onMouseEnter() {
                clearTimeout(x.current)
              },
              onMouseLeave() {
                O(!1)
              }
            }
          }
        };
        var Zc = ["children", "reference", "className", "placement"],
          Jc = e => {
            var {
              children: t = null,
              reference: n = null,
              className: r = "",
              placement: i = "top"
            } = e, o = g(e, Zc), [a, s] = dt(!1), l = vt(null), {
              context: c,
              x: u,
              y: p,
              strategy: d,
              floating: f,
              reference: m,
              placement: v,
              middlewareData: {
                arrow: {
                  x: _,
                  y: b
                } = {}
              }
            } = Xc({
              middleware: [tc(10), nc({
                padding: 8
              }), Lc({
                element: l
              })],
              open: a,
              placement: i,
              onOpenChange: s,
              whileElementsMounted: Dc
            }), {
              getReferenceProps: y,
              getFloatingProps: w
            } = Yc([$c(c)]), [x, k] = dt(!1);
            Dl((() => {
              k(!0)
            }));
            var C = {
              top: "bottom",
              bottom: "top"
            } [(v || "").split("-")[0]];
            return x ? Hl(Pe, {
              children: [Hl("span", h(h(h({
                ref: m
              }, y()), {}, {
                className: jl("pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block", r)
              }, o), {}, {
                children: n || Hl(Bl, {
                  className: "pk-cursor-pointer"
                })
              })), t && a && Hl("div", h(h({
                className: "relative pk-max-w-[50vw] pk-py-2 pk-px-3 pk-bg-white pk-rounded-md pk-shadow-[0px_4px_18px_rgb(0_0_0_/_10%)] pk-transform-[matrix(-1,0,0,1,0,0)] pk-z-[9999] pk-break-words md:pk-max-w-[33vw] !pk-text-[14px]",
                ref: f,
                style: {
                  position: d,
                  top: null != p ? p : 0,
                  left: null != u ? u : 0,
                  hyphens: "auto"
                }
              }, w()), {}, {
                children: [Hl(Wl, {
                  children: t
                }), Hl("div", {
                  className: "pk-absolute pk-border-[5px] pk-border-transparent pk-border-t-white pk-filter-[drop-shadow(0px_4px_18px_rgb(0_0_0_/_10%))]",
                  style: {
                    left: _,
                    top: b,
                    [C]: "-10px"
                  },
                  ref: l
                })]
              }))]
            }) : null
          },
          Qc = {
            large_tooltip: "TooltipIconLarge-module_large_tooltip__gzcyR",
            largeTooltip: "TooltipIconLarge-module_large_tooltip__gzcyR",
            large_tooltip_img: "TooltipIconLarge-module_large_tooltip_img__rpH1F",
            largeTooltipImg: "TooltipIconLarge-module_large_tooltip_img__rpH1F"
          };
        c(
        ".TooltipIconLarge-module_large_tooltip__gzcyR{align-items:center;background:#fff;border-radius:6px;box-shadow:0 4px 36px 0 rgba(51,51,51,.08)!important;box-sizing:border-box;display:flex;flex-direction:column;flex-wrap:wrap;gap:8px!important;padding:8px!important;width:136px}.TooltipIconLarge-module_large_tooltip_img__rpH1F{border-radius:3px;height:120px!important;width:120px!important}@media (max-width:959px){.TooltipIconLarge-module_large_tooltip__gzcyR{width:104px!important}.TooltipIconLarge-module_large_tooltip_img__rpH1F{border-radius:3px;height:88px!important;width:88px!important}}");
        var eu = ["children", "reference", "className", "placement", "checked"];
        window.touchStartTime = null, window.touchEndTime = null;
        var tu, nu, ru, iu, ou = e => {
            var {
              children: t = null,
              reference: n = null,
              className: r = "",
              placement: i = "top",
              checked: o = null
            } = e, a = g(e, eu), [s, l] = dt(!1), c = vt(null), {
              context: u,
              x: p,
              y: d,
              strategy: f,
              floating: m,
              reference: v,
              placement: _,
              middlewareData: {
                arrow: {
                  x: b,
                  y: y
                } = {}
              }
            } = Xc({
              middleware: [tc(10), nc({
                padding: 8
              }), Lc({
                element: c
              })],
              open: s,
              placement: i,
              onOpenChange: l,
              whileElementsMounted: Dc
            }), {
              getReferenceProps: w,
              getFloatingProps: x
            } = Yc([$c(u)]), [k, C] = dt(!1);
            Dl((() => {
              pa() || C(!0)
            }));
            var S = {
              top: "bottom",
              bottom: "top"
            } [(_ || "").split("-")[0]];
            return Hl(Pe, k ? {
              children: [Hl("span", h(h(h({
                ref: v
              }, w()), {}, {
                className: jl("pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block", r)
              }, a), {}, {
                children: n || Hl(Bl, {
                  className: "pk-cursor-pointer"
                })
              })), t && s && Hl("div", h(h({
                className: jl(
                  "relative pk-max-w-[50vw] pk-py-2 pk-px-3 pk-bg-white pk-rounded-md pk-shadow-[0px_4px_18px_rgb(0_0_0_/_10%)] pk-transform-[matrix(-1,0,0,1,0,0)] pk-z-[9999] pk-break-words md:pk-max-w-[33vw] !pk-text-[14px]", Qc
                  .large_tooltip),
                ref: m,
                style: {
                  position: f,
                  top: null != d ? d : 0,
                  left: null != p ? p : 0,
                  hyphens: "auto"
                }
              }, x()), {}, {
                children: [Hl(Wl, {
                  style: {
                    textAlign: "center",
                    wordBreak: "break-all"
                  },
                  children: t
                }), Hl("div", {
                  className: Qc.large_tooltip_img,
                  children: n || Hl(Bl, {
                    className: "pk-cursor-pointer"
                  })
                }), Hl("div", {
                  className: "pk-absolute pk-border-[5px] pk-border-transparent pk-border-t-white pk-filter-[drop-shadow(0px_4px_18px_rgb(0_0_0_/_10%))]",
                  style: {
                    left: b,
                    top: y,
                    [S]: "-10px"
                  },
                  ref: c
                })]
              }))]
            } : {
              children: [Hl("span", h(h(h({
                ref: v
              }, w()), {}, {
                className: jl("pk-flex pk-justify-center pk-items-center pk-leading-none pk-inline-block", r, Qc.mobile_switch)
              }, a), {}, {
                children: n || Hl(Bl, {
                  className: "pk-cursor-pointer"
                })
              })), t && s && o && Hl("div", h(h({
                className: jl(
                  "relative pk-max-w-[50vw] pk-py-2 pk-px-3 pk-bg-white pk-rounded-md pk-shadow-[0px_4px_18px_rgb(0_0_0_/_10%)] pk-transform-[matrix(-1,0,0,1,0,0)] pk-z-[9999] pk-break-words md:pk-max-w-[33vw] !pk-text-[14px]", Qc
                  .large_tooltip),
                ref: m,
                style: {
                  position: f,
                  top: null != d ? d : 0,
                  left: null != p ? p : 0,
                  hyphens: "auto"
                }
              }, x()), {}, {
                children: [Hl(Wl, {
                  style: {
                    textAlign: "center",
                    wordBreak: "break-all"
                  },
                  children: t
                }), Hl("div", {
                  className: Qc.large_tooltip_img,
                  children: n || Hl(Bl, {
                    className: "pk-cursor-pointer"
                  })
                }), Hl("div", {
                  className: "pk-absolute pk-border-[5px] pk-border-transparent pk-border-t-white pk-filter-[drop-shadow(0px_4px_18px_rgb(0_0_0_/_10%))]",
                  style: {
                    left: b,
                    top: y,
                    [S]: "-10px"
                  },
                  ref: c
                })]
              }))]
            })
          },
          au = window.SHOP_PARAMS.finance_symbol,
          su = (null === (tu = window) || void 0 === tu || null === (nu = tu.C_SETTINGS) || void 0 === nu || null === (ru = nu.market) || void 0 === ru || null === (iu = ru.market_price_setting) || void 0 === iu ? void 0 : iu.actual_rate) || 1,
          lu = 1e5,
          cu = Ft((function(e, t) {
            var n, {
                optionData: r,
                control: i,
                name: o,
                children: a,
                help: s,
                label: l,
                tag: c = "div",
                alwaysShowError: u = !1
              } = e,
              {
                errors: h,
                isSubmitted: p
              } = rs({
                name: o,
                control: i
              }),
              d = (null == s ? void 0 : s.value) && "below" === (null == s ? void 0 : s.type),
              f = null == h || null === (n = h[o]) || void 0 === n ? void 0 : n.message,
              g = () => {
                var e;
                return "boolean" == typeof u ? u : "object" == typeof u ? (null == u ? void 0 : u[null == h || null === (e = h[o]) || void 0 === e ? void 0 : e.type]) || !1 : void 0
              },
              m = () => ((e, t) => {
                var n;
                if (null === (n = e[t.fid]) || void 0 === n || !n.length) return 0;
                if (Number(null == t ? void 0 : t.price)) return Number(t.price) ? (Number(t.price) * lu * su / lu).toFixed(2) : 0;
                var r, i = 0;
                return ["swatch", "dropdown", "button", "checkbox"].includes(null == t ? void 0 : t.type) && (null === (r = t.options) || void 0 === r || r.forEach((n => {
                  ("dropdown" === t.type ? e[t.fid] === n.label : e[t.fid].includes(n.label)) && (i += Number(n.price) || 0)
                }))), i ? (i * lu * su / lu).toFixed(2) : 0
              })(e.control._formValues, r);
            return Hl(c, {
              ref: t,
              children: [Hl("div", {
                className: jl("pk-break-words pk-text-sm md:pk-text-base", {
                  "pk-mb-3": l && "swatch" !== r.type,
                  "pk-mb-2.5": l && "swatch" === r.type
                }),
                style: {
                  hyphens: "auto",
                  wordBreak: "break-word"
                },
                children: ((e, t) => {
                  var n = !!m() && '\n      <span>(</span>\n      <span>+</span>\n      <span class="money notranslate">'.concat(au).concat(m(), "</span>\n      <span>)&nbsp;</span>\n      ");
                  return Hl("div", {
                    className: jl("pk-flex items-center relative", pa() ? "!pk-text-[14px]" : "!pk-text-[15px]"),
                    children: [Hl(Wl, {
                      tagName: "div",
                      className: "pk-font-medium appparkeet_form_item_title",
                      children: e
                    }), (null == t ? void 0 : t.value) && "tooltip" === t.type && Hl(Jc, {
                      className: "pk-mx-1 pk-text-[14px]",
                      children: t.value
                    }), Hl("div", {
                      className: "pk-ml-1.5 pk-flex pk-items-center pk-font-semibold notranslate",
                      dangerouslySetInnerHTML: {
                        __html: n
                      }
                    }), Hl(Wl, {
                      children: ":"
                    })]
                  }, "title")
                })(l, s)
              }), a, Hl(Wl, {
                tagName: "p",
                style: {
                  hyphens: "auto"
                },
                className: jl("pk-text-[#DB393A] pk-text-xs md:pk-text-sm", {
                  "pk-mt-2": (p || g()) && f
                }),
                children: (p || g()) && f
              }, f), Hl(Wl, {
                tagName: "p",
                style: {
                  hyphens: "auto"
                },
                className: jl("pk-text-[#7A7A7A] pk-text-xs md:pk-text-sm pk-break-words", {
                  "pk-mt-2": d
                }),
                children: d && s.value
              })]
            })
          })),
          uu = Rt(cu, ((e, t) => e.children === t.children)),
          hu = e => {
            var {
              value: t,
              onChange: n,
              multiple: r
            } = e, {
              max: i = Number.MAX_SAFE_INTEGER
            } = r || {}, o = Boolean(r && i > 1), a = function(e) {
              const t = vt(e);
              t.current = bt((() => e), [e]);
              const n = vt();
              return n.current || (n.current = function(...e) {
                return t.current.apply(this, e)
              }), n.current
            }((e => {
              var {
                value: r,
                checked: a
              } = e, s = {
                true_true: () => [...t, r],
                true_false: () => [r],
                false_true: () => t.filter((e => e !== r)),
                false_false: () => []
              } ["".concat(Boolean(a), "_").concat(o)]();
              if (!(o && s.length > i)) return null == n || n(s), s
            }));
            return {
              toggleOption: a
            }
          };
        var pu = new class {
            constructor() {
              this.bus = {}
            }
            $off(e, t) {
              var n;
              if (this.bus[e]) {
                var r = null === (n = this.bus[e]) || void 0 === n ? void 0 : n.findIndex((e => e === t));
                r >= 0 && this.bus[e].splice(r, 1)
              }
            }
            $on(e, t) {
              var n = this.bus[e];
              this.bus[e] = n ? [...n, t] : [t]
            }
            $emit(e) {
              for (var t, n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), i = 1; i < n; i++) r[i - 1] = arguments[i];
              null === (t = this.bus[e]) || void 0 === t || t.forEach((e => {
                e(...r)
              }))
            }
          },
          du = Qe(),
          fu = (e, t) => {
            var n, r, i, o = "";
            2 === (null === (n = e.preview_setting) || void 0 === n ? void 0 : n.type) ? o = null === (r = e.preview_setting.data.filter((e => e.variant_id === t))[0]) || void 0 === r ? void 0 : r.bg_image_url : o = null === (i = e
              .preview_setting.data[0]) || void 0 === i ? void 0 : i.bg_image_url;
            return o
          },
          gu = Qe({}),
          mu = e => {
            var {
              size: t,
              optionData: n,
              control: r,
              children: i,
              options: o,
              defaultValue: a = [],
              fieldName: s,
              propertyName: l,
              name: c,
              required: u,
              multiple: p,
              help: d,
              visible: f
            } = e, g = bt((() => o || Fe(i).map((e => e.props)) || []), [i, o]), {
              formatMessage: m
            } = vo(), {
              min: v = 0
            } = p || {}, {
              field: {
                onChange: _,
                onBlur: b,
                value: y,
                ref: w
              }
            } = cs({
              control: r,
              name: s,
              rules: {
                validate: {
                  min: e => !p || !(null != e && e.length) || (null == e ? void 0 : e.length) >= v || Ll(v),
                  required: e => !u || (null == e ? void 0 : e.length) >= 1 || m({
                    id: "required_tip"
                  })
                }
              },
              defaultValue: a
            }), {
              toggleOption: x
            } = hu({
              value: y,
              multiple: p,
              onChange: _
            }), k = y.join(",");
            return Hl(gu.Provider, {
              value: bt((() => ({
                toggleOption: x
              })), [x]),
              children: f ? Hl(cu, {
                optionData: n,
                name: s,
                label: c,
                help: d,
                control: r,
                children: [Hl("div", {
                  onBlur: b,
                  className: "pk-flex pk-flex-wrap pk--mt-1.5 pk--ml-2 pk-outline-none",
                  ref: w,
                  tabIndex: "0",
                  children: g.map((n => {
                    var {
                      label: r
                    } = n, i = null == y ? void 0 : y.includes(r);
                    return Hl(vu, h(h({}, n), {}, {
                      checked: i,
                      size: t,
                      optionItem: e
                    }), r)
                  }))
                }), Hl("input", {
                  type: "hidden",
                  name: y.length > 0 ? "properties[".concat(l, "]") : "",
                  value: k || ""
                })]
              }) : null
            })
          },
          vu = Rt((function(e) {
            var {
              type: t,
              value: n,
              label: r,
              checked: i = !1,
              size: o,
              optionItem: a
            } = e, {
              toggleOption: s
            } = wt(gu), l = wt(du);
            return "52px" === o && "img" === t ? Hl(ou, {
              checked: i,
              placement: "top",
              className: jl("pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden", {
                "pk-ring-2 pk-ring-offset-2 pk-ring-[#333]": i,
                "pk-w-11 pk-h-11": "52px" === o || !o,
                "pk-w-18 pk-h-18": "80px" === o,
                "pk-w-23 pk-h-23": "100px" === o
              }),
              onClick: () => {
                var e, t = s({
                  checked: !i,
                  value: r
                });
                if (null != a && null !== (e = a.preview_setting) && void 0 !== e && e.preview_open) {
                  var n, o, c, u, h = fu(a, l);
                  pu.$emit(F, {
                    bg_image_url: h,
                    checked_fids: null == a || null === (n = a.options) || void 0 === n || null === (o = n.filter((e => t.includes(e.label)))) || void 0 === o ? void 0 : o.map((e => e.fid)),
                    un_checked_fids: null == a || null === (c = a.options) || void 0 === c || null === (u = c.filter((e => !t.includes(e.label)))) || void 0 === u ? void 0 : u.map((e => e.fid))
                  })
                }
              },
              style: "color" === t && {
                backgroundColor: n
              },
              reference: "img" === t ? Hl("div", {
                data: Ea(n),
                style: {
                  backgroundImage: "url(".concat(window.SHOP_PARAMS.default_img, ")")
                },
                className: "pk-w-full pk-h-full pk-object-cover pk-object-center pk-rounded-[3px]",
                children: Hl("img", {
                  src: Ea(n),
                  alt: r,
                  style: {
                    objectFit: "cover"
                  },
                  className: "pk-w-full pk-h-full pk-object-cover pk-object-center pk-rounded-[3px]"
                })
              }) : Hl(Pe, {}),
              children: r && r
            }) : Hl(Jc, {
              placement: "top",
              className: jl("pk-flex-none pk-relative pk-block pk-cursor-pointer pk-rounded-[3px] pk-mt-3 pk-ml-3 pk-overflow-hidden", {
                "pk-ring-2 pk-ring-offset-2 pk-ring-[#333]": i,
                "pk-w-11 pk-h-11": "52px" === o || !o,
                "pk-w-18 pk-h-18": "80px" === o,
                "pk-w-23 pk-h-23": "100px" === o
              }),
              onClick: () => {
                var e, t = s({
                  checked: !i,
                  value: r
                });
                if (null != a && null !== (e = a.preview_setting) && void 0 !== e && e.preview_open) {
                  var n, o, c, u, h = fu(a, l);
                  pu.$emit(F, {
                    bg_image_url: h,
                    checked_fids: null == a || null === (n = a.options) || void 0 === n || null === (o = n.filter((e => t.includes(e.label)))) || void 0 === o ? void 0 : o.map((e => e.fid)),
                    un_checked_fids: null == a || null === (c = a.options) || void 0 === c || null === (u = c.filter((e => !t.includes(e.label)))) || void 0 === u ? void 0 : u.map((e => e.fid))
                  })
                }
              },
              style: "color" === t && {
                backgroundColor: n
              },
              reference: "img" === t ? Hl("object", {
                data: Ea(n),
                className: "pk-w-full pk-h-full pk-object-cover pk-object-center",
                children: Hl("img", {
                  src: window.SHOP_PARAMS.default_img,
                  alt: r,
                  className: "pk-w-full pk-h-full pk-object-cover pk-object-center"
                })
              }) : Hl(Pe, {}),
              children: r && r
            })
          }), ((e, t) => e.checked === t.checked && e.label === t.label && e.value === t.value && e.type === t.type && e.selected_value === t.selected_value));
        mu.Option = () => null;
        var _u, bu = mu,
          yu = "Dropdown-module_dropdown-label__8sSmb";

        function wu() {
          return wu = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, wu.apply(this, arguments)
        }
        c(".Dropdown-module_dropdown-label__8sSmb[\\:has\\(select\\:focus\\)]{border:1px solid #333!important}.Dropdown-module_dropdown-label__8sSmb:has(select:focus){border:1px solid #333!important}");
        var xu = e => Te("svg", wu({
            width: 16,
            height: 16,
            fill: "none",
            xmlns: "http://www.w3.org/2000/svg"
          }, e), _u || (_u = Te("path", {
            fillRule: "evenodd",
            clipRule: "evenodd",
            d: "M3.2 6.4a.8.8 0 0 1 1.366-.566L8 9.27l3.434-3.434a.8.8 0 1 1 1.131 1.13l-4 4a.8.8 0 0 1-1.13 0l-4-4A.798.798 0 0 1 3.2 6.4Z",
            fill: "#6D7175"
          }))),
          ku = function(e) {
            var {
              optionData: t,
              control: n,
              name: r,
              fieldName: i,
              propertyName: o,
              options: a,
              children: s,
              placeholder: l = "",
              defaultValue: c = "",
              required: u,
              help: h,
              visible: p
            } = e, d = bt((() => a || Fe(s).map((e => e.props)) || []), [s, a]), {
              formatMessage: f
            } = vo(), {
              field: {
                onChange: g,
                onBlur: m,
                value: v,
                ref: _
              },
              fieldState: {
                error: b
              },
              formState: {
                isSubmitted: y
              }
            } = cs({
              control: n,
              name: i,
              rules: {
                required: {
                  value: !!u,
                  message: f({
                    id: "required_tip"
                  })
                }
              },
              defaultValue: c
            });
            return Hl(Pe, {
              children: p ? Hl(cu, {
                optionData: t,
                name: i,
                label: r,
                help: h,
                tag: Pe,
                control: n,
                children: Hl("label", {
                  className: jl("pk-block pk-border pk-border-[#D1D1D1] pk-rounded pk-overflow-hidden pk-relative pk-block pk-bg-white pk-leading-[0px] pk-outline-none pk-my-0", y && null != b && b.message ? "pk-border-[#DB393A]" :
                    "pk-border-[#D1D1D1]", yu),
                  tabIndex: "1",
                  ref: _,
                  children: [Hl("div", {
                    className: "pk-absolute pk-top-0 pk-left-0 pk-w-full pk-h-full pk-flex pk-items-center pk-cursor-pointer pk-pointer-events-none",
                    children: [l && !v && Hl(Wl, {
                      tagName: "span",
                      className: "pk-flex-1 pk-truncate pk-ml-3 pk-select-none pk-text-[#93989D] pk-text-sm pk-leading-5",
                      children: l
                    }), Hl(xu, {
                      className: "pk-ml-auto pk-mr-4 pk-cursor-pointer"
                    })]
                  }), Hl("input", {
                    type: "hidden",
                    name: v ? "properties[".concat(o, "]") : "",
                    value: v
                  }), Hl("select", {
                    name: ca,
                    onBlur: m,
                    className: jl("pk-w-full pk-py-3.5 pk-pl-4 pk-pr-10.5 pk-cursor-pointer pk-appearance-none pk-text-sm pk-leading-5 pk-outline-none pk-truncate pk-bg-white", {
                      "pk-opacity-0": !v
                    }),
                    value: v,
                    onInput: e => {
                      var t = d.reduce(((t, n) => (n.label === e.target.value && (t = n.redirect_url), t)), "");
                      t ? location.href = t : g(e.target.value)
                    },
                    children: [Hl(Wl, {
                      tagName: "option",
                      value: "",
                      children: "-No selection-"
                    }), d.map((e => Hl(Wl, {
                      tagName: "option",
                      value: e.label,
                      children: e.label
                    }, e.label)))]
                  })]
                })
              }) : null
            })
          };
        ku.Option = () => null;
        var Cu, Su, Eu, Tu = ku,
          Ou = "Text-module_text-label__8sMmT",
          Au = "Text-module_text_preview_contaniner__X8vAR",
          Pu = "Text-module_font_color_area__Zch0o",
          Mu = "Text-module_font_family_area__BUzEb",
          Du = "Text-module_font_size_area__KmeEO",
          Iu = "Text-module_preview_item_label__akFsR",
          Nu = "Text-module_color_block_wrapper__0K3rY",
          Ru = "Text-module_color_block__8LhBv",
          ju = "Text-module_font_family_select_wrapper__N-f37",
          Lu = "Text-module_font_family_select__otjrz",
          Fu = "Text-module_arrow_down_icon__GZiHO",
          Bu = "Text-module_font_size_wrapper__TRp3a",
          zu = "Text-module_input_up__huYER",
          Hu = "Text-module_input_down__g1FF8",
          Uu = "Text-module_font_size_input__fMl0u";

        function Wu() {
          return Wu = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Wu.apply(this, arguments)
        }
        c(
        ".Text-module_text-label__8sMmT[\\:has\\(input\\:focus\\)]{border:1px solid #333}.Text-module_text-label__8sMmT:has(input:focus){border:1px solid #333}.Text-module_text_preview_contaniner__X8vAR{display:flex;flex-direction:column;flex-wrap:wrap;gap:20px;margin-top:20px}.Text-module_font_color_area__Zch0o,.Text-module_font_family_area__BUzEb,.Text-module_font_size_area__KmeEO{align-items:flex-start;display:flex;flex-direction:column;gap:12px;width:100%}.Text-module_preview_item_label__akFsR{color:rgba(51,51,51,.9);font-size:15px;line-height:130%}.Text-module_color_block_wrapper__0K3rY{align-items:flex-start;align-self:stretch;display:flex;flex-wrap:wrap;gap:4px;width:100%}.Text-module_color_block__8LhBv{align-items:center;border-radius:6px;box-sizing:border-box;cursor:pointer;display:flex;height:52px;justify-content:center;padding:0;width:52px}.Text-module_font_family_select_wrapper__N-f37{border:1px solid rgba(51,51,51,.12)!important;border-radius:4px;overflow:hidden;position:relative;width:100%}.Text-module_font_family_select__otjrz{-webkit-appearance:none;appearance:none;background:#fff;border:none!important;color:#333!important;cursor:pointer;font-size:14px!important;font-weight:500!important;height:100%;line-height:130%!important;overflow:hidden;padding:14px 42px 14px 16px!important;text-overflow:ellipsis;white-space:nowrap;width:100%}.Text-module_arrow_down_icon__GZiHO{cursor:pointer;position:absolute;right:16px;top:16px}.Text-module_font_size_wrapper__TRp3a{-webkit-tap-highlight-color:#fff;align-items:center;background:#fff;border:1px solid rgba(51,51,51,.12)!important;border-radius:4px;box-sizing:border-box;display:flex;gap:10px;height:44px;outline:none;padding:5px 39px 5px 16px;position:relative;width:120px}.Text-module_input_up__huYER{cursor:pointer;position:absolute;right:5px;top:3px}.Text-module_input_up__huYER:hover rect{fill:#dbdddf}.Text-module_input_up__huYER:active rect{fill:#c9ccd0}.Text-module_input_down__g1FF8{cursor:pointer;position:absolute;right:5px;top:23px}.Text-module_input_down__g1FF8:active rect{fill:#c9ccd0}.Text-module_font_size_input__fMl0u{-webkit-appearance:none!important;appearance:none!important;font-size:14px!important;font-weight:500!important;height:100%;line-height:130%!important;outline:none!important;width:100%}");
        var Vu, Xu, Gu, Yu = e => Te("svg", Wu({
          width: 24,
          height: 16,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), Cu || (Cu = Te("rect", {
          width: 24,
          height: 16,
          rx: 2,
          fill: "#E4E5E7"
        })), Su || (Su = Te("g", {
          clipPath: "url(#InputUp_svg__a)"
        }, Te("path", {
          fillRule: "evenodd",
          clipRule: "evenodd",
          d: "M15.319 9.75c.39 0 .585-.471.309-.747l-3.319-3.319a.437.437 0 0 0-.618 0l-3.32 3.32a.437.437 0 0 0 .31.746h6.638Z",
          fill: "#6D7175"
        }))), Eu || (Eu = Te("defs", null, Te("clipPath", {
          id: "InputUp_svg__a"
        }, Te("path", {
          fill: "#fff",
          transform: "translate(5 1)",
          d: "M0 0h14v14H0z"
        })))));

        function qu() {
          return qu = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, qu.apply(this, arguments)
        }
        var Ku, $u, Zu, Ju = e => Te("svg", qu({
            width: 24,
            height: 16,
            fill: "none",
            xmlns: "http://www.w3.org/2000/svg"
          }, e), Vu || (Vu = Te("rect", {
            width: 24,
            height: 16,
            rx: 2,
            transform: "matrix(1 0 0 -1 0 16)",
            fill: "#E4E5E7"
          })), Xu || (Xu = Te("g", {
            clipPath: "url(#InputDown_svg__a)"
          }, Te("path", {
            fillRule: "evenodd",
            clipRule: "evenodd",
            d: "M15.319 6.25c.39 0 .585.471.309.747l-3.319 3.319a.437.437 0 0 1-.618 0l-3.32-3.32a.437.437 0 0 1 .31-.746h6.638Z",
            fill: "#6D7175"
          }))), Gu || (Gu = Te("defs", null, Te("clipPath", {
            id: "InputDown_svg__a"
          }, Te("path", {
            fill: "#fff",
            transform: "matrix(1 0 0 -1 5 15)",
            d: "M0 0h14v14H0z"
          }))))),
          Qu = e => {
            var t, n, r, i, {
                control: o,
                defaultValue: a = "",
                fieldName: s,
                propertyName: l,
                name: c,
                required: u,
                help: p,
                placeholder: d,
                optionData: f,
                maximum: g,
                visible: m,
                preview_setting: v = {},
                textStyleChange: _ = (() => {})
              } = e,
              [b, y] = dt(!0),
              [w, x] = dt(v.selected_color || (null === (t = v.text_colors) || void 0 === t ? void 0 : t[0]) || "black"),
              [k, C] = dt(null === (n = v.text_families) || void 0 === n ? void 0 : n[0]),
              [S, E] = dt(v.text_size),
              {
                formatMessage: T
              } = vo(),
              O = sa((e => {
                M(e), null == _ || _({
                  textColor: w,
                  textFont: k,
                  textSize: S,
                  isInit: b,
                  textValue: e.target.value
                })
              }), 200),
              A = e => {
                var t = e.target.value;
                /^\d+$/.test(t) ? (t < 10 ? t = 10 : t > 128 && (t = 128), E(t)) : E(v.text_size)
              };
            gt((() => {
              b ? (y(!1), setTimeout((() => {
                null == _ || _({
                  textColor: w,
                  textFont: k,
                  textSize: S,
                  textValue: I,
                  isInit: !0
                })
              }), 500)) : null == _ || _({
                textColor: w,
                textFont: k,
                textSize: S,
                textValue: I,
                isInit: !1
              })
            }), [w, k, S]);
            var P = g || 500,
              {
                field: {
                  onChange: M,
                  onBlur: D,
                  value: I,
                  ref: N
                },
                fieldState: {
                  error: R
                },
                formState: {
                  isSubmitted: j
                }
              } = cs({
                control: o,
                name: s,
                rules: {
                  required: {
                    value: !!u,
                    message: T({
                      id: "required_tip"
                    })
                  }
                },
                defaultValue: a
              }),
              L = j && (null == R ? void 0 : R.message) || "maxLength" === (null == R ? void 0 : R.type),
              F = {
                className: jl("pk-flex-1 placeholder:pk-text-[color:#93989D] pk-outline-none", {
                  "pk-bg-transparent": L,
                  "pk-truncate": !I
                }),
                maxLength: P,
                type: "text",
                autoComplete: "off",
                placeholder: d,
                name: "properties[".concat(l, "]"),
                onBlur: D,
                onFocus: e => {
                  (e.target.value || 0 === e.target.value) && (null == _ || _({
                    textColor: w,
                    textFont: k,
                    textSize: S,
                    textValue: e.target.value
                  }))
                },
                onChange: O,
                value: I
              };
            return Hl(Pe, {
              children: m ? Hl(Pe, {
                children: [Hl(uu, {
                  optionData: f,
                  label: c,
                  name: s,
                  help: p,
                  control: o,
                  alwaysShowError: {
                    maxLength: !0
                  },
                  children: Hl("label", {
                    className: jl("pk-flex pk-w-full pk-py-3.5 pk-px-4 pk-appearance-none pk-rounded pk-text-sm pk-leading-5 pk-outline-none pk-truncate pk-bg-white pk-border pk-cursor-text", L ? "" : Ou, L ?
                      "pk-border-[#DB393A]" : "pk-border-[#D1D1D1]"),
                    ref: N,
                    children: [null !== (r = window) && void 0 !== r && null !== (i = r.appparakeet_switch) && void 0 !== i && i.preview_fixed ? Hl("textarea", h({}, F)) : Hl("input", h({}, F)), I.length >= P - 10 && Hl(
                    "span", {
                      className: "pk-flex-none pk-text-[#93989D] pk-pointer-events-none pk-ml-3",
                      children: [I.length, "/", P]
                    })]
                  })
                }), v && v.preview_open && Hl("div", {
                  className: Au,
                  children: [v.text_colors && v.text_colors.length > 1 && Hl("div", {
                    className: Pu,
                    children: [Hl("div", {
                      className: jl(Iu, "pk-font-medium", pa() ? "!pk-text-[14px]" : "!pk-text-[15px]"),
                      children: [T({
                        id: "font_color"
                      }), " :"]
                    }), Hl("div", {
                      className: Nu,
                      children: v.text_colors && v.text_colors.map((e => Hl("div", {
                        className: jl(Ru),
                        style: {
                          border: "2px solid ".concat(w === e ? e : "transparent")
                        },
                        onClick: () => x(e),
                        children: Hl("div", {
                          style: {
                            background: e,
                            width: "44px",
                            height: "44px",
                            borderRadius: "3px"
                          }
                        })
                      }, e)))
                    })]
                  }), v.text_families && v.text_families.length > 1 && Hl("div", {
                    className: Mu,
                    children: [Hl("div", {
                      className: jl(Iu, "pk-font-medium", pa() ? "!pk-text-[14px]" : "!pk-text-[15px]"),
                      children: [T({
                        id: "font"
                      }), " :"]
                    }), Hl("div", {
                      className: ju,
                      children: [Hl("select", {
                        className: Lu,
                        value: k,
                        onChange: e => {
                          (e => {
                            C(e.target.value)
                          })(e)
                        },
                        children: v.text_families && v.text_families.map((e => Hl("option", {
                          value: e,
                          children: e
                        }, e)))
                      }), Hl("div", {
                        className: Fu,
                        children: Hl(xu, {})
                      })]
                    })]
                  }), v.adjust_font_size && Hl("div", {
                    className: Du,
                    children: [Hl("div", {
                      className: jl(Iu, "pk-font-medium", pa() ? "!pk-text-[14px]" : "!pk-text-[15px]"),
                      children: [T({
                        id: "font_size"
                      }), " :"]
                    }), Hl("div", {
                      className: Bu,
                      children: [Hl("input", {
                        type: "text",
                        className: Uu,
                        value: S,
                        onBlur: e => {
                          A(e)
                        },
                        onFocus: e => {
                          A(e)
                        },
                        onChange: e => {
                          (e => {
                            var {
                              value: t
                            } = e.target;
                            E(t)
                          })(e)
                        }
                      }), Hl(Yu, {
                        onClick: () => {
                          Number(S) >= 128 || E((e => Number(e) + 1))
                        },
                        className: zu
                      }), Hl(Ju, {
                        className: Hu,
                        onClick: () => {
                          Number(S) <= 10 || E((e => Number(e) - 1))
                        }
                      })]
                    })]
                  })]
                })]
              }) : null
            })
          },
          eh = e => {
            var t, n, {
                control: r,
                defaultValue: i = "",
                fieldName: o,
                propertyName: a,
                name: s,
                required: l,
                help: c,
                placeholder: u,
                optionData: h,
                maximum: p,
                visible: d,
                preview_setting: f = {},
                textStyleChange: g = (() => {})
              } = e,
              [m, v] = dt(!0),
              [_, b] = dt(f.selected_color || (null === (t = f.text_colors) || void 0 === t ? void 0 : t[0]) || "black"),
              [y, w] = dt(null === (n = f.text_families) || void 0 === n ? void 0 : n[0]),
              [x, k] = dt(f.text_size),
              {
                formatMessage: C
              } = vo(),
              {
                field: {
                  onChange: S,
                  onBlur: E,
                  value: T,
                  ref: O
                },
                fieldState: {
                  error: A
                },
                formState: {
                  isSubmitted: P
                }
              } = cs({
                control: r,
                name: o,
                rules: {
                  required: {
                    value: !!l,
                    message: C({
                      id: "required_tip"
                    })
                  }
                },
                defaultValue: i
              }),
              M = e => {
                var t = e.target.value;
                /^\d+$/.test(t) ? (t < 10 ? t = 10 : t > 128 && (t = 128), k(t)) : k(f.text_size)
              };
            gt((() => {
              m ? (v(!1), null == g || g({
                textColor: _,
                textFont: y,
                textSize: x,
                textValue: T,
                isInit: !0
              })) : null == g || g({
                textColor: _,
                textFont: y,
                textSize: x,
                textValue: T,
                isInit: !1
              })
            }), [_, y, x]);
            var D = p || 500,
              I = P && (null == A ? void 0 : A.message) || "maxLength" === (null == A ? void 0 : A.type);
            return Hl(Pe, {
              children: d ? Hl(Pe, {
                children: [Hl(uu, {
                  optionData: h,
                  label: s,
                  name: o,
                  help: c,
                  control: r,
                  alwaysShowError: {
                    maxLength: !0
                  },
                  children: Hl("label", {
                    className: jl("pk-flex pk-w-full pk-py-3.5 pk-px-4 pk-appearance-none pk-rounded pk-text-sm pk-leading-5 pk-outline-none pk-truncate pk-bg-white pk-border pk-cursor-text", I ? "" : Ou, I ?
                      "pk-border-[#DB393A]" : "pk-border-[#D1D1D1]"),
                    ref: O,
                    children: [Hl("input", {
                      className: jl("pk-flex-1 placeholder:pk-text-[color:#93989D] pk-outline-none", {
                        "pk-bg-transparent": I,
                        "pk-truncate": !T
                      }),
                      max: "9999-12-31",
                      maxLength: D,
                      type: "date",
                      autoComplete: "off",
                      placeholder: u,
                      name: "properties[".concat(a, "]"),
                      onBlur: E,
                      onFocus: e => {
                        (e.target.value || 0 === e.target.value) && (null == g || g({
                          textColor: _,
                          textFont: y,
                          textSize: x,
                          textValue: e.target.value
                        }))
                      },
                      onChange: e => {
                        (e => {
                          S(e), null == g || g({
                            textColor: _,
                            textFont: y,
                            textSize: x,
                            isInit: m,
                            textValue: e.target.value
                          })
                        })(e)
                      },
                      value: T
                    }), T.length >= D - 10 && Hl("span", {
                      className: "pk-flex-none pk-text-[#93989D] pk-pointer-events-none pk-ml-3",
                      children: [T.length, "/", D]
                    })]
                  })
                }), f && f.preview_open && Hl("div", {
                  className: Au,
                  children: [f.text_colors && f.text_colors.length > 1 && Hl("div", {
                    className: Pu,
                    children: [Hl("div", {
                      className: jl(Iu, "pk-font-medium", pa() ? "!pk-text-[14px]" : "!pk-text-[15px]"),
                      children: [C({
                        id: "font_color"
                      }), " :"]
                    }), Hl("div", {
                      className: Nu,
                      children: f.text_colors && f.text_colors.map((e => Hl("div", {
                        className: jl(Ru),
                        style: {
                          border: "2px solid ".concat(_ === e ? e : "transparent")
                        },
                        onClick: () => b(e),
                        children: Hl("div", {
                          style: {
                            background: e,
                            width: "44px",
                            height: "44px",
                            borderRadius: "3px"
                          }
                        })
                      }, e)))
                    })]
                  }), f.text_families && f.text_families.length > 1 && Hl("div", {
                    className: Mu,
                    children: [Hl("div", {
                      className: jl(Iu, "pk-font-medium", pa() ? "!pk-text-[14px]" : "!pk-text-[15px]"),
                      children: [C({
                        id: "font"
                      }), " :"]
                    }), Hl("div", {
                      className: ju,
                      children: [Hl("select", {
                        className: Lu,
                        value: y,
                        onChange: e => {
                          (e => {
                            w(e.target.value)
                          })(e)
                        },
                        children: f.text_families && f.text_families.map((e => Hl("option", {
                          value: e,
                          children: e
                        }, e)))
                      }), Hl("div", {
                        className: Fu,
                        children: Hl(xu, {})
                      })]
                    })]
                  }), f.adjust_font_size && Hl("div", {
                    className: Du,
                    children: [Hl("div", {
                      className: jl(Iu, "pk-font-medium", pa() ? "!pk-text-[14px]" : "!pk-text-[15px]"),
                      children: [C({
                        id: "font_size"
                      }), " :"]
                    }), Hl("div", {
                      className: Bu,
                      children: [Hl("input", {
                        type: "text",
                        className: Uu,
                        value: x,
                        onBlur: e => {
                          M(e)
                        },
                        onFocus: e => {
                          M(e)
                        },
                        onChange: e => {
                          (e => {
                            var {
                              value: t
                            } = e.target;
                            k(t)
                          })(e)
                        }
                      }), Hl(Yu, {
                        onClick: () => {
                          Number(x) >= 128 || k((e => Number(e) + 1))
                        },
                        className: zu
                      }), Hl(Ju, {
                        className: Hu,
                        onClick: () => {
                          Number(x) <= 10 || k((e => Number(e) - 1))
                        }
                      })]
                    })]
                  })]
                })]
              }) : null
            })
          },
          th = e => {
            var t, n, r, i, {
                optionData: o,
                control: a,
                defaultValue: s = [],
                fieldName: l,
                propertyName: c,
                name: u,
                required: h,
                help: p,
                options: d,
                multiple: f,
                visible: g
              } = e,
              {
                formatMessage: m
              } = vo(),
              {
                min: v = 0
              } = f || {},
              {
                field: {
                  onChange: _,
                  onBlur: b,
                  value: y,
                  ref: w
                }
              } = cs({
                control: a,
                name: l,
                rules: {
                  validate: {
                    min: e => !f || !(null != e && e.length) || (null == e ? void 0 : e.length) >= v || Ll(v),
                    required: e => !h || (null == e ? void 0 : e.length) >= 1 || m({
                      id: "required_tip"
                    })
                  }
                },
                defaultValue: s
              }),
              {
                toggleOption: x
              } = hu({
                value: y,
                multiple: f,
                onChange: _
              }),
              k = y.join(",");
            return Hl(Pe, {
              children: g && Hl(cu, {
                optionData: o,
                name: l,
                label: u,
                help: p,
                control: a,
                children: [Hl("div", {
                  ref: w,
                  "data-name": u,
                  "data-custom-class": null === (t = window) || void 0 === t || null === (n = t.appparakeet_custom_add_class) || void 0 === n ? void 0 : n[u],
                  className: "pk-flex pk-flex-wrap pk-gap-x-3 pk-gap-y-4 ".concat((null === (r = window) || void 0 === r || null === (i = r.appparakeet_custom_add_class) || void 0 === i ? void 0 : i[u]) || ""),
                  tabIndex: "0",
                  onBlur: b,
                  children: d.map((e => {
                    var {
                      label: t
                    } = e, n = null == y ? void 0 : y.includes(t);
                    return Hl("button", {
                      onClick: () => {
                        e.redirect_url ? location.href = e.redirect_url : x({
                          checked: !n,
                          value: t
                        })
                      },
                      type: "button",
                      dangerouslySetInnerHTML: {
                        __html: t
                      },
                      className: jl("pk-flex pk-items-center pk-justify-center pk-h-11.5 pk-min-w-[46px] pk-px-4 pk-rounded pk-text-[15px] pk-border-solid pk-outline-none", n ?
                        "pk-border-2 pk-border-[#333] focus:pk-border-[#333]" : "pk-text-opacity-80 pk-border pk-border-[#333/12]")
                    }, t)
                  }))
                }), Hl("input", {
                  type: "hidden",
                  name: y.length > 0 ? "properties[".concat(c, "]") : "",
                  value: k || ""
                })]
              })
            })
          };

        function nh() {
          return nh = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, nh.apply(this, arguments)
        }
        var rh, ih, oh = e => Te("svg", nh({
          width: 18,
          height: 18,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), Ku || (Ku = Te("rect", {
          width: 18,
          height: 18,
          rx: 4,
          fill: "#fff"
        })), $u || ($u = Te("path", {
          fillRule: "evenodd",
          clipRule: "evenodd",
          d: "M13.85 5.775a.731.731 0 0 1 0 1.034l-5.416 5.417a.731.731 0 0 1-1.034 0L4.69 9.517a.731.731 0 1 1 1.034-1.034l2.192 2.191 4.9-4.9a.731.731 0 0 1 1.033 0Z",
          fill: "#fff"
        })), Zu || (Zu = Te("rect", {
          x: .5,
          y: .5,
          width: 17,
          height: 17,
          rx: 3.5,
          stroke: "#333",
          strokeOpacity: .12
        })));

        function ah() {
          return ah = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, ah.apply(this, arguments)
        }
        var sh, lh, ch, uh = e => Te("svg", ah({
          width: 18,
          height: 18,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), rh || (rh = Te("rect", {
          width: 18,
          height: 18,
          rx: 4,
          fill: "#333"
        })), ih || (ih = Te("path", {
          fillRule: "evenodd",
          clipRule: "evenodd",
          d: "M13.85 5.775a.731.731 0 0 1 0 1.034l-5.416 5.417a.731.731 0 0 1-1.034 0L4.69 9.517a.731.731 0 1 1 1.034-1.034l2.192 2.191 4.9-4.9a.731.731 0 0 1 1.033 0Z",
          fill: "#fff"
        })));

        function hh() {
          return hh = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, hh.apply(this, arguments)
        }
        var ph, dh = e => Te("svg", hh({
          width: 18,
          height: 18,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), sh || (sh = Te("rect", {
          width: 18,
          height: 18,
          rx: 4,
          fill: "#fff"
        })), lh || (lh = Te("path", {
          fillRule: "evenodd",
          clipRule: "evenodd",
          d: "M13.85 5.775a.731.731 0 0 1 0 1.034l-5.416 5.417a.731.731 0 0 1-1.034 0L4.69 9.517a.731.731 0 1 1 1.034-1.034l2.192 2.191 4.9-4.9a.731.731 0 0 1 1.033 0Z",
          fill: "#fff"
        })), ch || (ch = Te("rect", {
          x: .5,
          y: .5,
          width: 17,
          height: 17,
          rx: 3.5,
          stroke: "#333",
          strokeOpacity: .12
        })));

        function fh() {
          return fh = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, fh.apply(this, arguments)
        }
        var gh = e => Te("svg", fh({
            xmlns: "http://www.w3.org/2000/svg",
            width: 18,
            height: 18,
            fill: "none"
          }, e), ph || (ph = Te("path", {
            fillRule: "evenodd",
            clipRule: "evenodd",
            d: "M2.352 1.023a1.33 1.33 0 0 0-1.33 1.33v13.295c0 .734.596 1.33 1.33 1.33h13.296a1.33 1.33 0 0 0 1.33-1.33V2.352a1.33 1.33 0 0 0-1.33-1.33H2.352Zm4.432 3.102c.975 0 1.773.798 1.773 1.773 0 .975-.798 1.772-1.773 1.772a1.778 1.778 0 0 1-1.773-1.772c0-.975.798-1.773 1.773-1.773Zm7.977 11.08H3.236a.439.439 0 0 1-.355-.7l3.15-3.591a.442.442 0 0 1 .638-.01l1.445 1.641 2.712-4.237a.443.443 0 0 1 .744.017l3.58 6.215a.45.45 0 0 1-.39.665Z",
            fill: "#BCBCBC"
          }))),
          mh = "Checkbox-module_checkbox_img__wHiW3",
          vh = "Checkbox-module_checkbox_img_default__S0ISH",
          _h = "Checkbox-module_checkbox_row__MJZge",
          bh = "Checkbox-module_label_checked__YpN49";
        c(
        ".Checkbox-module_checkbox_img__wHiW3{border-radius:3px;height:52px!important;margin-left:8px;width:52px}.Checkbox-module_checkbox_img_default__S0ISH{align-items:center;background-color:#f5f5f5;border-radius:3px;display:flex;height:52px!important;justify-content:center;margin-left:8px;width:52px}.Checkbox-module_checkbox_row__MJZge{align-items:stretch!important;display:flex!important;flex-wrap:wrap!important;gap:12px!important;margin-left:0!important;width:100%!important}.Checkbox-module_checkbox_row__MJZge>label{background:#fff!important;border:1px solid #e6e6e6!important;border-radius:6px!important;box-sizing:border-box!important;display:flex!important;flex-direction:column!important;flex-wrap:wrap!important;margin-bottom:0!important;min-height:125px!important;padding:8px 8px 10px!important;width:118px!important}.Checkbox-module_checkbox_row__MJZge>.Checkbox-module_label_checked__YpN49{background:#fff!important;border:1px solid #333!important;border-radius:6px!important}.Checkbox-module_checkbox_row__MJZge>label *{margin:0!important}.Checkbox-module_checkbox_row__MJZge>label>svg{margin-bottom:8px!important}.Checkbox-module_checkbox_row__MJZge>label>span{margin-top:5px!important}.Checkbox-module_checkbox_row__MJZge .Checkbox-module_checkbox_img__wHiW3,.Checkbox-module_checkbox_row__MJZge .Checkbox-module_checkbox_img_default__S0ISH{height:66px!important;object-fit:contain;width:66px!important}@media (max-width:959px){.Checkbox-module_checkbox_row__MJZge>label{min-height:111px!important;width:106px!important}.Checkbox-module_checkbox_row__MJZge .Checkbox-module_checkbox_img__wHiW3,.Checkbox-module_checkbox_row__MJZge .Checkbox-module_checkbox_img_default__S0ISH{height:52px!important;object-fit:contain;width:52px!important}}");
        var yh = {
            unchecked: oh,
            checked: uh,
            disabled: dh
          },
          wh = Rt((e => {
            var {
              optionData: t,
              control: n,
              defaultValue: r = [],
              fieldName: i,
              propertyName: o,
              name: a,
              required: s,
              help: l,
              options: c,
              multiple: u,
              visible: h
            } = e, {
              min: p = 0,
              max: d = Number.MAX_SAFE_INTEGER
            } = u || {}, {
              formatMessage: f
            } = vo(), {
              field: {
                onChange: g,
                onBlur: m,
                value: v,
                ref: _
              }
            } = cs({
              control: n,
              name: i,
              rules: {
                validate: {
                  min: e => !u || !(null != e && e.length) || (null == e ? void 0 : e.length) >= p || Ll(p),
                  required: e => !s || (null == e ? void 0 : e.length) >= 1 || f({
                    id: "required_tip"
                  })
                }
              },
              defaultValue: r
            }), {
              toggleOption: b
            } = hu({
              value: v,
              multiple: u,
              onChange: g
            }), y = v.join(",");
            return Hl(Pe, {
              children: h && Hl(cu, {
                optionData: t,
                name: i,
                label: a,
                help: l,
                control: n,
                children: [Hl("div", {
                  ref: _,
                  tabIndex: "0",
                  onBlur: m,
                  className: jl("pk-block pk--mt-0.5 pk--mb-1.5 pk--mx-4", "row" === (null == t ? void 0 : t.checkbox_direction) ? _h : ""),
                  children: c.map((e => {
                    var {
                      label: n
                    } = e, r = null == v ? void 0 : v.includes(n), i = !r && u && v.length >= d, o = yh[i ? "disabled" : r ? "checked" : "unchecked"];
                    return Hl("label", {
                      onClick: () => b({
                        value: n,
                        checked: !r
                      }),
                      className: jl("pk-flex pk-items-center pk-py-1.5 pk-cursor-pointer pk-px-4 !pk-mb-0", r ? bh : ""),
                      children: [Hl(o, {
                        style: {
                          marginRight: "4px"
                        },
                        className: "pk-flex-none pk-self-center"
                      }), null != e && e.image_url ? Hl("img", {
                        className: mh,
                        src: Ea(e.image_url)
                      }) : "row" === (null == t ? void 0 : t.checkbox_direction) ? Hl("div", {
                        className: vh,
                        children: Hl(gh, {})
                      }) : null, Hl("span", {
                        style: {
                          hyphens: "auto",
                          wordBreak: "break-word"
                        },
                        dangerouslySetInnerHTML: {
                          __html: n
                        },
                        className: jl("pk-ml-2 pk-text-sm pk-leading-5 pk-break-words pk-min-w-0 pk-flex-1", {
                          "pk-text-[#d2d5d8]": i
                        })
                      })]
                    }, n)
                  }))
                }), Hl("input", {
                  type: "hidden",
                  name: v.length > 0 ? "properties[".concat(o, "]") : "",
                  value: y || ""
                })]
              })
            })
          }));

        function xh() {
          return xh = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, xh.apply(this, arguments)
        }

        function kh(e, t) {
          if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function")
        }

        function Ch(e) {
          return Ch = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
            return typeof e
          } : function(e) {
            return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
          }, Ch(e)
        }

        function Sh(e) {
          var t = function(e, t) {
            if ("object" !== Ch(e) || null === e) return e;
            var n = e[Symbol.toPrimitive];
            if (void 0 !== n) {
              var r = n.call(e, t || "default");
              if ("object" !== Ch(r)) return r;
              throw new TypeError("@@toPrimitive must return a primitive value.")
            }
            return ("string" === t ? String : Number)(e)
          }(e, "string");
          return "symbol" === Ch(t) ? t : String(t)
        }

        function Eh(e, t) {
          for (var n = 0; n < t.length; n++) {
            var r = t[n];
            r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, Sh(r.key), r)
          }
        }

        function Th(e, t, n) {
          return t && Eh(e.prototype, t), n && Eh(e, n), Object.defineProperty(e, "prototype", {
            writable: !1
          }), e
        }

        function Oh(e, t) {
          return Oh = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function(e, t) {
            return e.__proto__ = t, e
          }, Oh(e, t)
        }

        function Ah(e, t) {
          if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function");
          e.prototype = Object.create(t && t.prototype, {
            constructor: {
              value: e,
              writable: !0,
              configurable: !0
            }
          }), Object.defineProperty(e, "prototype", {
            writable: !1
          }), t && Oh(e, t)
        }

        function Ph(e) {
          return Ph = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function(e) {
            return e.__proto__ || Object.getPrototypeOf(e)
          }, Ph(e)
        }

        function Mh(e) {
          if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
          return e
        }

        function Dh(e) {
          var t = function() {
            if ("undefined" == typeof Reflect || !Reflect.construct) return !1;
            if (Reflect.construct.sham) return !1;
            if ("function" == typeof Proxy) return !0;
            try {
              return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}))), !0
            } catch (e) {
              return !1
            }
          }();
          return function() {
            var n, r = Ph(e);
            if (t) {
              var i = Ph(this).constructor;
              n = Reflect.construct(r, arguments, i)
            } else n = r.apply(this, arguments);
            return function(e, t) {
              if (t && ("object" === Ch(t) || "function" == typeof t)) return t;
              if (void 0 !== t) throw new TypeError("Derived constructors may only return object or undefined");
              return Mh(e)
            }(this, n)
          }
        }

        function Ih(e, t, n) {
          return (t = Sh(t)) in e ? Object.defineProperty(e, t, {
            value: n,
            enumerable: !0,
            configurable: !0,
            writable: !0
          }) : e[t] = n, e
        }

        function Nh(e, t) {
          if (null == e) return {};
          var n, r, i = function(e, t) {
            if (null == e) return {};
            var n, r, i = {},
              o = Object.keys(e);
            for (r = 0; r < o.length; r++) n = o[r], t.indexOf(n) >= 0 || (i[n] = e[n]);
            return i
          }(e, t);
          if (Object.getOwnPropertySymbols) {
            var o = Object.getOwnPropertySymbols(e);
            for (r = 0; r < o.length; r++) n = o[r], t.indexOf(n) >= 0 || Object.prototype.propertyIsEnumerable.call(e, n) && (i[n] = e[n])
          }
          return i
        }

        function Rh() {
          Rh = function() {
            return e
          };
          var e = {},
            t = Object.prototype,
            n = t.hasOwnProperty,
            r = Object.defineProperty || function(e, t, n) {
              e[t] = n.value
            },
            i = "function" == typeof Symbol ? Symbol : {},
            o = i.iterator || "@@iterator",
            a = i.asyncIterator || "@@asyncIterator",
            s = i.toStringTag || "@@toStringTag";

          function l(e, t, n) {
            return Object.defineProperty(e, t, {
              value: n,
              enumerable: !0,
              configurable: !0,
              writable: !0
            }), e[t]
          }
          try {
            l({}, "")
          } catch (e) {
            l = function(e, t, n) {
              return e[t] = n
            }
          }

          function c(e, t, n, i) {
            var o = t && t.prototype instanceof p ? t : p,
              a = Object.create(o.prototype),
              s = new S(i || []);
            return r(a, "_invoke", {
              value: w(e, n, s)
            }), a
          }

          function u(e, t, n) {
            try {
              return {
                type: "normal",
                arg: e.call(t, n)
              }
            } catch (e) {
              return {
                type: "throw",
                arg: e
              }
            }
          }
          e.wrap = c;
          var h = {};

          function p() {}

          function d() {}

          function f() {}
          var g = {};
          l(g, o, (function() {
            return this
          }));
          var m = Object.getPrototypeOf,
            v = m && m(m(E([])));
          v && v !== t && n.call(v, o) && (g = v);
          var _ = f.prototype = p.prototype = Object.create(g);

          function b(e) {
            ["next", "throw", "return"].forEach((function(t) {
              l(e, t, (function(e) {
                return this._invoke(t, e)
              }))
            }))
          }

          function y(e, t) {
            function i(r, o, a, s) {
              var l = u(e[r], e, o);
              if ("throw" !== l.type) {
                var c = l.arg,
                  h = c.value;
                return h && "object" == Ch(h) && n.call(h, "__await") ? t.resolve(h.__await).then((function(e) {
                  i("next", e, a, s)
                }), (function(e) {
                  i("throw", e, a, s)
                })) : t.resolve(h).then((function(e) {
                  c.value = e, a(c)
                }), (function(e) {
                  return i("throw", e, a, s)
                }))
              }
              s(l.arg)
            }
            var o;
            r(this, "_invoke", {
              value: function(e, n) {
                function r() {
                  return new t((function(t, r) {
                    i(e, n, t, r)
                  }))
                }
                return o = o ? o.then(r, r) : r()
              }
            })
          }

          function w(e, t, n) {
            var r = "suspendedStart";
            return function(i, o) {
              if ("executing" === r) throw new Error("Generator is already running");
              if ("completed" === r) {
                if ("throw" === i) throw o;
                return T()
              }
              for (n.method = i, n.arg = o;;) {
                var a = n.delegate;
                if (a) {
                  var s = x(a, n);
                  if (s) {
                    if (s === h) continue;
                    return s
                  }
                }
                if ("next" === n.method) n.sent = n._sent = n.arg;
                else if ("throw" === n.method) {
                  if ("suspendedStart" === r) throw r = "completed", n.arg;
                  n.dispatchException(n.arg)
                } else "return" === n.method && n.abrupt("return", n.arg);
                r = "executing";
                var l = u(e, t, n);
                if ("normal" === l.type) {
                  if (r = n.done ? "completed" : "suspendedYield", l.arg === h) continue;
                  return {
                    value: l.arg,
                    done: n.done
                  }
                }
                "throw" === l.type && (r = "completed", n.method = "throw", n.arg = l.arg)
              }
            }
          }

          function x(e, t) {
            var n = t.method,
              r = e.iterator[n];
            if (void 0 === r) return t.delegate = null, "throw" === n && e.iterator.return && (t.method = "return", t.arg = void 0, x(e, t), "throw" === t.method) || "return" !== n && (t.method = "throw", t.arg = new TypeError(
              "The iterator does not provide a '" + n + "' method")), h;
            var i = u(r, e.iterator, t.arg);
            if ("throw" === i.type) return t.method = "throw", t.arg = i.arg, t.delegate = null, h;
            var o = i.arg;
            return o ? o.done ? (t[e.resultName] = o.value, t.next = e.nextLoc, "return" !== t.method && (t.method = "next", t.arg = void 0), t.delegate = null, h) : o : (t.method = "throw", t.arg = new TypeError(
              "iterator result is not an object"), t.delegate = null, h)
          }

          function k(e) {
            var t = {
              tryLoc: e[0]
            };
            1 in e && (t.catchLoc = e[1]), 2 in e && (t.finallyLoc = e[2], t.afterLoc = e[3]), this.tryEntries.push(t)
          }

          function C(e) {
            var t = e.completion || {};
            t.type = "normal", delete t.arg, e.completion = t
          }

          function S(e) {
            this.tryEntries = [{
              tryLoc: "root"
            }], e.forEach(k, this), this.reset(!0)
          }

          function E(e) {
            if (e) {
              var t = e[o];
              if (t) return t.call(e);
              if ("function" == typeof e.next) return e;
              if (!isNaN(e.length)) {
                var r = -1,
                  i = function t() {
                    for (; ++r < e.length;)
                      if (n.call(e, r)) return t.value = e[r], t.done = !1, t;
                    return t.value = void 0, t.done = !0, t
                  };
                return i.next = i
              }
            }
            return {
              next: T
            }
          }

          function T() {
            return {
              value: void 0,
              done: !0
            }
          }
          return d.prototype = f, r(_, "constructor", {
            value: f,
            configurable: !0
          }), r(f, "constructor", {
            value: d,
            configurable: !0
          }), d.displayName = l(f, s, "GeneratorFunction"), e.isGeneratorFunction = function(e) {
            var t = "function" == typeof e && e.constructor;
            return !!t && (t === d || "GeneratorFunction" === (t.displayName || t.name))
          }, e.mark = function(e) {
            return Object.setPrototypeOf ? Object.setPrototypeOf(e, f) : (e.__proto__ = f, l(e, s, "GeneratorFunction")), e.prototype = Object.create(_), e
          }, e.awrap = function(e) {
            return {
              __await: e
            }
          }, b(y.prototype), l(y.prototype, a, (function() {
            return this
          })), e.AsyncIterator = y, e.async = function(t, n, r, i, o) {
            void 0 === o && (o = Promise);
            var a = new y(c(t, n, r, i), o);
            return e.isGeneratorFunction(n) ? a : a.next().then((function(e) {
              return e.done ? e.value : a.next()
            }))
          }, b(_), l(_, s, "Generator"), l(_, o, (function() {
            return this
          })), l(_, "toString", (function() {
            return "[object Generator]"
          })), e.keys = function(e) {
            var t = Object(e),
              n = [];
            for (var r in t) n.push(r);
            return n.reverse(),
              function e() {
                for (; n.length;) {
                  var r = n.pop();
                  if (r in t) return e.value = r, e.done = !1, e
                }
                return e.done = !0, e
              }
          }, e.values = E, S.prototype = {
            constructor: S,
            reset: function(e) {
              if (this.prev = 0, this.next = 0, this.sent = this._sent = void 0, this.done = !1, this.delegate = null, this.method = "next", this.arg = void 0, this.tryEntries.forEach(C), !e)
                for (var t in this) "t" === t.charAt(0) && n.call(this, t) && !isNaN(+t.slice(1)) && (this[t] = void 0)
            },
            stop: function() {
              this.done = !0;
              var e = this.tryEntries[0].completion;
              if ("throw" === e.type) throw e.arg;
              return this.rval
            },
            dispatchException: function(e) {
              if (this.done) throw e;
              var t = this;

              function r(n, r) {
                return a.type = "throw", a.arg = e, t.next = n, r && (t.method = "next", t.arg = void 0), !!r
              }
              for (var i = this.tryEntries.length - 1; i >= 0; --i) {
                var o = this.tryEntries[i],
                  a = o.completion;
                if ("root" === o.tryLoc) return r("end");
                if (o.tryLoc <= this.prev) {
                  var s = n.call(o, "catchLoc"),
                    l = n.call(o, "finallyLoc");
                  if (s && l) {
                    if (this.prev < o.catchLoc) return r(o.catchLoc, !0);
                    if (this.prev < o.finallyLoc) return r(o.finallyLoc)
                  } else if (s) {
                    if (this.prev < o.catchLoc) return r(o.catchLoc, !0)
                  } else {
                    if (!l) throw new Error("try statement without catch or finally");
                    if (this.prev < o.finallyLoc) return r(o.finallyLoc)
                  }
                }
              }
            },
            abrupt: function(e, t) {
              for (var r = this.tryEntries.length - 1; r >= 0; --r) {
                var i = this.tryEntries[r];
                if (i.tryLoc <= this.prev && n.call(i, "finallyLoc") && this.prev < i.finallyLoc) {
                  var o = i;
                  break
                }
              }
              o && ("break" === e || "continue" === e) && o.tryLoc <= t && t <= o.finallyLoc && (o = null);
              var a = o ? o.completion : {};
              return a.type = e, a.arg = t, o ? (this.method = "next", this.next = o.finallyLoc, h) : this.complete(a)
            },
            complete: function(e, t) {
              if ("throw" === e.type) throw e.arg;
              return "break" === e.type || "continue" === e.type ? this.next = e.arg : "return" === e.type ? (this.rval = this.arg = e.arg, this.method = "return", this.next = "end") : "normal" === e.type && t && (this.next = t), h
            },
            finish: function(e) {
              for (var t = this.tryEntries.length - 1; t >= 0; --t) {
                var n = this.tryEntries[t];
                if (n.finallyLoc === e) return this.complete(n.completion, n.afterLoc), C(n), h
              }
            },
            catch: function(e) {
              for (var t = this.tryEntries.length - 1; t >= 0; --t) {
                var n = this.tryEntries[t];
                if (n.tryLoc === e) {
                  var r = n.completion;
                  if ("throw" === r.type) {
                    var i = r.arg;
                    C(n)
                  }
                  return i
                }
              }
              throw new Error("illegal catch attempt")
            },
            delegateYield: function(e, t, n) {
              return this.delegate = {
                iterator: E(e),
                resultName: t,
                nextLoc: n
              }, "next" === this.method && (this.arg = void 0), h
            }
          }, e
        }

        function jh(e, t, n, r, i, o, a) {
          try {
            var s = e[o](a),
              l = s.value
          } catch (e) {
            return void n(e)
          }
          s.done ? t(l) : Promise.resolve(l).then(r, i)
        }

        function Lh(e) {
          return function() {
            var t = this,
              n = arguments;
            return new Promise((function(r, i) {
              var o = e.apply(t, n);

              function a(e) {
                jh(o, r, i, a, s, "next", e)
              }

              function s(e) {
                jh(o, r, i, a, s, "throw", e)
              }
              a(void 0)
            }))
          }
        }

        function Fh(e, t) {
          (null == t || t > e.length) && (t = e.length);
          for (var n = 0, r = new Array(t); n < t; n++) r[n] = e[n];
          return r
        }

        function Bh(e, t) {
          if (e) {
            if ("string" == typeof e) return Fh(e, t);
            var n = Object.prototype.toString.call(e).slice(8, -1);
            return "Object" === n && e.constructor && (n = e.constructor.name), "Map" === n || "Set" === n ? Array.from(e) : "Arguments" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Fh(e, t) : void 0
          }
        }

        function zh(e) {
          return function(e) {
            if (Array.isArray(e)) return Fh(e)
          }(e) || function(e) {
            if ("undefined" != typeof Symbol && null != e[Symbol.iterator] || null != e["@@iterator"]) return Array.from(e)
          }(e) || Bh(e) || function() {
            throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
          }()
        }

        function Hh(e, t) {
          var n = Object.keys(e);
          if (Object.getOwnPropertySymbols) {
            var r = Object.getOwnPropertySymbols(e);
            t && (r = r.filter((function(t) {
              return Object.getOwnPropertyDescriptor(e, t).enumerable
            }))), n.push.apply(n, r)
          }
          return n
        }

        function Uh(e) {
          for (var t = 1; t < arguments.length; t++) {
            var n = null != arguments[t] ? arguments[t] : {};
            t % 2 ? Hh(Object(n), !0).forEach((function(t) {
              Ih(e, t, n[t])
            })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Hh(Object(n)).forEach((function(t) {
              Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t))
            }))
          }
          return e
        }
        var Wh = "".concat(
            "accept acceptCharset accessKey action allowFullScreen allowTransparency\n    alt async autoComplete autoFocus autoPlay capture cellPadding cellSpacing challenge\n    charSet checked classID className colSpan cols content contentEditable contextMenu\n    controls coords crossOrigin data dateTime default defer dir disabled download draggable\n    encType form formAction formEncType formMethod formNoValidate formTarget frameBorder\n    headers height hidden high href hrefLang htmlFor httpEquiv icon id inputMode integrity\n    is keyParams keyType kind label lang list loop low manifest marginHeight marginWidth max maxLength media\n    mediaGroup method min minLength multiple muted name noValidate nonce open\n    optimum pattern placeholder poster preload radioGroup readOnly rel required\n    reversed role rowSpan rows sandbox scope scoped scrolling seamless selected\n    shape size sizes span spellCheck src srcDoc srcLang srcSet start step style\n    summary tabIndex target title type useMap value width wmode wrap",
            " ").concat(
            "onCopy onCut onPaste onCompositionEnd onCompositionStart onCompositionUpdate onKeyDown\n    onKeyPress onKeyUp onFocus onBlur onChange onInput onSubmit onClick onContextMenu onDoubleClick\n    onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown\n    onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onSelect onTouchCancel\n    onTouchEnd onTouchMove onTouchStart onScroll onWheel onAbort onCanPlay onCanPlayThrough\n    onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata\n    onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting onLoad onError"
            ).split(/[\s\n]+/),
          Vh = "aria-",
          Xh = "data-";

        function Gh(e, t) {
          return 0 === e.indexOf(t)
        }

        function Yh(e) {
          var t, n = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];
          t = !1 === n ? {
            aria: !0,
            data: !0,
            attr: !0
          } : !0 === n ? {
            aria: !0
          } : Uh({}, n);
          var r = {};
          return Object.keys(e).forEach((function(n) {
            (t.aria && ("role" === n || Gh(n, Vh)) || t.data && Gh(n, Xh) || t.attr && Wh.includes(n)) && (r[n] = e[n])
          })), r
        }

        function qh(e) {
          var t = e.responseText || e.response;
          if (!t) return t;
          try {
            return JSON.parse(t)
          } catch (e) {
            return t
          }
        }

        function Kh(e) {
          var t = new XMLHttpRequest;
          e.onProgress && t.upload && (t.upload.onprogress = function(t) {
            t.total > 0 && (t.percent = t.loaded / t.total * 100), e.onProgress(t)
          });
          var n = new FormData;
          e.data && Object.keys(e.data).forEach((function(t) {
            var r = e.data[t];
            Array.isArray(r) ? r.forEach((function(e) {
              n.append("".concat(t, "[]"), e)
            })) : n.append(t, r)
          })), e.file instanceof Blob ? n.append(e.filename, e.file, e.file.name) : n.append(e.filename, e.file), t.onerror = function(t) {
            e.onError(t)
          }, t.onload = function() {
            return t.status < 200 || t.status >= 300 ? e.onError(function(e, t) {
              var n = "cannot ".concat(e.method, " ").concat(e.action, " ").concat(t.status, "'"),
                r = new Error(n);
              return r.status = t.status, r.method = e.method, r.url = e.action, r
            }(e, t), qh(t)) : e.onSuccess(qh(t), t)
          }, t.open(e.method, e.action, !0), e.withCredentials && "withCredentials" in t && (t.withCredentials = !0);
          var r = e.headers || {};
          return null !== r["X-Requested-With"] && t.setRequestHeader("X-Requested-With", "XMLHttpRequest"), Object.keys(r).forEach((function(e) {
            null !== r[e] && t.setRequestHeader(e, r[e])
          })), t.send(n), {
            abort: function() {
              t.abort()
            }
          }
        }
        var $h = +new Date,
          Zh = 0;

        function Jh() {
          return "rc-upload-".concat($h, "-").concat(++Zh)
        }
        var Qh = {};

        function ep(e, t) {}

        function tp(e, t) {
          ! function(e, t, n) {
            t || Qh[n] || (e(!1, n), Qh[n] = !0)
          }(ep, e, t)
        }
        var np = function(e, t) {
          if (e && t) {
            var n = Array.isArray(t) ? t : t.split(","),
              r = e.name || "",
              i = e.type || "",
              o = i.replace(/\/.*$/, "");
            return n.some((function(e) {
              var t = e.trim();
              if (/^\*(\/\*)?$/.test(e)) return !0;
              if ("." === t.charAt(0)) {
                var n = r.toLowerCase(),
                  a = t.toLowerCase(),
                  s = [a];
                return ".jpg" !== a && ".jpeg" !== a || (s = [".jpg", ".jpeg"]), s.some((function(e) {
                  return n.endsWith(e)
                }))
              }
              return /\/\*$/.test(t) ? o === t.replace(/\/.*$/, "") : i === t || !!/^\w+$/.test(t) && (tp(!1, "Upload takes an invalidate 'accept' type '".concat(t, "'.Skip for check.")), !0)
            }))
          }
          return !0
        };
        var rp = function(e, t, n) {
            var r = function e(r, i) {
              r.path = i || "", r.isFile ? r.file((function(e) {
                n(e) && (r.fullPath && !e.webkitRelativePath && (Object.defineProperties(e, {
                  webkitRelativePath: {
                    writable: !0
                  }
                }), e.webkitRelativePath = r.fullPath.replace(/^\//, ""), Object.defineProperties(e, {
                  webkitRelativePath: {
                    writable: !1
                  }
                })), t([e]))
              })) : r.isDirectory && function(e, t) {
                var n = e.createReader(),
                  r = [];
                ! function e() {
                  n.readEntries((function(n) {
                    var i = Array.prototype.slice.apply(n);
                    r = r.concat(i), i.length ? e() : t(r)
                  }))
                }()
              }(r, (function(t) {
                t.forEach((function(t) {
                  e(t, "".concat(i).concat(r.name, "/"))
                }))
              }))
            };
            e.forEach((function(e) {
              r(e.webkitGetAsEntry())
            }))
          },
          ip = ["component", "prefixCls", "className", "disabled", "id", "style", "multiple", "accept", "capture", "children", "directory", "openFileDialogOnClick", "onMouseEnter", "onMouseLeave"],
          op = function(e) {
            Ah(n, e);
            var t = Dh(n);

            function n() {
              var e;
              kh(this, n);
              for (var r = arguments.length, i = new Array(r), o = 0; o < r; o++) i[o] = arguments[o];
              return (e = t.call.apply(t, [this].concat(i))).state = {
                uid: Jh()
              }, e.reqs = {}, e.fileInput = void 0, e._isMounted = void 0, e.onChange = function(t) {
                var n = e.props,
                  r = n.accept,
                  i = n.directory,
                  o = zh(t.target.files).filter((function(e) {
                    return !i || np(e, r)
                  }));
                e.uploadFiles(o), e.reset()
              }, e.onClick = function(t) {
                var n = e.fileInput;
                if (n) {
                  var r = e.props,
                    i = r.children,
                    o = r.onClick;
                  if (i && "button" === i.type) {
                    var a = n.parentNode;
                    a.focus(), a.querySelector("button").blur()
                  }
                  n.click(), o && o(t)
                }
              }, e.onKeyDown = function(t) {
                "Enter" === t.key && e.onClick(t)
              }, e.onFileDrop = function(t) {
                var n = e.props.multiple;
                if (t.preventDefault(), "dragover" !== t.type)
                  if (e.props.directory) rp(Array.prototype.slice.call(t.dataTransfer.items), e.uploadFiles, (function(t) {
                    return np(t, e.props.accept)
                  }));
                  else {
                    var r = zh(t.dataTransfer.files).filter((function(t) {
                      return np(t, e.props.accept)
                    }));
                    !1 === n && (r = r.slice(0, 1)), e.uploadFiles(r)
                  }
              }, e.uploadFiles = function(t) {
                var n = zh(t),
                  r = n.map((function(t) {
                    return t.uid = Jh(), e.processFile(t, n)
                  }));
                Promise.all(r).then((function(t) {
                  var n = e.props.onBatchStart;
                  null == n || n(t.map((function(e) {
                    return {
                      file: e.origin,
                      parsedFile: e.parsedFile
                    }
                  }))), t.filter((function(e) {
                    return null !== e.parsedFile
                  })).forEach((function(t) {
                    e.post(t)
                  }))
                }))
              }, e.processFile = function() {
                var t = Lh(Rh().mark((function t(n, r) {
                  var i, o, a, s, l, c, u, h, p;
                  return Rh().wrap((function(t) {
                    for (;;) switch (t.prev = t.next) {
                      case 0:
                        if (i = e.props.beforeUpload, o = n, !i) {
                          t.next = 14;
                          break
                        }
                        return t.prev = 3, t.next = 6, i(n, r);
                      case 6:
                        o = t.sent, t.next = 12;
                        break;
                      case 9:
                        t.prev = 9, t.t0 = t.catch(3), o = !1;
                      case 12:
                        if (!1 !== o) {
                          t.next = 14;
                          break
                        }
                        return t.abrupt("return", {
                          origin: n,
                          parsedFile: null,
                          action: null,
                          data: null
                        });
                      case 14:
                        if ("function" != typeof(a = e.props.action)) {
                          t.next = 21;
                          break
                        }
                        return t.next = 18, a(n);
                      case 18:
                        s = t.sent, t.next = 22;
                        break;
                      case 21:
                        s = a;
                      case 22:
                        if ("function" != typeof(l = e.props.data)) {
                          t.next = 29;
                          break
                        }
                        return t.next = 26, l(n);
                      case 26:
                        c = t.sent, t.next = 30;
                        break;
                      case 29:
                        c = l;
                      case 30:
                        return u = "object" !== Ch(o) && "string" != typeof o || !o ? n : o, h = u instanceof File ? u : new File([u], n.name, {
                          type: n.type
                        }), (p = h).uid = n.uid, t.abrupt("return", {
                          origin: n,
                          data: c,
                          parsedFile: p,
                          action: s
                        });
                      case 35:
                      case "end":
                        return t.stop()
                    }
                  }), t, null, [
                    [3, 9]
                  ])
                })));
                return function(e, n) {
                  return t.apply(this, arguments)
                }
              }(), e.saveFileInput = function(t) {
                e.fileInput = t
              }, e
            }
            return Th(n, [{
              key: "componentDidMount",
              value: function() {
                this._isMounted = !0
              }
            }, {
              key: "componentWillUnmount",
              value: function() {
                this._isMounted = !1, this.abort()
              }
            }, {
              key: "post",
              value: function(e) {
                var t = this,
                  n = e.data,
                  r = e.origin,
                  i = e.action,
                  o = e.parsedFile;
                if (this._isMounted) {
                  var a = this.props,
                    s = a.onStart,
                    l = a.customRequest,
                    c = a.name,
                    u = a.headers,
                    h = a.withCredentials,
                    p = a.method,
                    d = r.uid,
                    f = l || Kh,
                    g = {
                      action: i,
                      filename: c,
                      data: n,
                      file: o,
                      headers: u,
                      withCredentials: h,
                      method: p || "post",
                      onProgress: function(e) {
                        var n = t.props.onProgress;
                        null == n || n(e, o)
                      },
                      onSuccess: function(e, n) {
                        var r = t.props.onSuccess;
                        null == r || r(e, o, n), delete t.reqs[d]
                      },
                      onError: function(e, n) {
                        var r = t.props.onError;
                        null == r || r(e, n, o), delete t.reqs[d]
                      }
                    };
                  s(r), this.reqs[d] = f(g)
                }
              }
            }, {
              key: "reset",
              value: function() {
                this.setState({
                  uid: Jh()
                })
              }
            }, {
              key: "abort",
              value: function(e) {
                var t = this.reqs;
                if (e) {
                  var n = e.uid ? e.uid : e;
                  t[n] && t[n].abort && t[n].abort(), delete t[n]
                } else Object.keys(t).forEach((function(e) {
                  t[e] && t[e].abort && t[e].abort(), delete t[e]
                }))
              }
            }, {
              key: "render",
              value: function() {
                var e, t = this.props,
                  n = t.component,
                  r = t.prefixCls,
                  i = t.className,
                  o = t.disabled,
                  a = t.id,
                  s = t.style,
                  l = t.multiple,
                  c = t.accept,
                  u = t.capture,
                  h = t.children,
                  p = t.directory,
                  d = t.openFileDialogOnClick,
                  f = t.onMouseEnter,
                  g = t.onMouseLeave,
                  m = Nh(t, ip),
                  v = jl((Ih(e = {}, r, !0), Ih(e, "".concat(r, "-disabled"), o), Ih(e, i, i), e)),
                  _ = p ? {
                    directory: "directory",
                    webkitdirectory: "webkitdirectory"
                  } : {},
                  b = o ? {} : {
                    onClick: d ? this.onClick : function() {},
                    onKeyDown: d ? this.onKeyDown : function() {},
                    onMouseEnter: f,
                    onMouseLeave: g,
                    onDrop: this.onFileDrop,
                    onDragOver: this.onFileDrop,
                    tabIndex: "0"
                  };
                return Nn.createElement(n, xh({}, b, {
                  className: v,
                  role: "button",
                  style: s
                }), Nn.createElement("input", xh({}, Yh(m, {
                  aria: !0,
                  data: !0
                }), {
                  id: a,
                  type: "file",
                  ref: this.saveFileInput,
                  onClick: function(e) {
                    return e.stopPropagation()
                  },
                  key: this.state.uid,
                  style: {
                    display: "none"
                  },
                  accept: c
                }, _, {
                  multiple: l,
                  onChange: this.onChange
                }, null != u ? {
                  capture: u
                } : {})), h)
              }
            }]), n
          }(Me),
          ap = op;

        function sp() {}
        var lp = function(e) {
          Ah(n, e);
          var t = Dh(n);

          function n() {
            var e;
            kh(this, n);
            for (var r = arguments.length, i = new Array(r), o = 0; o < r; o++) i[o] = arguments[o];
            return (e = t.call.apply(t, [this].concat(i))).uploader = void 0, e.saveUploader = function(t) {
              e.uploader = t
            }, e
          }
          return Th(n, [{
            key: "abort",
            value: function(e) {
              this.uploader.abort(e)
            }
          }, {
            key: "render",
            value: function() {
              return Nn.createElement(ap, xh({}, this.props, {
                ref: this.saveUploader
              }))
            }
          }]), n
        }(Me);
        lp.defaultProps = {
          component: "span",
          prefixCls: "rc-upload",
          data: {},
          headers: {},
          name: "file",
          multipart: !1,
          onStart: sp,
          onError: sp,
          onSuccess: sp,
          multiple: !1,
          beforeUpload: null,
          customRequest: null,
          withCredentials: !1,
          openFileDialogOnClick: !0
        };
        var cp, up = lp;

        function hp() {
          return hp = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, hp.apply(this, arguments)
        }
        var pp, dp, fp, gp, mp, vp, _p, bp, yp, wp = e => Te("svg", hp({
          width: 16,
          height: 16,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), cp || (cp = Te("path", {
          fillRule: "evenodd",
          clipRule: "evenodd",
          d: "M9.429 1.429a1.429 1.429 0 1 0-2.858 0V6.57H1.43a1.429 1.429 0 1 0 0 2.857H6.57v5.143a1.429 1.429 0 1 0 2.858 0V9.428h5.142a1.429 1.429 0 1 0 0-2.857H9.43V1.43Z",
          fill: "#333",
          fillOpacity: .8
        })));

        function xp() {
          return xp = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, xp.apply(this, arguments)
        }
        var kp, Cp, Sp = e => Te("svg", xp({
          width: 81,
          height: 80,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), pp || (pp = Te("rect", {
          x: 4.5,
          y: 22.576,
          width: 61.538,
          height: 47.724,
          rx: 4,
          transform: "rotate(-8 4.5 22.576)",
          fill: "#EBECED"
        })), dp || (dp = Te("g", {
          filter: "url(#uploadLargeAdd_svg__a)"
        }, Te("rect", {
          x: 8.256,
          y: 19.391,
          width: 60.308,
          height: 46.769,
          rx: 4,
          fill: "#fff"
        }))), fp || (fp = Te("rect", {
          x: 10.718,
          y: 21.852,
          width: 55.385,
          height: 41.846,
          rx: 3,
          fill: "url(#uploadLargeAdd_svg__b)"
        })), gp || (gp = Te("path", {
          d: "M35.94 63.698H12.563a1.846 1.846 0 0 1-1.846-1.846v-5.754l7.778-7.327a2.462 2.462 0 0 1 3.48.104l13.963 14.823Z",
          fill: "url(#uploadLargeAdd_svg__c)"
        })), mp || (mp = Te("path", {
          d: "M66.102 55.508v6.344c0 1.02-.826 1.847-1.846 1.847H20.807l18.36-23.216a4.923 4.923 0 0 1 6.914-.808l20.021 15.833Z",
          fill: "url(#uploadLargeAdd_svg__d)"
        })), vp || (vp = Te("circle", {
          cx: 18.718,
          cy: 30.468,
          r: 3.692,
          fill: "#D3D3D3"
        })), _p || (_p = Te("circle", {
          cx: 67.333,
          cy: 19.391,
          r: 9.231,
          fill: "#333",
          fillOpacity: .9
        })), bp || (bp = Te("path", {
          d: "M70.176 18.683H68.04v-2.135a.707.707 0 1 0-1.414 0v2.135H64.49a.707.707 0 1 0 0 1.415h2.136v2.135a.707.707 0 1 0 1.414 0v-2.135h2.136a.707.707 0 1 0 0-1.415Z",
          fill: "#fff"
        })), yp || (yp = Te("defs", null, Te("linearGradient", {
          id: "uploadLargeAdd_svg__b",
          x1: 38.41,
          y1: 21.852,
          x2: 38.41,
          y2: 63.698,
          gradientUnits: "userSpaceOnUse"
        }, Te("stop", {
          stopColor: "#F5F5F5"
        }), Te("stop", {
          offset: 1,
          stopColor: "#F1F1F1"
        }), Te("stop", {
          offset: 1,
          stopColor: "#F1F1F1"
        })), Te("linearGradient", {
          id: "uploadLargeAdd_svg__c",
          x1: 27.096,
          y1: 45.66,
          x2: 27.096,
          y2: 69.852,
          gradientUnits: "userSpaceOnUse"
        }, Te("stop", {
          stopColor: "#E2E2E2"
        }), Te("stop", {
          offset: 1,
          stopColor: "#E1E1E1"
        })), Te("linearGradient", {
          id: "uploadLargeAdd_svg__d",
          x1: 41.695,
          y1: 42.438,
          x2: 41.695,
          y2: 69.792,
          gradientUnits: "userSpaceOnUse"
        }, Te("stop", {
          offset: 0,
          stopColor: "#E5E5E6"
        }), Te("stop", {
          offset: 1,
          stopColor: "#D3D3D3"
        })), Te("filter", {
          id: "uploadLargeAdd_svg__a",
          x: .256,
          y: 15.391,
          width: 76.308,
          height: 62.769,
          filterUnits: "userSpaceOnUse",
          colorInterpolationFilters: "sRGB"
        }, Te("feFlood", {
          floodOpacity: 0,
          result: "BackgroundImageFix"
        }), Te("feColorMatrix", {
          in: "SourceAlpha",
          values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
          result: "hardAlpha"
        }), Te("feOffset", {
          dy: 4
        }), Te("feGaussianBlur", {
          stdDeviation: 4
        }), Te("feComposite", {
          in2: "hardAlpha",
          operator: "out"
        }), Te("feColorMatrix", {
          values: "0 0 0 0 0.133333 0 0 0 0 0.133333 0 0 0 0 0.133333 0 0 0 0.03 0"
        }), Te("feBlend", {
          in2: "BackgroundImageFix",
          result: "effect1_dropShadow_2338_55382"
        }), Te("feBlend", {
          in: "SourceGraphic",
          in2: "effect1_dropShadow_2338_55382",
          result: "shape"
        })))));

        function Ep() {
          return Ep = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Ep.apply(this, arguments)
        }
        var Tp, Op = e => Te("svg", Ep({
            width: 24,
            height: 24,
            fill: "none",
            xmlns: "http://www.w3.org/2000/svg"
          }, e), kp || (kp = Te("rect", {
            width: 24,
            height: 24,
            rx: 12,
            fill: "#E9ECEF"
          })), Cp || (Cp = Te("path", {
            d: "m8.667 8.667 6.667 6.667M8.667 15.334l6.667-6.667",
            stroke: "#333",
            strokeWidth: 1.6,
            strokeLinecap: "round",
            strokeLinejoin: "round"
          }))),
          Ap = Qe({});

        function Pp() {
          return Pp = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Pp.apply(this, arguments)
        }
        var Mp = e => Te("svg", Pp({
          xmlns: "http://www.w3.org/2000/svg",
          width: 100,
          height: 100,
          xmlSpace: "preserve"
        }, e), Te("circle", {
          fill: "none",
          stroke: "#D2D3D3",
          strokeWidth: 4,
          cx: 50,
          cy: 50,
          r: 21,
          style: {
            opacity: .5
          }
        }), Tp || (Tp = Te("path", {
          fill: "#707070",
          d: "M73 50c0-12.7-10.3-23-23-23S27 37.3 27 50m3.9 0c0-10.5 8.5-19.1 19.1-19.1S69.1 39.5 69.1 50"
        }, Te("animateTransform", {
          attributeName: "transform",
          attributeType: "XML",
          type: "rotate",
          dur: "1s",
          from: "0 50 50",
          to: "360 50 50",
          repeatCount: "indefinite"
        }))));

        function Dp(e, t) {
          return function(e) {
            if (Array.isArray(e)) return e
          }(e) || function(e, t) {
            var n = null == e ? null : "undefined" != typeof Symbol && e[Symbol.iterator] || e["@@iterator"];
            if (null != n) {
              var r, i, o, a, s = [],
                l = !0,
                c = !1;
              try {
                if (o = (n = n.call(e)).next, 0 === t) {
                  if (Object(n) !== n) return;
                  l = !1
                } else
                  for (; !(l = (r = o.call(n)).done) && (s.push(r.value), s.length !== t); l = !0);
              } catch (e) {
                c = !0, i = e
              } finally {
                try {
                  if (!l && null != n.return && (a = n.return(), Object(a) !== a)) return
                } finally {
                  if (c) throw i
                }
              }
              return s
            }
          }(e, t) || Bh(e, t) || function() {
            throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")
          }()
        }

        function Ip(e) {
          return e instanceof HTMLElement ? e : e instanceof Nn.Component ? Nn.findDOMNode(e) : null
        }

        function Np(e, t, n) {
          var r = vt({});
          return "value" in r.current && !n(r.current.condition, t) || (r.current.value = e(), r.current.condition = t), r.current.value
        }

        function Rp(e, t) {
          "function" == typeof e ? e(t) : "object" === Ch(e) && e && "current" in e && (e.current = t)
        }

        function jp() {
          for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];
          var r = t.filter((function(e) {
            return e
          }));
          return r.length <= 1 ? r[0] : function(e) {
            t.forEach((function(t) {
              Rp(t, e)
            }))
          }
        }

        function Lp(e) {
          var t, n, r = jn.exports.isMemo(e) ? e.type.type : e.type;
          return !!("function" != typeof r || null !== (t = r.prototype) && void 0 !== t && t.render) && !!("function" != typeof e || null !== (n = e.prototype) && void 0 !== n && n.render)
        }

        function Fp() {
          return !("undefined" == typeof window || !window.document || !window.document.createElement)
        }

        function Bp(e, t) {
          var n = {};
          return n[e.toLowerCase()] = t.toLowerCase(), n["Webkit".concat(e)] = "webkit".concat(t), n["Moz".concat(e)] = "moz".concat(t), n["ms".concat(e)] = "MS".concat(t), n["O".concat(e)] = "o".concat(t.toLowerCase()), n
        }
        var zp, Hp, Up, Wp = (zp = Fp(), Hp = "undefined" != typeof window ? window : {}, Up = {
            animationend: Bp("Animation", "AnimationEnd"),
            transitionend: Bp("Transition", "TransitionEnd")
          }, zp && ("AnimationEvent" in Hp || delete Up.animationend.animation, "TransitionEvent" in Hp || delete Up.transitionend.transition), Up),
          Vp = {};
        if (Fp()) {
          var Xp = document.createElement("div");
          Vp = Xp.style
        }
        var Gp = {};

        function Yp(e) {
          if (Gp[e]) return Gp[e];
          var t = Wp[e];
          if (t)
            for (var n = Object.keys(t), r = n.length, i = 0; i < r; i += 1) {
              var o = n[i];
              if (Object.prototype.hasOwnProperty.call(t, o) && o in Vp) return Gp[e] = t[o], Gp[e]
            }
          return ""
        }
        var qp = Yp("animationend"),
          Kp = Yp("transitionend"),
          $p = !(!qp || !Kp),
          Zp = qp || "animationend",
          Jp = Kp || "transitionend";

        function Qp(e, t) {
          if (!e) return null;
          if ("object" === Ch(e)) {
            var n = t.replace(/-\w/g, (function(e) {
              return e[1].toUpperCase()
            }));
            return e[n]
          }
          return "".concat(e, "-").concat(t)
        }
        var ed = "none",
          td = "appear",
          nd = "enter",
          rd = "leave",
          id = "none",
          od = "prepare",
          ad = "start",
          sd = "active",
          ld = "end";

        function cd(e) {
          var t = vt(!1),
            n = Dp(dt(e), 2),
            r = n[0],
            i = n[1];
          return gt((function() {
            return t.current = !1,
              function() {
                t.current = !0
              }
          }), []), [r, function(e, n) {
            n && t.current || i(e)
          }]
        }
        var ud = function(e) {
            return +setTimeout(e, 16)
          },
          hd = function(e) {
            return clearTimeout(e)
          };
        "undefined" != typeof window && "requestAnimationFrame" in window && (ud = function(e) {
          return window.requestAnimationFrame(e)
        }, hd = function(e) {
          return window.cancelAnimationFrame(e)
        });
        var pd = 0,
          dd = new Map;

        function fd(e) {
          dd.delete(e)
        }
        var gd = function(e) {
          var t = pd += 1;
          return function n(r) {
            if (0 === r) fd(t), e();
            else {
              var i = ud((function() {
                n(r - 1)
              }));
              dd.set(t, i)
            }
          }(arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1), t
        };
        gd.cancel = function(e) {
          var t = dd.get(e);
          return fd(t), hd(t)
        };
        var md = gd,
          vd = Fp() ? mt : gt,
          _d = [od, ad, sd, ld],
          bd = !1,
          yd = !0;

        function wd(e) {
          return e === sd || e === ld
        }
        var xd = function(e, t) {
            var n = Dp(cd(id), 2),
              r = n[0],
              i = n[1],
              o = function() {
                var e = vt(null);

                function t() {
                  md.cancel(e.current)
                }
                return gt((function() {
                  return function() {
                    t()
                  }
                }), []), [function n(r) {
                  var i = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 2;
                  t();
                  var o = md((function() {
                    i <= 1 ? r({
                      isCanceled: function() {
                        return o !== e.current
                      }
                    }) : n(r, i - 1)
                  }));
                  e.current = o
                }, t]
              }(),
              a = Dp(o, 2),
              s = a[0],
              l = a[1];
            return vd((function() {
              if (r !== id && r !== ld) {
                var e = _d.indexOf(r),
                  n = _d[e + 1],
                  o = t(r);
                o === bd ? i(n, !0) : s((function(e) {
                  function t() {
                    e.isCanceled() || i(n, !0)
                  }!0 === o ? t() : Promise.resolve(o).then(t)
                }))
              }
            }), [e, r]), gt((function() {
              return function() {
                l()
              }
            }), []), [function() {
              i(od, !0)
            }, r]
          },
          kd = function(e) {
            var t = vt(),
              n = vt(e);
            n.current = e;
            var r = yt((function(e) {
              n.current(e)
            }), []);

            function i(e) {
              e && (e.removeEventListener(Jp, r), e.removeEventListener(Zp, r))
            }
            return gt((function() {
              return function() {
                i(t.current)
              }
            }), []), [function(e) {
              t.current && t.current !== e && i(t.current), e && e !== t.current && (e.addEventListener(Jp, r), e.addEventListener(Zp, r), t.current = e)
            }, i]
          };
        var Cd = function(e) {
            Ah(n, e);
            var t = Dh(n);

            function n() {
              return kh(this, n), t.apply(this, arguments)
            }
            return Th(n, [{
              key: "render",
              value: function() {
                return this.props.children
              }
            }]), n
          }(Me),
          Sd = Cd;
        var Ed = function(e) {
            var t = e;

            function n(e) {
              return !(!e.motionName || !t)
            }
            "object" === Ch(e) && (t = e.transitionSupport);
            var r = Ft((function(e, t) {
              var r = e.visible,
                i = void 0 === r || r,
                o = e.removeOnLeave,
                a = void 0 === o || o,
                s = e.forceRender,
                l = e.children,
                c = e.motionName,
                u = e.leavedClassName,
                h = e.eventProps,
                p = n(e),
                d = vt(),
                f = vt();
              var g = function(e, t, n, r) {
                  var i = r.motionEnter,
                    o = void 0 === i || i,
                    a = r.motionAppear,
                    s = void 0 === a || a,
                    l = r.motionLeave,
                    c = void 0 === l || l,
                    u = r.motionDeadline,
                    h = r.motionLeaveImmediately,
                    p = r.onAppearPrepare,
                    d = r.onEnterPrepare,
                    f = r.onLeavePrepare,
                    g = r.onAppearStart,
                    m = r.onEnterStart,
                    v = r.onLeaveStart,
                    _ = r.onAppearActive,
                    b = r.onEnterActive,
                    y = r.onLeaveActive,
                    w = r.onAppearEnd,
                    x = r.onEnterEnd,
                    k = r.onLeaveEnd,
                    C = r.onVisibleChanged,
                    S = Dp(cd(), 2),
                    E = S[0],
                    T = S[1],
                    O = Dp(cd(ed), 2),
                    A = O[0],
                    P = O[1],
                    M = Dp(cd(null), 2),
                    D = M[0],
                    I = M[1],
                    N = vt(!1),
                    R = vt(null);

                  function j() {
                    return n()
                  }
                  var L = vt(!1);

                  function F(e) {
                    var t = j();
                    if (!e || e.deadline || e.target === t) {
                      var n, r = L.current;
                      A === td && r ? n = null == w ? void 0 : w(t, e) : A === nd && r ? n = null == x ? void 0 : x(t, e) : A === rd && r && (n = null == k ? void 0 : k(t, e)), A !== ed && r && !1 !== n && (P(ed, !0), I(null, !0))
                    }
                  }
                  var B = Dp(kd(F), 1)[0],
                    z = bt((function() {
                      var e, t, n;
                      switch (A) {
                        case td:
                          return Ih(e = {}, od, p), Ih(e, ad, g), Ih(e, sd, _), e;
                        case nd:
                          return Ih(t = {}, od, d), Ih(t, ad, m), Ih(t, sd, b), t;
                        case rd:
                          return Ih(n = {}, od, f), Ih(n, ad, v), Ih(n, sd, y), n;
                        default:
                          return {}
                      }
                    }), [A]),
                    H = Dp(xd(A, (function(e) {
                      if (e === od) {
                        var t = z[od];
                        return t ? t(j()) : bd
                      }
                      var n;
                      return W in z && I((null === (n = z[W]) || void 0 === n ? void 0 : n.call(z, j(), null)) || null), W === sd && (B(j()), u > 0 && (clearTimeout(R.current), R.current = setTimeout((function() {
                        F({
                          deadline: !0
                        })
                      }), u))), yd
                    })), 2),
                    U = H[0],
                    W = H[1],
                    V = wd(W);
                  L.current = V, vd((function() {
                    T(t);
                    var n, r = N.current;
                    N.current = !0, e && (!r && t && s && (n = td), r && t && o && (n = nd), (r && !t && c || !r && h && !t && c) && (n = rd), n && (P(n), U()))
                  }), [t]), gt((function() {
                    (A === td && !s || A === nd && !o || A === rd && !c) && P(ed)
                  }), [s, o, c]), gt((function() {
                    return function() {
                      N.current = !1, clearTimeout(R.current)
                    }
                  }), []);
                  var X = vt(!1);
                  gt((function() {
                    E && (X.current = !0), void 0 !== E && A === ed && ((X.current || E) && (null == C || C(E)), X.current = !0)
                  }), [E, A]);
                  var G = D;
                  return z[od] && W === ad && (G = Uh({
                    transition: "none"
                  }, G)), [A, W, G, null != E ? E : t]
                }(p, i, (function() {
                  try {
                    return d.current instanceof HTMLElement ? d.current : Ip(f.current)
                  } catch (e) {
                    return null
                  }
                }), e),
                m = Dp(g, 4),
                v = m[0],
                _ = m[1],
                b = m[2],
                y = m[3],
                w = vt(y);
              y && (w.current = !0);
              var x, k = yt((function(e) {
                  d.current = e, Rp(t, e)
                }), [t]),
                C = Uh(Uh({}, h), {}, {
                  visible: i
                });
              if (l)
                if (v !== ed && n(e)) {
                  var S, E;
                  _ === od ? E = "prepare" : wd(_) ? E = "active" : _ === ad && (E = "start"), x = l(Uh(Uh({}, C), {}, {
                    className: jl(Qp(c, v), (S = {}, Ih(S, Qp(c, "".concat(v, "-").concat(E)), E), Ih(S, c, "string" == typeof c), S)),
                    style: b
                  }), k)
                } else x = y ? l(Uh({}, C), k) : !a && w.current && u ? l(Uh(Uh({}, C), {}, {
                  className: u
                }), k) : s || !a && !u ? l(Uh(Uh({}, C), {}, {
                  style: {
                    display: "none"
                  }
                }), k) : null;
              else x = null;
              bn(x) && Lp(x) && (x.ref || (x = yn(x, {
                ref: k
              })));
              return Te(Sd, {
                ref: f
              }, x)
            }));
            return r.displayName = "CSSMotion", r
          }($p),
          Td = "add",
          Od = "keep",
          Ad = "remove",
          Pd = "removed";

        function Md(e) {
          var t;
          return Uh(Uh({}, t = e && "object" === Ch(e) && "key" in e ? e : {
            key: e
          }), {}, {
            key: String(t.key)
          })
        }

        function Dd() {
          return (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : []).map(Md)
        }
        var Id = ["component", "children", "onVisibleChanged", "onAllRemoved"],
          Nd = ["status"],
          Rd = ["eventProps", "visible", "children", "motionName", "motionAppear", "motionEnter", "motionLeave", "motionLeaveImmediately", "motionDeadline", "removeOnLeave", "leavedClassName", "onAppearStart", "onAppearActive", "onAppearEnd",
            "onEnterStart", "onEnterActive", "onEnterEnd", "onLeaveStart", "onLeaveActive", "onLeaveEnd"
          ];
        var jd = function(e) {
            var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : Ed,
              n = function(e) {
                Ah(r, e);
                var n = Dh(r);

                function r() {
                  var e;
                  kh(this, r);
                  for (var t = arguments.length, i = new Array(t), o = 0; o < t; o++) i[o] = arguments[o];
                  return Ih(Mh(e = n.call.apply(n, [this].concat(i))), "state", {
                    keyEntities: []
                  }), Ih(Mh(e), "removeKey", (function(t) {
                    var n = e.state.keyEntities.map((function(e) {
                      return e.key !== t ? e : Uh(Uh({}, e), {}, {
                        status: Pd
                      })
                    }));
                    return e.setState({
                      keyEntities: n
                    }), n.filter((function(e) {
                      return e.status !== Pd
                    })).length
                  })), e
                }
                return Th(r, [{
                  key: "render",
                  value: function() {
                    var e = this,
                      n = this.state.keyEntities,
                      r = this.props,
                      i = r.component,
                      o = r.children,
                      a = r.onVisibleChanged,
                      s = r.onAllRemoved,
                      l = Nh(r, Id),
                      c = i || Pe,
                      u = {};
                    return Rd.forEach((function(e) {
                      u[e] = l[e], delete l[e]
                    })), delete l.keys, Te(c, l, n.map((function(n) {
                      var r = n.status,
                        i = Nh(n, Nd),
                        l = r === Td || r === Od;
                      return Te(t, xh({}, u, {
                        key: i.key,
                        visible: l,
                        eventProps: i,
                        onVisibleChanged: function(t) {
                          (null == a || a(t, {
                            key: i.key
                          }), t) || 0 === e.removeKey(i.key) && s && s()
                        }
                      }), o)
                    })))
                  }
                }], [{
                  key: "getDerivedStateFromProps",
                  value: function(e, t) {
                    var n = e.keys,
                      r = t.keyEntities,
                      i = Dd(n),
                      o = function() {
                        var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [],
                          t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [],
                          n = [],
                          r = 0,
                          i = t.length,
                          o = Dd(e),
                          a = Dd(t);
                        o.forEach((function(e) {
                          for (var t = !1, o = r; o < i; o += 1) {
                            var s = a[o];
                            if (s.key === e.key) {
                              r < o && (n = n.concat(a.slice(r, o).map((function(e) {
                                return Uh(Uh({}, e), {}, {
                                  status: Td
                                })
                              }))), r = o), n.push(Uh(Uh({}, s), {}, {
                                status: Od
                              })), r += 1, t = !0;
                              break
                            }
                          }
                          t || n.push(Uh(Uh({}, e), {}, {
                            status: Ad
                          }))
                        })), r < i && (n = n.concat(a.slice(r).map((function(e) {
                          return Uh(Uh({}, e), {}, {
                            status: Td
                          })
                        }))));
                        var s = {};
                        return n.forEach((function(e) {
                          var t = e.key;
                          s[t] = (s[t] || 0) + 1
                        })), Object.keys(s).filter((function(e) {
                          return s[e] > 1
                        })).forEach((function(e) {
                          (n = n.filter((function(t) {
                            var n = t.key,
                              r = t.status;
                            return n !== e || r !== Ad
                          }))).forEach((function(t) {
                            t.key === e && (t.status = Od)
                          }))
                        })), n
                      }(r, i);
                    return {
                      keyEntities: o.filter((function(e) {
                        var t = r.find((function(t) {
                          var n = t.key;
                          return e.key === n
                        }));
                        return !t || t.status !== Pd || e.status !== Ad
                      }))
                    }
                  }
                }]), r
              }(Me);
            return Ih(n, "defaultProps", {
              component: "div"
            }), n
          }($p),
          Ld = Ft((function(e, t) {
            var n = e.prefixCls,
              r = e.style,
              i = e.className,
              o = e.duration,
              a = void 0 === o ? 4.5 : o,
              s = e.eventKey,
              l = e.content,
              c = e.closable,
              u = e.closeIcon,
              h = void 0 === u ? "x" : u,
              p = e.props,
              d = e.onClick,
              f = e.onNoticeClose,
              g = e.times,
              m = Dp(dt(!1), 2),
              v = m[0],
              _ = m[1],
              b = function() {
                f(s)
              };
            gt((function() {
              if (!v && a > 0) {
                var e = setTimeout((function() {
                  b()
                }), 1e3 * a);
                return function() {
                  clearTimeout(e)
                }
              }
            }), [a, v, g]);
            var y = "".concat(n, "-notice");
            return Te("div", xh({}, p, {
              ref: t,
              className: jl(y, i, Ih({}, "".concat(y, "-closable"), c)),
              style: r,
              onMouseEnter: function() {
                _(!0)
              },
              onMouseLeave: function() {
                _(!1)
              },
              onClick: d
            }), Te("div", {
              className: "".concat(y, "-content")
            }, l), c && Te("a", {
              tabIndex: 0,
              className: "".concat(y, "-close"),
              onClick: function(e) {
                e.preventDefault(), e.stopPropagation(), b()
              }
            }, h))
          })),
          Fd = Ld,
          Bd = Ft((function(e, t) {
            var n = e.prefixCls,
              r = void 0 === n ? "rc-notification" : n,
              i = e.container,
              o = e.motion,
              a = e.maxCount,
              s = e.className,
              l = e.style,
              c = e.onAllRemoved,
              u = Dp(dt([]), 2),
              h = u[0],
              p = u[1],
              d = function(e) {
                var t, n = h.find((function(t) {
                  return t.key === e
                }));
                null == n || null === (t = n.onClose) || void 0 === t || t.call(n), p((function(t) {
                  return t.filter((function(t) {
                    return t.key !== e
                  }))
                }))
              };
            _t(t, (function() {
              return {
                open: function(e) {
                  p((function(t) {
                    var n, r = zh(t),
                      i = r.findIndex((function(t) {
                        return t.key === e.key
                      })),
                      o = Uh({}, e);
                    i >= 0 ? (o.times = ((null === (n = t[i]) || void 0 === n ? void 0 : n.times) || 0) + 1, r[i] = o) : (o.times = 0, r.push(o));
                    return a > 0 && r.length > a && (r = r.slice(-a)), r
                  }))
                },
                close: function(e) {
                  d(e)
                },
                destroy: function() {
                  p([])
                }
              }
            }));
            var f = Dp(dt({}), 2),
              g = f[0],
              m = f[1];
            gt((function() {
              var e = {};
              h.forEach((function(t) {
                var n = t.placement,
                  r = void 0 === n ? "topRight" : n;
                r && (e[r] = e[r] || [], e[r].push(t))
              })), Object.keys(g).forEach((function(t) {
                e[t] = e[t] || []
              })), m(e)
            }), [h]);
            var v = vt(!1);
            return gt((function() {
              Object.keys(g).length > 0 ? v.current = !0 : v.current && (null == c || c(), v.current = !1)
            }), [g]), i ? Jt(Te(Pe, null, Object.keys(g).map((function(e) {
              var t = g[e].map((function(e) {
                  return {
                    config: e,
                    key: e.key
                  }
                })),
                n = "function" == typeof o ? o(e) : o;
              return Te(jd, xh({
                key: e,
                className: jl(r, "".concat(r, "-").concat(e), null == s ? void 0 : s(e)),
                style: null == l ? void 0 : l(e),
                keys: t,
                motionAppear: !0
              }, n, {
                onAllRemoved: function() {
                  ! function(e) {
                    m((function(t) {
                      var n = Uh({}, t);
                      return (n[e] || []).length || delete n[e], n
                    }))
                  }(e)
                }
              }), (function(e, t) {
                var n = e.config,
                  i = e.className,
                  o = e.style,
                  a = n.key,
                  s = n.times,
                  l = n.className,
                  c = n.style;
                return Te(Fd, xh({}, n, {
                  ref: t,
                  prefixCls: r,
                  className: jl(i, l),
                  style: Uh(Uh({}, o), c),
                  times: s,
                  key: a,
                  eventKey: a,
                  onNoticeClose: d
                }))
              }))
            }))), i) : null
          })),
          zd = Bd,
          Hd = ["getContainer", "motion", "prefixCls", "maxCount", "className", "style", "onAllRemoved"],
          Ud = function() {
            return document.body
          },
          Wd = 0;

        function Vd() {
          var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
            t = e.getContainer,
            n = void 0 === t ? Ud : t,
            r = e.motion,
            i = e.prefixCls,
            o = e.maxCount,
            a = e.className,
            s = e.style,
            l = e.onAllRemoved,
            c = Nh(e, Hd),
            u = Dp(dt(), 2),
            h = u[0],
            p = u[1],
            d = vt(),
            f = Te(zd, {
              container: h,
              ref: d,
              prefixCls: i,
              motion: r,
              maxCount: o,
              className: a,
              style: s,
              onAllRemoved: l
            }),
            g = Dp(dt([]), 2),
            m = g[0],
            v = g[1],
            _ = bt((function() {
              return {
                open: function(e) {
                  var t = function() {
                    for (var e = {}, t = arguments.length, n = new Array(t), r = 0; r < t; r++) n[r] = arguments[r];
                    return n.forEach((function(t) {
                      t && Object.keys(t).forEach((function(n) {
                        var r = t[n];
                        void 0 !== r && (e[n] = r)
                      }))
                    })), e
                  }(c, e);
                  null !== t.key && void 0 !== t.key || (t.key = "rc-notification-".concat(Wd), Wd += 1), v((function(e) {
                    return [].concat(zh(e), [{
                      type: "open",
                      config: t
                    }])
                  }))
                },
                close: function(e) {
                  v((function(t) {
                    return [].concat(zh(t), [{
                      type: "close",
                      key: e
                    }])
                  }))
                },
                destroy: function() {
                  v((function(e) {
                    return [].concat(zh(e), [{
                      type: "destroy"
                    }])
                  }))
                }
              }
            }), []);
          return gt((function() {
            p(n())
          })), gt((function() {
            d.current && m.length && (m.forEach((function(e) {
              switch (e.type) {
                case "open":
                  d.current.open(e.config);
                  break;
                case "close":
                  d.current.close(e.key);
                  break;
                case "destroy":
                  d.current.destroy()
              }
            })), v([]))
          }), [m]), [_, f]
        }
        var Xd = "common-module_flex_center_y__ZWb6u",
          Gd = "common-module_toast__WjP9V",
          Yd = "common-module_app-parakeet-dialog__UWDmu",
          qd = "common-module_ap-dialog-title__-GIOw",
          Kd = "common-module_ap-dialog-body__5yegi",
          $d = "common-module_app-dialog-footer__qYGkd",
          Zd = "common-module_ap-button__RhZvx",
          Jd = "common-module_app-parakeet-dialog--wrapper__YIL3t",
          Qd = "common-module_ap-button-no__f3AQV",
          ef = "common-module_ap-button-ok__-Dglc";
        c(
        ".common-module_flex__7RXvG{display:flex}.common-module_flex_center_y__ZWb6u{align-items:center;display:flex}.common-module_toast__WjP9V{background:rgba(51,51,51,.9)!important;border-radius:8px;display:inline-block!important;max-width:263px;padding:20px 24px!important;right:50%!important;text-align:center;transform:translate(50%,120px);width:-webkit-max-content!important;width:max-content!important;z-index:10000!important}.common-module_toast__WjP9V .rc-notification-notice{background:none!important;box-shadow:none;margin:0;padding:0}.common-module_toast__WjP9V .rc-notification-notice-content{background:none!important;color:#fff;font-size:14px;font-weight:500;line-height:18px;padding:0}.common-module_app-parakeet-dialog__UWDmu .rc-dialog-body{padding:24px}.common-module_ap-dialog-title__-GIOw{color:#222;font-size:24px;font-weight:600;line-height:130%}.common-module_ap-dialog-body__5yegi{color:#222;font-family:inherit;font-size:15px;font-weight:400;line-height:130%;margin-top:16px}.common-module_app-dialog-footer__qYGkd{display:flex;justify-content:flex-end;margin-top:40px}.common-module_ap-button__RhZvx{border:1px solid rgba(51,51,51,.12);border-radius:6px;cursor:pointer;font-family:inherit;font-size:15px;min-width:84px;outline:none!important;padding:8px 16px}.common-module_app-parakeet-dialog--wrapper__YIL3t{align-items:center;display:flex;justify-content:center}.common-module_ap-button-no__f3AQV{background:#fff;color:#333}.common-module_ap-button-ok__-Dglc{background:#333;color:#fff;margin-left:12px}.common-module_app-parakeet-dialog__UWDmu .rc-dialog-close{opacity:1!important;padding:0!important;top:24px}.common-module_clone-lower-canvas__8Uh2v{pointer-events:none;touch-action:none;-webkit-user-select:none;user-select:none;width:100%}@media (min-width:768px){.common-module_app-parakeet-dialog__UWDmu{width:580px!important}.common-module_app-parakeet-dialog__UWDmu .rc-dialog-content{border-radius:8px}}@media (max-width:767px){.common-module_app-parakeet-dialog__UWDmu{margin:0 16px!important;width:100%!important}.common-module_app-parakeet-dialog__UWDmu .rc-dialog-body{padding:16px}.common-module_ap-button__RhZvx{font-size:15px}.common-module_app-parakeet-dialog__UWDmu .rc-dialog-close{right:16px!important;top:16px}.common-module_toast__WjP9V{left:50%!important;top:50%!important;transform:translateY(-50%) translateX(-50%)!important}}");
        var tf = () => {
          var [e, t] = Vd({
            duration: 3,
            className: () => "".concat(Gd, " notranslate")
          });
          return [e, t]
        };

        function nf(e, t) {
          var n, r;
          return e && t ? (n = "" + e + t[0].toUpperCase() + t.slice(1), r = e + "-" + t) : (n = e || t, r = e || t), {
            camelCase: n,
            snakeCase: r
          }
        }

        function rf(e) {
          return /^blob:/.test(e)
        }

        function of(e) {
          return rf(e) || function(e) {
            return /^data:/.test(e)
          }(e)
        }

        function af(e) {
          if (of(e)) return !1;
          var t = window.location,
            n = /(\w+:)?(?:\/\/)([\w.-]+)?(?::(\d+))?\/?/.exec(e) || [],
            r = {
              protocol: n[1] || "",
              host: n[2] || "",
              port: n[3] || ""
            },
            i = function(e) {
              return e.port || ("http" === (e.protocol || t.protocol) ? 80 : 433)
            };
          return !(!r.protocol && !r.host && !r.port || Boolean(r.protocol && r.protocol == t.protocol && r.host && r.host == t.host && r.host && i(r) == i(t)))
        }

        function sf(e) {
          return "function" == typeof e
        }

        function lf(e) {
          return void 0 === e
        }
        var cf = function(e) {
          return null !== e && "object" == typeof e
        };

        function uf(e, t, n) {
          void 0 === n && (n = {});
          var r = {};
          return cf(e) ? (Object.keys(t).forEach((function(i) {
            lf(e[i]) ? r[i] = t[i] : cf(t[i]) ? cf(e[i]) ? r[i] = uf(e[i], t[i], n[i]) : r[i] = e[i] ? t[i] : n[i] : !0 === t[i] || !1 === t[i] ? r[i] = Boolean(e[i]) : r[i] = e[i]
          })), r) : e ? t : n
        }

        function hf(e) {
          var t = Number(e);
          return Number.isNaN(t) ? e : t
        }

        function pf(e) {
          return !0 === e || !1 === e
        }

        function df(e) {
          return "number" == typeof e
        }

        function ff(e) {
          return e != e
        }

        function gf(e) {
          return df(e) && !ff(e) || function(e) {
            return "string" == typeof e
          }(e) && !Number.isNaN(parseFloat(e)) && isFinite(parseFloat(e))
        }

        function mf(e, t) {
          return Math.sqrt(Math.pow(e.left - t.left, 2) + Math.pow(e.top - t.top, 2))
        }

        function vf(e, t, n) {
          return void 0 === n && (n = .001), Math.abs(t - e) < n
        }

        function _f(e, t, n) {
          return !vf(e, t, n) && e > t
        }

        function bf(e, t, n) {
          return !vf(e, t, n) && e < t
        }

        function yf(e) {
          return new Promise((function(t) {
            setTimeout((function() {
              t()
            }), e)
          }))
        }

        function wf(e) {
          if (!cf(e)) return e;
          var t = {};
          return Array.isArray(e) ? t = e.map((function(e) {
            return wf(e)
          })) : Object.keys(e).forEach((function(n) {
            return t[n] = wf(e[n])
          })), t
        }

        function xf(e, t, n) {
          if (void 0 === n && (n = .001), df(e) && df(t) && vf(e, t, n)) return !0;
          if (e === t) return !0;
          if (e && t && "object" == typeof e && "object" == typeof t) {
            if (e.constructor !== t.constructor) return !1;
            var r, i = void 0;
            if (Array.isArray(e)) {
              if ((r = e.length) != t.length) return !1;
              for (i = r; 0 != i--;)
                if (!xf(e[i], t[i], n)) return !1;
              return !0
            }
            if (e.valueOf !== Object.prototype.valueOf) return e.valueOf() === t.valueOf();
            if (e.toString !== Object.prototype.toString) return e.toString() === t.toString();
            var o = Object.keys(e);
            if ((r = o.length) !== Object.keys(t).length) return !1;
            for (i = r; 0 != i--;)
              if (!Object.prototype.hasOwnProperty.call(t, o[i])) return !1;
            for (i = r; 0 != i--;) {
              var a = o[i];
              if (!xf(e[a], t[a], n)) return !1
            }
            return !0
          }
          return e != e && t != t
        }

        function kf(e, t) {
          var n, r;

          function i() {
            for (var o = [], a = 0; a < arguments.length; a++) o[a] = arguments[a];
            var s = Date.now() - n,
              l = sf(t) ? t() : t || 0;
            s < l && s >= 0 ? r = setTimeout((function() {
              return i.apply(void 0, o)
            }), l - s) : e.apply(void 0, o)
          }

          function o() {
            for (var e = [], o = 0; o < arguments.length; o++) e[o] = arguments[o];
            n = Date.now(), r = setTimeout((function() {
              return i.apply(void 0, e)
            }), sf(t) ? t() : t || 0)
          }
          return o.clear = function() {
            clearTimeout(r)
          }, o
        }
        var Cf, Sf, Ef, Tf = ["left", "right", "top", "bottom"],
          Of = ["left", "right"],
          Af = ["top", "bottom"];

        function Pf(e, t) {
          return {
            left: e.left - t.left,
            top: e.top - t.top
          }
        }

        function Mf(e) {
          return {
            left: e.left + e.width / 2,
            top: e.top + e.height / 2
          }
        }

        function Df(e, t) {
          return Math.pow(e.width - t.width, 2) + Math.pow(e.height - t.height, 2)
        }

        function If(e, t) {
          return {
            left: e.left - t.left,
            top: e.top - t.top,
            width: e.width + t.left + t.right,
            height: e.height + t.top + t.bottom
          }
        }

        function Nf(e) {
          return {
            left: -e.left,
            top: -e.top
          }
        }

        function Rf(e, t) {
          return se(se({}, e), {
            left: e.left + t.left,
            top: e.top + t.top
          })
        }

        function jf(e) {
          return {
            left: e.left,
            top: e.top,
            right: e.left + e.width,
            bottom: e.top + e.height
          }
        }

        function Lf(e, t, n, r) {
          if (1 !== t) {
            if ("left" in e || "top" in e) {
              if (n) {
                var i = Mf(e);
                return {
                  width: e.width * t,
                  height: e.height * t,
                  left: e.left + e.width * (1 - t) / 2 + (n.left - i.left) * (r || 1 - t),
                  top: e.top + e.height * (1 - t) / 2 + (n.top - i.top) * (r || 1 - t)
                }
              }
              return {
                width: e.width * t,
                height: e.height * t,
                left: e.left + e.width * (1 - t) / 2,
                top: e.top + e.height * (1 - t) / 2
              }
            }
            return {
              width: e.width * t,
              height: e.height * t
            }
          }
          return e
        }

        function Ff(e) {
          return e.width / e.height
        }

        function Bf(e, t) {
          return Math.min(t.maxWidth ? t.maxWidth / e.width : 1 / 0, t.maxHeight ? t.maxHeight / e.height : 1 / 0)
        }

        function zf(e, t) {
          return Math.max(t.minWidth ? t.minWidth / e.width : 0, t.minHeight ? t.minHeight / e.height : 0)
        }

        function Hf(e, t) {
          var n;
          return t.minimum && bf(e, t.minimum) ? n = t.minimum : t.maximum && _f(e, t.maximum) && (n = t.maximum), n
        }

        function Uf(e, t) {
          var n = Ff(e),
            r = 1;
          return t.minWidth > 0 && t.minHeight > 0 ? n > t.minWidth / t.minHeight ? e.height < t.minHeight && (r = t.minHeight / e.height) : e.width < t.minWidth && (r = t.minWidth / e.width) : t.minWidth > 0 ? e.width < t.minWidth && (r = t
              .minWidth / e.width) : t.minHeight > 0 && e.height < t.minHeight && (r = t.minHeight / e.height), t.maxWidth < 1 / 0 && t.maxHeight < 1 / 0 ? n > t.maxWidth / t.maxHeight ? e.width > t.maxWidth && (r = t.maxWidth / e.width) : e
            .height > t.maxHeight && (r = t.maxHeight / e.height) : t.maxWidth < 1 / 0 ? e.width > t.maxWidth && (r = t.maxWidth / e.width) : t.maxHeight < 1 / 0 && e.height > t.maxHeight && (r = t.maxHeight / e.height), r
        }

        function Wf(e, t) {
          var n = {
            left: 0,
            top: 0,
            right: 0,
            bottom: 0
          };
          return Tf.forEach((function(r) {
            var i = t[r],
              o = jf(e)[r];
            n[r] = void 0 !== i && void 0 !== o ? "left" === r || "top" === r ? Math.max(0, i - o) : Math.max(0, o - i) : 0
          })), n
        }

        function Vf(e, t) {
          return Lf(e, Uf(e, t))
        }

        function Xf(e, t) {
          var n = t * Math.PI / 180;
          return {
            width: Math.abs(e.width * Math.cos(n)) + Math.abs(e.height * Math.sin(n)),
            height: Math.abs(e.width * Math.sin(n)) + Math.abs(e.height * Math.cos(n))
          }
        }

        function Gf(e, t, n) {
          var r = t * Math.PI / 180;
          return n ? {
            left: (e.left - n.left) * Math.cos(r) - (e.top - n.top) * Math.sin(r) + n.left,
            top: (e.left - n.left) * Math.sin(r) + (e.top - n.top) * Math.cos(r) + n.top
          } : {
            left: e.left * Math.cos(r) - e.top * Math.sin(r),
            top: e.left * Math.sin(r) + e.top * Math.cos(r)
          }
        }

        function Yf(e) {
          return {
            minWidth: 0,
            minHeight: 0,
            maxWidth: void 0 !== e.right && void 0 !== e.left ? e.right - e.left : 1 / 0,
            maxHeight: void 0 !== e.bottom && void 0 !== e.top ? e.bottom - e.top : 1 / 0
          }
        }

        function qf(e, t) {
          var n = {};
          return Tf.forEach((function(r) {
            var i = e[r],
              o = t[r];
            void 0 !== i && void 0 !== o ? n[r] = "left" === r || "top" === r ? Math.max(i, o) : Math.min(i, o) : void 0 !== o ? n[r] = o : void 0 !== i && (n[r] = i)
          })), n
        }

        function Kf(e, t) {
          var n = {
              left: 0,
              top: 0
            },
            r = Wf(e, t);
          return r.left && r.left > 0 ? n.left = r.left : r.right && r.right > 0 && (n.left = -r.right), r.top && r.top > 0 ? n.top = r.top : r.bottom && r.bottom > 0 && (n.top = -r.bottom), n
        }

        function $f(e, t) {
          return Rf(e, Kf(e, t))
        }

        function Zf(e) {
          return void 0 === e && (e = {}), df(e) ? {
            minimum: e,
            maximum: e
          } : {
            minimum: gf(e.minimum) ? e.minimum : 0,
            maximum: gf(e.maximum) ? e.maximum : 1 / 0
          }
        }

        function Jf(e, t) {
          return (lf(t.maxWidth) || !_f(e.width, t.maxWidth)) && (lf(t.maxHeight) || !_f(e.height, t.maxHeight)) && (lf(t.minHeight) || !bf(e.height, t.minHeight)) && (lf(t.minWidth) || !bf(e.width, t.minWidth))
        }

        function Qf(e, t) {
          return (lf(t.left) || !bf(e.left, t.left)) && (lf(t.top) || !bf(e.top, t.top)) && (lf(t.right) || !_f(e.left + e.width, t.right)) && (lf(t.bottom) || !_f(e.top + e.height, t.bottom))
        }

        function eg(e) {
          return Boolean(e && e.visibleArea && e.coordinates)
        }

        function tg(e, t) {
          return function(e, t) {
            var n = sf(t.areaSizeRestrictions) ? t.areaSizeRestrictions(e, t) : t.areaSizeRestrictions;
            n.maxWidth < 1 / 0 && n.maxHeight < 1 / 0 && (Ff(e.boundary) > n.maxWidth / n.maxHeight ? n.maxHeight = n.maxWidth / Ff(e.boundary) : n.maxWidth = n.maxHeight * Ff(e.boundary));
            return pg(n)
          }(e, t)
        }

        function ng(e, t) {
          return sf(t.areaPositionRestrictions) ? t.areaPositionRestrictions(e, t) : t.areaPositionRestrictions
        }

        function rg(e, t) {
          return function(e, t) {
            var n = sf(t.sizeRestrictions) ? t.sizeRestrictions(e, t) : t.sizeRestrictions,
              r = ig(e, t),
              i = {
                minWidth: gf(n.minWidth) ? hf(n.minWidth) : 0,
                minHeight: gf(n.minHeight) ? hf(n.minHeight) : 0,
                maxWidth: gf(n.maxWidth) ? hf(n.maxWidth) : 1 / 0,
                maxHeight: gf(n.maxHeight) ? hf(n.maxHeight) : 1 / 0
              };
            void 0 !== r.left && void 0 !== r.right && (i.maxWidth = Math.min(i.maxWidth, r.right - r.left));
            void 0 !== r.bottom && void 0 !== r.top && (i.maxHeight = Math.min(i.maxHeight, r.bottom - r.top));
            return pg(i)
          }(e, t)
        }

        function ig(e, t) {
          return sf(t.positionRestrictions) ? t.positionRestrictions(e, t) : t.positionRestrictions
        }

        function og(e) {
          return e.visibleArea ? e.visibleArea.width / e.boundary.width : 0
        }

        function ag(e) {
          if (eg(e)) {
            var t = e.coordinates,
              n = t.width,
              r = t.height,
              i = t.left,
              o = t.top,
              a = og(e);
            return {
              width: n / a,
              height: r / a,
              left: (i - e.visibleArea.left) / a,
              top: (o - e.visibleArea.top) / a
            }
          }
          return {
            left: 0,
            top: 0,
            width: 0,
            height: 0
          }
        }

        function sg(e, t) {
          return Zf(sf(t.aspectRatio) ? t.aspectRatio(e, t) : t.aspectRatio)
        }

        function lg(e, t) {
          return sf(t.defaultCoordinates) ? t.defaultCoordinates(e, t) : t.defaultCoordinates
        }

        function cg(e, t) {
          return sf(t.defaultVisibleArea) ? t.defaultVisibleArea(e, t) : t.defaultVisibleArea
        }

        function ug(e) {
          return e.imageSize && e.imageSize.width && e.imageSize.height ? Xf(e.imageSize, e.transforms.rotate) : {
            width: 0,
            height: 0
          }
        }

        function hg(e, t) {
          return !eg(e) || !Hf(Ff(e.coordinates), sg(e, t)) && Jf(e.visibleArea, tg(e, t)) && Jf(e.coordinates, rg(e, t)) && Qf(e.visibleArea, ng(e, t)) && Qf(e.coordinates, ig(e, t))
        }

        function pg(e) {
          var t = se({}, e);
          return t.minWidth > t.maxWidth && (t.minWidth = t.maxWidth), t.minHeight > t.maxHeight && (t.minHeight = t.maxHeight), t
        }

        function dg(e, t) {
          var n = e,
            r = se({
              minWidth: 0,
              minHeight: 0,
              maxWidth: 1 / 0,
              maxHeight: 1 / 0
            }, t);
          return pg({
            maxHeight: Math.min(n.maxHeight, r.maxHeight),
            minHeight: Math.max(n.minHeight, r.minHeight),
            maxWidth: Math.min(n.maxWidth, r.maxWidth),
            minWidth: Math.max(n.minWidth, r.minWidth)
          })
        }

        function fg(e) {
          return wf(e)
        }

        function gg(e) {
          var t = e.width,
            n = e.height,
            r = e.sizeRestrictions || {
              minWidth: 0,
              minHeight: 0,
              maxWidth: 1 / 0,
              maxHeight: 1 / 0
            },
            i = Zf(e.aspectRatio),
            o = {
              width: Math.max(r.minWidth, Math.min(r.maxWidth, t)),
              height: Math.max(r.minHeight, Math.min(r.maxHeight, n))
            },
            a = [o];
          return i && [i.minimum, i.maximum].forEach((function(e) {
              e && a.push({
                width: o.width,
                height: o.width / e
              }, {
                width: o.height * e,
                height: o.height
              })
            })),
            function(e, t, n, r) {
              var i = function(i) {
                return e.reduce((function(e, o) {
                  var a = sf(n) ? n(o) : n,
                    s = a.maxHeight,
                    l = a.maxWidth,
                    c = a.minWidth,
                    u = a.minHeight,
                    h = Zf(sf(r) ? r(o) : r);
                  return Jf(o, i ? {
                    maxWidth: l,
                    maxHeight: s
                  } : {
                    maxWidth: l,
                    maxHeight: s,
                    minWidth: c,
                    minHeight: u
                  }) && !Hf(Ff(o), h) && o.width && o.height && (!e || bf(Df(o, t), Df(e, t))) ? o : e
                }), null)
              };
              return i() || i(!0)
            }(a = a.map((function(e) {
              return Vf(e, r)
            })), {
              width: t,
              height: n
            }, r, i)
        }

        function mg(e, t) {
          var n = fg(e);
          if (e.visibleArea) {
            var r = tg(e, t);
            n.visibleArea = se(se({}, e.visibleArea), gg({
              width: e.visibleArea.width,
              height: e.visibleArea.height,
              aspectRatio: {
                minimum: Ff(n.boundary),
                maximum: Ff(n.boundary)
              },
              sizeRestrictions: r
            })), n.visibleArea = Rf(n.visibleArea, Pf(Mf(e.visibleArea), Mf(n.visibleArea))), n.visibleArea = $f(n.visibleArea, ng(n, t))
          }
          return n
        }

        function vg(e, t, n) {
          var r = Rf(e, t);
          return n ? $f(r, n) : r
        }

        function _g(e, t, n, r) {
          void 0 === r && (r = !0);
          var i = !1 === r ? Ef.unsafe : !0 === r ? Ef.zoom : r,
            o = sg(e, t),
            a = rg(e, t);
          e.visibleArea && i === Ef.limit && (a = se(se({}, a), {
            minWidth: Math.min(e.visibleArea.width, a.minWidth),
            minHeight: Math.min(e.visibleArea.height, a.minHeight),
            maxWidth: Math.min(e.visibleArea.width, a.maxWidth),
            maxHeight: Math.min(e.visibleArea.height, a.maxHeight)
          }));
          var s = ig(e, t);
          e.visibleArea && i === Ef.limit && (s = qf(s, jf(e.visibleArea)));
          var l = function(e, t) {
              return vg(e, {
                left: t.left - (e.left || 0),
                top: t.top - (e.top || 0)
              }, s)
            },
            c = e.coordinates ? se({}, e.coordinates) : {
              left: 0,
              top: 0,
              width: 0,
              height: 0
            };
          (Array.isArray(n) ? n : [n]).forEach((function(n) {
            var r;
            (r = "function" == typeof n ? n(se(se({}, e), {
              coordinates: c
            }), t) : n) && (lf(r.width) && lf(r.height) || (c = function(e, t) {
              var n = se(se(se({}, e), gg({
                width: t.width,
                height: t.height,
                sizeRestrictions: a,
                aspectRatio: o
              })), {
                left: 0,
                top: 0
              });
              return l(n, {
                left: e.left || 0,
                top: e.top || 0
              })
            }(c, se(se({}, c), r))), lf(r.left) && lf(r.top) || (c = l(c, se(se({}, c), r))))
          }));
          var u = se(se({}, fg(e)), {
            coordinates: c
          });
          if (u.visibleArea && i === Ef.zoom) {
            var h = Math.max(0, u.coordinates.width - u.visibleArea.width),
              p = Math.max(0, u.coordinates.height - u.visibleArea.height),
              d = tg(e, t),
              f = h > p ? u.coordinates.width / u.visibleArea.width : u.coordinates.height / u.visibleArea.height;
            return f > 1 && (u.visibleArea = Lf(u.visibleArea, Math.min(f, Bf(u.visibleArea, d)))), u.visibleArea = Rf(u.visibleArea, Nf(Kf(u.coordinates, jf(u.visibleArea)))), mg(u, t)
          }
          return u
        }

        function bg(e, t) {
          if (e.coordinates) {
            var n = fg(e),
              r = sg(e, t),
              i = rg(e, t);
            return n.coordinates = se(se({}, e.coordinates), gg({
              width: e.coordinates.width,
              height: e.coordinates.height,
              aspectRatio: r,
              sizeRestrictions: e.visibleArea ? {
                maxWidth: Math.min(e.visibleArea.width, i.maxWidth),
                maxHeight: Math.min(e.visibleArea.height, i.maxHeight),
                minHeight: Math.min(e.visibleArea.height, i.minHeight),
                minWidth: Math.min(e.visibleArea.width, i.minWidth)
              } : i
            })), n.coordinates = Rf(n.coordinates, Pf(Mf(e.coordinates), Mf(n.coordinates))), n.coordinates = $f(n.coordinates, e.visibleArea ? qf(jf(e.visibleArea), ig(n, t)) : ig(n, t)), n
          }
          return e
        }

        function yg(e, t, n, r) {
          void 0 === r && (r = !0);
          var i = se(se({}, fg(e)), {
            visibleArea: n
          });
          return i = mg(i, t), r && (i = bg(i, t)), i
        }

        function wg(e, t) {
          var n, r, i, o, a, s = e.boundary,
            l = e.image,
            c = {
              boundary: {
                width: s.width,
                height: s.height
              },
              imageSize: {
                width: l.width,
                height: l.height
              },
              transforms: {
                rotate: (null === (n = l.transforms) || void 0 === n ? void 0 : n.rotate) || 0,
                flip: {
                  horizontal: (null === (i = null === (r = l.transforms) || void 0 === r ? void 0 : r.flip) || void 0 === i ? void 0 : i.horizontal) || !1,
                  vertical: (null === (a = null === (o = l.transforms) || void 0 === o ? void 0 : o.flip) || void 0 === a ? void 0 : a.vertical) || !1
                }
              },
              visibleArea: null,
              coordinates: null
            };
          return t.defaultTransforms && (c.transforms = function(e, t) {
            var n = se(se({}, e.transforms), {
              flip: se({}, e.transforms.flip)
            });
            if (t.defaultTransforms) {
              var r = sf(t.defaultTransforms) ? t.defaultTransforms(e, t) : t.defaultTransforms;
              df(r.rotate) && (n.rotate = r.rotate), r.flip && (pf(r.flip.horizontal) && (n.flip.horizontal = r.flip.horizontal), pf(r.flip.vertical) && (n.flip.vertical = r.flip.vertical))
            }
            return n
          }(c, t)), c = t.priority === Sf.visibleArea ? _g(c = yg(c, t, cg(c, t), !1), t, lg(c, t), Ef.limit) : yg(c = _g(c, t, lg(c, t), Ef.unsafe), t, cg(c, t), !0)
        }

        function xg(e, t, n) {
          if (eg(e)) {
            var r = fg(e);
            return r.coordinates = Rf(r.coordinates, n), r.coordinates = $f(r.coordinates, qf(jf(r.visibleArea), ig(r, t))), r
          }
          return e
        }

        function kg(e) {
          var t = e.coordinates,
            n = e.directions,
            r = e.positionRestrictions,
            i = e.sizeRestrictions,
            o = e.preserveRatio,
            a = e.allowedDirections,
            s = e.compensate,
            l = void 0 === s || s,
            c = se({}, n),
            u = If(t, c).width,
            h = If(t, c).height;
          u < 0 && (c.left < 0 && c.right < 0 ? (c.left = -(t.width - i.minWidth) / (c.left / c.right), c.right = -(t.width - i.minWidth) / (c.right / c.left)) : c.left < 0 ? c.left = -(t.width - i.minWidth) : c.right < 0 && (c.right = -(t
            .width - i.minWidth))), h < 0 && (c.top < 0 && c.bottom < 0 ? (c.top = -(t.height - i.minHeight) / (c.top / c.bottom), c.bottom = -(t.height - i.minHeight) / (c.bottom / c.top)) : c.top < 0 ? c.top = -(t.height - i.minHeight) : c
            .bottom < 0 && (c.bottom = -(t.height - i.minHeight)));
          var p = Wf(If(t, c), r),
            d = Tf.every((function(e) {
              return !_f(p[(t = e, {
                left: "right",
                top: "bottom",
                right: "left",
                bottom: "top"
              } [t])], 0) || a[e];
              var t
            }));
          l && d && (p.left && p.left > 0 && 0 === p.right ? (c.right += p.left, c.left -= p.left) : p.right && p.right > 0 && 0 === p.left && (c.left += p.right, c.right -= p.right), p.top && p.top > 0 && 0 === p.bottom ? (c.bottom += p.top, c
            .top -= p.top) : p.bottom && p.bottom > 0 && 0 === p.top && (c.top += p.bottom, c.bottom -= p.bottom), p = Wf(If(t, c), r));
          var f = {
            width: 1 / 0,
            height: 1 / 0,
            left: 1 / 0,
            right: 1 / 0,
            top: 1 / 0,
            bottom: 1 / 0
          };
          if (Tf.forEach((function(e) {
              var t = p[e];
              t && c[e] && (f[e] = Math.max(0, 1 - t / c[e]))
            })), o) {
            var g = Math.min.apply(Math, Tf.map((function(e) {
              return f[e]
            })));
            g !== 1 / 0 && Tf.forEach((function(e) {
              c[e] *= g
            }))
          } else Tf.forEach((function(e) {
            f[e] !== 1 / 0 && (c[e] *= f[e])
          }));
          if (u = If(t, c).width, h = If(t, c).height, c.right + c.left && (u > i.maxWidth ? f.width = (i.maxWidth - t.width) / (c.right + c.left) : u < i.minWidth && (f.width = (i.minWidth - t.width) / (c.right + c.left))), c.bottom + c.top && (
              h > i.maxHeight ? f.height = (i.maxHeight - t.height) / (c.bottom + c.top) : h < i.minHeight && (f.height = (i.minHeight - t.height) / (c.bottom + c.top))), o) {
            var m = Math.min(f.width, f.height);
            m !== 1 / 0 && Tf.forEach((function(e) {
              c[e] *= m
            }))
          } else f.width !== 1 / 0 && Of.forEach((function(e) {
            c[e] *= f.width
          })), f.height !== 1 / 0 && Af.forEach((function(e) {
            c[e] *= f.height
          }));
          return c
        }

        function Cg(e, t, n) {
          return vf(t + n, 0) ? e / 2 : vf(t, 0) ? 0 : vf(n, 0) ? e : e * Math.abs(t / (t + n))
        }

        function Sg(e, t) {
          var n = t.toLowerCase();
          return {
            left: e.left + e.width * (-1 !== n.indexOf("west") ? 1 : -1 !== n.indexOf("east") ? 0 : .5),
            top: e.top + e.height * (-1 !== n.indexOf("north") ? 1 : -1 !== n.indexOf("south") ? 0 : .5)
          }
        }

        function Eg(e) {
          var t = e.toLowerCase();
          return {
            left: -1 === t.indexOf("east"),
            top: -1 === t.indexOf("south"),
            right: -1 === t.indexOf("west"),
            bottom: -1 === t.indexOf("north")
          }
        }

        function Tg(e, t, n, r, i) {
          var o = r.reference,
            a = function(e, t) {
              var n = e.toLowerCase(),
                r = {
                  left: -1 === n.indexOf("west") ? t.left : -t.left,
                  top: -t.top,
                  right: t.left,
                  bottom: t.top
                };
              ["north", "south", "center"].every((function(e) {
                return -1 === n.indexOf(e)
              })) && (r.top = 0, r.bottom = 0), ["west", "east", "center"].every((function(e) {
                return -1 === n.indexOf(e)
              })) && (r.left = 0, r.right = 0);
              var i = Eg(e);
              return Tf.forEach((function(e) {
                i[e] || (r[e] = 0)
              })), r
            }(t, n),
            s = Eg(t),
            l = function(e, t, n, r) {
              var i = r.aspectRatio,
                o = r.positionRestrictions,
                a = r.sizeRestrictions,
                s = se({}, e);
              t = se({}, t);
              var l = n.allowedDirections || {
                left: !0,
                right: !0,
                bottom: !0,
                top: !0
              };
              e.width < a.minWidth && (t.left = 0, t.right = 0), e.height < a.minHeight && (t.top = 0, t.bottom = 0), Tf.forEach((function(e) {
                l[e] || (t[e] = 0)
              }));
              var c = If(s, t = kg({
                  coordinates: s,
                  directions: t,
                  sizeRestrictions: a,
                  positionRestrictions: o,
                  allowedDirections: l
                })).width,
                u = If(s, t).height,
                h = n.preserveAspectRatio ? Ff(s) : Hf(c / u, i);
              if (h) {
                var p = n.respectDirection;
                if ("width" !== p && "height" !== p && (p = s.width >= s.height || 1 === h ? "width" : "height"), "width" === p) {
                  var d = c / h - s.height;
                  if (l.top && l.bottom) {
                    var f = t.top,
                      g = t.bottom;
                    t.bottom = Cg(d, g, f), t.top = Cg(d, f, g)
                  } else l.bottom ? t.bottom = d : l.top ? t.top = d : l.right ? t.right = 0 : l.left && (t.left = 0)
                } else if ("height" === p) {
                  var m = s.width - u * h;
                  if (l.left && l.right) {
                    var v = t.left,
                      _ = t.right;
                    t.left = -Cg(m, v, _), t.right = -Cg(m, _, v)
                  } else l.left ? t.left = -m : l.right ? t.right = -m : l.top ? t.top = 0 : l.bottom && (t.bottom = 0)
                }
                t = kg({
                  directions: t,
                  coordinates: s,
                  sizeRestrictions: a,
                  positionRestrictions: o,
                  preserveRatio: !0,
                  compensate: n.compensate,
                  allowedDirections: l
                })
              }
              return c = If(s, t).width, u = If(s, t).height, (h = n.preserveAspectRatio ? Ff(s) : Hf(c / u, i)) && _f(Math.abs(h - c / u), 0) && Tf.forEach((function(e) {
                t[e] = 0
              })), vg({
                width: e.width + t.right + t.left,
                height: e.height + t.top + t.bottom,
                left: e.left,
                top: e.top
              }, {
                left: -t.left,
                top: -t.top
              }, o)
            }(e, a, se(se({}, r), {
              allowedDirections: s
            }), i);
          return o && (l = Rf(l, Pf(Sg(o, t), Sg(l, t)))), $f(l, i.positionRestrictions)
        }

        function Og(e, t, n, r, i) {
          var o = function(e) {
              return e.coordinates ? Math.min(e.coordinates.width, e.coordinates.height, 20 * og(e)) : 1
            }(e),
            a = rg(e, t);
          return eg(e) ? se(se({}, fg(e)), {
            coordinates: Tg(e.coordinates, n, r, i, {
              positionRestrictions: qf(ig(e, t), jf(e.visibleArea)),
              sizeRestrictions: {
                maxWidth: Math.min(a.maxWidth, e.visibleArea.width),
                maxHeight: Math.min(a.maxHeight, e.visibleArea.height),
                minWidth: Math.max(Math.min(a.minWidth, e.visibleArea.width), o),
                minHeight: Math.max(Math.min(a.minHeight, e.visibleArea.height), o)
              },
              aspectRatio: sg(e, t)
            })
          }) : e
        }

        function Ag(e, t, n) {
          var r = se(se({}, fg(e)), {
            boundary: n
          });
          if (r.visibleArea && r.coordinates && e.visibleArea) {
            r.visibleArea.height = r.visibleArea.width / Ff(n), r.visibleArea.top += (e.visibleArea.height - r.visibleArea.height) / 2;
            var i = rg(r, t);
            (Math.max(i.minHeight, r.coordinates.height) - r.visibleArea.height > 0 || Math.max(i.minWidth, r.coordinates.width) - r.visibleArea.width > 0) && (r.visibleArea = Lf(r.visibleArea, Math.max(Math.max(i.minHeight, r.coordinates
              .height) / r.visibleArea.height, Math.max(i.minWidth, r.coordinates.width) / r.visibleArea.width))), r.visibleArea = Vf(r.visibleArea, tg(r, t));
            var o = Nf(Kf(r.coordinates, jf(r.visibleArea)));
            r.visibleArea.width < r.coordinates.width && (o.left = 0), r.visibleArea.height < r.coordinates.height && (o.top = 0), r.visibleArea = Rf(r.visibleArea, o), r.visibleArea = $f(r.visibleArea, ng(r, t)), r = bg(r, t)
          }
          return r
        }

        function Pg(e, t, n) {
          return n.rotate && (e = function(e, t, n) {
            if (eg(e)) {
              var r = fg(e),
                i = df(n) ? n : n.angle,
                o = Gf(Mf(se({
                  left: 0,
                  top: 0
                }, ug(e))), i);
              r.transforms.rotate += i, r.coordinates = se(se({}, gg({
                sizeRestrictions: rg(r, t),
                aspectRatio: sg(r, t),
                width: r.coordinates.width,
                height: r.coordinates.height
              })), Gf(Mf(r.coordinates), i));
              var a = !df(n) && n.center ? n.center : Mf(e.coordinates),
                s = Pf(Mf(e.coordinates), Gf(Mf(e.coordinates), i, a)),
                l = ug(r);
              return r.coordinates.left -= o.left - l.width / 2 + r.coordinates.width / 2 - s.left, r.coordinates.top -= o.top - l.height / 2 + r.coordinates.height / 2 - s.top, r.visibleArea = Vf(r.visibleArea, dg(tg(r, t), {
                minWidth: r.coordinates.width,
                minHeight: r.coordinates.height
              })), r.coordinates = $f(r.coordinates, ig(r, t)), r.visibleArea = Rf(r.visibleArea, Pf(Mf(r.coordinates), Mf(e.coordinates))), r.visibleArea = $f(r.visibleArea, ng(r, t)), r
            }
            return e
          }(e, t, n.rotate)), n.flip && (e = function(e, t, n, r) {
            if (eg(e)) {
              var i = fg(e),
                o = e.transforms.rotate,
                a = ug(e),
                s = {
                  horizontal: n,
                  vertical: r
                };
              if (s.horizontal || s.vertical) {
                var l = Gf({
                    left: a.width / 2,
                    top: a.height / 2
                  }, -o),
                  c = Gf(Mf(i.coordinates), -o),
                  u = Gf({
                    left: s.horizontal ? l.left - (c.left - l.left) : c.left,
                    top: s.vertical ? l.top - (c.top - l.top) : c.top
                  }, o);
                i.coordinates = Rf(i.coordinates, Pf(u, Mf(i.coordinates))), c = Gf(Mf(i.visibleArea), -o), u = Gf({
                  left: s.horizontal ? l.left - (c.left - l.left) : c.left,
                  top: s.vertical ? l.top - (c.top - l.top) : c.top
                }, o), i.visibleArea = Rf(i.visibleArea, Pf(u, Mf(i.visibleArea))), i.visibleArea = $f(i.visibleArea, ng(i, t))
              }
              return s.horizontal && (i.transforms.flip.horizontal = !e.transforms.flip.horizontal), s.vertical && (i.transforms.flip.vertical = !e.transforms.flip.vertical), i
            }
            return e
          }(e, t, n.flip.horizontal, n.flip.vertical)), (n.move || n.scale) && (e = function(e, t, n) {
            var r, i = n.scale,
              o = void 0 === i ? 1 : i,
              a = n.move,
              s = void 0 === a ? {} : a;
            if (eg(e)) {
              var l = fg(e),
                c = 1 / (df(o) ? o : o.factor),
                u = df(o) ? void 0 : o.center,
                h = !vf(c, 1),
                p = 1,
                d = 1;
              l.visibleArea = Rf(l.visibleArea, {
                left: s.left || 0,
                top: s.top || 0
              });
              var f = rg(l, t),
                g = ig(l, t),
                m = tg(l, t),
                v = {
                  stencil: {
                    minimum: Math.max(f.minWidth ? f.minWidth / l.coordinates.width : 0, f.minHeight ? f.minHeight / l.coordinates.height : 0),
                    maximum: Math.min(f.maxWidth ? f.maxWidth / l.coordinates.width : 1 / 0, f.maxHeight ? f.maxHeight / l.coordinates.height : 1 / 0, Bf(l.coordinates, Yf(g)))
                  },
                  area: {
                    maximum: Bf(l.visibleArea, m),
                    minimum: zf(l.visibleArea, m)
                  }
                };
              c && h && (c < 1 ? (d = Math.max(c, Math.max(v.area.minimum, v.stencil.minimum))) > 1 && (d = 1) : c > 1 && (d = Math.min(c, Math.min(v.area.maximum, v.stencil.maximum))) < 1 && (d = 1)), d && (l.visibleArea = Lf(l.visibleArea,
                d, u));
              var _ = {
                left: e.coordinates.left - e.visibleArea.left,
                right: e.visibleArea.width + e.visibleArea.left - (e.coordinates.width + e.coordinates.left),
                top: e.coordinates.top - e.visibleArea.top,
                bottom: e.visibleArea.height + e.visibleArea.top - (e.coordinates.height + e.coordinates.top)
              };
              return l.visibleArea = $f(l.visibleArea, {
                  left: void 0 !== g.left ? g.left - _.left * d : void 0,
                  top: void 0 !== g.top ? g.top - _.top * d : void 0,
                  bottom: void 0 !== g.bottom ? g.bottom + _.bottom * d : void 0,
                  right: void 0 !== g.right ? g.right + _.right * d : void 0
                }), l.visibleArea = $f(l.visibleArea, ng(l, t)), l.coordinates.width = l.coordinates.width * d, l.coordinates.height = l.coordinates.height * d, l.coordinates.left = l.visibleArea.left + _.left * d, l.coordinates.top = l
                .visibleArea.top + _.top * d, l.coordinates = $f(l.coordinates, qf(jf(l.visibleArea), g)), h && c && (null === (r = t.transformImage) || void 0 === r ? void 0 : r.adjustStencil) && (c > 1 ? p = Math.min(v.area.maximum, c) /
                  d : c < 1 && (p = Math.max(l.coordinates.height / l.visibleArea.height, l.coordinates.width / l.visibleArea.width, c / d)), 1 !== p && (l.visibleArea = Lf(l.visibleArea, p, c > 1 ? u : Mf(l.coordinates)), l.visibleArea = $f(
                    l.visibleArea, ng(l, t)), l.visibleArea = Rf(l.visibleArea, Nf(Kf(l.coordinates, jf(l.visibleArea)))))), l
            }
            return e
          }(e, t, n)), e
        }

        function Mg(e, t) {
          if (eg(e)) {
            var n = fg(e),
              r = sg(e, t),
              i = rg(e, t),
              o = tg(e, t),
              a = Hf(Ff(e.coordinates), r),
              s = a ? {
                height: e.coordinates.height,
                width: e.coordinates.height * a
              } : e.coordinates;
            n.coordinates = se(se({}, n.coordinates), gg({
              width: s.width,
              height: s.height,
              aspectRatio: r,
              sizeRestrictions: dg(o, i)
            })), n.coordinates = Rf(n.coordinates, Pf(Mf(e.coordinates), Mf(n.coordinates)));
            var l = Math.max(n.coordinates.width / n.visibleArea.width, n.coordinates.height / n.visibleArea.height, 1);
            return n.visibleArea = se(se({}, e.visibleArea), gg({
              width: e.visibleArea.width * l,
              height: e.visibleArea.height * l,
              aspectRatio: {
                minimum: Ff(n.boundary),
                maximum: Ff(n.boundary)
              },
              sizeRestrictions: o
            })), n.visibleArea = Rf(n.visibleArea, Pf(Mf(e.visibleArea), Mf(n.visibleArea))), n.visibleArea = $f(n.visibleArea, ng(n, t)), n.coordinates = $f(n.coordinates, qf(jf(n.visibleArea), ig(n, t))), n
          }
          return e
        }

        function Dg(e, t) {
          var n = og(e);
          return e.visibleArea ? {
            left: t.left * n + e.visibleArea.left,
            top: t.top * n + e.visibleArea.top
          } : t
        }

        function Ig(e, t) {
          if (e) {
            var n = Math.abs(e.transforms.rotate % 180);
            return n <= 45 || n >= 135 ? t : {
              horizontal: t.vertical,
              vertical: t.horizontal
            }
          }
          return t
        }

        function Ng(e, t) {
          var n = og(e);
          return {
            left: df(t.left) ? t.left * n : 0,
            top: df(t.top) ? t.top * n : 0
          }
        }

        function Rg(e, t) {
          var n = t.getBoundingClientRect(),
            r = n.left,
            i = n.top,
            o = {
              left: 0,
              top: 0
            },
            a = 0;
          return e.forEach((function(t) {
            o.left += (t.clientX - r) / e.length, o.top += (t.clientY - i) / e.length
          })), e.forEach((function(e) {
            a += mf({
              left: o.left,
              top: o.top
            }, {
              left: e.clientX - r,
              top: e.clientY - i
            })
          })), {
            centerMass: o,
            spread: a,
            count: e.length
          }
        }

        function jg(e, t, n) {
          void 0 === n && (n = .1);
          var r, i, o = t.getBoundingClientRect(),
            a = o.left,
            s = o.top;
          return {
            scale: {
              factor: 1 - n * (r = e.deltaY || e.detail || e.wheelDelta, 0 === (i = +r) || ff(i) ? i : i > 0 ? 1 : -1),
              center: {
                left: e.clientX - a,
                top: e.clientY - s
              }
            }
          }
        }

        function Lg(e) {
          return e.moveCoordinates || e.resizeCoordinates || e.transformImage.move || e.transformImage.rotate || e.transformImage.flip || e.transformImage.scale
        }

        function Fg(e, t) {
          var n, r = e.imageSize,
            i = e.visibleArea,
            o = rg(e, t),
            a = sg(e, t);
          if (i) n = i;
          else {
            var s = Yf(ig(e, t));
            n = {
              width: Math.max(s.minWidth, Math.min(s.maxWidth, r.width)),
              height: Math.max(s.minHeight, Math.min(s.maxHeight, r.height))
            }
          }
          var l = Math.min(a.maximum || 1 / 0, Math.max(a.minimum || 0, Ff(n))),
            c = n.width < n.height ? {
              width: .8 * n.width,
              height: .8 * n.width / l
            } : {
              height: .8 * n.height,
              width: .8 * n.height * l
            };
          return gg(se(se({}, c), {
            aspectRatio: a,
            sizeRestrictions: o
          }))
        }

        function Bg(e, t) {
          return function(e) {
            return {
              minWidth: gf(e.minWidth) ? hf(e.minWidth) : 0,
              minHeight: gf(e.minHeight) ? hf(e.minHeight) : 0,
              maxWidth: gf(e.maxWidth) ? hf(e.maxWidth) : 1 / 0,
              maxHeight: gf(e.maxHeight) ? hf(e.maxHeight) : 1 / 0
            }
          }(t)
        }

        function zg(e) {
          var t = e.visibleArea,
            n = e.coordinates,
            r = t || ug(e);
          return {
            left: (t ? t.left : 0) + r.width / 2 - (n ? n.width / 2 : 0),
            top: (t ? t.top : 0) + r.height / 2 - (n ? n.height / 2 : 0)
          }
        }

        function Hg(e) {
          var t = e.getBoundingClientRect();
          return {
            width: t.width,
            height: t.height
          }
        }

        function Ug(e, t) {
          return e.aspectRatio ? {} : {
            aspectRatio: Zf(sf(t.aspectRatio) ? t.aspectRatio() : t.aspectRatio)
          }
        }

        function Wg(e) {
          return function(t, n) {
            var r = sf(e) ? e(t, n) : e;
            return dg(Bg(0, n), r)
          }
        }

        function Vg(e) {
          return se(se({}, e), {
            sizeRestrictions: function(t, n) {
              return e.sizeRestrictions ? sf(e.sizeRestrictions) ? e.sizeRestrictions(t, n) : e.sizeRestrictions : Bg(0, n)
            },
            areaPositionRestrictions: function(t, n) {
              return e.areaPositionRestrictions ? sf(e.areaPositionRestrictions) ? e.areaPositionRestrictions(t, n) : e.areaPositionRestrictions : function(e, t) {
                var n = e.visibleArea,
                  r = e.boundary,
                  i = t.imageRestriction,
                  o = ug(e),
                  a = {};
                return i === Cf.fillArea ? a = {
                  left: 0,
                  top: 0,
                  right: o.width,
                  bottom: o.height
                } : i === Cf.fitArea && (Ff(r) > Ff(o) ? (a = {
                  top: 0,
                  bottom: o.height
                }, n && (n.width > o.width ? (a.left = -(n.width - o.width) / 2, a.right = o.width - a.left) : (a.left = 0, a.right = o.width))) : (a = {
                  left: 0,
                  right: o.width
                }, n && (n.height > o.height ? (a.top = -(n.height - o.height) / 2, a.bottom = o.height - a.top) : (a.top = 0, a.bottom = o.height)))), a
              }(t, n)
            },
            areaSizeRestrictions: function(t, n) {
              return e.areaSizeRestrictions ? sf(e.areaSizeRestrictions) ? e.areaSizeRestrictions(t, n) : e.areaSizeRestrictions : function(e, t) {
                var n = e.boundary,
                  r = t.imageRestriction,
                  i = ug(e),
                  o = {
                    minWidth: 0,
                    minHeight: 0,
                    maxWidth: 1 / 0,
                    maxHeight: 1 / 0
                  };
                return r === Cf.fillArea ? (o.maxWidth = i.width, o.maxHeight = i.height) : r === Cf.fitArea && (Ff(n) > Ff(i) ? (o.maxHeight = i.height, o.maxWidth = i.height * Ff(n)) : (o.maxWidth = i.width, o.maxHeight = i.width / Ff(
                  n))), o
              }(t, n)
            },
            positionRestrictions: function(t, n) {
              return e.positionRestrictions ? sf(e.positionRestrictions) ? e.positionRestrictions(t, n) : e.positionRestrictions : function(e, t) {
                var n = ug(e),
                  r = {};
                return t.imageRestriction && "none" !== t.imageRestriction && (r = {
                  left: 0,
                  top: 0,
                  right: n.width,
                  bottom: n.height
                }), r
              }(t, n)
            },
            defaultCoordinates: function(t, n) {
              if (e.defaultCoordinates) return sf(e.defaultCoordinates) ? e.defaultCoordinates(t, n) : e.defaultCoordinates;
              var r = e.defaultSize;
              r || (r = Fg);
              var i = sf(r) ? r(t, n) : r,
                o = e.defaultPosition || zg;
              return [i, function(e) {
                return se({}, sf(o) ? o(e, n) : o)
              }]
            },
            defaultVisibleArea: function(t, n) {
              return e.defaultVisibleArea ? sf(e.defaultVisibleArea) ? e.defaultVisibleArea(t, n) : e.defaultVisibleArea : function(e, t) {
                var n = e.coordinates,
                  r = e.boundary,
                  i = ug(e),
                  o = Ff(r);
                if (n) {
                  var a = {
                      height: Math.max(n.height, i.height),
                      width: Math.max(n.width, i.width)
                    },
                    s = {
                      left: 0,
                      top: 0,
                      width: Ff(a) > o ? a.width : a.height * o,
                      height: Ff(a) > o ? a.width / o : a.height
                    };
                  (s = Vf(s, tg(e, t))).left = n.left + n.width / 2 - s.width / 2, s.top = n.top + n.height / 2 - s.height / 2;
                  var l = Wf(n, jf(se({
                      left: 0,
                      top: 0
                    }, i))),
                    c = {};
                  return !l.left && !l.right && s.width <= i.width && (c.left = 0, c.right = i.width), !l.top && !l.bottom && s.height <= i.height && (c.top = 0, c.bottom = i.height), $f(s, c)
                }
                var u = Ff(i),
                  h = {
                    height: u < o ? i.height : i.width / o,
                    width: u < o ? i.height * o : i.width
                  };
                return {
                  left: i.width / 2 - h.width / 2,
                  top: i.height / 2 - h.height / 2,
                  width: h.width,
                  height: h.height
                }
              }(t, n)
            },
            aspectRatio: function(t, n) {
              return Zf(sf(e.aspectRatio) ? e.aspectRatio(t, n) : e.aspectRatio)
            }
          })
        }

        function Xg(e, t) {
          if (e && t) {
            var n = t();
            n && e(n)
          }
        }

        function Gg(e, t) {
          e.forEach((function(e) {
            Xg(e, t)
          }))
        }! function(e) {
          e.fillArea = "fillArea", e.fitArea = "fitArea", e.stencil = "stencil", e.none = "none"
        }(Cf || (Cf = {})),
        function(e) {
          e.coordinates = "coordinates", e.visibleArea = "visibleArea"
        }(Sf || (Sf = {})),
        function(e) {
          e.limit = "limit", e.zoom = "zoom", e.unsafe = "unsafe"
        }(Ef || (Ef = {}));
        var Yg = function() {
            var e = this;
            this.getTransitions = function() {
              var t = e.getData(),
                n = e.getProps().transitions;
              return se(se({}, uf(n, {
                timingFunction: "ease-in-out",
                duration: 350
              })), {
                active: t.transitions
              })
            }, this.getInteractions = function() {
              return wf(e.getData().interactions)
            }, this.hasInteractions = function() {
              return Lg(e.getData().interactions)
            }, this.startTransitions = function() {
              var t = e.getProps(),
                n = t.onTransitionsStart,
                r = t.onUpdate,
                i = t.getInstance,
                o = e.getData(),
                a = o.transitions,
                s = le(o, ["transitions"]);
              e.setData(se(se({}, s), {
                transitions: !0
              })), a || Gg([n, r], i), e.endTransitions()
            }, this.endTransitions = kf((function() {
              var t = e.getProps(),
                n = t.onTransitionsEnd,
                r = t.onUpdate,
                i = t.getInstance;
              e.setData(se(se({}, e.getData()), {
                transitions: !1
              })), Gg([n, r], i)
            }), (function() {
              return e.getTransitions().duration
            })), this.applyPostProcess = function(t, n) {
              var r, i = e.getProps(),
                o = i.settings,
                a = i.postProcess,
                s = t.name,
                l = t.interaction,
                c = void 0 !== l && l,
                u = t.transitions,
                h = void 0 !== u && u,
                p = t.immediately,
                d = {
                  name: s,
                  interaction: c,
                  transitions: h,
                  immediately: void 0 !== p && p
                };
              return r = a, Array.isArray(r) ? a.reduce((function(e, t) {
                return t(e, o, d)
              }), n) : sf(a) ? a(n, o, d) : n
            }, this.updateState = function(t, n, r) {
              void 0 === n && (n = {}), void 0 === r && (r = []);
              var i = n.transitions,
                o = void 0 !== i && i,
                a = e.getProps(),
                s = a.onTransitionsStart,
                l = a.getInstance,
                c = a.onChange,
                u = a.onUpdate,
                h = a.settings,
                p = e.getData(),
                d = sf(t) ? t(p.state, h) : t,
                f = d ? .001 * og(d) : .001,
                g = !xf(p.state, d, f),
                m = ["coordinates", "boundary", "visibleArea", "imageSize", "transforms"].some((function(e) {
                  var t;
                  return !xf(null === (t = p.state) || void 0 === t ? void 0 : t[e], null == d ? void 0 : d[e], f)
                })),
                v = p;
              g && (o && m && e.endTransitions(), v = se(se({}, v), {
                state: fg(d),
                transitions: o && m
              }), e.setData(v), Xg(c, l)), v.transitions && !p.transitions && Xg(s, l), Gg(function() {
                for (var e = 0, t = 0, n = arguments.length; t < n; t++) e += arguments[t].length;
                var r = Array(e),
                  i = 0;
                for (t = 0; t < n; t++)
                  for (var o = arguments[t], a = 0, s = o.length; a < s; a++, i++) r[i] = o[a];
                return r
              }(r, [u]), l)
            }, this.setInteractions = function(t) {
              var n = e.getProps(),
                r = n.onInteractionStart,
                i = n.onInteractionEnd,
                o = n.getInstance,
                a = e.getInteractions(),
                s = se(se({}, a), t);
              if (xf(a, s) || e.setData(se(se({}, e.getData()), {
                  interactions: s
                })), Lg(a) !== Lg(s))
                if (Lg(a)) {
                  var l = e.getData().state;
                  e.updateState((function() {
                    return l && e.applyPostProcess({
                      name: "interactionEnd",
                      immediately: !0,
                      transitions: !0
                    }, l)
                  }), {
                    transitions: !0
                  }, [i])
                } else Xg(r, o)
            }, this.resetState = function(t, n) {
              e.updateState(e.createDefaultState(t, n))
            }, this.clear = function() {
              e.updateState(null)
            }, this.reconcileState = function(t) {
              void 0 === t && (t = {});
              var n = e.getProps(),
                r = n.reconcileStateAlgorithm,
                i = n.settings,
                o = e.getData().state,
                a = t.transitions,
                s = void 0 !== a && a;
              if (o && !hg(o, i)) {
                var l = (r || Mg)(o, i);
                l = e.applyPostProcess({
                  name: "reconcileState",
                  immediately: !0,
                  transitions: s
                }, l), e.updateState(l, {
                  transitions: s
                })
              }
            }, this.transformImage = function(t, n) {
              void 0 === n && (n = {});
              var r = n.transitions,
                i = void 0 === r || r,
                o = n.interaction,
                a = void 0 === o || o,
                s = n.immediately,
                l = void 0 !== s && s,
                c = n.normalize,
                u = void 0 === c || c,
                h = e.getProps(),
                p = h.transformImageAlgorithm,
                d = h.onTransformImage,
                f = h.onTransformImageEnd,
                g = h.settings,
                m = e.getData().state,
                v = [];
              if (m) {
                u && (t = function(e, t) {
                  return t.scale && (t.scale = {
                    factor: df(t.scale) ? t.scale : t.scale.factor,
                    center: !df(t.scale) && t.scale.center ? Dg(e, t.scale.center) : void 0
                  }), t.rotate && (t.rotate = {
                    angle: df(t.rotate) ? t.rotate : t.rotate.angle,
                    center: !df(t.rotate) && t.rotate.center ? Dg(e, t.rotate.center) : void 0
                  }), t.move && (t.move = Ng(e, t.move)), t
                }(m, t));
                var _ = e.applyPostProcess({
                  name: "transformImage",
                  transitions: i,
                  immediately: l
                }, (p || Pg)(m, g, t));
                v.push(d), a ? e.setInteractions({
                  transformImage: {
                    rotate: !lf(t.rotate),
                    flip: !lf(t.flip),
                    scale: !lf(t.scale),
                    move: !lf(t.move)
                  }
                }) : (_ = e.applyPostProcess({
                  name: "transformImageEnd",
                  transitions: i,
                  immediately: !0
                }, _), v.push(f)), e.updateState(_, {
                  transitions: l && i
                }, v)
              }
            }, this.transformImageEnd = function(t) {
              void 0 === t && (t = {});
              var n = t.immediately,
                r = void 0 === n || n,
                i = t.transitions,
                o = void 0 === i || i,
                a = e.getData().state,
                s = e.getProps().onTransformImageEnd;
              e.updateState((function() {
                return a && e.applyPostProcess({
                  name: "transformImageEnd",
                  immediately: r,
                  transitions: o
                }, a)
              }), {
                transitions: o
              }, [s]), e.setInteractions({
                transformImage: {
                  rotate: !1,
                  flip: !1,
                  scale: !1,
                  move: !1
                }
              })
            }, this.zoomImage = function(t, n) {
              void 0 === n && (n = {});
              var r = n.interaction,
                i = void 0 !== r && r,
                o = n.immediately,
                a = void 0 === o || o,
                s = n.transitions,
                l = void 0 === s || s,
                c = n.normalize,
                u = void 0 !== c && c;
              e.transformImage({
                scale: t
              }, {
                interaction: i,
                immediately: a,
                transitions: l,
                normalize: u
              })
            }, this.moveImage = function(t, n, r) {
              void 0 === r && (r = {});
              var i = r.interaction,
                o = void 0 !== i && i,
                a = r.immediately,
                s = void 0 === a || a,
                l = r.transitions,
                c = void 0 === l || l,
                u = r.normalize,
                h = void 0 !== u && u;
              e.transformImage({
                move: {
                  left: t,
                  top: n
                }
              }, {
                interaction: o,
                immediately: s,
                transitions: c,
                normalize: h
              })
            }, this.flipImage = function(t, n, r) {
              void 0 === r && (r = {});
              var i = r.interaction,
                o = void 0 !== i && i,
                a = r.immediately,
                s = void 0 === a || a,
                l = r.transitions,
                c = void 0 === l || l,
                u = r.normalize,
                h = void 0 === u || u,
                p = e.getState(),
                d = {
                  horizontal: t,
                  vertical: n
                };
              e.transformImage({
                flip: p && h ? Ig(p, d) : d
              }, {
                interaction: o,
                immediately: s,
                transitions: c
              })
            }, this.rotateImage = function(t, n) {
              void 0 === n && (n = {});
              var r = n.interaction,
                i = void 0 !== r && r,
                o = n.immediately,
                a = void 0 === o || o,
                s = n.transitions,
                l = void 0 === s || s,
                c = n.normalize,
                u = void 0 !== c && c;
              e.transformImage({
                rotate: t
              }, {
                interaction: i,
                immediately: a,
                transitions: l,
                normalize: u
              })
            }, this.reset = function(t, n) {
              e.resetState(t, n)
            }, this.setState = function(t, n) {
              void 0 === n && (n = {});
              var r = e.getSettings(),
                i = e.getData().state,
                o = n.transitions,
                a = void 0 === o || o,
                s = n.immediately,
                l = void 0 !== s && s,
                c = n.interaction,
                u = void 0 !== c && c,
                h = n.postprocess,
                p = void 0 !== h && h,
                d = t && (sf(t) ? t(i, r) : se(se({}, i), t));
              e.updateState((function() {
                return p ? d && e.applyPostProcess({
                  name: "setState",
                  immediately: l,
                  transitions: a,
                  interaction: u
                }, d) : d
              }), {
                transitions: a
              })
            }, this.setCoordinates = function(t, n) {
              void 0 === n && (n = {});
              var r = e.getData().state,
                i = e.getProps(),
                o = i.setCoordinatesAlgorithm,
                a = i.settings,
                s = n.transitions,
                l = void 0 === s || s,
                c = n.immediately,
                u = void 0 === c || c;
              e.updateState((function() {
                return r && e.applyPostProcess({
                  name: "setCoordinates",
                  immediately: u,
                  transitions: l
                }, (o || _g)(r, a, t, Ef.zoom))
              }), {
                transitions: l
              })
            }, this.setVisibleArea = function(t, n) {
              void 0 === n && (n = {});
              var r = n.transitions,
                i = void 0 === r || r,
                o = n.immediately,
                a = void 0 === o || o,
                s = e.getData().state,
                l = e.getProps(),
                c = l.setVisibleAreaAlgorithm,
                u = l.settings;
              e.updateState((function() {
                return s && e.applyPostProcess({
                  name: "setVisibleArea",
                  immediately: a,
                  transitions: i
                }, (c || yg)(s, u, t))
              }), {
                transitions: i
              })
            }, this.setBoundary = function(t, n) {
              void 0 === n && (n = {});
              var r = e.getData().state,
                i = e.getProps(),
                o = i.setBoundaryAlgorithm,
                a = i.settings,
                s = n.transitions,
                l = void 0 !== s && s,
                c = n.immediately,
                u = void 0 === c || c;
              t ? e.updateState((function() {
                return r && e.applyPostProcess({
                  name: "setBoundary",
                  immediately: u,
                  transitions: l
                }, (o || Ag)(r, a, t))
              })) : e.updateState(null)
            }, this.moveCoordinates = function(t, n) {
              void 0 === n && (n = {});
              var r = e.getData(),
                i = e.getProps(),
                o = i.moveCoordinatesAlgorithm,
                a = i.onMove,
                s = i.onMoveEnd,
                l = i.settings,
                c = n.interaction,
                u = void 0 === c || c,
                h = n.transitions,
                p = void 0 !== h && h,
                d = n.immediately,
                f = void 0 !== d && d,
                g = n.normalize,
                m = void 0 === g || g,
                v = [];
              if (!r.transitions && r.state) {
                var _ = m ? Ng(r.state, t) : function(e) {
                    return {
                      left: df(e.left) ? e.left : 0,
                      top: df(e.top) ? e.top : 0
                    }
                  }(t),
                  b = e.applyPostProcess({
                    name: "moveCoordinates",
                    interaction: u,
                    immediately: f,
                    transitions: p
                  }, (o || xg)(r.state, l, _));
                v.push(a), u ? e.setInteractions({
                  moveCoordinates: !0
                }) : (b = e.applyPostProcess({
                  name: "moveCoordinatesEnd",
                  interaction: u,
                  immediately: f,
                  transitions: p
                }, b), v.push(s)), e.updateState(b, {
                  transitions: f && p
                }, v)
              }
            }, this.moveCoordinatesEnd = function(t) {
              void 0 === t && (t = {});
              var n = e.getData().state,
                r = e.getProps().onMoveEnd,
                i = t.transitions,
                o = void 0 === i || i,
                a = t.immediately,
                s = void 0 !== a && a;
              e.updateState((function() {
                return n && e.applyPostProcess({
                  name: "moveCoordinatesEnd",
                  transitions: o,
                  immediately: s
                }, n)
              }), {
                transitions: o
              }, [r]), e.setInteractions({
                moveCoordinates: !1
              })
            }, this.resizeCoordinates = function(t, n, r, i) {
              void 0 === i && (i = {});
              var o = e.getData().state,
                a = e.getProps(),
                s = a.resizeCoordinatesAlgorithm,
                l = a.onResize,
                c = a.onResizeEnd,
                u = a.settings,
                h = i.interaction,
                p = void 0 === h || h,
                d = i.transitions,
                f = void 0 !== d && d,
                g = i.immediately,
                m = void 0 !== g && g,
                v = i.normalize,
                _ = void 0 === v || v;
              if (!e.getTransitions().active && o) {
                var b = [],
                  y = _ ? function(e, t) {
                    var n = og(e);
                    return {
                      left: df(t.left) ? t.left * n : 0,
                      top: df(t.top) ? t.top * n : 0,
                      right: df(t.right) ? t.right * n : 0,
                      bottom: df(t.bottom) ? t.bottom * n : 0
                    }
                  }(o, n) : function(e) {
                    return {
                      left: df(e.left) ? e.left : 0,
                      top: df(e.top) ? e.top : 0,
                      right: df(e.right) ? e.right : 0,
                      bottom: df(e.bottom) ? e.bottom : 0
                    }
                  }(n),
                  w = e.applyPostProcess({
                    name: "resizeCoordinates",
                    interaction: p,
                    immediately: m,
                    transitions: f
                  }, (s || Og)(o, u, t, y, cf(r) ? r : {}));
                b.push(l), p ? e.setInteractions({
                  resizeCoordinates: !0
                }) : (w = e.applyPostProcess({
                  name: "resizeCoordinatesEnd",
                  interaction: p,
                  immediately: m,
                  transitions: f
                }, w), b.push(c)), e.updateState(w, {
                  transitions: m && f
                }, b)
              }
            }, this.resizeCoordinatesEnd = function(t) {
              void 0 === t && (t = {});
              var n = e.getProps().onResizeEnd,
                r = e.getData().state,
                i = t.transitions,
                o = void 0 === i || i,
                a = t.immediately,
                s = void 0 !== a && a;
              e.updateState((function() {
                return r && e.applyPostProcess({
                  name: "resizeCoordinatesEnd",
                  transitions: o,
                  immediately: s
                }, r)
              }), {
                transitions: o
              }, [n]), e.setInteractions({
                resizeCoordinates: !1
              })
            }, this.getStencilCoordinates = function() {
              return ag(e.getData().state)
            }, this.getCoordinates = function(t) {
              void 0 === t && (t = {});
              var n = e.getData().state,
                r = e.getProps().settings;
              if (n && n.coordinates) {
                var i = t.round;
                return void 0 === i || i ? function(e, t) {
                  if (eg(e)) {
                    var n = rg(e, t),
                      r = ig(e, t),
                      i = {
                        width: Math.round(e.coordinates.width),
                        height: Math.round(e.coordinates.height),
                        left: Math.round(e.coordinates.left),
                        top: Math.round(e.coordinates.top)
                      };
                    return i.width > n.maxWidth ? i.width = Math.floor(e.coordinates.width) : i.width < n.minWidth && (i.width = Math.ceil(e.coordinates.width)), i.height > n.maxHeight ? i.height = Math.floor(e.coordinates.height) : i
                      .height < n.minHeight && (i.height = Math.ceil(e.coordinates.height)), $f(i, r)
                  }
                  return null
                }(n, r) : se({}, n.coordinates)
              }
              return null
            }, this.getVisibleArea = function() {
              var t = e.getData().state;
              return (null == t ? void 0 : t.visibleArea) ? se({}, t.visibleArea) : null
            }, this.getSettings = function() {
              var t = e.getProps().settings;
              return se({}, t)
            }, this.getState = function() {
              return fg(e.getData().state)
            }, this.getTransforms = function() {
              var t = e.getData().state;
              return t ? wf(t.transforms) : {
                rotate: 0,
                flip: {
                  horizontal: !1,
                  vertical: !1
                }
              }
            }, this.createDefaultState = function(t, n) {
              var r = e.getProps(),
                i = r.createStateAlgorithm,
                o = r.settings;
              return e.applyPostProcess({
                name: "createState",
                immediately: !0,
                transitions: !1
              }, (i || wg)({
                image: n,
                boundary: t
              }, o))
            }, this.isConsistent = function() {
              var t = e.getData().state,
                n = e.getProps().settings;
              return !t || hg(t, n)
            }
          },
          qg = {
            linear: function(e) {
              return e
            },
            "ease-in": function(e) {
              return Math.pow(e, 1.675)
            },
            "ease-out": function(e) {
              return 1 - Math.pow(1 - e, 1.675)
            },
            "ease-in-out": function(e) {
              return .5 * (Math.sin((e - .5) * Math.PI) + 1)
            }
          },
          Kg = function() {
            function e() {
              this.active = !1
            }
            return e.prototype.start = function(e) {
              var t;
              this.onStart = e.onStart, this.onProgress = e.onProgress, this.onStop = e.onStop, this.active || null === (t = this.onStart) || void 0 === t || t.call(this), this.id && window.cancelAnimationFrame(this.id), this.startTime =
                performance.now(), this.timingFunction = e.timingFunction, this.endTime = this.startTime + e.duration, this.active = !0, this.animate()
            }, e.prototype.animate = function() {
              var e = this;
              if (this.startTime && this.endTime) {
                var t = qg[this.timingFunction];
                t || (t = qg["ease-out"]);
                var n = 1 - (this.endTime - performance.now()) / (this.endTime - this.startTime),
                  r = Math.min(1, t(n));
                this.onProgress && this.onProgress(r), n < 1 ? this.id = window.requestAnimationFrame((function() {
                  return e.animate()
                })) : this.stop()
              } else this.stop()
            }, e.prototype.stop = function() {
              this.active = !1, this.id && window.cancelAnimationFrame(this.id), this.onStop && this.onStop()
            }, e
          }();

        function $g(e, t, n, r, i) {
          if (eg(e)) {
            var o = e.transforms,
              a = e.coordinates,
              s = 0 !== o.rotate || o.flip.horizontal || o.flip.vertical ? function(e, t, n) {
                var r = n.rotate,
                  i = n.flip,
                  o = {
                    width: "naturalWidth" in t ? t.naturalWidth : t.width,
                    height: "naturalHeight" in t ? t.naturalHeight : t.height
                  },
                  a = Xf(o, r),
                  s = e.getContext("2d");
                if (e.height = a.height, e.width = a.width, s) {
                  s.save();
                  var l = Gf(Mf(se({
                    left: 0,
                    top: 0
                  }, o)), r);
                  s.translate(-(l.left - a.width / 2), -(l.top - a.height / 2)), s.rotate(r * Math.PI / 180), s.translate(i.horizontal ? o.width : 0, i.vertical ? o.height : 0), s.scale(i.horizontal ? -1 : 1, i.vertical ? -1 : 1), s.drawImage(t,
                    0, 0, o.width, o.height), s.restore()
                }
                return e
              }(r, t, o) : t,
              l = se({
                minWidth: 0,
                minHeight: 0,
                maxWidth: 1 / 0,
                maxHeight: 1 / 0,
                maxArea: 1 / 0,
                imageSmoothingEnabled: !0,
                imageSmoothingQuality: "high",
                fillColor: "transparent"
              }, i),
              c = function(e) {
                return e.find((function(e) {
                  return gf(e)
                }))
              },
              u = gg({
                sizeRestrictions: {
                  minWidth: c([l.width, l.minWidth]) || 0,
                  minHeight: c([l.height, l.minHeight]) || 0,
                  maxWidth: c([l.width, l.maxWidth]) || 1 / 0,
                  maxHeight: c([l.height, l.maxHeight]) || 1 / 0
                },
                width: a.width,
                height: a.height,
                aspectRatio: {
                  minimum: a.width / a.height,
                  maximum: a.width / a.height
                }
              });
            if (l.maxArea && u.width * u.height > l.maxArea) {
              var h = Math.sqrt(l.maxArea / (u.width * u.height));
              u = {
                width: Math.round(h * u.width),
                height: Math.round(h * u.height)
              }
            }
            return function(e, t, n, r, i) {
              e.width = r ? r.width : n.width, e.height = r ? r.height : n.height;
              var o = e.getContext("2d");
              if (o) {
                o.clearRect(0, 0, e.width, e.height), i && (i.imageSmoothingEnabled && (o.imageSmoothingEnabled = i.imageSmoothingEnabled), i.imageSmoothingQuality && (o.imageSmoothingQuality = i.imageSmoothingQuality), i.fillColor && (o
                  .fillStyle = i.fillColor, o.fillRect(0, 0, e.width, e.height), o.save()));
                var a = n.left < 0 ? -n.left : 0,
                  s = n.top < 0 ? -n.top : 0;
                o.drawImage(t, n.left + a, n.top + s, n.width, n.height, a, s, e.width, e.height)
              }
              return e
            }(n, s, a, u, l)
          }
          return null
        }

        function Zg(e, t, n) {
          t.style.width = "0px", t.style.height = "0px", t.style.width = Math.max(e.clientWidth, n.width) + "px";
          var r = n.width / n.height;
          t.style.height = Math.max(e.clientHeight, t.clientWidth / r) + "px", t.style.width = t.clientHeight * r + "px"
        }

        function Jg(e, t, n) {
          t.style.width = "0px", t.style.height = "0px", t.style.width = Math.max(e.getBoundingClientRect().width, n.width) + "px";
          var r = n.width / n.height;
          t.style.height = Math.max(e.getBoundingClientRect().height, t.getBoundingClientRect().width / r) + "px", t.style.width = t.getBoundingClientRect().height * r + "px", t.clientWidth / t.clientHeight > e.clientWidth / e.clientHeight ? t
            .clientWidth > e.clientWidth && (t.style.width = e.clientWidth + "px", t.style.height = e.clientWidth / r + "px") : t.clientHeight > e.clientHeight && (t.style.height = e.clientHeight + "px", t.style.width = e.clientHeight * r + "px")
        }
        var Qg = 4;

        function em(e) {
          return new Promise((function(t, n) {
            try {
              if (e)
                if (/^data:/i.test(e)) t(function(e) {
                  e = e.replace(/^data:([^;]+);base64,/gim, "");
                  for (var t = atob(e), n = t.length, r = new ArrayBuffer(n), i = new Uint8Array(r), o = 0; o < n; o++) i[o] = t.charCodeAt(o);
                  return r
                }(e));
                else if (/^blob:/i.test(e)) {
                var r = new FileReader;
                r.onload = function(e) {
                  var n;
                  t(null === (n = e.target) || void 0 === n ? void 0 : n.result)
                }, o = e, a = function(e) {
                  r.readAsArrayBuffer(e)
                }, (s = new XMLHttpRequest).open("GET", o, !0), s.responseType = "blob", s.onload = function() {
                  200 != this.status && 0 !== this.status || a(this.response)
                }, s.send()
              } else {
                var i = new XMLHttpRequest;
                i.onreadystatechange = function() {
                  i.readyState === Qg && (200 === i.status || 0 === i.status ? t(i.response) : n("Warning: could not load an image to parse its orientation"))
                }, i.onprogress = function() {
                  "image/jpeg" !== i.getResponseHeader("content-type") && i.abort()
                }, i.withCredentials = !1, i.open("GET", e, !0), i.responseType = "arraybuffer", i.send(null)
              } else n("Error: the image is empty")
            } catch (e) {
              n(e)
            }
            var o, a, s
          }))
        }

        function tm(e) {
          var t = e.rotate,
            n = void 0 === t ? 0 : t,
            r = e.flip,
            i = void 0 === r ? {
              horizontal: !1,
              vertical: !1
            } : r,
            o = e.scale,
            a = void 0 === o ? 1 : o;
          return " rotate(" + n + "deg) scaleX(" + a * (i.horizontal ? -1 : 1) + ") scaleY(" + a * (i.vertical ? -1 : 1) + ")"
        }

        function nm(e) {
          try {
            var t, n = new DataView(e),
              r = void 0,
              i = void 0,
              o = void 0,
              a = void 0;
            if (255 === n.getUint8(0) && 216 === n.getUint8(1))
              for (var s = n.byteLength, l = 2; l + 1 < s;) {
                if (255 === n.getUint8(l) && 225 === n.getUint8(l + 1)) {
                  o = l;
                  break
                }
                l++
              }
            if (o && (r = o + 10, "Exif" === function(e, t, n) {
                var r, i = "";
                for (r = t, n += t; r < n; r++) i += String.fromCharCode(e.getUint8(r));
                return i
              }(n, o + 4, 4))) {
              var c = n.getUint16(r);
              if (((i = 18761 === c) || 19789 === c) && 42 === n.getUint16(r + 2, i)) {
                var u = n.getUint32(r + 4, i);
                u >= 8 && (a = r + u)
              }
            }
            if (a)
              for (var h = n.getUint16(a, i), p = 0; p < h; p++) {
                l = a + 12 * p + 2;
                if (274 === n.getUint16(l, i)) {
                  l += 8, t = n.getUint16(l, i), n.setUint16(l, 1, i);
                  break
                }
              }
            return t
          } catch (e) {
            return null
          }
        }

        function rm(e) {
          var t = e.src,
            n = e.arrayBuffer,
            r = void 0 === n ? null : n,
            i = e.orientation,
            o = void 0 === i ? null : i,
            a = {
              src: t,
              arrayBuffer: r,
              revoke: !1,
              transforms: {
                flip: {
                  horizontal: !1,
                  vertical: !1
                },
                rotate: 0
              }
            };
          return r && o && o > 1 ? rf(t) || !of(t) ? (a.src = URL.createObjectURL(new Blob([r])), a.revoke = !0) : a.src = function(e) {
            for (var t = [], n = new Uint8Array(e); n.length > 0;) {
              var r = n.subarray(0, 8192);
              t.push(String.fromCharCode.apply(null, Array.from ? Array.from(r) : r.slice())), n = n.subarray(8192)
            }
            return "data:image/jpeg;base64," + btoa(t.join(""))
          }(r) : a.src = t, o && (a.transforms = function(e) {
            var t = {
              flip: {
                horizontal: !1,
                vertical: !1
              },
              rotate: 0
            };
            if (e) switch (e) {
              case 2:
                t.flip.horizontal = !0;
                break;
              case 3:
                t.rotate = -180;
                break;
              case 4:
                t.flip.vertical = !0;
                break;
              case 5:
                t.rotate = 90, t.flip.vertical = !0;
                break;
              case 6:
                t.rotate = 90;
                break;
              case 7:
                t.rotate = 90, t.flip.horizontal = !0;
                break;
              case 8:
                t.rotate = -90
            }
            return t
          }(o)), a
        }

        function im(e, t) {
          return void 0 === t && (t = {}),
            function(e, t) {
              void 0 === t && (t = {});
              var n = t.checkOrientation,
                r = t.parse;
              return new Promise((function(t) {
                n || r ? em(e).then((function(n) {
                  var r = nm(n);
                  t(rm(n ? {
                    src: e,
                    arrayBuffer: n,
                    orientation: r
                  } : {
                    src: e,
                    arrayBuffer: null,
                    orientation: null
                  }))
                })).catch((function(n) {
                  t(rm({
                    src: e
                  }))
                })) : t(rm({
                  src: e
                }))
              }))
            }(e, se(se({}, t), {
              crossOrigin: af(e) && t.crossOrigin
            })).then((function(e) {
              return new Promise((function(n, r) {
                (function(e, t) {
                  return void 0 === t && (t = {}), new Promise((function(n, r) {
                    var i = document.createElement("img");
                    t.crossOrigin && (i.crossOrigin = !0 !== t.crossOrigin ? t.crossOrigin : "anonymous"), i.src = e, i.style.visibility = "hidden", i.style.position = "fixed", document.body.appendChild(i), i.complete ? (n(i),
                      document.body.removeChild(i)) : (i.addEventListener("load", (function() {
                      n(i), document.body.removeChild(i)
                    })), i.addEventListener("error", (function() {
                      r(null), document.body.removeChild(i)
                    })))
                  }))
                })(e.src, t).then((function(t) {
                  n(se(se({}, e), {
                    width: t.naturalWidth,
                    height: t.naturalHeight
                  }))
                })).catch((function() {
                  r(null)
                }))
              }))
            }))
        }

        function om(e, t, n, r, i) {
          void 0 === i && (i = null);
          var o = e.width > e.height ? {
              width: Math.min(512, e.width),
              height: Math.min(512, e.width) / (e.width / e.height)
            } : {
              height: Math.min(512, e.height),
              width: Math.min(512, e.height) * (e.width / e.height)
            },
            a = ug(t),
            s = {
              rotate: t.transforms.rotate,
              flip: {
                horizontal: t.transforms.flip.horizontal,
                vertical: t.transforms.flip.vertical
              },
              translateX: n.left / r,
              translateY: n.top / r,
              scale: 1 / r
            },
            l = {
              left: (o.width - a.width) / (2 * r),
              top: (o.height - a.height) / (2 * r)
            },
            c = {
              left: (1 - 1 / r) * o.width / 2,
              top: (1 - 1 / r) * o.height / 2
            },
            u = se(se({}, s), {
              scale: s.scale * (e.width / o.width)
            }),
            h = {
              width: o.width + "px",
              height: o.height + "px",
              left: "0px",
              top: "0px",
              transition: "none",
              transform: "translate3d(" + (-l.left - c.left - s.translateX) + "px, " + (-l.top - c.top - s.translateY) + "px, 0px)" + tm(u),
              willChange: "none"
            };
          return i && i.active && (h.willChange = "transform", h.transition = i.duration + "ms " + i.timingFunction), h
        }

        function am(e, t, n) {
          return n.immediately ? function(e, t) {
            if (eg(e)) {
              var n = fg(e),
                r = {
                  width: 0,
                  height: 0
                };
              Ff(n.boundary) > Ff(n.coordinates) ? (r.height = .8 * n.boundary.height, r.width = r.height * Ff(n.coordinates)) : (r.width = .8 * n.boundary.width, r.height = r.width * Ff(n.coordinates)), n.visibleArea = Lf(n.visibleArea, n
                .coordinates.width * n.boundary.width / (n.visibleArea.width * r.width));
              var i = Uf(n.visibleArea, tg(n, t));
              return n.visibleArea = Lf(n.visibleArea, i), 1 !== i && (r.height /= i, r.width /= i), n.visibleArea = Rf(n.visibleArea, Pf(Mf(n.coordinates), Mf(n.visibleArea))), n.visibleArea = $f(n.visibleArea, ng(n, t)), n.coordinates = $f(n
                .coordinates, qf(jf(n.visibleArea), ig(n, t))), n
            }
            return e
          }(e, t) : e
        }
        var sm = function(e, t) {
          var n, r = (n = vt(!0)).current ? (n.current = !1, !0) : n.current;
          gt((function() {
            if (!r) return e()
          }), t)
        };
        var lm = function(e) {
          function t(t, n) {
            var r = e.call(this) || this;
            return r.props = t, r.notify = n, r.data = {
              state: null,
              transitions: !1,
              interactions: {
                moveCoordinates: !1,
                resizeCoordinates: !1,
                transformImage: {
                  rotate: !1,
                  move: !1,
                  scale: !1,
                  flip: !1
                }
              }
            }, r
          }
          return ae(t, e), t.prototype.getProps = function() {
            return this.props()
          }, t.prototype.setData = function(e) {
            this.data = e, this.notify()
          }, t.prototype.getData = function() {
            return this.data
          }, t
        }(Yg);

        function cm() {
          var e = he(dt({}), 2)[1];
          return function() {
            e({})
          }
        }

        function um(e) {
          var t = cm(),
            n = function(e) {
              var t = vt(e);
              return t.current = e,
                function() {
                  for (var e = [], n = 0; n < arguments.length; n++) e[n] = arguments[n];
                  return t.current.apply(t, pe([], he(e), !1))
                }
            }((function() {
              var t = e(),
                n = t.settings,
                r = le(t, ["settings"]),
                i = se({
                  imageRestriction: Cf.fitArea,
                  transformImage: {
                    adjustStencil: !0
                  }
                }, n),
                o = se({
                  transitions: !0
                }, r);
              return se({
                settings: se(se({}, i), Vg(i))
              }, o)
            }));
          return vt(new lm(n, t)).current
        }
        var hm = function(e) {
          var t = vt(e),
            n = function() {
              t.current && t.current()
            };
          gt((function() {
            t.current = e
          }), [e]), gt((function() {
            return window.addEventListener("resize", n), window.addEventListener("orientationchange", n),
              function() {
                window.removeEventListener("resize", n), window.removeEventListener("orientationchange", n)
              }
          }), [])
        };

        function pm(e) {
          var t = this,
            n = e(),
            r = n.src,
            i = n.onReady,
            o = n.onError,
            a = n.onUpdate,
            s = n.canvas,
            l = void 0 === s || s,
            c = n.unloadTime,
            u = void 0 === c ? 500 : c,
            h = n.crossOrigin,
            p = void 0 === h || h,
            d = n.checkOrientation,
            f = void 0 === d || d,
            g = n.autoReconcileState,
            m = void 0 === g || g,
            v = vt(null),
            _ = vt(null),
            b = vt(null),
            y = vt(null),
            w = he(function(e) {
              var t = he(dt(e), 2),
                n = t[0],
                r = t[1],
                i = he(dt(null), 2),
                o = i[0],
                a = i[1],
                s = vt(e);
              return sm((function() {
                o && o(n, s.current)
              }), [o]), [n, function(e, t) {
                s.current = n, r(e), a((function() {
                  return t
                }))
              }]
            }(null), 2),
            x = w[0],
            k = w[1],
            C = um((function() {
              return se(se({}, e()), {
                getInstance: function() {
                  return y.current
                }
              })
            })),
            S = function(e) {
              var t = e.src,
                n = e.onLoadingStart,
                r = e.onLoadingEnd,
                i = e.onError,
                o = e.onLoad,
                a = e.crossOrigin,
                s = e.checkOrientation,
                l = e.canvas,
                c = e.unloadTime,
                u = he(dt(!1), 2),
                h = u[0],
                p = u[1],
                d = he(dt(!1), 2),
                f = d[0],
                g = d[1],
                m = he(dt(null), 2),
                v = m[0],
                _ = m[1],
                b = vt(null);
              return gt((function() {
                if (b.current !== t)
                  if (b.current = t || null, g(!1), t) {
                    p(!0), null == n || n();
                    var e = [im(t, {
                      crossOrigin: lf(a) ? l : a,
                      checkOrientation: s
                    })];
                    f && c && e.push(yf(c)), Promise.all(e).then((function(e) {
                      var n = he(e, 1)[0];
                      b.current === t && (_(n), null == o || o(n))
                    })).catch((function() {
                      b.current === t && (null == i || i())
                    })).finally((function() {
                      b.current === t && (null == r || r(), p(!1))
                    }))
                  } else c ? yf(c).then((function() {
                    _(null)
                  })) : _(null)
              }), [t]), gt((function() {
                v && g(!0)
              }), [v]), {
                isLoading: function() {
                  return h
                },
                isLoaded: function() {
                  return f
                },
                getImage: function() {
                  return v
                },
                setImage: _
              }
            }({
              src: r,
              crossOrigin: p,
              checkOrientation: f,
              unloadTime: u,
              canvas: l,
              onLoad: function() {
                y.current && (null == i || i(y.current))
              },
              onError: function() {
                y.current && (null == o || o(y.current))
              }
            }),
            E = function(e, t) {
              void 0 === t && (t = !0);
              var n = he(dt(t), 2),
                r = n[0],
                i = n[1];
              return mt((function() {
                r && !e.hasInteractions() && e.reconcileState()
              })), {
                pause: function() {
                  i(!1)
                },
                resume: function() {
                  i(!0)
                }
              }
            }(C, m),
            T = function() {
              return ce(t, void 0, void 0, (function() {
                var e, t, n;
                return ue(this, (function(r) {
                  switch (r.label) {
                    case 0:
                      return _.current ? (E.pause(), e = S.getImage(), [4, null === (n = _.current) || void 0 === n ? void 0 : n.stretchTo(e)]) : [3, 2];
                    case 1:
                      t = r.sent(), k(e, (function() {
                        t && e ? C.reset(t, e) : C.clear()
                      })), E.resume(), r.label = 2;
                    case 2:
                      return [2]
                  }
                }))
              }))
            },
            O = function() {
              return ce(t, void 0, void 0, (function() {
                var e, t, n, r;
                return ue(this, (function(i) {
                  switch (i.label) {
                    case 0:
                      return _.current ? (E.pause(), e = S.getImage(), [4, null === (r = _.current) || void 0 === r ? void 0 : r.stretchTo(e)]) : [3, 2];
                    case 1:
                      (t = i.sent()) && e ? (n = C.getState()) ? t.width === n.boundary.width && t.height === n.boundary.height || (C.setBoundary(t), C.reconcileState()) : C.reset(t, e) : C.clear(), E.resume(), i.label = 2;
                    case 2:
                      return [2]
                  }
                }))
              }))
            },
            A = {
              reset: function() {
                return T()
              },
              refresh: function() {
                return O()
              },
              setImage: function(e) {
                return k(e)
              },
              reconcileState: C.reconcileState,
              moveCoordinates: C.moveCoordinates,
              moveCoordinatesEnd: C.moveCoordinatesEnd,
              resizeCoordinates: C.resizeCoordinates,
              clear: C.clear,
              resizeCoordinatesEnd: C.resizeCoordinatesEnd,
              moveImage: C.moveImage,
              flipImage: C.flipImage,
              zoomImage: C.zoomImage,
              rotateImage: C.rotateImage,
              transformImage: C.transformImage,
              transformImageEnd: C.transformImageEnd,
              setCoordinates: C.setCoordinates,
              setVisibleArea: C.setVisibleArea,
              startTransitions: C.startTransitions,
              setState: C.setState,
              hasInteractions: C.hasInteractions,
              getStencilCoordinates: C.getStencilCoordinates,
              getCoordinates: C.getCoordinates,
              getVisibleArea: C.getVisibleArea,
              getTransforms: C.getTransforms,
              getTransitions: C.getTransitions,
              getInteractions: C.getInteractions,
              getSettings: C.getSettings,
              getState: C.getState,
              getDefaultState: function() {
                var e = C.getState(),
                  t = S.getImage();
                return e && t ? C.createDefaultState(e.boundary, t) : null
              },
              getCanvas: function(e) {
                var t = C.getState();
                return v.current && b.current && t ? b.current.draw(t, v.current, e) : null
              },
              getImage: function() {
                return x ? se({}, x) : null
              },
              isLoading: S.isLoading,
              isLoaded: S.isLoaded
            };
          return hm((function() {
            O()
          })), sm((function() {
            T()
          }), [S.getImage()]), sm((function() {
            y.current && (null == a || a(y.current))
          }), [S.isLoaded(), S.isLoading()]), _t(y, (function() {
            return A
          })), {
            cropper: A,
            refs: {
              image: v,
              boundary: _,
              canvas: b
            },
            image: x
          }
        }
        var dm = Ft((function(e, t) {
          var n = e.className,
            r = e.style,
            i = e.stretcherClassName,
            o = e.contentClassName,
            a = e.stretchAlgorithm,
            s = void 0 === a ? Zg : a,
            l = e.sizeAlgorithm,
            c = void 0 === l ? Hg : l,
            u = e.children,
            h = vt(null),
            p = vt(null);
          return _t(t, (function() {
            return {
              reset: function() {
                var e = h.current;
                e && (e.style.height = "", e.style.width = "")
              },
              stretchTo: function(e) {
                var t = h.current,
                  n = p.current;
                if ((null == e ? void 0 : e.width) && (null == e ? void 0 : e.height) && t && n) {
                  s(n, t, e);
                  var r = c(n, e);
                  return Promise.resolve(r.width && r.height ? r : null)
                }
                return t && (t.style.height = "", t.style.width = ""), Promise.resolve(null)
              }
            }
          })), Nn.createElement("div", {
            ref: p,
            style: r,
            className: jl("advanced-cropper-boundary", n)
          }, Nn.createElement("div", {
            ref: h,
            className: jl(["advanced-cropper-boundary__stretcher", i])
          }), Nn.createElement("div", {
            className: jl(["advanced-cropper-boundary__content", o])
          }, u))
        }));
        dm.displayName = "StretchableBoundary";
        var fm = function(e) {
            var t = e.visible,
              n = e.className,
              r = e.style,
              i = e.children;
            return Nn.createElement("div", {
              style: r,
              className: jl(n, "advanced-cropper-fade", Boolean(t) && "advanced-cropper-fade--visible")
            }, i)
          },
          gm = function(e) {
            var t = e.cropper,
              n = e.children,
              r = e.className,
              i = e.style,
              o = t ? t.getState() : null,
              a = !!t && t.isLoaded();
            return Nn.createElement("div", {
              className: jl(r, "advanced-cropper-wrapper"),
              style: i
            }, Nn.createElement(fm, {
              visible: o && a,
              className: "advanced-cropper-wrapper__fade"
            }, n))
          };

        function mm(e) {
          e.preventDefault()
        }
        var vm = Ft((function(e, t) {
          var n = e.className,
            r = e.cropper,
            i = e.crossOrigin,
            o = void 0 === i || i,
            a = r.getState(),
            s = r.getTransitions(),
            l = r.getImage(),
            c = l && a ? function(e, t, n) {
              return void 0 === n && (n = null), e && t && t.visibleArea ? om(e, t, t.visibleArea, og(t), n) : {}
            }(l, a, s) : {},
            u = l ? l.src : void 0;
          return u ? Nn.createElement("img", {
            key: u,
            ref: t,
            className: jl("advanced-cropper-background-image", n),
            src: u,
            crossOrigin: !0 === o ? "anonymous" : o || void 0,
            style: c,
            onMouseDown: mm
          }) : null
        }));
        vm.displayName = "CropperBackgroundImage";
        var _m = Ft((function(e, t) {
          var n = vt(null),
            r = vt(null);
          return _t(t, (function() {
            return {
              draw: function(e, t, i) {
                return void 0 === i && (i = {}), t && n.current && r.current ? $g(e, t, n.current, r.current, i) : null
              }
            }
          })), Nn.createElement(Nn.Fragment, null, Nn.createElement("canvas", {
            className: "advanced-cropper-canvas",
            ref: n
          }), Nn.createElement("canvas", {
            className: "advanced-cropper-canvas",
            ref: r
          }))
        }));
        _m.displayName = "CropperCanvas";
        var bm = function(e) {
            function t(t) {
              var n = e.call(this, t) || this;
              return n.processMove = function(e, t) {
                var r, i = n.container.current;
                if (i && n.touches.length) {
                  var o = i.getBoundingClientRect(),
                    a = o.left,
                    s = o.top;
                  if (1 === n.touches.length && 1 === t.length && n.props.onMove) {
                    var l = {
                        left: Math.abs(t[0].clientX - n.anchor.left - a) < Math.abs(n.touches[0].clientX - n.anchor.left - a),
                        top: Math.abs(t[0].clientY - n.anchor.top - s) < Math.abs(n.touches[0].clientY - n.anchor.top - s)
                      },
                      c = {
                        left: 0,
                        top: 0
                      };
                    n.props.useAnchor && l.left || (c.left = t[0].clientX - n.touches[0].clientX), n.props.useAnchor && l.top || (c.top = t[0].clientY - n.touches[0].clientY), null === (r = n.props) || void 0 === r || r.onMove(c, e), n
                      .touches = pe([], he(t), !1)
                  }
                }
              }, n.processEnd = function() {
                var e = n.props,
                  t = e.onMoveEnd,
                  r = e.onLeave;
                !n.props.disabled && n.touches.length && (null == t || t()), n.hovered && (null == r || r(), n.hovered = !1), n.touches = []
              }, n.initAnchor = function(e) {
                var t = n.container.current;
                if (t) {
                  var r = t.getBoundingClientRect(),
                    i = r.left,
                    o = r.top;
                  n.anchor = {
                    left: e.clientX - i,
                    top: e.clientY - o
                  }
                }
              }, n.onMouseOver = function() {
                var e = n.props,
                  t = e.onEnter,
                  r = e.disabled;
                n.hovered || r || (n.hovered = !0, null == t || t())
              }, n.onMouseLeave = function() {
                var e = n.props.onLeave;
                n.hovered && !n.touches.length && (n.hovered = !1, null == e || e())
              }, n.onTouchStart = function(e) {
                var t = n.props,
                  r = t.onEnter,
                  i = t.onMoveStart,
                  o = t.disabled;
                if (e.cancelable) {
                  n.touches = Array.from(e.touches);
                  var a = !o && 1 === e.touches.length;
                  a && (n.touches = Array.from(e.touches), null == i || i()), n.hovered || o || (n.hovered = !0, null == r || r()), (n.started || a) && (e.preventDefault(), e.stopPropagation())
                }
              }, n.onTouchEnd = function() {
                n.started = !1, n.processEnd()
              }, n.onTouchMove = function(e) {
                n.touches.length >= 1 && (n.started ? (n.processMove(e, Array.from(e.touches)), e.preventDefault(), e.stopPropagation()) : mf({
                  left: n.touches[0].clientX,
                  top: n.touches[0].clientY
                }, {
                  left: e.touches[0].clientX,
                  top: e.touches[0].clientY
                }) > (n.props.activationDistance || 0) && (n.initAnchor({
                  clientX: e.touches[0].clientX,
                  clientY: e.touches[0].clientY
                }), n.started = !0))
              }, n.onMouseDown = function(e) {
                var t = n.props,
                  r = t.onMoveStart;
                if (!t.disabled && 0 === e.button) {
                  var i = {
                    clientX: e.clientX,
                    clientY: e.clientY
                  };
                  n.touches = [i], n.initAnchor(i), e.stopPropagation(), null == r || r()
                }
              }, n.onMouseMove = function(e) {
                !n.props.disabled && n.touches.length && (n.processMove(e, [{
                  clientX: e.clientX,
                  clientY: e.clientY
                }]), e.preventDefault && e.cancelable && e.preventDefault(), e.stopPropagation())
              }, n.onMouseUp = function() {
                n.processEnd()
              }, n.touches = [], n.hovered = !1, n.started = !1, n.anchor = {
                left: 0,
                top: 0
              }, n.container = {
                current: null
              }, n
            }
            return ae(t, e), t.prototype.componentWillUnmount = function() {
              window.removeEventListener("mouseup", this.onMouseUp), window.removeEventListener("mousemove", this.onMouseMove), window.removeEventListener("touchmove", this.onTouchMove), window.removeEventListener("touchend", this.onTouchEnd);
              var e = this.container.current;
              e && (e.removeEventListener("touchstart", this.onTouchStart), e.removeEventListener("mousedown", this.onMouseDown))
            }, t.prototype.componentDidMount = function() {
              window.addEventListener("mouseup", this.onMouseUp, {
                passive: !1
              }), window.addEventListener("mousemove", this.onMouseMove, {
                passive: !1
              }), window.addEventListener("touchmove", this.onTouchMove, {
                passive: !1
              }), window.addEventListener("touchend", this.onTouchEnd, {
                passive: !1
              });
              var e = this.container.current;
              e && (e.addEventListener("touchstart", this.onTouchStart, {
                passive: !1
              }), e.addEventListener("mousedown", this.onMouseDown, {
                passive: !1
              }))
            }, t.prototype.componentDidUpdate = function(e) {
              this.props.disabled && !e.disabled && (this.touches = [])
            }, t.prototype.render = function() {
              var e = this.props,
                t = e.children,
                n = e.className;
              return Nn.createElement("div", {
                className: jl("advanced-cropper-draggable-element", n),
                ref: this.container,
                onMouseOver: this.onMouseOver,
                onMouseLeave: this.onMouseLeave
              }, t)
            }, t.defaultProps = {
              disabled: !1,
              activationDistance: 30,
              useAnchor: !0,
              rerender: !0
            }, t
          }(Me),
          ym = function(e) {
            var t = e.position,
              n = e.className,
              r = e.disabled,
              i = e.onDrag,
              o = e.onDragEnd,
              a = e.onLeave,
              s = e.onEnter,
              l = e.children;
            return Nn.createElement(bm, {
              className: jl(["advanced-cropper-line-wrapper", t && "advanced-cropper-line-wrapper--".concat(t), n]),
              disabled: r,
              onMove: i,
              onMoveEnd: o,
              onLeave: a,
              onEnter: s,
              activationDistance: 0
            }, Nn.createElement("div", {
              className: jl(["advanced-cropper-line-wrapper__content", t && "advanced-cropper-line-wrapper__content--".concat(t)])
            }, l))
          },
          wm = function(e) {
            var t, n, r = e.position,
              i = e.hoverClassName,
              o = e.wrapperClassName,
              a = e.defaultClassName,
              s = e.disabled,
              l = e.onMove,
              c = e.onMoveEnd,
              u = he(dt(!1), 2),
              h = u[0],
              p = u[1];
            return Nn.createElement(ym, {
              className: jl("advanced-cropper-simple-line-wrapper", o, (t = {}, t["advanced-cropper-simple-line-wrapper--".concat(r)] = !!r, t)),
              position: r,
              disabled: s,
              onDrag: l,
              onDragEnd: c,
              onLeave: function() {
                p(!1)
              },
              onEnter: function() {
                p(!0)
              }
            }, Nn.createElement("div", {
              className: jl("advanced-cropper-simple-line", h && "advanced-cropper-simple-line--hover", a, h && i, (n = {}, n["advanced-cropper-simple-line--".concat(r)] = !!r, n))
            }))
          },
          xm = function(e) {
            var t = e.horizontalPosition,
              n = e.verticalPosition,
              r = e.className,
              i = e.disabled,
              o = e.onDrag,
              a = e.onDragEnd,
              s = e.onLeave,
              l = e.onEnter,
              c = e.children,
              u = e.style,
              h = t || n ? nf(t, n).snakeCase : null;
            return Nn.createElement("div", {
              style: u,
              className: jl(r, "advanced-cropper-handler-wrapper", h && "advanced-cropper-handler-wrapper--".concat(h), i && "advanced-cropper-handler-wrapper--disabled")
            }, Nn.createElement(bm, {
              className: "advanced-cropper-handler-wrapper__draggable",
              disabled: i,
              onMove: o,
              onMoveEnd: a,
              onLeave: s,
              onEnter: l,
              activationDistance: 0
            }, c))
          },
          km = function(e) {
            var t, n = e.verticalPosition,
              r = e.horizontalPosition,
              i = e.hoverClassName,
              o = e.wrapperClassName,
              a = e.defaultClassName,
              s = e.wrapperStyle,
              l = e.disabled,
              c = e.onMove,
              u = e.onMoveEnd,
              h = he(dt(!1), 2),
              p = h[0],
              d = h[1];
            return Nn.createElement(xm, {
              style: s,
              className: jl("advanced-cropper-simple-handler-wrapper", o, n && "advanced-cropper-simple-handler-wrapper--".concat(n), r && "advanced-cropper-simple-handler-wrapper--".concat(r), r && n &&
                "advanced-cropper-simple-handler-wrapper--".concat(r, "-").concat(n), p && "advanced-cropper-simple-handler-wrapper--hover"),
              verticalPosition: n,
              horizontalPosition: r,
              disabled: l,
              onDrag: c,
              onDragEnd: u,
              onLeave: function() {
                d(!1)
              },
              onEnter: function() {
                d(!0)
              }
            }, Nn.createElement("div", {
              className: jl("advanced-cropper-simple-handler", p && "advanced-cropper-simple-handler--hover", a, p && i, (t = {}, t["advanced-cropper-simple-handler--".concat(n)] = !!n, t["advanced-cropper-simple-handler--".concat(r)] = !!
                r, t["advanced-cropper-simple-handler--".concat(r, "-").concat(n)] = r && n, t))
            }))
          },
          Cm = ["east", "west", null],
          Sm = ["south", "north", null],
          Em = function(e) {
            var t = e.style,
              n = e.className,
              r = e.children,
              i = e.onResize,
              o = e.onResizeEnd,
              a = e.handlerComponent,
              s = void 0 === a ? km : a,
              l = e.handlers,
              c = void 0 === l ? {
                eastNorth: !0,
                north: !0,
                westNorth: !0,
                west: !0,
                westSouth: !0,
                south: !0,
                eastSouth: !0,
                east: !0
              } : l,
              u = e.handlerClassNames,
              h = void 0 === u ? {} : u,
              p = e.handlerWrapperClassNames,
              d = void 0 === p ? {} : p,
              f = e.lines,
              g = void 0 === f ? {
                west: !0,
                north: !0,
                east: !0,
                south: !0
              } : f,
              m = e.lineComponent,
              v = void 0 === m ? wm : m,
              _ = e.lineClassNames,
              b = void 0 === _ ? {} : _,
              y = e.lineWrapperClassNames,
              w = void 0 === y ? {} : y,
              x = e.disabled,
              k = void 0 !== x && x,
              C = e.reference,
              S = void 0 === C ? null : C,
              E = he(dt(null), 2),
              T = E[0],
              O = E[1],
              A = bt((function() {
                var e = [];
                return Cm.forEach((function(t) {
                  Sm.forEach((function(n) {
                    if (t !== n) {
                      var r = nf(t, n),
                        i = r.snakeCase,
                        o = r.camelCase;
                      i && o && e.push({
                        name: o,
                        className: i,
                        verticalPosition: n,
                        horizontalPosition: t
                      })
                    }
                  }))
                })), e
              }), []),
              P = bt((function() {
                var e = [];
                return A.forEach((function(t) {
                  var n;
                  "west" !== (n = t.name) && "south" !== n && "north" !== n && "east" !== n || !(cf(g) ? g[t.name] : g) || e.push({
                    name: t.name,
                    component: v,
                    className: jl(b.default, b[t.name], k && b.disabled),
                    wrapperClassName: jl("advanced-cropper-bounding-box__line", "advanced-cropper-bounding-box__line--".concat(t.name), w.default, w[t.name], k && w.disabled),
                    hoverClassName: b.hover,
                    verticalPosition: t.verticalPosition,
                    horizontalPosition: t.horizontalPosition,
                    disabled: k
                  })
                })), e
              }), [A, g, v, b, w, k]),
              M = bt((function() {
                var e = [];
                return A.forEach((function(t) {
                  (cf(c) ? c[t.name] : c) && e.push({
                    name: t.name,
                    component: s,
                    className: jl(h.default, h[t.name]),
                    containerClassName: jl("advanced-cropper-bounding-box__handler-wrapper", "advanced-cropper-bounding-box__handler-wrapper--".concat(t.className)),
                    wrapperClassName: jl("advanced-cropper-bounding-box__handler", "advanced-cropper-bounding-box__handler--".concat(t.className), d.default, d[t.name]),
                    hoverClassName: h.hover,
                    verticalPosition: t.verticalPosition,
                    horizontalPosition: t.horizontalPosition,
                    disabled: k
                  })
                })), e
              }), [A, c, s, h, d, k]),
              D = function(e, t) {
                return function(n, r) {
                  var o, a = {
                    left: n.left,
                    top: n.top
                  };
                  if (!t && e ? o = "width" : t && !e && (o = "height"), !k) {
                    if (i) {
                      var s = nf(e, t).camelCase;
                      s && i(s, a, {
                        reference: T || S,
                        preserveAspectRatio: r && r.shiftKey,
                        respectDirection: o,
                        compensate: !0
                      })
                    }
                    T || O(S)
                  }
                }
              },
              I = function() {
                null == o || o(), O(null)
              };
            return Nn.createElement("div", {
              className: jl("advanced-cropper-bounding-box", n),
              style: t
            }, r, Nn.createElement("div", null, P.map((function(e) {
              return Nn.createElement(e.component, {
                key: e.name,
                defaultClassName: e.className,
                hoverClassName: e.hoverClassName,
                wrapperClassName: e.wrapperClassName,
                position: e.name,
                disabled: e.disabled,
                onMove: D(e.horizontalPosition, e.verticalPosition),
                onMoveEnd: I
              })
            }))), Nn.createElement("div", null, M.map((function(e) {
              var t = Nn.createElement(e.component, {
                defaultClassName: e.className,
                hoverClassName: e.hoverClassName,
                wrapperClassName: e.wrapperClassName,
                horizontalPosition: e.horizontalPosition,
                verticalPosition: e.verticalPosition,
                disabled: e.disabled,
                onMove: D(e.horizontalPosition, e.verticalPosition),
                onMoveEnd: I
              });
              return Nn.createElement("div", {
                key: e.name,
                className: e.containerClassName
              }, t)
            }))))
          },
          Tm = function(e) {
            var t = e.className,
              n = e.children;
            return Nn.createElement("div", {
              className: jl("advanced-cropper-stencil-overlay", t)
            }, n)
          };
        var Om = function(e) {
            var t = e.className,
              n = e.transitions,
              r = e.children,
              i = le(e, ["className", "transitions", "children"]),
              o = vt(null),
              a = vt(i),
              s = he(dt(i), 2),
              l = s[0],
              c = s[1],
              u = he(function(e) {
                void 0 === e && (e = null);
                var t = vt(new Kg),
                  n = he(dt(!1), 2),
                  r = n[0],
                  i = n[1];
                return [function(n) {
                  e && e.active ? t.current.start(se(se({}, e), {
                    onStart: function() {
                      i(!0)
                    },
                    onProgress: function(e) {
                      n(e)
                    },
                    onStop: function() {
                      i(!1)
                    }
                  })) : t.current.active || n(1)
                }, r]
              }(n), 2),
              h = u[0],
              p = u[1];
            mt((function() {
              if (!xf(l, i)) {
                c(i);
                var e = p ? se({}, a.current) : l;
                h((function(t) {
                  ["left", "top", "height", "width"].forEach((function(n) {
                    var r = i[n],
                      o = e[n];
                    a.current[n] = df(o) && df(r) ? o + (r - o) * t : r
                  })), o.current && (o.current.style.width = "".concat(a.current.width, "px"), o.current.style.height = "".concat(a.current.height, "px"), o.current.style.transform = "translate3d(".concat(a.current.left, "px, ")
                    .concat(a.current.top, "px, 0px)"))
                }))
              }
            }), [l, p, i.width, i.height, i.top, i.left]);
            var d = p ? a.current : i,
              f = {
                left: 0,
                top: 0,
                width: "".concat(d.width, "px"),
                height: "".concat(d.height, "px"),
                transform: "translate3d(".concat(d.left, "px, ").concat(d.top, "px, 0px)")
              };
            return Nn.createElement("div", {
              ref: o,
              className: jl("advanced-cropper-artificial-transition", t),
              style: f
            }, r)
          },
          Am = function(e) {
            var t = e.className,
              n = e.transitions,
              r = e.width,
              i = e.height,
              o = e.left,
              a = e.top,
              s = e.children;
            return Nn.createElement(Om, {
              className: jl("advanced-cropper-stencil-wrapper", t),
              transitions: n,
              width: r,
              height: i,
              top: a,
              left: o
            }, s)
          },
          Pm = function(e) {
            var t = e.columns,
              n = void 0 === t ? 3 : t,
              r = e.rows,
              i = void 0 === r ? 3 : r,
              o = e.visible,
              a = void 0 !== o && o,
              s = e.className,
              l = [],
              c = he(dt(n), 2),
              u = c[0],
              h = c[1],
              p = he(dt(i), 2),
              d = p[0],
              f = p[1];
            sm((function() {
              a && (f(i), h(n))
            }), [a, n, i]);
            for (var g = 0; g < d; g++) {
              for (var m = [], v = 0; v < u; v++) m.push(Nn.createElement("div", {
                key: v,
                className: jl("advanced-cropper-stencil-grid__cell", 0 === g && "advanced-cropper-stencil-grid__cell--top", g === d - 1 && "advanced-cropper-stencil-grid__cell--bottom", 0 === v &&
                  "advanced-cropper-stencil-grid__cell--left", v === u - 1 && "advanced-cropper-stencil-grid__cell--right")
              }));
              l.push(Nn.createElement("div", {
                key: g,
                className: "advanced-cropper-stencil-grid__row"
              }, m))
            }
            return Nn.createElement("div", {
              className: jl("advanced-cropper-stencil-grid", a && "advanced-cropper-stencil-grid--visible", s)
            }, l)
          },
          Mm = Ft((function(e, t) {
            var n = e.cropper,
              r = e.coordinates,
              i = e.aspectRatio,
              o = e.minAspectRatio,
              a = e.maxAspectRatio,
              s = e.handlerComponent,
              l = void 0 === s ? km : s,
              c = e.handlers,
              u = void 0 === c ? {
                eastNorth: !0,
                north: !0,
                westNorth: !0,
                west: !0,
                westSouth: !0,
                south: !0,
                eastSouth: !0,
                east: !0
              } : c,
              h = e.handlerClassNames,
              p = void 0 === h ? {} : h,
              d = e.handlerWrapperClassNames,
              f = void 0 === d ? {} : d,
              g = e.lines,
              m = void 0 === g ? {
                west: !0,
                north: !0,
                east: !0,
                south: !0
              } : g,
              v = e.lineComponent,
              _ = void 0 === v ? wm : v,
              b = e.lineClassNames,
              y = void 0 === b ? {} : b,
              w = e.lineWrapperClassNames,
              x = void 0 === w ? {} : w,
              k = e.resizable,
              C = void 0 === k || k,
              S = e.movable,
              E = void 0 === S || S,
              T = e.grid,
              O = e.gridClassName,
              A = e.className,
              P = e.movingClassName,
              M = e.resizingClassName,
              D = e.previewClassName,
              I = e.boundingBoxClassName,
              N = e.overlayClassName,
              R = e.draggableAreaClassName,
              j = n.getState(),
              L = n.getTransitions(),
              F = n.getInteractions();
            _t(t, (function() {
              return {
                aspectRatio: Zf(i || {
                  minimum: o,
                  maximum: a
                })
              }
            }));
            var B = r ? sf(r) ? r(j) : r : ag(j),
              z = B.width,
              H = B.height,
              U = B.left,
              W = B.top;
            return j && Nn.createElement(Am, {
              className: jl("advanced-cropper-rectangle-stencil", A, F.moveCoordinates && P, F.resizeCoordinates && M, {
                "advanced-cropper-rectangle-stencil--movable": E,
                "advanced-cropper-rectangle-stencil--moving": F.moveCoordinates,
                "advanced-cropper-rectangle-stencil--resizable": C,
                "advanced-cropper-rectangle-stencil--resizing": F.resizeCoordinates
              }),
              width: z,
              height: H,
              left: U,
              top: W,
              transitions: L
            }, Nn.createElement(Em, {
              reference: j.coordinates,
              className: jl(I, "advanced-cropper-rectangle-stencil__bounding-box"),
              handlers: u,
              handlerComponent: l,
              handlerClassNames: p,
              handlerWrapperClassNames: f,
              lines: m,
              lineComponent: _,
              lineClassNames: y,
              lineWrapperClassNames: x,
              onResize: function(e, t, r) {
                n && C && n.resizeCoordinates(e, t, r)
              },
              onResizeEnd: function() {
                n && n.resizeCoordinatesEnd()
              },
              disabled: !C
            }, Nn.createElement(bm, {
              disabled: !E,
              onMove: function(e) {
                n && E && n.moveCoordinates(e)
              },
              onMoveEnd: function() {
                n && n.moveCoordinatesEnd()
              },
              className: jl("advanced-cropper-rectangle-stencil__draggable-area", R)
            }, Nn.createElement(Tm, {
              className: jl("advanced-cropper-rectangle-stencil__overlay", N)
            }, T && Nn.createElement(Pm, {
              visible: n.hasInteractions(),
              columns: F.transformImage.rotate ? 9 : 3,
              rows: F.transformImage.rotate ? 9 : 3,
              className: jl("advanced-cropper-rectangle-stencil__grid", O)
            }), Nn.createElement("div", {
              className: jl("advanced-cropper-rectangle-stencil__preview", D)
            })))))
          }));
        Mm.displayName = "RectangleStencil";
        var Dm, Im = function() {
            function e(e) {
              var t = e.active;
              this.active = t, this.defaultPrevented = !1
            }
            return e.prototype.preventDefault = function() {
              this.defaultPrevented = !0
            }, e
          }(),
          Nm = function(e) {
            function t(t) {
              var n = e.call(this, t) || this;
              return n.processMove = function(e) {
                var t = n.props,
                  r = t.onTransform,
                  i = t.touchScale,
                  o = t.touchMove,
                  a = t.touchRotate,
                  s = n.container.current;
                s && r && (r(function(e, t, n, r) {
                  var i, o, a;
                  if (void 0 === r && (r = {}), 1 === t.length && 1 === e.length) r.move && (i = {
                    left: t[0].clientX - e[0].clientX,
                    top: t[0].clientY - e[0].clientY
                  });
                  else if (e.length > 1) {
                    var s = Rg(t, n),
                      l = Rg(e, n);
                    if (r.rotate && 2 === t.length && 2 === e.length) {
                      var c = {
                          left: [e[0].clientX - e[1].clientX, t[0].clientX - t[1].clientX],
                          top: [e[0].clientY - e[1].clientY, t[0].clientY - t[1].clientY]
                        },
                        u = c.left[0] * c.top[1] - c.left[1] * c.top[0],
                        h = c.left[0] * c.left[1] + c.top[0] * c.top[1];
                      if (!vf(h, 0) && !vf(u, 0)) {
                        var p = -180 * Math.atan2(u, h) / Math.PI;
                        a = {
                          center: l.centerMass,
                          angle: p
                        }
                      }
                    }
                    r.move && (i = {
                      left: s.centerMass.left - l.centerMass.left,
                      top: s.centerMass.top - l.centerMass.top
                    }), r.scale && (o = {
                      factor: l.spread / s.spread,
                      center: l.centerMass
                    })
                  }
                  return {
                    move: i,
                    scale: o,
                    rotate: a
                  }
                }(e, n.touches, s, {
                  scale: i,
                  rotate: a,
                  move: o
                })), n.touches = e)
              }, n.processEnd = function() {
                var e = n.props.onTransformEnd;
                n.transforming && (n.transforming = !1, e && e())
              }, n.processStart = function() {
                n.transforming = !0, n.debouncedProcessEnd.clear()
              }, n.processEvent = function(e) {
                var t = n.props,
                  r = t.onEvent,
                  i = t.disabled,
                  o = new Im({
                    active: n.transforming
                  });
                return r ? r(o, e) : (e.preventDefault(), e.stopPropagation()), !i && !o.defaultPrevented
              }, n.onWheel = function(e) {
                var t = n.props,
                  r = t.onTransform,
                  i = t.wheelScale,
                  o = n.container.current;
                i && n.processEvent(e) && (n.processStart(), r && o && r(jg(e, o, !0 === i ? .1 : i.ratio)), n.touches.length || n.debouncedProcessEnd())
              }, n.onTouchStart = function(e) {
                var t = n.props,
                  r = t.touchMove,
                  i = t.touchScale,
                  o = t.touchRotate;
                if (e.cancelable && (r || (i || o) && e.touches.length > 1) && n.processEvent(e)) {
                  var a = n.container.current;
                  if (a) {
                    var s = a.getBoundingClientRect(),
                      l = s.left,
                      c = s.top,
                      u = s.bottom,
                      h = s.right;
                    n.touches = Array.from(e.touches).filter((function(e) {
                      return e.clientX > l && e.clientX < h && e.clientY > c && e.clientY < u
                    }))
                  }
                }
              }, n.onTouchEnd = function(e) {
                0 === e.touches.length && (n.touches = [], n.processEnd())
              }, n.onTouchMove = function(e) {
                if (n.touches.length) {
                  var t = pe([], he(e.touches), !1).filter((function(e) {
                    return !e.identifier || n.touches.find((function(t) {
                      return t.identifier === e.identifier
                    }))
                  }));
                  n.processEvent(e) && (n.processMove(t), n.processStart())
                }
              }, n.onMouseDown = function(e) {
                if (n.props.mouseMove && "buttons" in e && 1 === e.buttons && n.processEvent(e)) {
                  var t = {
                    clientX: e.clientX,
                    clientY: e.clientY
                  };
                  n.touches = [t], n.processStart()
                }
              }, n.onMouseMove = function(e) {
                n.touches.length && n.processEvent(e) && n.processMove([{
                  clientX: e.clientX,
                  clientY: e.clientY
                }])
              }, n.onMouseUp = function() {
                n.touches = [], n.processEnd()
              }, n.transforming = !1, n.touches = [], n.anchor = {
                left: 0,
                top: 0
              }, n.container = {
                current: null
              }, n.debouncedProcessEnd = kf(n.processEnd, t.timeout), n
            }
            return ae(t, e), t.prototype.shouldComponentUpdate = function() {
              return !0
            }, t.prototype.componentWillUnmount = function() {
              window.removeEventListener("mouseup", this.onMouseUp), window.removeEventListener("mousemove", this.onMouseMove), window.removeEventListener("touchmove", this.onTouchMove), window.removeEventListener("touchend", this.onTouchEnd);
              var e = this.container.current;
              e && (e.removeEventListener("touchstart", this.onTouchStart), e.removeEventListener("mousedown", this.onMouseDown), e.removeEventListener("wheel", this.onWheel))
            }, t.prototype.componentDidMount = function() {
              window.addEventListener("mouseup", this.onMouseUp, {
                passive: !1
              }), window.addEventListener("mousemove", this.onMouseMove, {
                passive: !1
              }), window.addEventListener("touchmove", this.onTouchMove, {
                passive: !1
              }), window.addEventListener("touchend", this.onTouchEnd, {
                passive: !1
              });
              var e = this.container.current;
              e && (e.addEventListener("touchstart", this.onTouchStart, {
                passive: !1
              }), e.addEventListener("mousedown", this.onMouseDown, {
                passive: !1
              }), e.addEventListener("wheel", this.onWheel, {
                passive: !1
              }))
            }, t.prototype.render = function() {
              var e = this.props,
                t = e.className,
                n = e.children,
                r = e.style;
              return Nn.createElement("div", {
                className: t,
                style: r,
                ref: this.container
              }, n)
            }, t.defaultProps = {
              touchMove: !0,
              mouseMove: !0,
              touchScale: !0,
              touchRotate: !1,
              wheelScale: !0,
              timeout: 500
            }, t
          }(Me),
          Rm = function(e) {
            var t = e.scaleImage,
              n = void 0 === t || t,
              r = e.moveImage,
              i = void 0 === r || r,
              o = e.rotateImage,
              a = void 0 !== o && o,
              s = e.children,
              l = e.className,
              c = e.style,
              u = e.cropper,
              h = e.timeout,
              p = u.getTransitions(),
              d = function(e) {
                return bt((function() {
                  return uf(e, {
                    touch: !0
                  }, {
                    touch: !1
                  })
                }), [e])
              }(a),
              f = function(e) {
                return bt((function() {
                  return uf(e, {
                    touch: !0,
                    wheel: {
                      ratio: .1
                    }
                  }, {
                    touch: !1,
                    wheel: !1
                  })
                }), [e])
              }(n),
              g = function(e) {
                return bt((function() {
                  return uf(e, {
                    touch: !0,
                    mouse: !0
                  }, {
                    touch: !1,
                    mouse: !1
                  })
                }), [e])
              }(i);
            return Nn.createElement(Nm, {
              className: l,
              style: c,
              onTransform: u.transformImage,
              onTransformEnd: u.transformImageEnd,
              touchMove: g.touch,
              mouseMove: g.mouse,
              touchScale: f.touch,
              wheelScale: f.wheel,
              touchRotate: d.touch,
              disabled: p.active,
              timeout: h
            }, s)
          },
          jm = (Dm = function(e, t) {
            var n = e.style,
              r = e.className,
              i = e.stencilComponent,
              o = void 0 === i ? Mm : i,
              a = e.stencilConstraints,
              s = void 0 === a ? Ug : a,
              l = e.stencilProps,
              c = void 0 === l ? {} : l,
              u = e.wrapperComponent,
              h = void 0 === u ? gm : u,
              p = e.wrapperProps,
              d = void 0 === p ? {} : p,
              f = e.backgroundComponent,
              g = void 0 === f ? vm : f,
              m = e.backgroundProps,
              v = void 0 === m ? {} : m,
              _ = e.backgroundClassName,
              b = e.backgroundWrapperComponent,
              y = void 0 === b ? Rm : b,
              w = e.backgroundWrapperProps,
              x = void 0 === w ? {} : w,
              k = e.boundaryComponent,
              C = void 0 === k ? dm : k,
              S = e.boundaryProps,
              E = e.boundaryClassName,
              T = e.canvas,
              O = void 0 === T || T,
              A = e.crossOrigin,
              P = void 0 === A || A,
              M = e.settings,
              D = le(e, ["style", "className", "stencilComponent", "stencilConstraints", "stencilProps", "wrapperComponent", "wrapperProps", "backgroundComponent", "backgroundProps", "backgroundClassName", "backgroundWrapperComponent",
                "backgroundWrapperProps", "boundaryComponent", "boundaryProps", "boundaryClassName", "canvas", "crossOrigin", "settings"
              ]),
              I = vt(null),
              N = pm((function() {
                return se(se({}, D), {
                  crossOrigin: P,
                  stencilProps: c,
                  canvas: O,
                  settings: se(se({}, M), s(M, se(se({}, c), I.current)))
                })
              })),
              R = N.cropper,
              j = N.image,
              L = N.refs,
              F = o,
              B = h,
              z = y,
              H = g,
              U = C;
            _t(t, (function() {
              return R
            }));
            var W = {
              loading: R.isLoading(),
              loaded: R.isLoaded()
            };
            return Nn.createElement(B, se({}, d, {
              className: jl("advanced-cropper", r),
              cropper: R,
              style: n
            }, W), Nn.createElement(U, se({}, S, {
              ref: L.boundary,
              className: jl("advanced-cropper__boundary", E)
            }), Nn.createElement(z, se({}, x, {
              cropper: R,
              className: "advanced-cropper__background-wrapper"
            }), R.getState() && Nn.createElement(H, se({}, v, {
              ref: L.image,
              crossOrigin: P,
              cropper: R,
              className: jl("advanced-cropper__background", _)
            })), Nn.createElement(F, se({}, c, {
              ref: I,
              cropper: R,
              image: j
            }))), O && Nn.createElement(_m, {
              ref: L.canvas
            })))
          }, Ft(Dm)),
          Lm = ["transformImage", "moveCoordinates", "resizeCoordinates", "defaultCoordinates", "defaultVisibleArea", "areaPositionRestrictions", "areaSizeRestrictions", "sizeRestrictions", "positionRestrictions", "aspectRatio", "minWidth",
            "minHeight", "maxWidth", "maxHeight", "defaultSize", "defaultPosition", "defaultTransforms", "imageRestriction", "priority"
          ];

        function Fm(e, t) {
          void 0 === t && (t = Lm);
          var n = {
            settings: {},
            props: {}
          };
          return Object.keys(e).forEach((function(r) {
            t.some((function(e) {
              return e === r
            })) ? n.settings[r] = e[r] : n.props[r] = e[r]
          })), n
        }

        function Bm(e, t) {
          var n = Ug({}, t);
          return {
            stencilSize: function(t, r) {
              var i, o, a = sf(e.stencilSize) ? e.stencilSize(t, r) : e.stencilSize;
              return gg(se(se({}, a), {
                aspectRatio: (i = n.aspectRatio, o = Zf(Ff(a)), o ? i ? {
                  minimum: Math.min(i.maximum, Math.max(i.minimum, o.minimum)),
                  maximum: Math.max(i.minimum, Math.min(i.maximum, o.maximum))
                } : o : i)
              }))
            }
          }
        }

        function zm(e, t) {
          var n = e.boundary,
            r = sf(t.stencilSize) ? t.stencilSize(e, t) : t.stencilSize;
          return (r.width > n.width || r.height > n.height) && (r = gg({
            sizeRestrictions: {
              maxWidth: n.width,
              maxHeight: n.height,
              minWidth: 0,
              minHeight: 0
            },
            width: r.width,
            height: r.height,
            aspectRatio: {
              minimum: Ff(r),
              maximum: Ff(r)
            }
          })), r
        }

        function Hm(e, t) {
          var n = zm(e, se(se({}, t), {
              stencilSize: t.stencilSize
            })),
            r = tg(e, t);
          return {
            maxWidth: r.maxWidth * n.width / e.boundary.width,
            maxHeight: r.maxHeight * n.height / e.boundary.height,
            minWidth: 0,
            minHeight: 0
          }
        }

        function Um(e, t) {
          var n, r, i = e.imageSize,
            o = e.visibleArea,
            a = e.boundary,
            s = rg(e, t),
            l = sg(e, t),
            c = sf(t.stencilSize) ? t.stencilSize(e, t) : t.stencilSize,
            u = o || i;
          return Ff(u) > Ff(a) ? r = (n = c.height * u.height / a.height) * Ff(c) : n = (r = c.width * u.width / a.width) / Ff(c), gg({
            width: r,
            height: n,
            aspectRatio: l,
            sizeRestrictions: s
          })
        }

        function Wm(e, t) {
          var n = Ff(zm(e, t));
          return {
            minimum: n,
            maximum: n
          }
        }

        function Vm(e, t, n) {
          return n && n.immediately ? function(e, t) {
            if (eg(e)) {
              var n = fg(e),
                r = zm(e, t);
              n.visibleArea = Lf(n.visibleArea, n.coordinates.width * n.boundary.width / (n.visibleArea.width * r.width));
              var i = Uf(n.visibleArea, tg(n, t));
              return 1 !== i && (n.visibleArea = Lf(n.visibleArea, i), n.coordinates = Lf(n.coordinates, i)), n.visibleArea = Rf(n.visibleArea, Pf(Mf(n.coordinates), Mf(n.visibleArea))), n.visibleArea = $f(n.visibleArea, ng(n, t)), n
                .coordinates = $f(n.coordinates, qf(jf(n.visibleArea), ng(n, t))), n
            }
            return e
          }(e, t) : e
        }
        var Xm = Ft((function(e, t) {
          var n = Fm(e, pe(pe([], he(Lm), !1), ["stencilSize"], !1));
          return Nn.createElement(jm, se({
            postProcess: Vm,
            stencilConstraints: Bm
          }, n.props, {
            settings: se(se({
              defaultSize: Um,
              aspectRatio: Wm,
              sizeRestrictions: Wg(Hm)
            }, n.settings), {
              transformImage: se(se({}, n.settings.transformImage), {
                adjustStencil: !1
              })
            }),
            ref: t
          }))
        }));
        Xm.displayName = "FixedCropper";
        var Gm = Ft((function(e, t) {
          var n, r = Fm(e),
            i = r.props,
            o = r.settings,
            a = o.stencilSize,
            s = o.autoZoom,
            l = le(o, ["stencilSize", "autoZoom"]),
            c = (n = vt([]), function(e) {
              -1 === n.current.indexOf(e) && n.current.push(e)
            });
          return lf(s) || (i.postProcess || a ? c("prop 'autoZoom' is deprecated now and will be removed, use 'postProcess' prop to pass your auto zoom function.") : (c(
            "prop 'autoZoom' is deprecated now and will be removed, use 'postProcess' prop to pass your auto zoom function. The 'postProcess' automatically set to 'hybridAutoZoom'"), i.postProcess = am)), lf(a) ? Nn.createElement(jm,
          se({}, i, {
              ref: t,
              settings: l
            })) : (c("prop 'stencilSize' is deprecated for <Cropper/> component now and will be removed, use <FixedCropper/> component instead."), Nn.createElement(Xm, se({
            ref: t,
            stencilSize: a
          }, l, i)))
        }));
        Gm.displayName = "CropperComponent";
        var Ym = Ft((function(e, t) {
          var n = e.cropper,
            r = e.coordinates,
            i = e.handlerComponent,
            o = void 0 === i ? km : i,
            a = e.handlers,
            s = void 0 === a ? {
              eastNorth: !0,
              westNorth: !0,
              westSouth: !0,
              eastSouth: !0
            } : a,
            l = e.handlerClassNames,
            c = void 0 === l ? {} : l,
            u = e.handlerWrapperClassNames,
            h = void 0 === u ? {} : u,
            p = e.lines,
            d = void 0 === p ? {
              west: !0,
              north: !0,
              east: !0,
              south: !0
            } : p,
            f = e.lineComponent,
            g = void 0 === f ? wm : f,
            m = e.lineClassNames,
            v = void 0 === m ? {} : m,
            _ = e.lineWrapperClassNames,
            b = void 0 === _ ? {} : _,
            y = e.resizable,
            w = void 0 === y || y,
            x = e.movable,
            k = void 0 === x || x,
            C = e.grid,
            S = e.gridClassName,
            E = e.className,
            T = e.movingClassName,
            O = e.resizingClassName,
            A = e.previewClassName,
            P = e.boundingBoxClassName,
            M = e.overlayClassName,
            D = e.draggableAreaClassName,
            I = n.getState(),
            N = n.getTransitions(),
            R = n.getInteractions();
          _t(t, (function() {
            return {
              aspectRatio: 1,
              boundingBox: "circle"
            }
          }));
          var j = r ? sf(r) ? r(I) : r : ag(I),
            L = j.width,
            F = j.height,
            B = j.left,
            z = j.top;
          return I && Nn.createElement(Am, {
            className: jl("advanced-cropper-circle-stencil", E, R.moveCoordinates && T, R.resizeCoordinates && O, {
              "advanced-cropper-circle-stencil--movable": k,
              "advanced-cropper-circle-stencil--moving": R.moveCoordinates,
              "advanced-cropper-circle-stencil--resizable": w,
              "advanced-cropper-circle-stencil--resizing": R.resizeCoordinates
            }),
            width: L,
            height: F,
            left: B,
            top: z,
            transitions: N
          }, Nn.createElement(Em, {
            reference: I.coordinates,
            className: jl(P, "advanced-cropper-circle-stencil__bounding-box"),
            handlers: s,
            handlerComponent: o,
            handlerClassNames: c,
            handlerWrapperClassNames: h,
            lines: d,
            lineComponent: g,
            lineClassNames: v,
            lineWrapperClassNames: b,
            onResize: function(e, t, r) {
              n && w && n.resizeCoordinates(e, t, r)
            },
            onResizeEnd: function() {
              n && n.resizeCoordinatesEnd()
            },
            disabled: !w
          }, Nn.createElement(bm, {
            disabled: !k,
            onMove: function(e) {
              n && k && n.moveCoordinates(e)
            },
            onMoveEnd: function() {
              n && n.moveCoordinatesEnd()
            },
            className: jl("advanced-cropper-circle-stencil__draggable-area", D)
          }, Nn.createElement(Tm, {
            className: jl("advanced-cropper-circle-stencil__overlay", M)
          }, C && Nn.createElement(Pm, {
            visible: n.hasInteractions(),
            columns: R.transformImage.rotate ? 9 : 3,
            rows: R.transformImage.rotate ? 9 : 3,
            className: jl("advanced-cropper-circle-stencil__grid", S)
          }), Nn.createElement("div", {
            className: jl("advanced-cropper-circle-stencil__preview", A)
          })))))
        }));
        Ym.displayName = "CircleStencil";
        var qm = Ft((function(e, t) {
          var n = e.src,
            r = e.crossOrigin,
            i = void 0 === r || r,
            o = le(e, ["src", "crossOrigin"]);
          return n ? Nn.createElement("img", se({
            key: n,
            ref: t,
            src: n,
            className: jl("advanced-cropper-source"),
            crossOrigin: !0 === i ? "anonymous" : i || void 0
          }, o)) : null
        }));
        qm.displayName = "CropperSource";
        var Km, $m = function(e) {
            var t = e.children,
              n = e.cropper,
              r = e.className,
              i = e.style;
            return Nn.createElement("div", {
              className: jl(r, "cropper-preview-wrapper"),
              style: i
            }, Nn.createElement(fm, {
              visible: null == n ? void 0 : n.isLoaded(),
              className: "cropper-preview-wrapper__fade"
            }, t))
          },
          Zm = function(e) {
            var t = e.className,
              n = e.cropper,
              r = e.crossOrigin,
              i = void 0 === r || r,
              o = e.size,
              a = n.getState(),
              s = n.getTransitions(),
              l = n.getImage(),
              c = o && l && (null == a ? void 0 : a.coordinates) ? function(e, t, n, r) {
                return void 0 === r && (r = null), e && t && t.visibleArea && t.coordinates ? om(e, t, t.coordinates, Ff(t.coordinates) > Ff(n) ? t.coordinates.width / n.width : t.coordinates.height / n.height, r) : {}
              }(l, a, o, s) : {},
              u = l ? l.src : void 0;
            return u ? Nn.createElement("img", {
              key: u,
              className: jl("advanced-cropper-background-image", t),
              src: u,
              crossOrigin: !0 === i ? "anonymous" : i || void 0,
              style: c,
              onMouseDown: mm
            }) : null
          };

        function Jm() {
          return Jm = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Jm.apply(this, arguments)
        }
        Ft((function(e, t) {
          var n, r, i, o, a = e.className,
            s = e.contentClassName,
            l = e.state,
            c = void 0 === l ? null : l,
            u = e.image,
            h = void 0 === u ? null : u,
            p = e.transitions,
            d = void 0 === p ? null : p,
            f = e.backgroundComponent,
            g = void 0 === f ? Zm : f,
            m = e.backgroundProps,
            v = e.backgroundClassName,
            _ = e.wrapperComponent,
            b = void 0 === _ ? $m : _,
            y = e.wrapperProps,
            w = e.loaded,
            x = void 0 === w || w,
            k = e.loading,
            C = void 0 !== k && k,
            S = e.style,
            E = e.cropper,
            T = cm(),
            O = vt(null),
            A = E || {
              current: {
                getState: function() {
                  return c
                },
                getTransitions: function() {
                  return d
                },
                getImage: function() {
                  return h
                },
                isLoaded: function() {
                  return x
                },
                isLoading: function() {
                  return C
                }
              }
            },
            P = he(dt(null), 2),
            M = P[0],
            D = P[1],
            I = null === (r = null === (n = A.current) || void 0 === n ? void 0 : n.getState()) || void 0 === r ? void 0 : r.coordinates,
            N = null === (o = null === (i = A.current) || void 0 === i ? void 0 : i.getImage()) || void 0 === o ? void 0 : o.src,
            R = M ? {
              width: "".concat(M.width, "px"),
              height: "".concat(M.height, "px")
            } : {},
            j = function() {
              O.current && I && O.current.stretchTo(I).then((function(e) {
                e && I ? _f(Ff(I), Ff(e)) ? D({
                  width: e.width,
                  height: e.width / Ff(I)
                }) : D({
                  width: e.height * Ff(I),
                  height: e.height
                }) : D(null)
              })), T()
            };
          hm(j), mt(j, [null == I ? void 0 : I.height, null == I ? void 0 : I.width]), _t(t, (function() {
            return {
              refresh: T
            }
          }));
          var L = b,
            F = g;
          return Nn.createElement(L, se({}, y, {
            className: jl(a, "advanced-cropper-preview"),
            cropper: A.current,
            style: S
          }), Nn.createElement(dm, {
            ref: O,
            className: "advanced-cropper-preview__boundary",
            contentClassName: "advanced-cropper-preview__boundary-content",
            stretchAlgorithm: Jg
          }, Nn.createElement("div", {
            className: jl(s, "advanced-cropper-preview__content"),
            style: R
          }, A.current && Nn.createElement(F, se({}, m, {
            cropper: A.current,
            size: M,
            className: jl(v, "advanced-cropper-preview__image", N && "advanced-cropper-preview__image--visible")
          })))))
        }));
        var Qm, ev = e => Te("svg", Jm({
          width: 20,
          height: 20,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), Km || (Km = Te("path", {
          fillRule: "evenodd",
          clipRule: "evenodd",
          d: "M1.042 8.75a7.708 7.708 0 1 1 13.583 4.991l3.195 3.195a.625.625 0 0 1-.884.884l-3.195-3.195A7.708 7.708 0 0 1 1.04 8.75ZM8.75 2.292a6.458 6.458 0 1 0 0 12.917 6.458 6.458 0 0 0 0-12.917Zm-2.5 5.833a.625.625 0 1 0 0 1.25h5a.625.625 0 1 0 0-1.25h-5Z",
          fill: "#333"
        })));

        function tv() {
          return tv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, tv.apply(this, arguments)
        }
        var nv, rv = e => Te("svg", tv({
          width: 20,
          height: 20,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), Qm || (Qm = Te("path", {
          fillRule: "evenodd",
          clipRule: "evenodd",
          d: "M8.75 1.042a7.708 7.708 0 1 0 4.99 13.583l3.196 3.195a.625.625 0 0 0 .884-.884l-3.195-3.195a7.708 7.708 0 0 0-5.875-12.7ZM2.292 8.75a6.458 6.458 0 1 1 12.916 0 6.458 6.458 0 0 1-12.917 0Zm7.083-2.5a.625.625 0 1 0-1.25 0v1.88l-1.87.002a.625.625 0 0 0 .002 1.25l1.868-.003v1.871a.625.625 0 1 0 1.25 0V9.377l1.876-.002a.625.625 0 1 0-.002-1.25l-1.874.002V6.25Z",
          fill: "#333"
        })));

        function iv() {
          return iv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, iv.apply(this, arguments)
        }
        var ov, av = e => Te("svg", iv({
          width: 14,
          height: 14,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), nv || (nv = Te("path", {
          d: "M10.5 5.25 7 8.75l-3.5-3.5",
          stroke: "#333",
          strokeWidth: 1.25,
          strokeLinecap: "round",
          strokeLinejoin: "round"
        })));

        function sv() {
          return sv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, sv.apply(this, arguments)
        }
        var lv, cv = e => Te("svg", sv({
          xmlns: "http://www.w3.org/2000/svg",
          width: 18,
          height: 18,
          fill: "none"
        }, e), ov || (ov = Te("circle", {
          cx: 9,
          cy: 9,
          r: 8.375,
          stroke: "#333",
          strokeWidth: 1.25
        })));

        function uv() {
          return uv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, uv.apply(this, arguments)
        }
        var hv, pv = e => Te("svg", uv({
          xmlns: "http://www.w3.org/2000/svg",
          width: 18,
          height: 18,
          fill: "none"
        }, e), lv || (lv = Te("circle", {
          cx: 9,
          cy: 9,
          r: 8.375,
          stroke: "#3E85EE",
          strokeWidth: 1.25
        })));

        function dv() {
          return dv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, dv.apply(this, arguments)
        }
        var fv, gv = e => Te("svg", dv({
          xmlns: "http://www.w3.org/2000/svg",
          width: 14,
          height: 18,
          fill: "none"
        }, e), hv || (hv = Te("path", {
          d: "M13.375 9c0 4.78-2.991 8.375-6.375 8.375S.625 13.781.625 9C.625 4.22 3.616.625 7 .625S13.375 4.219 13.375 9Z",
          stroke: "#333",
          strokeWidth: 1.25
        })));

        function mv() {
          return mv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, mv.apply(this, arguments)
        }
        var vv, _v = e => Te("svg", mv({
          xmlns: "http://www.w3.org/2000/svg",
          width: 14,
          height: 18,
          fill: "none"
        }, e), fv || (fv = Te("path", {
          d: "M13.375 9c0 4.78-2.991 8.375-6.375 8.375S.625 13.781.625 9C.625 4.22 3.616.625 7 .625S13.375 4.219 13.375 9Z",
          stroke: "#3E85EE",
          strokeWidth: 1.25
        })));

        function bv() {
          return bv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, bv.apply(this, arguments)
        }
        var yv, wv = e => Te("svg", bv({
          width: 18,
          height: 18,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), vv || (vv = Te("rect", {
          x: .625,
          y: .625,
          width: 16.75,
          height: 16.75,
          rx: 1.375,
          stroke: "#333",
          strokeWidth: 1.25
        })));

        function xv() {
          return xv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, xv.apply(this, arguments)
        }
        var kv, Cv = e => Te("svg", xv({
          width: 18,
          height: 18,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), yv || (yv = Te("rect", {
          x: .625,
          y: .625,
          width: 16.75,
          height: 16.75,
          rx: 1.375,
          stroke: "#3E85EE",
          strokeWidth: 1.25
        })));

        function Sv() {
          return Sv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Sv.apply(this, arguments)
        }
        var Ev, Tv = e => Te("svg", Sv({
          width: 16,
          height: 16,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), kv || (kv = Te("path", {
          stroke: "#333",
          strokeWidth: 1.25,
          d: "M.625.625h14.75v14.75H.625z"
        })));

        function Ov() {
          return Ov = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Ov.apply(this, arguments)
        }
        var Av, Pv = e => Te("svg", Ov({
          width: 16,
          height: 16,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), Ev || (Ev = Te("path", {
          stroke: "#3E85EE",
          strokeWidth: 1.25,
          d: "M.625.625h14.75v14.75H.625z"
        })));

        function Mv() {
          return Mv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Mv.apply(this, arguments)
        }
        var Dv, Iv = e => Te("svg", Mv({
          xmlns: "http://www.w3.org/2000/svg",
          width: 20,
          height: 20,
          fill: "none"
        }, e), Av || (Av = Te("path", {
          d: "m10.071 17.039-.004-.003-.014-.011-.018-.013-.226-.16c-.545-.39-1.8-1.284-2.625-1.938-1.6-1.276-2.787-2.358-3.607-3.282-.83-.934-1.236-1.655-1.358-2.205l-.006-.029-.009-.027c-.128-.4-.21-.9-.215-1.419V7.95c-.018-1.378.492-2.697 1.376-3.617.803-.838 1.843-1.291 2.929-1.295 1.246 0 2.376.516 3.196 1.417l.475.523.461-.536c.805-.936 1.93-1.477 3.154-1.494h.09c2.302 0 4.307 2.096 4.341 4.8a5.164 5.164 0 0 1-.198 1.493l-.008.027-.006.027c-.1.514-.49 1.24-1.304 2.201-.8.947-1.958 2.063-3.498 3.355l-.002.002c-1.187 1.003-2.135 1.735-2.825 2.183l-.004.003a.081.081 0 0 1-.046.013.097.097 0 0 1-.045-.011l-.004-.002Z",
          stroke: "#333",
          strokeWidth: 1.25
        })));

        function Nv() {
          return Nv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Nv.apply(this, arguments)
        }
        var Rv, jv = e => Te("svg", Nv({
          xmlns: "http://www.w3.org/2000/svg",
          width: 20,
          height: 20,
          fill: "none"
        }, e), Dv || (Dv = Te("path", {
          d: "m10.071 17.039-.004-.003-.014-.011-.018-.013-.226-.16c-.545-.39-1.8-1.284-2.625-1.938-1.6-1.276-2.787-2.358-3.607-3.282-.83-.934-1.236-1.655-1.358-2.205l-.006-.029-.009-.027c-.128-.4-.21-.9-.215-1.419V7.95c-.018-1.378.492-2.697 1.376-3.617.803-.838 1.843-1.291 2.929-1.295 1.246 0 2.376.516 3.196 1.417l.475.523.461-.536c.805-.936 1.93-1.477 3.154-1.494h.09c2.302 0 4.307 2.096 4.341 4.8a5.164 5.164 0 0 1-.198 1.493l-.008.027-.006.027c-.1.514-.49 1.24-1.304 2.201-.8.947-1.958 2.063-3.498 3.355l-.002.002c-1.187 1.003-2.135 1.735-2.825 2.183l-.004.003a.081.081 0 0 1-.046.013.097.097 0 0 1-.045-.011l-.004-.002Z",
          stroke: "#3E85EE",
          strokeWidth: 1.25
        })));

        function Lv() {
          return Lv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Lv.apply(this, arguments)
        }
        var Fv, Bv = e => Te("svg", Lv({
          width: 18,
          height: 18,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), Rv || (Rv = Te("path", {
          d: "M6.598 5.854 9 1.332l2.402 4.522c.162.307.457.52.799.58l5.042.888-3.558 3.681c-.241.25-.354.596-.305.94l.715 5.07-4.601-2.248a1.125 1.125 0 0 0-.988 0l-4.6 2.247.714-5.07a1.125 1.125 0 0 0-.305-.939L.757 7.322 5.8 6.435c.341-.06.636-.274.798-.58Z",
          stroke: "#333",
          strokeWidth: 1.25
        })));

        function zv() {
          return zv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, zv.apply(this, arguments)
        }
        var Hv, Uv = e => Te("svg", zv({
          width: 18,
          height: 18,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), Fv || (Fv = Te("path", {
          d: "M6.598 5.854 9 1.332l2.402 4.522c.162.307.457.52.799.58l5.042.888-3.558 3.681c-.241.25-.354.596-.305.94l.715 5.07-4.601-2.248a1.125 1.125 0 0 0-.988 0l-4.6 2.247.714-5.07a1.125 1.125 0 0 0-.305-.939L.757 7.322 5.8 6.435c.341-.06.636-.274.798-.58Z",
          stroke: "#3E85EE",
          strokeWidth: 1.25
        })));

        function Wv() {
          return Wv = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Wv.apply(this, arguments)
        }
        var Vv = e => Te("svg", Wv({
          xmlns: "http://www.w3.org/2000/svg",
          width: 14,
          height: 4,
          fill: "none"
        }, e), Hv || (Hv = Te("path", {
          d: "M8.488 3.15a3 3 0 0 1-2.976 0L0 0h14L8.488 3.15Z",
          fill: "#fff"
        })));
        c(
        ".advanced-cropper-line-wrapper--north,.advanced-cropper-line-wrapper--south{height:12px;width:100%}.advanced-cropper-line-wrapper--north{cursor:n-resize}.advanced-cropper-line-wrapper--south{cursor:s-resize}.advanced-cropper-line-wrapper--east,.advanced-cropper-line-wrapper--west{height:100%;width:12px}.advanced-cropper-line-wrapper--east{cursor:e-resize}.advanced-cropper-line-wrapper--west{cursor:w-resize}.advanced-cropper-line-wrapper--disabled{cursor:auto}.advanced-cropper-line-wrapper__content{position:absolute}.advanced-cropper-line-wrapper__content--east,.advanced-cropper-line-wrapper__content--west{height:100%}.advanced-cropper-line-wrapper__content--north,.advanced-cropper-line-wrapper__content--south{width:100%}.advanced-cropper-line-wrapper__content--east{left:50%;transform:translateX(-100%)}.advanced-cropper-line-wrapper__content--west{right:50%;transform:translateX(100%)}.advanced-cropper-line-wrapper__content--north{top:50%}.advanced-cropper-line-wrapper__content--south{bottom:50%}.advanced-cropper-handler-wrapper{height:30px;position:absolute;transform:translate(-50%,-50%);width:30px}.advanced-cropper-handler-wrapper__draggable{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.advanced-cropper-handler-wrapper--west-north{cursor:nw-resize}.advanced-cropper-handler-wrapper--north{cursor:n-resize}.advanced-cropper-handler-wrapper--east-north{cursor:ne-resize}.advanced-cropper-handler-wrapper--east{cursor:e-resize}.advanced-cropper-handler-wrapper--east-south{cursor:se-resize}.advanced-cropper-handler-wrapper--south{cursor:s-resize}.advanced-cropper-handler-wrapper--west-south{cursor:sw-resize}.advanced-cropper-handler-wrapper--west{cursor:w-resize}.advanced-cropper-handler-wrapper--disabled{cursor:auto}.advanced-cropper-bounding-box{height:100%;position:relative;width:100%}.advanced-cropper-bounding-box__handler-wrapper{position:absolute}.advanced-cropper-bounding-box__handler-wrapper--east,.advanced-cropper-bounding-box__handler-wrapper--west{height:100%;top:50%;transform:translateY(-50%)}.advanced-cropper-bounding-box__handler-wrapper--north,.advanced-cropper-bounding-box__handler-wrapper--south{left:50%;transform:translateX(-50%);width:100%}.advanced-cropper-bounding-box__handler-wrapper--west,.advanced-cropper-bounding-box__handler-wrapper--west-north,.advanced-cropper-bounding-box__handler-wrapper--west-south{left:0}.advanced-cropper-bounding-box__handler-wrapper--east,.advanced-cropper-bounding-box__handler-wrapper--east-north,.advanced-cropper-bounding-box__handler-wrapper--east-south{left:100%}.advanced-cropper-bounding-box__handler-wrapper--east-north,.advanced-cropper-bounding-box__handler-wrapper--north,.advanced-cropper-bounding-box__handler-wrapper--west-north{top:0}.advanced-cropper-bounding-box__handler-wrapper--east-south,.advanced-cropper-bounding-box__handler-wrapper--south,.advanced-cropper-bounding-box__handler-wrapper--west-south{top:100%}.advanced-cropper-bounding-box__handler{position:absolute}.advanced-cropper-bounding-box__handler--west-north{left:0;top:0}.advanced-cropper-bounding-box__handler--north{left:50%;top:0}.advanced-cropper-bounding-box__handler--east-north{left:100%;top:0}.advanced-cropper-bounding-box__handler--east{left:100%;top:50%}.advanced-cropper-bounding-box__handler--east-south{left:100%;top:100%}.advanced-cropper-bounding-box__handler--south{left:50%;top:100%}.advanced-cropper-bounding-box__handler--west-south{left:0;top:100%}.advanced-cropper-bounding-box__handler--west{left:0;top:50%}.advanced-cropper-bounding-box__line{position:absolute}.advanced-cropper-bounding-box__line--north,.advanced-cropper-bounding-box__line--south{left:0;transform:translateY(-50%)}.advanced-cropper-bounding-box__line--north{top:0}.advanced-cropper-bounding-box__line--south{top:100%}.advanced-cropper-bounding-box__line--east,.advanced-cropper-bounding-box__line--west{top:0;transform:translateX(-50%)}.advanced-cropper-bounding-box__line--west{left:0}.advanced-cropper-bounding-box__line--east{left:100%}.advanced-cropper-artificial-transition{will-change:transform}.advanced-cropper-background-image{max-width:none!important;pointer-events:none;position:absolute;transform-origin:center;-webkit-user-select:none;user-select:none}.advanced-cropper-canvas{display:none}.advanced-cropper-source{height:1px;opacity:0;position:absolute;visibility:hidden;width:1px}.advanced-cropper-fade{display:flex;flex-direction:column;opacity:0;transition:.5s;visibility:hidden}.advanced-cropper-fade--visible{opacity:1;visibility:visible}.advanced-cropper-wrapper__fade{flex-grow:1;min-height:0}.advanced-cropper-stencil-grid{border-collapse:collapse;display:table;opacity:0;table-layout:fixed;transition:opacity .3s}.advanced-cropper-stencil-grid--visible{opacity:1}.advanced-cropper-stencil-grid__row{display:table-row}.advanced-cropper-stencil-grid__cell{border:1px solid;display:table-cell;height:1%;width:1%}.advanced-cropper-stencil-grid__cell--top{border-top-color:transparent}.advanced-cropper-stencil-grid__cell--left{border-left-color:transparent}.advanced-cropper-stencil-grid__cell--right{border-right-color:transparent}.advanced-cropper-stencil-grid__cell--bottom{border-bottom-color:transparent}.advanced-cropper-stencil-overlay{-webkit-backface-visibility:hidden;box-shadow:0 0 0 1000px currentColor;box-sizing:initial;height:100%;pointer-events:none;position:absolute;width:100%}.advanced-cropper-stencil-wrapper{will-change:transform}.advanced-cropper-boundary{direction:ltr;position:relative;-webkit-user-select:none;user-select:none}.advanced-cropper-boundary__content{height:100%;left:0;position:absolute;top:0;width:100%}.advanced-cropper-boundary__stretcher{max-height:100%;max-width:100%;pointer-events:none;position:relative}.advanced-cropper-circle-stencil{-webkit-backface-visibility:hidden;box-sizing:initial;height:100%;position:absolute;-webkit-transform-style:preserve-3d;width:100%}.advanced-cropper-circle-stencil__overlay{border-radius:50%;overflow:hidden}.advanced-cropper-circle-stencil__preview{border-radius:50%}.advanced-cropper-circle-stencil__draggable-area,.advanced-cropper-circle-stencil__grid,.advanced-cropper-circle-stencil__overlay,.advanced-cropper-circle-stencil__preview{height:100%;position:absolute;width:100%}.advanced-cropper-circle-stencil--movable{cursor:move}.advanced-cropper-rectangle-stencil{-webkit-backface-visibility:hidden;box-sizing:border-box;-webkit-transform-style:preserve-3d}.advanced-cropper-rectangle-stencil,.advanced-cropper-rectangle-stencil__draggable-area,.advanced-cropper-rectangle-stencil__grid,.advanced-cropper-rectangle-stencil__overlay,.advanced-cropper-rectangle-stencil__preview{height:100%;position:absolute;width:100%}.advanced-cropper-rectangle-stencil--movable{cursor:move}.advanced-cropper-simple-line{background:none;border-width:0}.advanced-cropper-simple-line--north,.advanced-cropper-simple-line--south{height:0;width:100%}.advanced-cropper-simple-line--east,.advanced-cropper-simple-line--west{height:100%;width:0}.advanced-cropper-simple-line--east{border-right-width:1px}.advanced-cropper-simple-line--west{border-left-width:1px}.advanced-cropper-simple-line--south{border-bottom-width:1px}.advanced-cropper-simple-line--north{border-top-width:1px}.advanced-cropper-simple-handler{display:block}.advanced-cropper-preview{box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;position:relative}.advanced-cropper-preview__content{left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%)}.advanced-cropper-preview__image{display:none;max-width:none!important;pointer-events:none;position:absolute;transform-origin:center;-webkit-user-select:none;user-select:none}.advanced-cropper-preview__image--visible{display:block}.advanced-cropper-preview__boundary{flex-grow:1;min-height:0;min-width:0}.cropper-preview-wrapper__fade{flex-grow:1;min-height:0;width:100%}.advanced-cropper{background:#000;color:#fff;display:flex;flex-direction:column;max-height:100%;overflow:hidden;position:relative}.advanced-cropper__boundary{flex-grow:1;min-height:0;min-width:0}.advanced-cropper__background-wrapper,.advanced-cropper__wrapper{bottom:0;left:0;position:absolute;right:0;top:0}.advanced-cropper__stencil-wrapper{position:absolute}.advanced-cropper *{box-sizing:border-box}.advanced-cropper-simple-handler{background:currentColor;height:10px;width:10px}.advanced-cropper-simple-line{border-color:hsla(0,0%,100%,.3);border-style:solid;transition:border .5s}.advanced-cropper-simple-line--hover{border-color:#fff}.advanced-cropper-circle-stencil__preview{border:2px solid hsla(0,0%,100%,.2)}.advanced-cropper-stencil-overlay{color:rgba(0,0,0,.5)}.advanced-cropper-stencil-grid{color:hsla(0,0%,100%,.4)}");
        var Xv = {
          cropper_container: "ImageCropper-module_cropper_container__uvTtt",
          cropperContainer: "ImageCropper-module_cropper_container__uvTtt",
          copper_wrapper: "ImageCropper-module_copper_wrapper__Wpn9E",
          copperWrapper: "ImageCropper-module_copper_wrapper__Wpn9E",
          cropper_footer: "ImageCropper-module_cropper_footer__Rk-w5",
          cropperFooter: "ImageCropper-module_cropper_footer__Rk-w5",
          footer_button: "ImageCropper-module_footer_button__BdQgl",
          footerButton: "ImageCropper-module_footer_button__BdQgl",
          operate_box: "ImageCropper-module_operate_box__QJJAG",
          operateBox: "ImageCropper-module_operate_box__QJJAG",
          icon: "ImageCropper-module_icon__0Sh-o",
          mock_line: "ImageCropper-module_mock_line__-0jep",
          mockLine: "ImageCropper-module_mock_line__-0jep",
          cropper_type_wrapper: "ImageCropper-module_cropper_type_wrapper__7wTON",
          cropperTypeWrapper: "ImageCropper-module_cropper_type_wrapper__7wTON",
          active: "ImageCropper-module_active__c3F6n",
          cropper_type_arrow: "ImageCropper-module_cropper_type_arrow__6-sTm",
          cropperTypeArrow: "ImageCropper-module_cropper_type_arrow__6-sTm",
          cropper_select_list: "ImageCropper-module_cropper_select_list__Q9Msa",
          cropperSelectList: "ImageCropper-module_cropper_select_list__Q9Msa",
          cropper_select_list_arrow: "ImageCropper-module_cropper_select_list_arrow__GPSms",
          cropperSelectListArrow: "ImageCropper-module_cropper_select_list_arrow__GPSms",
          shape_icon: "ImageCropper-module_shape_icon__d0xAo",
          shapeIcon: "ImageCropper-module_shape_icon__d0xAo",
          preview_circle: "ImageCropper-module_preview_circle__M21xU",
          previewCircle: "ImageCropper-module_preview_circle__M21xU",
          preview_heart: "ImageCropper-module_preview_heart__ePRoZ",
          previewHeart: "ImageCropper-module_preview_heart__ePRoZ",
          preview_star: "ImageCropper-module_preview_star__f2pmG",
          previewStar: "ImageCropper-module_preview_star__f2pmG",
          overlay_rect_radius: "ImageCropper-module_overlay_rect_radius__q1iPj",
          overlayRectRadius: "ImageCropper-module_overlay_rect_radius__q1iPj",
          overlay_ellipse: "ImageCropper-module_overlay_ellipse__F-yu5",
          overlayEllipse: "ImageCropper-module_overlay_ellipse__F-yu5",
          hidden_canvas: "ImageCropper-module_hidden_canvas__l7EU7",
          hiddenCanvas: "ImageCropper-module_hidden_canvas__l7EU7",
          ml0: "ImageCropper-module_ml0__wrtDc"
        };
        c(
        ".ImageCropper-module_cropper_container__uvTtt{border-radius:6px 6px 0 0;max-height:544px;max-width:800px;min-width:600px}.ImageCropper-module_cropper_container__uvTtt *{box-sizing:border-box}.ImageCropper-module_cropper_container__uvTtt .advanced-cropper-simple-line{border-color:#599bff}.ImageCropper-module_cropper_container__uvTtt .advanced-cropper-simple-handler{border:1px solid #599bff}.ImageCropper-module_cropper_container__uvTtt .advanced-cropper__background-wrapper{overflow:hidden}.ImageCropper-module_cropper_container__uvTtt .advanced-cropper-stencil-overlay{box-shadow:0 0 0 1000px rgba(34,34,34,.7)}.ImageCropper-module_copper_wrapper__Wpn9E{border-radius:6px 6px 0 0;max-height:602px}.ImageCropper-module_cropper_footer__Rk-w5{align-items:center;display:flex;height:56px;justify-content:space-between;padding:0 12px}.ImageCropper-module_footer_button__BdQgl{background:#fff;border:1px solid rgba(51,51,51,.12);border-radius:6px;color:#333;cursor:pointer;font-family:inherit;font-size:16px;font-weight:500;line-height:130%;outline:none!important;padding:8px 16px;text-align:center}.ImageCropper-module_footer_button__BdQgl+.ImageCropper-module_footer_button__BdQgl{margin-left:12px}.ImageCropper-module_operate_box__QJJAG{align-items:center;display:flex;margin-left:22px}.ImageCropper-module_icon__0Sh-o{cursor:pointer}.ImageCropper-module_icon__0Sh-o+.ImageCropper-module_icon__0Sh-o{margin-left:32px;margin-right:28px}.ImageCropper-module_mock_line__-0jep{background:rgba(51,51,51,.12);border-radius:3px;flex-shrink:0;height:19px;margin-right:18px;width:2px}.ImageCropper-module_cropper_type_wrapper__7wTON{align-items:center;border-radius:4px;box-sizing:border-box;cursor:pointer;display:flex;font-size:0;gap:10px;height:28px;padding:6px 10px;position:relative}.ImageCropper-module_cropper_type_wrapper__7wTON.ImageCropper-module_active__c3F6n,.ImageCropper-module_cropper_type_wrapper__7wTON:hover{background:#eee}.ImageCropper-module_cropper_type_wrapper__7wTON.ImageCropper-module_active__c3F6n .ImageCropper-module_cropper_type_arrow__6-sTm{transform:rotate(180deg);transition:.2s ease-in}.ImageCropper-module_cropper_select_list__Q9Msa{align-items:flex-start;background:#fff;border-radius:6px;box-shadow:0 4px 20px 0 rgba(0,0,0,.08);box-sizing:border-box;display:flex;flex-wrap:wrap;height:112px;justify-content:space-between;left:50%;padding:6px;position:relative;position:absolute;top:-120px;transform:translateX(-50%);width:74px}.ImageCropper-module_cropper_select_list_arrow__GPSms{bottom:-4px;left:50%;position:absolute;transform:translateX(-50%)}.ImageCropper-module_shape_icon__d0xAo{align-items:center;cursor:pointer;display:flex;height:28px;justify-content:center;margin-bottom:8px;width:28px}.ImageCropper-module_shape_icon__d0xAo.ImageCropper-module_active__c3F6n{background:#e8f1ff;border-radius:4px;color:#3e85ee}@media screen and (max-width:959px){.ImageCropper-module_cropper_container__uvTtt{height:auto;max-height:610px;min-width:auto}.ImageCropper-module_cropper_footer__Rk-w5{height:50px;padding:0 10px}.ImageCropper-module_operate_box__QJJAG{align-items:center;margin-left:0}.ImageCropper-module_icon__0Sh-o+.ImageCropper-module_icon__0Sh-o{margin-left:36px}.ImageCropper-module_cropper_footer__Rk-w5{font-size:15px}.ImageCropper-module_footer_button__BdQgl{line-height:17px}}.ImageCropper-module_preview_circle__M21xU{border:none}.ImageCropper-module_preview_heart__ePRoZ{background:transparent;background:url(https://static.staticdj.com/oss/operation/79fbbd3c59b5e444f74d54581b9a0411.svg);background-repeat:no-repeat;background-size:100% 100%;position:relative}.ImageCropper-module_preview_star__f2pmG{background:transparent;background:url(https://static.staticdj.com/oss/operation/76f72c9c2894f11f9efcec04cf8f90e0.svg);background-repeat:no-repeat;background-size:100% 100%;position:relative}.ImageCropper-module_overlay_rect_radius__q1iPj{border-radius:28px}.ImageCropper-module_overlay_ellipse__F-yu5{border-radius:50%;height:100%;left:50%;position:absolute;transform:translateX(-50%);width:50%}.ImageCropper-module_hidden_canvas__l7EU7{display:none}.ImageCropper-module_ml0__wrtDc{margin-left:0}");
        var Gv = {
            rect: Hl(Tv, {}),
            rect_radius: Hl(wv, {}),
            circle: Hl(cv, {}),
            ellipse: Hl(gv, {}),
            heart: Hl(Iv, {}),
            star: Hl(Bv, {})
          },
          Yv = [Hl(Pv, {}), Hl(Cv, {}), Hl(pv, {}), Hl(_v, {}), Hl(jv, {}), Hl(Uv, {})],
          qv = {
            rect: "rectangle",
            rect_radius: "rounded_rectangle",
            circle: "round",
            ellipse: "oval",
            heart: "heart",
            star: "star"
          },
          Kv = new Array;
        ! function(e) {
          for (var t = 0; t < e.length; t++) Kv[t] = new Image, Kv[t].src = e[t]
        }(["https://static.staticdj.com/oss/operation/79fbbd3c59b5e444f74d54581b9a0411.svg", "https://static.staticdj.com/oss/operation/76f72c9c2894f11f9efcec04cf8f90e0.svg"]);
        var $v = e => {
            var {
              onCancel: t,
              onConfirm: n,
              file: r,
              url: i
            } = e, [o, a] = dt({
              width: 0,
              height: 0
            }), [s, l] = dt("rect"), [c, u] = dt(!1), p = vt(null), {
              formatMessage: f
            } = vo();
            gt((() => {
              var e = new Image;
              e.onload = function() {
                var {
                  width: t,
                  height: n
                } = e;
                a({
                  width: t,
                  height: n
                })
              }, e.src = i
            }), [i]), gt((() => {
              document.addEventListener("click", (() => {
                u(!1)
              }))
            }), []);
            var g = e => {
                p.current.zoomImage(e)
              },
              m = function() {
                var e = d((function*() {
                  var e, t = p.current.getCanvas(),
                    i = new X.fabric.Canvas("fabricInstance");
                  try {
                    e = yield v()
                  } catch (n) {
                    e = t.toDataURL()
                  }
                  var o = s;
                  "circle" === o ? X.fabric.Image.fromURL(e, (t => {
                    i.setWidth(t.width), i.setHeight(t.height), t.set({
                      clipPath: new X.fabric.Circle({
                        radius: t.width / 2,
                        originX: "center",
                        originY: "center"
                      })
                    }), i.add(t), i.renderAll(), e = i.toDataURL(), n(h(h({}, r), {}, {
                      dataUrl: e
                    }))
                  })) : "ellipse" === o ? X.fabric.Image.fromURL(e, (t => {
                    i.setWidth(t.width), i.setHeight(t.height), t.set({
                      clipPath: new X.fabric.Ellipse({
                        rx: t.width / 2 / 2,
                        ry: t.height / 2,
                        originX: "center",
                        originY: "center"
                      })
                    }), i.add(t), i.renderAll(), e = i.toDataURL(), n(h(h({}, r), {}, {
                      dataUrl: e
                    }))
                  })) : "rect_radius" === o ? X.fabric.Image.fromURL(e, (t => {
                    i.setWidth(t.width), i.setHeight(t.height), t.set({
                      clipPath: new X.fabric.Rect({
                        width: t.width,
                        height: t.height,
                        rx: 28,
                        ry: 28,
                        originX: "center",
                        originY: "center"
                      })
                    }), i.add(t), i.renderAll(), e = i.toDataURL(), n(h(h({}, r), {}, {
                      dataUrl: e
                    }))
                  })) : "heart" === o ? (e = t.toDataURL(), X.fabric.Image.fromURL(e, (t => {
                    var i = document.getElementById("fabricInstance2"),
                      o = t.height / t.width * 300,
                      a = 25 / 238 * o;
                    i.width = 800, i.height = 600;
                    var s = i.getContext("2d");
                    s.fillStyle = "rgba(255, 255, 255, 0)", s.fillRect(0, 0, 800, 600), s.save(), s.beginPath(), s.moveTo(400, 175 + a), s.bezierCurveTo(568, 125, 568, 330, 400, o + 168), s.bezierCurveTo(232, 330, 232, 125, 400,
                      175 + a), s.clip(), s.closePath(), (t = new Image).src = e, t.onload = function() {
                      s.drawImage(t, 273, 172, 254, o), e = i.toDataURL();
                      var a = new Image;
                      a.src = e, a.id = "img3", a.onload = () => {
                        var t = document.getElementById("fabricInstance3");
                        t.width = 254, t.height = o, t.getContext("2d").drawImage(a, -273, -1 * (600 - o) / 2 - 3), e = t.toDataURL(), n(h(h({}, r), {}, {
                          dataUrl: e
                        }))
                      }
                    }
                  }))) : "star" === o ? (e = t.toDataURL(), X.fabric.Image.fromURL(e, (t => {
                    var i = document.getElementById("fabricInstance2"),
                      o = i.getContext("2d");
                    o.fillStyle = "rgba(255,255,255,0)", o.fillRect(0, 0, t.width, t.height);
                    var a = new Image;
                    a.src = e, a.onload = function() {
                      i.width = t.width, i.height = t.height,
                        function(o, a) {
                          var s = Math.max(t.width / 2, t.height / 2);
                          (function(e, t, n) {
                            var r = 360 / t / 2,
                              i = 90,
                              o = n / 2;
                            e.save(), e.translate(n, n), e.rotate(60), e.moveTo(0, n), e.beginPath();
                            for (var a = 0; a <= t; a++) {
                              var s = n * Math.sin((i + 2 * a * r) / 180 * Math.PI),
                                l = n * Math.cos((i + 2 * a * r) / 180 * Math.PI),
                                c = o * Math.sin((i + (2 * a + 1) * r) / 180 * Math.PI),
                                u = o * Math.cos((i + (2 * a + 1) * r) / 180 * Math.PI);
                              e.lineTo(s, l), e.lineTo(c, u)
                            }
                            e.closePath(), e.clip()
                          })(o, 5, s), o.save(), o.rotate(-60), o.drawImage(a, -s, -s, t.width, t.height), e = i.toDataURL(), n(h(h({}, r), {}, {
                            dataUrl: e
                          }))
                        }(o, a)
                    }
                  }))) : n(h(h({}, r), {}, {
                    dataUrl: e
                  })), la("admin_plugin_product_customizer_shape", {
                    shape_type: qv[o]
                  })
                }));
                return function() {
                  return e.apply(this, arguments)
                }
              }(),
              v = () => new Promise((e => {
                var t = new X.fabric.StaticCanvas("fabricInstance0");
                X.fabric.Image.fromURL(i, (n => {
                  var {
                    width: r,
                    height: i,
                    left: o,
                    top: a
                  } = p.current.getCoordinates();
                  n.set({
                    left: -o,
                    top: -a
                  }), t.setWidth(r), t.setHeight(i), t.clear(), t.add(n), t.renderAll(), setTimeout((() => {
                    var n = t.toDataURL();
                    e(n)
                  }), 50)
                }))
              })),
              {
                width: _,
                height: b
              } = o,
              y = bt((() => {
                var e = pa() ? window.document.body.clientWidth - 32 : 800;
                return Hl("div", {
                  className: Xv.cropper_container,
                  style: {
                    maxWidth: e,
                    maxHeight: 602,
                    minWidth: 300,
                    width: _
                  },
                  children: Hl(Gm, "circle" === s ? {
                    className: Xv.copper_wrapper,
                    crossOrigin: "anonymous",
                    stencilComponent: Ym,
                    stencilProps: {
                      aspectRatio: 1,
                      previewClassName: Xv["preview_".concat(s)]
                    },
                    ref: p,
                    src: i
                  } : {
                    defaultSize: "rect" === s ? e => {
                      var {
                        imageSize: t,
                        visibleArea: n
                      } = e, r = Math.min((n || t).width / 2, (n || t).height / 2);
                      return {
                        width: r,
                        height: r
                      }
                    } : {},
                    className: Xv.copper_wrapper,
                    crossOrigin: "anonymous",
                    stencilProps: {
                      aspectRatio: {
                        heart: 268 / 238,
                        star: 269 / 256,
                        rect_radius: 1,
                        ellipse: 1,
                        circle: 1,
                        rect: ""
                      } [s],
                      previewClassName: Xv["preview_".concat(s)],
                      overlayClassName: Xv["overlay_".concat(s)]
                    },
                    ref: p,
                    src: i
                  })
                })
              }), [i, _, s]),
              w = bt((() => Gv[s]), [s]),
              x = bt((() => {
                var e = Object.values(Gv),
                  t = Object.keys(Gv);
                return Hl(Pe, {
                  children: null == e ? void 0 : e.map(((e, n) => Hl("div", {
                    onClick: () => {
                      l(t[n])
                    },
                    className: jl(Xv.shape_icon, t[n] === s ? Xv.active : ""),
                    children: t[n] === s ? Yv[n] : e
                  })))
                })
              }), [s]);
            if (i && _) return Hl("div", {
              className: "",
              children: [y, Hl("div", {
                className: Xv.hidden_canvas,
                children: [Hl("canvas", {
                  id: "fabricInstance0",
                  className: Xv.hidden_canvas
                }), Hl("canvas", {
                  id: "fabricInstance",
                  className: Xv.hidden_canvas
                }), Hl("canvas", {
                  id: "fabricInstance2",
                  className: Xv.hidden_canvas
                }), Hl("canvas", {
                  id: "fabricInstance3",
                  className: Xv.hidden_canvas
                })]
              }), Hl("div", {
                className: Xv.cropper_footer,
                children: [Hl("div", {
                  className: Xv.operate_box,
                  children: [!pa() && Hl(Pe, {
                    children: [Hl(ev, {
                      className: Xv.icon,
                      onClick: () => g(.8)
                    }), Hl(rv, {
                      className: Xv.icon,
                      onClick: () => g(1.2)
                    }), Hl("div", {
                      className: Xv.mock_line
                    })]
                  }), Hl("div", {
                    className: jl(Xv.cropper_type_wrapper, c ? Xv.active : "", pa() ? Xv.ml0 : ""),
                    onClick: e => {
                      e.stopPropagation(), u(!c)
                    },
                    children: [Hl("div", {
                      className: Xv.cropper_type_icon,
                      children: w
                    }), Hl("div", {
                      className: Xv.cropper_type_arrow,
                      children: Hl(av, {})
                    }), c && Hl("div", {
                      className: Xv.cropper_select_list,
                      children: [x, Hl(Vv, {
                        className: Xv.cropper_select_list_arrow
                      })]
                    })]
                  })]
                }), Hl("div", {
                  children: [Hl("button", {
                    className: Xv.footer_button,
                    onClick: () => {
                      var e;
                      t(r), fabricInstance && (null === (e = fabricInstance) || void 0 === e || e.dispose())
                    },
                    children: f({
                      id: "cancel"
                    })
                  }), Hl("button", {
                    className: Xv.footer_button,
                    onClick: m,
                    children: f({
                      id: "select"
                    })
                  })]
                })]
              })]
            })
          },
          Zv = Qe(null),
          Jv = Fp() ? mt : gt,
          Qv = Jv,
          e_ = function(e, t) {
            var n = vt(!0);
            Jv((function() {
              if (!n.current) return e()
            }), t), Jv((function() {
              return n.current = !1,
                function() {
                  n.current = !0
                }
            }), [])
          },
          t_ = [];

        function n_(e, t) {
          if (!e) return !1;
          if (e.contains) return e.contains(t);
          for (var n = t; n;) {
            if (n === e) return !0;
            n = n.parentNode
          }
          return !1
        }
        var r_, i_ = "data-rc-order",
          o_ = "rc-util-key",
          a_ = new Map;

        function s_() {
          var e = (arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}).mark;
          return e ? e.startsWith("data-") ? e : "data-".concat(e) : o_
        }

        function l_(e) {
          return e.attachTo ? e.attachTo : document.querySelector("head") || document.body
        }

        function c_(e) {
          return Array.from((a_.get(e) || e).children).filter((function(e) {
            return "STYLE" === e.tagName
          }))
        }

        function u_(e) {
          var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
          if (!Fp()) return null;
          var n = t.csp,
            r = t.prepend,
            i = document.createElement("style");
          i.setAttribute(i_, function(e) {
            return "queue" === e ? "prependQueue" : e ? "prepend" : "append"
          }(r)), null != n && n.nonce && (i.nonce = null == n ? void 0 : n.nonce), i.innerHTML = e;
          var o = l_(t),
            a = o.firstChild;
          if (r) {
            if ("queue" === r) {
              var s = c_(o).filter((function(e) {
                return ["prepend", "prependQueue"].includes(e.getAttribute(i_))
              }));
              if (s.length) return o.insertBefore(i, s[s.length - 1].nextSibling), i
            }
            o.insertBefore(i, a)
          } else o.appendChild(i);
          return i
        }

        function h_(e) {
          var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
          return c_(l_(t)).find((function(n) {
            return n.getAttribute(s_(t)) === e
          }))
        }

        function p_(e) {
          var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
            n = h_(e, t);
          n && l_(t).removeChild(n)
        }

        function d_(e, t) {
          var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
          ! function(e, t) {
            var n = a_.get(e);
            if (!n || !n_(document, n)) {
              var r = u_("", t),
                i = r.parentNode;
              a_.set(e, i), e.removeChild(r)
            }
          }(l_(n), n);
          var r = h_(t, n);
          if (r) {
            var i, o, a;
            if (null !== (i = n.csp) && void 0 !== i && i.nonce && r.nonce !== (null === (o = n.csp) || void 0 === o ? void 0 : o.nonce)) r.nonce = null === (a = n.csp) || void 0 === a ? void 0 : a.nonce;
            return r.innerHTML !== e && (r.innerHTML = e), r
          }
          var s = u_(e, n);
          return s.setAttribute(s_(n), t), s
        }
        var f_ = "rc-util-locker-".concat(Date.now()),
          g_ = 0;

        function m_(e) {
          var t = !!e,
            n = Dp(dt((function() {
              return g_ += 1, "".concat(f_, "_").concat(g_)
            })), 1)[0];
          Qv((function() {
            if (t) {
              var e = function(e) {
                  if ("undefined" == typeof document) return 0;
                  if (e || void 0 === r_) {
                    var t = document.createElement("div");
                    t.style.width = "100%", t.style.height = "200px";
                    var n = document.createElement("div"),
                      r = n.style;
                    r.position = "absolute", r.top = "0", r.left = "0", r.pointerEvents = "none", r.visibility = "hidden", r.width = "200px", r.height = "150px", r.overflow = "hidden", n.appendChild(t), document.body.appendChild(n);
                    var i = t.offsetWidth;
                    n.style.overflow = "scroll";
                    var o = t.offsetWidth;
                    i === o && (o = n.clientWidth), document.body.removeChild(n), r_ = i - o
                  }
                  return r_
                }(),
                r = document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight) && window.innerWidth > document.body.offsetWidth;
              d_("\nhtml body {\n  overflow-y: hidden;\n  ".concat(r ? "width: calc(100% - ".concat(e, "px);") : "", "\n}"), n)
            } else p_(n);
            return function() {
              p_(n)
            }
          }), [t, n])
        }
        var v_ = !1;
        var __ = function(e) {
            return !1 !== e && (Fp() && e ? "string" == typeof e ? document.querySelector(e) : "function" == typeof e ? e() : e : null)
          },
          b_ = Ft((function(e, t) {
            var n = e.open,
              r = e.autoLock,
              i = e.getContainer,
              o = e.autoDestroy,
              a = void 0 === o || o,
              s = e.children,
              l = Dp(dt(n), 2),
              c = l[0],
              u = l[1],
              h = c || n;
            gt((function() {
              (a || n) && u(n)
            }), [n, a]);
            var p = Dp(dt((function() {
                return __(i)
              })), 2),
              d = p[0],
              f = p[1];
            gt((function() {
              var e = __(i);
              f(null != e ? e : null)
            }));
            var g = function(e, t) {
                var n = Dp(dt((function() {
                    return Fp() ? document.createElement("div") : null
                  })), 1)[0],
                  r = vt(!1),
                  i = wt(Zv),
                  o = Dp(dt(t_), 2),
                  a = o[0],
                  s = o[1],
                  l = i || (r.current ? void 0 : function(e) {
                    s((function(t) {
                      return [e].concat(zh(t))
                    }))
                  });

                function c() {
                  n.parentElement || document.body.appendChild(n), r.current = !0
                }

                function u() {
                  var e;
                  null === (e = n.parentElement) || void 0 === e || e.removeChild(n), r.current = !1
                }
                return Qv((function() {
                  return e ? i ? i(c) : c() : u(), u
                }), [e]), Qv((function() {
                  a.length && (a.forEach((function(e) {
                    return e()
                  })), s(t_))
                }), [a]), [n, l]
              }(h && !d),
              m = Dp(g, 2),
              v = m[0],
              _ = m[1],
              b = null != d ? d : v;
            m_(r && n && Fp() && (b === v || b === document.body));
            var y = null;
            s && Lp(s) && t && (y = s.ref);
            var w = function() {
              for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];
              return Np((function() {
                return jp.apply(void 0, t)
              }), t, (function(e, t) {
                return e.length === t.length && e.every((function(e, n) {
                  return e === t[n]
                }))
              }))
            }(y, t);
            if (!h || !Fp() || void 0 === d) return null;
            var x, k = !1 === b || ("boolean" == typeof x && (v_ = x), v_),
              C = s;
            return t && (C = yn(s, {
              ref: w
            })), Te(Zv.Provider, {
              value: _
            }, k ? C : Jt(C, b))
          })),
          y_ = b_,
          w_ = {
            MAC_ENTER: 3,
            BACKSPACE: 8,
            TAB: 9,
            NUM_CENTER: 12,
            ENTER: 13,
            SHIFT: 16,
            CTRL: 17,
            ALT: 18,
            PAUSE: 19,
            CAPS_LOCK: 20,
            ESC: 27,
            SPACE: 32,
            PAGE_UP: 33,
            PAGE_DOWN: 34,
            END: 35,
            HOME: 36,
            LEFT: 37,
            UP: 38,
            RIGHT: 39,
            DOWN: 40,
            PRINT_SCREEN: 44,
            INSERT: 45,
            DELETE: 46,
            ZERO: 48,
            ONE: 49,
            TWO: 50,
            THREE: 51,
            FOUR: 52,
            FIVE: 53,
            SIX: 54,
            SEVEN: 55,
            EIGHT: 56,
            NINE: 57,
            QUESTION_MARK: 63,
            A: 65,
            B: 66,
            C: 67,
            D: 68,
            E: 69,
            F: 70,
            G: 71,
            H: 72,
            I: 73,
            J: 74,
            K: 75,
            L: 76,
            M: 77,
            N: 78,
            O: 79,
            P: 80,
            Q: 81,
            R: 82,
            S: 83,
            T: 84,
            U: 85,
            V: 86,
            W: 87,
            X: 88,
            Y: 89,
            Z: 90,
            META: 91,
            WIN_KEY_RIGHT: 92,
            CONTEXT_MENU: 93,
            NUM_ZERO: 96,
            NUM_ONE: 97,
            NUM_TWO: 98,
            NUM_THREE: 99,
            NUM_FOUR: 100,
            NUM_FIVE: 101,
            NUM_SIX: 102,
            NUM_SEVEN: 103,
            NUM_EIGHT: 104,
            NUM_NINE: 105,
            NUM_MULTIPLY: 106,
            NUM_PLUS: 107,
            NUM_MINUS: 109,
            NUM_PERIOD: 110,
            NUM_DIVISION: 111,
            F1: 112,
            F2: 113,
            F3: 114,
            F4: 115,
            F5: 116,
            F6: 117,
            F7: 118,
            F8: 119,
            F9: 120,
            F10: 121,
            F11: 122,
            F12: 123,
            NUMLOCK: 144,
            SEMICOLON: 186,
            DASH: 189,
            EQUALS: 187,
            COMMA: 188,
            PERIOD: 190,
            SLASH: 191,
            APOSTROPHE: 192,
            SINGLE_QUOTE: 222,
            OPEN_SQUARE_BRACKET: 219,
            BACKSLASH: 220,
            CLOSE_SQUARE_BRACKET: 221,
            WIN_KEY: 224,
            MAC_FF_META: 224,
            WIN_IME: 229,
            isTextModifyingKeyEvent: function(e) {
              var t = e.keyCode;
              if (e.altKey && !e.ctrlKey || e.metaKey || t >= w_.F1 && t <= w_.F12) return !1;
              switch (t) {
                case w_.ALT:
                case w_.CAPS_LOCK:
                case w_.CONTEXT_MENU:
                case w_.CTRL:
                case w_.DOWN:
                case w_.END:
                case w_.ESC:
                case w_.HOME:
                case w_.INSERT:
                case w_.LEFT:
                case w_.MAC_FF_META:
                case w_.META:
                case w_.NUMLOCK:
                case w_.NUM_CENTER:
                case w_.PAGE_DOWN:
                case w_.PAGE_UP:
                case w_.PAUSE:
                case w_.PRINT_SCREEN:
                case w_.RIGHT:
                case w_.SHIFT:
                case w_.UP:
                case w_.WIN_KEY:
                case w_.WIN_KEY_RIGHT:
                  return !1;
                default:
                  return !0
              }
            },
            isCharacterKey: function(e) {
              if (e >= w_.ZERO && e <= w_.NINE) return !0;
              if (e >= w_.NUM_ZERO && e <= w_.NUM_MULTIPLY) return !0;
              if (e >= w_.A && e <= w_.Z) return !0;
              if (-1 !== window.navigator.userAgent.indexOf("WebKit") && 0 === e) return !0;
              switch (e) {
                case w_.SPACE:
                case w_.QUESTION_MARK:
                case w_.NUM_PLUS:
                case w_.NUM_MINUS:
                case w_.NUM_PERIOD:
                case w_.NUM_DIVISION:
                case w_.SEMICOLON:
                case w_.DASH:
                case w_.EQUALS:
                case w_.COMMA:
                case w_.PERIOD:
                case w_.SLASH:
                case w_.APOSTROPHE:
                case w_.SINGLE_QUOTE:
                case w_.OPEN_SQUARE_BRACKET:
                case w_.BACKSLASH:
                case w_.CLOSE_SQUARE_BRACKET:
                  return !0;
                default:
                  return !1
              }
            }
          },
          x_ = w_;
        var k_ = 0;

        function C_(e) {
          var t = Dp(dt("ssr-id"), 2),
            n = t[0],
            r = t[1],
            i = Uh({}, Rn).useId,
            o = null == i ? void 0 : i();
          return gt((function() {
            if (!i) {
              var e = k_;
              k_ += 1, r("rc_unique_".concat(e))
            }
          }), []), e || (o || n)
        }

        function S_(e) {
          var t = e.prefixCls,
            n = e.style,
            r = e.visible,
            i = e.maskProps,
            o = e.motionName;
          return Te(Ed, {
            key: "mask",
            visible: r,
            motionName: o,
            leavedClassName: "".concat(t, "-mask-hidden")
          }, (function(e, r) {
            var o = e.className;
            return Te("div", xh({
              ref: r,
              style: Uh(Uh({}, e.style), n),
              className: jl("".concat(t, "-mask"), o)
            }, i))
          }))
        }

        function E_(e, t, n) {
          var r = t;
          return !r && n && (r = "".concat(e, "-").concat(n)), r
        }

        function T_(e, t) {
          var n = e["page".concat(t ? "Y" : "X", "Offset")],
            r = "scroll".concat(t ? "Top" : "Left");
          if ("number" != typeof n) {
            var i = e.document;
            "number" != typeof(n = i.documentElement[r]) && (n = i.body[r])
          }
          return n
        }
        var O_ = Rt((function(e) {
            return e.children
          }), (function(e, t) {
            return !t.shouldUpdate
          })),
          A_ = {
            width: 0,
            height: 0,
            overflow: "hidden",
            outline: "none"
          },
          P_ = Nn.forwardRef((function(e, t) {
            var n = e.prefixCls,
              r = e.className,
              i = e.style,
              o = e.title,
              a = e.ariaId,
              s = e.footer,
              l = e.closable,
              c = e.closeIcon,
              u = e.onClose,
              h = e.children,
              p = e.bodyStyle,
              d = e.bodyProps,
              f = e.modalRender,
              g = e.onMouseDown,
              m = e.onMouseUp,
              v = e.holderRef,
              _ = e.visible,
              b = e.forceRender,
              y = e.width,
              w = e.height,
              x = vt(),
              k = vt();
            Nn.useImperativeHandle(t, (function() {
              return {
                focus: function() {
                  var e;
                  null === (e = x.current) || void 0 === e || e.focus()
                },
                changeActive: function(e) {
                  var t = document.activeElement;
                  e && t === k.current ? x.current.focus() : e || t !== x.current || k.current.focus()
                }
              }
            }));
            var C, S, E, T = {};
            void 0 !== y && (T.width = y), void 0 !== w && (T.height = w), s && (C = Nn.createElement("div", {
              className: "".concat(n, "-footer")
            }, s)), o && (S = Nn.createElement("div", {
              className: "".concat(n, "-header")
            }, Nn.createElement("div", {
              className: "".concat(n, "-title"),
              id: a
            }, o))), l && (E = Nn.createElement("button", {
              type: "button",
              onClick: u,
              "aria-label": "Close",
              className: "".concat(n, "-close")
            }, c || Nn.createElement("span", {
              className: "".concat(n, "-close-x")
            })));
            var O = Nn.createElement("div", {
              className: "".concat(n, "-content")
            }, E, S, Nn.createElement("div", xh({
              className: "".concat(n, "-body"),
              style: p
            }, d), h), C);
            return Nn.createElement("div", {
              key: "dialog-element",
              role: "dialog",
              "aria-labelledby": o ? a : null,
              "aria-modal": "true",
              ref: v,
              style: Uh(Uh({}, i), T),
              className: jl(n, r),
              onMouseDown: g,
              onMouseUp: m
            }, Nn.createElement("div", {
              tabIndex: 0,
              ref: x,
              style: A_,
              "aria-hidden": "true"
            }), Nn.createElement(O_, {
              shouldUpdate: _ || b
            }, f ? f(O) : O), Nn.createElement("div", {
              tabIndex: 0,
              ref: k,
              style: A_,
              "aria-hidden": "true"
            }))
          })),
          M_ = P_,
          D_ = Ft((function(e, t) {
            var n = e.prefixCls,
              r = e.title,
              i = e.style,
              o = e.className,
              a = e.visible,
              s = e.forceRender,
              l = e.destroyOnClose,
              c = e.motionName,
              u = e.ariaId,
              h = e.onVisibleChanged,
              p = e.mousePosition,
              d = vt(),
              f = Dp(dt(), 2),
              g = f[0],
              m = f[1],
              v = {};

            function _() {
              var e = function(e) {
                var t = e.getBoundingClientRect(),
                  n = {
                    left: t.left,
                    top: t.top
                  },
                  r = e.ownerDocument,
                  i = r.defaultView || r.parentWindow;
                return n.left += T_(i), n.top += T_(i, !0), n
              }(d.current);
              m(p ? "".concat(p.x - e.left, "px ").concat(p.y - e.top, "px") : "")
            }
            return g && (v.transformOrigin = g), Te(Ed, {
              visible: a,
              onVisibleChanged: h,
              onAppearPrepare: _,
              onEnterPrepare: _,
              forceRender: s,
              motionName: c,
              removeOnLeave: l,
              ref: d
            }, (function(a, s) {
              var l = a.className,
                c = a.style;
              return Te(M_, xh({}, e, {
                ref: t,
                title: r,
                ariaId: u,
                prefixCls: n,
                holderRef: s,
                style: Uh(Uh(Uh({}, c), i), v),
                className: jl(o, l)
              }))
            }))
          }));
        D_.displayName = "Content";
        var I_ = D_;

        function N_(e) {
          var t = e.prefixCls,
            n = void 0 === t ? "rc-dialog" : t,
            r = e.zIndex,
            i = e.visible,
            o = void 0 !== i && i,
            a = e.keyboard,
            s = void 0 === a || a,
            l = e.focusTriggerAfterClose,
            c = void 0 === l || l,
            u = e.wrapStyle,
            h = e.wrapClassName,
            p = e.wrapProps,
            d = e.onClose,
            f = e.afterClose,
            g = e.transitionName,
            m = e.animation,
            v = e.closable,
            _ = void 0 === v || v,
            b = e.mask,
            y = void 0 === b || b,
            w = e.maskTransitionName,
            x = e.maskAnimation,
            k = e.maskClosable,
            C = void 0 === k || k,
            S = e.maskStyle,
            E = e.maskProps,
            T = e.rootClassName,
            O = vt(),
            A = vt(),
            P = vt(),
            M = Dp(dt(o), 2),
            D = M[0],
            I = M[1],
            N = C_();

          function R(e) {
            null == d || d(e)
          }
          var j = vt(!1),
            L = vt(),
            F = null;
          return C && (F = function(e) {
            j.current ? j.current = !1 : A.current === e.target && R(e)
          }), gt((function() {
            o && (I(!0), n_(A.current, document.activeElement) || (O.current = document.activeElement))
          }), [o]), gt((function() {
            return function() {
              clearTimeout(L.current)
            }
          }), []), Te("div", xh({
            className: jl("".concat(n, "-root"), T)
          }, Yh(e, {
            data: !0
          })), Te(S_, {
            prefixCls: n,
            visible: y && o,
            motionName: E_(n, w, x),
            style: Uh({
              zIndex: r
            }, S),
            maskProps: E
          }), Te("div", xh({
            tabIndex: -1,
            onKeyDown: function(e) {
              if (s && e.keyCode === x_.ESC) return e.stopPropagation(), void R(e);
              o && e.keyCode === x_.TAB && P.current.changeActive(!e.shiftKey)
            },
            className: jl("".concat(n, "-wrap"), h),
            ref: A,
            onClick: F,
            style: Uh(Uh({
              zIndex: r
            }, u), {}, {
              display: D ? null : "none"
            })
          }, p), Te(I_, xh({}, e, {
            onMouseDown: function() {
              clearTimeout(L.current), j.current = !0
            },
            onMouseUp: function() {
              L.current = setTimeout((function() {
                j.current = !1
              }))
            },
            ref: P,
            closable: _,
            ariaId: N,
            prefixCls: n,
            visible: o && D,
            onClose: R,
            onVisibleChanged: function(e) {
              if (e) n_(A.current, document.activeElement) || null === (t = P.current) || void 0 === t || t.focus();
              else {
                if (I(!1), y && O.current && c) {
                  try {
                    O.current.focus({
                      preventScroll: !0
                    })
                  } catch (e) {}
                  O.current = null
                }
                D && (null == f || f())
              }
              var t
            },
            motionName: E_(n, g, m)
          }))))
        }
        var R_ = function(e) {
          var t = e.visible,
            n = e.getContainer,
            r = e.forceRender,
            i = e.destroyOnClose,
            o = void 0 !== i && i,
            a = e.afterClose,
            s = Dp(dt(t), 2),
            l = s[0],
            c = s[1];
          return gt((function() {
            t && c(!0)
          }), [t]), r || !o || l ? Te(y_, {
            open: t || r || l,
            autoDestroy: !1,
            getContainer: n,
            autoLock: t || l
          }, Te(N_, xh({}, e, {
            destroyOnClose: o,
            afterClose: function() {
              null == a || a(), c(!1)
            }
          }))) : null
        };
        R_.displayName = "Dialog";
        var j_ = R_,
          L_ = "Upload-module_upload_dialog__jV-WW",
          F_ = "Upload-module_upload_large__9rjsH",
          B_ = "Upload-module_large_content__PoxTi",
          z_ = "Upload-module_large_img__Xguu1",
          H_ = "Upload-module_large_tips__TOH6I",
          U_ = "Upload-module_upload_tips__8XVTP",
          W_ = "Upload-module_upload_tips_dot__GLSmQ";

        function V_(e, t) {
          var n = void 0 !== e.uid ? "uid" : "name";
          return t.filter((t => t[n] === e[n]))[0]
        }
        c(
        '.Upload-module_upload_dialog__jV-WW{border-radius:8px;left:50%;margin:0!important;padding:0!important;position:absolute!important;top:50%;transform:translateX(-50%) translateY(-50%);width:auto!important}.Upload-module_upload_dialog__jV-WW .rc-dialog-body{display:block;padding:0}.Upload-module_upload_large__9rjsH{border-radius:8px;height:228px;margin-bottom:6px;width:100%}.Upload-module_large_content__PoxTi{align-items:flex-start;display:inline-flex;flex-direction:column;gap:8px}.Upload-module_large_img__Xguu1{align-items:center;display:flex;flex-direction:column;gap:4px;width:100%}.Upload-module_large_img__Xguu1 p{color:#333;font-style:normal;font-weight:600;width:100%}.Upload-module_large_img__Xguu1 p span{color:#477bff;font-weight:600;position:relative}.Upload-module_large_img__Xguu1 p span:after{background-color:#477bff;bottom:3px;content:"";height:1px;left:0;position:absolute;width:100%}.Upload-module_large_tips__TOH6I{align-items:flex-start;display:flex;flex-direction:column;gap:4px}.Upload-module_upload_tips__8XVTP{align-items:center;color:rgba(51,51,51,.8);display:flex;font-size:13px!important;font-style:normal;font-weight:400;gap:6px}.Upload-module_upload_tips_dot__GLSmQ{background-color:#5c5c5c;border-radius:50%;display:inline-block;height:3px;width:3px}');
        var X_, G_ = e => {
            var {
              optionData: t,
              control: n,
              defaultValue: r = [],
              fieldName: i,
              propertyName: o,
              name: a,
              required: s,
              max_file: l = 1,
              help: c,
              visible: u,
              type: p
            } = e, d = l > 1, {
              setError: f,
              clearErrors: g
            } = wt(Ap), [m, _] = dt(!1), [b, k] = dt({}), S = vt(null), T = vt(null), [O, A] = dt(""), [D, I] = dt(null), {
              formatMessage: N
            } = vo(), [R, j] = tf(), F = wt(du), z = ls({
              control: n,
              name: i
            }), {
              field: {
                onChange: U,
                onBlur: W,
                value: V,
                ref: X
              }
            } = cs({
              control: n,
              name: i,
              rules: {
                required: {
                  value: !!s,
                  message: N({
                    id: "required_tip"
                  })
                }
              },
              defaultValue: r
            }), G = V;
            V.length || (G = z || []);
            var [Y, q] = dt(null), K = Hl("div", {
              className: jl("pk-flex pk-justify-center pk-items-center pk-border pk-border-dashed pk-border-[#333/20] pk-rounded pk-bg-[#fdfdfd] hover:pk-bg-[#f6f6f7] hover:pk-border-[#333/40]", pa() ? "pk-w-18 pk-h-18" : "pk-w-20 pk-h-20"),
              children: Hl(wp, {})
            }), $ = Hl("div", {
              className: jl("pk-flex pk-justify-center pk-items-center pk-border pk-border-dashed pk-border-[#333/20] pk-bg-[#fdfdfd] hover:pk-bg-[#f6f6f7] hover:pk-border-[#333/40]", F_),
              children: Hl("div", {
                className: "".concat(B_, " notranslate"),
                children: [Hl("div", {
                  className: z_,
                  children: [Hl(Sp, {}), pa() ? Hl("p", {
                    className: pa() ? "!pk-text-[15px] text-center" : "!pk-text-[16px]",
                    children: N({
                      id: "options.upload.large.text.mobile"
                    })
                  }) : Hl("p", {
                    className: pa() ? "!pk-text-[15px]" : "!pk-text-[16px]",
                    children: [N({
                      id: "options.upload.large.text"
                    }), Hl("span", {
                      className: pa() ? "!pk-text-[15px]" : "!pk-text-[16px]",
                      children: N({
                        id: "options.upload.large.browse"
                      })
                    })]
                  })]
                }), Hl("div", {
                  className: "".concat(H_, " notranslate"),
                  children: [Hl("div", {
                    className: U_,
                    children: [Hl("span", {
                      className: W_
                    }), N({
                      id: "options.upload.large.limit"
                    })]
                  }), Hl("div", {
                    className: U_,
                    children: [Hl("span", {
                      className: W_
                    }), N({
                      id: "options.upload.large.maxfiles"
                    }), ": ", null == t ? void 0 : t.max_file]
                  })]
                })]
              })
            }), Z = vt(), J = (e, t) => {
              var n = [...t],
                r = n.findIndex((t => {
                  var {
                    uid: n
                  } = t;
                  return n === e.uid
                })); - 1 === r ? n.push(e) : n[r] = e;
              var i = n.filter((e => "error" == e.status));
              return null != i && i.length && (null == i ? void 0 : i.length) === (null == n ? void 0 : n.length) ? (R.destroy(), R.open({
                content: N({
                  id: "image_upload_fail"
                })
              })) : null != i && i.length && (R.destroy(), R.open({
                content: N({
                  id: "image_upload_section_fail"
                })
              })), n.filter((e => "error" !== e.status))
            }, Q = t => {
              var n, r, o, a = function(e, t) {
                var n = void 0 !== e.uid ? "uid" : "name",
                  r = t.filter((t => t[n] !== e[n]));
                return r.length === t.length ? null : r
              }(t, G);
              if (a && (n = h({}, t), pu.$emit(M, t), null === (r = Z.current) || void 0 === r || r.abort(n), U(a), "upload" === p && null !== (o = e.preview_setting) && void 0 !== o && o.preview_open)) {
                var s = fu(e, F);
                pu.$emit(B, {
                  label_id: i,
                  bg_image_url: s
                })
              }
            }, ee = () => {
              _(!1), A(""), T.current("cancel upload")
            }, te = e => {
              _(!1), A(""), S.current(e)
            }, ne = (e, t) => (e.objectName = "".concat(window.SHOP_PARAMS.shop_id, "/").concat((new Date).getTime()).concat(Math.floor(1e5 * Math.random()), ".").concat((y(e.type) || w(e.name)).toLowerCase()), e.status = "uploading", d && G
              .push(e), U(d ? G : [e]), "cropper" == t && I(e), "cropper" !== t && Y && Date.now() < 1e3 * Y.expire ? e : v().then((t => (q(t.data), e)))), re = n => Hl(up, {
              ref: Z,
              action: null == Y ? void 0 : Y.write_host,
              accept: "image/png,image/jpeg,image/gif,image/jpg",
              multiple: d,
              beforeUpload: (e, t) => {
                var n;
                I(null);
                var r = (null === (n = G) || void 0 === n ? void 0 : n.length) || 0;
                return r >= l && (R.destroy(), R.open({
                  content: N({
                    id: "upload_max_tip"
                  }, {
                    max: l
                  })
                }), t = t.slice(0, l - r)), !!V_(e, t) && (e.size > L ? (R.destroy(), R.open({
                  content: N({
                    id: "image_size_tip"
                  })
                }), !1) : 1 === t.length ? (e => new Promise(((t, n) => {
                  k(e);
                  var r = new FileReader;
                  r.readAsDataURL(e), S.current = t, T.current = n, r.onload = function(e) {
                    A(e.target.result), _(!0)
                  }
                })))(e).then((t => {
                  var n = E(t.dataUrl, e.name, "image/png");
                  return n.uid = e.uid, ne(n, "cropper")
                })) : ne(e))
              },
              data: e => ({
                policy: null == Y ? void 0 : Y.policy,
                OSSAccessKeyId: null == Y ? void 0 : Y.access_id,
                success_action_status: 200,
                signature: null == Y ? void 0 : Y.sign,
                "x-oss-forbid-overwrite": !0,
                key: (null == D ? void 0 : D.objectName) || e.objectName
              }),
              onStart: e => {
                C(D || e).then((t => {
                  var n = V_(D || e, G);
                  t && n && "success" !== n.status && (D ? D.thumbUrl = t : e.thumbUrl = t, U(J(D || e, G)))
                }))
              },
              onSuccess: (t, n) => {
                var r;
                if (V_(D || n, G)) {
                  if (D ? D.status = "success" : n.status = "success", D ? D.url = Y.read_host + D.objectName : n.url = Y.read_host + n.objectName, "design" === p && (D ? D.label_id = i : n.label_id = i, pu.$emit(P, D || n)), "upload" ===
                    p && null !== (r = e.preview_setting) && void 0 !== r && r.preview_open) {
                    var o = fu(e, F);
                    D ? D.label_id = i : n.label_id = i, D ? D.bg_image_url = o : n.bg_image_url = o, pu.$emit(B, D || n)
                  }
                  U(J(D || n, G))
                }
              },
              onError: (e, t, n) => {
                V_(D || n, G) && (n.status = "error", U(J(D || n, G)))
              },
              tabIndex: "0",
              onBlur: W,
              className: jl("pk-block", "large" === (null == t ? void 0 : t.upload_style) ? "pk-w-full" : "pk-w-fit"),
              children: n || ("large" === (null == t ? void 0 : t.upload_style) ? $ : K)
            });
            return gt((() => {
              G.length && g(i)
            }), [g, i, G]), Hl(Pe, {
              children: [u ? Hl(cu, {
                optionData: t,
                control: n,
                name: i,
                label: a,
                help: c,
                alwaysShowError: {
                  maxFileSize: !0
                },
                children: [Hl("div", {
                  className: "pk-flex pk-gap-4 pk-flex-wrap",
                  children: ["large" === (null == t ? void 0 : t.upload_style) && re(G.length < l ? null : Hl(Pe, {})), G.map((t => (t => Hl("div", {
                    onClick: () => {
                      var t;
                      "upload" === p && null !== (t = e.preview_setting) && void 0 !== t && t.preview_open && pu.$emit(H, e.fieldName)
                    },
                    className: jl("pk-relative pk-border pk-flex-none pk-text-sm pk-group", "error" === t.status ? "pk-border-[#DB393A]" : "pk-border-[#d9d9d9]", null != t && t.url ? "pk-border-0" : "", pa() ?
                      "pk-w-18 pk-h-18" : "pk-w-20 pk-h-20"),
                    children: [Hl(Op, {
                      onClick: e => {
                        e.stopPropagation(), Q(t)
                      },
                      role: "button",
                      className: "pk-absolute pk--top-3 pk--right-3"
                    }), null != t && t.url ? x(t) ? Hl("img", {
                      className: jl("pk-rounded pk-object-contain", pa() ? "pk-w-18 pk-h-18" : "pk-w-20 pk-h-20"),
                      src: Ea(t.url),
                      alt: t.objectName,
                      onerror: e => {
                        throw setTimeout((() => {
                          Q(t)
                        }), 20), R.destroy(), R.open({
                          content: N({
                            id: "image_upload_fail"
                          })
                        }), new Error(N({
                          id: "image_upload_fail"
                        }))
                      }
                    }) : Hl("div", {
                      className: "pk-flex pk-justify-center pk-items-center pk-h-full",
                      children: Hl("span", {
                        className: "pk-break-all",
                        children: t.name
                      })
                    }) : Hl("div", {
                      className: jl({
                        "pk-text-[#DB393A]": "error" === t.status,
                        "pk-text-[#292929]/75": "uploading" === t.status
                      }, "pk-flex pk-justify-center pk-items-center pk-h-full pk-bg-[#F6F6F7] pk-break-all"),
                      children: "uploading" === t.status ? Hl(Mp, {
                        style: {
                          transform: "scale(0.3)",
                          flexShrink: 0
                        }
                      }) : "Error"
                    })]
                  }))(t))), "large" !== (null == t ? void 0 : t.upload_style) && re(G.length < l ? null : Hl(Pe, {})), m && Hl(j_, {
                    className: L_,
                    title: null,
                    onClose: () => {
                      _(!1)
                    },
                    closable: !1,
                    maskClosable: !1,
                    visible: !0,
                    children: Hl($v, {
                      file: b,
                      url: O,
                      onConfirm: te,
                      onCancel: ee
                    })
                  })]
                }), G.filter((e => e.url)).map(((e, t) => Hl("input", {
                  ref: X,
                  type: "hidden",
                  name: "properties[".concat(o, "_").concat(t + 1, "]"),
                  value: e.url || ""
                }, e.uid)))]
              }) : null, j]
            })
          },
          Y_ = ["product", "order", "options", "type", "fid", "advance"],
          q_ = {
            swatch: bu,
            dropdown: Tu,
            text: Qu,
            date: eh,
            button: th,
            checkbox: wh,
            upload: G_,
            design: G_
          },
          K_ = e => {
            var {
              type: t,
              default: n
            } = e;
            return "text" === t && n ? n : "checkbox" !== t && "button" !== t || null == e || !e.default_selection || null == e ? void 0 : e.default_selection_values
          },
          $_ = e => {
            var {
              data: t,
              control: n,
              setData: r
            } = e, [i, o] = dt(!1);
            gt((() => {
              var e = () => {
                o(!i)
              };
              return pu.$on(D, e), pu.$on(I, e), () => {
                pu.$off(D, e), pu.$off(I, e)
              }
            }), [i]);
            var a = bt((() => {
              var e = [],
                r = {
                  columnSpan: [],
                  children: []
                },
                i = () => {
                  e.push(Hl("div", {
                    className: "pk-grid pk-gap-x-3 pk-grid-flow-col pk-grid-rows-[auto,auto,auto,auto]",
                    style: {
                      "grid-template-columns": r.columnSpan.map((e => "minmax(0px,".concat(e, "fr)"))).join(" ")
                    },
                    children: r.children
                  })), r = {
                    columnSpan: [],
                    children: []
                  }
                },
                o = (e, t) => {
                  r.columnSpan.push(1 / e), r.children.push(t)
                };
              return t.forEach(((t, a) => {
                if (!t.isHidden) {
                  var s, l, {
                      product: c,
                      order: u,
                      options: p,
                      type: d,
                      fid: f,
                      advance: m
                    } = t,
                    v = g(t, Y_),
                    _ = d;
                  if ("text" === d) _ = (null === (s = window) || void 0 === s || null === (l = s.appparakeet_custom_type) || void 0 === l ? void 0 : l[u]) || d;
                  var {
                    columns: b = 1
                  } = m || {}, y = Hl(q_[_], h(h(h({
                    control: n,
                    name: c,
                    visible: !(null != t && t.isHidden),
                    propertyName: u,
                    fieldName: f,
                    options: p,
                    defaultValue: K_(t)
                  }, m), v), {}, {
                    optionData: t,
                    required: !(!m.required || null != t && t.isHidden),
                    type: _,
                    textStyleChange: e => {
                      (e => {
                        var n;
                        e && null != t && null !== (n = t.preview_setting) && void 0 !== n && n.preview_open && (t.preview_setting.data.forEach((t => {
                          t.cards.forEach((n => {
                            h(h({}, t.cards[0]), e)
                          }))
                        })), t.isInit = e.isInit, pu.$emit(z, h(h({}, t), e)))
                      })(e)
                    }
                  }), f);
                  "dropdown" === d ? (r.columnSpan.reduce(((e, t) => e + t), 0) + 1 / b <= 1 || i(), o(b, y)) : (r.children.length && i(), e.push(y))
                }
              })), r.children.length && i(), e
            }), [n, t, i]);
            return {
              formDom: a
            }
          };

        function Z_() {
          return Z_ = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, Z_.apply(this, arguments)
        }
        var J_, Q_, eb, tb, nb = e => Te("svg", Z_({
            width: 10,
            height: 8,
            fill: "none",
            xmlns: "http://www.w3.org/2000/svg"
          }, e), X_ || (X_ = Te("path", {
            fillRule: "evenodd",
            clipRule: "evenodd",
            d: "M9.477 1.023a.675.675 0 0 1 0 .954l-5 5a.675.675 0 0 1-.954 0l-2.5-2.5a.675.675 0 0 1 .954-.954L4 5.546l4.523-4.523a.675.675 0 0 1 .954 0Z",
            fill: "#333",
            fillOpacity: .8
          }))),
          rb = ["text", "upload", "design"],
          ib = window.SHOP_PARAMS.finance_symbol,
          ob = (null === (J_ = window) || void 0 === J_ || null === (Q_ = J_.C_SETTINGS) || void 0 === Q_ || null === (eb = Q_.market) || void 0 === eb || null === (tb = eb.market_price_setting) || void 0 === tb ? void 0 : tb.actual_rate) || 1,
          ab = 1e5,
          sb = e => {
            var {
              data: t,
              control: n
            } = e, {
              formatMessage: r
            } = vo(), i = t.reduce(((e, t) => {
              var i, o;
              if (null != t && t.isHidden || null === (i = n._formValues[t.fid]) || void 0 === i || !i.length) return e;
              rb.includes(t.type) && Number(t.price) ? e.push({
                des: r({
                  id: "add_price_tip"
                }, {
                  key: '<div class="pk-font-semibold pk-ml-[10px] pk-mr-[10px]">['.concat(t.product, "]</div>"),
                  price: '\n              <div class="pk-font-semibold money  pk-ml-[10px] pk-mr-[10px]">\n                '.concat(ib).concat((Number(t.price) * ab * ob / ab).toFixed(2), "\n              </div>\n              ")
                })
              }) : null === (o = t.options) || void 0 === o || o.forEach((i => {
                ("dropdown" === t.type ? n._formValues[t.fid] === i.label : n._formValues[t.fid].includes(i.label)) && Number(i.price) && e.push({
                  des: r({
                    id: "select_add_price_tip"
                  }, {
                    key: '<span class="pk-font-semibold  pk-ml-[10px] pk-mr-[10px]">['.concat(t.product, ": ").concat(i.label, "]</span>"),
                    price: '<span class="money pk-font-semibold  pk-ml-[10px] pk-mr-[10px]">'.concat(ib).concat((Number(i.price) * ab * ob / ab).toFixed(2), "</span>")
                  })
                })
              }));
              return e
            }), []);
            return !(null == i || !i.length) && Hl("div", {
              className: jl("pk-flex pk-flex-col pk-pt-2 pk-pb-1", pa() ? "!pk-text-[13px]" : "!pk-text-[14px]"),
              children: null == i ? void 0 : i.map((e => Hl("div", {
                className: "pk-flex pk-items-center pk-mb-4 last:pk-mb-0",
                children: [Hl("div", {
                  className: "pk-flex pk-items-center pk-justify-center pk-mr-2.5 pk-w-4.5 pk-h-4.5 pk-rounded-full pk-bg-[#E6E6E6]/40",
                  children: Hl(nb, {})
                }), Hl("div", {
                  className: "pk-flex pk-flex-wrap",
                  dangerouslySetInnerHTML: {
                    __html: e.des
                  }
                })]
              }, e.fid)))
            })
          },
          lb = "Tab-module_parakeet_comp_tab__Zx-vZ",
          cb = "Tab-module_tab_item__tBdan",
          ub = "Tab-module_tab_item_active__6rfwe";
        c(
        '.Tab-module_parakeet_comp_tab__Zx-vZ{display:flex;font-weight:600;margin-bottom:16px}.Tab-module_tab_item__tBdan{border:none;color:rgba(51,51,51,.7);cursor:pointer;flex:1;font-size:18px;height:35px;line-height:130%;position:relative;text-align:center}.Tab-module_tab_item__tBdan:after{background-color:hsla(0,0%,90%,.6);bottom:-2px;content:"";height:2px;left:0;position:absolute;width:100%}.Tab-module_tab_item__tBdan:first-child:after{border-radius:2px 0 0 2px}.Tab-module_tab_item__tBdan:last-child:after{border-radius:0 2px 2px 0}.Tab-module_tab_item_active__6rfwe{color:#333;height:34px}.Tab-module_tab_item_active__6rfwe:after{background-color:#333;border-radius:1px!important;bottom:-3px!important;content:"";height:3px!important;left:0;position:absolute;width:100%}@media screen and (max-width:959px){.Tab-module_parakeet_comp_tab__Zx-vZ{padding:0 16px}.eva .parakeet_comp_tab{padding:0}.hero .parakeet_comp_tab,.nova .parakeet_comp_tab,.wind .parakeet_comp_tab{margin-top:26px}.flash .parakeet_comp_tab{margin-top:26px;padding:0 8px}.flash #app-parakeet{padding:0 10px}.dj_skin_body .parakeet_comp_tab{margin-top:26px}}');
        var hb = Rt((e => {
          var {
            tabs: t,
            onChange: n,
            value: r
          } = e, [i, o] = dt(0);
          return gt((() => {
            o(r)
          }), [r]), Hl("div", {
            className: jl(["parakeet_comp_tab", lb]),
            children: t.map((e => Hl("div", {
              className: jl([
                [cb], {
                  [ub]: i === e
                }
              ]),
              onClick: () => {
                o(e), n(e)
              },
              children: e
            }, e)))
          })
        }));

        function pb(e) {
          var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},
            n = [];
          return Nn.Children.forEach(e, (function(e) {
            (null != e || t.keepEmpty) && (Array.isArray(e) ? n = n.concat(pb(e)) : jn.exports.isFragment(e) && e.props ? n = n.concat(pb(e.props.children, t)) : n.push(e))
          })), n
        }
        var db = function() {
          if ("undefined" == typeof navigator || "undefined" == typeof window) return !1;
          var e = navigator.userAgent || navigator.vendor || window.opera;
          return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i
            .test(e) ||
            /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i
            .test(null == e ? void 0 : e.substr(0, 4))
        };

        function fb(e) {
          var t = vt();
          t.current = e;
          var n = yt((function() {
            for (var e, n = arguments.length, r = new Array(n), i = 0; i < n; i++) r[i] = arguments[i];
            return null === (e = t.current) || void 0 === e ? void 0 : e.call.apply(e, [t].concat(r))
          }), []);
          return n
        }

        function gb(e) {
          return void 0 !== e
        }

        function mb(e, t) {
          var n = t || {},
            r = n.defaultValue,
            i = n.value,
            o = n.onChange,
            a = n.postState,
            s = Dp(cd((function() {
              return gb(i) ? i : gb(r) ? "function" == typeof r ? r() : r : "function" == typeof e ? e() : e
            })), 2),
            l = s[0],
            c = s[1],
            u = void 0 !== i ? i : l,
            h = a ? a(u) : u,
            p = fb(o),
            d = Dp(cd([u]), 2),
            f = d[0],
            g = d[1];
          return e_((function() {
            var e = f[0];
            l !== e && p(l, e)
          }), [f]), e_((function() {
            gb(i) || c(i)
          }), [i]), [h, fb((function(e, t) {
            c(e, t), g([u], t)
          }))]
        }
        var vb = new Map;
        var _b = new Ml((function(e) {
          e.forEach((function(e) {
            var t, n = e.target;
            null === (t = vb.get(n)) || void 0 === t || t.forEach((function(e) {
              return e(n)
            }))
          }))
        }));
        var bb = function(e) {
            Ah(n, e);
            var t = Dh(n);

            function n() {
              return kh(this, n), t.apply(this, arguments)
            }
            return Th(n, [{
              key: "render",
              value: function() {
                return this.props.children
              }
            }]), n
          }(Me),
          yb = Qe(null);

        function wb(e, t) {
          var n = e.children,
            r = e.disabled,
            i = vt(null),
            o = vt(null),
            a = wt(yb),
            s = "function" == typeof n,
            l = s ? n(i) : n,
            c = vt({
              width: -1,
              height: -1,
              offsetWidth: -1,
              offsetHeight: -1
            }),
            u = !s && bn(l) && Lp(l),
            h = u ? l.ref : null,
            p = bt((function() {
              return jp(h, i)
            }), [h, i]),
            d = function() {
              return Ip(i.current) || Ip(o.current)
            };
          _t(t, (function() {
            return d()
          }));
          var f = vt(e);
          f.current = e;
          var g = yt((function(e) {
            var t = f.current,
              n = t.onResize,
              r = t.data,
              i = e.getBoundingClientRect(),
              o = i.width,
              s = i.height,
              l = e.offsetWidth,
              u = e.offsetHeight,
              h = Math.floor(o),
              p = Math.floor(s);
            if (c.current.width !== h || c.current.height !== p || c.current.offsetWidth !== l || c.current.offsetHeight !== u) {
              var d = {
                width: h,
                height: p,
                offsetWidth: l,
                offsetHeight: u
              };
              c.current = d;
              var g = l === Math.round(o) ? o : l,
                m = u === Math.round(s) ? s : u,
                v = Uh(Uh({}, d), {}, {
                  offsetWidth: g,
                  offsetHeight: m
                });
              null == a || a(v, e, r), n && Promise.resolve().then((function() {
                n(v, e)
              }))
            }
          }), []);
          return gt((function() {
            var e, t, n = d();
            return n && !r && (e = n, t = g, vb.has(e) || (vb.set(e, new Set), _b.observe(e)), vb.get(e).add(t)),
              function() {
                return function(e, t) {
                  vb.has(e) && (vb.get(e).delete(t), vb.get(e).size || (_b.unobserve(e), vb.delete(e)))
                }(n, g)
              }
          }), [i.current, r]), Te(bb, {
            ref: o
          }, u ? yn(l, {
            ref: p
          }) : l)
        }
        var xb = Ft(wb);

        function kb(e, t) {
          var n = e.children;
          return ("function" == typeof n ? [n] : pb(n)).map((function(n, r) {
            var i = (null == n ? void 0 : n.key) || "".concat("rc-observer-key", "-").concat(r);
            return Te(xb, xh({}, e, {
              key: i,
              ref: 0 === r ? t : void 0
            }), n)
          }))
        }
        var Cb = Ft(kb);
        Cb.Collection = function(e) {
          var t = e.children,
            n = e.onBatchResize,
            r = vt(0),
            i = vt([]),
            o = wt(yb),
            a = yt((function(e, t, a) {
              r.current += 1;
              var s = r.current;
              i.current.push({
                size: e,
                element: t,
                data: a
              }), Promise.resolve().then((function() {
                s === r.current && (null == n || n(i.current), i.current = [])
              })), null == o || o(e, t, a)
            }), [n, o]);
          return Te(yb.Provider, {
            value: a
          }, t)
        };
        var Sb = Cb;

        function Eb(e) {
          var t = vt(),
            n = vt(!1);
          return gt((function() {
              return function() {
                n.current = !0, md.cancel(t.current)
              }
            }), []),
            function() {
              for (var r = arguments.length, i = new Array(r), o = 0; o < r; o++) i[o] = arguments[o];
              n.current || (md.cancel(t.current), t.current = md((function() {
                e.apply(void 0, i)
              })))
            }
        }

        function Tb(e, t) {
          var n, r = e.prefixCls,
            i = e.id,
            o = e.active,
            a = e.tab,
            s = a.key,
            l = a.tab,
            c = a.disabled,
            u = a.closeIcon,
            h = e.closable,
            p = e.renderWrapper,
            d = e.removeAriaLabel,
            f = e.editable,
            g = e.onClick,
            m = e.onRemove,
            v = e.onFocus,
            _ = e.style,
            b = "".concat(r, "-tab");
          gt((function() {
            return m
          }), []);
          var y = f && !1 !== h && !c;

          function w(e) {
            c || g(e)
          }
          var x = Te("div", {
            key: s,
            ref: t,
            className: jl(b, (n = {}, Ih(n, "".concat(b, "-with-remove"), y), Ih(n, "".concat(b, "-active"), o), Ih(n, "".concat(b, "-disabled"), c), n)),
            style: _,
            onClick: w
          }, Te("div", {
            role: "tab",
            "aria-selected": o,
            id: i && "".concat(i, "-tab-").concat(s),
            className: "".concat(b, "-btn"),
            "aria-controls": i && "".concat(i, "-panel-").concat(s),
            "aria-disabled": c,
            tabIndex: c ? null : 0,
            onClick: function(e) {
              e.stopPropagation(), w(e)
            },
            onKeyDown: function(e) {
              [x_.SPACE, x_.ENTER].includes(e.which) && (e.preventDefault(), w(e))
            },
            onFocus: v
          }, l), y && Te("button", {
            type: "button",
            "aria-label": d || "remove",
            tabIndex: 0,
            className: "".concat(b, "-remove"),
            onClick: function(e) {
              var t;
              e.stopPropagation(), (t = e).preventDefault(), t.stopPropagation(), f.onEdit("remove", {
                key: s,
                event: t
              })
            }
          }, u || f.removeIcon || "×"));
          return p ? p(x) : x
        }
        var Ob = Ft(Tb),
          Ab = {
            width: 0,
            height: 0,
            left: 0,
            top: 0
          };
        var Pb = {
          width: 0,
          height: 0,
          left: 0,
          top: 0,
          right: 0
        };
        var Mb = function(e, t, n, r) {
            var i = n ? n.call(r, e, t) : void 0;
            if (void 0 !== i) return !!i;
            if (e === t) return !0;
            if ("object" != typeof e || !e || "object" != typeof t || !t) return !1;
            var o = Object.keys(e),
              a = Object.keys(t);
            if (o.length !== a.length) return !1;
            for (var s = Object.prototype.hasOwnProperty.bind(t), l = 0; l < o.length; l++) {
              var c = o[l];
              if (!s(c)) return !1;
              var u = e[c],
                h = t[c];
              if (!1 === (i = n ? n.call(r, u, h, c) : void 0) || void 0 === i && u !== h) return !1
            }
            return !0
          },
          Db = ["prefixCls", "invalidate", "item", "renderItem", "responsive", "responsiveDisabled", "registerSize", "itemKey", "className", "style", "children", "display", "order", "component"],
          Ib = void 0;

        function Nb(e, t) {
          var n = e.prefixCls,
            r = e.invalidate,
            i = e.item,
            o = e.renderItem,
            a = e.responsive,
            s = e.responsiveDisabled,
            l = e.registerSize,
            c = e.itemKey,
            u = e.className,
            h = e.style,
            p = e.children,
            d = e.display,
            f = e.order,
            g = e.component,
            m = void 0 === g ? "div" : g,
            v = Nh(e, Db),
            _ = a && !d;

          function b(e) {
            l(c, e)
          }
          gt((function() {
            return function() {
              b(null)
            }
          }), []);
          var y, w = o && i !== Ib ? o(i) : p;
          r || (y = {
            opacity: _ ? 0 : 1,
            height: _ ? 0 : Ib,
            overflowY: _ ? "hidden" : Ib,
            order: a ? f : Ib,
            pointerEvents: _ ? "none" : Ib,
            position: _ ? "absolute" : Ib
          });
          var x = {};
          _ && (x["aria-hidden"] = !0);
          var k = Te(m, xh({
            className: jl(!r && n, u),
            style: Uh(Uh({}, y), h)
          }, x, v, {
            ref: t
          }), w);
          return a && (k = Te(Sb, {
            onResize: function(e) {
              b(e.offsetWidth)
            },
            disabled: s
          }, k)), k
        }
        var Rb = Ft(Nb);
        Rb.displayName = "Item";
        var jb = Rb;
        var Lb = ["component"],
          Fb = ["className"],
          Bb = ["className"],
          zb = Ft((function(e, t) {
            var n = wt(Wb);
            if (!n) {
              var r = e.component;
              return Te(void 0 === r ? "div" : r, xh({}, Nh(e, Lb), {
                ref: t
              }))
            }
            var i = n.className,
              o = Nh(n, Fb),
              a = e.className,
              s = Nh(e, Bb);
            return Te(Wb.Provider, {
              value: null
            }, Te(jb, xh({
              ref: t,
              className: jl(i, a)
            }, o, s)))
          }));
        zb.displayName = "RawItem";
        var Hb = zb,
          Ub = ["prefixCls", "data", "renderItem", "renderRawItem", "itemKey", "itemWidth", "ssr", "style", "className", "maxCount", "renderRest", "renderRawRest", "suffix", "component", "itemComponent", "onVisibleChange"],
          Wb = Qe(null),
          Vb = "responsive",
          Xb = "invalidate";

        function Gb(e) {
          return "+ ".concat(e.length, " ...")
        }

        function Yb(e, t) {
          var n, r, i, o, a = e.prefixCls,
            s = void 0 === a ? "rc-overflow" : a,
            l = e.data,
            c = void 0 === l ? [] : l,
            u = e.renderItem,
            h = e.renderRawItem,
            p = e.itemKey,
            d = e.itemWidth,
            f = void 0 === d ? 10 : d,
            g = e.ssr,
            m = e.style,
            v = e.className,
            _ = e.maxCount,
            b = e.renderRest,
            y = e.renderRawRest,
            w = e.suffix,
            x = e.component,
            k = void 0 === x ? "div" : x,
            C = e.itemComponent,
            S = e.onVisibleChange,
            E = Nh(e, Ub),
            T = (n = Dp(cd({}), 2)[1], r = vt([]), i = 0, o = 0, function(e) {
              var t = i;
              return i += 1, r.current.length < t + 1 && (r.current[t] = e), [r.current[t], function(e) {
                r.current[t] = "function" == typeof e ? e(r.current[t]) : e, md.cancel(o), o = md((function() {
                  n({}, !0)
                }))
              }]
            }),
            O = "full" === g,
            A = Dp(T(null), 2),
            P = A[0],
            M = A[1],
            D = P || 0,
            I = Dp(T(new Map), 2),
            N = I[0],
            R = I[1],
            j = Dp(T(0), 2),
            L = j[0],
            F = j[1],
            B = Dp(T(0), 2),
            z = B[0],
            H = B[1],
            U = Dp(T(0), 2),
            W = U[0],
            V = U[1],
            X = Dp(dt(null), 2),
            G = X[0],
            Y = X[1],
            q = Dp(dt(null), 2),
            K = q[0],
            $ = q[1],
            Z = bt((function() {
              return null === K && O ? Number.MAX_SAFE_INTEGER : K || 0
            }), [K, P]),
            J = Dp(dt(!1), 2),
            Q = J[0],
            ee = J[1],
            te = "".concat(s, "-item"),
            ne = Math.max(L, z),
            re = _ === Vb,
            ie = c.length && re,
            oe = _ === Xb,
            ae = ie || "number" == typeof _ && c.length > _,
            se = bt((function() {
              var e = c;
              return ie ? e = null === P && O ? c : c.slice(0, Math.min(c.length, D / f)) : "number" == typeof _ && (e = c.slice(0, _)), e
            }), [c, f, P, _, ie]),
            le = bt((function() {
              return ie ? c.slice(Z + 1) : c.slice(se.length)
            }), [c, se, ie, Z]),
            ce = yt((function(e, t) {
              var n;
              return "function" == typeof p ? p(e) : null !== (n = p && (null == e ? void 0 : e[p])) && void 0 !== n ? n : t
            }), [p]),
            ue = yt(u || function(e) {
              return e
            }, [u]);

          function he(e, t, n) {
            (K !== e || void 0 !== t && t !== G) && ($(e), n || (ee(e < c.length - 1), null == S || S(e)), void 0 !== t && Y(t))
          }

          function pe(e, t) {
            R((function(n) {
              var r = new Map(n);
              return null === t ? r.delete(e) : r.set(e, t), r
            }))
          }

          function de(e) {
            return N.get(ce(se[e], e))
          }
          Qv((function() {
            if (D && ne && se) {
              var e = W,
                t = se.length,
                n = t - 1;
              if (!t) return void he(0, null);
              for (var r = 0; r < t; r += 1) {
                var i = de(r);
                if (O && (i = i || 0), void 0 === i) {
                  he(r - 1, void 0, !0);
                  break
                }
                if (e += i, 0 === n && e <= D || r === n - 1 && e + de(n) <= D) {
                  he(n, null);
                  break
                }
                if (e + ne > D) {
                  he(r - 1, e - i - W + z);
                  break
                }
              }
              w && de(0) + W > D && Y(null)
            }
          }), [D, N, z, W, ce, se]);
          var fe = Q && !!le.length,
            ge = {};
          null !== G && ie && (ge = {
            position: "absolute",
            left: G,
            top: 0
          });
          var me, ve = {
              prefixCls: te,
              responsive: ie,
              component: C,
              invalidate: oe
            },
            _e = h ? function(e, t) {
              var n = ce(e, t);
              return Te(Wb.Provider, {
                key: n,
                value: Uh(Uh({}, ve), {}, {
                  order: t,
                  item: e,
                  itemKey: n,
                  registerSize: pe,
                  display: t <= Z
                })
              }, h(e, t))
            } : function(e, t) {
              var n = ce(e, t);
              return Te(jb, xh({}, ve, {
                order: t,
                key: n,
                item: e,
                renderItem: ue,
                itemKey: n,
                registerSize: pe,
                display: t <= Z
              }))
            },
            be = {
              order: fe ? Z : Number.MAX_SAFE_INTEGER,
              className: "".concat(te, "-rest"),
              registerSize: function(e, t) {
                H(t), F(z)
              },
              display: fe
            };
          if (y) y && (me = Te(Wb.Provider, {
            value: Uh(Uh({}, ve), be)
          }, y(le)));
          else {
            var ye = b || Gb;
            me = Te(jb, xh({}, ve, be), "function" == typeof ye ? ye(le) : ye)
          }
          var we = Te(k, xh({
            className: jl(!oe && s, v),
            style: m,
            ref: t
          }, E), se.map(_e), ae ? me : null, w && Te(jb, xh({}, ve, {
            responsive: re,
            responsiveDisabled: !ie,
            order: Z,
            className: "".concat(te, "-suffix"),
            registerSize: function(e, t) {
              V(t)
            },
            display: !0,
            style: ge
          }), w));
          return re && (we = Te(Sb, {
            onResize: function(e, t) {
              M(t.clientWidth)
            },
            disabled: !ie
          }, we)), we
        }
        var qb = Ft(Yb);
        qb.displayName = "Overflow", qb.Item = Hb, qb.RESPONSIVE = Vb, qb.INVALIDATE = Xb;
        var Kb = qb;

        function $b(e, t) {
          var n = Uh({}, e);
          return Array.isArray(t) && t.forEach((function(e) {
            delete n[e]
          })), n
        }
        var Zb = ["children", "locked"],
          Jb = Qe(null);

        function Qb(e) {
          var t = e.children,
            n = e.locked,
            r = Nh(e, Zb),
            i = wt(Jb),
            o = Np((function() {
              return e = r, t = Uh({}, i), Object.keys(e).forEach((function(n) {
                var r = e[n];
                void 0 !== r && (t[n] = r)
              })), t;
              var e, t
            }), [i, r], (function(e, t) {
              return !(n || e[0] === t[0] && Mb(e[1], t[1]))
            }));
          return Te(Jb.Provider, {
            value: o
          }, t)
        }

        function ey(e, t, n, r) {
          var i = wt(Jb),
            o = i.activeKey,
            a = i.onActive,
            s = i.onInactive,
            l = {
              active: o === e
            };
          return t || (l.onMouseEnter = function(t) {
            null == n || n({
              key: e,
              domEvent: t
            }), a(e)
          }, l.onMouseLeave = function(t) {
            null == r || r({
              key: e,
              domEvent: t
            }), s(e)
          }), l
        }
        var ty = ["item"];

        function ny(e) {
          var t = e.item,
            n = Nh(e, ty);
          return Object.defineProperty(n, "item", {
            get: function() {
              return tp(!1, "`info.item` is deprecated since we will move to function component that not provides React Node instance in future."), t
            }
          }), n
        }

        function ry(e) {
          var t = e.icon,
            n = e.props,
            r = e.children;
          return ("function" == typeof t ? Te(t, Uh({}, n)) : t) || r || null
        }

        function iy(e) {
          var t = wt(Jb),
            n = t.mode,
            r = t.rtl,
            i = t.inlineIndent;
          if ("inline" !== n) return null;
          return r ? {
            paddingRight: e * i
          } : {
            paddingLeft: e * i
          }
        }
        var oy = [],
          ay = Qe(null);

        function sy() {
          return wt(ay)
        }
        var ly = Qe(oy);

        function cy(e) {
          var t = wt(ly);
          return bt((function() {
            return void 0 !== e ? [].concat(zh(t), [e]) : t
          }), [t, e])
        }
        var uy = Qe(null),
          hy = Qe(null);

        function py(e, t) {
          return void 0 === e ? null : "".concat(e, "-").concat(t)
        }

        function dy(e) {
          return py(wt(hy), e)
        }
        var fy = Qe({}),
          gy = ["title", "attribute", "elementRef"],
          my = ["style", "className", "eventKey", "warnKey", "disabled", "itemIcon", "children", "role", "onMouseEnter", "onMouseLeave", "onClick", "onKeyDown", "onFocus"],
          vy = ["active"],
          _y = function(e) {
            Ah(n, e);
            var t = Dh(n);

            function n() {
              return kh(this, n), t.apply(this, arguments)
            }
            return Th(n, [{
              key: "render",
              value: function() {
                var e = this.props,
                  t = e.title,
                  n = e.attribute,
                  r = e.elementRef,
                  i = $b(Nh(e, gy), ["eventKey"]);
                return tp(!n, "`attribute` of Menu.Item is deprecated. Please pass attribute directly."), Te(Kb.Item, xh({}, n, {
                  title: "string" == typeof t ? t : void 0
                }, i, {
                  ref: r
                }))
              }
            }]), n
          }(Me),
          by = function(e) {
            var t, n = e.style,
              r = e.className,
              i = e.eventKey,
              o = e.disabled,
              a = e.itemIcon,
              s = e.children,
              l = e.role,
              c = e.onMouseEnter,
              u = e.onMouseLeave,
              h = e.onClick,
              p = e.onKeyDown,
              d = e.onFocus,
              f = Nh(e, my),
              g = dy(i),
              m = wt(Jb),
              v = m.prefixCls,
              _ = m.onItemClick,
              b = m.disabled,
              y = m.overflowDisabled,
              w = m.itemIcon,
              x = m.selectedKeys,
              k = m.onActive,
              C = wt(fy)._internalRenderMenuItem,
              S = "".concat(v, "-item"),
              E = vt(),
              T = vt(),
              O = b || o,
              A = cy(i),
              P = function(e) {
                return {
                  key: i,
                  keyPath: zh(A).reverse(),
                  item: E.current,
                  domEvent: e
                }
              },
              M = a || w,
              D = ey(i, O, c, u),
              I = D.active,
              N = Nh(D, vy),
              R = x.includes(i),
              j = iy(A.length),
              L = {};
            "option" === e.role && (L["aria-selected"] = R);
            var F = Te(_y, xh({
              ref: E,
              elementRef: T,
              role: null === l ? "none" : l || "menuitem",
              tabIndex: o ? null : -1,
              "data-menu-id": y && g ? null : g
            }, f, N, L, {
              component: "li",
              "aria-disabled": o,
              style: Uh(Uh({}, j), n),
              className: jl(S, (t = {}, Ih(t, "".concat(S, "-active"), I), Ih(t, "".concat(S, "-selected"), R), Ih(t, "".concat(S, "-disabled"), O), t), r),
              onClick: function(e) {
                if (!O) {
                  var t = P(e);
                  null == h || h(ny(t)), _(t)
                }
              },
              onKeyDown: function(e) {
                if (null == p || p(e), e.which === x_.ENTER) {
                  var t = P(e);
                  null == h || h(ny(t)), _(t)
                }
              },
              onFocus: function(e) {
                k(i), null == d || d(e)
              }
            }), s, Te(ry, {
              props: Uh(Uh({}, e), {}, {
                isSelected: R
              }),
              icon: M
            }));
            return C && (F = C(F, e, {
              selected: R
            })), F
          };

        function yy(e) {
          var t = e.eventKey,
            n = sy(),
            r = cy(t);
          return gt((function() {
            if (n) return n.registerPath(t, r),
              function() {
                n.unregisterPath(t, r)
              }
          }), [r]), n ? null : Te(by, e)
        }
        var wy = ["label", "children", "key", "type"];

        function xy(e, t) {
          return pb(e).map((function(e, n) {
            if (bn(e)) {
              var r, i, o = e.key,
                a = null !== (r = null === (i = e.props) || void 0 === i ? void 0 : i.eventKey) && void 0 !== r ? r : o;
              return null == a && (a = "tmp_key-".concat([].concat(zh(t), [n]).join("-"))), yn(e, {
                key: a,
                eventKey: a
              })
            }
            return e
          }))
        }

        function ky(e) {
          return (e || []).map((function(e, t) {
            if (e && "object" === Ch(e)) {
              var n = e.label,
                r = e.children,
                i = e.key,
                o = e.type,
                a = Nh(e, wy),
                s = null != i ? i : "tmp-".concat(t);
              return r || "group" === o ? Te("group" === o ? Vx : _x, xh({
                key: s
              }, a, {
                title: n
              }), ky(r)) : "divider" === o ? Te(Xx, xh({
                key: s
              }, a)) : Te(yy, xh({
                key: s
              }, a), n)
            }
            return null
          })).filter((function(e) {
            return e
          }))
        }

        function Cy(e, t, n) {
          var r = e;
          return t && (r = ky(t)), xy(r, n)
        }

        function Sy(e) {
          var t = vt(e);
          t.current = e;
          var n = yt((function() {
            for (var e, n = arguments.length, r = new Array(n), i = 0; i < n; i++) r[i] = arguments[i];
            return null === (e = t.current) || void 0 === e ? void 0 : e.call.apply(e, [t].concat(r))
          }), []);
          return e ? n : void 0
        }
        var Ey = ["className", "children"],
          Ty = Ft((function(e, t) {
            var n = e.className,
              r = e.children,
              i = Nh(e, Ey),
              o = wt(Jb),
              a = o.prefixCls,
              s = o.mode,
              l = o.rtl;
            return Te("ul", xh({
              className: jl(a, l && "".concat(a, "-rtl"), "".concat(a, "-sub"), "".concat(a, "-").concat("inline" === s ? "inline" : "vertical"), n)
            }, i, {
              "data-menu-list": !0,
              ref: t
            }), r)
          }));
        Ty.displayName = "SubMenuList";
        var Oy = Ty;

        function Ay(e, t, n, r) {
          var i = Nn.unstable_batchedUpdates ? function(e) {
            Nn.unstable_batchedUpdates(n, e)
          } : n;
          return e.addEventListener && e.addEventListener(t, i, r), {
            remove: function() {
              e.removeEventListener && e.removeEventListener(t, i, r)
            }
          }
        }
        var Py, My = Ft((function(e, t) {
            var n = e.didUpdate,
              r = e.getContainer,
              i = e.children,
              o = vt(),
              a = vt();
            _t(t, (function() {
              return {}
            }));
            var s = vt(!1);
            return !s.current && Fp() && (a.current = r(), o.current = a.current.parentNode, s.current = !0), gt((function() {
              null == n || n(e)
            })), gt((function() {
              return null === a.current.parentNode && null !== o.current && o.current.appendChild(a.current),
                function() {
                  var e, t;
                  null === (e = a.current) || void 0 === e || null === (t = e.parentNode) || void 0 === t || t.removeChild(a.current)
                }
            }), []), a.current ? Nn.createPortal(i, a.current) : null
          })),
          Dy = My;

        function Iy(e, t, n) {
          return n ? e[0] === t[0] : e[0] === t[0] && e[1] === t[1]
        }

        function Ny(e) {
          var t = e.prefixCls,
            n = e.motion,
            r = e.animation,
            i = e.transitionName;
          return n || (r ? {
            motionName: "".concat(t, "-").concat(r)
          } : i ? {
            motionName: i
          } : null)
        }

        function Ry(e) {
          var t = e.prefixCls,
            n = e.visible,
            r = e.zIndex,
            i = e.mask,
            o = e.maskMotion,
            a = e.maskAnimation,
            s = e.maskTransitionName;
          if (!i) return null;
          var l = {};
          return (o || s || a) && (l = Uh({
            motionAppear: !0
          }, Ny({
            motion: o,
            prefixCls: t,
            transitionName: s,
            animation: a
          }))), Te(Ed, xh({}, l, {
            visible: n,
            removeOnLeave: !0
          }), (function(e) {
            var n = e.className;
            return Te("div", {
              style: {
                zIndex: r
              },
              className: jl("".concat(t, "-mask"), n)
            })
          }))
        }

        function jy(e, t) {
          var n = Object.keys(e);
          if (Object.getOwnPropertySymbols) {
            var r = Object.getOwnPropertySymbols(e);
            t && (r = r.filter((function(t) {
              return Object.getOwnPropertyDescriptor(e, t).enumerable
            }))), n.push.apply(n, r)
          }
          return n
        }

        function Ly(e) {
          for (var t = 1; t < arguments.length; t++) {
            var n = null != arguments[t] ? arguments[t] : {};
            t % 2 ? jy(Object(n), !0).forEach((function(t) {
              By(e, t, n[t])
            })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : jy(Object(n)).forEach((function(t) {
              Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t))
            }))
          }
          return e
        }

        function Fy(e) {
          return Fy = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) {
            return typeof e
          } : function(e) {
            return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e
          }, Fy(e)
        }

        function By(e, t, n) {
          return t in e ? Object.defineProperty(e, t, {
            value: n,
            enumerable: !0,
            configurable: !0,
            writable: !0
          }) : e[t] = n, e
        }
        var zy = {
          Webkit: "-webkit-",
          Moz: "-moz-",
          ms: "-ms-",
          O: "-o-"
        };

        function Hy() {
          if (void 0 !== Py) return Py;
          Py = "";
          var e = document.createElement("p").style;
          for (var t in zy) t + "Transform" in e && (Py = t);
          return Py
        }

        function Uy() {
          return Hy() ? "".concat(Hy(), "TransitionProperty") : "transitionProperty"
        }

        function Wy() {
          return Hy() ? "".concat(Hy(), "Transform") : "transform"
        }

        function Vy(e, t) {
          var n = Uy();
          n && (e.style[n] = t, "transitionProperty" !== n && (e.style.transitionProperty = t))
        }

        function Xy(e, t) {
          var n = Wy();
          n && (e.style[n] = t, "transform" !== n && (e.style.transform = t))
        }
        var Gy, Yy = /matrix\((.*)\)/,
          qy = /matrix3d\((.*)\)/;

        function Ky(e) {
          var t = e.style.display;
          e.style.display = "none", e.style.display = t
        }

        function $y(e, t, n) {
          var r = n;
          if ("object" !== Fy(t)) return void 0 !== r ? ("number" == typeof r && (r = "".concat(r, "px")), void(e.style[t] = r)) : Gy(e, t);
          for (var i in t) t.hasOwnProperty(i) && $y(e, i, t[i])
        }

        function Zy(e, t) {
          var n = e["page".concat(t ? "Y" : "X", "Offset")],
            r = "scroll".concat(t ? "Top" : "Left");
          if ("number" != typeof n) {
            var i = e.document;
            "number" != typeof(n = i.documentElement[r]) && (n = i.body[r])
          }
          return n
        }

        function Jy(e) {
          return Zy(e)
        }

        function Qy(e) {
          return Zy(e, !0)
        }

        function ew(e) {
          var t = function(e) {
              var t, n, r, i = e.ownerDocument,
                o = i.body,
                a = i && i.documentElement;
              return t = e.getBoundingClientRect(), n = Math.floor(t.left), r = Math.floor(t.top), {
                left: n -= a.clientLeft || o.clientLeft || 0,
                top: r -= a.clientTop || o.clientTop || 0
              }
            }(e),
            n = e.ownerDocument,
            r = n.defaultView || n.parentWindow;
          return t.left += Jy(r), t.top += Qy(r), t
        }

        function tw(e) {
          return null != e && e == e.window
        }

        function nw(e) {
          return tw(e) ? e.document : 9 === e.nodeType ? e : e.ownerDocument
        }
        var rw = new RegExp("^(".concat(/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, ")(?!px)[a-z%]+$"), "i"),
          iw = /^(top|right|bottom|left)$/,
          ow = "currentStyle",
          aw = "runtimeStyle",
          sw = "left";

        function lw(e, t) {
          return "left" === e ? t.useCssRight ? "right" : e : t.useCssBottom ? "bottom" : e
        }

        function cw(e) {
          return "left" === e ? "right" : "right" === e ? "left" : "top" === e ? "bottom" : "bottom" === e ? "top" : void 0
        }

        function uw(e, t, n) {
          "static" === $y(e, "position") && (e.style.position = "relative");
          var r = -999,
            i = -999,
            o = lw("left", n),
            a = lw("top", n),
            s = cw(o),
            l = cw(a);
          "left" !== o && (r = 999), "top" !== a && (i = 999);
          var c, u = "",
            h = ew(e);
          ("left" in t || "top" in t) && (u = (c = e).style.transitionProperty || c.style[Uy()] || "", Vy(e, "none")), "left" in t && (e.style[s] = "", e.style[o] = "".concat(r, "px")), "top" in t && (e.style[l] = "", e.style[a] = "".concat(i,
            "px")), Ky(e);
          var p = ew(e),
            d = {};
          for (var f in t)
            if (t.hasOwnProperty(f)) {
              var g = lw(f, n),
                m = "left" === f ? r : i,
                v = h[f] - p[f];
              d[g] = g === f ? m + v : m - v
            } $y(e, d), Ky(e), ("left" in t || "top" in t) && Vy(e, u);
          var _ = {};
          for (var b in t)
            if (t.hasOwnProperty(b)) {
              var y = lw(b, n),
                w = t[b] - h[b];
              _[y] = b === y ? d[y] + w : d[y] - w
            } $y(e, _)
        }

        function hw(e, t) {
          var n = ew(e),
            r = function(e) {
              var t = window.getComputedStyle(e, null),
                n = t.getPropertyValue("transform") || t.getPropertyValue(Wy());
              if (n && "none" !== n) {
                var r = n.replace(/[^0-9\-.,]/g, "").split(",");
                return {
                  x: parseFloat(r[12] || r[4], 0),
                  y: parseFloat(r[13] || r[5], 0)
                }
              }
              return {
                x: 0,
                y: 0
              }
            }(e),
            i = {
              x: r.x,
              y: r.y
            };
          "left" in t && (i.x = r.x + t.left - n.left), "top" in t && (i.y = r.y + t.top - n.top),
            function(e, t) {
              var n = window.getComputedStyle(e, null),
                r = n.getPropertyValue("transform") || n.getPropertyValue(Wy());
              if (r && "none" !== r) {
                var i, o = r.match(Yy);
                o ? ((i = (o = o[1]).split(",").map((function(e) {
                  return parseFloat(e, 10)
                })))[4] = t.x, i[5] = t.y, Xy(e, "matrix(".concat(i.join(","), ")"))) : ((i = r.match(qy)[1].split(",").map((function(e) {
                  return parseFloat(e, 10)
                })))[12] = t.x, i[13] = t.y, Xy(e, "matrix3d(".concat(i.join(","), ")")))
              } else Xy(e, "translateX(".concat(t.x, "px) translateY(").concat(t.y, "px) translateZ(0)"))
            }(e, i)
        }

        function pw(e, t) {
          for (var n = 0; n < e.length; n++) t(e[n])
        }

        function dw(e) {
          return "border-box" === Gy(e, "boxSizing")
        }
        "undefined" != typeof window && (Gy = window.getComputedStyle ? function(e, t, n) {
          var r = n,
            i = "",
            o = nw(e);
          return (r = r || o.defaultView.getComputedStyle(e, null)) && (i = r.getPropertyValue(t) || r[t]), i
        } : function(e, t) {
          var n = e[ow] && e[ow][t];
          if (rw.test(n) && !iw.test(t)) {
            var r = e.style,
              i = r[sw],
              o = e[aw][sw];
            e[aw][sw] = e[ow][sw], r[sw] = "fontSize" === t ? "1em" : n || 0, n = r.pixelLeft + "px", r[sw] = i, e[aw][sw] = o
          }
          return "" === n ? "auto" : n
        });
        var fw = ["margin", "border", "padding"],
          gw = -1,
          mw = 2,
          vw = 1;

        function _w(e, t, n) {
          var r, i, o, a = 0;
          for (i = 0; i < t.length; i++)
            if (r = t[i])
              for (o = 0; o < n.length; o++) {
                var s = void 0;
                s = "border" === r ? "".concat(r).concat(n[o], "Width") : r + n[o], a += parseFloat(Gy(e, s)) || 0
              }
          return a
        }
        var bw = {
          getParent: function(e) {
            var t = e;
            do {
              t = 11 === t.nodeType && t.host ? t.host : t.parentNode
            } while (t && 1 !== t.nodeType && 9 !== t.nodeType);
            return t
          }
        };

        function yw(e, t, n) {
          var r = n;
          if (tw(e)) return "width" === t ? bw.viewportWidth(e) : bw.viewportHeight(e);
          if (9 === e.nodeType) return "width" === t ? bw.docWidth(e) : bw.docHeight(e);
          var i = "width" === t ? ["Left", "Right"] : ["Top", "Bottom"],
            o = "width" === t ? Math.floor(e.getBoundingClientRect().width) : Math.floor(e.getBoundingClientRect().height),
            a = dw(e),
            s = 0;
          (null == o || o <= 0) && (o = void 0, (null == (s = Gy(e, t)) || Number(s) < 0) && (s = e.style[t] || 0), s = Math.floor(parseFloat(s)) || 0), void 0 === r && (r = a ? vw : gw);
          var l = void 0 !== o || a,
            c = o || s;
          return r === gw ? l ? c - _w(e, ["border", "padding"], i) : s : l ? r === vw ? c : c + (r === mw ? -_w(e, ["border"], i) : _w(e, ["margin"], i)) : s + _w(e, fw.slice(r), i)
        }
        pw(["Width", "Height"], (function(e) {
          bw["doc".concat(e)] = function(t) {
            var n = t.document;
            return Math.max(n.documentElement["scroll".concat(e)], n.body["scroll".concat(e)], bw["viewport".concat(e)](n))
          }, bw["viewport".concat(e)] = function(t) {
            var n = "client".concat(e),
              r = t.document,
              i = r.body,
              o = r.documentElement[n];
            return "CSS1Compat" === r.compatMode && o || i && i[n] || o
          }
        }));
        var ww = {
          position: "absolute",
          visibility: "hidden",
          display: "block"
        };

        function xw() {
          for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];
          var r, i = t[0];
          return 0 !== i.offsetWidth ? r = yw.apply(void 0, t) : function(e, t, n) {
            var r, i = {},
              o = e.style;
            for (r in t) t.hasOwnProperty(r) && (i[r] = o[r], o[r] = t[r]);
            for (r in n.call(e), t) t.hasOwnProperty(r) && (o[r] = i[r])
          }(i, ww, (function() {
            r = yw.apply(void 0, t)
          })), r
        }

        function kw(e, t) {
          for (var n in t) t.hasOwnProperty(n) && (e[n] = t[n]);
          return e
        }
        pw(["width", "height"], (function(e) {
          var t = e.charAt(0).toUpperCase() + e.slice(1);
          bw["outer".concat(t)] = function(t, n) {
            return t && xw(t, e, n ? 0 : vw)
          };
          var n = "width" === e ? ["Left", "Right"] : ["Top", "Bottom"];
          bw[e] = function(t, r) {
            var i = r;
            return void 0 !== i ? t ? (dw(t) && (i += _w(t, ["padding", "border"], n)), $y(t, e, i)) : void 0 : t && xw(t, e, gw)
          }
        }));
        var Cw = {
          getWindow: function(e) {
            if (e && e.document && e.setTimeout) return e;
            var t = e.ownerDocument || e;
            return t.defaultView || t.parentWindow
          },
          getDocument: nw,
          offset: function(e, t, n) {
            if (void 0 === t) return ew(e);
            ! function(e, t, n) {
              if (n.ignoreShake) {
                var r = ew(e),
                  i = r.left.toFixed(0),
                  o = r.top.toFixed(0),
                  a = t.left.toFixed(0),
                  s = t.top.toFixed(0);
                if (i === a && o === s) return
              }
              n.useCssRight || n.useCssBottom ? uw(e, t, n) : n.useCssTransform && Wy() in document.body.style ? hw(e, t) : uw(e, t, n)
            }(e, t, n || {})
          },
          isWindow: tw,
          each: pw,
          css: $y,
          clone: function(e) {
            var t, n = {};
            for (t in e) e.hasOwnProperty(t) && (n[t] = e[t]);
            if (e.overflow)
              for (t in e) e.hasOwnProperty(t) && (n.overflow[t] = e.overflow[t]);
            return n
          },
          mix: kw,
          getWindowScrollLeft: function(e) {
            return Jy(e)
          },
          getWindowScrollTop: function(e) {
            return Qy(e)
          },
          merge: function() {
            for (var e = {}, t = 0; t < arguments.length; t++) Cw.mix(e, t < 0 || arguments.length <= t ? void 0 : arguments[t]);
            return e
          },
          viewportWidth: 0,
          viewportHeight: 0
        };
        kw(Cw, bw);
        var Sw = Cw.getParent;

        function Ew(e) {
          if (Cw.isWindow(e) || 9 === e.nodeType) return null;
          var t, n = Cw.getDocument(e).body,
            r = Cw.css(e, "position");
          if (!("fixed" === r || "absolute" === r)) return "html" === e.nodeName.toLowerCase() ? null : Sw(e);
          for (t = Sw(e); t && t !== n && 9 !== t.nodeType; t = Sw(t))
            if ("static" !== (r = Cw.css(t, "position"))) return t;
          return null
        }
        var Tw = Cw.getParent;

        function Ow(e, t) {
          for (var n = {
              left: 0,
              right: 1 / 0,
              top: 0,
              bottom: 1 / 0
            }, r = Ew(e), i = Cw.getDocument(e), o = i.defaultView || i.parentWindow, a = i.body, s = i.documentElement; r;) {
            if (-1 !== navigator.userAgent.indexOf("MSIE") && 0 === r.clientWidth || r === a || r === s || "visible" === Cw.css(r, "overflow")) {
              if (r === a || r === s) break
            } else {
              var l = Cw.offset(r);
              l.left += r.clientLeft, l.top += r.clientTop, n.top = Math.max(n.top, l.top), n.right = Math.min(n.right, l.left + r.clientWidth), n.bottom = Math.min(n.bottom, l.top + r.clientHeight), n.left = Math.max(n.left, l.left)
            }
            r = Ew(r)
          }
          var c = null;
          Cw.isWindow(e) || 9 === e.nodeType || (c = e.style.position, "absolute" === Cw.css(e, "position") && (e.style.position = "fixed"));
          var u = Cw.getWindowScrollLeft(o),
            h = Cw.getWindowScrollTop(o),
            p = Cw.viewportWidth(o),
            d = Cw.viewportHeight(o),
            f = s.scrollWidth,
            g = s.scrollHeight,
            m = window.getComputedStyle(a);
          if ("hidden" === m.overflowX && (f = o.innerWidth), "hidden" === m.overflowY && (g = o.innerHeight), e.style && (e.style.position = c), t || function(e) {
              if (Cw.isWindow(e) || 9 === e.nodeType) return !1;
              var t = Cw.getDocument(e),
                n = t.body,
                r = null;
              for (r = Tw(e); r && r !== n && r !== t; r = Tw(r))
                if ("fixed" === Cw.css(r, "position")) return !0;
              return !1
            }(e)) n.left = Math.max(n.left, u), n.top = Math.max(n.top, h), n.right = Math.min(n.right, u + p), n.bottom = Math.min(n.bottom, h + d);
          else {
            var v = Math.max(f, u + p);
            n.right = Math.min(n.right, v);
            var _ = Math.max(g, h + d);
            n.bottom = Math.min(n.bottom, _)
          }
          return n.top >= 0 && n.left >= 0 && n.bottom > n.top && n.right > n.left ? n : null
        }

        function Aw(e) {
          var t, n, r;
          if (Cw.isWindow(e) || 9 === e.nodeType) {
            var i = Cw.getWindow(e);
            t = {
              left: Cw.getWindowScrollLeft(i),
              top: Cw.getWindowScrollTop(i)
            }, n = Cw.viewportWidth(i), r = Cw.viewportHeight(i)
          } else t = Cw.offset(e), n = Cw.outerWidth(e), r = Cw.outerHeight(e);
          return t.width = n, t.height = r, t
        }

        function Pw(e, t) {
          var n = t.charAt(0),
            r = t.charAt(1),
            i = e.width,
            o = e.height,
            a = e.left,
            s = e.top;
          return "c" === n ? s += o / 2 : "b" === n && (s += o), "c" === r ? a += i / 2 : "r" === r && (a += i), {
            left: a,
            top: s
          }
        }

        function Mw(e, t, n, r, i) {
          var o = Pw(t, n[1]),
            a = Pw(e, n[0]),
            s = [a.left - o.left, a.top - o.top];
          return {
            left: Math.round(e.left - s[0] + r[0] - i[0]),
            top: Math.round(e.top - s[1] + r[1] - i[1])
          }
        }

        function Dw(e, t, n) {
          return e.left < n.left || e.left + t.width > n.right
        }

        function Iw(e, t, n) {
          return e.top < n.top || e.top + t.height > n.bottom
        }

        function Nw(e, t, n) {
          var r = [];
          return Cw.each(e, (function(e) {
            r.push(e.replace(t, (function(e) {
              return n[e]
            })))
          })), r
        }

        function Rw(e, t) {
          return e[t] = -e[t], e
        }

        function jw(e, t) {
          return (/%$/.test(e) ? parseInt(e.substring(0, e.length - 1), 10) / 100 * t : parseInt(e, 10)) || 0
        }

        function Lw(e, t) {
          e[0] = jw(e[0], t.width), e[1] = jw(e[1], t.height)
        }

        function Fw(e, t, n, r) {
          var i = n.points,
            o = n.offset || [0, 0],
            a = n.targetOffset || [0, 0],
            s = n.overflow,
            l = n.source || e;
          o = [].concat(o), a = [].concat(a);
          var c = {},
            u = 0,
            h = Ow(l, !(!(s = s || {}) || !s.alwaysByViewport)),
            p = Aw(l);
          Lw(o, p), Lw(a, t);
          var d = Mw(p, t, i, o, a),
            f = Cw.merge(p, d);
          if (h && (s.adjustX || s.adjustY) && r) {
            if (s.adjustX && Dw(d, p, h)) {
              var g = Nw(i, /[lr]/gi, {
                  l: "r",
                  r: "l"
                }),
                m = Rw(o, 0),
                v = Rw(a, 0);
              (function(e, t, n) {
                return e.left > n.right || e.left + t.width < n.left
              })(Mw(p, t, g, m, v), p, h) || (u = 1, i = g, o = m, a = v)
            }
            if (s.adjustY && Iw(d, p, h)) {
              var _ = Nw(i, /[tb]/gi, {
                  t: "b",
                  b: "t"
                }),
                b = Rw(o, 1),
                y = Rw(a, 1);
              (function(e, t, n) {
                return e.top > n.bottom || e.top + t.height < n.top
              })(Mw(p, t, _, b, y), p, h) || (u = 1, i = _, o = b, a = y)
            }
            u && (d = Mw(p, t, i, o, a), Cw.mix(f, d));
            var w = Dw(d, p, h),
              x = Iw(d, p, h);
            if (w || x) {
              var k = i;
              w && (k = Nw(i, /[lr]/gi, {
                l: "r",
                r: "l"
              })), x && (k = Nw(i, /[tb]/gi, {
                t: "b",
                b: "t"
              })), i = k, o = n.offset || [0, 0], a = n.targetOffset || [0, 0]
            }
            c.adjustX = s.adjustX && w, c.adjustY = s.adjustY && x, (c.adjustX || c.adjustY) && (f = function(e, t, n, r) {
              var i = Cw.clone(e),
                o = {
                  width: t.width,
                  height: t.height
                };
              return r.adjustX && i.left < n.left && (i.left = n.left), r.resizeWidth && i.left >= n.left && i.left + o.width > n.right && (o.width -= i.left + o.width - n.right), r.adjustX && i.left + o.width > n.right && (i.left = Math.max(
                  n.right - o.width, n.left)), r.adjustY && i.top < n.top && (i.top = n.top), r.resizeHeight && i.top >= n.top && i.top + o.height > n.bottom && (o.height -= i.top + o.height - n.bottom), r.adjustY && i.top + o.height > n
                .bottom && (i.top = Math.max(n.bottom - o.height, n.top)), Cw.mix(i, o)
            }(d, p, h, c))
          }
          return f.width !== p.width && Cw.css(l, "width", Cw.width(l) + f.width - p.width), f.height !== p.height && Cw.css(l, "height", Cw.height(l) + f.height - p.height), Cw.offset(l, {
            left: f.left,
            top: f.top
          }, {
            useCssRight: n.useCssRight,
            useCssBottom: n.useCssBottom,
            useCssTransform: n.useCssTransform,
            ignoreShake: n.ignoreShake
          }), {
            points: i,
            offset: o,
            targetOffset: a,
            overflow: c
          }
        }

        function Bw(e, t, n) {
          var r = n.target || t,
            i = Aw(r),
            o = ! function(e, t) {
              var n = Ow(e, t),
                r = Aw(e);
              return !n || r.left + r.width <= n.left || r.top + r.height <= n.top || r.left >= n.right || r.top >= n.bottom
            }(r, n.overflow && n.overflow.alwaysByViewport);
          return Fw(e, i, n, o)
        }

        function zw(e, t) {
          var n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2],
            r = new Set;
          return function e(t, i) {
            var o = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 1,
              a = r.has(t);
            if (tp(!a, "Warning: There may be circular references"), a) return !1;
            if (t === i) return !0;
            if (n && o > 1) return !1;
            r.add(t);
            var s = o + 1;
            if (Array.isArray(t)) {
              if (!Array.isArray(i) || t.length !== i.length) return !1;
              for (var l = 0; l < t.length; l++)
                if (!e(t[l], i[l], s)) return !1;
              return !0
            }
            if (t && i && "object" === Ch(t) && "object" === Ch(i)) {
              var c = Object.keys(t);
              return c.length === Object.keys(i).length && c.every((function(n) {
                return e(t[n], i[n], s)
              }))
            }
            return !1
          }(e, t)
        }
        Bw.__getOffsetParent = Ew, Bw.__getVisibleRectForElement = Ow;
        var Hw = function(e) {
          if (!e) return !1;
          if (e instanceof HTMLElement && e.offsetParent) return !0;
          if (e instanceof SVGGraphicsElement && e.getBBox) {
            var t = e.getBBox(),
              n = t.width,
              r = t.height;
            if (n || r) return !0
          }
          if (e instanceof HTMLElement && e.getBoundingClientRect) {
            var i = e.getBoundingClientRect(),
              o = i.width,
              a = i.height;
            if (o || a) return !0
          }
          return !1
        };

        function Uw(e, t) {
          var n = null,
            r = null;
          var i = new Ml((function(e) {
            var i = Dp(e, 1)[0].target;
            if (document.documentElement.contains(i)) {
              var o = i.getBoundingClientRect(),
                a = o.width,
                s = o.height,
                l = Math.floor(a),
                c = Math.floor(s);
              n === l && r === c || Promise.resolve().then((function() {
                t({
                  width: l,
                  height: c
                })
              })), n = l, r = c
            }
          }));
          return e && i.observe(e),
            function() {
              i.disconnect()
            }
        }

        function Ww(e) {
          return "function" != typeof e ? null : e()
        }

        function Vw(e) {
          return "object" === Ch(e) && e ? e : null
        }
        var Xw = function(e, t) {
            var n = e.children,
              r = e.disabled,
              i = e.target,
              o = e.align,
              a = e.onAlign,
              s = e.monitorWindowResize,
              l = e.monitorBufferTime,
              c = void 0 === l ? 0 : l,
              u = Nn.useRef({}),
              h = Nn.useRef(),
              p = Nn.Children.only(n),
              d = Nn.useRef({});
            d.current.disabled = r, d.current.target = i, d.current.align = o, d.current.onAlign = a;
            var f = function(e, t) {
                var n = Nn.useRef(!1),
                  r = Nn.useRef(null);

                function i() {
                  window.clearTimeout(r.current)
                }
                return [function o(a) {
                  if (i(), n.current && !0 !== a) r.current = window.setTimeout((function() {
                    n.current = !1, o()
                  }), t);
                  else {
                    if (!1 === e(a)) return;
                    n.current = !0, r.current = window.setTimeout((function() {
                      n.current = !1
                    }), t)
                  }
                }, function() {
                  n.current = !1, i()
                }]
              }((function() {
                var e = d.current,
                  t = e.disabled,
                  n = e.target,
                  r = e.align,
                  i = e.onAlign,
                  o = h.current;
                if (!t && n && o) {
                  var a, s = Ww(n),
                    l = Vw(n);
                  u.current.element = s, u.current.point = l, u.current.align = r;
                  var c = document.activeElement;
                  return s && Hw(s) ? a = Bw(o, s, r) : l && (a = function(e, t, n) {
                      var r, i, o = Cw.getDocument(e),
                        a = o.defaultView || o.parentWindow,
                        s = Cw.getWindowScrollLeft(a),
                        l = Cw.getWindowScrollTop(a),
                        c = Cw.viewportWidth(a),
                        u = Cw.viewportHeight(a),
                        h = {
                          left: r = "pageX" in t ? t.pageX : s + t.clientX,
                          top: i = "pageY" in t ? t.pageY : l + t.clientY,
                          width: 0,
                          height: 0
                        },
                        p = r >= 0 && r <= s + c && i >= 0 && i <= l + u,
                        d = [n.points[0], "cc"];
                      return Fw(e, h, Ly(Ly({}, n), {}, {
                        points: d
                      }), p)
                    }(o, l, r)),
                    function(e, t) {
                      e !== document.activeElement && n_(t, e) && "function" == typeof e.focus && e.focus()
                    }(c, o), i && a && i(o, a), !0
                }
                return !1
              }), c),
              g = Dp(f, 2),
              m = g[0],
              v = g[1],
              _ = Dp(Nn.useState(), 2),
              b = _[0],
              y = _[1],
              w = Dp(Nn.useState(), 2),
              x = w[0],
              k = w[1];
            return Qv((function() {
              y(Ww(i)), k(Vw(i))
            })), Nn.useEffect((function() {
              var e, t;
              u.current.element === b && ((e = u.current.point) === (t = x) || e && t && ("pageX" in t && "pageY" in t ? e.pageX === t.pageX && e.pageY === t.pageY : "clientX" in t && "clientY" in t && e.clientX === t.clientX && e
                .clientY === t.clientY)) && zw(u.current.align, o) || m()
            })), Nn.useEffect((function() {
              return Uw(h.current, m)
            }), [h.current]), Nn.useEffect((function() {
              return Uw(b, m)
            }), [b]), Nn.useEffect((function() {
              r ? v() : m()
            }), [r]), Nn.useEffect((function() {
              if (s) return Ay(window, "resize", m).remove
            }), [s]), Nn.useEffect((function() {
              return function() {
                v()
              }
            }), []), Nn.useImperativeHandle(t, (function() {
              return {
                forceAlign: function() {
                  return m(!0)
                }
              }
            })), Nn.isValidElement(p) && (p = Nn.cloneElement(p, {
              ref: jp(p.ref, h)
            })), p
          },
          Gw = Nn.forwardRef(Xw);
        Gw.displayName = "Align";
        var Yw = Gw,
          qw = ["measure", "alignPre", "align", null, "motion"],
          Kw = Ft((function(e, t) {
            var n = e.visible,
              r = e.prefixCls,
              i = e.className,
              o = e.style,
              a = e.children,
              s = e.zIndex,
              l = e.stretch,
              c = e.destroyPopupOnHide,
              u = e.forceRender,
              h = e.align,
              p = e.point,
              d = e.getRootDomNode,
              f = e.getClassNameFromAlign,
              g = e.onAlign,
              m = e.onMouseEnter,
              v = e.onMouseLeave,
              _ = e.onMouseDown,
              b = e.onTouchStart,
              y = e.onClick,
              w = vt(),
              x = vt(),
              k = Dp(dt(), 2),
              C = k[0],
              S = k[1],
              E = function(e) {
                var t = Dp(dt({
                    width: 0,
                    height: 0
                  }), 2),
                  n = t[0],
                  r = t[1],
                  i = bt((function() {
                    var t = {};
                    if (e) {
                      var r = n.width,
                        i = n.height; - 1 !== e.indexOf("height") && i ? t.height = i : -1 !== e.indexOf("minHeight") && i && (t.minHeight = i), -1 !== e.indexOf("width") && r ? t.width = r : -1 !== e.indexOf("minWidth") && r && (t
                        .minWidth = r)
                    }
                    return t
                  }), [e, n]);
                return [i, function(e) {
                  var t = e.offsetWidth,
                    n = e.offsetHeight,
                    i = e.getBoundingClientRect(),
                    o = i.width,
                    a = i.height;
                  Math.abs(t - o) < 1 && Math.abs(n - a) < 1 && (t = o, n = a), r({
                    width: t,
                    height: n
                  })
                }]
              }(l),
              T = Dp(E, 2),
              O = T[0],
              A = T[1];
            var P = function(e, t) {
                var n = Dp(cd(null), 2),
                  r = n[0],
                  i = n[1],
                  o = vt();

                function a(e) {
                  i(e, !0)
                }

                function s() {
                  md.cancel(o.current)
                }
                return gt((function() {
                  a("measure")
                }), [e]), gt((function() {
                  "measure" === r && t(), r && (o.current = md(Lh(Rh().mark((function e() {
                    var t, n;
                    return Rh().wrap((function(e) {
                      for (;;) switch (e.prev = e.next) {
                        case 0:
                          t = qw.indexOf(r), (n = qw[t + 1]) && -1 !== t && a(n);
                        case 3:
                        case "end":
                          return e.stop()
                      }
                    }), e)
                  })))))
                }), [r]), gt((function() {
                  return function() {
                    s()
                  }
                }), []), [r, function(e) {
                  s(), o.current = md((function() {
                    a((function(e) {
                      switch (r) {
                        case "align":
                          return "motion";
                        case "motion":
                          return "stable"
                      }
                      return e
                    })), null == e || e()
                  }))
                }]
              }(n, (function() {
                l && A(d())
              })),
              M = Dp(P, 2),
              D = M[0],
              I = M[1],
              N = Dp(dt(0), 2),
              R = N[0],
              j = N[1],
              L = vt();

            function F() {
              var e;
              null === (e = w.current) || void 0 === e || e.forceAlign()
            }

            function B(e, t) {
              var n = f(t);
              C !== n && S(n), j((function(e) {
                return e + 1
              })), "align" === D && (null == g || g(e, t))
            }
            Qv((function() {
              "alignPre" === D && j(0)
            }), [D]), Qv((function() {
              "align" === D && (R < 3 ? F() : I((function() {
                var e;
                null === (e = L.current) || void 0 === e || e.call(L)
              })))
            }), [R]);
            var z = Uh({}, Ny(e));

            function H() {
              return new Promise((function(e) {
                L.current = e
              }))
            } ["onAppearEnd", "onEnterEnd", "onLeaveEnd"].forEach((function(e) {
              var t = z[e];
              z[e] = function(e, n) {
                return I(), null == t ? void 0 : t(e, n)
              }
            })), gt((function() {
              z.motionName || "motion" !== D || I()
            }), [z.motionName, D]), _t(t, (function() {
              return {
                forceAlign: F,
                getElement: function() {
                  return x.current
                }
              }
            }));
            var U = Uh(Uh({}, O), {}, {
                zIndex: s,
                opacity: "motion" !== D && "stable" !== D && n ? 0 : void 0,
                pointerEvents: n || "stable" === D ? void 0 : "none"
              }, o),
              W = !0;
            null == h || !h.points || "align" !== D && "stable" !== D || (W = !1);
            var V = a;
            return zt.count(a) > 1 && (V = Te("div", {
              className: "".concat(r, "-content")
            }, a)), Te(Ed, xh({
              visible: n,
              ref: x,
              leavedClassName: "".concat(r, "-hidden")
            }, z, {
              onAppearPrepare: H,
              onEnterPrepare: H,
              removeOnLeave: c,
              forceRender: u
            }), (function(e, t) {
              var n = e.className,
                o = e.style,
                a = jl(r, i, C, n);
              return Te(Yw, {
                target: p || d,
                key: "popup",
                ref: w,
                monitorWindowResize: !0,
                disabled: W,
                align: h,
                onAlign: B
              }, Te("div", {
                ref: t,
                className: a,
                onMouseEnter: m,
                onMouseLeave: v,
                onMouseDownCapture: _,
                onTouchStartCapture: b,
                onClick: y,
                style: Uh(Uh({}, o), U)
              }, V))
            }))
          }));
        Kw.displayName = "PopupInner";
        var $w = Kw,
          Zw = Ft((function(e, t) {
            var n = e.prefixCls,
              r = e.visible,
              i = e.zIndex,
              o = e.children,
              a = e.mobile,
              s = (a = void 0 === a ? {} : a).popupClassName,
              l = a.popupStyle,
              c = a.popupMotion,
              u = void 0 === c ? {} : c,
              h = a.popupRender,
              p = e.onClick,
              d = vt();
            _t(t, (function() {
              return {
                forceAlign: function() {},
                getElement: function() {
                  return d.current
                }
              }
            }));
            var f = Uh({
                zIndex: i
              }, l),
              g = o;
            return zt.count(o) > 1 && (g = Te("div", {
              className: "".concat(n, "-content")
            }, o)), h && (g = h(g)), Te(Ed, xh({
              visible: r,
              ref: d,
              removeOnLeave: !0
            }, u), (function(e, t) {
              var r = e.className,
                i = e.style;
              return Te("div", {
                ref: t,
                className: jl(n, s, r),
                onClick: p,
                style: Uh(Uh({}, i), f)
              }, g)
            }))
          }));
        Zw.displayName = "MobilePopupInner";
        var Jw = Zw,
          Qw = ["visible", "mobile"],
          ex = Ft((function(e, t) {
            var n = e.visible,
              r = e.mobile,
              i = Nh(e, Qw),
              o = Dp(dt(n), 2),
              a = o[0],
              s = o[1],
              l = Dp(dt(!1), 2),
              c = l[0],
              u = l[1],
              h = Uh(Uh({}, i), {}, {
                visible: a
              });
            gt((function() {
              s(n), n && r && u(db())
            }), [n, r]);
            var p = c ? Te(Jw, xh({}, h, {
              mobile: r,
              ref: t
            })) : Te($w, xh({}, h, {
              ref: t
            }));
            return Te("div", null, Te(Ry, h), p)
          }));
        ex.displayName = "Popup";
        var tx = ex,
          nx = Qe(null);

        function rx() {}

        function ix() {
          return ""
        }

        function ox(e) {
          return e ? e.ownerDocument : window.document
        }
        var ax = ["onClick", "onMouseDown", "onTouchStart", "onMouseEnter", "onMouseLeave", "onFocus", "onBlur", "onContextMenu"];
        var sx = function(e) {
            var t = function(t) {
              Ah(r, t);
              var n = Dh(r);

              function r(e) {
                var t, i;
                return kh(this, r), Ih(Mh(t = n.call(this, e)), "popupRef", Ae()), Ih(Mh(t), "triggerRef", Ae()), Ih(Mh(t), "portalContainer", void 0), Ih(Mh(t), "attachId", void 0), Ih(Mh(t), "clickOutsideHandler", void 0), Ih(Mh(t),
                  "touchOutsideHandler", void 0), Ih(Mh(t), "contextMenuOutsideHandler1", void 0), Ih(Mh(t), "contextMenuOutsideHandler2", void 0), Ih(Mh(t), "mouseDownTimeout", void 0), Ih(Mh(t), "focusTime", void 0), Ih(Mh(t),
                  "preClickTime", void 0), Ih(Mh(t), "preTouchTime", void 0), Ih(Mh(t), "delayTimer", void 0), Ih(Mh(t), "hasPopupMouseDown", void 0), Ih(Mh(t), "onMouseEnter", (function(e) {
                  var n = t.props.mouseEnterDelay;
                  t.fireEvents("onMouseEnter", e), t.delaySetPopupVisible(!0, n, n ? null : e)
                })), Ih(Mh(t), "onMouseMove", (function(e) {
                  t.fireEvents("onMouseMove", e), t.setPoint(e)
                })), Ih(Mh(t), "onMouseLeave", (function(e) {
                  t.fireEvents("onMouseLeave", e), t.delaySetPopupVisible(!1, t.props.mouseLeaveDelay)
                })), Ih(Mh(t), "onPopupMouseEnter", (function() {
                  t.clearDelayTimer()
                })), Ih(Mh(t), "onPopupMouseLeave", (function(e) {
                  var n;
                  e.relatedTarget && !e.relatedTarget.setTimeout && n_(null === (n = t.popupRef.current) || void 0 === n ? void 0 : n.getElement(), e.relatedTarget) || t.delaySetPopupVisible(!1, t.props.mouseLeaveDelay)
                })), Ih(Mh(t), "onFocus", (function(e) {
                  t.fireEvents("onFocus", e), t.clearDelayTimer(), t.isFocusToShow() && (t.focusTime = Date.now(), t.delaySetPopupVisible(!0, t.props.focusDelay))
                })), Ih(Mh(t), "onMouseDown", (function(e) {
                  t.fireEvents("onMouseDown", e), t.preClickTime = Date.now()
                })), Ih(Mh(t), "onTouchStart", (function(e) {
                  t.fireEvents("onTouchStart", e), t.preTouchTime = Date.now()
                })), Ih(Mh(t), "onBlur", (function(e) {
                  t.fireEvents("onBlur", e), t.clearDelayTimer(), t.isBlurToHide() && t.delaySetPopupVisible(!1, t.props.blurDelay)
                })), Ih(Mh(t), "onContextMenu", (function(e) {
                  e.preventDefault(), t.fireEvents("onContextMenu", e), t.setPopupVisible(!0, e)
                })), Ih(Mh(t), "onContextMenuClose", (function() {
                  t.isContextMenuToShow() && t.close()
                })), Ih(Mh(t), "onClick", (function(e) {
                  if (t.fireEvents("onClick", e), t.focusTime) {
                    var n;
                    if (t.preClickTime && t.preTouchTime ? n = Math.min(t.preClickTime, t.preTouchTime) : t.preClickTime ? n = t.preClickTime : t.preTouchTime && (n = t.preTouchTime), Math.abs(n - t.focusTime) < 20) return;
                    t.focusTime = 0
                  }
                  t.preClickTime = 0, t.preTouchTime = 0, t.isClickToShow() && (t.isClickToHide() || t.isBlurToHide()) && e && e.preventDefault && e.preventDefault();
                  var r = !t.state.popupVisible;
                  (t.isClickToHide() && !r || r && t.isClickToShow()) && t.setPopupVisible(!t.state.popupVisible, e)
                })), Ih(Mh(t), "onPopupMouseDown", (function() {
                  var e;
                  (t.hasPopupMouseDown = !0, clearTimeout(t.mouseDownTimeout), t.mouseDownTimeout = window.setTimeout((function() {
                    t.hasPopupMouseDown = !1
                  }), 0), t.context) && (e = t.context).onPopupMouseDown.apply(e, arguments)
                })), Ih(Mh(t), "onDocumentClick", (function(e) {
                  if (!t.props.mask || t.props.maskClosable) {
                    var n = e.target,
                      r = t.getRootDomNode(),
                      i = t.getPopupDomNode();
                    n_(r, n) && !t.isContextMenuOnly() || n_(i, n) || t.hasPopupMouseDown || t.close()
                  }
                })), Ih(Mh(t), "getRootDomNode", (function() {
                  var e = t.props.getTriggerDOMNode;
                  if (e) return e(t.triggerRef.current);
                  try {
                    var n = Ip(t.triggerRef.current);
                    if (n) return n
                  } catch (e) {}
                  return Nn.findDOMNode(Mh(t))
                })), Ih(Mh(t), "getPopupClassNameFromAlign", (function(e) {
                  var n = [],
                    r = t.props,
                    i = r.popupPlacement,
                    o = r.builtinPlacements,
                    a = r.prefixCls,
                    s = r.alignPoint,
                    l = r.getPopupClassNameFromAlign;
                  return i && o && n.push(function(e, t, n, r) {
                    for (var i = n.points, o = Object.keys(e), a = 0; a < o.length; a += 1) {
                      var s = o[a];
                      if (Iy(e[s].points, i, r)) return "".concat(t, "-placement-").concat(s)
                    }
                    return ""
                  }(o, a, e, s)), l && n.push(l(e)), n.join(" ")
                })), Ih(Mh(t), "getComponent", (function() {
                  var e = t.props,
                    n = e.prefixCls,
                    r = e.destroyPopupOnHide,
                    i = e.popupClassName,
                    o = e.onPopupAlign,
                    a = e.popupMotion,
                    s = e.popupAnimation,
                    l = e.popupTransitionName,
                    c = e.popupStyle,
                    u = e.mask,
                    h = e.maskAnimation,
                    p = e.maskTransitionName,
                    d = e.maskMotion,
                    f = e.zIndex,
                    g = e.popup,
                    m = e.stretch,
                    v = e.alignPoint,
                    _ = e.mobile,
                    b = e.forceRender,
                    y = e.onPopupClick,
                    w = t.state,
                    x = w.popupVisible,
                    k = w.point,
                    C = t.getPopupAlign(),
                    S = {};
                  return t.isMouseEnterToShow() && (S.onMouseEnter = t.onPopupMouseEnter), t.isMouseLeaveToHide() && (S.onMouseLeave = t.onPopupMouseLeave), S.onMouseDown = t.onPopupMouseDown, S.onTouchStart = t.onPopupMouseDown, Te(tx,
                    xh({
                      prefixCls: n,
                      destroyPopupOnHide: r,
                      visible: x,
                      point: v && k,
                      className: i,
                      align: C,
                      onAlign: o,
                      animation: s,
                      getClassNameFromAlign: t.getPopupClassNameFromAlign
                    }, S, {
                      stretch: m,
                      getRootDomNode: t.getRootDomNode,
                      style: c,
                      mask: u,
                      zIndex: f,
                      transitionName: l,
                      maskAnimation: h,
                      maskTransitionName: p,
                      maskMotion: d,
                      ref: t.popupRef,
                      motion: a,
                      mobile: _,
                      forceRender: b,
                      onClick: y
                    }), "function" == typeof g ? g() : g)
                })), Ih(Mh(t), "attachParent", (function(e) {
                  md.cancel(t.attachId);
                  var n, r = t.props,
                    i = r.getPopupContainer,
                    o = r.getDocument,
                    a = t.getRootDomNode();
                  i ? (a || 0 === i.length) && (n = i(a)) : n = o(t.getRootDomNode()).body, n ? n.appendChild(e) : t.attachId = md((function() {
                    t.attachParent(e)
                  }))
                })), Ih(Mh(t), "getContainer", (function() {
                  if (!t.portalContainer) {
                    var e = (0, t.props.getDocument)(t.getRootDomNode()).createElement("div");
                    e.style.position = "absolute", e.style.top = "0", e.style.left = "0", e.style.width = "100%", t.portalContainer = e
                  }
                  return t.attachParent(t.portalContainer), t.portalContainer
                })), Ih(Mh(t), "setPoint", (function(e) {
                  t.props.alignPoint && e && t.setState({
                    point: {
                      pageX: e.pageX,
                      pageY: e.pageY
                    }
                  })
                })), Ih(Mh(t), "handlePortalUpdate", (function() {
                  t.state.prevPopupVisible !== t.state.popupVisible && t.props.afterPopupVisibleChange(t.state.popupVisible)
                })), Ih(Mh(t), "triggerContextValue", {
                  onPopupMouseDown: t.onPopupMouseDown
                }), i = "popupVisible" in e ? !!e.popupVisible : !!e.defaultPopupVisible, t.state = {
                  prevPopupVisible: i,
                  popupVisible: i
                }, ax.forEach((function(e) {
                  t["fire".concat(e)] = function(n) {
                    t.fireEvents(e, n)
                  }
                })), t
              }
              return Th(r, [{
                key: "componentDidMount",
                value: function() {
                  this.componentDidUpdate()
                }
              }, {
                key: "componentDidUpdate",
                value: function() {
                  var e, t = this.props;
                  if (this.state.popupVisible) return this.clickOutsideHandler || !this.isClickToHide() && !this.isContextMenuToShow() || (e = t.getDocument(this.getRootDomNode()), this.clickOutsideHandler = Ay(e, "mousedown", this
                      .onDocumentClick)), this.touchOutsideHandler || (e = e || t.getDocument(this.getRootDomNode()), this.touchOutsideHandler = Ay(e, "touchstart", this.onDocumentClick)), !this.contextMenuOutsideHandler1 && this
                    .isContextMenuToShow() && (e = e || t.getDocument(this.getRootDomNode()), this.contextMenuOutsideHandler1 = Ay(e, "scroll", this.onContextMenuClose)), void(!this.contextMenuOutsideHandler2 && this
                      .isContextMenuToShow() && (this.contextMenuOutsideHandler2 = Ay(window, "blur", this.onContextMenuClose)));
                  this.clearOutsideHandler()
                }
              }, {
                key: "componentWillUnmount",
                value: function() {
                  this.clearDelayTimer(), this.clearOutsideHandler(), clearTimeout(this.mouseDownTimeout), md.cancel(this.attachId)
                }
              }, {
                key: "getPopupDomNode",
                value: function() {
                  var e;
                  return (null === (e = this.popupRef.current) || void 0 === e ? void 0 : e.getElement()) || null
                }
              }, {
                key: "getPopupAlign",
                value: function() {
                  var e = this.props,
                    t = e.popupPlacement,
                    n = e.popupAlign,
                    r = e.builtinPlacements;
                  return t && r ? function(e, t, n) {
                    return Uh(Uh({}, e[t] || {}), n)
                  }(r, t, n) : n
                }
              }, {
                key: "setPopupVisible",
                value: function(e, t) {
                  var n = this.props.alignPoint,
                    r = this.state.popupVisible;
                  this.clearDelayTimer(), r !== e && ("popupVisible" in this.props || this.setState({
                    popupVisible: e,
                    prevPopupVisible: r
                  }), this.props.onPopupVisibleChange(e)), n && t && e && this.setPoint(t)
                }
              }, {
                key: "delaySetPopupVisible",
                value: function(e, t, n) {
                  var r = this,
                    i = 1e3 * t;
                  if (this.clearDelayTimer(), i) {
                    var o = n ? {
                      pageX: n.pageX,
                      pageY: n.pageY
                    } : null;
                    this.delayTimer = window.setTimeout((function() {
                      r.setPopupVisible(e, o), r.clearDelayTimer()
                    }), i)
                  } else this.setPopupVisible(e, n)
                }
              }, {
                key: "clearDelayTimer",
                value: function() {
                  this.delayTimer && (clearTimeout(this.delayTimer), this.delayTimer = null)
                }
              }, {
                key: "clearOutsideHandler",
                value: function() {
                  this.clickOutsideHandler && (this.clickOutsideHandler.remove(), this.clickOutsideHandler = null), this.contextMenuOutsideHandler1 && (this.contextMenuOutsideHandler1.remove(), this.contextMenuOutsideHandler1 = null),
                    this.contextMenuOutsideHandler2 && (this.contextMenuOutsideHandler2.remove(), this.contextMenuOutsideHandler2 = null), this.touchOutsideHandler && (this.touchOutsideHandler.remove(), this.touchOutsideHandler = null)
                }
              }, {
                key: "createTwoChains",
                value: function(e) {
                  var t = this.props.children.props,
                    n = this.props;
                  return t[e] && n[e] ? this["fire".concat(e)] : t[e] || n[e]
                }
              }, {
                key: "isClickToShow",
                value: function() {
                  var e = this.props,
                    t = e.action,
                    n = e.showAction;
                  return -1 !== t.indexOf("click") || -1 !== n.indexOf("click")
                }
              }, {
                key: "isContextMenuOnly",
                value: function() {
                  var e = this.props.action;
                  return "contextMenu" === e || 1 === e.length && "contextMenu" === e[0]
                }
              }, {
                key: "isContextMenuToShow",
                value: function() {
                  var e = this.props,
                    t = e.action,
                    n = e.showAction;
                  return -1 !== t.indexOf("contextMenu") || -1 !== n.indexOf("contextMenu")
                }
              }, {
                key: "isClickToHide",
                value: function() {
                  var e = this.props,
                    t = e.action,
                    n = e.hideAction;
                  return -1 !== t.indexOf("click") || -1 !== n.indexOf("click")
                }
              }, {
                key: "isMouseEnterToShow",
                value: function() {
                  var e = this.props,
                    t = e.action,
                    n = e.showAction;
                  return -1 !== t.indexOf("hover") || -1 !== n.indexOf("mouseEnter")
                }
              }, {
                key: "isMouseLeaveToHide",
                value: function() {
                  var e = this.props,
                    t = e.action,
                    n = e.hideAction;
                  return -1 !== t.indexOf("hover") || -1 !== n.indexOf("mouseLeave")
                }
              }, {
                key: "isFocusToShow",
                value: function() {
                  var e = this.props,
                    t = e.action,
                    n = e.showAction;
                  return -1 !== t.indexOf("focus") || -1 !== n.indexOf("focus")
                }
              }, {
                key: "isBlurToHide",
                value: function() {
                  var e = this.props,
                    t = e.action,
                    n = e.hideAction;
                  return -1 !== t.indexOf("focus") || -1 !== n.indexOf("blur")
                }
              }, {
                key: "forcePopupAlign",
                value: function() {
                  var e;
                  this.state.popupVisible && (null === (e = this.popupRef.current) || void 0 === e || e.forceAlign())
                }
              }, {
                key: "fireEvents",
                value: function(e, t) {
                  var n = this.props.children.props[e];
                  n && n(t);
                  var r = this.props[e];
                  r && r(t)
                }
              }, {
                key: "close",
                value: function() {
                  this.setPopupVisible(!1)
                }
              }, {
                key: "render",
                value: function() {
                  var t = this.state.popupVisible,
                    n = this.props,
                    r = n.children,
                    i = n.forceRender,
                    o = n.alignPoint,
                    a = n.className,
                    s = n.autoDestroy,
                    l = zt.only(r),
                    c = {
                      key: "trigger"
                    };
                  this.isContextMenuToShow() ? c.onContextMenu = this.onContextMenu : c.onContextMenu = this.createTwoChains("onContextMenu"), this.isClickToHide() || this.isClickToShow() ? (c.onClick = this.onClick, c.onMouseDown =
                      this.onMouseDown, c.onTouchStart = this.onTouchStart) : (c.onClick = this.createTwoChains("onClick"), c.onMouseDown = this.createTwoChains("onMouseDown"), c.onTouchStart = this.createTwoChains("onTouchStart")),
                    this.isMouseEnterToShow() ? (c.onMouseEnter = this.onMouseEnter, o && (c.onMouseMove = this.onMouseMove)) : c.onMouseEnter = this.createTwoChains("onMouseEnter"), this.isMouseLeaveToHide() ? c.onMouseLeave = this
                    .onMouseLeave : c.onMouseLeave = this.createTwoChains("onMouseLeave"), this.isFocusToShow() || this.isBlurToHide() ? (c.onFocus = this.onFocus, c.onBlur = this.onBlur) : (c.onFocus = this.createTwoChains("onFocus"),
                      c.onBlur = this.createTwoChains("onBlur"));
                  var u = jl(l && l.props && l.props.className, a);
                  u && (c.className = u);
                  var h = Uh({}, c);
                  Lp(l) && (h.ref = jp(this.triggerRef, l.ref));
                  var p, d = yn(l, h);
                  return (t || this.popupRef.current || i) && (p = Te(e, {
                    key: "portal",
                    getContainer: this.getContainer,
                    didUpdate: this.handlePortalUpdate
                  }, this.getComponent())), !t && s && (p = null), Te(nx.Provider, {
                    value: this.triggerContextValue
                  }, d, p)
                }
              }], [{
                key: "getDerivedStateFromProps",
                value: function(e, t) {
                  var n = e.popupVisible,
                    r = {};
                  return void 0 !== n && t.popupVisible !== n && (r.popupVisible = n, r.prevPopupVisible = t.popupVisible), r
                }
              }]), r
            }(Me);
            return Ih(t, "contextType", nx), Ih(t, "defaultProps", {
              prefixCls: "rc-trigger-popup",
              getPopupClassNameFromAlign: ix,
              getDocument: ox,
              onPopupVisibleChange: rx,
              afterPopupVisibleChange: rx,
              onPopupAlign: rx,
              popupClassName: "",
              mouseEnterDelay: 0,
              mouseLeaveDelay: .1,
              focusDelay: 0,
              blurDelay: .15,
              popupStyle: {},
              destroyPopupOnHide: !1,
              popupAlign: {},
              defaultPopupVisible: !1,
              mask: !1,
              maskClosable: !0,
              action: [],
              showAction: [],
              hideAction: [],
              autoDestroy: !1
            }), t
          }(Dy),
          lx = {
            adjustX: 1,
            adjustY: 1
          },
          cx = {
            topLeft: {
              points: ["bl", "tl"],
              overflow: lx,
              offset: [0, -7]
            },
            bottomLeft: {
              points: ["tl", "bl"],
              overflow: lx,
              offset: [0, 7]
            },
            leftTop: {
              points: ["tr", "tl"],
              overflow: lx,
              offset: [-4, 0]
            },
            rightTop: {
              points: ["tl", "tr"],
              overflow: lx,
              offset: [4, 0]
            }
          },
          ux = {
            topLeft: {
              points: ["bl", "tl"],
              overflow: lx,
              offset: [0, -7]
            },
            bottomLeft: {
              points: ["tl", "bl"],
              overflow: lx,
              offset: [0, 7]
            },
            rightTop: {
              points: ["tr", "tl"],
              overflow: lx,
              offset: [-4, 0]
            },
            leftTop: {
              points: ["tl", "tr"],
              overflow: lx,
              offset: [4, 0]
            }
          };

        function hx(e, t, n) {
          return t || (n ? n[e] || n.other : void 0)
        }
        var px = {
          horizontal: "bottomLeft",
          vertical: "rightTop",
          "vertical-left": "rightTop",
          "vertical-right": "leftTop"
        };

        function dx(e) {
          var t = e.prefixCls,
            n = e.visible,
            r = e.children,
            i = e.popup,
            o = e.popupClassName,
            a = e.popupOffset,
            s = e.disabled,
            l = e.mode,
            c = e.onVisibleChange,
            u = wt(Jb),
            h = u.getPopupContainer,
            p = u.rtl,
            d = u.subMenuOpenDelay,
            f = u.subMenuCloseDelay,
            g = u.builtinPlacements,
            m = u.triggerSubMenuAction,
            v = u.forceSubMenuRender,
            _ = u.rootClassName,
            b = u.motion,
            y = u.defaultMotions,
            w = Dp(dt(!1), 2),
            x = w[0],
            k = w[1],
            C = Uh(Uh({}, p ? ux : cx), g),
            S = px[l],
            E = Uh(Uh({}, hx(l, b, y)), {}, {
              leavedClassName: "".concat(t, "-hidden"),
              removeOnLeave: !1,
              motionAppear: !0
            }),
            T = vt();
          return gt((function() {
            return T.current = md((function() {
                k(n)
              })),
              function() {
                md.cancel(T.current)
              }
          }), [n]), Te(sx, {
            prefixCls: t,
            popupClassName: jl("".concat(t, "-popup"), Ih({}, "".concat(t, "-rtl"), p), o, _),
            stretch: "horizontal" === l ? "minWidth" : null,
            getPopupContainer: h,
            builtinPlacements: C,
            popupPlacement: S,
            popupVisible: x,
            popup: i,
            popupAlign: a && {
              offset: a
            },
            action: s ? [] : [m],
            mouseEnterDelay: d,
            mouseLeaveDelay: f,
            onPopupVisibleChange: c,
            forceRender: v,
            popupMotion: E
          }, r)
        }

        function fx(e) {
          var t = e.id,
            n = e.open,
            r = e.keyPath,
            i = e.children,
            o = "inline",
            a = wt(Jb),
            s = a.prefixCls,
            l = a.forceSubMenuRender,
            c = a.motion,
            u = a.defaultMotions,
            h = a.mode,
            p = vt(!1);
          p.current = h === o;
          var d = Dp(dt(!p.current), 2),
            f = d[0],
            g = d[1],
            m = !!p.current && n;
          gt((function() {
            p.current && g(!1)
          }), [h]);
          var v = Uh({}, hx(o, c, u));
          r.length > 1 && (v.motionAppear = !1);
          var _ = v.onVisibleChanged;
          return v.onVisibleChanged = function(e) {
            return p.current || e || g(!0), null == _ ? void 0 : _(e)
          }, f ? null : Te(Qb, {
            mode: o,
            locked: !p.current
          }, Te(Ed, xh({
            visible: m
          }, v, {
            forceRender: l,
            removeOnLeave: !1,
            leavedClassName: "".concat(s, "-hidden")
          }), (function(e) {
            var n = e.className,
              r = e.style;
            return Te(Oy, {
              id: t,
              className: n,
              style: r
            }, i)
          })))
        }
        var gx = ["style", "className", "title", "eventKey", "warnKey", "disabled", "internalPopupClose", "children", "itemIcon", "expandIcon", "popupClassName", "popupOffset", "onClick", "onMouseEnter", "onMouseLeave", "onTitleClick",
            "onTitleMouseEnter", "onTitleMouseLeave"
          ],
          mx = ["active"],
          vx = function(e) {
            var t, n = e.style,
              r = e.className,
              i = e.title,
              o = e.eventKey,
              a = e.disabled,
              s = e.internalPopupClose,
              l = e.children,
              c = e.itemIcon,
              u = e.expandIcon,
              h = e.popupClassName,
              p = e.popupOffset,
              d = e.onClick,
              f = e.onMouseEnter,
              g = e.onMouseLeave,
              m = e.onTitleClick,
              v = e.onTitleMouseEnter,
              _ = e.onTitleMouseLeave,
              b = Nh(e, gx),
              y = dy(o),
              w = wt(Jb),
              x = w.prefixCls,
              k = w.mode,
              C = w.openKeys,
              S = w.disabled,
              E = w.overflowDisabled,
              T = w.activeKey,
              O = w.selectedKeys,
              A = w.itemIcon,
              P = w.expandIcon,
              M = w.onItemClick,
              D = w.onOpenChange,
              I = w.onActive,
              N = wt(fy)._internalRenderSubMenuItem,
              R = wt(uy).isSubPathKey,
              j = cy(),
              L = "".concat(x, "-submenu"),
              F = S || a,
              B = vt(),
              z = vt(),
              H = c || A,
              U = u || P,
              W = C.includes(o),
              V = !E && W,
              X = R(O, o),
              G = ey(o, F, v, _),
              Y = G.active,
              q = Nh(G, mx),
              K = Dp(dt(!1), 2),
              $ = K[0],
              Z = K[1],
              J = function(e) {
                F || Z(e)
              },
              Q = bt((function() {
                return Y || "inline" !== k && ($ || R([T], o))
              }), [k, Y, T, $, o, R]),
              ee = iy(j.length),
              te = Sy((function(e) {
                null == d || d(ny(e)), M(e)
              })),
              ne = y && "".concat(y, "-popup"),
              re = Te("div", xh({
                role: "menuitem",
                style: ee,
                className: "".concat(L, "-title"),
                tabIndex: F ? null : -1,
                ref: B,
                title: "string" == typeof i ? i : null,
                "data-menu-id": E && y ? null : y,
                "aria-expanded": V,
                "aria-haspopup": !0,
                "aria-controls": ne,
                "aria-disabled": F,
                onClick: function(e) {
                  F || (null == m || m({
                    key: o,
                    domEvent: e
                  }), "inline" === k && D(o, !W))
                },
                onFocus: function() {
                  I(o)
                }
              }, q), i, Te(ry, {
                icon: "horizontal" !== k ? U : null,
                props: Uh(Uh({}, e), {}, {
                  isOpen: V,
                  isSubMenu: !0
                })
              }, Te("i", {
                className: "".concat(L, "-arrow")
              }))),
              ie = vt(k);
            if ("inline" !== k && (ie.current = j.length > 1 ? "vertical" : k), !E) {
              var oe = ie.current;
              re = Te(dx, {
                mode: oe,
                prefixCls: L,
                visible: !s && V && "inline" !== k,
                popupClassName: h,
                popupOffset: p,
                popup: Te(Qb, {
                  mode: "horizontal" === oe ? "vertical" : oe
                }, Te(Oy, {
                  id: ne,
                  ref: z
                }, l)),
                disabled: F,
                onVisibleChange: function(e) {
                  "inline" !== k && D(o, e)
                }
              }, re)
            }
            var ae = Te(Kb.Item, xh({
              role: "none"
            }, b, {
              component: "li",
              style: n,
              className: jl(L, "".concat(L, "-").concat(k), r, (t = {}, Ih(t, "".concat(L, "-open"), V), Ih(t, "".concat(L, "-active"), Q), Ih(t, "".concat(L, "-selected"), X), Ih(t, "".concat(L, "-disabled"), F), t)),
              onMouseEnter: function(e) {
                J(!0), null == f || f({
                  key: o,
                  domEvent: e
                })
              },
              onMouseLeave: function(e) {
                J(!1), null == g || g({
                  key: o,
                  domEvent: e
                })
              }
            }), re, !E && Te(fx, {
              id: ne,
              open: V,
              keyPath: j
            }, l));
            return N && (ae = N(ae, e, {
              selected: X,
              active: Q,
              open: V,
              disabled: F
            })), Te(Qb, {
              onItemClick: te,
              mode: "horizontal" === k ? "vertical" : k,
              itemIcon: H,
              expandIcon: U
            }, ae)
          };

        function _x(e) {
          var t, n = e.eventKey,
            r = e.children,
            i = cy(n),
            o = xy(r, i),
            a = sy();
          return gt((function() {
            if (a) return a.registerPath(n, i),
              function() {
                a.unregisterPath(n, i)
              }
          }), [i]), t = a ? o : Te(vx, e, o), Te(ly.Provider, {
            value: i
          }, t)
        }

        function bx(e) {
          var t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];
          if (Hw(e)) {
            var n = e.nodeName.toLowerCase(),
              r = ["input", "select", "textarea", "button"].includes(n) || e.isContentEditable || "a" === n && !!e.getAttribute("href"),
              i = e.getAttribute("tabindex"),
              o = Number(i),
              a = null;
            return i && !Number.isNaN(o) ? a = o : r && null === a && (a = 0), r && e.disabled && (a = null), null !== a && (a >= 0 || t && a < 0)
          }
          return !1
        }
        var yx = x_.LEFT,
          wx = x_.RIGHT,
          xx = x_.UP,
          kx = x_.DOWN,
          Cx = x_.ENTER,
          Sx = x_.ESC,
          Ex = x_.HOME,
          Tx = x_.END,
          Ox = [xx, kx, yx, wx];

        function Ax(e, t) {
          var n = function(e) {
            var t = arguments.length > 1 && void 0 !== arguments[1] && arguments[1],
              n = zh(e.querySelectorAll("*")).filter((function(e) {
                return bx(e, t)
              }));
            return bx(e, t) && n.unshift(e), n
          }(e, !0);
          return n.filter((function(e) {
            return t.has(e)
          }))
        }

        function Px(e, t, n) {
          var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 1;
          if (!e) return null;
          var i = Ax(e, t),
            o = i.length,
            a = i.findIndex((function(e) {
              return n === e
            }));
          return r < 0 ? -1 === a ? a = o - 1 : a -= 1 : r > 0 && (a += 1), i[a = (a + o) % o]
        }

        function Mx(e, t, n, r, i, o, a, s, l, c) {
          var u = vt(),
            h = vt();
          h.current = t;
          var p = function() {
            md.cancel(u.current)
          };
          return gt((function() {
              return function() {
                p()
              }
            }), []),
            function(d) {
              var f = d.which;
              if ([].concat(Ox, [Cx, Sx, Ex, Tx]).includes(f)) {
                var g, m, v, _ = function() {
                  return g = new Set, m = new Map, v = new Map, o().forEach((function(e) {
                    var t = document.querySelector("[data-menu-id='".concat(py(r, e), "']"));
                    t && (g.add(t), v.set(t, e), m.set(e, t))
                  })), g
                };
                _();
                var b = function(e, t) {
                    for (var n = e || document.activeElement; n;) {
                      if (t.has(n)) return n;
                      n = n.parentElement
                    }
                    return null
                  }(m.get(t), g),
                  y = v.get(b),
                  w = function(e, t, n, r) {
                    var i, o, a, s, l = "prev",
                      c = "next",
                      u = "children",
                      h = "parent";
                    if ("inline" === e && r === Cx) return {
                      inlineTrigger: !0
                    };
                    var p = (Ih(i = {}, xx, l), Ih(i, kx, c), i),
                      d = (Ih(o = {}, yx, n ? c : l), Ih(o, wx, n ? l : c), Ih(o, kx, u), Ih(o, Cx, u), o),
                      f = (Ih(a = {}, xx, l), Ih(a, kx, c), Ih(a, Cx, u), Ih(a, Sx, h), Ih(a, yx, n ? u : h), Ih(a, wx, n ? h : u), a);
                    switch (null === (s = {
                        inline: p,
                        horizontal: d,
                        vertical: f,
                        inlineSub: p,
                        horizontalSub: f,
                        verticalSub: f
                      } ["".concat(e).concat(t ? "" : "Sub")]) || void 0 === s ? void 0 : s[r]) {
                      case l:
                        return {
                          offset: -1, sibling: !0
                        };
                      case c:
                        return {
                          offset: 1, sibling: !0
                        };
                      case h:
                        return {
                          offset: -1, sibling: !1
                        };
                      case u:
                        return {
                          offset: 1, sibling: !1
                        };
                      default:
                        return null
                    }
                  }(e, 1 === a(y, !0).length, n, f);
                if (!w && f !== Ex && f !== Tx) return;
                (Ox.includes(f) || [Ex, Tx].includes(f)) && d.preventDefault();
                var x = function(e) {
                  if (e) {
                    var t = e,
                      n = e.querySelector("a");
                    (null == n ? void 0 : n.getAttribute("href")) && (t = n);
                    var r = v.get(e);
                    s(r), p(), u.current = md((function() {
                      h.current === r && t.focus()
                    }))
                  }
                };
                if ([Ex, Tx].includes(f) || w.sibling || !b) {
                  var k, C, S = Ax(k = b && "inline" !== e ? function(e) {
                    for (var t = e; t;) {
                      if (t.getAttribute("data-menu-list")) return t;
                      t = t.parentElement
                    }
                    return null
                  }(b) : i.current, g);
                  C = f === Ex ? S[0] : f === Tx ? S[S.length - 1] : Px(k, g, b, w.offset), x(C)
                } else if (w.inlineTrigger) l(y);
                else if (w.offset > 0) l(y, !0), p(), u.current = md((function() {
                  _();
                  var e = b.getAttribute("aria-controls"),
                    t = Px(document.getElementById(e), g);
                  x(t)
                }), 5);
                else if (w.offset < 0) {
                  var E = a(y, !0),
                    T = E[E.length - 2],
                    O = m.get(T);
                  l(T, !1), x(O)
                }
              }
              null == c || c(d)
            }
        }
        var Dx = Math.random().toFixed(5).toString().slice(2),
          Ix = 0;
        var Nx = "__RC_UTIL_PATH_SPLIT__",
          Rx = function(e) {
            return e.join(Nx)
          },
          jx = "rc-menu-more";

        function Lx() {
          var e = Dp(dt({}), 2)[1],
            t = vt(new Map),
            n = vt(new Map),
            r = Dp(dt([]), 2),
            i = r[0],
            o = r[1],
            a = vt(0),
            s = vt(!1),
            l = yt((function(r, i) {
              var o = Rx(i);
              n.current.set(o, r), t.current.set(r, o), a.current += 1;
              var l, c = a.current;
              l = function() {
                c === a.current && (s.current || e({}))
              }, Promise.resolve().then(l)
            }), []),
            c = yt((function(e, r) {
              var i = Rx(r);
              n.current.delete(i), t.current.delete(e)
            }), []),
            u = yt((function(e) {
              o(e)
            }), []),
            h = yt((function(e, n) {
              var r = t.current.get(e) || "",
                o = r.split(Nx);
              return n && i.includes(o[0]) && o.unshift(jx), o
            }), [i]),
            p = yt((function(e, t) {
              return e.some((function(e) {
                return h(e, !0).includes(t)
              }))
            }), [h]),
            d = yt((function(e) {
              var r = "".concat(t.current.get(e)).concat(Nx),
                i = new Set;
              return zh(n.current.keys()).forEach((function(e) {
                e.startsWith(r) && i.add(n.current.get(e))
              })), i
            }), []);
          return gt((function() {
            return function() {
              s.current = !0
            }
          }), []), {
            registerPath: l,
            unregisterPath: c,
            refreshOverflowKeys: u,
            isSubPathKey: p,
            getKeyPath: h,
            getKeys: function() {
              var e = zh(t.current.keys());
              return i.length && e.push(jx), e
            },
            getSubPathKeys: d
          }
        }
        var Fx = ["prefixCls", "rootClassName", "style", "className", "tabIndex", "items", "children", "direction", "id", "mode", "inlineCollapsed", "disabled", "disabledOverflow", "subMenuOpenDelay", "subMenuCloseDelay", "forceSubMenuRender",
            "defaultOpenKeys", "openKeys", "activeKey", "defaultActiveFirst", "selectable", "multiple", "defaultSelectedKeys", "selectedKeys", "onSelect", "onDeselect", "inlineIndent", "motion", "defaultMotions", "triggerSubMenuAction",
            "builtinPlacements", "itemIcon", "expandIcon", "overflowedIndicator", "overflowedIndicatorPopupClassName", "getPopupContainer", "onClick", "onOpenChange", "onKeyDown", "openAnimation", "openTransitionName", "_internalRenderMenuItem",
            "_internalRenderSubMenuItem"
          ],
          Bx = [],
          zx = Ft((function(e, t) {
            var n, r, i = e.prefixCls,
              o = void 0 === i ? "rc-menu" : i,
              a = e.rootClassName,
              s = e.style,
              l = e.className,
              c = e.tabIndex,
              u = void 0 === c ? 0 : c,
              h = e.items,
              p = e.children,
              d = e.direction,
              f = e.id,
              g = e.mode,
              m = void 0 === g ? "vertical" : g,
              v = e.inlineCollapsed,
              _ = e.disabled,
              b = e.disabledOverflow,
              y = e.subMenuOpenDelay,
              w = void 0 === y ? .1 : y,
              x = e.subMenuCloseDelay,
              k = void 0 === x ? .1 : x,
              C = e.forceSubMenuRender,
              S = e.defaultOpenKeys,
              E = e.openKeys,
              T = e.activeKey,
              O = e.defaultActiveFirst,
              A = e.selectable,
              P = void 0 === A || A,
              M = e.multiple,
              D = void 0 !== M && M,
              I = e.defaultSelectedKeys,
              N = e.selectedKeys,
              R = e.onSelect,
              j = e.onDeselect,
              L = e.inlineIndent,
              F = void 0 === L ? 24 : L,
              B = e.motion,
              z = e.defaultMotions,
              H = e.triggerSubMenuAction,
              U = void 0 === H ? "hover" : H,
              W = e.builtinPlacements,
              V = e.itemIcon,
              X = e.expandIcon,
              G = e.overflowedIndicator,
              Y = void 0 === G ? "..." : G,
              q = e.overflowedIndicatorPopupClassName,
              K = e.getPopupContainer,
              $ = e.onClick,
              Z = e.onOpenChange,
              J = e.onKeyDown,
              Q = e._internalRenderMenuItem,
              ee = e._internalRenderSubMenuItem,
              te = Nh(e, Fx),
              ne = bt((function() {
                return Cy(p, h, Bx)
              }), [p, h]),
              re = Dp(dt(!1), 2),
              ie = re[0],
              oe = re[1],
              ae = vt();
            _t(t, (function() {
              return {
                list: ae.current,
                focus: function(e) {
                  var t;
                  null === (t = ae.current) || void 0 === t || t.focus(e)
                }
              }
            }));
            var se = function(e) {
                var t = Dp(mb(e, {
                    value: e
                  }), 2),
                  n = t[0],
                  r = t[1];
                return gt((function() {
                  Ix += 1;
                  var e = "".concat(Dx, "-").concat(Ix);
                  r("rc-menu-uuid-".concat(e))
                }), []), n
              }(f),
              le = "rtl" === d,
              ce = Dp(bt((function() {
                return "inline" !== m && "vertical" !== m || !v ? [m, !1] : ["vertical", v]
              }), [m, v]), 2),
              ue = ce[0],
              he = ce[1],
              pe = Dp(dt(0), 2),
              de = pe[0],
              fe = pe[1],
              ge = de >= ne.length - 1 || "horizontal" !== ue || b,
              me = Dp(mb(S, {
                value: E,
                postState: function(e) {
                  return e || Bx
                }
              }), 2),
              ve = me[0],
              _e = me[1],
              be = function(e) {
                _e(e), null == Z || Z(e)
              },
              ye = Dp(dt(ve), 2),
              we = ye[0],
              xe = ye[1],
              ke = "inline" === ue,
              Ce = vt(!1);
            gt((function() {
              ke && xe(ve)
            }), [ve]), gt((function() {
              Ce.current ? ke ? _e(we) : be(Bx) : Ce.current = !0
            }), [ke]);
            var Se = Lx(),
              Ee = Se.registerPath,
              Oe = Se.unregisterPath,
              Ae = Se.refreshOverflowKeys,
              Pe = Se.isSubPathKey,
              Me = Se.getKeyPath,
              De = Se.getKeys,
              Ie = Se.getSubPathKeys,
              Ne = bt((function() {
                return {
                  registerPath: Ee,
                  unregisterPath: Oe
                }
              }), [Ee, Oe]),
              Re = bt((function() {
                return {
                  isSubPathKey: Pe
                }
              }), [Pe]);
            gt((function() {
              Ae(ge ? Bx : ne.slice(de + 1).map((function(e) {
                return e.key
              })))
            }), [de, ge]);
            var je = Dp(mb(T || O && (null === (n = ne[0]) || void 0 === n ? void 0 : n.key), {
                value: T
              }), 2),
              Le = je[0],
              Fe = je[1],
              Be = Sy((function(e) {
                Fe(e)
              })),
              ze = Sy((function() {
                Fe(void 0)
              })),
              He = Dp(mb(I || [], {
                value: N,
                postState: function(e) {
                  return Array.isArray(e) ? e : null == e ? Bx : [e]
                }
              }), 2),
              Ue = He[0],
              We = He[1],
              Ve = Sy((function(e) {
                null == $ || $(ny(e)),
                  function(e) {
                    if (P) {
                      var t, n = e.key,
                        r = Ue.includes(n);
                      t = D ? r ? Ue.filter((function(e) {
                        return e !== n
                      })) : [].concat(zh(Ue), [n]) : [n], We(t);
                      var i = Uh(Uh({}, e), {}, {
                        selectedKeys: t
                      });
                      r ? null == j || j(i) : null == R || R(i)
                    }!D && ve.length && "inline" !== ue && be(Bx)
                  }(e)
              })),
              Xe = Sy((function(e, t) {
                var n = ve.filter((function(t) {
                  return t !== e
                }));
                if (t) n.push(e);
                else if ("inline" !== ue) {
                  var r = Ie(e);
                  n = n.filter((function(e) {
                    return !r.has(e)
                  }))
                }
                Mb(ve, n) || be(n)
              })),
              Ge = Sy(K),
              Ye = Mx(ue, Le, le, se, ae, De, Me, Fe, (function(e, t) {
                var n = null != t ? t : !ve.includes(e);
                Xe(e, n)
              }), J);
            gt((function() {
              oe(!0)
            }), []);
            var qe = bt((function() {
                return {
                  _internalRenderMenuItem: Q,
                  _internalRenderSubMenuItem: ee
                }
              }), [Q, ee]),
              Ke = "horizontal" !== ue || b ? ne : ne.map((function(e, t) {
                return Te(Qb, {
                  key: e.key,
                  overflowDisabled: t > de
                }, e)
              })),
              $e = Te(Kb, xh({
                id: f,
                ref: ae,
                prefixCls: "".concat(o, "-overflow"),
                component: "ul",
                itemComponent: yy,
                className: jl(o, "".concat(o, "-root"), "".concat(o, "-").concat(ue), l, (r = {}, Ih(r, "".concat(o, "-inline-collapsed"), he), Ih(r, "".concat(o, "-rtl"), le), r), a),
                dir: d,
                style: s,
                role: "menu",
                tabIndex: u,
                data: Ke,
                renderRawItem: function(e) {
                  return e
                },
                renderRawRest: function(e) {
                  var t = e.length,
                    n = t ? ne.slice(-t) : null;
                  return Te(_x, {
                    eventKey: jx,
                    title: Y,
                    disabled: ge,
                    internalPopupClose: 0 === t,
                    popupClassName: q
                  }, n)
                },
                maxCount: "horizontal" !== ue || b ? Kb.INVALIDATE : Kb.RESPONSIVE,
                ssr: "full",
                "data-menu-list": !0,
                onVisibleChange: function(e) {
                  fe(e)
                },
                onKeyDown: Ye
              }, te));
            return Te(fy.Provider, {
              value: qe
            }, Te(hy.Provider, {
              value: se
            }, Te(Qb, {
              prefixCls: o,
              rootClassName: a,
              mode: ue,
              openKeys: ve,
              rtl: le,
              disabled: _,
              motion: ie ? B : null,
              defaultMotions: ie ? z : null,
              activeKey: Le,
              onActive: Be,
              onInactive: ze,
              selectedKeys: Ue,
              inlineIndent: F,
              subMenuOpenDelay: w,
              subMenuCloseDelay: k,
              forceSubMenuRender: C,
              builtinPlacements: W,
              triggerSubMenuAction: U,
              getPopupContainer: Ge,
              itemIcon: V,
              expandIcon: X,
              onItemClick: Ve,
              onOpenChange: Xe
            }, Te(uy.Provider, {
              value: Re
            }, $e), Te("div", {
              style: {
                display: "none"
              },
              "aria-hidden": !0
            }, Te(ay.Provider, {
              value: Ne
            }, ne)))))
          })),
          Hx = ["className", "title", "eventKey", "children"],
          Ux = ["children"],
          Wx = function(e) {
            var t = e.className,
              n = e.title,
              r = e.children,
              i = Nh(e, Hx),
              o = wt(Jb).prefixCls,
              a = "".concat(o, "-item-group");
            return Te("li", xh({}, i, {
              onClick: function(e) {
                return e.stopPropagation()
              },
              className: jl(a, t)
            }), Te("div", {
              className: "".concat(a, "-title"),
              title: "string" == typeof n ? n : void 0
            }, n), Te("ul", {
              className: "".concat(a, "-list")
            }, r))
          };

        function Vx(e) {
          var t = e.children,
            n = Nh(e, Ux),
            r = xy(t, cy(n.eventKey));
          return sy() ? r : Te(Wx, $b(n, ["warnKey"]), r)
        }

        function Xx(e) {
          var t = e.className,
            n = e.style,
            r = wt(Jb).prefixCls;
          return sy() ? null : Te("li", {
            className: jl("".concat(r, "-item-divider"), t),
            style: n
          })
        }
        var Gx = zx;
        Gx.Item = yy, Gx.SubMenu = _x, Gx.ItemGroup = Vx, Gx.Divider = Xx;
        var Yx = Gx,
          qx = {
            adjustX: 1,
            adjustY: 1
          },
          Kx = [0, 0],
          $x = {
            topLeft: {
              points: ["bl", "tl"],
              overflow: qx,
              offset: [0, -4],
              targetOffset: Kx
            },
            topCenter: {
              points: ["bc", "tc"],
              overflow: qx,
              offset: [0, -4],
              targetOffset: Kx
            },
            topRight: {
              points: ["br", "tr"],
              overflow: qx,
              offset: [0, -4],
              targetOffset: Kx
            },
            bottomLeft: {
              points: ["tl", "bl"],
              overflow: qx,
              offset: [0, 4],
              targetOffset: Kx
            },
            bottomCenter: {
              points: ["tc", "bc"],
              overflow: qx,
              offset: [0, 4],
              targetOffset: Kx
            },
            bottomRight: {
              points: ["tr", "br"],
              overflow: qx,
              offset: [0, 4],
              targetOffset: Kx
            }
          },
          Zx = x_.ESC,
          Jx = x_.TAB;
        var Qx = ["arrow", "prefixCls", "transitionName", "animation", "align", "placement", "placements", "getPopupContainer", "showAction", "hideAction", "overlayClassName", "overlayStyle", "visible", "trigger"];

        function ek(e, t) {
          var n = e.arrow,
            r = void 0 !== n && n,
            i = e.prefixCls,
            o = void 0 === i ? "rc-dropdown" : i,
            a = e.transitionName,
            s = e.animation,
            l = e.align,
            c = e.placement,
            u = void 0 === c ? "bottomLeft" : c,
            h = e.placements,
            p = void 0 === h ? $x : h,
            d = e.getPopupContainer,
            f = e.showAction,
            g = e.hideAction,
            m = e.overlayClassName,
            v = e.overlayStyle,
            _ = e.visible,
            b = e.trigger,
            y = void 0 === b ? ["hover"] : b,
            w = Nh(e, Qx),
            x = Dp(dt(), 2),
            k = x[0],
            C = x[1],
            S = "visible" in e ? _ : k,
            E = vt(null);
          _t(t, (function() {
            return E.current
          }));
          var T = vt(null),
            O = "".concat(o, "-menu");
          ! function(e) {
            var t = e.visible,
              n = e.setTriggerVisible,
              r = e.triggerRef,
              i = e.menuRef,
              o = e.onVisibleChange,
              a = vt(!1),
              s = function() {
                var e, i, a, s;
                t && r.current && (null === (e = r.current) || void 0 === e || null === (i = e.triggerRef) || void 0 === i || null === (a = i.current) || void 0 === a || null === (s = a.focus) || void 0 === s || s.call(a), n(!1), "function" ==
                  typeof o && o(!1))
              },
              l = function(e) {
                var t;
                switch (e.keyCode) {
                  case Zx:
                    s();
                    break;
                  case Jx:
                    !a.current && (null === (t = i.current) || void 0 === t ? void 0 : t.focus) ? (e.preventDefault(), i.current.focus(), a.current = !0) : s()
                }
              };
            gt((function() {
              return t ? (window.addEventListener("keydown", l), function() {
                window.removeEventListener("keydown", l), a.current = !1
              }) : function() {
                return null
              }
            }), [t])
          }({
            visible: S,
            setTriggerVisible: C,
            triggerRef: E,
            menuRef: T,
            onVisibleChange: e.onVisibleChange
          });
          var A, P, M, D, I = function() {
              var t = e.overlay;
              return "function" == typeof t ? t() : t
            },
            N = function(t) {
              var n = e.onOverlayClick,
                r = I().props;
              C(!1), n && n(t), r.onClick && r.onClick(t)
            },
            R = function() {
              var e, t = I(),
                n = jp(T, t.ref),
                i = (Ih(e = {
                  prefixCls: O
                }, "data-dropdown-inject", !0), Ih(e, "onClick", N), Ih(e, "ref", Lp(t) ? n : void 0), e);
              return "string" == typeof t.type && (delete i.prefixCls, delete i["data-dropdown-inject"]), Te(Pe, null, r && Te("div", {
                className: "".concat(o, "-arrow")
              }), yn(t, i))
            },
            j = g;
          return j || -1 === y.indexOf("contextMenu") || (j = ["click"]), Te(sx, Uh(Uh({
            builtinPlacements: p
          }, w), {}, {
            prefixCls: o,
            ref: E,
            popupClassName: jl(m, Ih({}, "".concat(o, "-show-arrow"), r)),
            popupStyle: v,
            action: y,
            showAction: f,
            hideAction: j || [],
            popupPlacement: u,
            popupAlign: l,
            popupTransitionName: a,
            popupAnimation: s,
            popupVisible: S,
            stretch: function() {
              var t = e.minOverlayWidthMatchTrigger,
                n = e.alignPoint;
              return "minOverlayWidthMatchTrigger" in e ? t : !n
            }() ? "minWidth" : "",
            popup: "function" == typeof e.overlay ? R : R(),
            onPopupVisibleChange: function(t) {
              var n = e.onVisibleChange;
              C(t), "function" == typeof n && n(t)
            },
            getPopupContainer: d
          }), (P = e.children, M = P.props ? P.props : {}, D = jl(M.className, void 0 !== (A = e.openClassName) ? A : "".concat(o, "-open")), S && P ? yn(P, {
            className: D
          }) : P))
        }
        var tk = Ft(ek);

        function nk(e, t) {
          var n = e.prefixCls,
            r = e.editable,
            i = e.locale,
            o = e.style;
          return r && !1 !== r.showAdd ? Te("button", {
            ref: t,
            type: "button",
            className: "".concat(n, "-nav-add"),
            style: o,
            "aria-label": (null == i ? void 0 : i.addAriaLabel) || "Add tab",
            onClick: function(e) {
              r.onEdit("add", {
                event: e
              })
            }
          }, r.addIcon || "+") : null
        }
        var rk = Ft(nk);

        function ik(e, t) {
          var n = e.prefixCls,
            r = e.id,
            i = e.tabs,
            o = e.locale,
            a = e.mobile,
            s = e.moreIcon,
            l = void 0 === s ? "More" : s,
            c = e.moreTransitionName,
            u = e.style,
            h = e.className,
            p = e.editable,
            d = e.tabBarGutter,
            f = e.rtl,
            g = e.removeAriaLabel,
            m = e.onTabClick,
            v = Dp(dt(!1), 2),
            _ = v[0],
            b = v[1],
            y = Dp(dt(null), 2),
            w = y[0],
            x = y[1],
            k = "".concat(r, "-more-popup"),
            C = "".concat(n, "-dropdown"),
            S = null !== w ? "".concat(k, "-").concat(w) : null,
            E = null == o ? void 0 : o.dropdownAriaLabel;
          var T = Te(Yx, {
            onClick: function(e) {
              var t = e.key,
                n = e.domEvent;
              m(t, n), b(!1)
            },
            id: k,
            tabIndex: -1,
            role: "listbox",
            "aria-activedescendant": S,
            selectedKeys: [w],
            "aria-label": void 0 !== E ? E : "expanded dropdown"
          }, i.map((function(e) {
            var t = p && !1 !== e.closable && !e.disabled;
            return Te(yy, {
              key: e.key,
              id: "".concat(k, "-").concat(e.key),
              role: "option",
              "aria-controls": r && "".concat(r, "-panel-").concat(e.key),
              disabled: e.disabled
            }, Te("span", null, e.tab), t && Te("button", {
              type: "button",
              "aria-label": g || "remove",
              tabIndex: 0,
              className: "".concat(C, "-menu-item-remove"),
              onClick: function(t) {
                var n, r;
                t.stopPropagation(), n = t, r = e.key, n.preventDefault(), n.stopPropagation(), p.onEdit("remove", {
                  key: r,
                  event: n
                })
              }
            }, e.closeIcon || p.removeIcon || "×"))
          })));

          function O(e) {
            for (var t = i.filter((function(e) {
                return !e.disabled
              })), n = t.findIndex((function(e) {
                return e.key === w
              })) || 0, r = t.length, o = 0; o < r; o += 1) {
              var a = t[n = (n + e + r) % r];
              if (!a.disabled) return void x(a.key)
            }
          }
          gt((function() {
            var e = document.getElementById(S);
            e && e.scrollIntoView && e.scrollIntoView(!1)
          }), [w]), gt((function() {
            _ || x(null)
          }), [_]);
          var A = Ih({}, f ? "marginRight" : "marginLeft", d);
          i.length || (A.visibility = "hidden", A.order = 1);
          var P = jl(Ih({}, "".concat(C, "-rtl"), f)),
            M = a ? null : Te(tk, {
              prefixCls: C,
              overlay: T,
              trigger: ["hover"],
              visible: _,
              transitionName: c,
              onVisibleChange: b,
              overlayClassName: P,
              mouseEnterDelay: .1,
              mouseLeaveDelay: .1
            }, Te("button", {
              type: "button",
              className: "".concat(n, "-nav-more"),
              style: A,
              tabIndex: -1,
              "aria-hidden": "true",
              "aria-haspopup": "listbox",
              "aria-controls": k,
              id: "".concat(r, "-more"),
              "aria-expanded": _,
              onKeyDown: function(e) {
                var t = e.which;
                if (_) switch (t) {
                  case x_.UP:
                    O(-1), e.preventDefault();
                    break;
                  case x_.DOWN:
                    O(1), e.preventDefault();
                    break;
                  case x_.ESC:
                    b(!1);
                    break;
                  case x_.SPACE:
                  case x_.ENTER:
                    null !== w && m(w, e)
                } else [x_.DOWN, x_.SPACE, x_.ENTER].includes(t) && (b(!0), e.preventDefault())
              }
            }, l));
          return Te("div", {
            className: jl("".concat(n, "-nav-operations"), h),
            style: u,
            ref: t
          }, M, Te(rk, {
            prefixCls: n,
            locale: o,
            editable: p
          }))
        }
        var ok = Rt(Ft(ik), (function(e, t) {
            return t.tabMoving
          })),
          ak = Qe(null),
          sk = .1,
          lk = .01,
          ck = 20,
          uk = Math.pow(.995, ck);

        function hk(e, t) {
          var n = vt(e),
            r = Dp(dt({}), 2)[1];
          return [n.current, function(e) {
            var i = "function" == typeof e ? e(n.current) : e;
            i !== n.current && t(i, n.current), n.current = i, r({})
          }]
        }
        var pk = function(e) {
          var t, n = e.position,
            r = e.prefixCls,
            i = e.extra;
          if (!i) return null;
          var o = {};
          return i && "object" === Ch(i) && !bn(i) ? o = i : o.right = i, "right" === n && (t = o.right), "left" === n && (t = o.left), t ? Te("div", {
            className: "".concat(r, "-extra-content")
          }, t) : null
        };

        function dk(e, t) {
          var n, r, i, o, a, s, l, c = wt(ak),
            u = c.prefixCls,
            h = c.tabs,
            p = e.className,
            d = e.style,
            f = e.id,
            g = e.animated,
            m = e.activeKey,
            v = e.rtl,
            _ = e.extra,
            b = e.editable,
            y = e.locale,
            w = e.tabPosition,
            x = e.tabBarGutter,
            k = e.children,
            C = e.onTabClick,
            S = e.onTabScroll,
            E = vt(),
            T = vt(),
            O = vt(),
            A = vt(),
            P = Dp((r = vt(new Map), [function(e) {
              return r.current.has(e) || r.current.set(e, Ae()), r.current.get(e)
            }, function(e) {
              r.current.delete(e)
            }]), 2),
            M = P[0],
            D = P[1],
            I = "top" === w || "bottom" === w,
            N = Dp(hk(0, (function(e, t) {
              I && S && S({
                direction: e > t ? "left" : "right"
              })
            })), 2),
            R = N[0],
            j = N[1],
            L = Dp(hk(0, (function(e, t) {
              !I && S && S({
                direction: e > t ? "top" : "bottom"
              })
            })), 2),
            F = L[0],
            B = L[1],
            z = Dp(dt(0), 2),
            H = z[0],
            U = z[1],
            W = Dp(dt(0), 2),
            V = W[0],
            X = W[1],
            G = Dp(dt(null), 2),
            Y = G[0],
            q = G[1],
            K = Dp(dt(null), 2),
            $ = K[0],
            Z = K[1],
            J = Dp(dt(0), 2),
            Q = J[0],
            ee = J[1],
            te = Dp(dt(0), 2),
            ne = te[0],
            re = te[1],
            ie = (i = new Map, o = vt([]), a = Dp(dt({}), 2)[1], s = vt("function" == typeof i ? i() : i), l = Eb((function() {
              var e = s.current;
              o.current.forEach((function(t) {
                e = t(e)
              })), o.current = [], s.current = e, a({})
            })), [s.current, function(e) {
              o.current.push(e), l()
            }]),
            oe = Dp(ie, 2),
            ae = oe[0],
            se = oe[1],
            le = function(e, t, n) {
              return bt((function() {
                for (var n, r = new Map, i = t.get(null === (n = e[0]) || void 0 === n ? void 0 : n.key) || Ab, o = i.left + i.width, a = 0; a < e.length; a += 1) {
                  var s, l = e[a].key,
                    c = t.get(l);
                  c || (c = t.get(null === (s = e[a - 1]) || void 0 === s ? void 0 : s.key) || Ab);
                  var u = r.get(l) || Uh({}, c);
                  u.right = o - u.left - u.width, r.set(l, u)
                }
                return r
              }), [e.map((function(e) {
                return e.key
              })).join("_"), t, n])
            }(h, ae, H),
            ce = "".concat(u, "-nav-operations-hidden"),
            ue = 0,
            he = 0;

          function pe(e) {
            return e < ue ? ue : e > he ? he : e
          }
          I ? v ? (ue = 0, he = Math.max(0, H - Y)) : (ue = Math.min(0, Y - H), he = 0) : (ue = Math.min(0, $ - V), he = 0);
          var de = vt(),
            fe = Dp(dt(), 2),
            ge = fe[0],
            me = fe[1];

          function ve() {
            me(Date.now())
          }

          function _e() {
            window.clearTimeout(de.current)
          }

          function be() {
            var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : m,
              t = le.get(e) || {
                width: 0,
                height: 0,
                left: 0,
                right: 0,
                top: 0
              };
            if (I) {
              var n = R;
              v ? t.right < R ? n = t.right : t.right + t.width > R + Y && (n = t.right + t.width - Y) : t.left < -R ? n = -t.left : t.left + t.width > -R + Y && (n = -(t.left + t.width - Y)), B(0), j(pe(n))
            } else {
              var r = F;
              t.top < -F ? r = -t.top : t.top + t.height > -F + $ && (r = -(t.top + t.height - $)), j(0), B(pe(r))
            }
          }! function(e, t) {
            var n = Dp(dt(), 2),
              r = n[0],
              i = n[1],
              o = Dp(dt(0), 2),
              a = o[0],
              s = o[1],
              l = Dp(dt(0), 2),
              c = l[0],
              u = l[1],
              h = Dp(dt(), 2),
              p = h[0],
              d = h[1],
              f = vt(),
              g = vt(),
              m = vt(null);
            m.current = {
              onTouchStart: function(e) {
                var t = e.touches[0],
                  n = t.screenX,
                  r = t.screenY;
                i({
                  x: n,
                  y: r
                }), window.clearInterval(f.current)
              },
              onTouchMove: function(e) {
                if (r) {
                  e.preventDefault();
                  var n = e.touches[0],
                    o = n.screenX,
                    l = n.screenY;
                  i({
                    x: o,
                    y: l
                  });
                  var c = o - r.x,
                    h = l - r.y;
                  t(c, h);
                  var p = Date.now();
                  s(p), u(p - a), d({
                    x: c,
                    y: h
                  })
                }
              },
              onTouchEnd: function() {
                if (r && (i(null), d(null), p)) {
                  var e = p.x / c,
                    n = p.y / c,
                    o = Math.abs(e),
                    a = Math.abs(n);
                  if (Math.max(o, a) < sk) return;
                  var s = e,
                    l = n;
                  f.current = window.setInterval((function() {
                    Math.abs(s) < lk && Math.abs(l) < lk ? window.clearInterval(f.current) : t((s *= uk) * ck, (l *= uk) * ck)
                  }), ck)
                }
              },
              onWheel: function(e) {
                var n = e.deltaX,
                  r = e.deltaY,
                  i = 0,
                  o = Math.abs(n),
                  a = Math.abs(r);
                o === a ? i = "x" === g.current ? n : r : o > a ? (i = n, g.current = "x") : (i = r, g.current = "y"), t(-i, -i) && e.preventDefault()
              }
            }, gt((function() {
              function t(e) {
                m.current.onTouchMove(e)
              }

              function n(e) {
                m.current.onTouchEnd(e)
              }
              return document.addEventListener("touchmove", t, {
                  passive: !1
                }), document.addEventListener("touchend", n, {
                  passive: !1
                }), e.current.addEventListener("touchstart", (function(e) {
                  m.current.onTouchStart(e)
                }), {
                  passive: !1
                }), e.current.addEventListener("wheel", (function(e) {
                  m.current.onWheel(e)
                })),
                function() {
                  document.removeEventListener("touchmove", t), document.removeEventListener("touchend", n)
                }
            }), [])
          }(E, (function(e, t) {
            function n(e, t) {
              e((function(e) {
                return pe(e + t)
              }))
            }
            if (I) {
              if (Y >= H) return !1;
              n(j, e)
            } else {
              if ($ >= V) return !1;
              n(B, t)
            }
            return _e(), ve(), !0
          })), gt((function() {
            return _e(), ge && (de.current = window.setTimeout((function() {
              me(0)
            }), 100)), _e
          }), [ge]);
          var ye = function(e, t, n, r, i) {
              var o, a, s, l = i.tabs,
                c = i.tabPosition,
                u = i.rtl;
              ["top", "bottom"].includes(c) ? (o = "width", a = u ? "right" : "left", s = Math.abs(t.left)) : (o = "height", a = "top", s = -t.top);
              var h = t[o],
                p = n[o],
                d = r[o],
                f = h;
              return p + d > h && p < h && (f = h - d), bt((function() {
                if (!l.length) return [0, 0];
                for (var t = l.length, n = t, r = 0; r < t; r += 1) {
                  var i = e.get(l[r].key) || Pb;
                  if (i[a] + i[o] > s + f) {
                    n = r - 1;
                    break
                  }
                }
                for (var c = 0, u = t - 1; u >= 0; u -= 1)
                  if ((e.get(l[u].key) || Pb)[a] < s) {
                    c = u + 1;
                    break
                  } return [c, n]
              }), [e, s, f, c, l.map((function(e) {
                return e.key
              })).join("_"), u])
            }(le, {
              width: Y,
              height: $,
              left: R,
              top: F
            }, {
              width: H,
              height: V
            }, {
              width: Q,
              height: ne
            }, Uh(Uh({}, e), {}, {
              tabs: h
            })),
            we = Dp(ye, 2),
            xe = we[0],
            ke = we[1],
            Ce = {};
          "top" === w || "bottom" === w ? Ce[v ? "marginRight" : "marginLeft"] = x : Ce.marginTop = x;
          var Se = h.map((function(e, t) {
              var n = e.key;
              return Te(Ob, {
                id: f,
                prefixCls: u,
                key: n,
                tab: e,
                style: 0 === t ? void 0 : Ce,
                closable: e.closable,
                editable: b,
                active: n === m,
                renderWrapper: k,
                removeAriaLabel: null == y ? void 0 : y.removeAriaLabel,
                ref: M(n),
                onClick: function(e) {
                  C(n, e)
                },
                onRemove: function() {
                  D(n)
                },
                onFocus: function() {
                  be(n), ve(), E.current && (v || (E.current.scrollLeft = 0), E.current.scrollTop = 0)
                }
              })
            })),
            Ee = Eb((function() {
              var e, t, n, r, i, o, a = (null === (e = E.current) || void 0 === e ? void 0 : e.offsetWidth) || 0,
                s = (null === (t = E.current) || void 0 === t ? void 0 : t.offsetHeight) || 0,
                l = (null === (n = A.current) || void 0 === n ? void 0 : n.offsetWidth) || 0,
                c = (null === (r = A.current) || void 0 === r ? void 0 : r.offsetHeight) || 0;
              q(a), Z(s), ee(l), re(c);
              var u = ((null === (i = T.current) || void 0 === i ? void 0 : i.offsetWidth) || 0) - l,
                p = ((null === (o = T.current) || void 0 === o ? void 0 : o.offsetHeight) || 0) - c;
              U(u), X(p), se((function() {
                var e = new Map;
                return h.forEach((function(t) {
                  var n = t.key,
                    r = M(n).current;
                  r && e.set(n, {
                    width: r.offsetWidth,
                    height: r.offsetHeight,
                    left: r.offsetLeft,
                    top: r.offsetTop
                  })
                })), e
              }))
            })),
            Oe = h.slice(0, xe),
            Pe = h.slice(ke + 1),
            Me = [].concat(zh(Oe), zh(Pe)),
            De = Dp(dt(), 2),
            Ie = De[0],
            Ne = De[1],
            Re = le.get(m),
            je = vt();

          function Le() {
            md.cancel(je.current)
          }
          gt((function() {
            var e = {};
            return Re && (I ? (v ? e.right = Re.right : e.left = Re.left, e.width = Re.width) : (e.top = Re.top, e.height = Re.height)), Le(), je.current = md((function() {
              Ne(e)
            })), Le
          }), [Re, I, v]), gt((function() {
            be()
          }), [m, Re, le, I]), gt((function() {
            Ee()
          }), [v, x, m, h.map((function(e) {
            return e.key
          })).join("_")]);
          var Fe, Be, ze, He, Ue = !!Me.length,
            We = "".concat(u, "-nav-wrap");
          return I ? v ? (Be = R > 0, Fe = R + Y < H) : (Fe = R < 0, Be = -R + Y < H) : (ze = F < 0, He = -F + $ < V), Te("div", {
            ref: t,
            role: "tablist",
            className: jl("".concat(u, "-nav"), p),
            style: d,
            onKeyDown: function() {
              ve()
            }
          }, Te(pk, {
            position: "left",
            extra: _,
            prefixCls: u
          }), Te(Sb, {
            onResize: Ee
          }, Te("div", {
            className: jl(We, (n = {}, Ih(n, "".concat(We, "-ping-left"), Fe), Ih(n, "".concat(We, "-ping-right"), Be), Ih(n, "".concat(We, "-ping-top"), ze), Ih(n, "".concat(We, "-ping-bottom"), He), n)),
            ref: E
          }, Te(Sb, {
            onResize: Ee
          }, Te("div", {
            ref: T,
            className: "".concat(u, "-nav-list"),
            style: {
              transform: "translate(".concat(R, "px, ").concat(F, "px)"),
              transition: ge ? "none" : void 0
            }
          }, Se, Te(rk, {
            ref: A,
            prefixCls: u,
            locale: y,
            editable: b,
            style: Uh(Uh({}, 0 === Se.length ? void 0 : Ce), {}, {
              visibility: Ue ? "hidden" : null
            })
          }), Te("div", {
            className: jl("".concat(u, "-ink-bar"), Ih({}, "".concat(u, "-ink-bar-animated"), g.inkBar)),
            style: Ie
          }))))), Te(ok, xh({}, e, {
            removeAriaLabel: null == y ? void 0 : y.removeAriaLabel,
            ref: O,
            prefixCls: u,
            tabs: Me,
            className: !Ue && ce,
            tabMoving: !!ge
          })), Te(pk, {
            position: "right",
            extra: _,
            prefixCls: u
          }))
        }
        var fk = Ft(dk);

        function gk(e) {
          var t = e.id,
            n = e.activeKey,
            r = e.animated,
            i = e.tabPosition,
            o = e.rtl,
            a = e.destroyInactiveTabPane,
            s = wt(ak),
            l = s.prefixCls,
            c = s.tabs,
            u = r.tabPane,
            h = c.findIndex((function(e) {
              return e.key === n
            }));
          return Te("div", {
            className: jl("".concat(l, "-content-holder"))
          }, Te("div", {
            className: jl("".concat(l, "-content"), "".concat(l, "-content-").concat(i), Ih({}, "".concat(l, "-content-animated"), u)),
            style: h && u ? Ih({}, o ? "marginRight" : "marginLeft", "-".concat(h, "00%")) : null
          }, c.map((function(e) {
            return yn(e.node, {
              key: e.key,
              prefixCls: l,
              tabKey: e.key,
              id: t,
              animated: u,
              active: e.key === n,
              destroyInactiveTabPane: a
            })
          }))))
        }

        function mk(e) {
          var t = e.prefixCls,
            n = e.forceRender,
            r = e.className,
            i = e.style,
            o = e.id,
            a = e.active,
            s = e.animated,
            l = e.destroyInactiveTabPane,
            c = e.tabKey,
            u = e.children,
            h = Dp(dt(n), 2),
            p = h[0],
            d = h[1];
          gt((function() {
            a ? d(!0) : l && d(!1)
          }), [a, l]);
          var f = {};
          return a || (s ? (f.visibility = "hidden", f.height = 0, f.overflowY = "hidden") : f.display = "none"), Te("div", {
            id: o && "".concat(o, "-panel-").concat(c),
            role: "tabpanel",
            tabIndex: a ? 0 : -1,
            "aria-labelledby": o && "".concat(o, "-tab-").concat(c),
            "aria-hidden": !a,
            style: Uh(Uh({}, f), i),
            className: jl("".concat(t, "-tabpane"), a && "".concat(t, "-tabpane-active"), r)
          }, (a || p || n) && u)
        }
        var vk = ["id", "prefixCls", "className", "children", "direction", "activeKey", "defaultActiveKey", "editable", "animated", "tabPosition", "tabBarGutter", "tabBarStyle", "tabBarExtraContent", "locale", "moreIcon", "moreTransitionName",
            "destroyInactiveTabPane", "renderTabBar", "onChange", "onTabClick", "onTabScroll"
          ],
          _k = 0;

        function bk(e, t) {
          var n, r, i = e.id,
            o = e.prefixCls,
            a = void 0 === o ? "rc-tabs" : o,
            s = e.className,
            l = e.children,
            c = e.direction,
            u = e.activeKey,
            h = e.defaultActiveKey,
            p = e.editable,
            d = e.animated,
            f = void 0 === d ? {
              inkBar: !0,
              tabPane: !1
            } : d,
            g = e.tabPosition,
            m = void 0 === g ? "top" : g,
            v = e.tabBarGutter,
            _ = e.tabBarStyle,
            b = e.tabBarExtraContent,
            y = e.locale,
            w = e.moreIcon,
            x = e.moreTransitionName,
            k = e.destroyInactiveTabPane,
            C = e.renderTabBar,
            S = e.onChange,
            E = e.onTabClick,
            T = e.onTabScroll,
            O = Nh(e, vk),
            A = function(e) {
              return pb(e).map((function(e) {
                return bn(e) ? Uh(Uh({
                  key: void 0 !== e.key ? String(e.key) : void 0
                }, e.props), {}, {
                  node: e
                }) : null
              })).filter((function(e) {
                return e
              }))
            }(l),
            P = "rtl" === c;
          r = !1 === f ? {
            inkBar: !1,
            tabPane: !1
          } : !0 === f ? {
            inkBar: !0,
            tabPane: !0
          } : Uh({
            inkBar: !0,
            tabPane: !1
          }, "object" === Ch(f) ? f : {});
          var M = Dp(dt(!1), 2),
            D = M[0],
            I = M[1];
          gt((function() {
            I(db())
          }), []);
          var N = Dp(mb((function() {
              var e;
              return null === (e = A[0]) || void 0 === e ? void 0 : e.key
            }), {
              value: u,
              defaultValue: h
            }), 2),
            R = N[0],
            j = N[1],
            L = Dp(dt((function() {
              return A.findIndex((function(e) {
                return e.key === R
              }))
            })), 2),
            F = L[0],
            B = L[1];
          gt((function() {
            var e, t = A.findIndex((function(e) {
              return e.key === R
            })); - 1 === t && (t = Math.max(0, Math.min(F, A.length - 1)), j(null === (e = A[t]) || void 0 === e ? void 0 : e.key));
            B(t)
          }), [A.map((function(e) {
            return e.key
          })).join("_"), R, F]);
          var z = Dp(mb(null, {
              value: i
            }), 2),
            H = z[0],
            U = z[1],
            W = m;
          D && !["left", "right"].includes(m) && (W = "top"), gt((function() {
            i || (U("rc-tabs-".concat(_k)), _k += 1)
          }), []);
          var V, X = {
              id: H,
              activeKey: R,
              animated: r,
              tabPosition: W,
              rtl: P,
              mobile: D
            },
            G = Uh(Uh({}, X), {}, {
              editable: p,
              locale: y,
              moreIcon: w,
              moreTransitionName: x,
              tabBarGutter: v,
              onTabClick: function(e, t) {
                null == E || E(e, t);
                var n = e !== R;
                j(e), n && (null == S || S(e))
              },
              onTabScroll: T,
              extra: b,
              style: _,
              panes: l
            });
          return V = C ? C(G, fk) : Te(fk, G), Te(ak.Provider, {
            value: {
              tabs: A,
              prefixCls: a
            }
          }, Te("div", xh({
            ref: t,
            id: i,
            className: jl(a, "".concat(a, "-").concat(W), (n = {}, Ih(n, "".concat(a, "-mobile"), D), Ih(n, "".concat(a, "-editable"), p), Ih(n, "".concat(a, "-rtl"), P), n), s)
          }, O), V, Te(gk, xh({
            destroyInactiveTabPane: k
          }, X, {
            animated: r
          }))))
        }
        var yk = Ft(bk);
        yk.TabPane = mk;
        var wk = yk,
          xk = "DesignOperator-module_tabs__kDJ51",
          kk = "DesignOperator-module_app_parakeet_operator__lL4U1",
          Ck = "DesignOperator-module_tab_panel__cumuu";

        function Sk(e) {
          return !(!e.addonBefore && !e.addonAfter)
        }

        function Ek(e) {
          return !!(e.prefix || e.suffix || e.allowClear)
        }

        function Tk(e, t, n, r) {
          if (n) {
            var i = t;
            if ("click" === t.type) {
              var o = e.cloneNode(!0);
              return i = Object.create(t, {
                target: {
                  value: o
                },
                currentTarget: {
                  value: o
                }
              }), o.value = "", void n(i)
            }
            if (void 0 !== r) return i = Object.create(t, {
              target: {
                value: e
              },
              currentTarget: {
                value: e
              }
            }), e.value = r, void n(i);
            n(i)
          }
        }

        function Ok(e) {
          return null == e ? "" : String(e)
        }
        c(
        ".DesignOperator-module_parakeet_comp_tab__Ekj1e{display:flex;font-weight:600;margin-bottom:16px}.DesignOperator-module_tabs__kDJ51{border:none!important;border-radius:0 0 8px 8px}.DesignOperator-module_app_parakeet_operator__lL4U1{box-sizing:border-box}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-nav-list{background-color:hsla(0,0%,90%,.4);display:flex;padding:5px;width:100%}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab{background:none;border-radius:4px;display:flex;flex:1;height:30px;justify-content:center}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-active{background-color:#fff;color:#333}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-active .rc-tabs-tab-btn{color:#333}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-btn{align-items:center;color:rgba(51,51,51,.6);display:flex;font-size:16px;font-weight:500!important}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-ink-bar{display:none}.DesignOperator-module_tab_item_active__8Mzpg{border:none;color:#333;height:34px;position:relative}.DesignOperator-module_tab_panel__cumuu{background-color:#fdfdfd}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-disabled{flex:unset;margin:0 18px}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab:first-child{margin-right:22px}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab:nth-child(5){margin-left:22px}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab-disabled:hover{background-color:#fff}@media screen and (max-width:959px){.DesignOperator-module_tab_panel__cumuu{align-items:center;display:flex;height:auto;min-height:108px}.DesignOperator-module_tab_panel__cumuu>div{width:100%}.DesignOperator-module_app_parakeet_operator__lL4U1 .icon-custom{scale:.8}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-tab:first-of-type{flex:unset;margin:0 8px 0 3px}.DesignOperator-module_app_parakeet_operator__lL4U1 .rc-tabs-nav-list div:nth-last-child(2){flex:unset;margin:0 3px 0 8px}}");
        var Ak = function(e) {
            var t, n = e.inputElement,
              r = e.prefixCls,
              i = e.prefix,
              o = e.suffix,
              a = e.addonBefore,
              s = e.addonAfter,
              l = e.className,
              c = e.style,
              u = e.affixWrapperClassName,
              h = e.groupClassName,
              p = e.wrapperClassName,
              d = e.disabled,
              f = e.readOnly,
              g = e.focused,
              m = e.triggerFocus,
              v = e.allowClear,
              _ = e.value,
              b = e.handleReset,
              y = e.hidden,
              w = e.inputStyle,
              x = e.classes,
              k = vt(null),
              C = yn(n, {
                value: _,
                hidden: y,
                style: Uh(Uh({}, null === (t = n.props) || void 0 === t ? void 0 : t.style), w)
              });
            if (Ek(e)) {
              var S, E = "".concat(r, "-affix-wrapper"),
                T = jl(E, (Ih(S = {}, "".concat(E, "-disabled"), d), Ih(S, "".concat(E, "-focused"), g), Ih(S, "".concat(E, "-readonly"), f), Ih(S, "".concat(E, "-input-with-clear-btn"), o && v && _), S), !Sk(e) && l, u, null == x ? void 0 : x
                  .affixWrapper),
                O = (o || v) && Nn.createElement("span", {
                  className: "".concat(r, "-suffix")
                }, function() {
                  var e;
                  if (!v) return null;
                  var t = !d && !f && _,
                    n = "".concat(r, "-clear-icon"),
                    i = "object" === Ch(v) && null != v && v.clearIcon ? v.clearIcon : "✖";
                  return Nn.createElement("span", {
                    onClick: b,
                    onMouseDown: function(e) {
                      return e.preventDefault()
                    },
                    className: jl(n, (e = {}, Ih(e, "".concat(n, "-hidden"), !t), Ih(e, "".concat(n, "-has-suffix"), !!o), e)),
                    role: "button",
                    tabIndex: -1
                  }, i)
                }(), o);
              C = Nn.createElement("span", {
                className: T,
                style: c,
                hidden: !Sk(e) && y,
                onClick: function(e) {
                  var t;
                  null !== (t = k.current) && void 0 !== t && t.contains(e.target) && (null == m || m())
                },
                ref: k
              }, i && Nn.createElement("span", {
                className: "".concat(r, "-prefix")
              }, i), yn(n, {
                style: null != w ? w : null,
                value: _,
                hidden: null
              }), O)
            }
            if (Sk(e)) {
              var A = "".concat(r, "-group"),
                P = "".concat(A, "-addon"),
                M = jl("".concat(r, "-wrapper"), A, p, null == x ? void 0 : x.wrapper),
                D = jl("".concat(r, "-group-wrapper"), l, h, null == x ? void 0 : x.group);
              return Nn.createElement("span", {
                className: D,
                style: c,
                hidden: y
              }, Nn.createElement("span", {
                className: M
              }, a && Nn.createElement("span", {
                className: P
              }, a), yn(C, {
                style: null != w ? w : null,
                hidden: null
              }), s && Nn.createElement("span", {
                className: P
              }, s)))
            }
            return C
          },
          Pk = ["autoComplete", "onChange", "onFocus", "onBlur", "onPressEnter", "onKeyDown", "prefixCls", "disabled", "htmlSize", "className", "maxLength", "suffix", "showCount", "type", "inputClassName", "classes"],
          Mk = Ft((function(e, t) {
            var n = e.autoComplete,
              r = e.onChange,
              i = e.onFocus,
              o = e.onBlur,
              a = e.onPressEnter,
              s = e.onKeyDown,
              l = e.prefixCls,
              c = void 0 === l ? "rc-input" : l,
              u = e.disabled,
              h = e.htmlSize,
              p = e.className,
              d = e.maxLength,
              f = e.suffix,
              g = e.showCount,
              m = e.type,
              v = void 0 === m ? "text" : m,
              _ = e.inputClassName,
              b = e.classes,
              y = Nh(e, Pk),
              w = Dp(mb(e.defaultValue, {
                value: e.value
              }), 2),
              x = w[0],
              k = w[1],
              C = Dp(dt(!1), 2),
              S = C[0],
              E = C[1],
              T = vt(null),
              O = function(e) {
                T.current && function(e, t) {
                  if (e) {
                    e.focus(t);
                    var n = (t || {}).cursor;
                    if (n) {
                      var r = e.value.length;
                      switch (n) {
                        case "start":
                          e.setSelectionRange(0, 0);
                          break;
                        case "end":
                          e.setSelectionRange(r, r);
                          break;
                        default:
                          e.setSelectionRange(0, r)
                      }
                    }
                  }
                }(T.current, e)
              };
            _t(t, (function() {
              return {
                focus: O,
                blur: function() {
                  var e;
                  null === (e = T.current) || void 0 === e || e.blur()
                },
                setSelectionRange: function(e, t, n) {
                  var r;
                  null === (r = T.current) || void 0 === r || r.setSelectionRange(e, t, n)
                },
                select: function() {
                  var e;
                  null === (e = T.current) || void 0 === e || e.select()
                },
                input: T.current
              }
            })), gt((function() {
              E((function(e) {
                return (!e || !u) && e
              }))
            }), [u]);
            var A, P = function(t) {
                void 0 === e.value && k(t.target.value), T.current && Tk(T.current, t, r)
              },
              M = function(e) {
                a && "Enter" === e.key && a(e), null == s || s(e)
              },
              D = function(e) {
                E(!0), null == i || i(e)
              },
              I = function(e) {
                E(!1), null == o || o(e)
              };
            return Nn.createElement(Ak, xh({}, y, {
              prefixCls: c,
              className: p,
              inputElement: (A = $b(e, ["prefixCls", "onPressEnter", "addonBefore", "addonAfter", "prefix", "suffix", "allowClear", "defaultValue", "showCount", "affixWrapperClassName", "groupClassName", "inputClassName", "classes",
                "wrapperClassName", "htmlSize"
              ]), Nn.createElement("input", xh({
                autoComplete: n
              }, A, {
                onChange: P,
                onFocus: D,
                onBlur: I,
                onKeyDown: M,
                className: jl(c, Ih({}, "".concat(c, "-disabled"), u), _, null == b ? void 0 : b.input, !Sk(e) && !Ek(e) && p),
                ref: T,
                size: h,
                type: v
              }))),
              handleReset: function(e) {
                k(""), O(), T.current && Tk(T.current, e, r)
              },
              value: Ok(x),
              focused: S,
              triggerFocus: O,
              suffix: function() {
                var e = Number(d) > 0;
                if (f || g) {
                  var t = Ok(x),
                    n = zh(t).length,
                    r = "object" === Ch(g) ? g.formatter({
                      value: t,
                      count: n,
                      maxLength: d
                    }) : "".concat(n).concat(e ? " / ".concat(d) : "");
                  return Nn.createElement(Nn.Fragment, null, !!g && Nn.createElement("span", {
                    className: jl("".concat(c, "-show-count-suffix"), Ih({}, "".concat(c, "-show-count-has-suffix"), !!f))
                  }, r), f)
                }
                return null
              }(),
              disabled: u,
              classes: b
            }))
          })),
          Dk = Mk,
          Ik = "SizeOperator-module_input__lSSD5",
          Nk = "SizeOperator-module_suffix__kFdZc",
          Rk = "SizeOperator-module_input_controller__pl-h0",
          jk = "SizeOperator-module_label__4U5QN",
          Lk = "SizeOperator-module_tab_content__SYACz",
          Fk = "SizeOperator-module_tip__-z7-F",
          Bk = "SizeOperator-module_tab_content_item__yRWHu";
        c(
        '.SizeOperator-module_input__lSSD5{background:#fff;border:1px solid rgba(51,51,51,.12);border-radius:4px;display:flex;font-size:14px;height:33px;margin-left:12px;outline:none!important;padding:6px 24px 6px 12px}.SizeOperator-module_suffix__kFdZc{position:relative}.SizeOperator-module_suffix__kFdZc:after{color:rgba(51,51,51,.4);content:"px";display:block;font-size:16px;font-weight:400;line-height:16px;position:absolute;right:6px;top:6px}.SizeOperator-module_input_controller__pl-h0{width:88px}.SizeOperator-module_label__4U5QN{color:#333;font-size:15px;font-weight:400;line-height:130%;width:50px}.SizeOperator-module_tab_content__SYACz{padding:20px 24px}.SizeOperator-module_tip__-z7-F{color:rgba(51,51,51,.5);font-size:15px;font-weight:400;line-height:130%;margin-left:16px;text-align:center}.SizeOperator-module_tab_content_item__yRWHu{margin-top:12px}@media screen and (max-width:959px){.SizeOperator-module_tip__-z7-F{font-size:14px}.SizeOperator-module_tab_content__SYACz{padding:0 16px}.SizeOperator-module_input__lSSD5{margin-left:8px}.SizeOperator-module_tip__-z7-F{margin-left:12px}.SizeOperator-module_label__4U5QN{font-size:14px}.SizeOperator-module_suffix__kFdZc:after{top:7px}}');
        var zk = e => {
            var {
              onChange: t,
              defaultData: n
            } = e, [r, i] = dt({
              width: "",
              height: ""
            }), {
              formatMessage: o
            } = vo();
            gt((() => {
              i(n)
            }), [n]);
            var a = (e, t) => {
                i(h(h({}, r), {}, {
                  [e]: t.target.value
                }))
              },
              s = e => {
                var n = Math.max(Math.min(r[e], O), T),
                  o = h(h({}, r), {}, {
                    [e]: n
                  });
                i(o), t(o)
              };
            return Hl("div", {
              className: Lk,
              children: [Hl("div", {
                className: Xd,
                children: [Hl("span", {
                  className: jk,
                  children: o({
                    id: "width"
                  })
                }), Hl("div", {
                  className: Nk,
                  children: Hl(Dk, {
                    value: null == r ? void 0 : r.width,
                    className: jl([
                      [Ik],
                      [Rk]
                    ]),
                    maxLength: 4,
                    onChange: e => a("width", e),
                    onBlur: () => s("width")
                  })
                }), Hl("span", {
                  className: Fk,
                  children: [o({
                    id: "size_range"
                  }), ": ", T, "-", O, "px"]
                })]
              }), Hl("div", {
                className: jl([
                  [Xd],
                  [Bk]
                ]),
                children: [Hl("span", {
                  className: jk,
                  children: o({
                    id: "height"
                  })
                }), Hl("div", {
                  className: Nk,
                  children: Hl(Dk, {
                    value: null == r ? void 0 : r.height,
                    className: jl([
                      [Ik],
                      [Rk]
                    ]),
                    maxLength: 4,
                    onChange: e => a("height", e),
                    onBlur: () => s("height")
                  })
                }), Hl("span", {
                  className: Fk,
                  children: [o({
                    id: "size_range"
                  }), ": ", T, "-", O, "px"]
                })]
              })]
            })
          },
          Hk = Qe({
            min: 0,
            max: 0,
            direction: "ltr",
            step: 1,
            includedStart: 0,
            includedEnd: 0,
            tabIndex: 0,
            keyboard: !0
          });

        function Uk(e, t, n) {
          return (e - t) / (n - t)
        }

        function Wk(e, t, n, r) {
          var i = Uk(t, n, r),
            o = {};
          switch (e) {
            case "rtl":
              o.right = "".concat(100 * i, "%"), o.transform = "translateX(50%)";
              break;
            case "btt":
              o.bottom = "".concat(100 * i, "%"), o.transform = "translateY(50%)";
              break;
            case "ttb":
              o.top = "".concat(100 * i, "%"), o.transform = "translateY(-50%)";
              break;
            default:
              o.left = "".concat(100 * i, "%"), o.transform = "translateX(-50%)"
          }
          return o
        }

        function Vk(e, t) {
          return Array.isArray(e) ? e[t] : e
        }
        var Xk = ["prefixCls", "value", "valueIndex", "onStartMove", "style", "render", "dragging", "onOffsetChange"],
          Gk = Ft((function(e, t) {
            var n, r, i = e.prefixCls,
              o = e.value,
              a = e.valueIndex,
              s = e.onStartMove,
              l = e.style,
              c = e.render,
              u = e.dragging,
              h = e.onOffsetChange,
              p = Nh(e, Xk),
              d = wt(Hk),
              f = d.min,
              g = d.max,
              m = d.direction,
              v = d.disabled,
              _ = d.keyboard,
              b = d.range,
              y = d.tabIndex,
              w = d.ariaLabelForHandle,
              x = d.ariaLabelledByForHandle,
              k = d.ariaValueTextFormatterForHandle,
              C = "".concat(i, "-handle"),
              S = function(e) {
                v || s(e, a)
              },
              E = Wk(m, o, f, g),
              T = Te("div", xh({
                ref: t,
                className: jl(C, (n = {}, Ih(n, "".concat(C, "-").concat(a + 1), b), Ih(n, "".concat(C, "-dragging"), u), n)),
                style: Uh(Uh({}, E), l),
                onMouseDown: S,
                onTouchStart: S,
                onKeyDown: function(e) {
                  if (!v && _) {
                    var t = null;
                    switch (e.which || e.keyCode) {
                      case x_.LEFT:
                        t = "ltr" === m || "btt" === m ? -1 : 1;
                        break;
                      case x_.RIGHT:
                        t = "ltr" === m || "btt" === m ? 1 : -1;
                        break;
                      case x_.UP:
                        t = "ttb" !== m ? 1 : -1;
                        break;
                      case x_.DOWN:
                        t = "ttb" !== m ? -1 : 1;
                        break;
                      case x_.HOME:
                        t = "min";
                        break;
                      case x_.END:
                        t = "max";
                        break;
                      case x_.PAGE_UP:
                        t = 2;
                        break;
                      case x_.PAGE_DOWN:
                        t = -2
                    }
                    null !== t && (e.preventDefault(), h(t, a))
                  }
                },
                tabIndex: v ? null : Vk(y, a),
                role: "slider",
                "aria-valuemin": f,
                "aria-valuemax": g,
                "aria-valuenow": o,
                "aria-disabled": v,
                "aria-label": Vk(w, a),
                "aria-labelledby": Vk(x, a),
                "aria-valuetext": null === (r = Vk(k, a)) || void 0 === r ? void 0 : r(o)
              }, p));
            return c && (T = c(T, {
              index: a,
              prefixCls: i,
              value: o,
              dragging: u
            })), T
          })),
          Yk = Gk,
          qk = ["prefixCls", "style", "onStartMove", "onOffsetChange", "values", "handleRender", "draggingIndex"],
          Kk = Ft((function(e, t) {
            var n = e.prefixCls,
              r = e.style,
              i = e.onStartMove,
              o = e.onOffsetChange,
              a = e.values,
              s = e.handleRender,
              l = e.draggingIndex,
              c = Nh(e, qk),
              u = vt({});
            return _t(t, (function() {
              return {
                focus: function(e) {
                  var t;
                  null === (t = u.current[e]) || void 0 === t || t.focus()
                }
              }
            })), Te(Pe, null, a.map((function(e, t) {
              return Te(Yk, xh({
                ref: function(e) {
                  e ? u.current[t] = e : delete u.current[t]
                },
                dragging: l === t,
                prefixCls: n,
                style: Vk(r, t),
                key: t,
                value: e,
                valueIndex: t,
                onStartMove: i,
                onOffsetChange: o,
                render: s
              }, c))
            })))
          })),
          $k = Kk;

        function Zk(e) {
          var t = "touches" in e ? e.touches[0] : e;
          return {
            pageX: t.pageX,
            pageY: t.pageY
          }
        }

        function Jk(e) {
          var t = e.prefixCls,
            n = e.style,
            r = e.start,
            i = e.end,
            o = e.index,
            a = e.onStartMove,
            s = wt(Hk),
            l = s.direction,
            c = s.min,
            u = s.max,
            h = s.disabled,
            p = s.range,
            d = "".concat(t, "-track"),
            f = Uk(r, c, u),
            g = Uk(i, c, u),
            m = function(e) {
              !h && a && a(e, -1)
            },
            v = {};
          switch (l) {
            case "rtl":
              v.right = "".concat(100 * f, "%"), v.width = "".concat(100 * g - 100 * f, "%");
              break;
            case "btt":
              v.bottom = "".concat(100 * f, "%"), v.height = "".concat(100 * g - 100 * f, "%");
              break;
            case "ttb":
              v.top = "".concat(100 * f, "%"), v.height = "".concat(100 * g - 100 * f, "%");
              break;
            default:
              v.left = "".concat(100 * f, "%"), v.width = "".concat(100 * g - 100 * f, "%")
          }
          return Te("div", {
            className: jl(d, p && "".concat(d, "-").concat(o + 1)),
            style: Uh(Uh({}, v), n),
            onMouseDown: m,
            onTouchStart: m
          })
        }

        function Qk(e) {
          var t = e.prefixCls,
            n = e.style,
            r = e.values,
            i = e.startPoint,
            o = e.onStartMove,
            a = wt(Hk),
            s = a.included,
            l = a.range,
            c = a.min,
            u = bt((function() {
              if (!l) {
                if (0 === r.length) return [];
                var e = null != i ? i : c,
                  t = r[0];
                return [{
                  start: Math.min(e, t),
                  end: Math.max(e, t)
                }]
              }
              for (var n = [], o = 0; o < r.length - 1; o += 1) n.push({
                start: r[o],
                end: r[o + 1]
              });
              return n
            }), [r, l, i, c]);
          return s ? u.map((function(e, r) {
            var i = e.start,
              a = e.end;
            return Te(Jk, {
              index: r,
              prefixCls: t,
              style: Vk(n, r),
              start: i,
              end: a,
              key: r,
              onStartMove: o
            })
          })) : null
        }

        function eC(e) {
          var t = e.prefixCls,
            n = e.style,
            r = e.children,
            i = e.value,
            o = e.onClick,
            a = wt(Hk),
            s = a.min,
            l = a.max,
            c = a.direction,
            u = a.includedStart,
            h = a.includedEnd,
            p = a.included,
            d = "".concat(t, "-text"),
            f = Wk(c, i, s, l);
          return Te("span", {
            className: jl(d, Ih({}, "".concat(d, "-active"), p && u <= i && i <= h)),
            style: Uh(Uh({}, f), n),
            onMouseDown: function(e) {
              e.stopPropagation()
            },
            onClick: function() {
              o(i)
            }
          }, r)
        }

        function tC(e) {
          var t = e.prefixCls,
            n = e.marks,
            r = e.onClick,
            i = "".concat(t, "-mark");
          return n.length ? Te("div", {
            className: i
          }, n.map((function(e) {
            var t = e.value,
              n = e.style,
              o = e.label;
            return Te(eC, {
              key: t,
              prefixCls: i,
              style: n,
              value: t,
              onClick: r
            }, o)
          }))) : null
        }

        function nC(e) {
          var t = e.prefixCls,
            n = e.value,
            r = e.style,
            i = e.activeStyle,
            o = wt(Hk),
            a = o.min,
            s = o.max,
            l = o.direction,
            c = o.included,
            u = o.includedStart,
            h = o.includedEnd,
            p = "".concat(t, "-dot"),
            d = c && u <= n && n <= h,
            f = Uh(Uh({}, Wk(l, n, a, s)), "function" == typeof r ? r(n) : r);
          return d && (f = Uh(Uh({}, f), "function" == typeof i ? i(n) : i)), Te("span", {
            className: jl(p, Ih({}, "".concat(p, "-active"), d)),
            style: f
          })
        }

        function rC(e) {
          var t = e.prefixCls,
            n = e.marks,
            r = e.dots,
            i = e.style,
            o = e.activeStyle,
            a = wt(Hk),
            s = a.min,
            l = a.max,
            c = a.step,
            u = bt((function() {
              var e = new Set;
              if (n.forEach((function(t) {
                  e.add(t.value)
                })), r && null !== c)
                for (var t = s; t <= l;) e.add(t), t += c;
              return Array.from(e)
            }), [s, l, c, r, n]);
          return Te("div", {
            className: "".concat(t, "-step")
          }, u.map((function(e) {
            return Te(nC, {
              prefixCls: t,
              key: e,
              value: e,
              style: i,
              activeStyle: o
            })
          })))
        }
        var iC = Ft((function(e, t) {
            var n, r = e.prefixCls,
              i = void 0 === r ? "rc-slider" : r,
              o = e.className,
              a = e.style,
              s = e.disabled,
              l = void 0 !== s && s,
              c = e.keyboard,
              u = void 0 === c || c,
              h = e.autoFocus,
              p = e.onFocus,
              d = e.onBlur,
              f = e.min,
              g = void 0 === f ? 0 : f,
              m = e.max,
              v = void 0 === m ? 100 : m,
              _ = e.step,
              b = void 0 === _ ? 1 : _,
              y = e.value,
              w = e.defaultValue,
              x = e.range,
              k = e.count,
              C = e.onChange,
              S = e.onBeforeChange,
              E = e.onAfterChange,
              T = e.allowCross,
              O = void 0 === T || T,
              A = e.pushable,
              P = void 0 !== A && A,
              M = e.draggableTrack,
              D = e.reverse,
              I = e.vertical,
              N = e.included,
              R = void 0 === N || N,
              j = e.startPoint,
              L = e.trackStyle,
              F = e.handleStyle,
              B = e.railStyle,
              z = e.dotStyle,
              H = e.activeDotStyle,
              U = e.marks,
              W = e.dots,
              V = e.handleRender,
              X = e.tabIndex,
              G = void 0 === X ? 0 : X,
              Y = e.ariaLabelForHandle,
              q = e.ariaLabelledByForHandle,
              K = e.ariaValueTextFormatterForHandle,
              $ = vt(),
              Z = vt(),
              J = bt((function() {
                return I ? D ? "ttb" : "btt" : D ? "rtl" : "ltr"
              }), [D, I]),
              Q = bt((function() {
                return isFinite(g) ? g : 0
              }), [g]),
              ee = bt((function() {
                return isFinite(v) ? v : 100
              }), [v]),
              te = bt((function() {
                return null !== b && b <= 0 ? 1 : b
              }), [b]),
              ne = bt((function() {
                return !0 === P ? te : P >= 0 && P
              }), [P, te]),
              re = bt((function() {
                return Object.keys(U || {}).map((function(e) {
                  var t = U[e],
                    n = {
                      value: Number(e)
                    };
                  return t && "object" === Ch(t) && !bn(t) && ("label" in t || "style" in t) ? (n.style = t.style, n.label = t.label) : n.label = t, n
                })).filter((function(e) {
                  var t = e.label;
                  return t || "number" == typeof t
                })).sort((function(e, t) {
                  return e.value - t.value
                }))
              }), [U]),
              ie = function(e, t, n, r, i, o) {
                var a = yt((function(n) {
                    var r = isFinite(n) ? n : e;
                    return r = Math.min(t, n), Math.max(e, r)
                  }), [e, t]),
                  s = yt((function(r) {
                    if (null !== n) {
                      var i = e + Math.round((a(r) - e) / n) * n,
                        o = function(e) {
                          return (String(e).split(".")[1] || "").length
                        },
                        s = Math.max(o(n), o(t), o(e)),
                        l = Number(i.toFixed(s));
                      return e <= l && l <= t ? l : null
                    }
                    return null
                  }), [n, e, t, a]),
                  l = yt((function(i) {
                    var o = a(i),
                      l = r.map((function(e) {
                        return e.value
                      }));
                    null !== n && l.push(s(i)), l.push(e, t);
                    var c = l[0],
                      u = t - e;
                    return l.forEach((function(e) {
                      var t = Math.abs(o - e);
                      t <= u && (c = e, u = t)
                    })), c
                  }), [e, t, r, n, a, s]),
                  c = function i(o, a, l) {
                    var c = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "unit";
                    if ("number" == typeof a) {
                      var u, h = o[l],
                        p = h + a,
                        d = [];
                      r.forEach((function(e) {
                        d.push(e.value)
                      })), d.push(e, t), d.push(s(h));
                      var f = a > 0 ? 1 : -1;
                      "unit" === c ? d.push(s(h + f * n)) : d.push(s(p)), d = d.filter((function(e) {
                        return null !== e
                      })).filter((function(e) {
                        return a < 0 ? e <= h : e >= h
                      })), "unit" === c && (d = d.filter((function(e) {
                        return e !== h
                      })));
                      var g = "unit" === c ? h : p;
                      u = d[0];
                      var m = Math.abs(u - g);
                      if (d.forEach((function(e) {
                          var t = Math.abs(e - g);
                          t < m && (u = e, m = t)
                        })), void 0 === u) return a < 0 ? e : t;
                      if ("dist" === c) return u;
                      if (Math.abs(a) > 1) {
                        var v = zh(o);
                        return v[l] = u, i(v, a - f, l, c)
                      }
                      return u
                    }
                    return "min" === a ? e : "max" === a ? t : void 0
                  },
                  u = function(e, t, n) {
                    var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "unit",
                      i = e[n],
                      o = c(e, t, n, r);
                    return {
                      value: o,
                      changed: o !== i
                    }
                  },
                  h = function(e) {
                    return null === o && 0 === e || "number" == typeof o && e < o
                  };
                return [l, function(e, t, n) {
                  var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : "unit",
                    a = e.map(l),
                    s = a[n],
                    p = c(a, t, n, r);
                  if (a[n] = p, !1 === i) {
                    var d = o || 0;
                    n > 0 && a[n - 1] !== s && (a[n] = Math.max(a[n], a[n - 1] + d)), n < a.length - 1 && a[n + 1] !== s && (a[n] = Math.min(a[n], a[n + 1] - d))
                  } else if ("number" == typeof o || null === o) {
                    for (var f = n + 1; f < a.length; f += 1)
                      for (var g = !0; h(a[f] - a[f - 1]) && g;) {
                        var m = u(a, 1, f);
                        a[f] = m.value, g = m.changed
                      }
                    for (var v = n; v > 0; v -= 1)
                      for (var _ = !0; h(a[v] - a[v - 1]) && _;) {
                        var b = u(a, -1, v - 1);
                        a[v - 1] = b.value, _ = b.changed
                      }
                    for (var y = a.length - 1; y > 0; y -= 1)
                      for (var w = !0; h(a[y] - a[y - 1]) && w;) {
                        var x = u(a, -1, y - 1);
                        a[y - 1] = x.value, w = x.changed
                      }
                    for (var k = 0; k < a.length - 1; k += 1)
                      for (var C = !0; h(a[k + 1] - a[k]) && C;) {
                        var S = u(a, 1, k + 1);
                        a[k + 1] = S.value, C = S.changed
                      }
                  }
                  return {
                    value: a[n],
                    values: a
                  }
                }]
              }(Q, ee, te, re, O, ne),
              oe = Dp(ie, 2),
              ae = oe[0],
              se = oe[1],
              le = Dp(mb(w, {
                value: y
              }), 2),
              ce = le[0],
              ue = le[1],
              he = bt((function() {
                var e = null == ce ? [] : Array.isArray(ce) ? ce : [ce],
                  t = Dp(e, 1)[0],
                  n = null === ce ? [] : [void 0 === t ? Q : t];
                if (x) {
                  if (n = zh(e), k || void 0 === ce) {
                    var r = k >= 0 ? k + 1 : 2;
                    for (n = n.slice(0, r); n.length < r;) {
                      var i;
                      n.push(null !== (i = n[n.length - 1]) && void 0 !== i ? i : Q)
                    }
                  }
                  n.sort((function(e, t) {
                    return e - t
                  }))
                }
                return n.forEach((function(e, t) {
                  n[t] = ae(e)
                })), n
              }), [ce, x, Q, k, ae]),
              pe = vt(he);
            pe.current = he;
            var de = function(e) {
                return x ? e : e[0]
              },
              fe = function(e) {
                var t = zh(e).sort((function(e, t) {
                  return e - t
                }));
                C && !zw(t, pe.current, !0) && C(de(t)), ue(t)
              },
              ge = function(e) {
                if (!l) {
                  var t = 0,
                    n = ee - Q;
                  he.forEach((function(r, i) {
                    var o = Math.abs(e - r);
                    o <= n && (n = o, t = i)
                  }));
                  var r = zh(he);
                  r[t] = e, x && !he.length && void 0 === k && r.push(e), null == S || S(de(r)), fe(r), null == E || E(de(r))
                }
              },
              me = Dp(dt(null), 2),
              ve = me[0],
              _e = me[1];
            gt((function() {
              if (null !== ve) {
                var e = he.indexOf(ve);
                e >= 0 && $.current.focus(e)
              }
              _e(null)
            }), [ve]);
            var be = bt((function() {
                return (!M || null !== te) && M
              }), [M, te]),
              ye = function(e, t, n, r, i, o, a, s, l) {
                var c = Dp(dt(null), 2),
                  u = c[0],
                  h = c[1],
                  p = Dp(dt(-1), 2),
                  d = p[0],
                  f = p[1],
                  g = Dp(dt(n), 2),
                  m = g[0],
                  v = g[1],
                  _ = Dp(dt(n), 2),
                  b = _[0],
                  y = _[1],
                  w = vt(null),
                  x = vt(null);
                gt((function() {
                  -1 === d && v(n)
                }), [n, d]), gt((function() {
                  return function() {
                    document.removeEventListener("mousemove", w.current), document.removeEventListener("mouseup", x.current), document.removeEventListener("touchmove", w.current), document.removeEventListener("touchend", x.current)
                  }
                }), []);
                var k = function(e, t) {
                    m.some((function(t, n) {
                      return t !== e[n]
                    })) && (void 0 !== t && h(t), v(e), a(e))
                  },
                  C = function(e, t) {
                    if (-1 === e) {
                      var n = b[0],
                        a = b[b.length - 1],
                        s = r - n,
                        c = i - a,
                        u = t * (i - r);
                      u = Math.max(u, s), u = Math.min(u, c);
                      var h = o(n + u);
                      u = h - n;
                      var p = b.map((function(e) {
                        return e + u
                      }));
                      k(p)
                    } else {
                      var d = (i - r) * t,
                        f = zh(m);
                      f[e] = b[e];
                      var g = l(f, d, e, "dist");
                      k(g.values, g.value)
                    }
                  },
                  S = vt(C);
                S.current = C;
                var E = bt((function() {
                  var e = zh(n).sort((function(e, t) {
                      return e - t
                    })),
                    t = zh(m).sort((function(e, t) {
                      return e - t
                    }));
                  return e.every((function(e, n) {
                    return e === t[n]
                  })) ? m : n
                }), [n, m]);
                return [d, u, E, function(r, i) {
                  r.stopPropagation();
                  var o = n[i];
                  f(i), h(o), y(n);
                  var a = Zk(r),
                    l = a.pageX,
                    c = a.pageY,
                    u = function(n) {
                      n.preventDefault();
                      var r, o = Zk(n),
                        a = o.pageX,
                        s = o.pageY,
                        u = a - l,
                        h = s - c,
                        p = e.current.getBoundingClientRect(),
                        d = p.width,
                        f = p.height;
                      switch (t) {
                        case "btt":
                          r = -h / f;
                          break;
                        case "ttb":
                          r = h / f;
                          break;
                        case "rtl":
                          r = -u / d;
                          break;
                        default:
                          r = u / d
                      }
                      S.current(i, r)
                    },
                    p = function e(t) {
                      t.preventDefault(), document.removeEventListener("mouseup", e), document.removeEventListener("mousemove", u), document.removeEventListener("touchend", e), document.removeEventListener("touchmove", u), w.current =
                        null, x.current = null, f(-1), s()
                    };
                  document.addEventListener("mouseup", p), document.addEventListener("mousemove", u), document.addEventListener("touchend", p), document.addEventListener("touchmove", u), w.current = u, x.current = p
                }]
              }(Z, J, he, Q, ee, ae, fe, (function() {
                null == E || E(de(pe.current))
              }), se),
              we = Dp(ye, 4),
              xe = we[0],
              ke = we[1],
              Ce = we[2],
              Se = we[3],
              Ee = function(e, t) {
                Se(e, t), null == S || S(de(pe.current))
              },
              Oe = -1 !== xe;
            gt((function() {
              if (!Oe) {
                var e = he.lastIndexOf(ke);
                $.current.focus(e)
              }
            }), [Oe]);
            var Ae = bt((function() {
                return zh(Ce).sort((function(e, t) {
                  return e - t
                }))
              }), [Ce]),
              Pe = Dp(bt((function() {
                return x ? [Ae[0], Ae[Ae.length - 1]] : [Q, Ae[0]]
              }), [Ae, x, Q]), 2),
              Me = Pe[0],
              De = Pe[1];
            _t(t, (function() {
              return {
                focus: function() {
                  $.current.focus(0)
                },
                blur: function() {
                  var e = document.activeElement;
                  Z.current.contains(e) && (null == e || e.blur())
                }
              }
            })), gt((function() {
              h && $.current.focus(0)
            }), []);
            var Ie = bt((function() {
              return {
                min: Q,
                max: ee,
                direction: J,
                disabled: l,
                keyboard: u,
                step: te,
                included: R,
                includedStart: Me,
                includedEnd: De,
                range: x,
                tabIndex: G,
                ariaLabelForHandle: Y,
                ariaLabelledByForHandle: q,
                ariaValueTextFormatterForHandle: K
              }
            }), [Q, ee, J, l, u, te, R, Me, De, x, G, Y, q, K]);
            return Te(Hk.Provider, {
              value: Ie
            }, Te("div", {
              ref: Z,
              className: jl(i, o, (n = {}, Ih(n, "".concat(i, "-disabled"), l), Ih(n, "".concat(i, "-vertical"), I), Ih(n, "".concat(i, "-horizontal"), !I), Ih(n, "".concat(i, "-with-marks"), re.length), n)),
              style: a,
              onMouseDown: function(e) {
                e.preventDefault();
                var t, n = Z.current.getBoundingClientRect(),
                  r = n.width,
                  i = n.height,
                  o = n.left,
                  a = n.top,
                  s = n.bottom,
                  l = n.right,
                  c = e.clientX,
                  u = e.clientY;
                switch (J) {
                  case "btt":
                    t = (s - u) / i;
                    break;
                  case "ttb":
                    t = (u - a) / i;
                    break;
                  case "rtl":
                    t = (l - c) / r;
                    break;
                  default:
                    t = (c - o) / r
                }
                ge(ae(Q + t * (ee - Q)))
              }
            }, Te("div", {
              className: "".concat(i, "-rail"),
              style: B
            }), Te(Qk, {
              prefixCls: i,
              style: L,
              values: Ae,
              startPoint: j,
              onStartMove: be ? Ee : null
            }), Te(rC, {
              prefixCls: i,
              marks: re,
              dots: W,
              style: z,
              activeStyle: H
            }), Te($k, {
              ref: $,
              prefixCls: i,
              style: F,
              values: Ce,
              draggingIndex: xe,
              onStartMove: Ee,
              onOffsetChange: function(e, t) {
                if (!l) {
                  var n = se(he, e, t);
                  null == S || S(de(he)), fe(n.values), null == E || E(de(n.values)), _e(n.value)
                }
              },
              onFocus: p,
              onBlur: d,
              handleRender: V
            }), Te(tC, {
              prefixCls: i,
              marks: re,
              onClick: ge
            })))
          })),
          oC = iC,
          aC = "RotateOperator-module_operate_rotate__DbNrD",
          sC = "RotateOperator-module_slider__RyqmW";
        c(
        ".RotateOperator-module_operate_rotate__DbNrD{display:flex;height:118px;padding:32px 16px 28px}.RotateOperator-module_slider__RyqmW{margin:32px 33px 0 22px}.RotateOperator-module_slider__RyqmW .rc-slider-handle{box-shadow:0 0 0 5px #fff!important;height:20px;margin-top:-8px;opacity:1;position:relative;width:20px;z-index:10}.RotateOperator-module_slider__RyqmW .rc-slider-handle:after{background:#fff;border-radius:4px;box-shadow:0 2px 10px rgba(34,34,34,.06);color:#292929;content:attr(aria-valuenow);display:none;font-size:16px;font-weight:400;left:50%;line-height:120%;padding:4px 10px;position:absolute;top:-37px;transform:translateX(-50%)}.RotateOperator-module_slider__RyqmW .rc-slider-handle-dragging,.RotateOperator-module_slider__RyqmW .rc-slider-handle:active{box-shadow:0 0 0 5px #fff!important}.RotateOperator-module_slider__RyqmW .rc-slider-handle:active:after{display:block!important}.RotateOperator-module_slider__RyqmW .rc-slider-mark{top:-34px;z-index:5}.RotateOperator-module_slider__RyqmW .rc-slider-mark-text{color:#333;font-size:15px;font-weight:500;line-height:120%}.RotateOperator-module_slider__RyqmW .rc-slider-step{background:hsla(0,0%,90%,.8)}.RotateOperator-module_slider__RyqmW .rc-slider-dot:nth-child(3){background-color:#333!important;z-index:3}@media screen and (max-width:959px){.RotateOperator-module_slider__RyqmW .rc-slider-mark-text{font-size:14px}.RotateOperator-module_operate_rotate__DbNrD{height:108px;padding:32px 2px 20px}.RotateOperator-module_slider__RyqmW .rc-slider-mark{top:-38px;z-index:5}.RotateOperator-module_slider__RyqmW{margin:32px 22px 0}}");
        c(
        ".rc-slider{border-radius:6px;height:14px;padding:5px 0;position:relative;touch-action:none;width:100%}.rc-slider,.rc-slider *{-webkit-tap-highlight-color:rgba(0,0,0,0);box-sizing:border-box}.rc-slider-rail{background-color:#e9e9e9;width:100%}.rc-slider-rail,.rc-slider-track{border-radius:6px;height:4px;position:absolute}.rc-slider-track{background-color:#abe2fb}.rc-slider-handle{background-color:#fff;border:2px solid #96dbfa;border-radius:50%;cursor:pointer;cursor:-webkit-grab;cursor:grab;height:14px;margin-top:-5px;opacity:.8;position:absolute;touch-action:pan-x;width:14px}.rc-slider-handle-dragging.rc-slider-handle-dragging.rc-slider-handle-dragging{border-color:#57c5f7;box-shadow:0 0 0 5px #96dbfa}.rc-slider-handle:focus{box-shadow:none;outline:none}.rc-slider-handle.focus-visible{border-color:#2db7f5;box-shadow:0 0 0 3px #96dbfa}.rc-slider-handle:focus-visible{border-color:#2db7f5;box-shadow:0 0 0 3px #96dbfa}.rc-slider-handle-click-focused:focus{border-color:#96dbfa;box-shadow:unset}.rc-slider-handle:hover{border-color:#57c5f7}.rc-slider-handle:active{border-color:#57c5f7;box-shadow:0 0 5px #57c5f7;cursor:-webkit-grabbing;cursor:grabbing}.rc-slider-mark{font-size:12px;left:0;position:absolute;top:18px;width:100%}.rc-slider-mark-text{color:#999;cursor:pointer;display:inline-block;position:absolute;text-align:center;vertical-align:middle}.rc-slider-mark-text-active{color:#666}.rc-slider-step{background:transparent;height:4px;pointer-events:none;position:absolute;width:100%}.rc-slider-dot{background-color:#fff;border:2px solid #e9e9e9;border-radius:50%;bottom:-2px;cursor:pointer;height:8px;position:absolute;vertical-align:middle;width:8px}.rc-slider-dot-active{border-color:#96dbfa}.rc-slider-dot-reverse{margin-right:-4px}.rc-slider-disabled{background-color:#e9e9e9}.rc-slider-disabled .rc-slider-track{background-color:#ccc}.rc-slider-disabled .rc-slider-dot,.rc-slider-disabled .rc-slider-handle{background-color:#fff;border-color:#ccc;box-shadow:none;cursor:not-allowed}.rc-slider-disabled .rc-slider-dot,.rc-slider-disabled .rc-slider-mark-text{cursor:not-allowed!important}.rc-slider-vertical{height:100%;padding:0 5px;width:14px}.rc-slider-vertical .rc-slider-rail{height:100%;width:4px}.rc-slider-vertical .rc-slider-track{bottom:0;left:5px;width:4px}.rc-slider-vertical .rc-slider-handle{margin-left:-5px;margin-top:0;touch-action:pan-y}.rc-slider-vertical .rc-slider-mark{height:100%;left:18px;top:0}.rc-slider-vertical .rc-slider-step{height:100%;width:4px}.rc-slider-vertical .rc-slider-dot{margin-left:-2px}.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-enter{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused;display:block!important}.rc-slider-tooltip-zoom-down-leave{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused;display:block!important}.rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active,.rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active{animation-name:rcSliderTooltipZoomDownIn;animation-play-state:running}.rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active{animation-name:rcSliderTooltipZoomDownOut;animation-play-state:running}.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-enter{animation-timing-function:cubic-bezier(.23,1,.32,1);transform:scale(0)}.rc-slider-tooltip-zoom-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes rcSliderTooltipZoomDownIn{0%{opacity:0;transform:scale(0);transform-origin:50% 100%}to{transform:scale(1);transform-origin:50% 100%}}@keyframes rcSliderTooltipZoomDownOut{0%{transform:scale(1);transform-origin:50% 100%}to{opacity:0;transform:scale(0);transform-origin:50% 100%}}.rc-slider-tooltip{left:-9999px;position:absolute;top:-9999px;visibility:visible}.rc-slider-tooltip,.rc-slider-tooltip *{-webkit-tap-highlight-color:rgba(0,0,0,0);box-sizing:border-box}.rc-slider-tooltip-hidden{display:none}.rc-slider-tooltip-placement-top{padding:4px 0 8px}.rc-slider-tooltip-inner{background-color:#6c6c6c;border-radius:6px;box-shadow:0 0 4px #d9d9d9;color:#fff;font-size:12px;height:24px;line-height:1;min-width:24px;padding:6px 2px;text-align:center;text-decoration:none}.rc-slider-tooltip-arrow{border-color:transparent;border-style:solid;height:0;position:absolute;width:0}.rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow{border-top-color:#6c6c6c;border-width:4px 4px 0;bottom:4px;left:50%;margin-left:-4px}");
        var lC, cC, uC, hC, pC, dC, fC, gC, mC, vC = {
            "-180": -180,
            "-90": -90,
            0: 0,
            90: 90,
            180: 180
          },
          _C = e => {
            var {
              onChange: t,
              defaultValue: n
            } = e, [r, i] = dt(0), o = vt(null);
            gt((() => {
              i(n)
            }), [n]);
            return Hl("div", {
              className: aC,
              children: Hl(oC, {
                ref: o,
                className: sC,
                value: r,
                min: -180,
                max: 180,
                dotStyle: e => e >= r && r <= 0 && e < 0 || e < r && r > 0 && e > 0 ? {
                  borderColor: "#000"
                } : {
                  background: "#D4D4D4",
                  border: "none"
                },
                defaultValue: n,
                handleStyle: {
                  backgroundColor: "#fff",
                  borderColor: "#333"
                },
                marks: vC,
                trackStyle: {
                  background: "#333333",
                  zIndex: 2
                },
                startPoint: 0,
                onChange: e => {
                  i(e), t(e)
                }
              })
            })
          },
          bC = {
            exports: {}
          },
          yC = {},
          wC = {},
          xC = {},
          kC = [],
          CC = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,
          SC = Array.isArray;

        function EC(e, t) {
          for (var n in t) e[n] = t[n];
          return e
        }

        function TC(e) {
          var t = e.parentNode;
          t && t.removeChild(e)
        }

        function OC(e, t, n) {
          var r, i, o, a = {};
          for (o in t) "key" == o ? r = t[o] : "ref" == o ? i = t[o] : a[o] = t[o];
          if (arguments.length > 2 && (a.children = arguments.length > 3 ? lC.call(arguments, 2) : n), "function" == typeof e && null != e.defaultProps)
            for (o in e.defaultProps) void 0 === a[o] && (a[o] = e.defaultProps[o]);
          return AC(e, a, r, i, null)
        }

        function AC(e, t, n, r, i) {
          var o = {
            type: e,
            props: t,
            key: n,
            ref: r,
            __k: null,
            __: null,
            __b: 0,
            __e: null,
            __d: void 0,
            __c: null,
            __h: null,
            constructor: void 0,
            __v: null == i ? ++uC : i
          };
          return null == i && null != cC.vnode && cC.vnode(o), o
        }

        function PC(e) {
          return e.children
        }

        function MC(e, t) {
          this.props = e, this.context = t
        }

        function DC(e, t) {
          if (null == t) return e.__ ? DC(e.__, e.__.__k.indexOf(e) + 1) : null;
          for (var n; t < e.__k.length; t++)
            if (null != (n = e.__k[t]) && null != n.__e) return n.__e;
          return "function" == typeof e.type ? DC(e) : null
        }

        function IC(e) {
          var t, n;
          if (null != (e = e.__) && null != e.__c) {
            for (e.__e = e.__c.base = null, t = 0; t < e.__k.length; t++)
              if (null != (n = e.__k[t]) && null != n.__e) {
                e.__e = e.__c.base = n.__e;
                break
              } return IC(e)
          }
        }

        function NC(e) {
          (!e.__d && (e.__d = !0) && pC.push(e) && !RC.__r++ || dC !== cC.debounceRendering) && ((dC = cC.debounceRendering) || fC)(RC)
        }

        function RC() {
          var e, t, n, r, i, o, a, s, l;
          for (pC.sort(gC); e = pC.shift();) e.__d && (t = pC.length, r = void 0, i = void 0, o = void 0, s = (a = (n = e).__v).__e, (l = n.__P) && (r = [], i = [], (o = EC({}, a)).__v = a.__v + 1, VC(l, a, o, n.__n, void 0 !== l.ownerSVGElement,
            null != a.__h ? [s] : null, r, null == s ? DC(a) : s, a.__h, i), XC(r, a, i), a.__e != s && IC(a)), pC.length > t && pC.sort(gC));
          RC.__r = 0
        }

        function jC(e, t, n, r, i, o, a, s, l, c, u) {
          var h, p, d, f, g, m, v, _, b, y, w = 0,
            x = r && r.__k || kC,
            k = x.length,
            C = k,
            S = t.length;
          for (n.__k = [], h = 0; h < S; h++) null != (f = n.__k[h] = null == (f = t[h]) || "boolean" == typeof f || "function" == typeof f ? null : "string" == typeof f || "number" == typeof f || "bigint" == typeof f ? AC(null, f, null, null,
            f) : SC(f) ? AC(PC, {
              children: f
            }, null, null, null) : f.__b > 0 ? AC(f.type, f.props, f.key, f.ref ? f.ref : null, f.__v) : f) && (f.__ = n, f.__b = n.__b + 1, -1 === (_ = BC(f, x, v = h + w, C)) ? d = xC : (d = x[_] || xC, x[_] = void 0, C--), VC(e, f, d, i, o,
            a, s, l, c, u), g = f.__e, (p = f.ref) && d.ref != p && (d.ref && YC(d.ref, null, f), u.push(p, f.__c || g, f)), null != g && (null == m && (m = g), y = !(b = d === xC || null === d.__v) && _ === v, b ? -1 == _ && w-- : _ !== v &&
            (_ === v + 1 ? (w++, y = !0) : _ > v ? C > S - v ? (w += _ - v, y = !0) : w-- : w = _ < v && _ == v - 1 ? _ - v : 0), v = h + w, y = y || _ == h && !b, "function" != typeof f.type || _ === v && d.__k !== f.__k ? "function" ==
            typeof f.type || y ? void 0 !== f.__d ? (l = f.__d, f.__d = void 0) : l = g.nextSibling : l = FC(e, g, l) : l = LC(f, l, e), "function" == typeof n.type && (n.__d = l)));
          for (n.__e = m, h = k; h--;) null != x[h] && ("function" == typeof n.type && null != x[h].__e && x[h].__e == n.__d && (n.__d = x[h].__e.nextSibling), qC(x[h], x[h]))
        }

        function LC(e, t, n) {
          for (var r, i = e.__k, o = 0; i && o < i.length; o++)(r = i[o]) && (r.__ = e, t = "function" == typeof r.type ? LC(r, t, n) : FC(n, r.__e, t));
          return t
        }

        function FC(e, t, n) {
          return null == n || n.parentNode !== e ? e.insertBefore(t, null) : t == n && null != t.parentNode || e.insertBefore(t, n), t.nextSibling
        }

        function BC(e, t, n, r) {
          var i = e.key,
            o = e.type,
            a = n - 1,
            s = n + 1,
            l = t[n];
          if (null === l || l && i == l.key && o === l.type) return n;
          if (r > (null != l ? 1 : 0))
            for (; a >= 0 || s < t.length;) {
              if (a >= 0) {
                if ((l = t[a]) && i == l.key && o === l.type) return a;
                a--
              }
              if (s < t.length) {
                if ((l = t[s]) && i == l.key && o === l.type) return s;
                s++
              }
            }
          return -1
        }

        function zC(e, t, n) {
          "-" === t[0] ? e.setProperty(t, null == n ? "" : n) : e[t] = null == n ? "" : "number" != typeof n || CC.test(t) ? n : n + "px"
        }

        function HC(e, t, n, r, i) {
          var o;
          e: if ("style" === t)
            if ("string" == typeof n) e.style.cssText = n;
            else {
              if ("string" == typeof r && (e.style.cssText = r = ""), r)
                for (t in r) n && t in n || zC(e.style, t, "");
              if (n)
                for (t in n) r && n[t] === r[t] || zC(e.style, t, n[t])
            }
          else if ("o" === t[0] && "n" === t[1]) o = t !== (t = t.replace(/Capture$/, "")), t = t.toLowerCase() in e ? t.toLowerCase().slice(2) : t.slice(2), e.l || (e.l = {}), e.l[t + o] = n, n ? r || e.addEventListener(t, o ? WC : UC, o) : e
            .removeEventListener(t, o ? WC : UC, o);
          else if ("dangerouslySetInnerHTML" !== t) {
            if (i) t = t.replace(/xlink(H|:h)/, "h").replace(/sName$/, "s");
            else if ("width" !== t && "height" !== t && "href" !== t && "list" !== t && "form" !== t && "tabIndex" !== t && "download" !== t && "rowSpan" !== t && "colSpan" !== t && t in e) try {
              e[t] = null == n ? "" : n;
              break e
            } catch (e) {}
            "function" == typeof n || (null == n || !1 === n && "-" !== t[4] ? e.removeAttribute(t) : e.setAttribute(t, n))
          }
        }

        function UC(e) {
          return this.l[e.type + !1](cC.event ? cC.event(e) : e)
        }

        function WC(e) {
          return this.l[e.type + !0](cC.event ? cC.event(e) : e)
        }

        function VC(e, t, n, r, i, o, a, s, l, c) {
          var u, h, p, d, f, g, m, v, _, b, y, w, x, k, C, S = t.type;
          if (void 0 !== t.constructor) return null;
          null != n.__h && (l = n.__h, s = t.__e = n.__e, t.__h = null, o = [s]), (u = cC.__b) && u(t);
          try {
            e: if ("function" == typeof S) {
              if (v = t.props, _ = (u = S.contextType) && r[u.__c], b = u ? _ ? _.props.value : u.__ : r, n.__c ? m = (h = t.__c = n.__c).__ = h.__E : ("prototype" in S && S.prototype.render ? t.__c = h = new S(v, b) : (t.__c = h = new MC(v,
                  b), h.constructor = S, h.render = KC), _ && _.sub(h), h.props = v, h.state || (h.state = {}), h.context = b, h.__n = r, p = h.__d = !0, h.__h = [], h._sb = []), null == h.__s && (h.__s = h.state), null != S
                .getDerivedStateFromProps && (h.__s == h.state && (h.__s = EC({}, h.__s)), EC(h.__s, S.getDerivedStateFromProps(v, h.__s))), d = h.props, f = h.state, h.__v = t, p) null == S.getDerivedStateFromProps && null != h
                .componentWillMount && h.componentWillMount(), null != h.componentDidMount && h.__h.push(h.componentDidMount);
              else {
                if (null == S.getDerivedStateFromProps && v !== d && null != h.componentWillReceiveProps && h.componentWillReceiveProps(v, b), !h.__e && (null != h.shouldComponentUpdate && !1 === h.shouldComponentUpdate(v, h.__s, b) || t
                    .__v === n.__v)) {
                  for (t.__v !== n.__v && (h.props = v, h.state = h.__s, h.__d = !1), t.__e = n.__e, t.__k = n.__k, t.__k.forEach((function(e) {
                      e && (e.__ = t)
                    })), y = 0; y < h._sb.length; y++) h.__h.push(h._sb[y]);
                  h._sb = [], h.__h.length && a.push(h);
                  break e
                }
                null != h.componentWillUpdate && h.componentWillUpdate(v, h.__s, b), null != h.componentDidUpdate && h.__h.push((function() {
                  h.componentDidUpdate(d, f, g)
                }))
              }
              if (h.context = b, h.props = v, h.__P = e, h.__e = !1, w = cC.__r, x = 0, "prototype" in S && S.prototype.render) {
                for (h.state = h.__s, h.__d = !1, w && w(t), u = h.render(h.props, h.state, h.context), k = 0; k < h._sb.length; k++) h.__h.push(h._sb[k]);
                h._sb = []
              } else
                do {
                  h.__d = !1, w && w(t), u = h.render(h.props, h.state, h.context), h.state = h.__s
                } while (h.__d && ++x < 25);
              h.state = h.__s, null != h.getChildContext && (r = EC(EC({}, r), h.getChildContext())), p || null == h.getSnapshotBeforeUpdate || (g = h.getSnapshotBeforeUpdate(d, f)), jC(e, SC(C = null != u && u.type === PC && null == u.key ? u
                .props.children : u) ? C : [C], t, n, r, i, o, a, s, l, c), h.base = t.__e, t.__h = null, h.__h.length && a.push(h), m && (h.__E = h.__ = null)
            } else null == o && t.__v === n.__v ? (t.__k = n.__k, t.__e = n.__e) : t.__e = GC(n.__e, t, n, r, i, o, a, l, c);
            (u = cC.diffed) && u(t)
          }
          catch (e) {
            t.__v = null, (l || null != o) && (t.__e = s, t.__h = !!l, o[o.indexOf(s)] = null), cC.__e(e, t, n)
          }
        }

        function XC(e, t, n) {
          for (var r = 0; r < n.length; r++) YC(n[r], n[++r], n[++r]);
          cC.__c && cC.__c(t, e), e.some((function(t) {
            try {
              e = t.__h, t.__h = [], e.some((function(e) {
                e.call(t)
              }))
            } catch (e) {
              cC.__e(e, t.__v)
            }
          }))
        }

        function GC(e, t, n, r, i, o, a, s, l) {
          var c, u, h, p = n.props,
            d = t.props,
            f = t.type,
            g = 0;
          if ("svg" === f && (i = !0), null != o)
            for (; g < o.length; g++)
              if ((c = o[g]) && "setAttribute" in c == !!f && (f ? c.localName === f : 3 === c.nodeType)) {
                e = c, o[g] = null;
                break
              } if (null == e) {
            if (null === f) return document.createTextNode(d);
            e = i ? document.createElementNS("http://www.w3.org/2000/svg", f) : document.createElement(f, d.is && d), o = null, s = !1
          }
          if (null === f) p === d || s && e.data === d || (e.data = d);
          else {
            if (o = o && lC.call(e.childNodes), u = (p = n.props || xC).dangerouslySetInnerHTML, h = d.dangerouslySetInnerHTML, !s) {
              if (null != o)
                for (p = {}, g = 0; g < e.attributes.length; g++) p[e.attributes[g].name] = e.attributes[g].value;
              (h || u) && (h && (u && h.__html == u.__html || h.__html === e.innerHTML) || (e.innerHTML = h && h.__html || ""))
            }
            if (function(e, t, n, r, i) {
                var o;
                for (o in n) "children" === o || "key" === o || o in t || HC(e, o, null, n[o], r);
                for (o in t) i && "function" != typeof t[o] || "children" === o || "key" === o || "value" === o || "checked" === o || n[o] === t[o] || HC(e, o, t[o], n[o], r)
              }(e, d, p, i, s), h) t.__k = [];
            else if (jC(e, SC(g = t.props.children) ? g : [g], t, n, r, i && "foreignObject" !== f, o, a, o ? o[0] : n.__k && DC(n, 0), s, l), null != o)
              for (g = o.length; g--;) null != o[g] && TC(o[g]);
            s || ("value" in d && void 0 !== (g = d.value) && (g !== e.value || "progress" === f && !g || "option" === f && g !== p.value) && HC(e, "value", g, p.value, !1), "checked" in d && void 0 !== (g = d.checked) && g !== e.checked && HC(e,
              "checked", g, p.checked, !1))
          }
          return e
        }

        function YC(e, t, n) {
          try {
            "function" == typeof e ? e(t) : e.current = t
          } catch (e) {
            cC.__e(e, n)
          }
        }

        function qC(e, t, n) {
          var r, i;
          if (cC.unmount && cC.unmount(e), (r = e.ref) && (r.current && r.current !== e.__e || YC(r, null, t)), null != (r = e.__c)) {
            if (r.componentWillUnmount) try {
              r.componentWillUnmount()
            } catch (e) {
              cC.__e(e, t)
            }
            r.base = r.__P = null, e.__c = void 0
          }
          if (r = e.__k)
            for (i = 0; i < r.length; i++) r[i] && qC(r[i], t, n || "function" != typeof e.type);
          n || null == e.__e || TC(e.__e), e.__ = e.__e = e.__d = void 0
        }

        function KC(e, t, n) {
          return this.constructor(e, n)
        }

        function $C(e, t, n) {
          var r, i, o, a;
          cC.__ && cC.__(e, t), i = (r = "function" == typeof n) ? null : n && n.__k || t.__k, o = [], a = [], VC(t, e = (!r && n || t).__k = OC(PC, null, [e]), i || xC, xC, void 0 !== t.ownerSVGElement, !r && n ? [n] : i ? null : t.firstChild ?
            lC.call(t.childNodes) : null, o, !r && n ? n : i ? i.__e : t.firstChild, r, a), XC(o, e, a)
        }
        lC = kC.slice, cC = {
          __e: function(e, t, n, r) {
            for (var i, o, a; t = t.__;)
              if ((i = t.__c) && !i.__) try {
                if ((o = i.constructor) && null != o.getDerivedStateFromError && (i.setState(o.getDerivedStateFromError(e)), a = i.__d), null != i.componentDidCatch && (i.componentDidCatch(e, r || {}), a = i.__d), a) return i.__E = i
              } catch (t) {
                e = t
              }
            throw e
          }
        }, uC = 0, hC = function(e) {
          return null != e && void 0 === e.constructor
        }, MC.prototype.setState = function(e, t) {
          var n;
          n = null != this.__s && this.__s !== this.state ? this.__s : this.__s = EC({}, this.state), "function" == typeof e && (e = e(EC({}, n), this.props)), e && EC(n, e), null != e && this.__v && (t && this._sb.push(t), NC(this))
        }, MC.prototype.forceUpdate = function(e) {
          this.__v && (this.__e = !0, e && this.__h.push(e), NC(this))
        }, MC.prototype.render = PC, pC = [], fC = "function" == typeof Promise ? Promise.prototype.then.bind(Promise.resolve()) : setTimeout, gC = function(e, t) {
          return e.__v.__b - t.__v.__b
        }, RC.__r = 0, mC = 0, wC.Component = MC, wC.Fragment = PC, wC.cloneElement = function(e, t, n) {
          var r, i, o, a, s = EC({}, e.props);
          for (o in e.type && e.type.defaultProps && (a = e.type.defaultProps), t) "key" == o ? r = t[o] : "ref" == o ? i = t[o] : s[o] = void 0 === t[o] && void 0 !== a ? a[o] : t[o];
          return arguments.length > 2 && (s.children = arguments.length > 3 ? lC.call(arguments, 2) : n), AC(e.type, s, r || e.key, i || e.ref, null)
        }, wC.createContext = function(e, t) {
          var n = {
            __c: t = "__cC" + mC++,
            __: e,
            Consumer: function(e, t) {
              return e.children(t)
            },
            Provider: function(e) {
              var n, r;
              return this.getChildContext || (n = [], (r = {})[t] = this, this.getChildContext = function() {
                return r
              }, this.shouldComponentUpdate = function(e) {
                this.props.value !== e.value && n.some((function(e) {
                  e.__e = !0, NC(e)
                }))
              }, this.sub = function(e) {
                n.push(e);
                var t = e.componentWillUnmount;
                e.componentWillUnmount = function() {
                  n.splice(n.indexOf(e), 1), t && t.call(e)
                }
              }), e.children
            }
          };
          return n.Provider.__ = n.Consumer.contextType = n
        }, wC.createElement = OC, wC.createRef = function() {
          return {
            current: null
          }
        }, wC.h = OC, wC.hydrate = function e(t, n) {
          $C(t, n, e)
        }, wC.isValidElement = hC, wC.options = cC, wC.render = $C, wC.toChildArray = function e(t, n) {
          return n = n || [], null == t || "boolean" == typeof t || (SC(t) ? t.some((function(t) {
            e(t, n)
          })) : n.push(t)), n
        };
        var ZC, JC, QC, eS, tS = {},
          nS = wC,
          rS = 0,
          iS = [],
          oS = [],
          aS = nS.options.__b,
          sS = nS.options.__r,
          lS = nS.options.diffed,
          cS = nS.options.__c,
          uS = nS.options.unmount;

        function hS(e, t) {
          nS.options.__h && nS.options.__h(JC, e, rS || t), rS = 0;
          var n = JC.__H || (JC.__H = {
            __: [],
            __h: []
          });
          return e >= n.__.length && n.__.push({
            __V: oS
          }), n.__[e]
        }

        function pS(e) {
          return rS = 1, dS(xS, e)
        }

        function dS(e, t, n) {
          var r = hS(ZC++, 2);
          if (r.t = e, !r.__c && (r.__ = [n ? n(t) : xS(void 0, t), function(e) {
              var t = r.__N ? r.__N[0] : r.__[0],
                n = r.t(t, e);
              t !== n && (r.__N = [n, r.__[1]], r.__c.setState({}))
            }], r.__c = JC, !JC.u)) {
            var i = function(e, t, n) {
              if (!r.__c.__H) return !0;
              var i = r.__c.__H.__.filter((function(e) {
                return e.__c
              }));
              if (i.every((function(e) {
                  return !e.__N
                }))) return !o || o.call(this, e, t, n);
              var a = !1;
              return i.forEach((function(e) {
                if (e.__N) {
                  var t = e.__[0];
                  e.__ = e.__N, e.__N = void 0, t !== e.__[0] && (a = !0)
                }
              })), !(!a && r.__c.props === e) && (!o || o.call(this, e, t, n))
            };
            JC.u = !0;
            var o = JC.shouldComponentUpdate,
              a = JC.componentWillUpdate;
            JC.componentWillUpdate = function(e, t, n) {
              if (this.__e) {
                var r = o;
                o = void 0, i(e, t, n), o = r
              }
              a && a.call(this, e, t, n)
            }, JC.shouldComponentUpdate = i
          }
          return r.__N || r.__
        }

        function fS(e, t) {
          var n = hS(ZC++, 4);
          !nS.options.__s && wS(n.__H, t) && (n.__ = e, n.o = t, JC.__h.push(n))
        }

        function gS(e, t) {
          var n = hS(ZC++, 7);
          return wS(n.__H, t) ? (n.__V = e(), n.o = t, n.__h = e, n.__V) : n.__
        }

        function mS() {
          for (var e; e = iS.shift();)
            if (e.__P && e.__H) try {
              e.__H.__h.forEach(bS), e.__H.__h.forEach(yS), e.__H.__h = []
            } catch (t) {
              e.__H.__h = [], nS.options.__e(t, e.__v)
            }
        }
        nS.options.__b = function(e) {
          JC = null, aS && aS(e)
        }, nS.options.__r = function(e) {
          sS && sS(e), ZC = 0;
          var t = (JC = e.__c).__H;
          t && (QC === JC ? (t.__h = [], JC.__h = [], t.__.forEach((function(e) {
            e.__N && (e.__ = e.__N), e.__V = oS, e.__N = e.o = void 0
          }))) : (t.__h.forEach(bS), t.__h.forEach(yS), t.__h = [], ZC = 0)), QC = JC
        }, nS.options.diffed = function(e) {
          lS && lS(e);
          var t = e.__c;
          t && t.__H && (t.__H.__h.length && (1 !== iS.push(t) && eS === nS.options.requestAnimationFrame || ((eS = nS.options.requestAnimationFrame) || _S)(mS)), t.__H.__.forEach((function(e) {
            e.o && (e.__H = e.o), e.__V !== oS && (e.__ = e.__V), e.o = void 0, e.__V = oS
          }))), QC = JC = null
        }, nS.options.__c = function(e, t) {
          t.some((function(e) {
            try {
              e.__h.forEach(bS), e.__h = e.__h.filter((function(e) {
                return !e.__ || yS(e)
              }))
            } catch (n) {
              t.some((function(e) {
                e.__h && (e.__h = [])
              })), t = [], nS.options.__e(n, e.__v)
            }
          })), cS && cS(e, t)
        }, nS.options.unmount = function(e) {
          uS && uS(e);
          var t, n = e.__c;
          n && n.__H && (n.__H.__.forEach((function(e) {
            try {
              bS(e)
            } catch (e) {
              t = e
            }
          })), n.__H = void 0, t && nS.options.__e(t, n.__v))
        };
        var vS = "function" == typeof requestAnimationFrame;

        function _S(e) {
          var t, n = function() {
              clearTimeout(r), vS && cancelAnimationFrame(t), setTimeout(e)
            },
            r = setTimeout(n, 100);
          vS && (t = requestAnimationFrame(n))
        }

        function bS(e) {
          var t = JC,
            n = e.__c;
          "function" == typeof n && (e.__c = void 0, n()), JC = t
        }

        function yS(e) {
          var t = JC;
          e.__c = e.__(), JC = t
        }

        function wS(e, t) {
          return !e || e.length !== t.length || t.some((function(t, n) {
            return t !== e[n]
          }))
        }

        function xS(e, t) {
          return "function" == typeof t ? t(e) : t
        }
        tS.useCallback = function(e, t) {
            return rS = 8, gS((function() {
              return e
            }), t)
          }, tS.useContext = function(e) {
            var t = JC.context[e.__c],
              n = hS(ZC++, 9);
            return n.c = e, t ? (null == n.__ && (n.__ = !0, t.sub(JC)), t.props.value) : e.__
          }, tS.useDebugValue = function(e, t) {
            nS.options.useDebugValue && nS.options.useDebugValue(t ? t(e) : e)
          }, tS.useEffect = function(e, t) {
            var n = hS(ZC++, 3);
            !nS.options.__s && wS(n.__H, t) && (n.__ = e, n.o = t, JC.__H.__h.push(n))
          }, tS.useErrorBoundary = function(e) {
            var t = hS(ZC++, 10),
              n = pS();
            return t.__ = e, JC.componentDidCatch || (JC.componentDidCatch = function(e, r) {
              t.__ && t.__(e, r), n[1](e)
            }), [n[0], function() {
              n[1](void 0)
            }]
          }, tS.useId = function() {
            var e = hS(ZC++, 11);
            if (!e.__) {
              for (var t = JC.__v; null !== t && !t.__m && null !== t.__;) t = t.__;
              var n = t.__m || (t.__m = [0, 0]);
              e.__ = "P" + n[0] + "-" + n[1]++
            }
            return e.__
          }, tS.useImperativeHandle = function(e, t, n) {
            rS = 6, fS((function() {
              return "function" == typeof e ? (e(t()), function() {
                return e(null)
              }) : e ? (e.current = t(), function() {
                return e.current = null
              }) : void 0
            }), null == n ? n : n.concat(e))
          }, tS.useLayoutEffect = fS, tS.useMemo = gS, tS.useReducer = dS, tS.useRef = function(e) {
            return rS = 5, gS((function() {
              return {
                current: e
              }
            }), [])
          }, tS.useState = pS,
          function(e) {
            var t = wC,
              n = tS;

            function r(e, t) {
              for (var n in t) e[n] = t[n];
              return e
            }

            function i(e, t) {
              for (var n in e)
                if ("__source" !== n && !(n in t)) return !0;
              for (var r in t)
                if ("__source" !== r && e[r] !== t[r]) return !0;
              return !1
            }

            function o(e, t) {
              return e === t && (0 !== e || 1 / e == 1 / t) || e != e && t != t
            }

            function a(e) {
              this.props = e
            }

            function s(e, n) {
              function r(e) {
                var t = this.props.ref,
                  r = t == e.ref;
                return !r && t && (t.call ? t(null) : t.current = null), n ? !n(this.props, e) || !r : i(this.props, e)
              }

              function o(n) {
                return this.shouldComponentUpdate = r, t.createElement(e, n)
              }
              return o.displayName = "Memo(" + (e.displayName || e.name) + ")", o.prototype.isReactComponent = !0, o.__f = !0, o
            }(a.prototype = new t.Component).isPureReactComponent = !0, a.prototype.shouldComponentUpdate = function(e, t) {
              return i(this.props, e) || i(this.state, t)
            };
            var l = t.options.__b;
            t.options.__b = function(e) {
              e.type && e.type.__f && e.ref && (e.props.ref = e.ref, e.ref = null), l && l(e)
            };
            var c = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.forward_ref") || 3911;

            function u(e) {
              function t(t) {
                var n = r({}, t);
                return delete n.ref, e(n, t.ref || null)
              }
              return t.$$typeof = c, t.render = t, t.prototype.isReactComponent = t.__f = !0, t.displayName = "ForwardRef(" + (e.displayName || e.name) + ")", t
            }
            var h = function(e, n) {
                return null == e ? null : t.toChildArray(t.toChildArray(e).map(n))
              },
              p = {
                map: h,
                forEach: h,
                count: function(e) {
                  return e ? t.toChildArray(e).length : 0
                },
                only: function(e) {
                  var n = t.toChildArray(e);
                  if (1 !== n.length) throw "Children.only";
                  return n[0]
                },
                toArray: t.toChildArray
              },
              d = t.options.__e;
            t.options.__e = function(e, t, n, r) {
              if (e.then)
                for (var i, o = t; o = o.__;)
                  if ((i = o.__c) && i.__c) return null == t.__e && (t.__e = n.__e, t.__k = n.__k), i.__c(e, t);
              d(e, t, n, r)
            };
            var f = t.options.unmount;

            function g(e, t, n) {
              return e && (e.__c && e.__c.__H && (e.__c.__H.__.forEach((function(e) {
                "function" == typeof e.__c && e.__c()
              })), e.__c.__H = null), null != (e = r({}, e)).__c && (e.__c.__P === n && (e.__c.__P = t), e.__c = null), e.__k = e.__k && e.__k.map((function(e) {
                return g(e, t, n)
              }))), e
            }

            function m(e, t, n) {
              return e && (e.__v = null, e.__k = e.__k && e.__k.map((function(e) {
                return m(e, t, n)
              })), e.__c && e.__c.__P === t && (e.__e && n.insertBefore(e.__e, e.__d), e.__c.__e = !0, e.__c.__P = n)), e
            }

            function v() {
              this.__u = 0, this.t = null, this.__b = null
            }

            function _(e) {
              var t = e.__.__c;
              return t && t.__a && t.__a(e)
            }

            function b(e) {
              var n, r, i;

              function o(o) {
                if (n || (n = e()).then((function(e) {
                    r = e.default || e
                  }), (function(e) {
                    i = e
                  })), i) throw i;
                if (!r) throw n;
                return t.createElement(r, o)
              }
              return o.displayName = "Lazy", o.__f = !0, o
            }

            function y() {
              this.u = null, this.o = null
            }
            t.options.unmount = function(e) {
              var t = e.__c;
              t && t.__R && t.__R(), t && !0 === e.__h && (e.type = null), f && f(e)
            }, (v.prototype = new t.Component).__c = function(e, t) {
              var n = t.__c,
                r = this;
              null == r.t && (r.t = []), r.t.push(n);
              var i = _(r.__v),
                o = !1,
                a = function() {
                  o || (o = !0, n.__R = null, i ? i(s) : s())
                };
              n.__R = a;
              var s = function() {
                  if (!--r.__u) {
                    if (r.state.__a) {
                      var e = r.state.__a;
                      r.__v.__k[0] = m(e, e.__c.__P, e.__c.__O)
                    }
                    var t;
                    for (r.setState({
                        __a: r.__b = null
                      }); t = r.t.pop();) t.forceUpdate()
                  }
                },
                l = !0 === t.__h;
              r.__u++ || l || r.setState({
                __a: r.__b = r.__v.__k[0]
              }), e.then(a, a)
            }, v.prototype.componentWillUnmount = function() {
              this.t = []
            }, v.prototype.render = function(e, n) {
              if (this.__b) {
                if (this.__v.__k) {
                  var r = document.createElement("div"),
                    i = this.__v.__k[0].__c;
                  this.__v.__k[0] = g(this.__b, r, i.__O = i.__P)
                }
                this.__b = null
              }
              var o = n.__a && t.createElement(t.Fragment, null, e.fallback);
              return o && (o.__h = null), [t.createElement(t.Fragment, null, n.__a ? null : e.children), o]
            };
            var w = function(e, t, n) {
              if (++n[1] === n[0] && e.o.delete(t), e.props.revealOrder && ("t" !== e.props.revealOrder[0] || !e.o.size))
                for (n = e.u; n;) {
                  for (; n.length > 3;) n.pop()();
                  if (n[1] < n[0]) break;
                  e.u = n = n[2]
                }
            };

            function x(e) {
              return this.getChildContext = function() {
                return e.context
              }, e.children
            }

            function k(e) {
              var n = this,
                r = e.i;
              n.componentWillUnmount = function() {
                t.render(null, n.l), n.l = null, n.i = null
              }, n.i && n.i !== r && n.componentWillUnmount(), e.__v ? (n.l || (n.i = r, n.l = {
                nodeType: 1,
                parentNode: r,
                childNodes: [],
                appendChild: function(e) {
                  this.childNodes.push(e), n.i.appendChild(e)
                },
                insertBefore: function(e, t) {
                  this.childNodes.push(e), n.i.appendChild(e)
                },
                removeChild: function(e) {
                  this.childNodes.splice(this.childNodes.indexOf(e) >>> 1, 1), n.i.removeChild(e)
                }
              }), t.render(t.createElement(x, {
                context: n.context
              }, e.__v), n.l)) : n.l && n.componentWillUnmount()
            }

            function C(e, n) {
              var r = t.createElement(k, {
                __v: e,
                i: n
              });
              return r.containerInfo = n, r
            }(y.prototype = new t.Component).__a = function(e) {
              var t = this,
                n = _(t.__v),
                r = t.o.get(e);
              return r[0]++,
                function(i) {
                  var o = function() {
                    t.props.revealOrder ? (r.push(i), w(t, e, r)) : i()
                  };
                  n ? n(o) : o()
                }
            }, y.prototype.render = function(e) {
              this.u = null, this.o = new Map;
              var n = t.toChildArray(e.children);
              e.revealOrder && "b" === e.revealOrder[0] && n.reverse();
              for (var r = n.length; r--;) this.o.set(n[r], this.u = [1, 0, this.u]);
              return e.children
            }, y.prototype.componentDidUpdate = y.prototype.componentDidMount = function() {
              var e = this;
              this.o.forEach((function(t, n) {
                w(e, n, t)
              }))
            };
            var S = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103,
              E =
              /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,
              T = /^on(Ani|Tra|Tou|BeforeInp|Compo)/,
              O = /[A-Z0-9]/g,
              A = "undefined" != typeof document,
              P = function(e) {
                return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(e)
              };

            function M(e, n, r) {
              return null == n.__k && (n.textContent = ""), t.render(e, n), "function" == typeof r && r(), e ? e.__c : null
            }

            function D(e, n, r) {
              return t.hydrate(e, n), "function" == typeof r && r(), e ? e.__c : null
            }
            t.Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach((function(e) {
              Object.defineProperty(t.Component.prototype, e, {
                configurable: !0,
                get: function() {
                  return this["UNSAFE_" + e]
                },
                set: function(t) {
                  Object.defineProperty(this, e, {
                    configurable: !0,
                    writable: !0,
                    value: t
                  })
                }
              })
            }));
            var I = t.options.event;

            function N() {}

            function R() {
              return this.cancelBubble
            }

            function j() {
              return this.defaultPrevented
            }
            t.options.event = function(e) {
              return I && (e = I(e)), e.persist = N, e.isPropagationStopped = R, e.isDefaultPrevented = j, e.nativeEvent = e
            };
            var L, F = {
                enumerable: !1,
                configurable: !0,
                get: function() {
                  return this.class
                }
              },
              B = t.options.vnode;
            t.options.vnode = function(e) {
              "string" == typeof e.type && function(e) {
                var n = e.props,
                  r = e.type,
                  i = {};
                for (var o in n) {
                  var a = n[o];
                  if (!("value" === o && "defaultValue" in n && null == a || A && "children" === o && "noscript" === r || "class" === o || "className" === o)) {
                    var s = o.toLowerCase();
                    "defaultValue" === o && "value" in n && null == n.value ? o = "value" : "download" === o && !0 === a ? a = "" : "ondoubleclick" === s ? o = "ondblclick" : "onchange" !== s || "input" !== r && "textarea" !== r || P(n
                      .type) ? "onfocus" === s ? o = "onfocusin" : "onblur" === s ? o = "onfocusout" : T.test(o) ? o = s : -1 === r.indexOf("-") && E.test(o) ? o = o.replace(O, "-$&").toLowerCase() : null === a && (a = void 0) : s = o =
                      "oninput", "oninput" === s && i[o = s] && (o = "oninputCapture"), i[o] = a
                  }
                }
                "select" == r && i.multiple && Array.isArray(i.value) && (i.value = t.toChildArray(n.children).forEach((function(e) {
                  e.props.selected = -1 != i.value.indexOf(e.props.value)
                }))), "select" == r && null != i.defaultValue && (i.value = t.toChildArray(n.children).forEach((function(e) {
                  e.props.selected = i.multiple ? -1 != i.defaultValue.indexOf(e.props.value) : i.defaultValue == e.props.value
                }))), n.class && !n.className ? (i.class = n.class, Object.defineProperty(i, "className", F)) : (n.className && !n.class || n.class && n.className) && (i.class = i.className = n.className), e.props = i
              }(e), e.$$typeof = S, B && B(e)
            };
            var z = t.options.__r;
            t.options.__r = function(e) {
              z && z(e), L = e.__c
            };
            var H = t.options.diffed;
            t.options.diffed = function(e) {
              H && H(e);
              var t = e.props,
                n = e.__e;
              null != n && "textarea" === e.type && "value" in t && t.value !== n.value && (n.value = null == t.value ? "" : t.value), L = null
            };
            var U = {
              ReactCurrentDispatcher: {
                current: {
                  readContext: function(e) {
                    return L.__n[e.__c].props.value
                  }
                }
              }
            };

            function W(e) {
              return t.createElement.bind(null, e)
            }

            function V(e) {
              return !!e && e.$$typeof === S
            }

            function X(e) {
              return V(e) ? t.cloneElement.apply(null, arguments) : e
            }

            function G(e) {
              return !!e.__k && (t.render(null, e), !0)
            }

            function Y(e) {
              return e && (e.base || 1 === e.nodeType && e) || null
            }
            var q = function(e, t) {
                return e(t)
              },
              K = function(e, t) {
                return e(t)
              },
              $ = t.Fragment;

            function Z(e) {
              e()
            }

            function J(e) {
              return e
            }

            function Q() {
              return [!1, Z]
            }
            var ee = n.useLayoutEffect;

            function te(e, t) {
              var r = t(),
                i = n.useState({
                  p: {
                    __: r,
                    h: t
                  }
                }),
                a = i[0].p,
                s = i[1];
              return n.useLayoutEffect((function() {
                a.__ = r, a.h = t, o(a.__, t()) || s({
                  p: a
                })
              }), [e, r, t]), n.useEffect((function() {
                return o(a.__, a.h()) || s({
                  p: a
                }), e((function() {
                  o(a.__, a.h()) || s({
                    p: a
                  })
                }))
              }), [e]), r
            }
            var ne = {
              useState: n.useState,
              useId: n.useId,
              useReducer: n.useReducer,
              useEffect: n.useEffect,
              useLayoutEffect: n.useLayoutEffect,
              useInsertionEffect: ee,
              useTransition: Q,
              useDeferredValue: J,
              useSyncExternalStore: te,
              startTransition: Z,
              useRef: n.useRef,
              useImperativeHandle: n.useImperativeHandle,
              useMemo: n.useMemo,
              useCallback: n.useCallback,
              useContext: n.useContext,
              useDebugValue: n.useDebugValue,
              version: "17.0.2",
              Children: p,
              render: M,
              hydrate: D,
              unmountComponentAtNode: G,
              createPortal: C,
              createElement: t.createElement,
              createContext: t.createContext,
              createFactory: W,
              cloneElement: X,
              createRef: t.createRef,
              Fragment: t.Fragment,
              isValidElement: V,
              findDOMNode: Y,
              Component: t.Component,
              PureComponent: a,
              memo: s,
              forwardRef: u,
              flushSync: K,
              unstable_batchedUpdates: q,
              StrictMode: $,
              Suspense: v,
              SuspenseList: y,
              lazy: b,
              __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: U
            };
            Object.defineProperty(e, "Component", {
                enumerable: !0,
                get: function() {
                  return t.Component
                }
              }), Object.defineProperty(e, "Fragment", {
                enumerable: !0,
                get: function() {
                  return t.Fragment
                }
              }), Object.defineProperty(e, "createContext", {
                enumerable: !0,
                get: function() {
                  return t.createContext
                }
              }), Object.defineProperty(e, "createElement", {
                enumerable: !0,
                get: function() {
                  return t.createElement
                }
              }), Object.defineProperty(e, "createRef", {
                enumerable: !0,
                get: function() {
                  return t.createRef
                }
              }), e.Children = p, e.PureComponent = a, e.StrictMode = $, e.Suspense = v, e.SuspenseList = y, e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = U, e.cloneElement = X, e.createFactory = W, e.createPortal = C, e.default = ne, e
              .findDOMNode = Y, e.flushSync = K, e.forwardRef = u, e.hydrate = D, e.isValidElement = V, e.lazy = b, e.memo = s, e.render = M, e.startTransition = Z, e.unmountComponentAtNode = G, e.unstable_batchedUpdates = q, e.useDeferredValue =
              J, e.useInsertionEffect = ee, e.useSyncExternalStore = te, e.useTransition = Q, e.version = "17.0.2", Object.keys(n).forEach((function(t) {
                "default" === t || e.hasOwnProperty(t) || Object.defineProperty(e, t, {
                  enumerable: !0,
                  get: function() {
                    return n[t]
                  }
                })
              }))
          }(yC);
        var kS, CS = V(Object.freeze({
          __proto__: null,
          default: function(e, t) {
            if (!e) throw new Error("Invariant failed")
          }
        }));

        function SS() {
          return SS = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, SS.apply(this, arguments)
        }! function(e) {
          var t = l.default,
            n = Il.exports,
            r = yC,
            i = CS;

          function o(e) {
            return e && e.__esModule ? e.default : e
          }

          function a(e, t, n, r) {
            Object.defineProperty(e, t, {
              get: n,
              set: r,
              enumerable: !0,
              configurable: !0
            })
          }

          function s(e) {
            null !== e.parentElement && e.parentElement.removeChild(e)
          }

          function c(e) {
            e.forEach((e => s(e.element)))
          }

          function u(e) {
            e.forEach((e => {
              ! function(e, t, n) {
                const r = e.children[n] || null;
                e.insertBefore(t, r)
              }(e.parentElement, e.element, e.oldIndex)
            }))
          }

          function h(e, t) {
            const n = f(e),
              r = {
                parentElement: e.from
              };
            let i = [];
            switch (n) {
              case "normal":
                i = [{
                  element: e.item,
                  newIndex: e.newIndex,
                  oldIndex: e.oldIndex,
                  parentElement: e.from
                }];
                break;
              case "swap":
                i = [{
                  element: e.item,
                  oldIndex: e.oldIndex,
                  newIndex: e.newIndex,
                  ...r
                }, {
                  element: e.swapItem,
                  oldIndex: e.newIndex,
                  newIndex: e.oldIndex,
                  ...r
                }];
                break;
              case "multidrag":
                i = e.oldIndicies.map(((t, n) => ({
                  element: t.multiDragElement,
                  oldIndex: t.index,
                  newIndex: e.newIndicies[n].index,
                  ...r
                })))
            }
            const o = function(e, t) {
              const n = e.map((e => ({
                ...e,
                item: t[e.oldIndex]
              }))).sort(((e, t) => e.oldIndex - t.oldIndex));
              return n
            }(i, t);
            return o
          }

          function p(e, t) {
            const n = [...t];
            return e.concat().reverse().forEach((e => n.splice(e.oldIndex, 1))), n
          }

          function d(e, t, n, r) {
            const i = [...t];
            return e.forEach((e => {
              const t = r && n && r(e.item, n);
              i.splice(e.newIndex, 0, t || e.item)
            })), i
          }

          function f(e) {
            return e.oldIndicies && e.oldIndicies.length > 0 ? "multidrag" : e.swapItem ? "swap" : "normal"
          }
          a(e.exports, "Sortable", (() => $882b6d93070905b3$re_export$Sortable)), a(e.exports, "Direction", (() => $882b6d93070905b3$re_export$Direction)), a(e.exports, "DOMRect", (() => $882b6d93070905b3$re_export$DOMRect)), a(e.exports,
            "GroupOptions", (() => $882b6d93070905b3$re_export$GroupOptions)), a(e.exports, "MoveEvent", (() => $882b6d93070905b3$re_export$MoveEvent)), a(e.exports, "Options", (() => $882b6d93070905b3$re_export$Options)), a(e.exports,
            "PullResult", (() => $882b6d93070905b3$re_export$PullResult)), a(e.exports, "PutResult", (() => $882b6d93070905b3$re_export$PutResult)), a(e.exports, "SortableEvent", (() => $882b6d93070905b3$re_export$SortableEvent)), a(e.exports,
            "SortableOptions", (() => $882b6d93070905b3$re_export$SortableOptions)), a(e.exports, "Utils", (() => $882b6d93070905b3$re_export$Utils)), a(e.exports, "ReactSortable", (() => m));
          const g = {
            dragging: null
          };
          class m extends r.Component {
            constructor(e) {
              super(e), this.ref = r.createRef();
              const t = [...e.list].map((e => Object.assign(e, {
                chosen: !1,
                selected: !1
              })));
              e.setList(t, this.sortable, g), o(i)(!e.plugins,
                '\nPlugins prop is no longer supported.\nInstead, mount it with "Sortable.mount(new MultiDrag())"\nPlease read the updated README.md at https://github.com/SortableJS/react-sortablejs.\n      ')
            }
            componentDidMount() {
              if (null === this.ref.current) return;
              const e = this.makeOptions();
              o(t).create(this.ref.current, e)
            }
            componentDidUpdate(e) {
              e.disabled !== this.props.disabled && this.sortable && this.sortable.option("disabled", this.props.disabled)
            }
            render() {
              const {
                tag: e,
                style: t,
                className: n,
                id: i
              } = this.props, o = {
                style: t,
                className: n,
                id: i
              }, a = e && null !== e ? e : "div";
              return r.createElement(a, {
                ref: this.ref,
                ...o
              }, this.getChildren())
            }
            getChildren() {
              const {
                children: e,
                dataIdAttr: t,
                selectedClass: i = "sortable-selected",
                chosenClass: a = "sortable-chosen",
                dragClass: s = "sortable-drag",
                fallbackClass: l = "sortable-falback",
                ghostClass: c = "sortable-ghost",
                swapClass: u = "sortable-swap-highlight",
                filter: h = "sortable-filter",
                list: p
              } = this.props;
              if (!e || null == e) return null;
              const d = t || "data-id";
              return r.Children.map(e, ((e, t) => {
                if (void 0 === e) return;
                const s = p[t] || {},
                  {
                    className: l
                  } = e.props,
                  c = "string" == typeof h && {
                    [h.replace(".", "")]: !!s.filtered
                  },
                  u = o(n)(l, {
                    [i]: s.selected,
                    [a]: s.chosen,
                    ...c
                  });
                return r.cloneElement(e, {
                  [d]: e.key,
                  className: u
                })
              }))
            }
            get sortable() {
              const e = this.ref.current;
              if (null === e) return null;
              const t = Object.keys(e).find((e => e.includes("Sortable")));
              return t ? e[t] : null
            }
            makeOptions() {
              const e = function(e) {
                const {
                  list: t,
                  setList: n,
                  children: r,
                  tag: i,
                  style: o,
                  className: a,
                  clone: s,
                  onAdd: l,
                  onChange: c,
                  onChoose: u,
                  onClone: h,
                  onEnd: p,
                  onFilter: d,
                  onRemove: f,
                  onSort: g,
                  onStart: m,
                  onUnchoose: v,
                  onUpdate: _,
                  onMove: b,
                  onSpill: y,
                  onSelect: w,
                  onDeselect: x,
                  ...k
                } = e;
                return k
              }(this.props);
              ["onAdd", "onChoose", "onDeselect", "onEnd", "onRemove", "onSelect", "onSpill", "onStart", "onUnchoose", "onUpdate"].forEach((t => e[t] = this.prepareOnHandlerPropAndDOM(t))), ["onChange", "onClone", "onFilter", "onSort"]
                .forEach((t => e[t] = this.prepareOnHandlerProp(t)));
              return {
                ...e,
                onMove: (e, t) => {
                  const {
                    onMove: n
                  } = this.props, r = e.willInsertAfter || -1;
                  if (!n) return r;
                  const i = n(e, t, this.sortable, g);
                  return void 0 !== i && i
                }
              }
            }
            prepareOnHandlerPropAndDOM(e) {
              return t => {
                this.callOnHandlerProp(t, e), this[e](t)
              }
            }
            prepareOnHandlerProp(e) {
              return t => {
                this.callOnHandlerProp(t, e)
              }
            }
            callOnHandlerProp(e, t) {
              const n = this.props[t];
              n && n(e, this.sortable, g)
            }
            onAdd(e) {
              const {
                list: t,
                setList: n,
                clone: r
              } = this.props, i = h(e, [...g.dragging.props.list]);
              c(i);
              n(d(i, t, e, r).map((e => Object.assign(e, {
                selected: !1
              }))), this.sortable, g)
            }
            onRemove(e) {
              const {
                list: t,
                setList: n
              } = this.props, r = f(e), a = h(e, t);
              u(a);
              let s = [...t];
              if ("clone" !== e.pullMode) s = p(a, s);
              else {
                let t = a;
                switch (r) {
                  case "multidrag":
                    t = a.map(((t, n) => ({
                      ...t,
                      element: e.clones[n]
                    })));
                    break;
                  case "normal":
                    t = a.map((t => ({
                      ...t,
                      element: e.clone
                    })));
                    break;
                  default:
                    o(i)(!0, `mode "${r}" cannot clone. Please remove "props.clone" from <ReactSortable/> when using the "${r}" plugin`)
                }
                c(t), a.forEach((t => {
                  const n = t.oldIndex,
                    r = this.props.clone(t.item, e);
                  s.splice(n, 1, r)
                }))
              }
              s = s.map((e => Object.assign(e, {
                selected: !1
              }))), n(s, this.sortable, g)
            }
            onUpdate(e) {
              const {
                list: t,
                setList: n
              } = this.props, r = h(e, t);
              c(r), u(r);
              const i = function(e, t) {
                return d(e, p(e, t))
              }(r, t);
              return n(i, this.sortable, g)
            }
            onStart() {
              g.dragging = this
            }
            onEnd() {
              g.dragging = null
            }
            onChoose(e) {
              const {
                list: t,
                setList: n
              } = this.props, r = t.map(((t, n) => {
                let r = t;
                return n === e.oldIndex && (r = Object.assign(t, {
                  chosen: !0
                })), r
              }));
              n(r, this.sortable, g)
            }
            onUnchoose(e) {
              const {
                list: t,
                setList: n
              } = this.props, r = t.map(((t, n) => {
                let r = t;
                return n === e.oldIndex && (r = Object.assign(r, {
                  chosen: !1
                })), r
              }));
              n(r, this.sortable, g)
            }
            onSpill(e) {
              const {
                removeOnSpill: t,
                revertOnSpill: n
              } = this.props;
              t && !n && s(e.item)
            }
            onSelect(e) {
              const {
                list: t,
                setList: n
              } = this.props, r = t.map((e => Object.assign(e, {
                selected: !1
              })));
              e.newIndicies.forEach((e => {
                const t = e.index; - 1 !== t && (r[t].selected = !0)
              })), n(r, this.sortable, g)
            }
            onDeselect(e) {
              const {
                list: t,
                setList: n
              } = this.props, r = t.map((e => Object.assign(e, {
                selected: !1
              })));
              e.newIndicies.forEach((e => {
                const t = e.index; - 1 !== t && (r[t].selected = !0)
              })), n(r, this.sortable, g)
            }
          }
          m.defaultProps = {
            clone: e => e
          };
          var v, _;
          v = e.exports, _ = {}, Object.keys(_).forEach((function(e) {
            "default" === e || "__esModule" === e || v.hasOwnProperty(e) || Object.defineProperty(v, e, {
              enumerable: !0,
              get: function() {
                return _[e]
              }
            })
          }))
        }(bC);
        var ES = e => Te("svg", SS({
            width: 14,
            height: 9,
            fill: "none",
            xmlns: "http://www.w3.org/2000/svg"
          }, e), kS || (kS = Te("path", {
            fillRule: "evenodd",
            clipRule: "evenodd",
            d: "M.6 6.9a1.6 1.6 0 1 0 3.2-.001A1.6 1.6 0 0 0 .6 6.9Zm4.8 0a1.6 1.6 0 1 0 3.2-.001 1.6 1.6 0 0 0-3.2.001Zm4.8 0a1.6 1.6 0 1 0 3.2-.001 1.6 1.6 0 0 0-3.2.001ZM3.8 2.1a1.6 1.6 0 1 0-3.202.001A1.6 1.6 0 0 0 3.8 2.1Zm1.6 0a1.6 1.6 0 1 0 3.2-.001 1.6 1.6 0 0 0-3.2.001Zm4.8 0a1.6 1.6 0 1 0 3.2-.001 1.6 1.6 0 0 0-3.2.001Z",
            fill: "#7E7E7E"
          }))),
          TS = "OrderOperator-module_operate_order__Dy31o",
          OS = "OrderOperator-module_img_item__M6EFs",
          AS = "OrderOperator-module_img__dEUmr",
          PS = "OrderOperator-module_sortable__AqKYO",
          MS = "OrderOperator-module_icon__P5csN",
          DS = "OrderOperator-module_item_drag__6ZxO-",
          IS = "OrderOperator-module_index__-E8wZ",
          NS = "OrderOperator-module_index_show__-H0q8";
        c(
        ".OrderOperator-module_operate_order__Dy31o{display:flex;height:118px;margin:6px 0}.OrderOperator-module_img_item__M6EFs{align-items:center;display:flex;flex-direction:column}.OrderOperator-module_img_item__M6EFs+.OrderOperator-module_img_item__M6EFs{margin-left:20px}.OrderOperator-module_img__dEUmr{border-radius:4px;height:60px;object-fit:cover;width:60px}.OrderOperator-module_img_item__M6EFs:last-child{margin-right:28px}.OrderOperator-module_img_item__M6EFs:first-child{margin-left:28px}.OrderOperator-module_sortable__AqKYO{align-items:center;display:flex;overflow-x:auto}.OrderOperator-module_icon__P5csN{cursor:pointer;margin-top:8px}.OrderOperator-module_item_drag__6ZxO-{background:#fdfdfd;border:1px solid #e6e6e6;border-radius:6px;box-shadow:0 2px 10px rgba(34,34,34,.08);padding:0 4px}.OrderOperator-module_item_drag__6ZxO- .OrderOperator-module_img_item__M6EFs{height:64px;width:64px}.OrderOperator-module_item_drag__6ZxO- .OrderOperator-module_index__-E8wZ{visibility:visible!important}.OrderOperator-module_index__-E8wZ{color:rgba(51,51,51,.6);font-size:12px;font-weight:500;line-height:12px;margin:3px 0;visibility:hidden}.OrderOperator-module_index_show__-H0q8{visibility:visible!important}@media (max-width:959px){.OrderOperator-module_img_item__M6EFs:last-child{margin-right:0}.OrderOperator-module_sortable__AqKYO{padding-right:20px}.OrderOperator-module_img_item__M6EFs:first-child{margin-left:20px}.OrderOperator-module_operate_order__Dy31o{height:108px}}");
        var RS, jS = e => {
          var {
            onChange: t,
            defaultValue: n
          } = e, [r, i] = dt([]), [o, a] = dt(!1);
          gt((() => {
            n.length !== r.length && i(n || [])
          }), [n, r.length]);
          return Hl("div", {
            className: TS,
            children: Hl(bC.exports.ReactSortable, {
              className: PS,
              list: r || [],
              setList: e => {
                i(e), e.length && t(e)
              },
              dragClass: DS,
              chosenClass: DS,
              onStart: () => a(!0),
              onEnd: () => a(!1),
              filter: ".ignore",
              handle: ".handle",
              direction: "horizontal",
              children: null == r ? void 0 : r.map(((e, t) => {
                var {
                  url: n,
                  id: r
                } = e;
                return Hl("div", {
                  className: OS,
                  children: [Hl("div", {
                    className: jl([IS, {
                      [NS]: o
                    }]),
                    children: t + 1
                  }), Hl("img", {
                    className: jl([AS, "ignore"]),
                    src: n
                  }), Hl("div", {
                    className: jl(["handle", MS]),
                    children: Hl(ES, {})
                  })]
                }, r)
              }))
            })
          })
        };

        function LS() {
          return LS = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, LS.apply(this, arguments)
        }
        var FS, BS = e => Te("svg", LS({
          width: 28,
          height: 28,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), RS || (RS = Te("path", {
          fillRule: "evenodd",
          clipRule: "evenodd",
          d: "M9.707 8.293a1 1 0 0 0-1.414 1.414L12.586 14l-4.293 4.293a1 1 0 1 0 1.414 1.414L14 15.414l4.293 4.293a1 1 0 0 0 1.414-1.414L15.414 14l4.293-4.293a1 1 0 0 0-1.414-1.414L14 12.586 9.707 8.293Z",
          fill: "#333"
        })));

        function zS() {
          return zS = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, zS.apply(this, arguments)
        }
        var HS = e => Te("svg", zS({
          width: 28,
          height: 28,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), FS || (FS = Te("path", {
          fillRule: "evenodd",
          clipRule: "evenodd",
          d: "M22.707 8.293a1 1 0 0 1 0 1.414l-10 10a1 1 0 0 1-1.414 0l-5-5a1 1 0 1 1 1.414-1.414L12 17.586l9.293-9.293a1 1 0 0 1 1.414 0Z",
          fill: "#333"
        })));
        c(
        '.rc-tabs-dropdown{background:#fefefe;border:1px solid #000;max-height:200px;overflow:auto;position:absolute}.rc-tabs-dropdown-hidden{display:none}.rc-tabs-dropdown-menu{list-style:none;margin:0;padding:0}.rc-tabs-dropdown-menu-item{padding:4px 8px}.rc-tabs-dropdown-menu-item-selected{background:red}.rc-tabs-dropdown-menu-item-disabled{cursor:not-allowed;opacity:.3}.rc-tabs-content{display:flex;width:100%}.rc-tabs-content-holder{flex:auto}.rc-tabs-content-animated{transition:margin .3s}.rc-tabs-tabpane{flex:none;width:100%}.rc-tabs{display:flex}.rc-tabs-bottom,.rc-tabs-top{flex-direction:column}.rc-tabs-bottom .rc-tabs-ink-bar,.rc-tabs-top .rc-tabs-ink-bar{height:3px}.rc-tabs-top .rc-tabs-ink-bar{bottom:0}.rc-tabs-bottom .rc-tabs-nav{order:1}.rc-tabs-bottom .rc-tabs-content{order:0}.rc-tabs-bottom .rc-tabs-ink-bar{top:0}.rc-tabs-left.rc-tabs-editable .rc-tabs-tab,.rc-tabs-right.rc-tabs-editable .rc-tabs-tab{padding-right:32px}.rc-tabs-left .rc-tabs-nav-wrap,.rc-tabs-right .rc-tabs-nav-wrap{flex-direction:column}.rc-tabs-left .rc-tabs-ink-bar,.rc-tabs-right .rc-tabs-ink-bar{width:3px}.rc-tabs-left .rc-tabs-nav,.rc-tabs-right .rc-tabs-nav{flex-direction:column;min-width:50px}.rc-tabs-left .rc-tabs-nav-list,.rc-tabs-left .rc-tabs-nav-operations,.rc-tabs-right .rc-tabs-nav-list,.rc-tabs-right .rc-tabs-nav-operations{flex:1 0 auto;flex-direction:column}.rc-tabs-left .rc-tabs-ink-bar{right:0}.rc-tabs-right .rc-tabs-nav{order:1}.rc-tabs-right .rc-tabs-content{order:0}.rc-tabs-right .rc-tabs-ink-bar{left:0}.rc-tabs-dropdown-rtl,.rc-tabs-rtl{direction:rtl}.rc-tabs{border:1px solid gray;font-size:14px;overflow:hidden}.rc-tabs-nav{display:flex;flex:none;position:relative}.rc-tabs-nav-measure,.rc-tabs-nav-wrap{display:inline-block;display:flex;flex:auto;overflow:hidden;position:relative;transform:translate(0);white-space:nowrap}.rc-tabs-nav-measure-ping-left:before,.rc-tabs-nav-measure-ping-right:after,.rc-tabs-nav-wrap-ping-left:before,.rc-tabs-nav-wrap-ping-right:after{bottom:0;content:"";position:absolute;top:0}.rc-tabs-nav-measure-ping-left:before,.rc-tabs-nav-wrap-ping-left:before{border-left:1px solid red;left:0}.rc-tabs-nav-measure-ping-right:after,.rc-tabs-nav-wrap-ping-right:after{border-right:1px solid red;right:0}.rc-tabs-nav-measure-ping-bottom:after,.rc-tabs-nav-measure-ping-top:before,.rc-tabs-nav-wrap-ping-bottom:after,.rc-tabs-nav-wrap-ping-top:before{content:"";left:0;position:absolute;right:0}.rc-tabs-nav-measure-ping-top:before,.rc-tabs-nav-wrap-ping-top:before{border-top:1px solid red;top:0}.rc-tabs-nav-measure-ping-bottom:after,.rc-tabs-nav-wrap-ping-bottom:after{border-top:1px solid red;bottom:0}.rc-tabs-nav-list{display:flex;position:relative;transition:transform .3s}.rc-tabs-nav-operations{display:flex}.rc-tabs-nav-operations-hidden{pointer-events:none;position:absolute;visibility:hidden}.rc-tabs-nav-more{background:rgba(255,0,0,.1);border:1px solid blue}.rc-tabs-nav-add{background:rgba(0,255,0,.1);border:1px solid green}.rc-tabs-tab{align-items:center;background:hsla(0,0%,100%,.5);border:0;cursor:pointer;display:flex;font-size:20px;font-weight:lighter;margin:0;outline:none;position:relative}.rc-tabs-tab-btn,.rc-tabs-tab-remove{background:transparent;border:0}.rc-tabs-tab-btn{font-weight:inherit;line-height:32px}.rc-tabs-tab-remove:hover{color:red}.rc-tabs-tab-active{font-weight:bolder}.rc-tabs-ink-bar{background:red;pointer-events:none;position:absolute}.rc-tabs-ink-bar-animated{transition:all .3s}.rc-tabs-extra-content{flex:none}');
        var US, WS, VS, XS, GS, YS, qS, KS, $S, ZS = Rt((e => {
          var {
            handleOperate: t,
            defaultSize: n,
            defaultRotate: r,
            orderList: i,
            onReset: o,
            onConfirm: a
          } = e, {
            formatMessage: s
          } = vo();
          return Hl("div", {
            className: kk,
            children: Hl(wk, {
              defaultActiveKey: "1",
              onChange: e => {},
              className: xk,
              tabBarStyle: {
                flex: 1,
                background: "rgba(230, 230, 230, 0.4)"
              },
              children: [Hl(mk, {
                disabled: !0,
                tab: Hl(BS, {
                  className: "icon-custom",
                  onClick: o
                })
              }, "0"), Hl(mk, {
                tab: s({
                  id: "size"
                }),
                className: Ck,
                children: Hl(zk, {
                  onChange: e => t("size", e),
                  defaultData: n
                })
              }, "1"), Hl(mk, {
                tab: s({
                  id: "rotate"
                }),
                className: Ck,
                children: Hl(_C, {
                  onChange: e => t("rotate", e),
                  defaultValue: r
                })
              }, "2"), Hl(mk, {
                tab: s({
                  id: "order"
                }),
                className: Ck,
                children: Hl(jS, {
                  defaultValue: i,
                  onChange: e => t("order", e)
                })
              }, "3"), Hl(mk, {
                disabled: !0,
                tab: Hl(HS, {
                  className: "icon-custom",
                  onClick: a
                })
              }, "4")]
            })
          })
        }));

        function JS() {
          return JS = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, JS.apply(this, arguments)
        }
        var QS = e => Te("svg", JS({
            width: 119,
            height: 103,
            fill: "none",
            xmlns: "http://www.w3.org/2000/svg"
          }, e), US || (US = Te("rect", {
            x: 1.896,
            y: 20.176,
            width: 100,
            height: 77.551,
            rx: 4,
            transform: "rotate(-8 1.896 20.176)",
            fill: "#EBECED"
          })), WS || (WS = Te("g", {
            filter: "url(#UploadEmpty_svg__a)"
          }, Te("rect", {
            x: 8,
            y: 15,
            width: 98,
            height: 76,
            rx: 4,
            fill: "#fff"
          }))), VS || (VS = Te("rect", {
            x: 12,
            y: 19,
            width: 90,
            height: 68,
            rx: 3,
            fill: "url(#UploadEmpty_svg__b)"
          })), XS || (XS = Te("path", {
            fillRule: "evenodd",
            clipRule: "evenodd",
            d: "M52.985 87H15a3 3 0 0 1-3-3v-9.35l12.64-11.907a4 4 0 0 1 5.655.169L52.985 87Z",
            fill: "url(#UploadEmpty_svg__c)"
          })), GS || (GS = Te("path", {
            fillRule: "evenodd",
            clipRule: "evenodd",
            d: "M102 73.691v10.31a3 3 0 0 1-3 3H28.395L58.23 49.274a8 8 0 0 1 11.237-1.312L102 73.69Z",
            fill: "url(#UploadEmpty_svg__d)"
          })), YS || (YS = Te("circle", {
            cx: 25,
            cy: 33,
            r: 6,
            fill: "#D3D3D3"
          })), qS || (qS = Te("circle", {
            cx: 104,
            cy: 15,
            r: 15,
            fill: "#333",
            fillOpacity: .9
          })), KS || (KS = Te("path", {
            d: "M108.619 13.85h-3.469v-3.47a1.149 1.149 0 1 0-2.3 0v3.47h-3.47a1.149 1.149 0 1 0 0 2.3h3.47v3.47a1.149 1.149 0 1 0 2.3 0v-3.47h3.469a1.149 1.149 0 1 0 0-2.3Z",
            fill: "#fff"
          })), $S || ($S = Te("defs", null, Te("linearGradient", {
            id: "UploadEmpty_svg__b",
            x1: 57,
            y1: 19,
            x2: 57,
            y2: 87,
            gradientUnits: "userSpaceOnUse"
          }, Te("stop", {
            stopColor: "#F5F5F5"
          }), Te("stop", {
            offset: 1,
            stopColor: "#F1F1F1"
          }), Te("stop", {
            offset: 1,
            stopColor: "#F1F1F1"
          })), Te("linearGradient", {
            id: "UploadEmpty_svg__c",
            x1: 38.615,
            y1: 57.687,
            x2: 38.615,
            y2: 97,
            gradientUnits: "userSpaceOnUse"
          }, Te("stop", {
            stopColor: "#E2E2E2"
          }), Te("stop", {
            offset: 1,
            stopColor: "#E1E1E1"
          })), Te("linearGradient", {
            id: "UploadEmpty_svg__d",
            x1: 62.337,
            y1: 52.452,
            x2: 62.337,
            y2: 96.902,
            gradientUnits: "userSpaceOnUse"
          }, Te("stop", {
            offset: 0,
            stopColor: "#E5E5E6"
          }), Te("stop", {
            offset: 1,
            stopColor: "#D3D3D3"
          })), Te("filter", {
            id: "UploadEmpty_svg__a",
            x: 0,
            y: 11,
            width: 114,
            height: 92,
            filterUnits: "userSpaceOnUse",
            colorInterpolationFilters: "sRGB"
          }, Te("feFlood", {
            floodOpacity: 0,
            result: "BackgroundImageFix"
          }), Te("feColorMatrix", {
            in: "SourceAlpha",
            values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
            result: "hardAlpha"
          }), Te("feOffset", {
            dy: 4
          }), Te("feGaussianBlur", {
            stdDeviation: 4
          }), Te("feComposite", {
            in2: "hardAlpha",
            operator: "out"
          }), Te("feColorMatrix", {
            values: "0 0 0 0 0.133333 0 0 0 0 0.133333 0 0 0 0 0.133333 0 0 0 0.03 0"
          }), Te("feBlend", {
            in2: "BackgroundImageFix",
            result: "effect1_dropShadow_188_17874"
          }), Te("feBlend", {
            in: "SourceGraphic",
            in2: "effect1_dropShadow_188_17874",
            result: "shape"
          }))))),
          eE = "DesignUpload-module_design_upload__rei3k",
          tE = "DesignUpload-module_pointer__Aud8c",
          nE = "DesignUpload-module_loading__4cg3s";
        c(".DesignUpload-module_design_upload__rei3k{display:flex;height:584px}.DesignUpload-module_pointer__Aud8c{cursor:pointer}.DesignUpload-module_loading__4cg3s{transform:scale(.6)}");
        var rE = Hl(QS, {}),
          iE = e => {
            var {
              width: t,
              height: n,
              children: r,
              fieldName: i
            } = e, [o, a] = dt(null), [s, l] = dt(""), [c, u] = tf(), {
              formatMessage: h
            } = vo();
            return Hl("div", {
              className: jl([e.className, eE]),
              style: {
                width: t,
                height: n
              },
              children: [Hl(up, {
                className: tE,
                action: null == o ? void 0 : o.write_host,
                accept: "image/png,image/jpeg,image/gif",
                beforeUpload: e => e.size > L ? (c.open({
                  content: h({
                    id: "image_size_tip"
                  })
                }), !1) : (e.status = "uploading", l(N), e.objectName = "".concat(window.SHOP_PARAMS.shop_id, "/").concat((new Date).getTime(), ".").concat((y(e.type) || w(e.name)).toLowerCase()), !!(o && Date.now() < 1e3 * o
                  .expire) || v().then((t => (a(t.data), e)))),
                data: e => ({
                  policy: o.policy,
                  OSSAccessKeyId: o.access_id,
                  success_action_status: 200,
                  signature: o.sign,
                  "x-oss-forbid-overwrite": !0,
                  key: e.objectName
                }),
                onSuccess: (t, n) => {
                  n.status = "success", n.url = o.read_host + n.objectName, n.label_id = i, l(R), e.onSuccess(n)
                },
                onError: (e, t, n) => {
                  n.status = "error"
                },
                tabIndex: "0",
                children: N === s ? Hl(Mp, {
                  className: nE
                }) : r || rE
              }), u]
            })
          },
          oE = "Design-module_app_parakeet_design__container__FrvSK",
          aE = "Design-module_show__WZcJY",
          sE = "Design-module_border_dash__-6wEJ",
          lE = "Design-module_hidden__35G87",
          cE = "Design-module_upload__d0XVy",
          uE = "Design-module_upload_dialog__fCkjQ",
          hE = "Design-module_wrapper__WGJzH";
        c(".Design-module_app_parakeet_design__container__FrvSK *{box-sizing:border-box}.Design-module_app_parakeet_design__container__FrvSK{border:2px solid hsla(0,0%,90%,.6);border-radius:8px;display:none}.Design-module_app_parakeet_design__container__FrvSK .canvas-container canvas{border-radius:8px}.Design-module_show__WZcJY{display:block!important}.Design-module_border_dash__-6wEJ{border-style:dashed!important}.Design-module_hidden__35G87{display:none!important}.Design-module_upload__d0XVy{align-items:center;background-color:#fdfdfd;border-radius:8px;display:flex;justify-content:center}.Design-module_upload_dialog__fCkjQ{border-radius:8px;left:50%;margin:0!important;padding:0!important;position:absolute!important;top:50%;transform:translateX(-50%) translateY(-50%);width:auto!important}.Design-module_preview_img__B65MY{max-height:100%;max-height:544px;max-width:100%}.Design-module_footer__YubKC{height:56px}.Design-module_app_parakeet_design__container__FrvSK .Design-module_upload_dialog__fCkjQ{margin:0!important}.Design-module_upload_dialog__fCkjQ .rc-dialog-body{padding:0}@media screen and (max-width:959px){.Design-module_wrapper__WGJzH{padding:0 16px}.eva .parakeet-design--wrapper{padding:0}.flash .parakeet-design--wrapper{padding:0 8px}}"),
          X.fabric.Object.prototype.transparentCorners = !1, X.fabric.Object.prototype.cornerColor = "#fff", X.fabric.Object.prototype.borderColor = "#599BFF", X.fabric.Object.prototype.cornerStrokeColor = "#599BFF", X.fabric.Object.prototype
          .cornerSize = 8;
        var pE = Ft(((e, t) => {
            var {
              data: n,
              visible: r,
              onAddFIle: i,
              setTab: o,
              onDelete: a,
              fileName: s,
              hasChangeSave: l
            } = e, c = vt(null), [u, h] = dt(""), [p, d] = dt(null), [f, g] = dt(), [m, v] = dt(), [b, y] = dt(!0), [w, x] = dt(!1), {
              formatMessage: k
            } = vo(), [C, D] = dt(""), [I, N] = dt(""), [R, j] = tf(), [L, F] = dt([]), [B, z] = dt({}), H = (e, t) => {
              var n = [...L];
              L.forEach(((t, r) => {
                var i;
                e.includes(t.label_id) && (u.remove(null === (i = L[r]) || void 0 === i ? void 0 : i.el), n.splice(r, 1, ""))
              }));
              var r = n.filter((e => e));
              F(r), r.length || t()
            };
            _t(t, (() => ({
              compositeUrl: C,
              removeImg: H,
              uploadFile: $
            })));
            var U = t => {
                t.lockScalingFlip = !0, t.on("scaling", (() => {
                  (e => {
                    var {
                      width: t,
                      height: n,
                      scaleX: r,
                      scaleY: i
                    } = e;
                    r * t > O && (e.scaleX = O / t), r * t < T && (e.scaleX = T / t), i * n > O && (e.scaleY = O / n), i * n < T && (e.scaleY = T / n);
                    var o = Math.ceil(t * e.scaleX),
                      a = Math.ceil(n * e.scaleY);
                    g({
                      width: o,
                      height: a
                    })
                  })(t), e.hasChangeSave(!1)
                })), t.on("moving", (() => {
                  t.preTop = t.top, t.preLeft = t.left
                })), g((e => ({
                  height: Math.ceil(parseInt(e.getScaledHeight(), 10)),
                  width: Math.ceil(parseInt(e.getScaledWidth(), 10))
                }))(t))
              },
              W = (t, n, r) => {
                new X.fabric.Image.fromURL(t, (function(i) {
                  (e => {
                    var {
                      width: t,
                      height: n
                    } = e, r = e.scaleX * t > O, i = e.scaleX * t < T, o = e.scaleY * n > O, a = e.scaleY * n < T;
                    r ? e.scaleX = O / t : i && (e.scaleX = T / t), o ? e.scaleY = O / n : a && (e.scaleY = T / n);
                    var s = Math.max(e.scaleX, e.scaleY);
                    (r || o || i || a) && !(s * t > O || s * t < T) && (e.scaleY = s, e.scaleX = s);
                    var l = Math.ceil(t * e.scaleX),
                      c = Math.ceil(n * e.scaleY);
                    e._initData = {
                      scaleX: e.scaleX,
                      scaleY: e.scaleY
                    }, g({
                      width: l,
                      height: c
                    })
                  })(i), (e => {
                    var {
                      scaleX: t,
                      scaleY: n,
                      width: r,
                      height: i
                    } = e, o = n * i, a = t * r, s = u.height - 36, l = u.width - 36, c = 1, h = o > s, p = a > l;
                    if (h && (c = s / i), p && (c = Math.min(l / r, c)), h || p) {
                      var d = c * r > T && c * i > T,
                        f = Math.max(l / r, s / i),
                        m = !d && pa ? f : c = Math.min(l / r, c);
                      e.scaleX = m, e.scaleY = m;
                      var v = Math.ceil(r * e.scaleX),
                        _ = Math.ceil(i * e.scaleY);
                      g({
                        width: v,
                        height: _
                      }), e._initData = {
                        scaleX: m,
                        scaleY: m
                      }
                    }
                    e.setPositionByOrigin(new X.fabric.Point(u.width / 2, u.height / 2))
                  })(i), u.add(i), (t => {
                    t.on("selected", (() => {
                      d(t), v(t.angle || 0), U(t), y(!1)
                    })), t.on("moving", (() => {
                      e.hasChangeSave(!1)
                    })), t.setControlVisible("mtr", !1)
                  })(i), u.setActiveObject(i), F([{
                    url: t,
                    el: i,
                    id: n,
                    label_id: r
                  }, ...L])
                }), {
                  crossOrigin: "anonymous"
                })
              };
            gt((() => {
              var e = Y();
              h(e), e.on("selection:cleared", (() => {
                y(!0)
              }))
            }), []);
            var V = e => {
                z(e);
                var t = new FileReader;
                t.readAsDataURL(e), t.onload = function(e) {
                  N(e.target.result), x(!0)
                }
              },
              G = e => {
                var t, {
                    uid: n
                  } = e,
                  r = [...L].findIndex((e => e.id === n));
                u.remove(null === (t = L[r]) || void 0 === t ? void 0 : t.el);
                var i = [...L];
                i.splice(r, 1), F(i)
              };
            gt((() => (pu.$on(P, V), pu.$on(M, G), () => {
              pu.$off(P, V), pu.$off(M, G)
            })), [u, L]);
            var Y = () => {
                var {
                  width: e,
                  height: t
                } = n, r = e - 4;
                return new X.fabric.Canvas(c.current, {
                  height: t,
                  width: r,
                  backgroundColor: "#fff",
                  selection: !1
                })
              },
              q = yt((e => {
                x(!1), N(""), null == a || a(e)
              }), [a]),
              K = yt((() => {
                var {
                  scaleX: e,
                  scaleY: t
                } = p._initData;
                p.set({
                  scaleX: e,
                  scaleY: t
                }), p.rotate(0), p.angle = 0, v(0), p.setPositionByOrigin(new X.fabric.Point(u.width / 2, u.height / 2)), u.renderAll(), l(!1), g({
                  width: p.width * e,
                  height: p.height * t
                })
              }), [p, u, l]),
              $ = () => {
                Z().then((e => {
                  D(e), u.discardActiveObject(), u.requestRenderAll(), y(!0), l(!0)
                })).catch((() => {
                  R.open({
                    content: k({
                      id: "image_upload_fail"
                    })
                  })
                }))
              },
              Z = () => {
                var e = u.toDataURL({
                  width: u.width,
                  height: u.height,
                  left: 0,
                  top: 0,
                  multiplier: 2,
                  format: A
                });
                if (!L.length) return Promise.resolve();
                var t = S(A);
                return _(E(e), t)
              },
              {
                width: J,
                height: Q
              } = n,
              ee = J - 4;
            return Hl("div", {
              className: jl([
                [hE, "parakeet-design--wrapper"]
              ]),
              children: Hl("div", {
                id: "app-parakeet-design--container",
                className: jl([oE, {
                  [aE]: r
                }, {
                  [sE]: !L.length
                }]),
                children: [Hl("div", {
                  className: jl([L.length > 0 ? aE : lE]),
                  children: Hl("canvas", {
                    ref: c
                  })
                }), !L.length && Hl(iE, {
                  className: cE,
                  width: ee,
                  height: Q,
                  onSuccess: e => {
                    i(e), V(e)
                  },
                  fieldName: s
                }), !b && Hl(ZS, {
                  defaultSize: f,
                  orderList: L,
                  defaultRotate: m || 0,
                  handleOperate: (t, n) => {
                    "size" === t ? (e => {
                      var {
                        width: t,
                        height: n
                      } = e, r = p.getOriginalSize();
                      p.set({
                        scaleX: t / r.width,
                        scaleY: n / r.height
                      })
                    })(n) : "rotate" === t ? (e => {
                      p.rotate(e), v(e)
                    })(n) : "order" === t && function() {
                      var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : [];
                      [...e].reverse().forEach((e => {
                        e.el.bringToFront()
                      })), F(e), u.renderAll()
                    }(n), e.hasChangeSave(!1), u.renderAll()
                  },
                  onReset: K,
                  onConfirm: $
                }), w && I && Hl(j_, {
                  className: uE,
                  title: null,
                  onClose: () => {
                    x(!1), N("")
                  },
                  closable: !1,
                  maskClosable: !1,
                  visible: !0,
                  children: Hl($v, {
                    file: B,
                    url: I,
                    onConfirm: e => {
                      W(e.dataUrl, e.uid, e.label_id), x(!1), N(""), o(), l(!1), window.scrollTo(0, 0)
                    },
                    onCancel: q
                  })
                }), j]
              })
            })
          })),
          dE = (e, t) => e.currentStyle ? e.currentStyle[t] : getComputedStyle(e)[t];
        c(
        '.rc-dialog{margin:10px;position:relative;width:auto}.rc-dialog-wrap{-webkit-overflow-scrolling:touch;bottom:0;left:0;outline:0;overflow:auto;position:fixed;right:0;top:0;z-index:1050}.rc-dialog-title{font-size:14px;font-weight:700;line-height:21px;margin:0}.rc-dialog-content{background-clip:padding-box;background-color:#fff;border:none;border-radius:6px 6px;position:relative}.rc-dialog-close{background:transparent;border:0;color:#000;cursor:pointer;filter:alpha(opacity=20);font-size:21px;font-weight:700;line-height:1;opacity:.2;position:absolute;right:20px;text-decoration:none;text-shadow:0 1px 0 #fff;top:12px}.rc-dialog-close-x:after{content:"×"}.rc-dialog-close:hover{filter:alpha(opacity=100);opacity:1;text-decoration:none}.rc-dialog-header{background:#fff;border-bottom:1px solid #e9e9e9;border-radius:5px 5px 0 0;color:#666;padding:13px 20px 14px}.rc-dialog-body{padding:20px}.rc-dialog-footer{border-radius:0 0 5px 5px;border-top:1px solid #e9e9e9;padding:10px 20px;text-align:right}.rc-dialog-zoom-appear,.rc-dialog-zoom-enter{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused;animation-timing-function:cubic-bezier(.08,.82,.17,1);opacity:0}.rc-dialog-zoom-leave{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused;animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.rc-dialog-zoom-appear.rc-dialog-zoom-appear-active,.rc-dialog-zoom-enter.rc-dialog-zoom-enter-active{animation-name:rcDialogZoomIn;animation-play-state:running}.rc-dialog-zoom-leave.rc-dialog-zoom-leave-active{animation-name:rcDialogZoomOut;animation-play-state:running}@keyframes rcDialogZoomIn{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}@keyframes rcDialogZoomOut{0%{transform:scale(1)}to{opacity:0;transform:scale(0)}}@media (min-width:768px){.rc-dialog{margin:30px auto;width:600px}}.rc-dialog-mask{background-color:#373737;background-color:rgba(55,55,55,.6);bottom:0;filter:alpha(opacity=50);height:100%;left:0;position:fixed;right:0;top:0;z-index:1050}.rc-dialog-mask-hidden{display:none}.rc-dialog-fade-appear,.rc-dialog-fade-enter{opacity:0}.rc-dialog-fade-appear,.rc-dialog-fade-enter,.rc-dialog-fade-leave{animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused;animation-timing-function:cubic-bezier(.55,0,.55,.2)}.rc-dialog-fade-appear.rc-dialog-fade-appear-active,.rc-dialog-fade-enter.rc-dialog-fade-enter-active{animation-name:rcDialogFadeIn;animation-play-state:running}.rc-dialog-fade-leave.rc-dialog-fade-leave-active{animation-name:rcDialogFadeOut;animation-play-state:running}@keyframes rcDialogFadeIn{0%{opacity:0}to{opacity:1}}@keyframes rcDialogFadeOut{0%{opacity:1}to{opacity:0}}');
        var fE;

        function gE() {
          return gE = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, gE.apply(this, arguments)
        }
        c(
        '.rc-notification{align-items:flex-end;display:flex;max-height:100vh;overflow-y:auto;padding:10px;position:fixed;z-index:1000}.rc-notification-top,.rc-notification-topLeft,.rc-notification-topRight{flex-direction:column;top:0}.rc-notification-topRight{right:0}.rc-notification-notice{background:#fff;border:0 solid transparent;border-radius:3px 3px;box-shadow:0 0 10px rgba(0,0,0,.2);box-sizing:border-box;display:block;line-height:1.5;margin:12px 0;position:relative;width:auto}.rc-notification-notice-content{padding:7px 20px 7px 10px}.rc-notification-notice-closable .rc-notification-notice-content{padding-right:20px}.rc-notification-notice-close{color:#000;cursor:pointer;filter:alpha(opacity=20);font-size:16px;font-weight:700;line-height:1;opacity:.2;outline:none;position:absolute;right:5px;text-decoration:none;text-shadow:0 1px 0 #fff;top:3px}.rc-notification-notice-close-x:after{content:"×"}.rc-notification-notice-close:hover{filter:alpha(opacity=100);opacity:1;text-decoration:none}.rc-notification-fade{overflow:hidden;transition:all .3s}.rc-notification-fade-appear-start{opacity:0;transform:translateX(100%)}.rc-notification-fade-appear-active{opacity:1;transform:translateX(0)}');
        var mE = e => Te("svg", gE({
          width: 24,
          height: 24,
          fill: "none",
          xmlns: "http://www.w3.org/2000/svg"
        }, e), fE || (fE = Te("path", {
          d: "M6.992 5.342a1.167 1.167 0 0 0-1.65 1.65L10.35 12l-5.008 5.008a1.167 1.167 0 1 0 1.65 1.65L12 13.65l5.008 5.008a1.167 1.167 0 0 0 1.65-1.65L13.65 12l5.008-5.008a1.167 1.167 0 0 0-1.65-1.65L12 10.35 6.992 5.342Z",
          fill: "#333"
        })));
        var vE = {
            customize_not_complete: "商品定制未完成",
            select_add_price_tip: "选择{key}将加价{price}",
            add_price_tip: "{key}将加价{price}",
            select: "选择",
            cancel: "取消",
            size: "尺寸",
            rotate: "旋转",
            order: "顺序",
            width: "宽度",
            height: "高度",
            size_range: "尺寸范围",
            upload_img_price: "上传图片价格",
            image_upload_success: "图片上传成功",
            image_upload_fail: "图片上传失败 ",
            image_size_tip: "图片大小超过10M",
            url_confirm_title: "保存设计图",
            url_confirm_desc: "是否要保存并上传设计图至订单?",
            url_confirm_yes: "是的",
            url_confirm_no: "不需要",
            preview_personalization: "预览定制效果",
            view_product_image: "查看商品图集",
            font_color: "文本颜色",
            font: "字体",
            font_size: "字号",
            preview_range_tip: "请勿超出打印区域",
            "options.upload.large.text": "将您的图片拖放到此处,或者",
            "options.upload.large.text.mobile": "在此上传图片",
            "options.upload.large.browse": "浏览",
            "options.upload.large.limit": "接受 .gif、.jpg、.jpeg 和 .png,最大 10MB",
            "options.upload.large.maxfiles": "最大上传数量",
            upload_max_tip: "图片上传数量不应超过{max}张",
            image_upload_section_fail: "部分图片上传失败",
            required_tip: "此项为必填项"
          },
          _E = {
            hello: "hello",
            customize_not_complete: "Product customization is not completed",
            select_add_price_tip: "Selection of {key} will add {price} to the price",
            add_price_tip: "{key} will add {price} to the price",
            select: "Select",
            cancel: "Cancel",
            size: "Size",
            rotate: "Rotate",
            order: "Order",
            width: "Width",
            height: "Height",
            size_range: "Size range",
            upload_img_price: "Image upload price",
            image_upload_success: "Upload successfully",
            image_upload_fail: "Upload failed",
            image_size_tip: "Image size exceeds 10M",
            url_confirm_title: "Save your design",
            url_confirm_desc: "Do you want to save and upload the design to your order?",
            url_confirm_yes: "Yes",
            url_confirm_no: "No",
            preview_personalization: "Preview your personalization",
            view_product_image: "View original product image",
            font_color: "Font color",
            font: "Font",
            font_size: "Font size",
            preview_range_tip: "Please keep it inside the print area",
            "options.upload.large.text": "Drop your image here, or ",
            "options.upload.large.text.mobile": "Upload your image here",
            "options.upload.large.browse": "browse",
            "options.upload.large.limit": "Accepts .gif, .jpg, .jpeg, and .png, 10MB max",
            "options.upload.large.maxfiles": "Maximum number of uploads",
            upload_max_tip: "Maximum number of uploads: {max}",
            image_upload_section_fail: "Some images failed to upload",
            required_tip: "This is a required field"
          },
          bE = {
            customize_not_complete: "Produktanpassung nicht abgeschlossen",
            select_add_price_tip: "Wählen Sie {key} erhöht den Preis um {price}",
            add_price_tip: "{key} Addiert {price} zum Preis",
            select: "Wählen Sie",
            cancel: "Abbrechen",
            size: "Größe",
            rotate: "Drehen",
            order: "Bestellung",
            width: "Breite",
            height: "Höhe",
            size_range: "Größenbereich",
            upload_img_price: "Bildpreis hochladen",
            image_upload_success: "Bild erfolgreich hochgeladen",
            image_upload_fail: "Bild-Upload fehlgeschlagen ",
            image_size_tip: "Die Bildgröße überschreitet 10 MB",
            url_confirm_title: "Speichern Sie die Blaupause",
            url_confirm_desc: "Möchten Sie das Design speichern und in die Bestellung hochladen?",
            url_confirm_yes: "Ja",
            url_confirm_no: "unnötig",
            preview_personalization: "Sehen Sie sich Ihre Personalisierung in der Vorschau an",
            view_product_image: "Originalproduktbild ansehen",
            font_color: "Schriftfarbe",
            font: "Schriftart",
            font_size: "Schriftgröße",
            preview_range_tip: "Bitte bewahren Sie es innerhalb des Druckbereichs auf",
            "options.upload.large.text": "Legen Sie Ihr Bild hier ab oder ",
            "options.upload.large.text.mobile": "Laden Sie Ihr Bild hier hoch",
            "options.upload.large.browse": "stöbern Sie",
            "options.upload.large.limit": "Akzeptiert .gif, .jpeg, .jpg und .png, maximal 10 MB",
            "options.upload.large.maxfiles": "Maximale Anzahl an Uploads",
            upload_max_tip: "Maximale Anzahl an Uploads {max}",
            image_upload_section_fail: "Einige Bilder konnten nicht hochgeladen werden",
            required_tip: "Das ist ein Pflichtfeld"
          },
          yE = {
            customize_not_complete: "No se ha completado la personalización del producto",
            select_add_price_tip: "Seleccione {key} añadirá {price} al precio",
            add_price_tip: "{key} Añadir {price} al precio",
            select: "Seleccione",
            cancel: "Cancelar",
            size: "Tamaño",
            rotate: "Girar",
            order: "Pedir",
            width: "Anchura",
            height: "Altura",
            size_range: "Tamaño",
            upload_img_price: "Subir imagen precio",
            image_upload_success: "Imagen cargada con éxito",
            image_upload_fail: "Carga de imagen fallida",
            image_size_tip: "El tamaño de la imagen supera los 10M",
            url_confirm_title: "Guardar el plano",
            url_confirm_desc: "¿Quieres guardar y subir el diseño al pedido?",
            url_confirm_yes: "Sí",
            url_confirm_no: "innecesario",
            preview_personalization: "Vista previa de su personalización",
            view_product_image: "Ver imagen original del producto",
            font_color: "Color de fuente",
            font: "Fuente",
            font_size: "Tamaño de fuente",
            preview_range_tip: "Manténgalo dentro del área de impresión",
            "options.upload.large.text": "Suelta tu imagen aquí, o ",
            "options.upload.large.text.mobile": "Sube tu imagen aquí",
            "options.upload.large.browse": "navega",
            "options.upload.large.limit": "Acepta .gif, .jpeg, .jpg y .png, 10 MB máx",
            "options.upload.large.maxfiles": "Número máximo de subidas",
            upload_max_tip: "Número máximo de subidas {max}",
            image_upload_section_fail: "Algunas imágenes no se pudieron cargar",
            required_tip: "Este es un campo obligatorio"
          },
          wE = {
            customize_not_complete: "La personnalisation du produit n'est pas terminée",
            select_add_price_tip: "Sélectionner {key} ajoutera {price} au prix",
            add_price_tip: "{key} Ajouter {price} au prix",
            select: "Sélectionnez",
            cancel: "Annuler",
            size: "Taille",
            rotate: "Faire pivoter",
            order: "Commander",
            width: "Largeur",
            height: "Hauteur",
            size_range: "Gamme de taille",
            upload_img_price: "Télécharger le prix de l'image",
            image_upload_success: "Image téléchargée avec succès",
            image_upload_fail: "Le téléchargement de l'image a échoué ",
            image_size_tip: "La taille de l'image dépasse 10M",
            url_confirm_title: "Enregistrer le plan",
            url_confirm_desc: "Voulez-vous enregistrer et télécharger le design dans la commande ?",
            url_confirm_yes: "Oui",
            url_confirm_no: "nutile",
            preview_personalization: "Prévisualisez votre personnalisation",
            view_product_image: "Voir l'image originale du produit",
            preview_range_tip: "Veuillez le conserver à l'intérieur de la zone d'impression",
            font_color: "Couleur de la police",
            font: "Police de caractère",
            font_size: "Taille de police",
            "options.upload.large.text": "Déposez votre image ici, ou ",
            "options.upload.large.text.mobile": "Téléchargez votre image ici",
            "options.upload.large.browse": "parcourez",
            "options.upload.large.limit": "Accepte .gif, .jpeg, .jpg et .png, 10 Mo max",
            "options.upload.large.maxfiles": "Nombre maximal de téléchargements",
            upload_max_tip: "Nombre maximal de téléchargements: {max}",
            image_upload_section_fail: "Certaines images n'ont pas pu être téléchargées",
            required_tip: "Ceci est un champ obligatoire"
          },
          xE = {
            customize_not_complete: "Kustomisasi komoditas belum selesai",
            select_add_price_tip: "Memilih {key} akan menambahkan {price}",
            add_price_tip: "{key} akan menaikkan harga sebesar {price}",
            select: "memilih",
            cancel: "Membatalkan",
            size: "ukuran",
            rotate: "untuk memutar",
            order: "memesan",
            width: "lebar",
            height: "tinggi",
            size_range: "Kisaran ukuran",
            upload_img_price: "Unggah harga gambar",
            image_upload_success: "Gambar berhasil diunggah",
            image_upload_fail: "Pengunggahan gambar gagal",
            image_size_tip: "Ukuran gambar melebihi 10M",
            url_confirm_title: "Simpan cetak biru",
            url_confirm_desc: "Apakah Anda ingin menyimpan dan mengunggah desain ke pesanan?",
            url_confirm_yes: "Ya",
            url_confirm_no: "tidak perlu",
            preview_personalization: "Pratinjau personalisasi Anda",
            view_product_image: "Lihat gambar produk asli",
            font_color: "Warna huruf",
            font: "Fon",
            font_size: "Ukuran huruf",
            preview_range_tip: "Harap simpan di dalam area cetak",
            "options.upload.large.text": "Jatuhkan gambar Anda di sini, atau ",
            "options.upload.large.text.mobile": "Unggah gambar Anda di sini",
            "options.upload.large.browse": "jelajahi",
            "options.upload.large.limit": "Menerima .gif, .jpeg, .jpg, dan .png, maksimal 10MB",
            "options.upload.large.maxfiles": "Jumlah unggahan maksimum",
            upload_max_tip: "Jumlah unggahan maksimum {max}",
            image_upload_section_fail: "Beberapa gambar gagal diunggah",
            required_tip: "Ini adalah kolom yang harus diisi"
          },
          kE = {
            customize_not_complete: "Personalizzazione del prodotto non completata",
            select_add_price_tip: "Selezionare {key} aggiungerà {price} al prezzo",
            add_price_tip: "{key} Aggiungi {price} al prezzo",
            select: "Selezionare",
            cancel: "Annulla",
            size: "Dimensione",
            rotate: "Ruotare",
            order: "Ordine",
            width: "Larghezza",
            height: "Altezza",
            size_range: "Gamma di dimensioni",
            upload_img_price: "Carica il prezzo dell'immagine",
            image_upload_success: "Immagine caricata con successo",
            image_upload_fail: "Caricamento dell'immagine non riuscito",
            image_size_tip: "La dimensione dell'immagine supera i 10M",
            url_confirm_title: "Salva il progetto",
            url_confirm_desc: "Vuoi salvare e caricare il design nell'ordine?",
            url_confirm_yes: "SÌ",
            url_confirm_no: "non necessario",
            preview_personalization: "Visualizza in anteprima la tua personalizzazione",
            view_product_image: "Visualizza l'immagine del prodotto originale",
            font_color: "Visualizza l'immagine del prodotto originale",
            font: "Font",
            font_size: "Dimensione del font",
            preview_range_tip: "Si prega di tenerlo all'interno dell'area di stampa",
            "options.upload.large.text": "Trascina qui la tua immagine o ",
            "options.upload.large.text.mobile": "Carica qui la tua immagine",
            "options.upload.large.browse": "sfoglia",
            "options.upload.large.limit": "Accetta .gif, .jpeg, .jpg e .png, 10 MB max",
            "options.upload.large.maxfiles": "Numero massimo di caricamenti",
            upload_max_tip: "Numero massimo di caricamenti {max}",
            image_upload_section_fail: "Impossibile caricare alcune immagini",
            required_tip: "Questo è un campo obbligatorio"
          },
          CE = {
            customize_not_complete: "製品のカスタマイズが完了しない",
            select_add_price_tip: "セレクト{key} を選択すると、価格に{price}が加算されます",
            add_price_tip: "{key} 価格に{price}を加算する ",
            select: "選択する",
            cancel: "キャンセル",
            size: "サイズ",
            rotate: "回転させる",
            order: "注文方法",
            width: "幅",
            height: "高さ",
            size_range: "サイズ範囲",
            upload_img_price: "画像の価格をアップロードする",
            image_upload_success: "画像が正常にアップロードされました",
            image_upload_fail: "画像のアップロードに失敗しました",
            image_size_tip: "画像サイズが10Mを超える.",
            url_confirm_title: "設計図を保存する",
            url_confirm_desc: "デザインを保存して注文にアップロードしますか?",
            url_confirm_yes: "はい",
            url_confirm_no: "不要",
            preview_personalization: "パーソナライズをプレビューする",
            view_product_image: "元の製品画像を見る",
            font_color: "文字の色",
            font: "フォント",
            font_size: "フォントサイズ",
            preview_range_tip: "印刷範囲内に収めてください",
            "options.upload.large.text": "ここに画像をドロップするか、参照してください",
            "options.upload.large.text.mobile": "ここに画像をアップロードしてください",
            "options.upload.large.browse": "閲覧",
            "options.upload.large.limit": ".gif、.jpg、.jpeg、.png を受け入れ、最大 10MB",
            "options.upload.large.maxfiles": "最大アップロード数",
            upload_max_tip: "最大アップロード数 {max}",
            image_upload_section_fail: "一部の画像のアップロードに失敗しました",
            required_tip: "これは必要項目です"
          },
          SE = {
            customize_not_complete: "제품 사용자 지정이 완료되지 않았습니다.",
            select_add_price_tip: "선택 {key} 가격에 {price}달러가 추가됩니다",
            add_price_tip: "{key} Ajouter {price} ",
            select: "선택",
            cancel: "취소",
            size: "사이즈",
            rotate: "회전",
            order: "주문",
            width: "폭",
            height: "높이",
            size_range: "크기 범위",
            upload_img_price: "이미지 가격 업로드",
            image_upload_success: "이미지가 성공적으로 업로드되었습니다.",
            image_upload_fail: "이미지 업로드 실패 ",
            image_size_tip: "이미지 크기가 10M를 초과합니다.",
            url_confirm_title: "청사진 저장",
            url_confirm_desc: "디자인을 저장하고 오더에 업로드하시겠습니까?",
            url_confirm_yes: "예",
            url_confirm_no: "불필요한",
            preview_personalization: "개인화 미리보기",
            view_product_image: "원본 제품 이미지 보기",
            preview_range_tip: "인쇄 영역 안에 보관하십시오",
            font_color: "글꼴 색상",
            font: "폰트",
            font_size: "글꼴 크기",
            "options.upload.large.text": "이미지를 여기로 드래그 앤 드롭하거나",
            "options.upload.large.text.mobile": "여기에 이미지 업로드",
            "options.upload.large.browse": "검색",
            "options.upload.large.limit": ".gif, .jpeg, .jpg 및 .png 허용, 최대 10MB",
            "options.upload.large.maxfiles": "최대 업로드 수",
            upload_max_tip: "최대 업로드 수 {max}",
            image_upload_section_fail: "일부 이미지를 업로드하지 못했습니다",
            required_tip: "필수 입력란입니다."
          },
          EE = {
            "en-us": _E,
            "zh-cn": vE,
            "zh-tw": {
              customize_not_complete: "商品定制未完成",
              select_add_price_tip: "選擇{key}將加價{price}",
              add_price_tip: "{key}將加價{price}",
              select: "選擇",
              cancel: "取消",
              size: "尺寸",
              rotate: "旋轉",
              order: "順序",
              width: "寬度",
              height: "高度",
              size_range: "尺寸範圍",
              upload_img_price: "上傳圖片價格",
              image_upload_success: "圖片上傳成功",
              image_upload_fail: "圖片上傳失敗",
              image_size_tip: "圖片大小超過10M",
              url_confirm_title: "保存设计图",
              url_confirm_desc: "是否要保存并上传设计图至订单?",
              url_confirm_yes: "是的",
              url_confirm_no: "不需要",
              preview_personalization: "預覽定制效果",
              view_product_image: "查看商品圖集",
              font_color: "文本顏色",
              font: "字體",
              font_size: "字號",
              preview_range_tip: "請勿超出打印區域",
              "options.upload.large.text": "將您的圖片拖放到此處,或",
              "options.upload.large.text.mobile": "在此上傳圖片",
              "options.upload.large.browse": "瀏覽",
              "options.upload.large.limit": "接受 .gif、.jpg、.jpeg 和 .png,最大 10MB",
              "options.upload.large.maxfiles": "最大上傳數量",
              upload_max_tip: "圖片上傳數量不應超過{max}張",
              image_upload_section_fail: "部分圖片上傳失敗",
              required_tip: "此項為必填項"
            },
            "th-th": {
              customize_not_complete: "การปรับแต่งสินค้าไม่เสร็จสมบูรณ์",
              select_add_price_tip: "การเลือก{key}จะเพิ่ม {price}",
              add_price_tip: "{key}จะเพิ่มราคาอีก{price}",
              select: "เลือก",
              cancel: "ยกเลิก",
              size: "ขนาด",
              rotate: "เพื่อหมุน",
              order: "คำสั่ง",
              width: "ความกว้าง",
              height: "สูง",
              size_range: "ช่วงขนาด",
              upload_img_price: "อัพโหลดภาพราคา",
              image_upload_success: "อัปโหลดรูปภาพสำเร็จแล้ว",
              image_upload_fail: "การอัปโหลดรูปภาพล้มเหลว ",
              image_size_tip: "ขนาดภาพเกิน 10M",
              url_confirm_title: "บันทึกพิมพ์เขียว",
              url_confirm_desc: "คุณต้องการบันทึกและอัปโหลดการออกแบบไปยังคำสั่งซื้อหรือไม่",
              url_confirm_yes: "ใช่",
              url_confirm_no: "ไม่จำเป็น",
              preview_personalization: "ดูตัวอย่างการปรับเปลี่ยนในแบบของคุณ",
              view_product_image: "ดูภาพผลิตภัณฑ์ต้นฉบับ",
              preview_range_tip: "โปรดเก็บไว้ในพื้นที่พิมพ์",
              font_color: "สีตัวอักษร",
              font: "แบบอักษร",
              font_size: "ขนาดตัวอักษร",
              "options.upload.large.text": "ลากและวางรูปภาพของคุณที่นี่",
              "options.upload.large.text.mobile": "อัปโหลดภาพของคุณที่นี่",
              "options.upload.large.browse": "เรียกดู",
              "options.upload.large.limit": "ยอมรับ .gif, .jpeg, .jpg และ .png ขนาดสูงสุด 10MB",
              "options.upload.large.maxfiles": "จำนวนการอัปโหลดสูงสุด",
              upload_max_tip: "จำนวนการอัปโหลดสูงสุด {max}",
              image_upload_section_fail: "ภาพบางภาพไม่สามารถอัปโหลดได้",
              required_tip: "นี่คือข้อมูลที่จำเป็น"
            },
            "fr-fr": wE,
            "ko-kr": SE,
            "ja-jp": CE,
            "es-es": yE,
            "pt-pt": {
              customize_not_complete: "Personalização do produto não concluída",
              select_add_price_tip: "Seleccione {key} adicionará {price} ao preço",
              add_price_tip: "{key} Añadir {price} al precio",
              select: "Seleccione",
              cancel: "Cancelar",
              size: "Tamanho",
              rotate: "Rodar",
              order: "Encomenda",
              width: "Largura",
              height: "Altura",
              size_range: "Gama de tamanhos",
              upload_img_price: "Carregar preço da imagem",
              image_upload_success: "Imagem enviada com sucesso",
              image_upload_fail: "Falha no upload da imagem",
              image_size_tip: "O tamanho da imagem excede 10M",
              url_confirm_title: "Salve o projeto",
              url_confirm_desc: "Deseja salvar e enviar o design para o pedido?",
              url_confirm_yes: "Sim",
              url_confirm_no: "desnecessário",
              preview_personalization: "Visualize sua personalização",
              view_product_image: "Veja a imagem original do produto",
              font_color: "Cor da fonte",
              font: "Fonte",
              font_size: "Tamanho da fonte",
              preview_range_tip: "Por favor, mantenha-o dentro da área de impressão",
              "options.upload.large.text": "Solte sua imagem aqui ou ",
              "options.upload.large.text.mobile": "Carregue sua imagem aqui",
              "options.upload.large.browse": "navegue",
              "options.upload.large.limit": "Aceita .gif, .jpeg, .jpg e .png, máximo de 10 MB",
              "options.upload.large.maxfiles": "Número máximo de carregamentos",
              upload_max_tip: "Número máximo de carregamentos {max}",
              image_upload_section_fail: "Algumas imagens não foram carregadas",
              required_tip: "Este é um campo obrigatório"
            },
            "ru-ru": {
              customize_not_complete: "Настройка продукта не завершена",
              select_add_price_tip: "Выберите {key} добавит {price} к цене",
              add_price_tip: "{key} Добавить {price} к цене",
              select: "Выберите",
              cancel: "Отменить",
              size: "Размер",
              rotate: "Повернуть",
              order: "Заказать",
              width: "Ширина",
              height: "Высота",
              size_range: "Диапазон размеров",
              upload_img_price: "Загрузить изображение цена",
              image_upload_success: "Изображение успешно загружено",
              image_upload_fail: "Не удалось загрузить изображение",
              image_size_tip: "Размер изображения превышает 10M",
              url_confirm_title: "Сохраните план",
              url_confirm_desc: "Хотите сохранить и загрузить дизайн в заказ?",
              url_confirm_yes: "Да",
              url_confirm_no: "ненужный",
              preview_personalization: "Предварительный просмотр вашей персонализации",
              view_product_image: "Посмотреть исходное изображение продукта",
              font_color: "Цвет шрифта",
              font: "Цвет шрифта",
              font_size: "Размер шрифта",
              preview_range_tip: "Пожалуйста, держите его внутри области печати",
              "options.upload.large.text": "Перетащите свое изображение сюда или ",
              "options.upload.large.text.mobile": "Загрузите свое изображение сюда",
              "options.upload.large.browse": "просматривать",
              "options.upload.large.limit": "Принимаются форматы .gif, .jpeg, .jpg и .png, не более 10 МБ",
              "options.upload.large.maxfiles": "Максимальное количество загрузок",
              upload_max_tip: "Максимальное количество загрузок {max}",
              image_upload_section_fail: "Не удалось загрузить некоторые изображения",
              required_tip: "Данное поле является обязательным к заполнению"
            },
            "it-it": kE,
            "ar-sa": {
              customize_not_complete: "لم يتم الانتهاء من تخصيص السلع",
              select_add_price_tip: "{price} سيضيف {key} تحديد",
              add_price_tip: "{key} سيزيد السعر بمقدار {price} دولار",
              select: "يختار",
              cancel: "يلغي",
              size: "مقاس",
              rotate: "لتدوير",
              order: "طلب",
              width: "عرض",
              height: "عالي",
              size_range: "نطاق الحجم",
              upload_img_price: "سعر تحميل الصورة",
              image_upload_success: "تم تحميل الصورة بنجاح",
              image_upload_fail: "فشل تحميل الصورة",
              image_size_tip: "10M حجم الصورة يتجاوز",
              url_confirm_title: "احفظ المخطط",
              url_confirm_desc: "هل تريد حفظ وتحميل التصميم على الطلب؟",
              url_confirm_yes: "نعم",
              url_confirm_no: "غير ضروري",
              preview_personalization: "معاينة التخصيص الخاص بك",
              view_product_image: "عرض صورة المنتج الأصلي",
              font_color: "لون الخط",
              font: "الخط",
              font_size: "حجم الخط",
              preview_range_tip: "يرجى الاحتفاظ بها داخل منطقة الطباعة",
              "options.upload.large.text": "ضع صورتك هنا ، أو ",
              "options.upload.large.text.mobile": "قم بتحميل صورتك هنا",
              "options.upload.large.browse": "تصفح",
              "options.upload.large.limit": "يقبل .gif و. jpeg و. jpg و. png ، بحد أقصى 10 ميغابايت",
              "options.upload.large.maxfiles": "أقصى عدد للتحميلات",
              upload_max_tip: "أقصى عدد للتحميلات {max}",
              image_upload_section_fail: "فشل تحميل بعض الصور",
              required_tip: "هذا مجال مطلوب"
            },
            "id-id": xE,
            "de-de": bE,
            "nl-nl": {
              customize_not_complete: "Productaanpassing niet voltooid",
              select_add_price_tip: "Selecteer {key} zal {price} toevoegen aan de prijs",
              add_price_tip: "{key} Voeg {price} toe aan de prijs",
              select: "Selecteer",
              cancel: "Annuleren",
              size: "Maat",
              rotate: "Draai",
              order: "Bestel",
              width: "Breedte",
              height: "Hoogte",
              size_range: "Maatbereik",
              upload_img_price: "Prijs afbeelding uploaden",
              image_upload_success: "Afbeelding geüpload",
              image_upload_fail: "Het uploaden van afbeeldingen is mislukt",
              image_size_tip: "De afbeeldingsgrootte overschrijdt 10M",
              url_confirm_title: "Bewaar de blauwdruk",
              url_confirm_desc: "Wil je het ontwerp opslaan en uploaden naar de bestelling?",
              url_confirm_yes: "Ja",
              url_confirm_no: "onnodig",
              preview_personalization: "Bekijk een voorbeeld van uw personalisatie",
              view_product_image: "Bekijk de originele productafbeelding",
              font_color: "Letterkleur",
              font: "Lettertype",
              font_size: "Lettertypegrootte",
              preview_range_tip: "Bewaar het binnen het afdrukgebied",
              "options.upload.large.text": "Zet je afbeelding hier neer, of ",
              "options.upload.large.text.mobile": "Upload hier uw afbeelding",
              "options.upload.large.browse": "blader",
              "options.upload.large.limit": "Accepteert .gif, .jpeg, .jpg en .png, max. 10 MB",
              "options.upload.large.maxfiles": "Maximaal aantal uploads",
              upload_max_tip: "Maximaal aantal uploads {max}",
              image_upload_section_fail: "Sommige afbeeldingen konden niet worden geüpload",
              required_tip: "dit is een verplicht veld"
            },
            "pl-pl": {
              customize_not_complete: "Dostosowanie produktu nie zostało zakończone",
              select_add_price_tip: "Wybranie {key} doda {price}",
              add_price_tip: "{key} podniesie cenę o {price}",
              select: "wybierać",
              cancel: "Anulować",
              size: "rozmiar",
              rotate: "obrócić",
              order: "zamówienie",
              width: "szerokość",
              height: "wysoki",
              size_range: "Zakres rozmiarów",
              upload_img_price: "Prześlij cenę zdjęcia",
              image_upload_success: "Obraz przesłany pomyślnie",
              image_upload_fail: "Przesyłanie obrazu nie powiodło się",
              image_size_tip: "Rozmiar obrazu przekracza 10M",
              url_confirm_title: "Zapisz plan",
              url_confirm_desc: "Chcesz zapisać i wgrać projekt do zamówienia?",
              url_confirm_yes: "ak",
              url_confirm_no: "niepotrzebny",
              preview_personalization: "Wyświetl podgląd swojej personalizacji",
              view_product_image: "Zobacz oryginalne zdjęcie produktu",
              font_color: "Kolor czcionki",
              font: "Czcionka",
              font_size: "Rozmiar czcionki",
              preview_range_tip: "Proszę trzymać go w obszarze drukowania",
              "options.upload.large.text": "Upuść swój obraz tutaj lub ",
              "options.upload.large.text.mobile": "Prześlij swój obraz tutaj",
              "options.upload.large.browse": "Uprzeglądaj",
              "options.upload.large.limit": "Akceptuje pliki .gif, .jpeg, .jpg i .png, maks. 10 MB",
              "options.upload.large.maxfiles": "Maksymalna liczba przesłanych plików",
              upload_max_tip: "Maksymalna liczba przesłanych plików {max}",
              image_upload_section_fail: "Nie udało się przesłać niektórych obrazów",
              required_tip: "To pole jest wymagane"
            }
          },
          TE = e => t => {
            var n, r = (null === (n = document.documentElement.lang) || void 0 === n ? void 0 : n.toLowerCase()) || j,
              i = bt((() => EE[r] || EE[j]), [r]);
            return Hl(ko, {
              messages: i,
              locale: r,
              defaultLocale: j,
              children: Hl(e, h({}, t))
            })
          },
          OE = e => {
            var t, n, r, i = [];
            try {
              var o;
              null == e || e.forEach((e => {
                var t, n;
                e.isHidden && null !== (t = e.preview_setting) && void 0 !== t && t.preview_open && (null === (n = e.preview_setting.data) || void 0 === n || n.forEach((e => {
                  var t;
                  null === (t = e.cards) || void 0 === t || t.forEach((e => {
                    e.isShow = !1
                  }))
                })))
              }));
              var a = re.exports.cloneDeep(e.filter((e => {
                var t;
                return null === (t = e.preview_setting) || void 0 === t ? void 0 : t.preview_open
              })));
              if (null == a || !a.length) return [];
              null == a || a.forEach((e => {
                if (2 === e.preview_setting.type) {
                  var t;
                  if (null !== (t = e.preview_setting.data.filter((e => e.bgSelected))) && void 0 !== t && t.length) {
                    var n = e.preview_setting.data.filter((e => e.bgSelected))[0];
                    i.push(h(h({}, n), {}, {
                      orders: [e.order]
                    }))
                  }
                } else {
                  var r = e.preview_setting.data[0];
                  i.push(h(h({}, r), {}, {
                    orders: [e.order]
                  }))
                }
              }));
              var s = re.exports.cloneDeep(i);
              null === (o = i) || void 0 === o || o.forEach((e => {
                var t, n = [],
                  r = [];
                null === (t = s.filter((t => e.bg_image_url === t.bg_image_url))) || void 0 === t || t.forEach((e => {
                  n = n.concat(e.cards), r = r.concat(e.orders)
                })), e.cards = n, e.orders = r
              })), t = i, n = "bg_image_url", r = new Map, i = t.filter((e => !r.has(e[n]) && r.set(e[n], 1)))
            } catch (e) {
              return []
            }
            return i
          };

        function AE(e) {
          return e.startsWith("http") ? e : "https:".concat(e)
        }
        var PE = (e, t) => {
          var {
            tl: n,
            tr: r,
            bl: i,
            br: o
          } = e.aCoords, {
            tl: a,
            tr: s,
            bl: l,
            br: c
          } = t.aCoords;
          return n.x >= a.x && n.x <= s.x && n.y >= s.y && n.y <= c.y && r.x >= a.x && r.x <= s.x && r.y >= s.y && r.y <= c.y && i.x >= a.x && i.x <= s.x && i.y >= s.y && i.y <= c.y && o.x >= a.x && o.x <= s.x && o.y >= s.y && o.y <= c.y
        };
        X.fabric.Object.prototype.set({
          borderColor: "#599BFF",
          cornerColor: "#fff",
          cornerStrokeColor: "#599BFF",
          cornerSize: 8,
          transparentCorners: !1
        });
        var ME, DE, IE = {
            text: [],
            upload: []
          },
          NE = e => {
            var t = IE[e.configType];
            t.push(h({}, e)), t.length > 20 && t.shift()
          },
          RE = Rt((e => {
            var {
              width: t = 0,
              height: n = 0,
              previewInfo: r = {},
              isShow: i,
              index: o,
              data: a,
              setData: s,
              variantID: l
            } = e, {
              formatMessage: c
            } = vo(), [u, p] = dt(null), [d, f] = dt(!1), [g, m] = tf(), v = bt((() => Math.min(t, n)), [t, n]), _ = bt((() => v / Math.max(r.bg_image_width, r.bg_image_height)), [v, r]), b = bt((() => v / 560), [v]);
            gt((() => {
              var e = new X.fabric.Canvas(r.bg_image_url, {
                preserveObjectStacking: !0
              });
              p(e)
            }), [r.bg_image_url]), gt((() => {
              u && (ie.addInstance(u, o), ie.addImgOrders(r.orders, o), u.wrapperEl.style.margin = "0 auto", u.selection = !1, u.preserveObjectStacking = !0)
            }), [u, o, l]), gt((() => {
              null == u || u.clear(), IE = {
                text: [],
                upload: []
              }
            }), [l]);
            var y = () => {
              setTimeout((() => {
                u.getObjects().forEach((e => {
                  "text" == e.configType && e.previewOrder && e.moveTo(e.previewOrder)
                })), u.renderAll()
              }))
            };
            return gt((() => {
              if (u) return pu.$on(H, e), pu.$on(U, t), () => {
                pu.$off(H, e), pu.$off(U, t)
              };

              function e(e) {
                var t = u.getObjects().find((function(t) {
                  return t.fid === e && "img" === t.fidType
                }));
                t && (u.setActiveObject(t), y(), u.renderAll())
              }

              function t() {
                f(!0), setTimeout((() => {
                  u.discardActiveObject(), y(), u.renderAll(), f(!1)
                }))
              }
            }), [u]), gt((() => {
              var e;
              u && (u.backgroundImage || u.setBackgroundImage(AE(r.bg_image_url), u.renderAll.bind(u), {
                scaleX: _,
                scaleY: _,
                left: v / 2,
                top: v / 2,
                originX: "center",
                originY: "center",
                crossOrigin: !0
              }), null === (e = r.cards) || void 0 === e || e.forEach(((e, t) => {
                if ("swatch" === e.configType) {
                  var n = u.getObjects().find((function(t) {
                    return t.oid ? t.oid === e.fid && e.configFid === t.fid : t.fid === e.configFid
                  }));
                  n && !e.isShow && u.remove(n), !n && e.isShow && X.fabric.Image.fromURL(AE(e.value), (t => {
                    t.top = e.top * b, t.configType = e.configType, t.left = e.left * b, t.scaleX = e.scaleX ? e.scaleX * b : e.width / t.width, t.scaleY = e.scaleY ? e.scaleY * b : e.height / t.height, t.angle = e.angle,
                      t.selectable = !1, t.hoverCursor = "default", t.fid = e.configFid, t.oid = e.fid, u.insertAt(t, e.previewOrder), u.renderAll()
                  }), {
                    crossOrigin: "anonymous"
                  })
                }
                if ("upload" === e.configType) {
                  var i = u.getObjects().find((function(t) {
                    return t.fid === e.configFid
                  }));
                  if (u.getObjects().forEach((t => {
                      t.fid !== e.configFid || e.isShow || u.remove(t)
                    })), !i && e.isShow) {
                    var o = new X.fabric.Rect({
                      left: e.print_area_left * b,
                      top: e.print_area_top * b,
                      width: e.print_area_width * e.scaleX * b,
                      height: e.print_area_height * e.scaleY * b,
                      fill: "transparent",
                      selectable: !1,
                      hoverCursor: "default",
                      fid: e.configFid,
                      shapeType: "boundsReact",
                      configType: e.configType,
                      evented: !1
                    });
                    ("down" === (null == e ? void 0 : e.upload_img_level) ? new Promise(((t, n) => {
                      X.fabric.Image.fromURL(AE(r.bg_image_url), (n => {
                        n.set({
                          scaleX: _,
                          scaleY: _,
                          left: v / 2,
                          top: v / 2,
                          originX: "center",
                          originY: "center",
                          crossOrigin: !0,
                          evented: !1,
                          shapeType: "overlay",
                          fid: e.configFid,
                          configType: e.configType
                        }), t(n)
                      }), {
                        crossOrigin: "anonymous"
                      })
                    })) : new Promise(((e, t) => {
                      e(null)
                    }))).then((t => {
                      X.fabric.Image.fromURL(e.uploadDataUrl, (n => {
                        var {
                          left: r,
                          top: i,
                          scale: a
                        } = ((e, t) => {
                          var n = e.width,
                            r = e.height,
                            i = n / r,
                            o = t.left + 4,
                            a = t.top + 4,
                            s = t.width - 8,
                            l = t.height - 8,
                            c = s / l,
                            u = 1,
                            h = 0,
                            p = 0;
                          return (i > c || i === c) && (n > s ? (h = o, p = a + (l - r * (u = s / n)) / 2) : (u = 1, h = o + (s - n) / 2, p = a + (l - r) / 2)), i < c && (r > l ? (h = o + (s - n * (u = l / r)) / 2,
                            p = a) : (u = 1, h = o + (s - n) / 2, p = a + (l - r) / 2)), {
                            scale: u,
                            left: h,
                            top: p
                          }
                        })(n, o);
                        n.set({
                          left: r,
                          top: i,
                          scaleX: a,
                          scaleY: a,
                          fid: e.configFid,
                          configType: e.configType,
                          fidType: "img"
                        }), n.scaleToWidth(n.width * a), n.scaleToHeight(n.height * a), u.insertAt(o, e.previewOrder), u.insertAt(n, e.previewOrder), t && u.insertAt(t, e.previewOrder), u.renderAll()
                      }), {
                        crossOrigin: "anonymous"
                      })
                    }))
                  }
                }
                if ("text" === e.configType && (u.getObjects().find((function(t) {
                    return t.fid === e.configFid
                  })), u.getObjects().forEach((t => {
                    t.fid === e.configFid && e.focusing && u.remove(t)
                  })), e.isShow && e.focusing)) {
                  if (e.moveabled) {
                    var s = new X.fabric.Rect({
                        left: e.print_area_left * b,
                        top: e.print_area_top * b,
                        width: e.print_area_width * (e.print_scale_x || 1) * b,
                        height: e.print_area_height * (e.print_scale_y || 1) * b,
                        fill: e.fill || "transparent",
                        selectable: !1,
                        angle: e.print_area_angle || 0,
                        fid: e.fid,
                        shapeType: "boundsReact",
                        hoverCursor: "default",
                        statefullCache: !0,
                        configType: e.configType,
                        evented: !1
                      }),
                      p = new X.fabric.Textbox(e.textValue || "", {
                        padding: 0,
                        fontSize: e.textSize || 30,
                        fill: e.textColor || "black",
                        width: e.width ? e.width : e.print_area_width * (e.print_scale_x || 1) * b - 8,
                        top: e.text_top ? e.text_top * b : (e.print_area_height * (e.print_scale_y || 1) / 2 + e.print_area_top) * b - e.textSize / 2,
                        left: e.text_left ? e.text_left * b : e.print_area_left * b,
                        scaleX: e.scaleX ? e.scaleX * b : b,
                        scaleY: e.scaleY ? e.scaleY * b : b,
                        fontFamily: e.textFont,
                        fid: e.configFid,
                        angle: e.text_angle || 0,
                        focusing: e.focusing,
                        lockScalingX: !0,
                        lockScalingY: !0,
                        splitByGrapheme: !0,
                        editable: !1,
                        textAlign: "center",
                        configType: e.configType,
                        previewOrder: e.previewOrder
                      });
                    u.insertAt(s, e.previewOrder), u.insertAt(p, e.previewOrder), !e.focusing || e.isInit || d || u.setActiveObject(p), u.renderAll()
                  } else {
                    var f, m, y = {
                        fontSize: e.textSize || 30,
                        fill: e.textColor || "black",
                        top: e.text_top * b,
                        left: e.text_left * b,
                        scaleX: e.scaleX ? e.scaleX * b : 1,
                        scaleY: e.scaleY ? e.scaleY * b : 1,
                        angle: e.text_angle || 0,
                        fontFamily: e.textFont,
                        fid: e.fid,
                        focusing: e.focusing,
                        lockScalingX: !0,
                        lockScalingY: !0,
                        splitByGrapheme: !0,
                        selectable: !1,
                        hoverCursor: "default",
                        lockRotation: !0,
                        originX: "center",
                        originY: "center",
                        configType: e.configType
                      },
                      w = new X.fabric.Text(e.textValue || "", y);
                    null !== (f = window) && void 0 !== f && null !== (m = f.appparakeet_switch) && void 0 !== m && m.preview_fixed && (w = new X.fabric.Textbox(e.textValue || "", h(h({}, y), {}, {
                      scaleX: e.scaleX ? e.scaleX * b : b,
                      scaleY: e.scaleY ? e.scaleY * b : b,
                      width: e.width ? e.width : e.print_area_width * (e.print_scale_x || 1) * b - 8,
                      editable: !1,
                      textAlign: "center",
                      originY: "top",
                      previewOrder: e.previewOrder
                    }))), u.insertAt(w, e.previewOrder)
                  }
                  u.renderAll()
                }
                setTimeout((() => {
                  u.renderAll()
                })), u && u.off("after:render"), u && u.off("mouse:up"), u && u.on("mouse:up", (() => {
                  var e = u.getObjects(),
                    t = u.getActiveObject();
                  if (null != e && e.length && e.forEach((e => {
                      t && t.fid === e.fid || "text" != e.configType || !e.previewOrder || e.moveTo(e.previewOrder)
                    })), t) {
                    var n = e.find((e => e.fid === t.fid && "boundsReact" === e.shapeType));
                    if (!PE(t, n)) {
                      var r = IE[t.configType],
                        i = r[r.length - 1];
                      if (!i) return;
                      t.set({
                        width: i.width,
                        height: i.height,
                        left: i.left,
                        top: i.top,
                        angle: i.angle || 0,
                        scaleX: i.scaleX || 1,
                        scaleY: i.scaleY || 1
                      }), u.renderAll()
                    }
                  }
                })), u && u.on("after:render", (() => {
                  var e = u.getObjects(),
                    t = u.getActiveObject();
                  if (t) {
                    var n = e.find((e => e.fid === t.fid && "boundsReact" === e.shapeType));
                    "text" === t.configType ? a.forEach(((e, r) => {
                      var i;
                      e.fid === t.fid && (l && e.preview_setting.data.length > 1 ? e.preview_setting.data.forEach((n => {
                        n.variant_id && n.variant_id === l && (n.cards[0].text_height = t.height, n.cards[0].text_width = t.width, n.cards[0].text_left = t.left / b, n.cards[0].text_top = t.top / b, n.cards[
                          0].text_angle = t.angle, n.cards[0].text_size = t.fontSize, n.cards[0].scaleX = t.scaleX / b, n.cards[0].scaleY = t.scaleY / b, e.preview_setting.moveabled && (n.cards[0].width =
                          t.width))
                      })) : 1 != e.preview_setting.data.length || null !== (i = e.preview_setting.data[0]) && void 0 !== i && i.variant_id || (e.preview_setting.data[0].cards[0].text_height = t.height, e
                        .preview_setting.data[0].cards[0].text_width = t.width, e.preview_setting.data[0].cards[0].text_left = t.left / b, e.preview_setting.data[0].cards[0].text_top = t.top / b, e
                        .preview_setting.data[0].cards[0].text_angle = t.angle, e.preview_setting.data[0].cards[0].text_size = t.fontSize, e.preview_setting.data[0].cards[0].scaleX = t.scaleX / b, e
                        .preview_setting.data[0].cards[0].scaleY = t.scaleY / b, e.preview_setting.moveabled && (e.preview_setting.data[0].cards[0].width = t.width)), e.preview_setting.moveabled && (PE(t, n) ? (
                        NE(t), n.fill = "transparent", e.preview_setting.data[0].cards[0].fill = "transparent") : (n.fill = "rgba(221, 29, 24, 0.3)", e.preview_setting.data[0].cards[0].fill =
                        "rgba(221, 29, 24, 0.3)", g.destroy(), g.open({
                          content: c({
                            id: "preview_range_tip"
                          })
                        }))))
                    })) : PE(t, n) ? (NE(t), n.set("fill", "transparent")) : (n.set("fill", "rgba(221, 29, 24, 0.3)"), g.destroy(), g.open({
                      content: c({
                        id: "preview_range_tip"
                      })
                    }))
                  }
                }))
              })), setTimeout((() => {
                u.renderAll()
              })))
            }), [r, u]), Hl("div", {
              style: {
                display: i ? "block" : "none"
              },
              children: [Hl("canvas", {
                id: r.bg_image_url,
                width: v,
                height: v
              }), m]
            })
          }));

        function jE() {
          return jE = Object.assign ? Object.assign.bind() : function(e) {
            for (var t = 1; t < arguments.length; t++) {
              var n = arguments[t];
              for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r])
            }
            return e
          }, jE.apply(this, arguments)
        }
        var LE = e => Te("svg", jE({
            width: 22,
            height: 22,
            fill: "none",
            xmlns: "http://www.w3.org/2000/svg"
          }, e), ME || (ME = Te("path", {
            fillRule: "evenodd",
            clipRule: "evenodd",
            d: "M11.048 5.867h-.002c-3.952 0-7.288 2.195-8.348 5.201a.346.346 0 0 0 0 .23c1.06 3.007 4.396 5.202 8.348 5.202 3.976 0 7.33-2.223 8.367-5.26a.177.177 0 0 0 0-.114c-1.038-3.036-4.39-5.258-8.365-5.26Zm-7.358 5.45a.341.341 0 0 1 0-.268c.718-1.678 2.308-3.085 4.384-3.786a3.867 3.867 0 1 0 5.953.003c2.07.703 3.658 2.108 4.374 3.783a.341.341 0 0 1 0 .269c-1.031 2.412-3.867 4.264-7.355 4.264-3.489 0-6.324-1.852-7.356-4.264Zm7.259-4.531a1.45 1.45 0 1 1-2.798.452 9.282 9.282 0 0 1 2.798-.452Z",
            fill: "#292929"
          })), DE || (DE = Te("path", {
            fillRule: "evenodd",
            clipRule: "evenodd",
            d: "M11.048 5.867h-.002c-3.952 0-7.288 2.195-8.348 5.201a.346.346 0 0 0 0 .23c1.06 3.007 4.396 5.202 8.348 5.202 3.976 0 7.33-2.223 8.367-5.26a.177.177 0 0 0 0-.114c-1.038-3.036-4.39-5.258-8.365-5.26Zm-7.358 5.45a.341.341 0 0 1 0-.268c.718-1.678 2.308-3.085 4.384-3.786a3.867 3.867 0 1 0 5.953.003c2.07.703 3.658 2.108 4.374 3.783a.341.341 0 0 1 0 .269c-1.031 2.412-3.867 4.264-7.355 4.264-3.489 0-6.324-1.852-7.356-4.264Zm7.259-4.531a1.45 1.45 0 1 1-2.798.452 9.282 9.282 0 0 1 2.798-.452Z",
            fill: "#292929"
          }))),
          FE = "index-module_preview_wrap__wyD3z",
          BE = "index-module_upload_dialog__zsPoE",
          zE = "index-module_canvas-container-fixed__KUEdU";
        c(
        ".index-module_preview_wrap__wyD3z{background-color:#fff;height:100%;left:0;pointer-events:auto;position:absolute;top:0;width:100%}.index-module_upload_dialog__zsPoE{border-radius:8px;left:50%;margin:0!important;padding:0!important;position:absolute!important;top:50%;transform:translateX(-50%) translateY(-50%);width:auto!important}.index-module_upload_dialog__zsPoE .rc-dialog-body{padding:0}.index-module_canvas-container-fixed__KUEdU{border-radius:6px;box-shadow:0 1px 10px 0 rgba(0,0,0,.2);left:0;pointer-events:none;position:fixed!important;top:1px;transition:opacity .5s;z-index:1031}.index-module_canvas-container-fixed__KUEdU .lower-canvas,.index-module_canvas-container-fixed__KUEdU .upper-canvas{height:100%!important;width:100%!important}");
        var HE = (() => {
            var e, t = document.querySelector(".product-detail-gallery>#product-detail-gallery-inner>.product-images-container") || document.querySelector(".product-main-images-container") || document.querySelector(".product-image__content") ||
              document.querySelector("#product-images-carousel") || (null === (e = document.querySelector(".product-image")) || void 0 === e ? void 0 : e.querySelector("div"));
            return "Wind" === ka() && (t = document.querySelector("#product-images-carousel").parentNode), t && (t.style.position = "relative"), t
          })(),
          UE = Rt((e => {
            var t, n, r, {
                data: i,
                variantID: o,
                setData: a,
                onUploadDelete: s
              } = e,
              {
                formatMessage: l
              } = vo(),
              c = bt((() => OE(i)), [i]),
              [u, p] = dt(!1),
              [d, f] = dt(0),
              [g, m] = dt(!1),
              [v, _] = dt({}),
              [b, y] = dt(""),
              w = () => {
                pu.$emit(U)
              },
              x = re.exports.debounce((() => {
                var e = document.querySelector(".canvas-container"),
                  t = document.querySelector(".header_container"),
                  n = document.querySelector(".product-info-body"),
                  r = (null == t ? void 0 : t.offsetHeight) || 0,
                  i = (null == e ? void 0 : e.offsetHeight) || 0,
                  o = e.getAttribute("data-canvas-width");
                if (i && pa()) {
                  var a = window.scrollY;
                  n.style.zIndex = 1, a > r + i ? (!o && e.setAttribute("data-canvas-width", null == e ? void 0 : e.offsetWidth), e.classList.add(zE), e.style.top = "".concat(r, "px"), e.style.width = "".concat(.7 * window.innerWidth,
                    "px"), e.style.height = "".concat(.7 * window.innerWidth, "px")) : (e.classList.remove(zE), o && (e.style.top = 0, e.style.width = "".concat(o, "px"), e.style.height = "".concat(o, "px")))
                }
              }), 300);
            gt((() => {
              var e, t;
              return null !== (e = window) && void 0 !== e && null !== (t = e.appparakeet_switch) && void 0 !== t && t.preview_fixed && (window.addEventListener("scroll", x), x()), () => {
                var e, t;
                null !== (e = window) && void 0 !== e && null !== (t = e.appparakeet_switch) && void 0 !== t && t.preview_fixed && window.removeEventListener("scroll", x)
              }
            }), [c]), gt((() => {
              function e(e) {
                a((t => {
                  var n = OE(t).findIndex((t => e.preview_setting.data.filter((e => e.bg_image_url === t.bg_image_url)).length)) || 0;
                  f(n);
                  var r = re.exports.cloneDeep(t);
                  return r.forEach((t => {
                    var n, r;
                    null !== (n = t.preview_setting) && void 0 !== n && n.preview_open && (null === (r = t.preview_setting.data) || void 0 === r || r.forEach((n => {
                      var r;
                      null === (r = n.cards) || void 0 === r || r.forEach((n => {
                        "text" == n.configType && (n.fid = t.fid, n.focusing = e.fid === t.fid, n.isShow = !!e.textValue, n.moveabled = t.preview_setting.moveabled, n.adjust_font_size = t.preview_setting
                          .adjust_font_size, n.textColor = e.textColor, n.textFont = e.textFont, n.textSize = e.textSize, n.textColor = e.textColor, n.textValue = e.textValue, n.isInit = e.isInit)
                      }))
                    })))
                  })), r
                })), e.isInit || p(!0)
              }

              function t(e) {
                w(), a((t => {
                  var n = OE(t).findIndex((t => t.bg_image_url === e.bg_image_url)) || 0;
                  f(n);
                  var r = re.exports.cloneDeep(t);
                  return null == r || r.forEach((t => {
                    var n, r;
                    null !== (n = t.preview_setting) && void 0 !== n && n.preview_open && (null === (r = t.preview_setting.data) || void 0 === r || r.forEach((t => {
                      var n;
                      null === (n = t.cards) || void 0 === n || n.forEach((t => {
                        var n, r;
                        null !== (n = e.checked_fids) && void 0 !== n && n.includes(t.fid) && (t.isShow = !0), null !== (r = e.un_checked_fids) && void 0 !== r && r.includes(t.fid) && (t.isShow = !1)
                      }))
                    })))
                  })), r
                })), p(!0)
              }

              function n(e) {
                if (w(), e.url) {
                  _(e);
                  var t = new FileReader;
                  t.readAsDataURL(e), t.onload = function(t) {
                    y(t.target.result), m(!1), k(e)
                  }
                } else a((t => {
                  var n, r = OE(t).findIndex((t => t.bg_image_url === e.bg_image_url)) || 0;
                  f(r);
                  var i = re.exports.cloneDeep(t);
                  return null === (n = i.filter((t => t.fid === e.label_id))[0].preview_setting.data) || void 0 === n || n.forEach((e => {
                    e.cards[0].isShow = !1, e.cards[0].uploadDataUrl = ""
                  })), i
                }))
              }
              return pu.$on(F, t), pu.$on(B, n), pu.$on(z, e), () => {
                pu.$off(z, e), pu.$off(F, t), pu.$off(B, n)
              }
            }), [a]), gt((() => {
              var e, t, n;

              function r() {
                p(!1)
              }
              p(!(null === (e = window) || void 0 === e || null === (t = e.appparakeet_switch) || void 0 === t || !t.preview_show));
              var i = document.querySelector("#product-thumb-images-container") || document.querySelector(".product-thumb-images-container") || document.querySelector(".product-image__thumbs");
              return (null === (n = window.appparakeet_images) || void 0 === n ? void 0 : n.length) > 1 && (null == i || i.addEventListener("click", r)), () => {
                var e;
                (null === (e = window.appparakeet_images) || void 0 === e ? void 0 : e.length) > 1 && (null == i || i.removeEventListener("click", r))
              }
            }), []), gt((() => {
              if (HE) return HE.style.pointerEvents = u ? "none" : "auto", () => {
                HE && (HE.style.pointerEvents = "auto")
              }
            }), [u]);
            var k = yt((e => {
                w(), a((t => {
                  var n, r = OE(t).findIndex((t => t.bg_image_url === e.bg_image_url)) || 0;
                  f(r);
                  var i = re.exports.cloneDeep(t);
                  return null === (n = i.filter((t => t.fid === e.label_id))[0].preview_setting.data) || void 0 === n || n.forEach((t => {
                    t.cards[0].uploadDataUrl = e.dataUrl || e.url, t.cards[0].isShow = !0
                  })), i
                })), p(!0), m(!1), y(""), window.scrollTo(0, 0)
              }), [a]),
              C = yt((e => {
                m(!1), y(""), null == s || s(e)
              }), [s]);
            return !(null == c || !c.length) && Hl(Pe, {
              children: [Hl("div", {
                className: "pk-flex pk-items-center !pk-mt-7 pk-cursor-pointer",
                onClick: () => {
                  var e;
                  (null === (e = window.appparakeet_images) || void 0 === e ? void 0 : e.length) < 2 && u ? p(!1) : p(!0), window.scrollTo({
                    top: 0,
                    behavior: "smooth"
                  })
                },
                children: [Hl(LE, {}), (null === (t = window.appparakeet_images) || void 0 === t ? void 0 : t.length) < 2 && u ? Hl(Wl, {
                  className: "pk-ml-2",
                  children: l({
                    id: "view_product_image"
                  })
                }) : Hl(Wl, {
                  className: "pk-ml-2",
                  children: l({
                    id: "preview_personalization"
                  })
                })]
              }), HE && Jt(Hl("div", {
                id: "appparakeet-preview-img",
                className: FE,
                style: h({
                  display: u ? "block" : "none",
                  zIndex: "Life Style" === ka() ? 9 : 99
                }, (null === (n = window) || void 0 === n || null === (r = n.appparakeet_switch) || void 0 === r ? void 0 : r.custom_img_center) && {
                  display: u ? "flex" : "none",
                  alignItems: "center"
                }),
                children: null == c ? void 0 : c.map(((e, t) => Hl(RE, {
                  width: null == HE ? void 0 : HE.clientWidth,
                  height: null == HE ? void 0 : HE.clientHeight,
                  previewInfo: e,
                  isShow: t === d,
                  index: t,
                  data: i,
                  setData: a,
                  variantID: o
                }, e.bg_image_url)))
              }), HE), g && Hl(j_, {
                className: BE,
                title: null,
                onClose: () => {
                  m(!1)
                },
                closable: !1,
                maskClosable: !1,
                visible: !0,
                children: Hl($v, {
                  file: v,
                  url: b,
                  onConfirm: k,
                  onCancel: C
                })
              })]
            })
          })),
          WE = ["PHOTO", "DESIGN"],
          VE = TE((e => {
            var t, {
                isQuick: n,
                productId: r,
                data: i = null,
                queryWrapperTarget: o,
                className: a = ""
              } = e,
              {
                formatMessage: s
              } = vo(),
              [l, c] = dt((null == i ? void 0 : i.length) > 0),
              u = bt((() => {
                return e = window.appparakeet_data, t = [], null == e || e.forEach(((e, n) => {
                  var r, i;
                  null !== (r = e.preview_setting) && void 0 !== r && r.preview_open && (null === (i = e.preview_setting.data) || void 0 === i || i.forEach((e => {
                    t.push(e.bg_image_url)
                  })))
                })), null == e || e.forEach(((e, n) => {
                  var r, i;
                  null !== (r = e.preview_setting) && void 0 !== r && r.preview_open && (null === (i = e.preview_setting.data) || void 0 === i || i.forEach((r => {
                    var i;
                    r.bg_image_url = t.filter((e => Sa(e) === Sa(r.bg_image_url)))[0], null === (i = r.cards) || void 0 === i || i.forEach(((t, r) => {
                      var i;
                      t.configType = e.type, t.upload_img_level = (null == e || null === (i = e.preview_setting) || void 0 === i ? void 0 : i.upload_img_level) || "up", t.configFid = e.fid, t.previewOrder = 1e3 * (n +
                        1) + r, e.preview_setting.moveabled && "text" === t.configType && (t.text_left = void 0, t.text_top = void 0)
                    }))
                  })))
                })), e;
                var e, t
              }), []),
              [p, f] = dt(u || []),
              [g, m] = dt(WE[0]),
              [v, _] = dt(""),
              [b, y] = dt(""),
              [w, x] = dt({
                with: 0,
                height: 0
              }),
              [k, S] = dt(!0),
              E = vt(!0),
              T = vt(null),
              O = bt((() => ({
                title: s({
                  id: "url_confirm_title"
                }),
                message: s({
                  id: "url_confirm_desc"
                }),
                confirmText: s({
                  id: "url_confirm_yes"
                }),
                cancelText: s({
                  id: "url_confirm_no"
                })
              })), [s]);
            O.onConfirm = null === (t = T.current) || void 0 === t ? void 0 : t.uploadFile, O.onClose = () => {
              S(!0)
            };
            var A = function(e) {
                var [t, n] = dt(!1), {
                  title: r,
                  message: i,
                  confirmText: o,
                  cancelText: a,
                  onClose: s,
                  onConfirm: l
                } = e, c = () => {
                  n(!1), null == s || s()
                }, u = () => {
                  n(!1), l()
                };
                return {
                  isOpen: t,
                  open: () => {
                    n(!0)
                  },
                  closeDialog: c,
                  renderDialog: () => t ? Jt(Hl(j_, {
                    className: Yd,
                    wrapClassName: Jd,
                    title: null,
                    onClose: c,
                    closable: !0,
                    closeIcon: Hl(mE, {}),
                    maskClosable: !1,
                    visible: !0,
                    children: [Hl("div", {
                      className: qd,
                      children: r
                    }), Hl("div", {
                      className: Kd,
                      children: i
                    }), Hl("div", {
                      className: $d,
                      children: [Hl("button", {
                        className: jl([Zd, Qd]),
                        onClick: c,
                        children: a
                      }), Hl("button", {
                        className: jl(Zd, ef),
                        onClick: u,
                        children: o
                      })]
                    })]
                  }), document.body) : null
                }
              }(O),
              P = null,
              N = document.querySelector("#product_detail_".concat(r, " .product-image")) || document.querySelector(".product-images-container") || document.querySelector(".product-detail .product-images");
            P = Ca(["Eva"]) ? N.parentNode : Ca(["Wind"]) ? (N.parentElement.style.flexDirection = "column", N.parentElement) : N || document.querySelector(".product-details .product-images") || document.querySelector(
              ".product-detail .product-images");
            var R = null;
            gt((() => {
              if (!n) {
                (R = document.createElement("div")).id = "app-parakeet-tab";
                var e = P.querySelector("spz-carousel#product-detail-images") || P.querySelector("div");
                P && !document.querySelector("#app-parakeet-tab") && P.insertBefore(R, e);
                var t = Ca("Flash") ? 16 : 32,
                  r = pa() ? e.offsetWidth - t : e.offsetWidth;
                x({
                  width: r,
                  height: r
                });
                var i = document.createElement("div");
                i.id = "app-parakeet-design", P && !document.querySelector("#app-parakeet-design") && P.append(i)
              }
            }), []), gt((() => {
              (() => {
                if (!i) {
                  var e = window.appparakeet_data;
                  if (0 === (null == e ? void 0 : e.length)) return void c(!1);
                  f(e), c(!0)
                }
              })()
            }), [r, i]);
            var {
              setError: j,
              clearErrors: L,
              handleSubmit: F,
              formState: {
                isValid: B,
                isValidating: z
              },
              control: H,
              setValue: U,
              getValues: W,
              unregister: V,
              register: X,
              trigger: G
            } = function() {
              var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
                t = Nn.useRef(),
                [n, r] = Nn.useState({
                  isDirty: !1,
                  isValidating: !1,
                  isSubmitted: !1,
                  isSubmitting: !1,
                  isSubmitSuccessful: !1,
                  isValid: !1,
                  submitCount: 0,
                  dirtyFields: {},
                  touchedFields: {},
                  errors: {},
                  defaultValues: e.defaultValues
                });
              t.current || (t.current = h(h({}, tl(e)), {}, {
                formState: n
              }));
              var i = t.current.control;
              return i._options = e, ns({
                subject: i._subjects.state,
                callback: Nn.useCallback((e => {
                  Qa(e, i._proxyFormState, !0) && (i._formState = h(h({}, i._formState), e), r(h({}, i._formState)))
                }), [i])
              }), Nn.useEffect((() => {
                i._stateFlags.mount || (i._proxyFormState.isValid && i._updateValid(), i._stateFlags.mount = !0), i._stateFlags.watch && (i._stateFlags.watch = !1, i._subjects.state.next({})), i._removeUnmounted()
              })), Nn.useEffect((() => {
                n.submitCount && i._focusError()
              }), [i, n.submitCount]), t.current.formState = Za(n, i), t.current
            }({
              mode: "onChange",
              shouldFocusError: !0,
              shouldUnregister: !0
            });
            window.triggerCusForm = () => new Promise(((e, t) => {
              F((() => {
                e(!0)
              }), (() => {
                t(!1)
              }))()
            }));
            var {
              formDom: Y
            } = $_({
              data: p,
              control: H,
              setData: f
            }), q = yt((e => {
              var {
                newData: t,
                count: n
              } = function(e, t, n, r, i) {
                var o = 0,
                  a = e.map((e => {
                    var a;
                    return "field" !== (null == e || null === (a = e.conditional_setting) || void 0 === a ? void 0 : a.type) ? e : ha(e, t) && e.isHidden ? (r(e.fid), "text" === e.type && null != e && e.default && i(e.fid, e
                      .default), "checkbox" !== e.type && "button" !== e.type || null == e || !e.default_selection || i(e.fid, e.default_selection_values || []), o++, h(h({}, e), {}, {
                      isHidden: !1
                    })) : ha(e, t) || e.isHidden ? e : (n(e.fid), "text" === e.type && null != e && e.default && i(e.fid, ""), "checkbox" !== e.type && "button" !== e.type || null == e || !e.default_selection || i(e.fid, []), o++,
                      h(h({}, e), {}, {
                        isHidden: !0
                      }))
                  }));
                try {
                  ua()
                } catch (e) {}
                return {
                  newData: a,
                  count: o
                }
              }(p, e, V, X, U);
              n > 0 && (f(t, (() => {
                G()
              })), setTimeout((() => {
                G()
              }), 1e3))
            }), [p, V, X, G, U]), K = W();
            gt((() => {
              q(K), setTimeout((() => {
                document.dispatchEvent(new Event("plugin_currency_update"))
              }))
            }), [K, q]);
            var $ = bt((() => {
              var e = [];
              return null == p || p.forEach((t => {
                t.isHidden || "design" !== t.type || e.push(t.fid)
              })), null != e && e.length || m(WE[0]), e
            }), [p]);
            gt((() => {
              var e, t = [];
              ($.forEach((e => {
                var n;
                null !== (n = K[e]) && void 0 !== n && n.length || t.push(e)
              })), t.length) && (null === (e = T.current) || void 0 === e || e.removeImg(t, (() => {
                t.forEach((e => {
                  var t = $.findIndex((t => t === e));
                  U("".concat($[t < 0 ? 0 : t]), [])
                }))
              })))
            }), [K, $, U]);
            var [Z, J] = dt(0), [Q, ee] = dt(0), te = yt(((e, t, n) => {
              var {
                newData: r,
                count: i
              } = function(e, t, n, r, i) {
                var o = 0,
                  a = e.map((e => {
                    var a, s, l;
                    if ("variant" !== (null == e || null === (a = e.conditional_setting) || void 0 === a ? void 0 : a.type)) return e;
                    var c = null == e || null === (s = e.conditional_setting) || void 0 === s || null === (l = s.variant_values) || void 0 === l ? void 0 : l.map((e => e.value)).includes(t);
                    return c || e.isHidden ? c && e.isHidden ? (r(e.fid), "text" === e.type && null != e && e.default && i(e.fid, e.default), "checkbox" !== e.type && "button" !== e.type || null == e || !e.default_selection || i(e
                      .fid, e.default_selection_values || []), o++, h(h({}, e), {}, {
                      isHidden: !1
                    })) : e : (n(e.fid), o++, "text" === e.type && null != e && e.default && i(e.fid, ""), "checkbox" !== e.type && "button" !== e.type || null == e || !e.default_selection || i(e.fid, []), h(h({}, e), {}, {
                      isHidden: !0
                    }))
                  }));
                try {
                  ua()
                } catch (e) {}
                return {
                  newData: a,
                  count: o
                }
              }(p, t, V, X, U);
              i > 0 && (f(r, (() => {
                G()
              })), setTimeout((() => {
                G()
              }), 1e3)), void 0 !== e && J(e), void 0 !== n && ee(n), void 0 !== e && fa(r, K, e, n)
            }), [p, K, V, X, G, U]), ne = yt((e => {
              f((t => {
                var n, r = re.exports.cloneDeep(t);
                return null == r || null === (n = r.filter((e => {
                  var t;
                  return 2 === (null === (t = e.preview_setting) || void 0 === t ? void 0 : t.type)
                }))) || void 0 === n || n.forEach((t => {
                  var n, r;
                  return null === (n = t.preview_setting) || void 0 === n || null === (r = n.data) || void 0 === r ? void 0 : r.forEach((t => {
                    t.variant_id === e ? t.bgSelected = !0 : t.bgSelected = !1
                  }))
                })), r
              }))
            }), []), [ie, oe] = dt("");
            gt((() => {
              var e, t = null === (e = window.appparakeet_variants) || void 0 === e ? void 0 : e.findIndex((e => {
                return e.id === (t = "variant", n = location.search.substr(1), r = new RegExp("(^|&)".concat(t, "=([^&]*)(&|$)"), "i"), null === (i = n.match(r)) ? null : i[2]);
                var t, n, r, i
              }));
              t = t < 0 ? 0 : t;
              var n = window.appparakeet_variants[t].price,
                r = window.appparakeet_variants[t].id,
                i = window.appparakeet_variants[t].retail_price;
              r && te(n, r, i), oe(r), ne(r)
            }), []);
            var ae = yt((e => {
              var t = e.detail.selected.price,
                n = e.detail.selected.id,
                r = e.detail.selected.retail_price;
              n && te(t, n, r), oe(n), ne(n)
            }), [te, ne]);
            gt((() => (document.body.addEventListener("dj.viewContent", ae), () => {
              document.body.removeEventListener("dj.viewContent", ae)
            })), [ae]), gt((() => {
              fa(p, K, Z, Q)
            }), [K]);
            var se = bt((() => ({
              setError: j,
              clearErrors: L
            })), [L, j]);
            gt((() => {
              pu.$on(M, (() => S(!1)))
            }), []);
            var le = () => {
              var e = Ca("Hero") ? document.querySelector(".product-image .properties-content") : document.querySelector("#app-parakeet-tab").nextSibling;
              return Ca("Nova 2022") && (e = document.querySelector("#app-parakeet-design").previousElementSibling), e
            };
            gt((() => {
              var e = le();
              if (e) {
                var t = dE(e, "display"),
                  n = dE(e, "position");
                Ca("Nova 2022") || _("none" === t ? "block" : t), y(n)
              }
            }), []), gt((() => {
              var e = le();
              if (e) {
                var t = pa() && Ca(["Nova 2022", "Hero", "Eva", "Flash"]),
                  n = "PHOTO" === g;
                if (t) {
                  var r = n ? "visible" : "hidden";
                  return e.style.visibility = r, e.style.position = n ? b : "absolute", void(e.style.zIndex = n ? "1" : "-1")
                }
                var i = n ? v : "none";
                e.style.display = i
              }
            }), [g, v, N]);
            var ce = bt((() => new nl(o)), [o]),
              ue = bt((() => Object.keys(K).some((e => {
                var t;
                return $.includes(e) && (null === (t = K[e]) || void 0 === t ? void 0 : t.length)
              }))), [K, $]);
            Dl((() => {
              var e;
              if (null !== (e = window.appparakeet_data) && void 0 !== e && e.length) {
                var t = ue && k || !ue;
                E.current = t;
                var n = E.current && B;
                n ? ce.enableATCAndBNBtNs() : ce.disableATCAndBNBtNs(F((() => {
                  E.current || A.open()
                }))), n ? sl() : al(F((() => {
                  E.current || A.open()
                })))
              }
            }), [B, k, ue]), gt((() => {
              var e, t, n;
              ma() && (e = null === (t = window.djInterceptors) || void 0 === t || null === (n = t.request) || void 0 === n ? void 0 : n.use(function() {
                var e = d((function*(e) {
                  var t;
                  return yield va(e, W(), p, null === (t = T.current) || void 0 === t ? void 0 : t.compositeUrl, F, s)
                }));
                return function(t) {
                  return e.apply(this, arguments)
                }
              }()));
              return () => {
                var t;
                ma() && (null === (t = window.djInterceptors) || void 0 === t || t.request.eject(e))
              }
            }), [r, W, p, F, s]), gt((() => (ma() && document.addEventListener("dj.response", wa), () => {
              ma() && document.removeEventListener("dj.response", wa)
            })), []), ((e, t) => {
              cl((() => {
                "loading" !== document.readyState ? e() : document.addEventListener("DOMContentLoaded", e)
              }), t)
            })((() => {
              z && la("plugin_product_customizer_click", {
                product_id: r
              })
            }), [z, r]), gt((() => {
              var e, t;
              if (null != p && p.length) {
                var n = e => {
                  var t, n;
                  e.detail.product_id === r && la("plugin_customizer_add_to_cart", {
                    product_id: r,
                    template_type: null === (t = window) || void 0 === t || null === (n = t.SHOP_PARAMS) || void 0 === n ? void 0 : n.template_type,
                    quantity: e.detail.number,
                    rule_id: ""
                  })
                };
                return document.body.addEventListener("dj.addToCart", n), la("plugin_customizer_products_view", {
                  product_id: r,
                  template_type: null === (e = window) || void 0 === e || null === (t = e.SHOP_PARAMS) || void 0 === t ? void 0 : t.template_type,
                  rule_id: ""
                }), () => document.body.removeEventListener("dj.addToCart", n)
              }
            }), [p, r]);
            if (!l) return null;
            var he = document.querySelector("#app-parakeet-tab"),
              pe = document.querySelector("#app-parakeet-design"),
              de = ma(),
              fe = !(null == $ || !$.length);
            return Hl("div", {
              className: "",
              children: Hl(du.Provider, {
                value: ie,
                children: [de && fe && Hl(Pe, {
                  children: [!!he && !n && Jt(Hl(hb, {
                    tabs: WE,
                    value: g,
                    onChange: e => m(e)
                  }), he), !!pe && Jt(Hl(pE, {
                    ref: T,
                    visible: "DESIGN" === g,
                    data: w,
                    onAddFIle: e => {
                      C(e).then((t => {
                        e.thumbUrl = t, U("".concat($[0], ".0"), e), pu.$emit(D), G()
                      }))
                    },
                    onDelete: e => {
                      var t = $.findIndex((t => t === e.label_id)),
                        n = t < 0 ? 0 : t,
                        r = [...K[$[n]]];
                      r.splice(r.length - 1, 1), U("".concat($[n]), r), pu.$emit(I), G()
                    },
                    fileName: null == $ ? void 0 : $[0],
                    hasChangeSave: e => {
                      S(e)
                    },
                    setTab: () => {
                      m(WE[1])
                    }
                  }), pe)]
                }), Hl("div", {
                  className: jl("pk-my-6", pa() ? "pk-space-y-4" : "pk-space-y-5", a),
                  children: [Hl(Ap.Provider, {
                    value: se,
                    children: Y
                  }), Hl(sb, {
                    data: p,
                    control: H
                  }), Hl(UE, {
                    data: p,
                    variantID: ie,
                    setData: f,
                    onUploadDelete: e => {
                      U(e.label_id, []), G()
                    }
                  })]
                }), A.isOpen && A.renderDialog()]
              })
            })
          }));
        try {
          var XE;
          if (!window.appparakeet_env) null !== (XE = window.appparakeet_data) && void 0 !== XE && XE.length && setTimeout((() => {
            var e;
            (() => {
              var e, t;
              if (null !== (e = window.appparakeet_data) && void 0 !== e && null !== (t = e.filter((e => {
                  var t;
                  return "text" === e.type && (null === (t = e.preview_setting) || void 0 === t ? void 0 : t.preview_open)
                }))) && void 0 !== t && t.length) try {
                var n, r, i, o, a, s, l, c = [{
                    name: "Lexend",
                    src: "@font-face {  font-family: 'Lexend';  font-style: normal;  font-weight: 100;  font-display: swap;  src: url(https://fonts.gstatic.com/s/lexend/v15/wlptgwvFAVdoq2_F94zlCfv0bz1WCzsXzLdneg.woff2) format('woff2');}"
                  }, {
                    name: "Abril Fatface",
                    src: "@font-face {  font-family: 'Abril Fatface';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/abrilfatface/v19/zOL64pLDlL1D99S8g8PtiKchq-dmjQ.woff2) format('woff2');}"
                  }, {
                    name: "Amiri",
                    src: "@font-face {  font-family: 'Amiri';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/amiri/v24/J7aRnpd8CGxBHpUutLM.woff2) format('woff2');}"
                  }, {
                    name: "Archivo",
                    src: "@font-face {  font-family: 'Archivo';  font-style: normal;  font-weight: 100;  font-stretch: normal;  font-display: swap;  src: url(https://fonts.gstatic.com/s/archivo/v16/k3k6o8UDI-1M0wlSV9XAw6lQkqWY8Q82sJaRE-NWIDdgffTTNDJZ9xdp.woff2) format('woff2');}"
                  }, {
                    name: "Archivo Black",
                    src: "@font-face {  font-family: 'Archivo Black';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/archivoblack/v17/HTxqL289NzCGg4MzN6KJ7eW6CYyF_g.woff2) format('woff2');}"
                  }, {
                    name: "Arimo",
                    src: "@font-face {  font-family: 'Arimo';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/arimo/v26/P5sfzZCDf9_T_3cV7NCUECyoxNk37cxcABrB.woff2) format('woff2');}"
                  }, {
                    name: "Arvo",
                    src: "@font-face {  font-family: 'Arvo';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/arvo/v20/tDbD2oWUg0MKqScQ7Q.woff2) format('woff2');}"
                  }, {
                    name: "Bakbak One",
                    src: "@font-face {  font-family: 'Bakbak One';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/bakbakone/v6/zOL54pXAl6RI-p_ardnu-cNkvg.woff2) format('woff2');}"
                  }, {
                    name: "Cardo",
                    src: "@font-face {  font-family: 'Cardo';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/cardo/v19/wlp_gwjKBV1pqhv43IE.woff2) format('woff2');}"
                  }, {
                    name: "Caudex",
                    src: "@font-face {  font-family: 'Caudex';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/caudex/v15/esDQ311QOP6BJUr4zfKB.woff2) format('woff2');}"
                  }, {
                    name: "Concert One",
                    src: "@font-face {  font-family: 'Concert One';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/concertone/v17/VEM1Ro9xs5PjtzCu-srDqSTijP4.woff2) format('woff2');}"
                  }, {
                    name: "Cormorant",
                    src: "@font-face {  font-family: 'Cormorant';  font-style: normal;  font-weight: 300;  font-display: swap;  src: url(https://fonts.gstatic.com/s/cormorant/v16/H4cgBXOCl9bbnla_nHIiRLmohYaz.woff2) format('woff2');}"
                  }, {
                    name: "Cormorant Garamond",
                    src: "@font-face {  font-family: 'Cormorant Garamond';  font-style: normal;  font-weight: 300;  font-display: swap;  src: url(https://fonts.gstatic.com/s/cormorantgaramond/v15/co3YmX5slCNuHLi8bLeY9MK7whWMhyjQAllfvg-I.woff2) format('woff2');}"
                  }, {
                    name: "Crimson Pro",
                    src: "@font-face {  font-family: 'Crimson Pro';  font-style: normal;  font-weight: 200;  font-display: swap;  src: url(https://fonts.gstatic.com/s/crimsonpro/v21/q5uUsoa5M_tv7IihmnkabC5XiXCAlXGks1WZTm1MP5s-.woff2) format('woff2');}"
                  }, {
                    name: "Didact Gothic",
                    src: "@font-face {  font-family: 'Didact Gothic';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/didactgothic/v19/ahcfv8qz1zt6hCC5G4F_P4ASlUuYpg.woff2) format('woff2');}"
                  }, {
                    name: "Eater",
                    src: "@font-face {  font-family: 'Eater';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/eater/v21/mtG04_FCK7bOvquxsXA.woff2) format('woff2');}"
                  }, {
                    name: "Eczar",
                    src: "@font-face {  font-family: 'Eczar';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/eczar/v16/BXR2vF3Pi-DLmxcpJB-qbNTyTMDXHd6mrjgU.woff2) format('woff2');}"
                  }, {
                    name: "Exo 2",
                    src: "@font-face {  font-family: 'Exo 2';  font-style: normal;  font-weight: 100;  font-display: swap;  src: url(https://fonts.gstatic.com/s/exo2/v19/7cH1v4okm5zmbvwkAx_sfcEuiD8jvvOsOdC_.woff2) format('woff2');}"
                  }, {
                    name: "Fira Sans",
                    src: "@font-face {  font-family: 'Fira Sans';  font-style: normal;  font-weight: 100;  font-display: swap;  src: url(https://fonts.gstatic.com/s/firasans/v16/va9C4kDNxMZdWfMOD5Vn9LjJYTI.woff2) format('woff2');}"
                  }, {
                    name: "Fjalla One",
                    src: "@font-face {  font-family: 'Fjalla One';  font-style: normal;  font-weight: 400;  font-display: swap;  src: url(https://fonts.gstatic.com/s/fjallaone/v13/Yq6R-LCAWCX3-6Ky7FAFrOF6kg.woff2) format('woff2');}"
                  }],
                  u = null !== (n = window) && void 0 !== n && n.appparakeet_data[0] ? null === (r = window) || void 0 === r ? void 0 : r.appparakeet_data[0].text_custom_family_map : null;
                u && null != Object && null !== (i = Object.keys(u)) && void 0 !== i && i.length && Object.keys(u).forEach((e => {
                  var t = {};
                  t.name = e, t.url = u[e], t.src = "@font-face { font-family: ".concat(e, ";src: url('").concat(u[e], "');}"), c.push(t)
                }));
                var h = document.createElement("style"),
                  p = (null === (o = window) || void 0 === o || null === (a = o.appparakeet_data) || void 0 === a ? void 0 : a.filter((e => {
                    var t;
                    return "text" === (null == e ? void 0 : e.type) && (null == e || null === (t = e.preview_setting) || void 0 === t ? void 0 : t.preview_open)
                  }))) || [];
                (p = null === (s = p) || void 0 === s ? void 0 : s.map((e => {
                  var t;
                  return null == e || null === (t = e.preview_setting) || void 0 === t ? void 0 : t.text_families
                }))) && null !== (l = p) && void 0 !== l && l.length && (p = Array.from(new Set(p.flat())) || []), null == c || c.forEach((e => {
                  var t;
                  if (null !== (t = p) && void 0 !== t && t.includes(e.name)) {
                    h.appendChild(document.createTextNode(e.src));
                    var n = document.createElement("div");
                    n.class = "mock_span", n.innerHTML = "1", n.style.fontFamily = e.name, n.style.position = "fixed", n.style.top = "-99999px", document.body.appendChild(n)
                  }
                })), document.head.appendChild(h)
              } catch (e) {}
            })();
            var t, n, r = document.getElementById("app-parakeet"),
              i = document.createElement("div"),
              o = r.dataset.productId;
            o && (window.appparakeet_data = (null === (t = window) || void 0 === t || null === (n = t.appparakeet_data) || void 0 === n ? void 0 : n.filter((e => e.product_origin_id === o))) || []);
            null !== (e = window.appparakeet_data) && void 0 !== e && e.length && (r.append(i), $e(Hl(VE, {
              productId: r.dataset.productId
            }), i))
          }), 800)
        } catch (e) {}
      }));
      //**app-parakeet.js-end**//
    </script>
    <div class="product-info__qty_container tw-my-5 first:tw-mt-0 last:tw-mb-0">
      <p class="tw-m-0 tw-body-sm tw-font-bold tw-uppercase tw-tracking-widest">Quantity</p>
      <div class="product-info__qty tw-relative tw-h-11 tw-mt-2 tw-rounded-global-fixed lg:tw-mt-4 tw-flex tw-items-center">
        <button data-track="product_minus_quantity" type="button" class="
              tw-bg-transparent tw-border tw-border-solid tw-border-line tw-m-0 tw-p-0 tw-w-11 tw-h-full tw-cursor-pointer disabled:tw-cursor-default disabled:tw-bg-[#f9f9f9] disabled:tw-text-[#90959a] tw-outline-none tw-flex tw-justify-center tw-items-center product-info__qty_btn tw-text-[#d8d8d8] lg:hover:tw-bg-[#f2f2f2]
             product-info__qty_decr" data-click="decrease" disabled="disabled"><svg class="tw-text-[#888888]" width="13" height="13" xmlns="http://www.w3.org/2000/svg">
            <path d="M1 6h11v1H1z" fill-rule="evenodd" fill="currentColor"></path>
          </svg></button>
        <input class="tw-box-border tw-p-0 tw-w-11 tw-h-full tw-text-center tw-body-plus-2 tw-text-body-color tw-bg-transparent tw-border-0 tw-border-t tw-border-b tw-border-solid tw-border-line tw-outline-none form-control product-info__qty_num"
          id="product_quantity_f0ad4fc5-a941-4de7-a98a-834ecb5e3305" name="quantity" type="text" value="1">
        <button data-track="product_add_quantity" type="button" class="
              tw-bg-transparent tw-border tw-border-solid tw-border-line tw-m-0 tw-p-0 tw-w-11 tw-h-full tw-cursor-pointer disabled:tw-cursor-default disabled:tw-bg-[#f9f9f9] disabled:tw-text-[#90959a] tw-outline-none tw-flex tw-justify-center tw-items-center product-info__qty_btn tw-text-[#d8d8d8] lg:hover:tw-bg-[#f2f2f2]
             product-info__qty_incr " data-click="increase"><svg class="tw-text-[#888888]" width="13" height="13" xmlns="http://www.w3.org/2000/svg">
            <path d="M7 1v5h5v1H7v5H6V7H1V6h5V1h1z" fill="currentColor"></path>
          </svg></button>
      </div>
    </div>
    <div class="product-info__btn tw-mt-6 lg:tw-mt-9 first:tw-mt-0 last:tw-mb-0">
      <div class="tw-flex tw-flex-col tw-space-y-3">
        <button type="button"
          class="product-info__add-to-cart    tw-secondary-btn-style    tw-relative tw-h-12 tw-text-center tw-uppercase tw-body-minus-4 tw-font-bold tw-tracking-widest tw-leading-1.3 tw-rounded-btn tw-border tw-border-solid tw-border-line tw-cursor-pointer"
          data-click="addToCart" data-on-sale="Add to cart" data-unavailable="Unavailable" data-sold-out="Sold out" data-btn-class=" tw-secondary-btn-style " data-track="click" data-track-content="add_to_cart" data-track-source="add_to_cart"> Add to
          cart - <span class="money">€34.95</span>
        </button>
        <button type="button" class="product-info__buy-now tw-relative     tw-primary-btn  tw-h-12" data-click="submit" data-track="click" data-track-content="checkout" data-track-source="buy_now">Buy it now</button>
        <div class="product-info__tips empty:tw-hidden tw-mt-3 tw-text-center tw-text-sm tw-leading-none tw-font-medium" data-unavailable="Product is unavailable." data-out-of-stock="Product was out of stock."></div>
      </div>
    </div>
    <div class="tw-space-y-4 tw-my-5 first:tw-mt-0 last:tw-mb-0">
      <div class="tw-flex tw-items-center">
        <svg class="tw-flex-shrink-0" width="20" height="20" xmlns="http://www.w3.org/2000/svg">
          <path
            d="M18.41 14.672a1.811 1.811 0 0 0-1.743-1.359c-.834 0-1.538.578-1.743 1.359H13.81v-4.366h5.238v4.366h-.638zm-1.743 1.552a1.04 1.04 0 0 1-.929-.582 1.042 1.042 0 0 1 0-.97 1.04 1.04 0 0 1 .929-.582c.404 0 .757.237.928.582a1.042 1.042 0 0 1 0 .97 1.04 1.04 0 0 1-.928.582zm-3.81-1.552h-5.4a1.811 1.811 0 0 0-1.743-1.359c-.833 0-1.538.578-1.743 1.359H.952V4.97h11.905v9.702zm-7.143 1.552a1.04 1.04 0 0 1-.928-.582 1.042 1.042 0 0 1 0-.97 1.04 1.04 0 0 1 .928-.582c.405 0 .757.237.929.582a1.042 1.042 0 0 1 0 .97 1.04 1.04 0 0 1-.929.582zM16.9 6.91l1.699 2.426h-4.79V6.91H16.9zm.486-.97H13.81V4H0v11.642h3.971c.205.78.91 1.358 1.743 1.358.834 0 1.538-.577 1.743-1.358H14.924c.205.78.91 1.358 1.743 1.358.833 0 1.538-.577 1.743-1.358H20V9.666L17.386 5.94z"
            fill="currentColor"></path>
        </svg>
        <span class="tw-ml-3 md:tw-body-minus-2">Free Shipping On Orders Over USD 50.00</span>
      </div>
      <div class="tw-flex tw-items-center">
        <svg class="tw-flex-shrink-0" width="20" height="20" xmlns="http://www.w3.org/2000/svg">
          <path
            d="M9 1c2.303 0 4.494.87 6.17 2.448l-.667.708A7.994 7.994 0 0 0 9 1.973C4.574 1.973.973 5.573.973 10c0 4.426 3.6 8.027 8.027 8.027 4.426 0 8.027-3.6 8.027-8.027a8.03 8.03 0 0 0-.36-2.387l.928-.29C17.864 8.188 18 9.089 18 10c0 4.963-4.037 9-9 9s-9-4.037-9-9 4.037-9 9-9zm9.58 1.256.687.688L8.711 13.5l-.688-.688-2.752-2.752.688-.688 2.752 2.752 9.868-9.868z"
            fill="currentColor"></path>
        </svg>
        <span class="tw-ml-3 md:tw-body-minus-2">100,000+ Purchased Customers</span>
      </div>
      <div class="tw-flex tw-items-center">
        <svg class="tw-flex-shrink-0" width="20" height="20" xmlns="http://www.w3.org/2000/svg">
          <path
            d="M10 1c2.757 0 5 2.243 5 5v.813h3.5v12.34h-17V6.814H5V6c0-2.757 2.243-5 5-5zm7.5 6.813h-15v10.34h15V7.814zM10 10.5a1.25 1.25 0 0 1 .5 2.394v2.318h-1v-2.318A1.25 1.25 0 0 1 10 10.5zM10 2C7.795 2 6 3.794 6 6v.813h8V6c0-2.206-1.794-4-4-4z"
            fill="currentColor"></path>
        </svg>
        <span class="tw-ml-3 md:tw-body-minus-2">Secure Payments</span>
      </div>
    </div>
    <script async="" crossorigin="anonymous" src="//static.staticdj.com/cuttlefish/v1/spz.min.js"></script>
    <style>
      #smart_recommend_js_root {
        display: none !important;
      }
    </style>
    <ljs-render layout="container" manual="" id="smart_recommend_block" class="i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
      <template> ${function(){ const rules = data.data.rules; return ` <div class="plugin_container_wrpper">
          <div spz-for="(rule, index) in rules">
            <ljs-render layout="container" id="smart_recommend_rule_${rule.id}" manual="" template="smart_recommend_grid_template"></ljs-render>
          </div>
        </div> ` }()} </template>
      <div class="plugin_container_wrpper">
        <div> <ljs-render layout="container" id="smart_recommend_rule_440766736527008290" manual="" template="smart_recommend_grid_template" class="i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout"
            i-spzhtml-layout="container">
            <div class="zb-pt-[40px] zb-pb-[26px] zb-p-5" id="smart_recommend_rule_wrapper_440766736527008290">
              <div class="zb-text-2xl zb-mb-10 smart_recommend_title" spz-if="true">Frequently Bought Together</div>
              <div class="zb-relative zb-w-full">
                <ul class="scrollbar-hide zb-relative zb-list-none zb-flex zb-overflow-x-scroll zb-m-0 zb-p-0 smart_recommend_product_list" id="smart_recommend_rule_ul_440766736527008290" impr="1" imprevt="1" data-spm="smart_recommend_3">
                  <li key="4f406bc0-c35a-4065-a64e-1d52ec7a308f" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5">
                    <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                      <div class="zb-w-full">
                        <a href="/products/custom-christmas-mama-sweatshirt-with-kids-names?aid=smart_recommend.3.440766736527008290&amp;ifb=&amp;cfb=&amp;scm=possum..v1&amp;ssp=113483" class="zb-w-full" data-prdct="4f406bc0-c35a-4065-a64e-1d52ec7a308f" data-ifb="" data-cfb="" data-scm="possum..v1" data-spm="0" impr="1" imprevt="1"> <ljs-img src="//img.fantaskycdn.com/7018ddd123058df78caa9a497651bc7a_180x.jpg" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm i-spzhtml-element i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-built i-spzhtml-layout" width="1000" height="1000" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top: 100%;"></i-spzhtml-sizer> <img decoding="async" src="//img.fantaskycdn.com/7018ddd123058df78caa9a497651bc7a_180x.jpg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></ljs-img> </a>
                        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">Custom Christmas Mama Sweatshirt With Kids Names</div>
                        <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]"> <ljs-currency
                            class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container"
                            value="34.95" spz-if="true" i-spzhtml-layout="container"></ljs-currency> <ljs-currency
                            class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6 i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container" value="56.95"
                            spz-if="true" i-spzhtml-layout="container"></ljs-currency> </div>
                      </div> <button
                        class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                        @tap="smart_recommend_func.quickShop(rule_id='440766736527008290',ssp='113483',scm='possum..v1',product_id='4f406bc0-c35a-4065-a64e-1d52ec7a308f',productIndex='0',cfb='',ifb='');smart_recommend_loading.showLoading;"
                        style="background-color: rgb(255, 255, 255); color: rgb(85, 85, 85);">
                        <div>Quick Shop</div>
                      </button>
                    </div>
                  </li>
                  <li key="de206926-9998-42ef-9c56-6568853647fc" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5">
                    <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                      <div class="zb-w-full">
                        <a href="/products/custom-christmas-mama-daddy-with-kids-name-sweatshirt?aid=smart_recommend.3.440766736527008290&amp;ifb=&amp;cfb=&amp;scm=possum..v1&amp;ssp=113483" class="zb-w-full" data-prdct="de206926-9998-42ef-9c56-6568853647fc" data-ifb="" data-cfb="" data-scm="possum..v1" data-spm="1" impr="1" imprevt="1"> <ljs-img src="//img.fantaskycdn.com/4fc7f10153dacd2226be66503cdf3638_180x.jpg" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm i-spzhtml-element i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-built i-spzhtml-layout" width="1000" height="1000" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top: 100%;"></i-spzhtml-sizer> <img decoding="async" src="//img.fantaskycdn.com/4fc7f10153dacd2226be66503cdf3638_180x.jpg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></ljs-img> </a>
                        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">Custom Christmas Mama Daddy With Kids Name Sweatshirt</div>
                        <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]"> <ljs-currency
                            class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container"
                            value="34.95" spz-if="true" i-spzhtml-layout="container"></ljs-currency> <ljs-currency
                            class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6 i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container" value="56.95"
                            spz-if="true" i-spzhtml-layout="container"></ljs-currency> </div>
                      </div> <button
                        class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                        @tap="smart_recommend_func.quickShop(rule_id='440766736527008290',ssp='113483',scm='possum..v1',product_id='de206926-9998-42ef-9c56-6568853647fc',productIndex='1',cfb='',ifb='');smart_recommend_loading.showLoading;"
                        style="background-color: rgb(255, 255, 255); color: rgb(85, 85, 85);">
                        <div>Quick Shop</div>
                      </button>
                    </div>
                  </li>
                  <li key="8b433b7f-ddad-4aa1-b765-5115cf65dd33" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5">
                    <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                      <div class="zb-w-full">
                        <a href="/products/custom-a-little-who-is-due-christmas-sweatshirt?aid=smart_recommend.3.440766736527008290&amp;ifb=&amp;cfb=&amp;scm=possum..v1&amp;ssp=113483" class="zb-w-full" data-prdct="8b433b7f-ddad-4aa1-b765-5115cf65dd33" data-ifb="" data-cfb="" data-scm="possum..v1" data-spm="2" impr="1" imprevt="1"> <ljs-img src="//img.fantaskycdn.com/637c230428a61a79fabb2603c8bd6e8a_180x.jpg" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm i-spzhtml-element i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-built i-spzhtml-layout" width="1000" height="1000" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top: 100%;"></i-spzhtml-sizer> <img decoding="async" src="//img.fantaskycdn.com/637c230428a61a79fabb2603c8bd6e8a_180x.jpg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></ljs-img> </a>
                        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">Custom A little Who Is Due Christmas Sweatshirt</div>
                        <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]"> <ljs-currency
                            class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container"
                            value="34.95" spz-if="true" i-spzhtml-layout="container"></ljs-currency> <ljs-currency
                            class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6 i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container" value="56.95"
                            spz-if="true" i-spzhtml-layout="container"></ljs-currency> </div>
                      </div> <button
                        class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                        @tap="smart_recommend_func.quickShop(rule_id='440766736527008290',ssp='113483',scm='possum..v1',product_id='8b433b7f-ddad-4aa1-b765-5115cf65dd33',productIndex='2',cfb='',ifb='');smart_recommend_loading.showLoading;"
                        style="background-color: rgb(255, 255, 255); color: rgb(85, 85, 85);">
                        <div>Quick Shop</div>
                      </button>
                    </div>
                  </li>
                  <li key="29838673-2e56-46f8-bda7-66e913a1745d" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5">
                    <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                      <div class="zb-w-full">
                        <a href="/products/custom-christmas-mama-sweatshirt-with-names?aid=smart_recommend.3.440766736527008290&amp;ifb=&amp;cfb=&amp;scm=possum..v1&amp;ssp=113483" class="zb-w-full" data-prdct="29838673-2e56-46f8-bda7-66e913a1745d" data-ifb="" data-cfb="" data-scm="possum..v1" data-spm="3" impr="1" imprevt="1"> <ljs-img src="//img.fantaskycdn.com/0425dcc2878dffd42bcf42e736b12a29_180x.jpg" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm i-spzhtml-element i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-built i-spzhtml-layout" width="2193" height="2193" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top: 100%;"></i-spzhtml-sizer> <img decoding="async" src="//img.fantaskycdn.com/0425dcc2878dffd42bcf42e736b12a29_180x.jpg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></ljs-img> </a>
                        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">Custom Christmas Mama Sweatshirt With Names</div>
                        <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]"> <ljs-currency
                            class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container"
                            value="34.95" spz-if="true" i-spzhtml-layout="container"></ljs-currency> <ljs-currency
                            class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6 i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container" value="56.95"
                            spz-if="true" i-spzhtml-layout="container"></ljs-currency> </div>
                      </div> <button
                        class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                        @tap="smart_recommend_func.quickShop(rule_id='440766736527008290',ssp='113483',scm='possum..v1',product_id='29838673-2e56-46f8-bda7-66e913a1745d',productIndex='3',cfb='',ifb='');smart_recommend_loading.showLoading;"
                        style="background-color: rgb(255, 255, 255); color: rgb(85, 85, 85);">
                        <div>Quick Shop</div>
                      </button>
                    </div>
                  </li>
                  <li key="25521f37-770e-4faa-a6d7-f572fa927ec4" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5">
                    <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                      <div class="zb-w-full">
                        <a href="/products/custom-christmas-mama-daddy-sweatshirt?aid=smart_recommend.3.440766736527008290&amp;ifb=&amp;cfb=&amp;scm=possum..v1&amp;ssp=113483" class="zb-w-full" data-prdct="25521f37-770e-4faa-a6d7-f572fa927ec4" data-ifb="" data-cfb="" data-scm="possum..v1" data-spm="4" impr="1" imprevt="1"> <ljs-img src="//img.fantaskycdn.com/ce1fd0d8446f6d4c2655ca07f63b317c_180x.jpg" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm i-spzhtml-element i-spzhtml-layout-responsive i-spzhtml-layout-size-defined i-spzhtml-built i-spzhtml-layout" width="1000" height="1000" i-spzhtml-layout="responsive" complete=""><i-spzhtml-sizer style="padding-top: 100%;"></i-spzhtml-sizer> <img decoding="async" src="//img.fantaskycdn.com/ce1fd0d8446f6d4c2655ca07f63b317c_180x.jpg" class="i-spzhtml-fill-content i-spzhtml-replaced-content" style="object-fit: cover;"></ljs-img> </a>
                        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">Custom Christmas Mama Daddy Sweatshirt</div>
                        <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]"> <ljs-currency
                            class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container"
                            value="34.95" spz-if="true" i-spzhtml-layout="container"></ljs-currency> <ljs-currency
                            class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6 i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container" value="53.95"
                            spz-if="true" i-spzhtml-layout="container"></ljs-currency> </div>
                      </div> <button
                        class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                        @tap="smart_recommend_func.quickShop(rule_id='440766736527008290',ssp='113483',scm='possum..v1',product_id='25521f37-770e-4faa-a6d7-f572fa927ec4',productIndex='4',cfb='',ifb='');smart_recommend_loading.showLoading;"
                        style="background-color: rgb(255, 255, 255); color: rgb(85, 85, 85);">
                        <div>Quick Shop</div>
                      </button>
                    </div>
                  </li>
                  <li key="4faff429-0fa1-44b1-a6e7-91ad64b04c45" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5">
                    <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                      <div class="zb-w-full">
                        <a href="/products/merry-puff-design-sweatshirt-christmas-gift-idea?aid=smart_recommend.3.440766736527008290&amp;ifb=&amp;cfb=&amp;scm=possum..v1&amp;ssp=113483" class="zb-w-full" data-prdct="4faff429-0fa1-44b1-a6e7-91ad64b04c45" data-ifb="" data-cfb="" data-scm="possum..v1" data-spm="5" impr="1" imprevt="1"> <ljs-img src="//img.fantaskycdn.com/f39b0eb4de3b6d0c6104d0845742e7f0.jpg" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-responsive i-spzhtml-layout-size-defined spz-unresolved i-spzhtml-unresolved" width="800" height="800" i-spzhtml-layout="responsive"><i-spzhtml-sizer style="padding-top: 100%;"></i-spzhtml-sizer> </ljs-img> </a>
                        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">Merry Puff Design Sweatshirt Christmas Gift Idea</div>
                        <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]"> <ljs-currency
                            class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container"
                            value="28.95" spz-if="true" i-spzhtml-layout="container"></ljs-currency> <ljs-currency
                            class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6 i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container" value="56.95"
                            spz-if="true" i-spzhtml-layout="container"></ljs-currency> </div>
                      </div> <button
                        class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                        @tap="smart_recommend_func.quickShop(rule_id='440766736527008290',ssp='113483',scm='possum..v1',product_id='4faff429-0fa1-44b1-a6e7-91ad64b04c45',productIndex='5',cfb='',ifb='');smart_recommend_loading.showLoading;"
                        style="background-color: rgb(255, 255, 255); color: rgb(85, 85, 85);">
                        <div>Quick Shop</div>
                      </button>
                    </div>
                  </li>
                  <li key="4fc2d802-f9ec-428e-ac1d-ec917a238d8d" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5">
                    <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                      <div class="zb-w-full">
                        <a href="/products/christmas-embroidered-festive-sweatshirt?aid=smart_recommend.3.440766736527008290&amp;ifb=&amp;cfb=&amp;scm=possum..v1&amp;ssp=113483" class="zb-w-full" data-prdct="4fc2d802-f9ec-428e-ac1d-ec917a238d8d" data-ifb="" data-cfb="" data-scm="possum..v1" data-spm="6" impr="1" imprevt="1"> <ljs-img src="//img.fantaskycdn.com/16371bfd385ef647e2e6a2f8b55c2366.jpg" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-responsive i-spzhtml-layout-size-defined spz-unresolved i-spzhtml-unresolved" width="1000" height="1000" i-spzhtml-layout="responsive"><i-spzhtml-sizer style="padding-top: 100%;"></i-spzhtml-sizer> </ljs-img> </a>
                        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">Christmas Embroidered Festive Sweatshirt</div>
                        <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]"> <ljs-currency
                            class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container"
                            value="34.95" spz-if="true" i-spzhtml-layout="container"></ljs-currency> <ljs-currency
                            class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6 i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container" value="53.95"
                            spz-if="true" i-spzhtml-layout="container"></ljs-currency> </div>
                      </div> <button
                        class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                        @tap="smart_recommend_func.quickShop(rule_id='440766736527008290',ssp='113483',scm='possum..v1',product_id='4fc2d802-f9ec-428e-ac1d-ec917a238d8d',productIndex='6',cfb='',ifb='');smart_recommend_loading.showLoading;"
                        style="background-color: rgb(255, 255, 255); color: rgb(85, 85, 85);">
                        <div>Quick Shop</div>
                      </button>
                    </div>
                  </li>
                  <li key="128ab0c7-bf43-4d9c-be8e-eb6b43a97b1e" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5">
                    <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                      <div class="zb-w-full">
                        <a href="/products/custom-embroidered-vintage-let-it-snow-christmas-sweatshirt?aid=smart_recommend.3.440766736527008290&amp;ifb=&amp;cfb=&amp;scm=possum..v1&amp;ssp=113483" class="zb-w-full" data-prdct="128ab0c7-bf43-4d9c-be8e-eb6b43a97b1e" data-ifb="" data-cfb="" data-scm="possum..v1" data-spm="7" impr="1" imprevt="1"> <ljs-img src="//img.fantaskycdn.com/139b8015518d08d94ebdb76f35c92516.jpg" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-responsive i-spzhtml-layout-size-defined spz-unresolved i-spzhtml-unresolved" width="1000" height="1000" i-spzhtml-layout="responsive"><i-spzhtml-sizer style="padding-top: 100%;"></i-spzhtml-sizer> </ljs-img> </a>
                        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">Custom Embroidered Vintage Let It Snow Christmas Sweatshirt</div>
                        <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]"> <ljs-currency
                            class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container"
                            value="34.95" spz-if="true" i-spzhtml-layout="container"></ljs-currency> <ljs-currency
                            class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6 i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container" value="56.95"
                            spz-if="true" i-spzhtml-layout="container"></ljs-currency> </div>
                      </div> <button
                        class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                        @tap="smart_recommend_func.quickShop(rule_id='440766736527008290',ssp='113483',scm='possum..v1',product_id='128ab0c7-bf43-4d9c-be8e-eb6b43a97b1e',productIndex='7',cfb='',ifb='');smart_recommend_loading.showLoading;"
                        style="background-color: rgb(255, 255, 255); color: rgb(85, 85, 85);">
                        <div>Quick Shop</div>
                      </button>
                    </div>
                  </li>
                  <li key="23183c87-4f83-4623-bf85-adee092fe2ce" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5">
                    <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                      <div class="zb-w-full">
                        <a href="/products/custom-christmas-nurse-and-teacher-sweatshirt?aid=smart_recommend.3.440766736527008290&amp;ifb=&amp;cfb=&amp;scm=possum..v1&amp;ssp=113483" class="zb-w-full" data-prdct="23183c87-4f83-4623-bf85-adee092fe2ce" data-ifb="" data-cfb="" data-scm="possum..v1" data-spm="8" impr="1" imprevt="1"> <ljs-img src="//img.fantaskycdn.com/6e103b9caf28b8cda486315489dc798b.jpg" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-responsive i-spzhtml-layout-size-defined spz-unresolved i-spzhtml-unresolved" width="1000" height="1000" i-spzhtml-layout="responsive"><i-spzhtml-sizer style="padding-top: 100%;"></i-spzhtml-sizer> </ljs-img> </a>
                        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">Custom Christmas Nurse And Teacher Sweatshirt</div>
                        <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]"> <ljs-currency
                            class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container"
                            value="34.95" spz-if="true" i-spzhtml-layout="container"></ljs-currency> <ljs-currency
                            class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6 i-spzhtml-element i-spzhtml-notbuilt spz-notbuilt i-spzhtml-layout-container spz-unresolved i-spzhtml-unresolved" layout="container" value="53.95"
                            spz-if="true" i-spzhtml-layout="container"></ljs-currency> </div>
                      </div> <button
                        class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                        @tap="smart_recommend_func.quickShop(rule_id='440766736527008290',ssp='113483',scm='possum..v1',product_id='23183c87-4f83-4623-bf85-adee092fe2ce',productIndex='8',cfb='',ifb='');smart_recommend_loading.showLoading;"
                        style="background-color: rgb(255, 255, 255); color: rgb(85, 85, 85);">
                        <div>Quick Shop</div>
                      </button>
                    </div>
                  </li>
                </ul>
                <div spz-if="true"
                  class="zb-absolute zb-z-50 zb-flex zb-justify-center zb-items-center zb-transition zb-bg-no-repeat zb-bg-center zb-bg-[11px, 16px] zb-translate-x-0 zb-shadow-caretCircle zb-rounded-full zb-w-[46px] zb-h-[46px] zb-bg-white zb-cursor-pointer zb-top-[calc(50%_-_93px)] zb-left-[-23px]"
                  @tap="smart_recommend_func.handleScroll(rule_id='440766736527008290',direction='left')"> <svg viewBox="0 0 16 16" focusable="false" data-icon="chevron-left" width="1em" height="1em" fill="currentColor" aria-hidden="true">
                    <path d="M10 14a1 1 0 01-.7-.3l-5-5a1 1 0 010-1.4l5-5a1 1 0 011.4 1.4L6.42 8l4.3 4.3A1 1 0 0110 14z"></path>
                  </svg> </div>
                <div spz-if="true"
                  class="zb-absolute zb-z-50 zb-flex zb-justify-center zb-items-center zb-transition zb-bg-no-repeat zb-bg-center zb-translate-x-0 zb-rotate-180 zb-shadow-caretCircle zb-rounded-full zb-w-[46px] zb-h-[46px] zb-bg-white zb-cursor-pointer zb-top-[calc(50%_-_93px)] zb-right-[-23px]"
                  @tap="smart_recommend_func.handleScroll(rule_id='440766736527008290',direction='right')"> <svg viewBox="0 0 16 16" focusable="false" data-icon="chevron-left" width="1em" height="1em" fill="currentColor" aria-hidden="true">
                    <path d="M10 14a1 1 0 01-.7-.3l-5-5a1 1 0 010-1.4l5-5a1 1 0 011.4 1.4L6.42 8l4.3 4.3A1 1 0 0110 14z"></path>
                  </svg> </div>
              </div>
            </div>
          </ljs-render> </div>
      </div>
    </ljs-render>
    <ljs-render layout="container" manual="" id="smart_recommend_preview_no_data_placeholder" class="i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
      <template> ${function(){ const isCart = data.data.isCart; const isCollection = data.data.isCollection; const isProduct = data.data.isProduct; const isIndex = data.data.isIndex; return ` <div class="plugin_container_wrpper">
          <div
            class="md:zb-px-[220px] zb-px-4 zb-pt-10 md:zb-pb-0 md:zb-pt-0 zb-box-border zb-w-full zb-relative zb-text-center zb-rounded zb-min-h-[88px] zb-leading-[20px] zb-text-[12px] zb-border-2 zb-justify-center zb-border-black zb-flex zb-items-center zb-border-dashed">
            ${isCart ? 'The items in the shopping cart do not participate in any recommendation rule. Add the participating items to your shopping cart to check the design.' : ''} ${isProduct ? 'This product did not participated in any recommendation
            rule. Switch to another product to check the design.' : ''} ${isCollection ? 'The items in this collection do not participate in any recommendation rule. Switch the participating items to check the design.' : ''} ${isIndex ? 'The home
            page do not participate in any recommendation rule.' : ''} (This prompt would not display on client-side) <div
              class="zb-absolute zb-px-4 zb-bg-[#000] zb-text-[#fff] zb-text-[14px] zb-font-medium zb-text-center zb-leading-[36px] zb-top-[-2px] zb-left-[-2px]  zb-rounded zb-rounded-tr-none zb-rounded-bl-none">Recommended Products</div>
          </div>
        </div>` }()} </template>
    </ljs-render>
    <ljs-render id="smart_recommend_product_modal_render" layout="container" manual="" template="smart_recommend_product_modal_template" class="i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout"
      i-spzhtml-layout="container"></ljs-render>
    <template id="smart_recommend_grid_template"> ${function(){ const rule = data.data; const getImageHeight = function(image){ const image_size = rule.config.image_size || 0; const imageWidth = image.width || 600; const imageHeight = image.height ||
      800; let ratio = 0; if(image_size == 0){ ratio = (imageHeight / imageWidth).toFixed(2); }else if(image_size == 1){ ratio = 1.5; }else if(image_size == 2){ ratio = 1; }else if(image_size == 3){ ratio = 0.75; } return imageWidth * ratio; }; const
      toQuery = obj =&gt; Object.keys(obj) .map(k =&gt; Array.isArray(obj[k]) ? obj[k].map(v =&gt; `${k}[]=${encodeURIComponent(v)}`).join('&amp;') : `${k}=${encodeURIComponent(obj[k])}` ) .join('&amp;'); return ` <div
        class="zb-pt-[40px] zb-pb-[26px] zb-p-5" id="smart_recommend_rule_wrapper_${rule.id}">
        <div class="zb-text-2xl zb-mb-10 smart_recommend_title" spz-if="${rule.products &amp;&amp; rule.products.length > 0 ? true : false}">${rule.config.title}</div>
        <div class="zb-relative zb-w-full">
          <ul class="scrollbar-hide zb-relative zb-list-none zb-flex zb-overflow-x-scroll zb-m-0 zb-p-0 smart_recommend_product_list" id="smart_recommend_rule_ul_${rule.id}" impr="1" imprevt="1" data-spm="smart_recommend_${rule.show_type}">
            <li key="product.id" class="zb-flex zb-flex-col zb-shrink-0 zb-items-center zb-w-[42%] md:zb-w-[17%] zb-mr-5" spz-for="(product, productIndex) in rule.products">
              <div class="zb-flex zb-flex-col zb-justify-between zb-w-full">
                <div class="zb-w-full">
                  <a href="${product.url}?${toQuery({ aid: 'smart_recommend.'+rule.show_type+'.'+rule.id, ifb: product.ifb || '', cfb: product.cfb || '', scm: product.scm || rule.scm || '', ssp: rule.ssp || '' })}" class="zb-w-full" data-prdct="${product.id}" data-ifb="${product.ifb || ''}" data-cfb="${product.cfb || ''}" data-scm="${product.scm || rule.scm || ''}" data-spm="${productIndex}" impr="1" imprevt="1">
                  <ljs-img src="${product.image.src}" layout="responsive" object-fit="cover" auto-fit="" class="zb-rounded-sm" width="${product.image.width || 600}" height="${getImageHeight(product.image)}">
                  </ljs-img>
                </a>
                  <div class="zb-line-clamp-2 zb-text-sm zb-mb-2 zb-mt-2 zb-min-h-[40px]">${product.title}</div>
                  <div class="zb-flex zb-flex-wrap zb-items-start zb-font-normal zb-min-h-[48px]">
                    <ljs-currency class="zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 zb-font-semibold zb-text-[#EC433D] zb-text-base" layout="container" value="${product.min_price_variant.price}"
                      spz-if="${product.min_price_variant.compare_at_price > product.min_price_variant.price ? true : false}"></ljs-currency>
                    <ljs-currency class="zb-mr-2 rtl:zb-mr-0 rtl:zb-ml-2 zb-font-semibold zb-text-base" layout="container" value="${product.min_price_variant.price}"
                      spz-if="${product.min_price_variant.compare_at_price <= product.min_price_variant.price ? true : false}"></ljs-currency>
                    <ljs-currency class="zb-text-[#93989D] zb-text-sm zb-line-through zb-leading-6" layout="container" value="${product.min_price_variant.compare_at_price}"
                      spz-if="${product.min_price_variant.compare_at_price > product.min_price_variant.price ? true : false}"></ljs-currency>
                  </div>
                </div>
                <button
                  class="zb-w-full zb-mt-3 zb-mb-[2px] zb-p-0 zb-h-[38px] zb-overflow-hidden zb-leading-[38px] md:zb-h-[42px] md:zb-leading-[42px] zb-cursor-pointer zb-bg-white zb-text-center zb-text-[12px] md:zb-text-[14px] zb-box-border zb-rounded md:zb-rounded-sm zb-no-underline zb-border zb-border-slate-200 zb-border-solid"
                  @tap="smart_recommend_func.quickShop(rule_id='${rule.id}',ssp='${rule.ssp}',scm='${product.scm || rule.scm}',product_id='${product.id}',productIndex='${productIndex}',cfb='${product.cfb}',ifb='${product.ifb}');smart_recommend_loading.showLoading;">
                  <div>${rule.config.quick_shop_button_text}</div>
                </button>
              </div>
            </li>
          </ul>
          <div spz-if="${rule.products &amp;&amp; rule.products.length > 5 ? true : false}"
            class="zb-absolute zb-z-50 zb-flex zb-justify-center zb-items-center zb-transition zb-bg-no-repeat zb-bg-center zb-bg-[11px, 16px] zb-translate-x-0 zb-shadow-caretCircle zb-rounded-full zb-w-[46px] zb-h-[46px] zb-bg-white zb-cursor-pointer zb-top-[calc(50%_-_93px)] zb-left-[-23px]"
            @tap="smart_recommend_func.handleScroll(rule_id='${rule.id}',direction='left')">
            <svg viewBox="0 0 16 16" focusable="false" data-icon="chevron-left" width="1em" height="1em" fill="currentColor" aria-hidden="true">
              <path d="M10 14a1 1 0 01-.7-.3l-5-5a1 1 0 010-1.4l5-5a1 1 0 011.4 1.4L6.42 8l4.3 4.3A1 1 0 0110 14z"></path>
            </svg>
          </div>
          <div spz-if="${rule.products &amp;&amp; rule.products.length > 5 ? true : false}"
            class="zb-absolute zb-z-50 zb-flex zb-justify-center zb-items-center zb-transition zb-bg-no-repeat zb-bg-center zb-translate-x-0 zb-rotate-180 zb-shadow-caretCircle zb-rounded-full zb-w-[46px] zb-h-[46px] zb-bg-white zb-cursor-pointer zb-top-[calc(50%_-_93px)] zb-right-[-23px]"
            @tap="smart_recommend_func.handleScroll(rule_id='${rule.id}',direction='right')">
            <svg viewBox="0 0 16 16" focusable="false" data-icon="chevron-left" width="1em" height="1em" fill="currentColor" aria-hidden="true">
              <path d="M10 14a1 1 0 01-.7-.3l-5-5a1 1 0 010-1.4l5-5a1 1 0 011.4 1.4L6.42 8l4.3 4.3A1 1 0 0110 14z"></path>
            </svg>
          </div>
        </div>
      </div> ` }()} </template>
    <template id="smart_recommend_product_image_template">
      <ljs-img src="${data.variant.image &amp;&amp; data.variant.image.src || data.product.image.src}" layout="fixed" object-fit="contain" auto-fit="" width="66" height="66" class="zb-rounded"></ljs-img>
    </template>
    <template id="smart_recommend_price_template">
      <div class="zb-flex zb-items-center">
        <ljs-currency class="zb-font-semibold zb-text-[22px] zb-text-[#CD201A] zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0" layout="container" value="${data.variant.price}"></ljs-currency>
        <ljs-currency class="zb-text-[#93989D] zb-text-xs zb-line-through" layout="container" value="${data.variant.compare_at_price}" spz-if="${data.variant.compare_at_price > data.variant.price ? true : false}"></ljs-currency>
      </div>
    </template>
    <style>
      *,
      ::before,
      ::after {
        --tw-border-spacing-x: 0;
        --tw-border-spacing-y: 0;
        --tw-translate-x: 0;
        --tw-translate-y: 0;
        --tw-rotate: 0;
        --tw-skew-x: 0;
        --tw-skew-y: 0;
        --tw-scale-x: 1;
        --tw-scale-y: 1;
        --tw-pan-x: ;
        --tw-pan-y: ;
        --tw-pinch-zoom: ;
        --tw-scroll-snap-strictness: proximity;
        --tw-ordinal: ;
        --tw-slashed-zero: ;
        --tw-numeric-figure: ;
        --tw-numeric-spacing: ;
        --tw-numeric-fraction: ;
        --tw-ring-inset: ;
        --tw-ring-offset-width: 0px;
        --tw-ring-offset-color: #fff;
        --tw-ring-color: rgba(59, 130, 246, 0.5);
        --tw-ring-offset-shadow: 0 0 rgba(0, 0, 0, 0);
        --tw-ring-shadow: 0 0 rgba(0, 0, 0, 0);
        --tw-shadow: 0 0 rgba(0, 0, 0, 0);
        --tw-shadow-colored: 0 0 rgba(0, 0, 0, 0);
        --tw-blur: ;
        --tw-brightness: ;
        --tw-contrast: ;
        --tw-grayscale: ;
        --tw-hue-rotate: ;
        --tw-invert: ;
        --tw-saturate: ;
        --tw-sepia: ;
        --tw-drop-shadow: ;
        --tw-backdrop-blur: ;
        --tw-backdrop-brightness: ;
        --tw-backdrop-contrast: ;
        --tw-backdrop-grayscale: ;
        --tw-backdrop-hue-rotate: ;
        --tw-backdrop-invert: ;
        --tw-backdrop-opacity: ;
        --tw-backdrop-saturate: ;
        --tw-backdrop-sepia: ;
      }

      ::backdrop {
        --tw-border-spacing-x: 0;
        --tw-border-spacing-y: 0;
        --tw-translate-x: 0;
        --tw-translate-y: 0;
        --tw-rotate: 0;
        --tw-skew-x: 0;
        --tw-skew-y: 0;
        --tw-scale-x: 1;
        --tw-scale-y: 1;
        --tw-pan-x: ;
        --tw-pan-y: ;
        --tw-pinch-zoom: ;
        --tw-scroll-snap-strictness: proximity;
        --tw-ordinal: ;
        --tw-slashed-zero: ;
        --tw-numeric-figure: ;
        --tw-numeric-spacing: ;
        --tw-numeric-fraction: ;
        --tw-ring-inset: ;
        --tw-ring-offset-width: 0px;
        --tw-ring-offset-color: #fff;
        --tw-ring-color: rgba(59, 130, 246, 0.5);
        --tw-ring-offset-shadow: 0 0 rgba(0, 0, 0, 0);
        --tw-ring-shadow: 0 0 rgba(0, 0, 0, 0);
        --tw-shadow: 0 0 rgba(0, 0, 0, 0);
        --tw-shadow-colored: 0 0 rgba(0, 0, 0, 0);
        --tw-blur: ;
        --tw-brightness: ;
        --tw-contrast: ;
        --tw-grayscale: ;
        --tw-hue-rotate: ;
        --tw-invert: ;
        --tw-saturate: ;
        --tw-sepia: ;
        --tw-drop-shadow: ;
        --tw-backdrop-blur: ;
        --tw-backdrop-brightness: ;
        --tw-backdrop-contrast: ;
        --tw-backdrop-grayscale: ;
        --tw-backdrop-hue-rotate: ;
        --tw-backdrop-invert: ;
        --tw-backdrop-opacity: ;
        --tw-backdrop-saturate: ;
        --tw-backdrop-sepia: ;
      }

      .zb-pointer-events-none {
        pointer-events: none;
      }

      .zb-absolute {
        position: absolute;
      }

      .zb-relative {
        position: relative;
      }

      .zb-top-\[-2px\] {
        top: -2px;
      }

      .zb-left-\[-2px\] {
        left: -2px;
      }

      .zb-top-\[calc\(50\%_-_93px\)\] {
        top: calc(50% - 93px);
      }

      .zb-left-\[-23px\] {
        left: -23px;
      }

      .zb-right-\[-23px\] {
        right: -23px;
      }

      .zb-bottom-0 {
        bottom: 0px;
      }

      .zb-top-\[-6px\] {
        top: -6px;
      }

      .zb-right-\[-6px\] {
        right: -6px;
      }

      .zb-left-0 {
        left: 0px;
      }

      .zb-z-50 {
        z-index: 50;
      }

      .zb-z-20 {
        z-index: 20;
      }

      .zb-m-0 {
        margin: 0px;
      }

      .zb-m-\[-12px\] {
        margin: -12px;
      }

      .zb-mx-2 {
        margin-left: 0.5rem;
        margin-right: 0.5rem;
      }

      .zb-mb-10 {
        margin-bottom: 2.5rem;
      }

      .zb-mr-5 {
        margin-right: 1.25rem;
      }

      .zb-mb-2 {
        margin-bottom: 0.5rem;
      }

      .zb-mt-2 {
        margin-top: 0.5rem;
      }

      .zb-mr-2 {
        margin-right: 0.5rem;
      }

      .zb-mt-3 {
        margin-top: 0.75rem;
      }

      .zb-mb-\[2px\] {
        margin-bottom: 2px;
      }

      .zb-mt-\[-180px\] {
        margin-top: -180px;
      }

      .zb-mr-10 {
        margin-right: 2.5rem;
      }

      .zb-mr-4 {
        margin-right: 1rem;
      }

      .zb-mb-6 {
        margin-bottom: 1.5rem;
      }

      .zb-mb-1 {
        margin-bottom: 0.25rem;
      }

      .zb-mb-4 {
        margin-bottom: 1rem;
      }

      .zb-ml-2 {
        margin-left: 0.5rem;
      }

      .zb-mb-3 {
        margin-bottom: 0.75rem;
      }

      .zb-mb-\[26px\] {
        margin-bottom: 26px;
      }

      .zb-ml-3 {
        margin-left: 0.75rem;
      }

      .zb-mt-\[-850px\] {
        margin-top: -850px;
      }

      .zb-ml-4 {
        margin-left: 1rem;
      }

      .zb-box-border {
        box-sizing: border-box;
      }

      .zb-flex {
        display: flex;
      }

      .zb-hidden {
        display: none;
      }

      .zb-h-\[38px\] {
        height: 38px;
      }

      .zb-h-\[46px\] {
        height: 46px;
      }

      .zb-h-\[70px\] {
        height: 70px;
      }

      .zb-h-\[42px\] {
        height: 42px;
      }

      .zb-h-\[18px\] {
        height: 18px;
      }

      .zb-h-\[85vh\] {
        height: 85vh;
      }

      .zb-h-full {
        height: 100%;
      }

      .zb-h-\[900px\] {
        height: 900px;
      }

      .zb-h-9 {
        height: 2.25rem;
      }

      .zb-h-6 {
        height: 1.5rem;
      }

      .zb-h-\[176px\] {
        height: 176px;
      }

      .zb-h-5 {
        height: 1.25rem;
      }

      .zb-h-10 {
        height: 2.5rem;
      }

      .zb-h-8 {
        height: 2rem;
      }

      .zb-max-h-\[80vh\] {
        max-height: 80vh;
      }

      .zb-max-h-\[280px\] {
        max-height: 280px;
      }

      .zb-min-h-\[88px\] {
        min-height: 88px;
      }

      .zb-min-h-\[40px\] {
        min-height: 40px;
      }

      .zb-min-h-\[48px\] {
        min-height: 48px;
      }

      .zb-min-h-\[50vh\] {
        min-height: 50vh;
      }

      .zb-w-full {
        width: 100%;
      }

      .zb-w-\[42\%\] {
        width: 42%;
      }

      .zb-w-\[46px\] {
        width: 46px;
      }

      .zb-w-screen {
        width: 100vw;
      }

      .zb-w-1\/2 {
        width: 50%;
      }

      .zb-w-\[66px\] {
        width: 66px;
      }

      .zb-w-\[18px\] {
        width: 18px;
      }

      .zb-w-fit {
        width: -moz-fit-content;
        width: fit-content;
      }

      .zb-w-\[132px\] {
        width: 132px;
      }

      .zb-w-\[50\%\] {
        width: 50%;
      }

      .zb-w-\[70\%\] {
        width: 70%;
      }

      .zb-w-8 {
        width: 2rem;
      }

      .zb-w-\[60px\] {
        width: 60px;
      }

      .zb-w-\[100px\] {
        width: 100px;
      }

      .zb-flex-shrink-0 {
        flex-shrink: 0;
      }

      .zb-shrink-0 {
        flex-shrink: 0;
      }

      .zb-flex-grow {
        flex-grow: 1;
      }

      .zb-translate-x-0 {
        --tw-translate-x: 0px;
        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
      }

      .zb-rotate-180 {
        --tw-rotate: 180deg;
        transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
      }

      .zb-cursor-pointer {
        cursor: pointer;
      }

      .zb-list-none {
        list-style-type: none;
      }

      .zb-flex-col {
        flex-direction: column;
      }

      .zb-flex-wrap {
        flex-wrap: wrap;
      }

      .zb-items-start {
        align-items: flex-start;
      }

      .zb-items-center {
        align-items: center;
      }

      .zb-justify-end {
        justify-content: flex-end;
      }

      .zb-justify-center {
        justify-content: center;
      }

      .zb-justify-between {
        justify-content: space-between;
      }

      .zb-gap-6 {
        gap: 1.5rem;
      }

      .zb-gap-3 {
        gap: 0.75rem;
      }

      .zb-gap-1 {
        gap: 0.25rem;
      }

      .zb-gap-4 {
        gap: 1rem;
      }

      .zb-overflow-hidden {
        overflow: hidden;
      }

      .zb-overflow-y-auto {
        overflow-y: auto;
      }

      .zb-overflow-x-scroll {
        overflow-x: scroll;
      }

      .zb-whitespace-nowrap {
        white-space: nowrap;
      }

      .zb-rounded {
        border-radius: 0.25rem;
      }

      .zb-rounded-sm {
        border-radius: 0.125rem;
      }

      .zb-rounded-full {
        border-radius: 9999px;
      }

      .zb-rounded-\[4px\] {
        border-radius: 4px;
      }

      .zb-rounded-tr-none {
        border-top-right-radius: 0px;
      }

      .zb-rounded-bl-none {
        border-bottom-left-radius: 0px;
      }

      .zb-border-2 {
        border-width: 2px;
      }

      .zb-border {
        border-width: 1px;
      }

      .zb-border-b {
        border-bottom-width: 1px;
      }

      .zb-border-t-0 {
        border-top-width: 0px;
      }

      .zb-border-l-0 {
        border-left-width: 0px;
      }

      .zb-border-r-0 {
        border-right-width: 0px;
      }

      .zb-border-solid {
        border-style: solid;
      }

      .zb-border-dashed {
        border-style: dashed;
      }

      .zb-border-none {
        border-style: none;
      }

      .zb-border-black {
        --tw-border-opacity: 1;
        border-color: rgba(0, 0, 0, var(--tw-border-opacity));
      }

      .zb-border-slate-200 {
        --tw-border-opacity: 1;
        border-color: rgba(226, 232, 240, var(--tw-border-opacity));
      }

      .zb-border-\[\#e4e4e4\] {
        --tw-border-opacity: 1;
        border-color: rgba(228, 228, 228, var(--tw-border-opacity));
      }

      .zb-border-\[\#eee\] {
        --tw-border-opacity: 1;
        border-color: rgba(238, 238, 238, var(--tw-border-opacity));
      }

      .zb-border-\[\#313131\] {
        --tw-border-opacity: 1;
        border-color: rgba(49, 49, 49, var(--tw-border-opacity));
      }

      .zb-border-red-50 {
        --tw-border-opacity: 1;
        border-color: rgba(254, 242, 242, var(--tw-border-opacity));
      }

      .zb-bg-\[\#000\] {
        --tw-bg-opacity: 1;
        background-color: rgba(0, 0, 0, var(--tw-bg-opacity));
      }

      .zb-bg-white {
        --tw-bg-opacity: 1;
        background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
      }

      .zb-bg-\[\#292929\] {
        --tw-bg-opacity: 1;
        background-color: rgba(41, 41, 41, var(--tw-bg-opacity));
      }

      .zb-bg-black {
        --tw-bg-opacity: 1;
        background-color: rgba(0, 0, 0, var(--tw-bg-opacity));
      }

      .zb-bg-\[\#202020\] {
        --tw-bg-opacity: 1;
        background-color: rgba(32, 32, 32, var(--tw-bg-opacity));
      }

      .zb-bg-transparent {
        background-color: transparent;
      }

      .zb-bg-\[\#f2f2f2\] {
        --tw-bg-opacity: 1;
        background-color: rgba(242, 242, 242, var(--tw-bg-opacity));
      }

      .zb-bg-center {
        background-position: center;
      }

      .zb-bg-no-repeat {
        background-repeat: no-repeat;
      }

      .zb-p-5 {
        padding: 1.25rem;
      }

      .zb-p-0 {
        padding: 0px;
      }

      .zb-p-4 {
        padding: 1rem;
      }

      .zb-p-3 {
        padding: 0.75rem;
      }

      .\!zb-p-3 {
        padding: 0.75rem !important;
      }

      .zb-px-4 {
        padding-left: 1rem;
        padding-right: 1rem;
      }

      .zb-py-3 {
        padding-top: 0.75rem;
        padding-bottom: 0.75rem;
      }

      .zb-py-4 {
        padding-top: 1rem;
        padding-bottom: 1rem;
      }

      .zb-py-\[11px\] {
        padding-top: 11px;
        padding-bottom: 11px;
      }

      .zb-px-\[20px\] {
        padding-left: 20px;
        padding-right: 20px;
      }

      .zb-px-3 {
        padding-left: 0.75rem;
        padding-right: 0.75rem;
      }

      .zb-py-\[10px\] {
        padding-top: 10px;
        padding-bottom: 10px;
      }

      .zb-pt-10 {
        padding-top: 2.5rem;
      }

      .zb-pt-\[40px\] {
        padding-top: 40px;
      }

      .zb-pb-\[26px\] {
        padding-bottom: 26px;
      }

      .zb-pt-4 {
        padding-top: 1rem;
      }

      .zb-pb-\[100px\] {
        padding-bottom: 100px;
      }

      .zb-pb-4 {
        padding-bottom: 1rem;
      }

      .zb-text-center {
        text-align: center;
      }

      .zb-text-\[12px\] {
        font-size: 12px;
      }

      .zb-text-\[14px\] {
        font-size: 14px;
      }

      .zb-text-2xl {
        font-size: 1.5rem;
        line-height: 2rem;
      }

      .zb-text-sm {
        font-size: 0.875rem;
        line-height: 1.25rem;
      }

      .zb-text-base {
        font-size: 1rem;
        line-height: 1.5rem;
      }

      .zb-text-\[22px\] {
        font-size: 22px;
      }

      .zb-text-xs {
        font-size: 0.75rem;
        line-height: 1rem;
      }

      .zb-text-\[13px\] {
        font-size: 13px;
      }

      .\!zb-text-base {
        font-size: 1rem !important;
        line-height: 1.5rem !important;
      }

      .zb-text-lg {
        font-size: 1.125rem;
        line-height: 1.75rem;
      }

      .zb-text-xl {
        font-size: 1.25rem;
        line-height: 1.75rem;
      }

      .zb-font-medium {
        font-weight: 500;
      }

      .zb-font-normal {
        font-weight: 400;
      }

      .zb-font-semibold {
        font-weight: 600;
      }

      .zb-leading-\[20px\] {
        line-height: 20px;
      }

      .zb-leading-\[36px\] {
        line-height: 36px;
      }

      .zb-leading-6 {
        line-height: 1.5rem;
      }

      .zb-leading-\[38px\] {
        line-height: 38px;
      }

      .zb-leading-\[18px\] {
        line-height: 18px;
      }

      .zb-text-\[\#fff\] {
        --tw-text-opacity: 1;
        color: rgba(255, 255, 255, var(--tw-text-opacity));
      }

      .zb-text-\[\#EC433D\] {
        --tw-text-opacity: 1;
        color: rgba(236, 67, 61, var(--tw-text-opacity));
      }

      .zb-text-\[\#93989D\] {
        --tw-text-opacity: 1;
        color: rgba(147, 152, 157, var(--tw-text-opacity));
      }

      .zb-text-\[\#CD201A\] {
        --tw-text-opacity: 1;
        color: rgba(205, 32, 26, var(--tw-text-opacity));
      }

      .zb-text-\[\#212b36\] {
        --tw-text-opacity: 1;
        color: rgba(33, 43, 54, var(--tw-text-opacity));
      }

      .zb-text-\[\#212B36\] {
        --tw-text-opacity: 1;
        color: rgba(33, 43, 54, var(--tw-text-opacity));
      }

      .zb-text-white {
        --tw-text-opacity: 1;
        color: rgba(255, 255, 255, var(--tw-text-opacity));
      }

      .zb-line-through {
        -webkit-text-decoration-line: line-through;
        text-decoration-line: line-through;
      }

      .zb-no-underline {
        -webkit-text-decoration-line: none;
        text-decoration-line: none;
      }

      .zb-shadow-caretCircle {
        --tw-shadow: 0px 0px 4px 0px rgba(29, 29, 29, 0.1);
        --tw-shadow-colored: 0px 0px 4px 0px var(--tw-shadow-color);
        box-shadow: 0 0 rgba(0, 0, 0, 0), 0 0 rgba(0, 0, 0, 0), var(--tw-shadow);
        box-shadow: 0 0 rgba(0, 0, 0, 0), 0 0 rgba(0, 0, 0, 0), var(--tw-shadow);
        box-shadow: var(--tw-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-ring-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-shadow);
      }

      .zb-shadow-bottom {
        --tw-shadow: 0px 0px 4px rgba(0, 0, 0, 0.04), 0px 2px 10px rgba(0, 0, 0, 0.1);
        ;
        --tw-shadow-colored: 0px 0px 4px var(--tw-shadow-color), 0px 2px 10px var(--tw-shadow-color);
        box-shadow: 0 0 rgba(0, 0, 0, 0), 0 0 rgba(0, 0, 0, 0), var(--tw-shadow);
        box-shadow: 0 0 rgba(0, 0, 0, 0), 0 0 rgba(0, 0, 0, 0), var(--tw-shadow);
        box-shadow: var(--tw-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-ring-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-shadow);
      }

      .zb-transition {
        transition-property: color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
        transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;
        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
        transition-duration: 150ms;
      }

      .zb-line-clamp-2 {
        overflow: hidden;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
      }

      .zb-line-clamp-1 {
        overflow: hidden;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 1;
      }

      ljs-script {
        font-size: 0;
      }

      /** * 加购弹窗 */
      @media (min-width: 768px) {
        .smart_cart_pop_variant_pc_show {
          display: block;
          box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.04), 0px 2px 10px rgba(0, 0, 0, 0.1);
          ;
        }
      }

      @media(max-width: 767.9px) {
        #smart_cart_pop_modal {
          top: auto !important;
          top: initial !important;
          height: auto !important;
          height: initial !important;
        }

        .smart_cart_pop_lightbox_pc {
          display: none !important;
        }
      }

      #smart_cart_pop ljs-lightbox {
        z-index: 3002;
      }

      #smart_cart_pop .i-spzhtml-lightbox-mask {
        z-index: 3000;
      }

      #smart_cart_pop_modal spz-toast {
        padding: 12px 16px;
        top: 20%;
      }

      #smart_cart_pop_modal ljs-product-form ljs-lightbox {
        position: absolute;
      }

      #smart_cart_pop_modal ljs-product-form ljs-lightbox[hidden]+.i-spzhtml-lightbox-mask {
        display: none;
      }

      #smart_cart_pop_modal ljs-product-form ljs-lightbox+.i-spzhtml-lightbox-mask {
        z-index: 1001;
        background-color: transparent;
        position: absolute;
      }

      @media(max-width: 767.9px) {
        #smart_cart_pop_modal ljs-product-form ljs-lightbox+.i-spzhtml-lightbox-mask {
          display: none;
        }
      }

      .smart_cart_pop_atc_bg {
        background: var(--add-to-cart-button-color);
      }

      .smart_cart_pop_tooltip .i-spzhtml-tooltip-inner,
      .smart_cart_pop_tooltip .i-spzhtml-tooltip-arrow:before {
        background: white;
        color: inherit;
        font-size: 14px;
      }

      .smart_cart_pop_product__option_value label {
        display: block;
        /* min-width: 34px; */
        margin: 4px 8px 0 0;
        padding: 8px 16px;
        border: 1px solid #E6E6E6;
        border-radius: 2px;
        text-align: center;
        cursor: pointer;
      }

      .smart_cart_pop_product__option_value input[no_exits]+label {
        pointer-events: none;
        background: #eee;
        color: #737373;
      }

      .smart_cart_pop_product__option_value input:checked+label {
        border: 1.5px solid #212B36;
      }

      #smart_cart_pop_item_added_info {
        animation: smart_cart_pop_item_added_info 0.5s 1;
        -webkit-animation: smart_cart_pop_item_added_info 0.5s 1;
        animation-fill-mode: forwards;
        animation-delay: 2s;
        -webkit-animation-delay: 2s;
        /* Safari and Chrome */
        -webkit-animation-fill-mode: forwards;
      }

      .smart_cart_pop_tooltip {
        z-index: 3003 !important;
      }

      @keyframes smart_cart_pop_item_added_info {
        from {
          opacity: 1;
        }

        to {
          opacity: 0;
        }
      }

      .smart_cart_pop_loading {
        width: 16px;
        height: 16px;
        border: 2px solid #fff;
        border-top-color: transparent;
        border-radius: 100%;
        animation: circle infinite 1s linear;
      }

      @keyframes circle {
        0% {
          transform: rotate(0);
        }

        100% {
          transform: rotate(360deg);
        }
      }

      /** * 商详专辑首页 */
      @media (max-width: 767.9px) {
        #smart_recommend_product_modal {
          top: auto !important;
          top: initial !important;
          height: auto !important;
        }
      }

      .scrollbar-hide {
        -ms-overflow-style: none;
        /* for Internet Explorer, Edge */
        scrollbar-width: none;
        /* for Firefox */
        scroll-snap-type: x proximity;
      }

      .scrollbar-hide::-webkit-scrollbar {
        display: none;
        /* for Chrome, Safari, and Opera */
      }

      .scrollbar-hide:before,
      .scrollbar-hide:after {
        content: \'\';
        display: none;
      }

      .scrollbar-hide:after {
        content: \'\';
        width: 0;
      }

      .scrollbar-hide>li,
      .item {
        scroll-snap-align: start;
      }

      @media(min-width: 768px) {
        .scrollbar-hide {
          margin-left: 0px;
        }

        .scrollbar-hide>li {
          scroll-snap-align: start;
        }
      }

      .plugin_container_wrpper {
        padding: 40px;
        padding: var(--general-layout-spacing, var(--page-spacing, 40px));
        max-width: 1000px;
        max-width: var(--general-layout-width, var(--layout-width, var(--page-width, 1000px)));
        margin: 0 auto;
      }

      @media(max-width: 767.9px) {
        .plugin_container_wrpper {
          padding: 16px;
          padding: var(--general-layout-spacing, var(--page-spacing, 16px));
        }
      }

      #smart_recommend_selector ljs-img[selected] {
        border: 1px solid #000;
        border-radius: 2px;
      }

      .smart_recommend_product__option_value label {
        display: block;
        min-width: 32px;
        margin: 8px 8px 0 0;
        padding: 6px 14px;
        border: 1px solid #E6E6E6;
        border-radius: 2px;
        text-align: center;
        cursor: pointer;
      }

      .smart_recommend_product__option_value input[no_exits]+label {
        pointer-events: none;
        background: #eee;
        color: #737373;
      }

      .smart_recommend_product__option_value input:checked+label {
        border: 1.5px solid #212B36;
      }

      ljs-carousel .spz-carousel-button {
        opacity: 1 !important;
      }

      ljs-carousel .spz-carousel-button {
        display: flex;
        align-items: center;
        justify-content: center;
        visibility: visible;
        background: rgba(0, 0, 0, 0.14);
        border-radius: 100%;
        width: 44px;
        height: 44px;
      }

      #smart_recommend_js_root {
        max-width: 100%;
      }

      #smart_recommend_loading {
        z-index: 1060;
      }

      #smart_recommend_toast {
        z-index: 1061;
      }

      html[dir="rtl"] .smart_recommend_product__option_value label {
        margin: 8px 0 0 8px;
      }

      [dir="rtl"] .rtl\:zb-ml-2 {
        margin-left: 0.5rem;
      }

      [dir="rtl"] .rtl\:zb-mr-0 {
        margin-right: 0px;
      }

      [dir="rtl"] .rtl\:zb-ml-10 {
        margin-left: 2.5rem;
      }

      [dir="rtl"] .rtl\:zb-ml-4 {
        margin-left: 1rem;
      }

      [dir="rtl"] .rtl\:zb-mr-2 {
        margin-right: 0.5rem;
      }

      [dir="rtl"] .rtl\:zb-ml-0 {
        margin-left: 0px;
      }

      [dir="rtl"] .rtl\:zb-mr-3 {
        margin-right: 0.75rem;
      }

      @media (min-width: 768px) {
        .md\:\!zb-absolute {
          position: absolute !important;
        }

        .md\:zb-top-\[50px\] {
          top: 50px;
        }

        .md\:zb-left-0 {
          left: 0px;
        }

        .md\:zb-z-30 {
          z-index: 30;
        }

        .md\:zb-mb-2 {
          margin-bottom: 0.5rem;
        }

        .md\:zb-mb-3 {
          margin-bottom: 0.75rem;
        }

        .md\:zb-flex {
          display: flex;
        }

        .md\:zb-hidden {
          display: none;
        }

        .md\:zb-h-\[42px\] {
          height: 42px;
        }

        .md\:zb-h-\[580px\] {
          height: 580px;
        }

        .md\:zb-h-\[610px\] {
          height: 610px;
        }

        .md\:zb-h-\[22px\] {
          height: 22px;
        }

        .md\:zb-w-\[17\%\] {
          width: 17%;
        }

        .md\:zb-w-\[90\%\] {
          width: 90%;
        }

        .md\:zb-w-\[530px\] {
          width: 530px;
        }

        .md\:zb-w-full {
          width: 100%;
        }

        .md\:zb-w-\[22px\] {
          width: 22px;
        }

        .md\:zb-max-w-\[820px\] {
          max-width: 820px;
        }

        .md\:zb-flex-col {
          flex-direction: column;
        }

        .md\:zb-justify-between {
          justify-content: space-between;
        }

        .md\:zb-rounded-sm {
          border-radius: 0.125rem;
        }

        .md\:zb-rounded-b-\[4px\] {
          border-bottom-right-radius: 4px;
          border-bottom-left-radius: 4px;
        }

        .md\:zb-border-none {
          border-style: none;
        }

        .md\:zb-bg-white {
          --tw-bg-opacity: 1;
          background-color: rgba(255, 255, 255, var(--tw-bg-opacity));
        }

        .md\:zb-p-6 {
          padding: 1.5rem;
        }

        .md\:zb-p-\[10px\] {
          padding: 10px;
        }

        .md\:zb-p-4 {
          padding: 1rem;
        }

        .md\:zb-p-5 {
          padding: 1.25rem;
        }

        .md\:zb-px-\[220px\] {
          padding-left: 220px;
          padding-right: 220px;
        }

        .md\:zb-px-6 {
          padding-left: 1.5rem;
          padding-right: 1.5rem;
        }

        .md\:zb-px-0 {
          padding-left: 0px;
          padding-right: 0px;
        }

        .md\:zb-py-\[9px\] {
          padding-top: 9px;
          padding-bottom: 9px;
        }

        .md\:zb-pb-0 {
          padding-bottom: 0px;
        }

        .md\:zb-pt-0 {
          padding-top: 0px;
        }

        .md\:zb-pt-8 {
          padding-top: 2rem;
        }

        .md\:zb-text-\[14px\] {
          font-size: 14px;
        }

        .md\:zb-text-base {
          font-size: 1rem;
          line-height: 1.5rem;
        }

        .md\:zb-text-lg {
          font-size: 1.125rem;
          line-height: 1.75rem;
        }

        .md\:zb-leading-\[42px\] {
          line-height: 42px;
        }

        .md\:zb-shadow-pop {
          --tw-shadow: 0px 2px 10px 1px rgba(0, 0, 0, 0.1), 0px 0px 4px 1px rgba(0, 0, 0, 0.04);
          ;
          --tw-shadow-colored: 0px 2px 10px 1px var(--tw-shadow-color), 0px 0px 4px 1px var(--tw-shadow-color);
          box-shadow: 0 0 rgba(0, 0, 0, 0), 0 0 rgba(0, 0, 0, 0), var(--tw-shadow);
          box-shadow: 0 0 rgba(0, 0, 0, 0), 0 0 rgba(0, 0, 0, 0), var(--tw-shadow);
          box-shadow: var(--tw-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-ring-shadow, 0 0 rgba(0, 0, 0, 0)), var(--tw-shadow);
        }
      }
    </style>
    <spz-custom-smart-block layout="container" id="smart_recommend_func" class="i-spzhtml-element i-spzhtml-layout-container i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="container">
      <template>
        <div></div>
      </template>
    </spz-custom-smart-block>
    <ljs-script layout="logic" type="application/javascript" class="notranslate i-spzhtml-element i-spzhtml-layout-logic i-spzhtml-built i-spzhtml-layout" i-spzhtml-layout="logic"> class SpzSmartBlockComponent extends SPZ.BaseElement {
      constructor(element) { super(element); this.templates_ = null; this.container_ = null; this.i18n_ = {}; this.config_ = {}; this.show_type_ = 3; this.product_resource_id_ = ''; this.collection_resource_id_ = ''; this.cart_items_ = [];
      this.customer_id_ = ''; this.order_id_ = ''; } static deferredMount() { return false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { const template_type = window.SHOPLAZZA.meta.page.template_type;
      if (template_type === 1) { this.show_type_ = 3; this.product_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 2) { this.show_type_ = 4; this.collection_resource_id_ = window.SHOPLAZZA.meta.page.resource_id; }
      else if (template_type === 15){ this.show_type_ = 5; } else if (template_type === 13){ this.show_type_ = 6; } else if (template_type === 20){ this.show_type_ = 7; this.customer_id_ = window.SHOPLAZZA.customer.customer_id; } else if
      (template_type === 35){ this.show_type_ = 8; this.order_id_ = window.location.pathname.split('/').pop(); } this.templates_ = SPZServices.templatesForDoc(this.element); this.setAction_(); } mountCallback() { console.log('smart mounted'); const
      that = this; const themeName = window.SHOPLAZZA.theme.merchant_theme_name; const isGeek = /Geek/.test(themeName); this.fetchRules().then((res) =&gt; { if (res &amp;&amp; res.rules &amp;&amp; res.rules.length) { const blockEl =
      document.getElementById('smart_recommend_block'); SPZ.whenApiDefined(blockEl).then((api) =&gt; { api.render({data: res}, true).then(() =&gt; { if (isGeek &amp;&amp; that.show_type_ === 6) {
      blockEl.querySelector('.plugin_container_wrpper').style.padding = '30px 0'; } const recommendStyle = document.createElement('style'); recommendStyle.innerHTML = ` .plugin__recommend_container,.app-recommend-card { display: none !important; } `;
      document.head.appendChild(recommendStyle); const fetchList = []; res.rules.forEach((rule) =&gt; { fetchList.push(this.fetchRuleProductList(rule.id)); }); const fetchAll = Promise.all(fetchList); fetchAll.then((p_res) =&gt; {
      res.rules.forEach((rule, index) =&gt; { rule.products = p_res[index] &amp;&amp; p_res[index].products; const ruleEl = document.getElementById('smart_recommend_rule_' + rule.id); SPZ.whenApiDefined(ruleEl).then((api) =&gt; { api.render({data:
      rule}, true).then(() =&gt; { that.impressListen(`#smart_recommend_rule_ul_${rule.id}`, function(){ that.trackRuleImpress(rule); }); const btnElList = document.querySelectorAll(`#smart_recommend_rule_ul_${rule.id} button`);
      btnElList.forEach((btnEl) =&gt; { if (btnEl &amp;&amp; rule.config &amp;&amp; rule.config.quick_shop_button_bg_color &amp;&amp; rule.config.quick_shop_button_text_color) { btnEl.style.backgroundColor = rule.config.quick_shop_button_bg_color;
      btnEl.style.color = rule.config.quick_shop_button_text_color; } }) }); }); }); }); }) }) } else { if (window.top !== window.self) { const template_type = window.SHOPLAZZA.meta.page.template_type; const holderEl =
      document.getElementById('smart_recommend_preview_no_data_placeholder'); SPZ.whenApiDefined(holderEl).then((api) =&gt; { api.render({data: { isCart: template_type === 13, isCollection: template_type === 2, isProduct: template_type === 1,
      isIndex: template_type === 15 }}, true); }); } } }); } setAction_() { this.registerAction('quickShop', (data) =&gt; { const that = this; const product_id = data.args.product_id; const productIndex = data.args.productIndex; const rule_id =
      data.args.rule_id; const ssp = data.args.ssp; const scm = data.args.scm; const cfb = data.args.cfb; const ifb = data.args.ifb; const modalRender = document.getElementById('smart_recommend_product_modal_render'); if (product_id) {
      this.fetchProductData(product_id).then((res) =&gt; { const product = res.products &amp;&amp; res.products.length &amp;&amp; res.products[0] || {}; product.cfb = cfb; product.ifb = ifb; SPZ.whenApiDefined(modalRender).then((api) =&gt; {
      api.render({product: product, productIndex: productIndex, rule_id: rule_id, ssp: ssp, scm: scm, show_type: that.show_type_}, true).then(() =&gt; { const modalEl = document.getElementById('smart_recommend_product_modal');
      SPZ.whenApiDefined(modalEl).then((modal) =&gt; { that.impressListen('#smart_recommend_product_modal', function(){ that.trackQuickShop({ rule_id: rule_id, product_id: product_id }); }); modal.open(); }); const formEl =
      document.getElementById('smart_recommend_product_form'); SPZ.whenApiDefined(formEl).then((form) =&gt; { form.setProduct(product); }); const variantEl = document.getElementById('smart_recommend_product_variants');
      SPZ.whenApiDefined(variantEl).then((variant) =&gt; { variant.handleRender(product); }); }); }) }); } }); this.registerAction('handleScroll', (data) =&gt; { this.directTo(data.args.rule_id, data.args.direction); });
      this.registerAction('handleProductChange', (data) =&gt; { const variant = data.args.data.variant; const product = data.args.data.product; const imageRenderEl = document.getElementById('smart_recommend_product_image');
      SPZ.whenApiDefined(imageRenderEl).then((api) =&gt; { api.render({ variant: variant, product: product }, true); }); }); this.registerAction('handleAtcSuccess', (detail) =&gt; { const data = detail.args; data.data.product = data.data.product ||
      {}; data.data.variant = data.data.variant || {}; const product_id = data.data.product.id; const product_title = data.data.product.title; const variant_id = data.data.variant.id; const price = data.data.variant.price; const rule_id =
      data.rule_id; const aid = `smart_recommend.${this.show_type_}.${rule_id}`; const ifb = data.data.product.ifb; const cfb = data.data.product.cfb; const ssp = data.ssp; const scm = data.scm; const spm =
      `smart_recommend_${this.show_type_}.${data.spmIndex}`; const params = { id: product_id, product_id: product_id, number: 1, name: product_title, variant_id: variant_id, childrenId: variant_id, item_price: price, source: 'add_to_cart', _extra: {
      aid: aid, ifb: ifb, cfb: cfb, scm: scm, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, ssp: ssp, } }; this.tranckAddToCart(params); }); this.registerAction('addATCHook', (data) =&gt; { const params = data.args; const spm =
      `smart_recommend_${this.show_type_}.${params.spmIndex}`; this.myInterceptor_ = window.djInterceptors &amp;&amp; window.djInterceptors.track.use({ event: 'dj.addToCart', params: { aid: `smart_recommend.${this.show_type_}.` + params.rule_id, ssp:
      params.ssp, scm: params.scm, cfb: params.cfb, spm: `..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, }, once: true }); }); } tranckAddToCart(detail) { if (window.$) { window.$(document.body).trigger('dj.addToCart', detail); } }
      fetchRules() { const payload = { show_type: this.show_type_, }; let that = this; if (this.show_type_ === 6) { let line_items = []; return this.fetchCart().then((res) =&gt; { if (res &amp;&amp; res.cart &amp;&amp; res.cart.line_items) {
      line_items = res.cart.line_items.map((item) =&gt; { return { product_id: item.product_id, variant_id: item.variant_id, quantity: item.quantity, price: item.price } }); } payload.line_items = line_items; that.cart_items_ = line_items; return
      that.fetchRulesRequest(payload); }); } else { if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) { payload.collection_id = this.collection_resource_id_; } else if
      (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) { payload.order_id = this.order_id_; } return this.fetchRulesRequest(payload); } } fetchRulesRequest(payload) { return
      fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_query", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); } }); } fetchCart() {
      return fetch(`/api/cart/cart-select?r=${Math.random().toString(36).slice(-4)}`) .then((res) =&gt; { if (res.ok) { return res.json(); } }); } fetchRuleProductList(rule_id) { const payload = { page: 1, limit: 100, fields: ["title", "url",
      "image", "min_price_variant.price", "min_price_variant.compare_at_price"], rule_id: rule_id, }; if (this.show_type_ === 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; } else if (this.show_type_ === 4) {
      payload.collection_id = this.collection_resource_id_; } else if (this.show_type_ === 6) { payload.line_items = this.cart_items_; } else if (this.show_type_ === 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) {
      payload.order_id = this.order_id_; } return fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_products", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload) }).then(function(res){
      if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); }); } fetchProductData(product_id) { return fetch(window.SHOPLAZZA.routes.root + "/api/possum/products", { method: "POST", headers: { "Content-Type": "application/json"
      }, body: JSON.stringify({ product_ids: [product_id], fields: [ "images", "options", "min_price_variant", "variants"] }) }).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); const loadingEl =
      document.getElementById('smart_recommend_loading'); if (loadingEl) { loadingEl.style.display = 'none'; } }); } getStyle(ele, style) { if (!ele) return; if (window.getComputedStyle) { return window.getComputedStyle(ele)[style]; } return
      ele.currentStyle[style]; } directTo(id, direction) { const scrollElement = document.getElementById(`smart_recommend_rule_ul_${id}`); const blockWidth = parseInt(this.getStyle(scrollElement, 'width')); const scrollLength = (blockWidth * 0.19 -
      12) * 5; const scrollPoint = scrollElement.scrollWidth - scrollElement.clientWidth; if (!scrollElement) return; if (direction === 'left') { if (document.dir === 'rtl') { scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) &gt;=
      scrollPoint - 100 ? 0 : scrollElement.scrollLeft - scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: Math.max(scrollElement.scrollLeft - scrollLength, 0), behavior: 'smooth' }); } else { if (document.dir === 'rtl') {
      scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) &gt;= scrollPoint + 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); return; } scrollElement.scrollTo({ left: scrollElement.scrollLeft &gt;= scrollPoint
      - 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); } } trackRuleImpress(rule) { if (window.sa &amp;&amp; window.sa.track) { window.sa.track("plugin_common", { plugin_name: "upsell", event_type: "impressions", rule_id:
      rule.id, ssp: rule.ssp, scm: rule.scm, show_type: this.show_type_, support_app_block: window.SHOPLAZZA.theme.support_app_block }); window.sa.track("module_impressions", { aid: `smart_recommend.${this.show_type_}.${rule.id}`, support_app_block:
      window.SHOPLAZZA.theme.support_app_block }); } } trackQuickShop(data) { window.sa &amp;&amp; sa.track &amp;&amp; sa.track("plugin_common", { plugin_name: "upsell", event_type: "quick_shop", rule_id: data.rule_id, product_id: data.product_id,
      show_type: this.show_type_, }); } impressListen(selector, cb) { const el = document.querySelector(selector); const onImpress = (e) =&gt; { if (e) { e.stopPropagation(); } cb(); }; if (el &amp;&amp; !el.getAttribute('imprsd')) {
      el.addEventListener('impress', onImpress) } else if (el) { onImpress(); } } } SPZ.defineElement('spz-custom-smart-block', SpzSmartBlockComponent); </ljs-script>
    <template id="smart_recommend_product_modal_template"> ${(function(){ const product = data.product; const toQuery = obj =&gt; Object.keys(obj) .map(k =&gt; Array.isArray(obj[k]) ? obj[k].map(v =&gt;
      `${k}[]=${encodeURIComponent(v)}`).join('&amp;') : `${k}=${encodeURIComponent(obj[k])}` ) .join('&amp;'); return ` <ljs-lightbox layout="nodisplay" impr="1" imprevt="1" id="smart_recommend_product_modal" unclose-in-focus=""
        @open="smart_recommend_loading.close">
        <div class="zb-w-screen md:zb-w-[90%] md:zb-max-w-[820px] zb-bg-white zb-p-4 md:zb-p-6 zb-text-[#212b36] zb-pt-4 md:zb-pt-8 zb-relative">
          <div class="zb-p-3 zb-m-[-12px] zb-flex zb-justify-end" @tap="smart_recommend_product_modal.close">
            <svg width="16" height="16" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg">
              <path
                d="M6.49999 5.2679L1.98807 0.754964C1.64812 0.415012 1.09695 0.415012 0.756996 0.754964C0.417043 1.09492 0.417043 1.64609 0.756996 1.98604L5.2679 6.49897L0.754964 11.0109C0.415012 11.3508 0.415012 11.902 0.754964 12.242C1.09492 12.5819 1.64609 12.5819 1.98604 12.242L6.49999 7.73107L11.0119 12.244C11.2318 12.4639 11.5523 12.5498 11.8527 12.4693C12.1532 12.3888 12.3878 12.1542 12.4683 11.8538C12.5488 11.5534 12.4629 11.2328 12.243 11.0129L7.73208 6.49897L12.245 1.98706C12.4649 1.76715 12.5508 1.44662 12.4703 1.14622C12.3898 0.845812 12.1552 0.61117 11.8548 0.530677C11.5544 0.450184 11.2338 0.536069 11.0139 0.75598L6.49999 5.26688V5.2679Z"
                fill="#2C2C2C"></path>
            </svg>
          </div>
          <div class="zb-flex zb-min-h-[50vh] zb-max-h-[80vh] md:zb-h-[580px]">
            <div class="zb-hidden md:zb-flex md:zb-flex-col md:zb-justify-between zb-w-1/2 zb-flex-shrink-0 zb-mr-10 rtl:zb-ml-10 rtl:zb-mr-0">
              <div class="zb-border-2 zb-border-solid zb-border-[#e4e4e4] zb-rounded">
                <ljs-carousel id="smart_recommend_carousel" layout="responsive" width="640" height="800" initial-slide="0" loop="" effect="scroller" @mounted="smart_recommend_selector.toggle(option=event.index, value=true,isScrollIntoView=true);"
                  @slidechange="smart_recommend_selector.toggle(option=event.index, value=true,isScrollIntoView=true);"> ${product.images.map((image) =&gt; { return `<ljs-img src="${image.src}" layout="responsive" width="640" height="800"
                    object-fit="cover"></ljs-img>` }).join('')} <svg pre="" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="zb-rotate-180">
                    <path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="#fff"></path>
                  </svg>
                  <svg next="" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24">
                    <path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="#fff"></path>
                  </svg>
                </ljs-carousel>
              </div>
              <ljs-selector id="smart_recommend_selector" class="zb-mt-2 zb-flex-shrink-0" @select="smart_recommend_carousel.goToSlide(index=event.targetOption, animate=true);" layout="container" spz-if="${product.images.length>1}">
                <div scroll-container="" class="zb-whitespace-nowrap">
                  <ljs-img spz-for="(image, index) in product.images" option="${index}" class="zb-mr-2" src="${image.src}" layout="fixed" width="72" height="72" alt="${image.alt}" object-fit="cover" auto-fit=""></ljs-img>
                </div>
              </ljs-selector>
            </div>
            <ljs-product-form id="smart_recommend_product_form" class="zb-flex zb-flex-grow" layout="container" product-id="${product.id}" variant-id="${product.min_price_variant.id}"
              @productchange="smart_recommend_modal_price.rerender(data=event);smart_recommend_func.handleProductChange(data=event);"
              @atcsuccess="smart_recommend_func.handleAtcSuccess(data=event,rule_id='${data.rule_id}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');smart_recommend_product_modal.close"
              @buynowsuccess="smart_recommend_func.handleAtcSuccess(data=event,rule_id='${data.rule_id}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');"
              @atcerror="smart_recommend_toast.showToast(content='fail', duration=1000);">
              <form class="zb-flex zb-flex-col zb-relative zb-w-full">
                <div class="zb-overflow-y-auto zb-pb-[100px]">
                  <div class="zb-flex zb-items-center zb-pb-4 zb-border-b zb-border-t-0 zb-border-l-0 zb-border-r-0 zb-border-solid zb-border-[#eee] md:zb-border-none">
                    <ljs-render layout="container" class="zb-flex-shrink-0 zb-w-[66px] zb-mr-4 rtl:zb-ml-4 rtl:zb-mr-0 zb-h-[70px] md:zb-hidden" id="smart_recommend_product_image" manual=""
                      template="smart_recommend_product_image_template"></ljs-render>
                    <div class="zb-w-full">
                      <div class="zb-line-clamp-2 zb-mb-2 zb-text-sm md:zb-text-base">${product.title}</div>
                      <div class="zb-flex zb-justify-between zb-items-center">
                        <spz-render layout="container" template="smart_recommend_price_template" id="smart_recommend_modal_price" manual="">
                          <div class="zb-flex zb-items-center">
                            <ljs-currency class="zb-font-semibold zb-text-[22px] zb-text-[#CD201A] zb-mr-2" layout="container" value="${product.min_price_variant.price}"></ljs-currency>
                            <ljs-currency class="zb-text-[#93989D] zb-text-xs zb-line-through" layout="container" value="${product.min_price_variant.compare_at_price}"
                              spz-if="${product.min_price_variant.compare_at_price > product.min_price_variant.price ? true : false}"></ljs-currency>
                          </div>
                        </spz-render>
                        <a class="zb-flex zb-items-center zb-cursor-pointer zb-text-[#212B36] zb-no-underline" href="${product.url}?${toQuery({ aid: 'smart_recommend.' + data.show_type + '.' + data.rule_id, ifb: product.ifb || '', cfb: product.cfb || '', scm: data.scm || '', ssp: data.ssp || '' })}">
                          <span class="zb-text-[13px]">See detail</span>
                          <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"><path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="#93989D"></path></svg>
                        </a>
                      </div>
                    </div>
                  </div>
                  <ljs-variants id="smart_recommend_product_variants" layout="container" template="smart_recommend_product_variant_template" slide="smart_recommend_carousel" disabled-dj-event="" interference="">
                  </ljs-variants>
                  <div class="zb-text-sm zb-mb-2">Quantity</div>
                  <ljs-quantity disabled-dj-event="" layout="fixed" width="150" height="52" min="1" max="999999" value="1" input-class="!zb-text-base" icon-class="!zb-p-3"></ljs-quantity>
                </div>
                <div class="zb-absolute zb-bottom-0 zb-flex md:zb-flex-col zb-w-full zb-bg-white">
                  <button class="zb-flex zb-items-center zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 md:zb-mb-2 zb-justify-center zb-cursor-pointer zb-w-full zb-border zb-border-solid zb-border-[#313131] zb-bg-white zb-rounded zb-h-[42px]" role="addToCart"
                    type="button" @tap="smart_recommend_func.addATCHook(rule_id='${data.rule_id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');">
                    <span>Add To Cart</span>
                  </button>
                  <button class="zb-flex zb-items-center zb-justify-center zb-cursor-pointer zb-w-full zb-bg-[#292929] zb-text-white zb-rounded zb-h-[42px] zb-border-none" type="button" role="buyNow"
                    @tap="smart_recommend_loading.showLoading;smart_recommend_func.addATCHook(rule_id='${data.rule_id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');">
                    <span>Buy Now</span>
                  </button>
                </div>
              </form>
            </ljs-product-form>
          </div>
        </div>
      </ljs-lightbox>`; })()} </template>
    <template id="smart_recommend_product_variant_template">
      <div class="zb-flex zb-flex-col zb-py-3 zb-gap-6 zb-text-sm zb-mb-6 md:zb-mb-3"> ${(function(){ const product = data.product; const avail_variants = product.variants.filter(function(variant){ return variant.available; }); const selected_variant
        = product.min_price_variant.available ? product.min_price_variant : avail_variants.length &amp;&amp; avail_variants[0]; return ` <fieldset spz-for="(option, optionIndex) in product.options" key="option.name" name="${option.name}"
          class="zb-border-none zb-p-0">
          <legend class="zb-text-sm zb-mb-1">${option.name}</legend>
          <div class="zb-flex zb-items-center zb-flex-wrap"> ${ option.values.map(function(value, index){ const checked = selected_variant["option"+option.position] == value ? "checked": ""; return ` <div
              class="smart_recommend_product__option_value">
              <input type="radio" class="zb-hidden" id="smart_recommend_${product.id}_${optionIndex}_${index}" name="smart_recommend_${product.id}_${optionIndex}" value="${value}" option="${value}" form="smart_recommend_product_form_${product.id}"
                ${checked}="">
              <label for="smart_recommend_${product.id}_${optionIndex}_${index}"> ${value} </label>
            </div> ` }).join("") } </div>
        </fieldset> ` })()} </div>
    </template>
    <ljs-loading layout="nodisplay" hidden="" id="smart_recommend_loading"></ljs-loading>
    <ljs-toast id="smart_recommend_toast" layout="nodisplay" hidden=""></ljs-toast>
  </div>
  <div class="plugin__buy_on_others empty:tw-hidden"></div>
</form>

<form class="zb-flex zb-flex-col zb-relative zb-w-full">
  <div class="zb-overflow-y-auto zb-pb-[100px]">
    <div class="zb-flex zb-items-center zb-pb-4 zb-border-b zb-border-t-0 zb-border-l-0 zb-border-r-0 zb-border-solid zb-border-[#eee] md:zb-border-none">
      <ljs-render layout="container" class="zb-flex-shrink-0 zb-w-[66px] zb-mr-4 rtl:zb-ml-4 rtl:zb-mr-0 zb-h-[70px] md:zb-hidden" id="smart_recommend_product_image" manual="" template="smart_recommend_product_image_template"></ljs-render>
      <div class="zb-w-full">
        <div class="zb-line-clamp-2 zb-mb-2 zb-text-sm md:zb-text-base">${product.title}</div>
        <div class="zb-flex zb-justify-between zb-items-center">
          <spz-render layout="container" template="smart_recommend_price_template" id="smart_recommend_modal_price" manual="">
            <div class="zb-flex zb-items-center">
              <ljs-currency class="zb-font-semibold zb-text-[22px] zb-text-[#CD201A] zb-mr-2" layout="container" value="${product.min_price_variant.price}"></ljs-currency>
              <ljs-currency class="zb-text-[#93989D] zb-text-xs zb-line-through" layout="container" value="${product.min_price_variant.compare_at_price}"
                spz-if="${product.min_price_variant.compare_at_price > product.min_price_variant.price ? true : false}"></ljs-currency>
            </div>
          </spz-render>
          <a class="zb-flex zb-items-center zb-cursor-pointer zb-text-[#212B36] zb-no-underline" href="${product.url}?${toQuery({ aid: 'smart_recommend.' + data.show_type + '.' + data.rule_id, ifb: product.ifb || '', cfb: product.cfb || '', scm: data.scm || '', ssp: data.ssp || '' })}">
                          <span class="zb-text-[13px]">See detail</span>
                          <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"><path d="M13.1714 12.0007L8.22168 7.05093L9.63589 5.63672L15.9999 12.0007L9.63589 18.3646L8.22168 16.9504L13.1714 12.0007Z" fill="#93989D"></path></svg>
                        </a>
        </div>
      </div>
    </div>
    <ljs-variants id="smart_recommend_product_variants" layout="container" template="smart_recommend_product_variant_template" slide="smart_recommend_carousel" disabled-dj-event="" interference="">
    </ljs-variants>
    <div class="zb-text-sm zb-mb-2">Quantity</div>
    <ljs-quantity disabled-dj-event="" layout="fixed" width="150" height="52" min="1" max="999999" value="1" input-class="!zb-text-base" icon-class="!zb-p-3"></ljs-quantity>
  </div>
  <div class="zb-absolute zb-bottom-0 zb-flex md:zb-flex-col zb-w-full zb-bg-white">
    <button class="zb-flex zb-items-center zb-mr-2 rtl:zb-ml-2 rtl:zb-mr-0 md:zb-mb-2 zb-justify-center zb-cursor-pointer zb-w-full zb-border zb-border-solid zb-border-[#313131] zb-bg-white zb-rounded zb-h-[42px]" role="addToCart" type="button"
      @tap="smart_recommend_func.addATCHook(rule_id='${data.rule_id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');">
      <span>Add To Cart</span>
    </button>
    <button class="zb-flex zb-items-center zb-justify-center zb-cursor-pointer zb-w-full zb-bg-[#292929] zb-text-white zb-rounded zb-h-[42px] zb-border-none" type="button" role="buyNow"
      @tap="smart_recommend_loading.showLoading;smart_recommend_func.addATCHook(rule_id='${data.rule_id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${data.scm}',ssp='${data.ssp}',spmIndex='${data.productIndex}');">
      <span>Buy Now</span>
    </button>
  </div>
</form>

<form class="">
  <div class="zb-flex">
    <a href="${product.url}?${toQuery({ aid: 'smart_recommend.2.' + data.id, ifb: product.ifb || '', cfb: product.cfb || '', scm: product.scm || data.scm || '', ssp: data.ssp || '' })}" impr="1" imprevt="1" class="zb-w-[132px] zb-mr-4 rtl:zb-ml-4 rtl:zb-mr-0" data-prdct="${product.id}" data-ifb="${product.ifb || ''}" data-cfb="${product.cfb || ''}" data-scm="${product.scm || data.scm || ''}" data-spm="${productIndex}"> <ljs-render layout="container" id="smart_cart_pop_image_${product.id}" template="smart_cart_pop_image_template" manual=""></ljs-render> </a>
    <div class="zb-flex zb-flex-col zb-flex-grow zb-justify-between">
      <div>
        <div class="zb-line-clamp-2 zb-text-sm zb-mb-2">${product.title}</div> <ljs-render layout="container" id="smart_cart_pop_price_${product.id}" template="smart_cart_pop_price_template" manual=""></ljs-render>
      </div>
      <div>
        <div class="zb-relative zb-w-full zb-cursor-pointer">
          <div class="zb-border zb-border-solid zb-border-[#eee] zb-px-3 zb-py-[10px] zb-flex zb-items-center zb-justify-between zb-font-semibold zb-text-sm zb-rounded-sm"
            @tap="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);smart_cart_pop_variant_${product.id}_mobile.toggleClass(class=zb-hidden);smart_cart_pop_variant_${product.id}_pc.toggleClass(class=smart_cart_pop_variant_pc_show,force=true);smart_cart_pop_variant_modal_${product.id}.open"
            spz-if="${!!(product.options &amp;&amp; product.options.length &amp;&amp; product.options.length > 0) &amp;&amp; data.config.variant_select_visible}"> <ljs-render manual="" layout="container" id="smart_cart_pop_variant_text_${product.id}"
              template="smart_cart_pop_variant_text_template"></ljs-render> <svg id="smart_pop_variant-select-${product.id}" width="12" height="8" class="zb-ml-2" viewBox="0 0 12 8" fill="none" xmlns="http://www.w3.org/2000/svg">
              <path
                d="M6.00002 7.06738C6.19244 7.06775 6.38498 6.99453 6.5318 6.84772C6.54504 6.83447 6.55769 6.82086 6.56973 6.8069L11.1251 2.25152C11.418 1.95863 11.418 1.48375 11.1251 1.19086C10.8322 0.897968 10.3573 0.897968 10.0645 1.19086L6.00003 5.25529L1.9356 1.19086C1.64271 0.897968 1.16784 0.897968 0.874943 1.19086C0.58205 1.48375 0.58205 1.95863 0.874943 2.25152L5.43033 6.8069C5.44237 6.82086 5.45502 6.83447 5.46826 6.84772C5.61507 6.99453 5.8076 7.06775 6.00002 7.06738Z"
                fill="#0A1533"></path>
            </svg> </div> <ljs-lightbox layout="nodisplay" disable-unmount="" class="smart_cart_pop_lightbox_pc" id="smart_cart_pop_variant_modal_${product.id}" @close="smart_pop_variant-select-${product.id}.toggleClass(class=zb-rotate-180);">
            <div id="smart_cart_pop_variant_${product.id}_pc" class="zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
                class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template"
                onclick="event.stopPropagation()" disabled-dj-event="" interference=""> </ljs-variants></div>
          </ljs-lightbox>
        </div>
        <div class="zb-mt-3"> <button product-id="${product.id}" id="smart_cart_pop_atc_btn_${product.id}"
            class="zb-flex zb-items-center zb-justify-center zb-w-full zb-text-white zb-py-[10px] zb-h-9 zb-text-xs zb-font-normal zb-border-none zb-rounded-[4px] smart_cart_pop_atc_btn_bg" type="button" role="addToCart"
            @tap="smart_cart_pop_loading_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_${product.id}.toggleClass(class=zb-hidden);smart_cart_pop_atc_btn_${product.id}.toggleClass(class=zb-pointer-events-none);custom-func.addATCHook(activity_id='${data.id}',ifb='${product.ifb}',cfb='${product.cfb}',scm='${product.scm || data.scm}',ssp='${data.ssp}',spm='${data.spmBase}.${productIndex}')">
            <ljs-render layout="container" id="smart_cart_pop_atc_${product.id}" template="smart_cart_pop_atc_template" mamual="" class="notranslate"> </ljs-render>
            <div id="smart_cart_pop_added_${product.id}" class="zb-hidden"><span class="zb-flex zb-justify-center zb-gap-1"><svg width="14" height="15" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
                  <path
                    d="M8 16.5006C3.58171 16.5006 0 12.9183 0 8.5C0 4.08171 3.58171 0.5 8 0.5C12.4183 0.5 16 4.08171 16 8.5C16 12.9183 12.4183 16.5006 8 16.5006ZM8 2.04344C4.21314 2.04344 1.54287 4.71371 1.54287 8.50057C1.54287 12.2874 4.21314 14.9577 8 14.9577C11.7869 14.9577 14.4571 12.2874 14.4571 8.50057C14.4571 4.71371 11.7869 2.04344 8 2.04344ZM7.26057 11.1909L7.12229 11.3286L7.09543 11.3017C7.02286 11.336 6.94286 11.3577 6.85714 11.3577C6.73543 11.3577 6.62857 11.3109 6.536 11.2463L6.52229 11.2594L6.45371 11.1909C6.45314 11.1903 6.45314 11.1903 6.45257 11.1897L4.09771 8.83486L4.90629 8.02686L6.85714 9.97771L11.1629 5.67143L11.9714 6.48L7.26171 11.1897C7.26114 11.1903 7.26114 11.1903 7.26057 11.1909Z"
                    fill="white"></path>
                </svg>Added</span></div>
            <div id="smart_cart_pop_loading_${product.id}" class="zb-hidden">
              <div class="smart_cart_pop_loading"></div>
            </div>
          </button> </div>
      </div>
    </div>
  </div>
  <div id="smart_cart_pop_variant_${product.id}_mobile" class="zb-hidden md:zb-hidden"><ljs-variants id="smart_cart_pop_variants_${product.id}"
      class="md:!zb-absolute md:zb-top-[50px] md:zb-w-full md:zb-left-0 md:zb-z-30 md:zb-bg-white zb-max-h-[280px] zb-overflow-y-auto md:zb-shadow-pop" layout="container" template="smart_cart_pop_variant_template" onclick="event.stopPropagation()"
      disabled-dj-event="" interference=""> </ljs-variants></div>
</form>

Text Content

 * Free Shipping Over USD $50

 * 

 * 🔔GET HOLIDAY READY!

 * Free Shipping Over USD $50

 * 

 * 🔔GET HOLIDAY READY!

 * Home
 * 🌔Art Moon Phase
 * 🎄Christmas 2024
 * 💐Custom Mama's Garden
 * 🏈Game Day 2024
 * Puff | Print
 * Embroidery
 * More links
   🎄Christmas 2024 💐Custom Mama's Garden 🏈Game Day 2024 Puff | Print
   Embroidery



 * Log in
 * Create an account

0


 * Home
 * 🌔Art Moon Phase
 * 🎄Christmas 2024
 * 💐Custom Mama's Garden
 * 🏈Game Day 2024
 * Puff | Print
 * Embroidery
 * Log in
 * Create an account
   
   
   





CUSTOM MAMA CHRISTMAS SWEATSHIRT WITH KIDS NAMES ON SLEEVE

(4)View

Price

€53.95 €34.95
Save €19.00
912 sold
COUPON
20% off
15% off
10% off
COUPON

Buy 4+ items get 20% OFF

GET CL20 CL20
Copy code
Buy 3+ items get 15% OFF

GET CL15 CL15
Copy code
Buy 2+ items get 10% OFF

GET CL10 CL10
Copy code
Close



style

Sweatshirt
Hoodie
Please select a style

size

XS
S
M
L
XL
2XL
Please select a size

choose design - MAMA


Please select a choose design
Cloth Color

:






Select the Number of Names ( Left sleeve)

:
-Please Choose-
-No selection-No.Thanks1 name2 names3 names4 names





Select the Number of Names ( Right sleeve)

:
-Please Choose-
-No selection-No.Thanks1 name2 names3 names4 names





Quantity


Add to cart - €34.95 Buy it now

Free Shipping On Orders Over USD 50.00
100,000+ Purchased Customers
Secure Payments
${function(){ const rules = data.data.rules; return `

` }()}
Frequently Bought Together
 * Custom Christmas Mama Sweatshirt With Kids Names
   
   Quick Shop
 * Custom Christmas Mama Daddy With Kids Name Sweatshirt
   
   Quick Shop
 * Custom A little Who Is Due Christmas Sweatshirt
   
   Quick Shop
 * Custom Christmas Mama Sweatshirt With Names
   
   Quick Shop
 * Custom Christmas Mama Daddy Sweatshirt
   
   Quick Shop
 * Merry Puff Design Sweatshirt Christmas Gift Idea
   
   Quick Shop
 * Christmas Embroidered Festive Sweatshirt
   
   Quick Shop
 * Custom Embroidered Vintage Let It Snow Christmas Sweatshirt
   
   Quick Shop
 * Custom Christmas Nurse And Teacher Sweatshirt
   
   Quick Shop



${function(){ const isCart = data.data.isCart; const isCollection =
data.data.isCollection; const isProduct = data.data.isProduct; const isIndex =
data.data.isIndex; return `
${isCart ? 'The items in the shopping cart do not participate in any
recommendation rule. Add the participating items to your shopping cart to check
the design.' : ''} ${isProduct ? 'This product did not participated in any
recommendation rule. Switch to another product to check the design.' : ''}
${isCollection ? 'The items in this collection do not participate in any
recommendation rule. Switch the participating items to check the design.' : ''}
${isIndex ? 'The home page do not participate in any recommendation rule.' : ''}
(This prompt would not display on client-side)
Recommended Products
` }()} ${function(){ const rule = data.data; const getImageHeight =
function(image){ const image_size = rule.config.image_size || 0; const
imageWidth = image.width || 600; const imageHeight = image.height || 800; let
ratio = 0; if(image_size == 0){ ratio = (imageHeight / imageWidth).toFixed(2);
}else if(image_size == 1){ ratio = 1.5; }else if(image_size == 2){ ratio = 1;
}else if(image_size == 3){ ratio = 0.75; } return imageWidth * ratio; }; const
toQuery = obj => Object.keys(obj) .map(k => Array.isArray(obj[k]) ? obj[k].map(v
=> `${k}[]=${encodeURIComponent(v)}`).join('&') :
`${k}=${encodeURIComponent(obj[k])}` ) .join('&'); return `
${rule.config.title}
 * ${product.title}
   
   ${rule.config.quick_shop_button_text}



` }()}


class SpzSmartBlockComponent extends SPZ.BaseElement { constructor(element) {
super(element); this.templates_ = null; this.container_ = null; this.i18n_ = {};
this.config_ = {}; this.show_type_ = 3; this.product_resource_id_ = '';
this.collection_resource_id_ = ''; this.cart_items_ = []; this.customer_id_ =
''; this.order_id_ = ''; } static deferredMount() { return false; }
isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; }
buildCallback() { const template_type =
window.SHOPLAZZA.meta.page.template_type; if (template_type === 1) {
this.show_type_ = 3; this.product_resource_id_ =
window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 2) {
this.show_type_ = 4; this.collection_resource_id_ =
window.SHOPLAZZA.meta.page.resource_id; } else if (template_type === 15){
this.show_type_ = 5; } else if (template_type === 13){ this.show_type_ = 6; }
else if (template_type === 20){ this.show_type_ = 7; this.customer_id_ =
window.SHOPLAZZA.customer.customer_id; } else if (template_type === 35){
this.show_type_ = 8; this.order_id_ = window.location.pathname.split('/').pop();
} this.templates_ = SPZServices.templatesForDoc(this.element);
this.setAction_(); } mountCallback() { console.log('smart mounted'); const that
= this; const themeName = window.SHOPLAZZA.theme.merchant_theme_name; const
isGeek = /Geek/.test(themeName); this.fetchRules().then((res) => { if (res &&
res.rules && res.rules.length) { const blockEl =
document.getElementById('smart_recommend_block');
SPZ.whenApiDefined(blockEl).then((api) => { api.render({data: res},
true).then(() => { if (isGeek && that.show_type_ === 6) {
blockEl.querySelector('.plugin_container_wrpper').style.padding = '30px 0'; }
const recommendStyle = document.createElement('style'); recommendStyle.innerHTML
= ` .plugin__recommend_container,.app-recommend-card { display: none !important;
} `; document.head.appendChild(recommendStyle); const fetchList = [];
res.rules.forEach((rule) => {
fetchList.push(this.fetchRuleProductList(rule.id)); }); const fetchAll =
Promise.all(fetchList); fetchAll.then((p_res) => { res.rules.forEach((rule,
index) => { rule.products = p_res[index] && p_res[index].products; const ruleEl
= document.getElementById('smart_recommend_rule_' + rule.id);
SPZ.whenApiDefined(ruleEl).then((api) => { api.render({data: rule},
true).then(() => { that.impressListen(`#smart_recommend_rule_ul_${rule.id}`,
function(){ that.trackRuleImpress(rule); }); const btnElList =
document.querySelectorAll(`#smart_recommend_rule_ul_${rule.id} button`);
btnElList.forEach((btnEl) => { if (btnEl && rule.config &&
rule.config.quick_shop_button_bg_color &&
rule.config.quick_shop_button_text_color) { btnEl.style.backgroundColor =
rule.config.quick_shop_button_bg_color; btnEl.style.color =
rule.config.quick_shop_button_text_color; } }) }); }); }); }); }) }) } else { if
(window.top !== window.self) { const template_type =
window.SHOPLAZZA.meta.page.template_type; const holderEl =
document.getElementById('smart_recommend_preview_no_data_placeholder');
SPZ.whenApiDefined(holderEl).then((api) => { api.render({data: { isCart:
template_type === 13, isCollection: template_type === 2, isProduct:
template_type === 1, isIndex: template_type === 15 }}, true); }); } } }); }
setAction_() { this.registerAction('quickShop', (data) => { const that = this;
const product_id = data.args.product_id; const productIndex =
data.args.productIndex; const rule_id = data.args.rule_id; const ssp =
data.args.ssp; const scm = data.args.scm; const cfb = data.args.cfb; const ifb =
data.args.ifb; const modalRender =
document.getElementById('smart_recommend_product_modal_render'); if (product_id)
{ this.fetchProductData(product_id).then((res) => { const product = res.products
&& res.products.length && res.products[0] || {}; product.cfb = cfb; product.ifb
= ifb; SPZ.whenApiDefined(modalRender).then((api) => { api.render({product:
product, productIndex: productIndex, rule_id: rule_id, ssp: ssp, scm: scm,
show_type: that.show_type_}, true).then(() => { const modalEl =
document.getElementById('smart_recommend_product_modal');
SPZ.whenApiDefined(modalEl).then((modal) => {
that.impressListen('#smart_recommend_product_modal', function(){
that.trackQuickShop({ rule_id: rule_id, product_id: product_id }); });
modal.open(); }); const formEl =
document.getElementById('smart_recommend_product_form');
SPZ.whenApiDefined(formEl).then((form) => { form.setProduct(product); }); const
variantEl = document.getElementById('smart_recommend_product_variants');
SPZ.whenApiDefined(variantEl).then((variant) => { variant.handleRender(product);
}); }); }) }); } }); this.registerAction('handleScroll', (data) => {
this.directTo(data.args.rule_id, data.args.direction); });
this.registerAction('handleProductChange', (data) => { const variant =
data.args.data.variant; const product = data.args.data.product; const
imageRenderEl = document.getElementById('smart_recommend_product_image');
SPZ.whenApiDefined(imageRenderEl).then((api) => { api.render({ variant: variant,
product: product }, true); }); }); this.registerAction('handleAtcSuccess',
(detail) => { const data = detail.args; data.data.product = data.data.product ||
{}; data.data.variant = data.data.variant || {}; const product_id =
data.data.product.id; const product_title = data.data.product.title; const
variant_id = data.data.variant.id; const price = data.data.variant.price; const
rule_id = data.rule_id; const aid =
`smart_recommend.${this.show_type_}.${rule_id}`; const ifb =
data.data.product.ifb; const cfb = data.data.product.cfb; const ssp = data.ssp;
const scm = data.scm; const spm =
`smart_recommend_${this.show_type_}.${data.spmIndex}`; const params = { id:
product_id, product_id: product_id, number: 1, name: product_title, variant_id:
variant_id, childrenId: variant_id, item_price: price, source: 'add_to_cart',
_extra: { aid: aid, ifb: ifb, cfb: cfb, scm: scm, spm:
`..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, ssp: ssp, } };
this.tranckAddToCart(params); }); this.registerAction('addATCHook', (data) => {
const params = data.args; const spm =
`smart_recommend_${this.show_type_}.${params.spmIndex}`; this.myInterceptor_ =
window.djInterceptors && window.djInterceptors.track.use({ event:
'dj.addToCart', params: { aid: `smart_recommend.${this.show_type_}.` +
params.rule_id, ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm:
`..${window.SHOPLAZZA.meta.page.template_name}.${spm}`, }, once: true }); }); }
tranckAddToCart(detail) { if (window.$) {
window.$(document.body).trigger('dj.addToCart', detail); } } fetchRules() {
const payload = { show_type: this.show_type_, }; let that = this; if
(this.show_type_ === 6) { let line_items = []; return
this.fetchCart().then((res) => { if (res && res.cart && res.cart.line_items) {
line_items = res.cart.line_items.map((item) => { return { product_id:
item.product_id, variant_id: item.variant_id, quantity: item.quantity, price:
item.price } }); } payload.line_items = line_items; that.cart_items_ =
line_items; return that.fetchRulesRequest(payload); }); } else { if
(this.show_type_ === 3) { payload.line_items = [{ product_id:
this.product_resource_id_ }]; } else if (this.show_type_ === 4) {
payload.collection_id = this.collection_resource_id_; } else if (this.show_type_
=== 7) { payload.customer_id = this.customer_id_; } else if (this.show_type_ ===
8) { payload.order_id = this.order_id_; } return
this.fetchRulesRequest(payload); } } fetchRulesRequest(payload) { return
fetch(window.SHOPLAZZA.routes.root + "/api/possum/recommend_query", { method:
"POST", headers: { "Content-Type": "application/json" }, body:
JSON.stringify(payload) }).then(function(res){ if(res.ok){ return res.json(); }
}); } fetchCart() { return
fetch(`/api/cart/cart-select?r=${Math.random().toString(36).slice(-4)}`)
.then((res) => { if (res.ok) { return res.json(); } }); }
fetchRuleProductList(rule_id) { const payload = { page: 1, limit: 100, fields:
["title", "url", "image", "min_price_variant.price",
"min_price_variant.compare_at_price"], rule_id: rule_id, }; if (this.show_type_
=== 3) { payload.line_items = [{ product_id: this.product_resource_id_ }]; }
else if (this.show_type_ === 4) { payload.collection_id =
this.collection_resource_id_; } else if (this.show_type_ === 6) {
payload.line_items = this.cart_items_; } else if (this.show_type_ === 7) {
payload.customer_id = this.customer_id_; } else if (this.show_type_ === 8) {
payload.order_id = this.order_id_; } return fetch(window.SHOPLAZZA.routes.root +
"/api/possum/recommend_products", { method: "POST", headers: { "Content-Type":
"application/json" }, body: JSON.stringify(payload) }).then(function(res){
if(res.ok){ return res.json(); } }).catch(function(err){ console.log(err); }); }
fetchProductData(product_id) { return fetch(window.SHOPLAZZA.routes.root +
"/api/possum/products", { method: "POST", headers: { "Content-Type":
"application/json" }, body: JSON.stringify({ product_ids: [product_id], fields:
[ "images", "options", "min_price_variant", "variants"] })
}).then(function(res){ if(res.ok){ return res.json(); } }).catch(function(err){
console.log(err); const loadingEl =
document.getElementById('smart_recommend_loading'); if (loadingEl) {
loadingEl.style.display = 'none'; } }); } getStyle(ele, style) { if (!ele)
return; if (window.getComputedStyle) { return
window.getComputedStyle(ele)[style]; } return ele.currentStyle[style]; }
directTo(id, direction) { const scrollElement =
document.getElementById(`smart_recommend_rule_ul_${id}`); const blockWidth =
parseInt(this.getStyle(scrollElement, 'width')); const scrollLength =
(blockWidth * 0.19 - 12) * 5; const scrollPoint = scrollElement.scrollWidth -
scrollElement.clientWidth; if (!scrollElement) return; if (direction === 'left')
{ if (document.dir === 'rtl') { scrollElement.scrollTo({ left:
Math.abs(scrollElement.scrollLeft) >= scrollPoint - 100 ? 0 :
scrollElement.scrollLeft - scrollLength, behavior: 'smooth' }); return; }
scrollElement.scrollTo({ left: Math.max(scrollElement.scrollLeft - scrollLength,
0), behavior: 'smooth' }); } else { if (document.dir === 'rtl') {
scrollElement.scrollTo({ left: Math.abs(scrollElement.scrollLeft) >= scrollPoint
+ 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' });
return; } scrollElement.scrollTo({ left: scrollElement.scrollLeft >= scrollPoint
- 100 ? 0 : scrollElement.scrollLeft + scrollLength, behavior: 'smooth' }); } }
trackRuleImpress(rule) { if (window.sa && window.sa.track) {
window.sa.track("plugin_common", { plugin_name: "upsell", event_type:
"impressions", rule_id: rule.id, ssp: rule.ssp, scm: rule.scm, show_type:
this.show_type_, support_app_block: window.SHOPLAZZA.theme.support_app_block });
window.sa.track("module_impressions", { aid:
`smart_recommend.${this.show_type_}.${rule.id}`, support_app_block:
window.SHOPLAZZA.theme.support_app_block }); } } trackQuickShop(data) {
window.sa && sa.track && sa.track("plugin_common", { plugin_name: "upsell",
event_type: "quick_shop", rule_id: data.rule_id, product_id: data.product_id,
show_type: this.show_type_, }); } impressListen(selector, cb) { const el =
document.querySelector(selector); const onImpress = (e) => { if (e) {
e.stopPropagation(); } cb(); }; if (el && !el.getAttribute('imprsd')) {
el.addEventListener('impress', onImpress) } else if (el) { onImpress(); } } }
SPZ.defineElement('spz-custom-smart-block', SpzSmartBlockComponent);
${(function(){ const product = data.product; const toQuery = obj =>
Object.keys(obj) .map(k => Array.isArray(obj[k]) ? obj[k].map(v =>
`${k}[]=${encodeURIComponent(v)}`).join('&') :
`${k}=${encodeURIComponent(obj[k])}` ) .join('&'); return `
${product.images.map((image) => { return `` }).join('')}

${product.title}

See detail
Quantity
Add To Cart Buy Now
`; })()}
${(function(){ const product = data.product; const avail_variants =
product.variants.filter(function(variant){ return variant.available; }); const
selected_variant = product.min_price_variant.available ?
product.min_price_variant : avail_variants.length && avail_variants[0]; return `
${option.name}
${ option.values.map(function(value, index){ const checked =
selected_variant["option"+option.position] == value ? "checked": ""; return `
${value}
` }).join("") }
` })()}


Description

Get festive and fun with our Custom Mama Christmas Sweatshirt! Perfect for moms
who love the holidays with a mischievous twist, this sweatshirt features a
playful design in the center and is personalized with your kids' names printed
along the sleeve. It’s the perfect way to celebrate the season while keeping
your family close, even on your clothing! 



Material Details:

Sweatshirt&Hoodie:59% cotton, 41% polyester blend

Size Chart (Unisex):

As a global retailer, we design our products to accommodate various body types,

which is why you may notice two size labels on your T-shirt/Sweatshirt.








Note:When certain clothing colors are out of stock, we will use garments from
other brands to ensure your order is shipped promptly.

*To ensure timely delivery, modifications are accepted within 24 hours of
placing your order.

 All of our sweatshirts are made to order, specifically for you, so we do NOT
accept returns, cancellations, or exchanges. PLEASE make sure all sizing and
shipping information is correct before placing the order. We are not responsible
for incorrect addresses. In case of missing or damaged items in your package,
please keep the outer packaging for verification purposes.ended.



CUSTOMER REVIEWS

5/5
(4)

Based on 4 reviews

(4)
(0)
(0)
(0)
(0)
Write a Review
Reviews(4) With Photos(3)
Sort by:  Most Recent
 * Most Recent
 * Highest Rating
 * Most helpful

 * A
   Abby Melton
   
   
   The end product is soooo cute!!! The item 100% matched the description and
   the personalized names on the arm was such a cute touch. Absolutely love
   it!❤️
   
   * 
   9/19/2024 Was this review helpful? 13
 * K
   Kellie Fletcher
   
   
   This shirt is perfect. Fast shipping and amazing quality.
   
   * 
   9/4/2024 Was this review helpful? 1
 * R
   Rebecca Golden
   
   
   The seller was accommodating and caring through the whole process! LOVE my
   grinch sweatshirt.
   
   9/4/2024 Was this review helpful? 1
 * L
   Lindsey
   
   
   My mom is a HUGE grinch fan, so this gift was perfect for her. She said he
   favorite part is the sleeve
   
   * 
   7/17/2024 Was this review helpful? 4

1


CONTACT US
contact@customlikes.com




FOLLOW US

COMPANY INFO
 * About Us
 * Contact Us
 * Size Guide

HELP CENTER
 * Track Order
 * Shipping Policy
 * Return Policy
 * Privacy Policy
 * Terms & Conditions
 * INTELLECTUAL PROPERTY RIGHTS

WE ACCEPT
American Express Apple Pay PayPal Visa Maestro JCB Diners Club Discover

© 2024 Customlikes 
About Us
Contact Us
Size Guide


SIGN UP AND SAVE

Entice customers to sign up for your mailing list with discounts or exclusive
offers. Include an image for extra impact.
SUBSCRIBE
Thanks for subscribing
No Thanks




111
GIFTS

POINTS



Item has been added
${(function(){ const products = data.products; const getDefaultVariant =
function(product){ if (product.min_price_variant.available){ return
product.min_price_variant; }else { const avail_variants =
product.variants.filter(function(variant){ return variant.available; }); if
(avail_variants.length) { return avail_variants[0]; } } }; const toQuery = obj
=> Object.keys(obj) .map(k => Array.isArray(obj[k]) ? obj[k].map(v =>
`${k}[]=${encodeURIComponent(v)}`).join('&') :
`${k}=${encodeURIComponent(obj[k])}` ) .join('&'); const getDefaultTrackParams =
function(product, index){ const variant = getDefaultVariant(product); const
params = { aid: 'smart_recommend.2.' + data.id, scm: product.scm || data.scm ||
'', spm: data.spmBase + '.' + index, ssp: data.ssp || '', }; const trackParams =
Object.keys(params).map(function(key){ return params[key]; }).join('__'); return
trackParams; }; const hasMore = (data.products.length -
data.target_top_product_num - data.page * data.limit) === 0; return `
${(function(){ return `
${data.config.pop_title}

${data.rebate_tips || ''}
`; })()}
${product.title}
Added




`; })()}

class SpzCustomComponent extends SPZ.BaseElement { constructor(element) {
super(element); this.templates_ = null; this.container_ = null;
this._atcLineItem = {}; this.cart_ = {}; this.top_product_ids_ = [];
this.products_ = []; this.activityId_ = null; this.rendered_ = false;
this.myInterceptor_ = null; this.i18n_ = {}; this.config_ = {}; this.page_ = 1;
this.limit_ = 10; this.loading_ = false; } static deferredMount() { return
false; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER;
} buildCallback() { this.templates_ = SPZServices.templatesForDoc(this.element);
this.setAction_(); } mountCallback() { console.log('pop mounted'); this.i18n_ =
window.smartRecommendI18n &&
window.smartRecommendI18n[document.documentElement.lang || 'en-US'] || {}; const
cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const
modalEl = document.getElementById("smart_cart_pop_modal"); const spmBase =
`smart_recommend_2`; const extra = { spmBase: spmBase, i18n: this.i18n_, };
const that = this; document.addEventListener('dj.addToCart', (event) => { try {
const e = event.detail; if (e.source === 'buy_now' || window.__upsell_block ||
this.rendered_) return; that.fetchActivityData({product_id: e.product_id,
variant_id: e.variant_id}).then(data => { if (!data || !data.products ||
!data.products.length) return; that.config_ = data.config; const recommendStyle
= document.createElement('style'); recommendStyle.innerHTML = `
#plugin_recommend_atc_pop { display: none !important; } `;
document.head.appendChild(recommendStyle); if (data.config.pop_frequency ===
'once' && window.sessionStorage.getItem('smart_pop_times') > 0) return;
SPZ.whenApiDefined(cartPopRenderEl).then(function(api){
api.render(Object.assign({}, data, extra), true).then(function() {
that.rendered_ = true; if (data.products.length) { const headEl =
document.getElementById("smart_cart_pop_head_render"); if (headEl) {
SPZ.whenApiDefined(headEl).then(function(head){ head.render({ data: data }); });
} SPZ.whenApiDefined(modalEl).then(function(api){
that.impressListen('#smart_cart_pop_activity', function(){
that.trackPluginImpression_(data); }); api.open(); const intersectionObserver =
new IntersectionObserver( function (entries) { if (entries[0].intersectionRatio
> 0){ !that.loading_ && (that.products_.length - that.target_top_product_num_)
=== that.page_ * that.limit_ && that.viewMore(); } }, { threshold: [0.1] } );
intersectionObserver.observe(
document.querySelector('#smart_cart_pop_view_more_text') ); }); } }) }); }) }
catch (e) { console.error(e); } }); } unmountCallback() { } viewMore () { const
cartPopRenderEl = document.getElementById("smart_cart_pop_render"); const that =
this; const data = {}; SPZ.whenApiDefined(cartPopRenderEl).then(function(api){
that.fetchActivityData({ page: that.page_ + 1, limit: that.limit_
}).then(function(data) { data.products = that.products_;
data.target_top_product_num = that.target_top_product_num_; data.i18n =
that.i18n_; data.spmBase = `smart_recommend_2`; api.render(data); }) }) }
fetchActivityData(data) { const that = this; if (data.product_id) {
that._atcLineItem = data; } that.loading_ = true; return
that.getCart().then(cart => { that.cart_ = cart.cart; return
fetch(window.C_SETTINGS.routes.root + "/api/possum/recommend_activities", {
method: "POST", headers: { "Content-Type": "application/json", "store-id":
window.C_SETTINGS.shop.shop_id, }, body: JSON.stringify({ "show_type": 2,
"line_item": { "product_id": that._atcLineItem.product_id, "variant_id":
that._atcLineItem.variant_id, }, line_items: cart.cart.line_items, "page":
data.page || 1, "limit": data.limit || 10, }) }).then(function(res){ if(res.ok){
return res.json(); } }).then(function(data){ data.cart = cart.cart; if
(data.page === 1) { that.target_top_product_num_ = data.target_top_product_num
|| 0; } that.products_ = that.products_.concat(data.products || []); that.page_
= data.page || 1; that.limit_ = data.limit || 10; return data;
}).catch(function(e){ console.log(e); }).finally(function(){ that.loading_ =
false; }) }); }; setAction_() { this.registerAction('changeBannerColor', (data)
=> { if (!data.args.data || !data.args.data.data || !data.args.data.data.data)
return false; const config = data.args.data.data.data.config; const bannerBgEl =
document.querySelector('.smart_cart_pop_banner_bg'); if (bannerBgEl && config) {
bannerBgEl.style.background = config.banner_bg_color; bannerBgEl.style.color =
config.banner_text_color; } }); this.registerAction('handleProductChange',
(data) => { const that = this; const imageEl =
document.getElementById(`smart_cart_pop_image_${data.args.data.product_id}`);
SPZ.whenApiDefined(imageEl).then(function(api){ api.render({ data:
data.args.data, config: that.config_ }); }); const atcTextEl =
document.getElementById(`smart_cart_pop_atc_${data.args.data.product_id}`);
SPZ.whenApiDefined(atcTextEl).then(function(api){ api.render({ data:
data.args.data, defaultText: data.args.defaultText, soldOutText:
that.i18n_.sold_out }); }); if (data.args.data.variant.available) {
document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.remove('zb-pointer-events-none');
} else {
document.getElementById(`smart_cart_pop_atc_btn_${data.args.data.product_id}`).classList.add('zb-pointer-events-none');
} }); this.registerAction('handleProduct', (detail) => { const that = this;
this.renderProductsForm_(detail.args.data.data); });
this.registerAction('addATCHook', (data) => { const params = data.args;
this.myInterceptor_ = window.djInterceptors && window.djInterceptors.track.use({
event: 'dj.addToCart', params: { aid: 'smart_recommend.2.' + params.activity_id,
ssp: params.ssp, scm: params.scm, cfb: params.cfb, spm:
`..${window.C_SETTINGS.meta.page.template_name}.${params.spm}`, }, once: true
}); }); this.registerAction('handleAtcSuccess', (detail) => {
detail.args.data.product = detail.args.data.product || {};
detail.args.data.variant = detail.args.data.variant || {}; const defParams =
detail.args.product.split('__'); const product_id = detail.args.data.product.id;
const product_title = detail.args.data.product.title; const variant_id =
detail.args.data.variant.id; const price = detail.args.data.variant.price; const
aid = defParams[0]; const ifb = detail.args.data.product.ifb; const cfb =
detail.args.data.product.cfb; const scm = defParams[1]; const spm =
defParams[2]; const ssp = defParams[3]; const params = { id: product_id,
product_id: product_id, number: 1, name: product_title, variant_id: variant_id,
childrenId: variant_id, item_price: price, source: 'add_to_cart', _extra: { aid:
aid, ifb: ifb, cfb: cfb, scm: scm, spm:
`..${window.C_SETTINGS.meta.page.template_name}.${spm}`, ssp: ssp, } }; const
activity_id = `${detail.args.activity_id}`; const target_drive_way =
detail.args.target_drive_way;
document.getElementById(`smart_cart_pop_loading_${product_id}`).classList.add('zb-hidden');
document.getElementById(`smart_cart_pop_added_${product_id}`).classList.remove('zb-hidden');
setTimeout(() => {
document.getElementById(`smart_cart_pop_added_${product_id}`).classList.add('zb-hidden');
document.getElementById(`smart_cart_pop_atc_${product_id}`).classList.remove('zb-hidden');
document.getElementById(`smart_cart_pop_atc_btn_${product_id}`).classList.remove('zb-pointer-events-none');
}, 1000); this.tranckAddToCart(params); if (target_drive_way === 'rebate') {
const bannerEl = document.getElementById(`smart_cart_pop_banner`);
this.getRecommendInfo(activity_id).then(res => { if (res && res.rebate_tips) {
bannerEl.innerHTML = res.rebate_tips; } }) } });
this.registerAction('handleCartSummary', (event) => { const that = this; const
checkoutButtonEle = document.getElementById("smart_cart_pop_checkout_button");
if (checkoutButtonEle) {
SPZ.whenApiDefined(checkoutButtonEle).then(function(api){ api.render({ i18n:
that.i18n_ }, false); }); } const tipEl =
document.getElementById("smart_cart_pop_tip_info"); const cart = event &&
event.args && event.args.data && event.args.data.data; if (!tipEl || !cart)
return; let total_price = cart.total_price; if (!total_price) {
SPZ.whenApiDefined(tipEl).then(function(api){ api.render({ total_price:
total_price, i18n: that.i18n_ }, false); }); } else {
this.getBindDiscount_(cart.line_items).then(res => { if (res &&
res.discount_code){ const total = cart.line_price - cart.total_discount -
res.bundle_discount_value; if (total > 0) { total_price = total; } else {
total_price = 0; } } SPZ.whenApiDefined(tipEl).then(function(api){ api.render({
total_price: total_price, i18n: that.i18n_ }, false); }); }) } });
this.registerAction('open', () => {
window.sessionStorage.setItem('smart_pop_times',
Number(window.sessionStorage.getItem('smart_pop_times')) + 1); });
this.registerAction('close', () => { this.rendered_ = false; this.products_ =
[]; window.djInterceptors &&
window.djInterceptors.track.eject(this.myInterceptor_); }); } getCart() { return
fetch(`${window.C_SETTINGS.routes.root || ''}/api/cart`, { method: 'GET',
headers: { 'Content-Type': 'application/json; charset=UTF-8', }, }).then(res =>
res.json()) } getRecommendInfo (activity_id) { return this.getCart().then(cart
=> { this.cart_ = cart.cart; return fetch(`${window.C_SETTINGS.routes.root ||
''}/api/possum/recommend_info`, { method: 'POST', headers: { 'Content-Type':
'application/json; charset=UTF-8', }, body: JSON.stringify({ show_type: 2,
rule_id: `${activity_id}`, line_items: cart.cart.line_items, line_item:
this._atcLineItem, }) }).then(res => res.json()) }) } renderProductsForm_(data)
{ const products = data.products; const listPopRenderEl =
document.getElementById("smart_cart_pop_render"); if (!listPopRenderEl) return;
listPopRenderEl.querySelectorAll('.smart_cart_pop_atc_btn_bg').forEach(function(el){
el.style.background = data.config.add_to_cart_button_color; });
products.forEach(function(product){ const productId = product.id; const
productFormEls =
listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"]`);
let variantsEl =
listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"]
#smart_cart_pop_variant_${productId}_mobile ljs-variants`); if
(window.innerWidth > 768) { variantsEl =
listPopRenderEl.querySelectorAll(`ljs-product-form[product-id="${productId}"]
#smart_cart_pop_variant_${productId}_pc ljs-variants`); }
productFormEls.forEach(function(el){ SPZ.whenApiDefined(el).then(function(api){
api.setProduct(product); }); }); variantsEl.forEach(function(el){
SPZ.whenApiDefined(el).then(function(api){ api.handleRender(product); }); }) });
} tranckAddToCart(detail) { if (window.$) {
window.$(document.body).trigger('dj.addToCart', detail); } }
trackPluginImpression_(rule){ if (window.sa && window.sa.track) {
window.sa.track("module_impressions", { aid: `smart_recommend.2.${rule.id}` });
} } getBindDiscount_(carts) { let bundle_sale_ids = []; try { bundle_sale_ids =
sessionStorage['bundle_sale_ids'] &&
JSON.parse(sessionStorage['bundle_sale_ids']).filter((item, index, arr) =>
arr.indexOf(item, 0) === index).slice(-5); } catch (err) { console.error(err); }
if (!carts.length) { Promise.resolve(); } return
fetch(`${window.C_SETTINGS.routes.root || ''}/api/bundle-sales/cart`, { method:
'POST', headers: { 'Content-Type': 'application/json; charset=UTF-8',
'store-id': window.C_SETTINGS.shop.shop_id, }, body: JSON.stringify({ cart:
carts, action_type: 'cart', bundle_sale_ids }) }).then(res => res.json()) }
impressListen(selector, cb) { const el = document.querySelector(selector); const
onImpress = (e) => { if (e) { e.stopPropagation(); } cb(); }; if (el &&
!el.getAttribute('imprsd')) { el.addEventListener('impress', onImpress) } else
if (el) { onImpress(); } } } SPZ.defineElement('spz-custom-smart',
SpzCustomComponent); ${function(){ return `
${data.data.rebate_tips || ''}
`; }()} ${function(){ const getImageHeight = function(image){ const width =
image.width || 500; const height = image.height || 500; const image_size =
data.config.image_size || 0; let ratio = 0; if(image_size == 0){ ratio = (height
/ width).toFixed(2); }else if(image_size == 1){ ratio = 1.5; } return 132 *
ratio; }; const image = data.data.variant.image || data.data.product.image;
return ` `; }()}
${(function(){ const product = data.product; const avail_variants =
product.variants.filter(function(variant){ return variant.available; }); const
selected_variant = product.min_price_variant.available ?
product.min_price_variant : avail_variants.length && avail_variants[0]; return `
${option.name}
${ option.values.map(function(value, index){ const checked =
selected_variant["option"+option.position] == value ? "checked": ""; return `
${value}
` }).join("") }
` })()}
${(function(){ const variant = data.variant; return `

`; })()} ${(function(){ const variant = data.variant; return `
${ variant.options.map(function(option){ return option.value; }).join("/") ||
'Not exist' }
`; })()} ${(function(){ const variant = data.data && data.data.variant; const
defaultText = data.defaultText || 'Add To Cart'; const text = (!variant ||
variant.available) ? defaultText: data.soldOutText; return `
${text}
`; })()} ${(function(){ let cart = data; if(data.data) { cart = data.data; }
return `
${cart.item_count >=0 ? cart.item_count : '..'}
`; })()} ${(function(){ return `
${data.i18n.checkout}
`; })()}
Success
Copy successfully, use at checkout