PageSourceSearch

https://smarthomecompared.com/js/home-defer.js?v=ee949321

js smarthomecompared.com collected 2026-10-02 10:54:40 UTC 294,920 bytes, 5 lines download raw bytes

1var I18N_LOCALE="en",I18N_MESSAGES={"about.authorJobTitleDefault":"Editor","about.authorLinks":"Find ${name} on ${links}.","about.authorPhotoAlt":"${name}, ${job} at ${site}","about.editorTitle":"About the Editor","about.heroEyebrow":"About Us","about.heroTitle":"About ${site}","amazonPrime.cta":"Try Prime free","amazonPrime.eyebrow":"Amazon Prime","amazonPrime.headline":"Shop ${event} with Prime","amazonPrime.headlineExclusive":"${event} prices are for Prime members","amazonPrime.logoAlt":"Amazon Prime","amazonPrime.siteHeadline":"Fast, free delivery with Prime","amazonPrime.siteText":"Prime members get fast, free delivery on millions of eligible products, plus deals reserved for members. New to Prime? Start with a free trial.","amazonPrime.text":"Prime members get fast, free delivery on millions of eligible products, so shipping never eats into the savings. New to Prime? Start with a free trial.","amazonPrime.textExclusive":"Amazon only charges ${event} prices to Prime members. New to Prime? A free trial is enough to get them.","amazonStore.cta":"Visit our Amazon store","amazonStore.kicker":"Amazon Storefront","amazonStore.title":"Shop our picks on Amazon","assistant.close":"Close","assistant.send":"Send","assistant.newChat":"New chat","assistant.previousChats":"Previous chats","assistant.noPreviousChats":"No previous chats yet.","assistant.back":"Back","assistant.deleteChats":"Delete chats","assistant.deleted":"Every chat was deleted from this browser.","assistant.helpful":"Helpful","assistant.notHelpful":"Not helpful","assistant.reportMistake":"Report a mistake","assistant.reported":"Thanks: noted.","assistant.noLongerListed":"This product is no longer listed.","assistant.looking.products":"Searching the catalog...","assistant.looking.compatibility":"Checking compatibility...","assistant.looking.comparison":"Comparing them...","assistant.looking.product":"Reading the product page...","assistant.looking.guides":"Reading the guides...","blog.compareCtaSubtitle":"Now that you know what to look for, put it to work: the table lists all ${plural} in the catalog, so you can filter by the specs this guide covers and sort by price or rating.","blog.metaDescriptionDefault":"Guides and best practices from ${site}.","blog.minutesRead":"${minutes} min read","blog.readArticle":"Read article","blog.siteBlogName":"${site} Blog","blog.tableOfContents":"Table of contents","blog.updatedStamp":"(updated ${date})","brands.aboutSectionAria":"About ${brand}","brands.aboutTheBrand":"About the brand","brands.allRegions":"All regions","brands.alsoCompareIn":"Also compare ${brand} in:","brands.amazonStore":"Amazon Store","brands.averageRating":"Average Rating","brands.avgRatingSuffix":"/ 5 avg rating","brands.blog":"Blog","brands.catalog":"Catalog","brands.catalogHeading":"${brand} products","brands.catalogIntro":"Browse ${brand} products, filter by category and tap through for full specs, compatibility and pricing.","brands.compareCtaButton":"Open the ${plural} comparison","brands.compareCtaSubtitle":"${brand} is one of ${count} brands in this category. The table lines them all up on the same specs, so you can see what you gain or give up by staying with one of them.","brands.compareCtaTitle":"Compare ${brand} ${plural} against every other brand","brands.compareHeading":"Compare ${brand} with other brands","brands.compareWithAnother":"Compare ${brand} with another brand","brands.detailMetaDescription":"Explore the best ${brand} products. See compatibility, prices, reviews, and more.","brands.detailMetaTitle":"Best ${brand} Products - Compatibility, Prices and Comparisons","brands.detailPageTitle":"${brand} - Brands","brands.factCategories":"{count, plural, one {category} other {categories}}","brands.factProducts":"{count, plural, one {product} other {products}}","brands.filterByCategory":"Filter by category","brands.headquarteredIn":"Headquartered in ${place}","brands.headquarters":"Headquarters","brands.headquartersGlobal":"Global","brands.heroPanelAria":"${brand} links","brands.mapCountryBrandsAria":"{count, plural, other {# brands}}","brands.mapEyebrow":"Global brand map","brands.mapTitle":"Global brand map","brands.mapTopLabel":"Top countries","brands.more
1Competitors":"{count, plural, one {# more brand that compete with ${brand}} other {# more brands that compete with ${brand}}}","brands.noun":"brands","brands.officialSite":"Official site","brands.pickBrandIntro":"Pick any brand to see the two side by side: ratings, origin and product range.","brands.pickBrandIntroWithCompetitors":"Pick any brand to see the two side by side (ratings, origin and product range). The cards below are the manufacturers ${brand} competes with most.","brands.profileEyebrow":"Brand profile","brands.profileTitle":"Brand Profile","brands.regionAfrica":"Africa","brands.regionAmericas":"Americas","brands.regionAsia":"Asia","brands.regionEurope":"Europe","brands.regionOceania":"Oceania","brands.searchPlaceholder":"Search brands...","brands.selectedFlagAlt":"Selected country flag","brands.sortAz":"A-Z","brands.sortLabel":"Sort brands","brands.sortRating":"Top rated","brands.viewBrand":"View brand","brands.visitOnStore":"Visit ${brand} on ${store}","brands.visitStore":"Visit Store","brands.website":"Website","brands.whereToBuy":"Where to buy","brandsVs.averageRating":"Average rating","brandsVs.breadcrumbBrands":"Brands","brandsVs.catalogs":"Catalogs","brandsVs.catalogsHeading":"Every product, compared","brandsVs.catalogsIntro":"Switch between each brand's full lineup, tap any product for specs, compatibility and pricing.","brandsVs.higherRated":"Higher rated","brandsVs.listConjunction":"and","brandsVs.metaUpdated":" Updated ${month}.","brandsVs.noRatingsYet":"No ratings yet","brandsVs.notAvailable":"N/A","brandsVs.profilesLabel":"Brand profiles","brandsVs.viewBrandNamed":"View ${brand}","chrome.close":"Close","chrome.closeModal":"Close modal","chrome.closeModalWindow":"Close modal window","chrome.footerNavLabel":"Footer","chrome.onThisPage":"On this page","chrome.searchButtonLabel":"Search","chrome.searchIconTitle":"Search","chrome.searchInputLabel":"Search","chrome.searchPlaceholder":"Search products, brands, categories\u2026","chrome.searchTitle":"Search","chrome.toggleMenu":"Toggle menu","chrome.viewAll":"View all","common.flagAlt":"${country} flag","common.logoAlt":"${name} logo","common.playVideo":"Play video: ${title}","common.ratingOutOfFive":"${rating} out of 5","common.updatedMonth":"Updated ${month}","compareCta.button":"Open the full comparison","compareCta.eyebrow":"Full comparison table","compareCta.filters":"filters","compareCta.specsCompared":"specs compared","consent.accept":"Accept","consent.message":"We use cookies to understand how visitors use the site. You can change your choice anytime from the footer.","consent.privacyLink":"Privacy policy","consent.regionLabel":"Cookie consent","consent.reject":"Reject","copy.aboutHeroSubtitle":"An independent reference site that helps people choose smart home devices through structured, side-by-side comparisons.","copy.aboutMetaDescription":"${websiteName} independently compares ${scope} with structured, side-by-side specs, prices and ratings.","copy.aboutMetaTitle":"About ${websiteName}: Our Testing and Ranking Method","copy.aboutOrgDescription":"${websiteName} is an independent reference site that helps people choose smart home devices through structured, side-by-side comparisons of ${scope}.","copy.aboutScopePhrase":"${items}+ smart home devices across ${brands} brands","copy.aboutScopePhraseNoBrands":"${items}+ smart home devices","copy.amazonStoreDescription":"Browse our curated smart home storefront on Amazon.","copy.appDescription":"Compare the best smart home devices: thermostats, cameras, doorbells, sensors, smoke & CO alarms and more.","copy.assistant.button":"Ask Chip","copy.assistant.title":"Chip","copy.assistant.subtitle":"Your smart home sidekick","copy.assistant.placeholder":"Ask Chip a question","copy.assistant.disclaimer":"Chip is an AI and can make mistakes.","copy.assistant.thinking":"Checking the catalog...","copy.assistant.sleeping":"Chip is recharging. Back tomorrow!","copy.assistant.tooMany":"Whoa, that's a lot of questions! Give me a few minutes to recharge.","copy.assistant.failed":"Oops, I got my wires crossed. Try again in a moment.","copy.assistant.greeting.default":"Hi, I'm Chip! What are we automating today?","copy.assistant.greeting.item":"Hi, I'm Chip! Curious about the ${product}? Ask me about compatibility, alternatives or how it stacks up.","copy.assistant.greeting.itemType":"Hi, I'm Chip! Shopping for ${items}? Tell me about your setup and I'll narrow it down.","copy.assistant.greeting.comparison":"Hi, I'm Chip! Can't pick between these two? Tell me your setup and I'll break the tie.","copy.bestSellersCategoryFaq1Answer":"The order is what people actually bought over the last 12 months: every purchase made through the site counts, on a rolling window that drops sales older than a year, so the ranking keeps up with the market instead of freezing all-time totals.","copy.bestSellersCategoryFaq1Question":"How 
1is this ranking built?","copy.bestSellersCategoryFaq2Answer":"It is rebuilt with every update of the site, and the 12-month window moves with it, so a product that starts selling more climbs the list on its own and one that stops selling drops out. The date at the top of the page is when its prices were last checked.","copy.bestSellersCategoryFaq2Question":"How often does it change?","copy.bestSellersCategoryFaq3Answer":"Prices, discounts and ratings come from each product's Amazon listing and are refreshed continuously, so every card shows live pricing and the latest customer feedback.","copy.bestSellersCategoryFaq3Question":"Where do the prices come from?","copy.bestSellersCategoryHeroEyebrow":"Best Sellers \xB7 Last 12 months","copy.bestSellersCategoryHeroSubtitle":"The ${count} most bought ${itemsLower} of the last 12 months, ranked by real purchases, with live prices and ratings on every card.","copy.bestSellersCategoryLinkCta":"See the top ${count}","copy.bestSellersCategoryLinkEyebrow":"Best Sellers","copy.bestSellersCategoryLinkHeading":"What people are buying","copy.bestSellersCategoryLinkIntro":"The ${count} ${itemsLower} people bought the most over the last 12 months, ranked.","copy.bestSellersCategoryMetaDescription":"The ${count} best selling ${itemsLower} of the last 12 months, ranked by what people actually bought, with live prices, ratings and full specs on every product.","copy.bestSellersCategoryMetaTitle":"Best Selling ${items}: Top ${count} of the Last 12 Months","copy.bestSellersCategoryNavAllLabel":"Compare all ${items}","copy.bestSellersCategoryNavGlobalLabel":"Best sellers of every category","copy.bestSellersCategoryStatBrandsLabel":"Brands","copy.bestSellersCategoryStatProductsLabel":"Ranked","copy.bestSellersCategoryStatReviewsLabel":"Customer reviews","copy.bestSellersCategoryTitle":"Best selling ${itemsLower}","copy.bestSellersCategoryTitleHighlight":"of the last 12 months","copy.bestSellersCategoryVerdict":"${winner} is the best selling ${itemLower} of the last 12 months, ahead of ${runnerUp} and ${third} in this ranking of the ${count} most bought ${itemsLower}.","copy.bestSellersCategoryVerdictShort":"${winner} is the best selling ${itemLower} of the last 12 months, at the top of this ranking of the most bought ${itemsLower}.","copy.bestSellersFaq1Answer":"Each list ranks the products people bought the most over the last 12 months, counted from the purchases made through the site. The window rolls forward on every update, so sales older than a year drop out and the ranking reflects the last twelve months rather than all-time totals.","copy.bestSellersFaq1Question":"How are the best sellers ranked?","copy.bestSellersFaq2Answer":"Prices, discounts and ratings come from each product's Amazon listing and are refreshed continuously, so every card shows live pricing and the latest customer feedback.","copy.bestSellersFaq2Question":"Where do the prices come from?","copy.bestSellersHeroEyebrow":"Best Sellers \xB7 Last 12 months","copy.bestSellersHeroHeadline":"The best selling products","copy.bestSellersHeroHeadlineHighlight":"of the last 12 months","copy.bestSellersHeroSubtitle":"The most popular smart home devices of every category, ordered by current demand and refreshed as buying trends shift, so each list reflects what people are actually buying right now.","copy.bestSellersHomeIntro":"The smart home devices everyone is buying right now, one top pick per category. Skip the guesswork and shop what's already winning.","copy.bestSellersMetaDescription":"The best selling smart home devices in every category, hand-picked from what people are actually buying. Cameras, plugs, locks, sensors, thermostats and more, with live prices and ratings.","copy.bestSellersMetaTitle":"Best Selling Smart Home Devices ${year} - Most Popular in Every Category","copy.bestSellersMethodologyEyebrow":"Methodology","copy.bestSellersMethodologyHeading":"How these best sellers are chosen","copy.bestSellersPageTitle":"Best Sellers","copy.bestSellersRankBadgeLabel":"#${rank} Best Seller in ${items}","copy.bestSellersSectionEyebrow":"Best Sellers","copy.bestSellersSectionVerdict":"${item} is the best selling ${category} of the last 12 months, the most bought in its category over that window.","copy.bestSellersStatCategoriesLabel":"Categories","copy.bestSellersStatProductsLabel":"Best sellers (12 mo)","copy.bestSellersStatReviewsLabel":"Customer reviews","copy.bestSellersViewAllLabel":"View all ${category}","copy.bestSellersViewTopLabel":"See the top ${count}","copy.brandsEmptyLabel":"No brands in this region yet.","copy.brandsEmptySearchLabel":"No brands match your search.","copy.brandsHeroEyebrow":"Brands directory \xB7 Upd
1ated for ${year}","copy.brandsHeroHeadline":"Every brand,","copy.brandsHeroHeadlineHighlight":"compared side by side","copy.brandsHeroSubtitle":"The full roster of smart home manufacturers in the catalog, with community ratings, country of origin and every device they make, one tap away.","copy.brandsHeroSubtitleNoRatings":"The full roster of manufacturers in the catalog, with country of origin and every product they make, one tap away.","copy.brandsMapBack":"Close","copy.brandsMapLegendHigh":"More","copy.brandsMapLegendLow":"Fewer","copy.brandsMetaDescription":"Browse and compare smart home brands including Aqara, SwitchBot, Google, Amazon, and more. Discover which ecosystems and devices best fit your home.","copy.brandsMetaTitle":"Smart Home Brands ${year} - Compare Top Manufacturers and Ecosystems","copy.brandsSearchClearLabel":"Clear search","copy.brandsSearchPlaceholder":"Search brands by name or country","copy.brandsSectionEyebrow":"Explore all brands","copy.brandsSectionHeadline":"Find the best smart home brands","copy.brandsSectionSubtitle":"From global names to specialist makers, browse every manufacturer we cover, filter by region and sort by how the community rates them.","copy.brandsSectionSubtitleNoRatings":"From global names to specialist makers, browse every manufacturer we cover and filter by region.","copy.brandsStatBrandsLabel":"Brands tracked","copy.brandsStatCountriesLabel":"Countries","copy.brandsStatRatingLabel":"Avg rating","copy.brandsTitle":"SMART HOME BRANDS","copy.brandsToolbarCountLabel":"brands","copy.brandsVsHeroSubtitle":"Comparing both brands side by side, ratings, catalog size and every product, so you can see which fits your smart home better.","copy.brandsVsMetaDescription":"${brand1} vs ${brand2} compared in ${categories}: ${count1} ${brand1} ${count1#model|models} against ${count2} from ${brand2}.${monthYear}","copy.brandsVsMetaDescriptionNoOverlap":"Compare ${brand1} vs ${brand2} smart home products side by side: specs, prices, and features across ${count} models to find which brand fits your setup.${monthYear}","copy.crossFilterEmptyLabel":"No products match these filters.","copy.crossSortAriaLabel":"Sort products","copy.crossSortDiscountLabel":"Biggest discount","copy.crossSortFeaturedLabel":"Featured","copy.crossSortPriceLabel":"Lowest price","copy.crossSortRatingLabel":"Highest rated","copy.crossToolbarCountLabel":"products","copy.dealsFilterEmptyLabel":"No deals match these filters.","copy.dealsHeroEyebrow":"Live Discounts \xB7 Updated continuously","copy.dealsHeroHeadline":"Every active deal,","copy.dealsHeroHeadlineHighlight":"ranked by real price drop","copy.dealsHeroSubtitle":"Hand-picked discounts across every category, sorted to surface the strongest markdowns first, with live pricing and instant comparisons.","copy.dealsMetaDescription":"Explore the best smart home deals available today. Save on sensors, smart plugs, thermostats, cameras, locks, and other smart devices. Updated daily.","copy.dealsMetaTitle":"Smart Home Deals ${year} - Top Discounts on Cameras, Sensors & More","copy.dealsSortAriaLabel":"Sort deals","copy.dealsSortDefaultLabel":"Best deals","copy.dealsSortDiscountLabel":"Biggest discount","copy.dealsSortPriceLabel":"Lowest price","copy.dealsSortRatingLabel":"Highest rated","copy.dealsSortSavingsLabel":"Biggest savings","copy.dealsStatActiveLabel":"Active deals","copy.dealsStatCategoriesLabel":"Categories","copy.dealsStatTopDiscountLabel":"Top discount","copy.dealsStatTopSavingsLabel":"Top savings","copy.dealsSubtitle":"Find the best Smart Home deals","copy.dealsTitle":"HOT DEALS","copy.dealsToolbarCountLabel":"products","copy.detailsAboveAverageProofText":"${rating} vs the ${average} average of ${total} ${plural} we track","copy.detailsDealsEyebrow":"On sale now","copy.detailsDealsTitle":"${count} other ${items} on sale","copy.detailsMetaTitleInternalText":": Review & Specs","copy.detailsRankProofText":"#${rank} of the ${total} ${plural} we track, by rating","copy.detailsVsLinksEyebrow":"Head to head","copy.detailsVsLinksTitle":"${name} vs the competition","copy.emailSubscriptionButtonLabel":"GET THE DEALS","copy.emailSubscriptionErrorMessage":"Your subscription could not be saved. Please try again.","copy.emailSubscriptionEyebrow":"Stay in the loop","copy.emailSubscriptionFinePrint":"No spam. Unsubscribe in one click.","copy.emailSubscriptionLabel":"Enter your email address to subscribe","copy.emailSubscriptionPlaceholder":"[email protected]","copy.emailSubscriptionSubtitle":"Price drops, new releases and the smart home news worth knowing.","copy.emailSubscriptionSuccessMessage":"Your subscription has been successful.","copy.emailSubscriptionTitle":"Smart home deals and news, straight to your inbox","copy.homeHeroHighlightKeyword":"Smart Home","copy.homeMetaDescription":"Side-by-side specs, live prices and owner ratings for 1,000+ smart home devices from 80+ brands: cameras, locks, sensors, thermostats, vacuums and hubs.","copy.homeMetaTitle":"Smart Home Compared: 1,000+ Devices, Side-by-Side Specs ${year}","copy.homeSubtitle":"Cameras, Displays, Doorbells, Door Locks, Sensors, Hubs, LEDs, Mini PCs, Robot Vacuums, Alarms, Speakers, Thermostats, Voice Assistants and more.","copy.homeTitle":"Compare the Best Smart Home Devices for ${year}","copy.latestFilterEmptyLabel":"No releases match these filters.","copy.latestHeroEyebrow":"New Releases \xB7 Upd
1ated weekly","copy.latestHeroHeadline":"Every fresh launch,","copy.latestHeroHeadlineHighlight":"tracked as it drops","copy.latestHeroSubtitle":"The newest smart home devices added to the catalog, with live pricing, specs and instant comparisons across every category.","copy.latestMetaDescription":"Discover the newest smart home devices just added to our database. Explore the latest models of sensors, cameras, thermostats, doorbells, and more.","copy.latestMetaTitle":"Latest Smart Home Devices ${year} - New Cameras, Sensors & More","copy.latestPageSubtitle":"Find the latest Smart Home releases","copy.latestPageTitle":"New Releases","copy.latestSortAriaLabel":"Sort releases","copy.latestSortDiscountLabel":"Biggest discount","copy.latestSortNewestLabel":"Newest","copy.latestSortPriceLabel":"Lowest price","copy.latestSortRatingLabel":"Highest rated","copy.latestStatCategoriesLabel":"Categories","copy.latestStatNewLabel":"New products","copy.latestStatPriceDropsLabel":"Price drops","copy.latestToolbarCountLabel":"products","copy.newsletterDealsHeadline":"This week's best deals,","copy.newsletterDealsHeadlineHighlight":"picked across every price range","copy.newsletterDealsPreheader":"{count, plural, one {# price drop worth a look this week, up to ${percent}% off.} other {# price drops worth a look this week, up to ${percent}% off.}}","copy.newsletterDealsSubject":"{count, plural, one {${percent}% off ${item}, plus # more deal} other {${percent}% off ${item}, plus # more deals}}","copy.newsletterDealsSubtitle":"Your weekly digest of the best smart home discounts.","copy.newsletterDealsTitle":"Weekly Smart Home Deals","copy.newsletterEventLastDayHeadline":"Last day of ${event},","copy.newsletterEventLastDayHighlight":"the deals end today","copy.newsletterEventLastDaySubject":"{count, plural, one {Last day of ${event}: ${percent}% off ${item}, plus # more deal} other {Last day of ${event}: ${percent}% off ${item}, plus # more deals}}","copy.newsletterEventLastDaySubtitle":"It ends ${endDate}. The strongest discounts still live, ranked by the money they save.","copy.newsletterEventPreheader":"{count, plural, one {# deal worth buying, through ${endDate}.} other {# deals worth buying, through ${endDate}.}}","copy.newsletterEventStartHeadline":"${event} is on,","copy.newsletterEventStartHighlight":"these are the deals worth buying","copy.newsletterEventStartSubject":"{count, plural, one {${event} is on: ${percent}% off ${item}, plus # more deal} other {${event} is on: ${percent}% off ${item}, plus # more deals}}","copy.newsletterEventStartSubtitle":"${dates}. The strongest discounts live right now, ranked by the money they save.","copy.newsletterNewReleasesHeadline":"The products launched in","copy.newsletterNewReleasesPreheader":"Including ${items}.","copy.newsletterNewReleasesSubject":"{count, plural, one {# new product launched in ${month}} other {# new products launched in ${month}}}","copy.newsletterNewReleasesSubtitle":"Every product that came out this month, compared side by side on the site.","copy.newsletterNewReleasesTitle":"New Releases","copy.newsletterPodcastHeadline":"A new episode is out:","copy.newsletterPodcastSubject":"New episode: ${title}","copy.newsletterPodcastSubtitle":"Listen on the site or in your favorite podcast app.","copy.newsletterWelcomeEyebrow":"Welcome","copy.newsletterWelcomeHeadline":"Thanks for subscribing to ${site},","copy.newsletterWelcomeHighlight":"here is what comes next","copy.newsletterWelcomePreheader":"What you will get, and this week's best deals.","copy.newsletterWelcomeSubject":"Welcome to ${site}","copy.newsletterWelcomeSubtitle":"A few emails a month, each one with something worth opening.","copy.priceLandingCtaButton":"Browse all ${items}","copy.priceLandingCtaSubtitle":"See all the ${itemsLower} in the catalog, compared side by side on specs, price and rating.","copy.priceLandingCtaTitle":"Looking for more than ${price}?","copy.priceLandingFaqBestAnswer":"${list} lead our ranking of ${itemsLower} under ${price}, ordered by customer rating weighted by how many reviews back it. The full list compares ${count} products in this price range.","copy.priceLandingFaqBestQuestion":"What are the best ${itemsLower} under ${price}?","copy.priceLandingFaqCountAnswer":"This page tracks ${count} ${itemsLower} under ${price} from ${brands} brands, with prices starting at ${min}.","copy.priceLandingFaqCountQuestion":"How many ${itemsLower} cost less than ${price}?","copy.priceLandingFaqEyebrow":"FAQ","copy.priceLandingFaqFreshnessAnswer":"Prices come from each product's Amazon listing and are re-checked continuously, so every card shows the latest price we have. A product whose price rises above ${price} drops off this list on the next update.","copy.priceLandingFaqFreshnessQuestion":"Are these prices up to date?","copy.priceLandingFaqHeading":"Frequently asked questions","copy.priceLandingFilterEmptyLabel":"No products match these filters.","copy.priceLandingHeroEyebrow":"Shop by price \xB7 Upd
1ated for ${year}","copy.priceLandingHeroSubtitle":"All the ${itemsLower} in our catalog priced under ${price}, ranked best first, with live prices, real owner ratings and full specs so you can compare before you buy.","copy.priceLandingLinksCardCount":"${count} products","copy.priceLandingLinksCardTitle":"Under ${price}","copy.priceLandingLinksEyebrow":"Price ranges","copy.priceLandingLinksHeading":"Shop by Price","copy.priceLandingLinksIntro":"Jump straight to the ${itemsLower} that fit your budget.","copy.priceLandingListConjunction":"and","copy.priceLandingMetaDescription":"Compare the best ${itemsLower} under ${price}: ${count} models with live prices, real owner ratings, full specs and smart home integrations.","copy.priceLandingMetaTitle":"Best ${items} Under ${price} in ${year}","copy.priceLandingRangeChipLabel":"Under ${price}","copy.priceLandingRangeNavAllLabel":"All ${items}","copy.priceLandingRangeNavLabel":"Price ranges","copy.priceLandingSortAriaLabel":"Sort products","copy.priceLandingSortDefaultLabel":"Best rated first","copy.priceLandingSortDiscountLabel":"Biggest discount","copy.priceLandingSortPriceLabel":"Lowest price","copy.priceLandingSortRatingLabel":"Highest rated","copy.priceLandingStatBrandsLabel":"Brands","copy.priceLandingStatFromLabel":"Prices from","copy.priceLandingStatProductsLabel":"Products","copy.priceLandingStatTopDiscountLabel":"Top discount","copy.priceLandingTitle":"Best ${items}","copy.priceLandingTitleHighlight":"Under ${price}","copy.priceLandingToolbarCountLabel":"products","copy.priceLandingVerdict":"${item} is the top pick among ${itemsLower} under ${price}, rated ${rating} stars across ${reviews} customer reviews.","copy.priceWatchCtaLabel":"Email me about price drops","copy.priceWatchCtaText":"Not the right price yet?","copy.priceWatchDialogCloseLabel":"Close","copy.priceWatchDialogEyebrow":"Price alerts","copy.priceWatchDialogHeadline":"Waiting for a better price?","copy.priceWatchDialogIntro":"We check this price every day and email you when it drops, along with the rest of the week's deals.","copy.statsDatasetKeywords":"smart home, Matter, Thread, Zigbee, Z-Wave, home automation, ecosystem compatibility, smart home statistics","copy.statsNavTitle":"Statistics","copy.summaryAtAGlanceSubtitleTemplate":"Everything this ${singular} supports, grouped by category.","copy.tableDealsStripCtaLabel":"See the deals","copy.tableDealsStripDiscountLabel":"Up to ${discount}% off","copy.tableDealsStripLabel":"${count} ${items} on sale right now","copy.tableHeroEyebrow":"Side-by-side comparison \xB7 Updated for ${year}","copy.tableStatBrandsLabel":"Brands","copy.tableStatProductsLabel":"Products","copy.tableStatTopDiscountLabel":"Top discount","copy.topRatedBadgeLabel":"Top Rated","copy.topRatedFaq1Answer":"Each product's average customer rating is weighted by how many reviews it has (a review-weighted average). A perfect score from a handful of reviews ranks below a slightly lower score backed by thousands of reviews, so the top spots reflect proven quality, not small sample sizes.","copy.topRatedFaq1Question":"How are the top rated products ranked?","copy.topRatedFaq2Answer":"Ratings and review counts come from each product's Amazon listing and are refreshed continuously, so the ranking is rebuilt with every site update using the latest customer feedback and live prices.","copy.topRatedFaq2Question":"Where do the ratings come from?","copy.topRatedHeroEyebrow":"Top Rated \xB7 Weighted by review volume","copy.topRatedHeroHeadline":"The highest rated smart home devices,","copy.topRatedHeroHeadlineHighlight":"proven by real owners","copy.topRatedHeroSubtitle":"The best rated smart home devices of every category, scored with a review-weighted average so a perfect rating from a handful of reviews never beats a great one backed by thousands of owners.","copy.topRatedMetaDescription":"The highest rated smart home devices in every category, ranked by review-weighted scores from thousands of owners. Cameras, plugs, locks, sensors and more.","copy.topRatedMetaTitle":"Top Rated Smart Home Devices ${year} - Best of Every Category","copy.topRatedMethodologyEyebrow":"Methodology","copy.topRatedMethodologyHeading":"How this ranking works","copy.topRatedPageTitle":"Top Rated","copy.topRatedSectionEyebrow":"Top Rated","copy.topRatedSectionVerdict":"${item} is the highest rated ${category} right now, averaging ${rating} stars across ${reviews} customer reviews.","copy.topRatedStatCategoriesLabel":"Categories ranked","copy.topRatedStatProductsLabel":"Products rated","copy.topRatedStatReviewsLabel":"Reviews weighed","copy.topRatedViewAllLabel":"View all ${category}","copy.updatedChipLabel":"Last updated","copy.useCaseMetaTitleFallback":"${title} smart home products","copy.useCasesIndexMetaTitle":"Smart home use cases","countdown.days":"days","countdown.daysShort":"d","countdown.hours":"hours","countdown.hoursShort":"h","countdown.minutes":"min","countdown.minutesShort":"m","countdown.seconds":"sec","countdown.secondsShort":"s","deals.bestDeal":"Best deal","deals.clearFilters":"Clear filters","deals.countLabelDefault":"products","deals.facetSearch":"Search ${label}","deals.sortAriaDefault":"Sort","deals.sortPrefix":"Sort:","details.bestSellersLink":"{count, plural, one {See the best seller in ${itemsLower}} other {See the # best selling ${itemsLower}}}","details.compareCtaSubtitle":"All ${plural} in the catalog in one table: filter by what you need, sort by price or rating, and see exactly where this one lands.","details.compareCtaTitle":"Compare the ${item} with the other ${count}${nbsp}${plural}","details.compareNextSubtitle":"Compare these next","details.moreOfType":"More ${plural}","details.otherPlural":"other ${plural}","details.useCasesBlockTitle":"Good for these use cases","disclosure.amazonAssociates":"As an Amazon Associate I earn from qualifying purchases","disclosure.independence
1Label":"Independent \xB7 Not sponsored","disclosure.independenceTitle":"Brands never pay for placement or rankings. Affiliate commissions never influence our comparisons.","filters.itemsSelectedDefault":"{n} items selected","filters.label":"Filters:","filters.multiSelected":"{n} filters selected","filters.multiSelectedItems":"${title}: {n} items selected","filters.name":"Name","filters.noneSelected":"No filters selected","filters.popularEyebrow":"Popular filters","filters.popularIntro":"Quick shortcuts to compare products.","filters.popularTitle":"Popular Filters","filters.sliderMax":"Slider max value","filters.sliderMin":"Slider min value","footer.cookieSettings":"Cookie settings","footer.groupCompany":"Company","footer.groupDiscover":"Discover","footer.groupLearn":"Learn","footer.groupShop":"Shop","home.bestSellerRankAria":"Number one best seller in ${category}","home.bestSellerRankBadge":"#1 in ${category}","home.bestSellersEyebrow":"Best sellers","home.catalogDistributionEyebrow":"Catalog distribution","home.catalogDistributionIntro":"Top categories by product coverage in the current dataset.","home.catalogDistributionTitle":"Catalog Distribution","home.categoryCardSubtitle":"Compare features, ratings, integrations, and pricing in detail.","home.categoryPreviewAlt":"${category} preview","home.dealsEyebrow":"Hot deals","home.dealsIntro":"The active discounts across the catalog, the deepest ones and the best sellers first.","home.dealsIntroWithTopDiscount":"Up to ${percent}% off across the catalog, the deepest discounts and the best sellers first.","home.exploreAllCategoriesSubtitle":"Jump into each category and compare features, integrations, and pricing in detail.","home.exploreBrandsEyebrow":"Explore brands","home.exploreBrandsIntro":"Every brand in the catalog, at a glance. Tap a logo to see its products and compare.","home.exploreBrandsTitle":"Explore All Brands","home.exploreCategoriesEyebrow":"Explore categories","home.exploreCategoriesTitle":"Explore All Categories","home.fromTheBlog":"From the blog","home.heroEyebrow":"${year} Edition \xB7 Updated weekly","home.itemTypesListName":"Item Types","home.latestBlogPosts":"Latest Blog Posts","home.latestEyebrow":"New releases","home.latestIntro":"The freshest launches in the catalog, tracked as they drop.","home.quickLinkEyebrow":"Best Devices with","home.releaseBadgeNew":"New","home.saveBadge":"Save ${amount}","home.trendingBlogIntro":"Hand-picked posts worth reading next.","home.trendingBlogPosts":"Trending Blog Posts","home.unknownDevice":"Unknown Device","home.useCaseCardAria":"Top pick in ${category}","home.useCaseEyebrow":"Use Case","home.useCases":"Use cases","home.useCasesIntro":"Start from your goal and jump to the categories and products that fit it.","home.viewAllBestSellers":"View all best sellers","home.viewAllBlogPosts":"View all blog posts","home.viewAllBrands":"View all brands","home.viewAllDeals":"View all deals","home.viewAllNewReleases":"View all new releases","item.atAGlance":"At a glance","item.badgeBestSeller":"Best Seller","item.badgeTopRated":"Top Rated","item.bestFor":"Best for","item.cons":"Cons","item.description":"Description","item.discontinued":"Discontinued","item.expandImage":"Expand image","item.faq":"Frequently asked questions","item.fullSpecs":"Full specifications","item.fullSpecsHeading":"Every spec, organized","item.fullSpecsIntro":"Browse the full breakdown by category. Tap the ${infoIcon} on any row for what it means, or the ${docIcon} for sources and documentation.","item.lastUpdated":"Last updated ${date}","item.loadingPriceHistory":"Loading price history...","item.ourReview":"Our review","item.photoAlt":"${item} photo ${number}","item.priceHistory":"Price History","item.productNounSingular":"product","item.pros":"Pros","item.ratingAria":"Rated ${rating} out of 5 stars from ${reviews} customer reviews","item.ratingsCount":"{count, plural, other {${formatted} ratings}}","item.reviewHeadline":"${item} Review","item.specCategoriesLabel":"Specification categories","item.statusBuildNow":"BUILD NOW","item.statusComingSoon":"COMING SOON","item.statusDiscontinued":"DISCONTINUED","item.statusInstallNow":"INSTALL NOW","item.statusJoinBeta":"JOIN BETA","item.statusReserveNow":"RESERVE NOW","item.statusSoldOut":"SOLD OUT","item.summary":"Summary","item.verdict":"The verdict","item.whatThisMeans":"What this means","item.documentationAndSources":"Documentation & sources","items.dataWarning":"Filters and sorting need a download that did not arrive. The products below are up to date.","items.loadError":"We couldn't load the products. Check your connection and try again.","items.tryAgain":"Try again","ldJson.itemListGenericDescription":"Find the top deals for ${name}
1. Compare features, ratings, and prices to choose the best product for you.","legal.eyebrow":"Legal","legal.lastUpdated":"Updated ${date}","legal.minutesRead":"${minutes} min read","legal.privacyIntro":"How ${site} collects, uses, and protects your personal information, and the choices you have over it.","legal.privacyMetaTitle":"Privacy Policy - ${site}","legal.privacyTitle":"Privacy Policy","legal.questions":"Questions?","legal.sectionCount":"{count, plural, one {# section} other {# sections}}","legal.termsIntro":"The rules of the road for using ${site}, what to expect from the information here, and what we ask of you in return.","legal.termsMetaTitle":"Terms of Use - ${site}","legal.termsTitle":"Terms of Use","lightbox.close":"Close image viewer","lightbox.counter":"${current} / ${total}","lightbox.next":"Next image","lightbox.previous":"Previous image","lightbox.viewer":"Image viewer","locale.intl":"en-US","locale.measurementSystem":"imperial","locale.regionNames":"catalog","nav.about":"About","nav.allCategories":"All Categories","nav.blog":"Blog","nav.brands":"Brands","nav.breadcrumbLabel":"Breadcrumb","nav.breadcrumbsLabel":"Breadcrumbs","nav.deals":"Deals","nav.home":"Home","nav.podcast":"Podcast","newsletter.invalidEmail":"Please enter a valid email address.","newsletter.invalidField":"The information provided is invalid. Please review the field format and try again.","newsletter.requiredCountryCode":"Please choose a country code","newsletter.requiredField":"This field cannot be left blank. ","newsletter.selectedList":"{quantity} list selected","newsletter.selectedLists":"{quantity} lists selected","newsletter.selectedOption":"{quantity} selected","newsletter.selectedOptions":"{quantity} selected","newsletterEmail.footerReason":"You are receiving this email because you subscribed to the ${site} newsletter.","newsletterEmail.listenNow":"Listen now","newsletterEmail.newRelease":"New","newsletterEmail.newReleasesPricesNote":"Prices as of ${date}. Prices change often, so check the current one before you buy.","newsletterEmail.pricesNote":"Prices as of ${date}. Deals can end at any time, so check the current price before you buy.","newsletterEmail.reviewsCount":"{count, plural, one {${formatted} review} other {${formatted} reviews}}","newsletterEmail.unsubscribe":"Unsubscribe","newsletterEmail.viewAllDeals":"{count, plural, one {See the ${formatted} deal} other {See all ${formatted} deals}}","newsletterEmail.viewAllEpisodes":"{count, plural, one {See the ${formatted} episode} other {See all ${formatted} episodes}}","newsletterEmail.viewAllEventDeals":"See all ${event} deals","newsletterEmail.viewAllNewReleases":"See all new releases","newsletterEmail.viewDeal":"View Deal","newsletterEmail.viewInBrowser":"View in your browser","newsletterEmail.viewProduct":"View Product","newsletterEmail.wasPrice":"was ${price}","newsletterEmail.weekOf":"Week of ${date}","newsletterEmail.welcomeDealsHeading":"This week's best deals","newsletterEmail.welcomeDealsText":"Once a week, the strongest price drops in the catalog, across every price range.","newsletterEmail.welcomeDealsTitle":"Weekly deals","newsletterEmail.welcomeEventsText":"When ${events} start, and on their last day, with the deals worth buying.","newsletterEmail.welcomeEventsTitle":"Shopping events","newsletterEmail.welcomePodcastText":"Each new episode, the day it comes out, with its summary.","newsletterEmail.welcomePodcastTitle":"New podcast episodes","newsletterEmail.welcomeReleasesText":"At the end of every month, every product launched in it.","newsletterEmail.welcomeReleasesTitle":"New releases","newsletterEmail.welcomeWhatYouGet":"What lands in your inbox","notFound.animationLabel":"404 animation","notFound.body":"Sorry, but the page you were looking for could not be found. It may have moved, or the link might be broken. Try a search or head to the homepage.","notFound.eyebrow":"Error 404","notFound.goHome":"Go to homepage","notFound.metaDescription":"The page you were looking for could not be found. Search ${site} or jump to a popular category.","notFound.metaTitle":"Page Not Found - ${site}","notFound.pageTitle":"Page Not Found","notFound.popularCategories":"Popular categories","notFound.searchProducts":"Search products","notFound.title":"Page not found","page.compare":"Compare","page.newReleases":"New Releases","page.useCases":"Use Cases","pager.next":"Next","pager.nextShort":"Next","pager.prev":"Prev","pager.previous":"Previous","podcast.closePlayer":"Close player","podcast.empty":"No episodes available yet.","podcast.episodeMetaDescriptionDefault":"${number} of the ${series} podcast.","podcast.episodesCount":"episodes","podcast.episodesLabel":"Episodes","podcast.hideDesc":"Hide description","podcast.languageSelector":"Language selector","podcast.listenOn":"Listen on","podcast.markUnwatched":"Mark as not listened","podcast.markWatched":"Mark as listened","podcast.metaDescriptionDefault":"Listen to the ${site} podcast. Episodes, show notes and links to every platform.","podcast.moreEpisodes":"More episodes","podcast.mute":"Mute","podcast.namedPodcast":"${name} Podcast","podcast.pause":"Pause","podcast.play":"Play","podcast.playing":"PLAYING","podcast.seekPos":"Playback position","podcast.showDesc":"Show description","podcast.showNotes":"Show notes","podcast.skipBack":"Skip back 15 seconds","podcast.skipFwd":"Skip forward 30 seconds","podcast.speed":"Playback speed","podcast.unmute":"Unmute","podcast.volume":"Volume","podcast.
1watched":"Listened","price.free":"Free","priceDrop.legendLowest":"{count, plural, one {The price is at its lowest point in the last month.} other {The price is at its lowest point in the last <b>#</b> months.}}","priceDrop.legendTitleExcellent":"This is an excellent time to buy!","priceDrop.legendTitleGood":"This is a good time to buy!","priceDrop.legendTitleGreat":"This is a great time to buy!","priceDrop.lowestPrice":"{count, plural, one {Lowest price in the last month} other {Lowest price in the last <b>#</b> months}}","priceDrop.shortLow":"${count}-month low","priceDrop.stableText":"{count, plural, one {The price has been stable for a month.} other {The price has been stable for <b>#</b> months.}}","priceDrop.stableTitle":"Stable Price","priceDrop.titleExcellent":"This is an excellent time to buy","priceDrop.titleGood":"This is a good time to buy","priceDrop.titleGreat":"This is a great time to buy","priceHistory.expand":"Expand price history","priceHistory.finalPriceLabel":"Final Price","quantity.decrease":"Decrease quantity","quantity.getSuggested":"Get ${count}","quantity.increase":"Increase quantity","rail.allOfType":"All ${plural}","rail.brandProductsLabel":"${brand} products","rail.compareType":"Compare ${plural}","rail.exploreBrand":"Explore ${brand}","rail.moreBrandProducts":"More ${brand} products","rail.moreFromBrand":"More from ${brand}","rail.recommendationsLabel":"${plural} recommendations","rail.topToCompareNext":"Top ${plural} to compare next","rail.viewDetails":"View details","ranking.categoriesIndex":"Categories in this ranking","recommendations.continueEyebrow":"Recently viewed","recommendations.continueIntro":"The products you looked at lately, in case you want to take another look.","recommendations.continueTitle":"Pick up where you left off","recommendations.forYouEyebrow":"Picked for you","recommendations.forYouIntro":"Best sellers from the categories you browse the most.","recommendations.forYouTitle":"You might also like","search.brandLogoAlt":"Brand logo","search.brandsIconTitle":"brands","search.catalogEyebrow":"Search the catalog","search.categoriesIconTitle":"categories","search.clearSearch":"Clear search","search.filterAll":"All","search.filterBrands":"Brands","search.filterCategories":"Categories","search.filterProducts":"Products","search.filterVs":"Comparisons","search.noResults":"No results","search.popularCategories":"Popular Categories","search.resultImageAlt":"Results","search.searching":"Searching\u2026","search.sectionBrands":"Brands","search.sectionCategories":"Categories","search.sectionProducts":"Products","search.sectionVs":"Comparisons","search.seeAllResults":"See all ${count} results","search.submit":"Submit","search.vsBrandsLabel":"Brand comparison","search.vsSeparators":"vs, versus","shoppingEvents.countdownEndsLabel":"Ends in","shoppingEvents.countdownStartsLabel":"Starts in","shoppingEvents.crossLinkBestSellersText":"What people are actually buying in each category right now.","shoppingEvents.crossLinkDealsLabel":"All live deals","shoppingEvents.crossLinkDealsText":"Every active discount in the catalog, updated continuously.","shoppingEvents.crossLinkLatestText":"The newest products in the catalog, with live pricing and specs.","shoppingEvents.crossLinkOtherEventText":"Deals, dates and reminders for ${event}.","shoppingEvents.crossLinkTopRatedText":"The highest rated products of every category, weighted by review volume.","shoppingEvents.crossLinksHeading":"Deals do not stop when the event does","shoppingEvents.dateRangeAcrossYears":"${startMonth} ${startDay}, ${startYear} to ${endMonth} ${endDay}, ${endYear}","shoppingEvents.dateRangeSameMonth":"${month} ${startDay} to ${endDay}, ${year}","shoppingEvents.dateRangeSameYear":"${startMonth} ${startDay} to ${endMonth} ${endDay}, ${year}","shoppingEvents.dateSingle":"${month} ${day}, ${year}","shoppingEvents.dealsHeading":"The best ${event} discounts live right now","shoppingEvents.dealsIntro":"Ranked by how much money the discount actually saves, not by the percentage on the label. Filter by category, brand, rating or discount depth.","shoppingEvents.digestDealCount":"{count, plural, one {# deal} other {# deals}}","shoppingEvents.digestHeading":"${event} deals by category","shoppingEvents.digestIntro":"Where the discounts are concentrated right now, and the single strongest deal of each category.","shoppingEvents.digestUpTo":"up to ${discount}% off","shoppingEvents.expectedDateUnconfirmed":"a date that has not been confirmed yet","shoppingEvents.faqEyebrow":"FAQ","shoppingEvents.faqHeading":"${event} questions, answered","shoppingEvents.filterEmptyLabel":"No deals match these filters.","shoppingEvents.heroEyebrow":"${event}","shoppingEvents.heroHeadline":"${event} deals,","shoppingEvents.heroHeadlineHighlight":"tracked all year","shoppingEvents.heroSubtitle":"Prices are checked continuously, so the discounts below are the ones live right now, ranked by the real price drop instead of the advertised percentage.","shoppingEvents.homePromoCta":"See the deals","shoppingEvents.homePromoTextLive":"Every discount is live right now, ranked by the money it actually saves instead of the percentage on the label.","shoppingEvents.homePromoTextUpcoming":"The window is ${dates}. The discounts worth buying land here, ranked by the money they actually save.","shoppingEvents.homePromoTitle":"${event} ${eventYear}","shoppingEvents.homePromoUpcomingLabel":"Coming soon","shoppingEvents.liveLabel":"Live now","
1shoppingEvents.metaDescription":"Every ${event} discount worth buying, tracked and ranked by real price drop. ${deals} live deals across ${categories} categories, updated continuously.","shoppingEvents.metaTitle":"${event} Deals ${eventYear} - Live Discounts, Tracked Daily","shoppingEvents.noDealsLabel":"No discount is live right now. New price drops are picked up automatically, and this page is where the ${event} ones land.","shoppingEvents.notifyEyebrow":"Reminder","shoppingEvents.notifyHeadline":"Get an email when ${event} starts","shoppingEvents.notifyIntro":"One email when the deals go live, plus the discounts worth buying. No spam, unsubscribe anytime.","shoppingEvents.offSeasonLabel":"Deals all year","shoppingEvents.playbookEyebrow":"Playbook","shoppingEvents.playbookHeading":"How to shop ${event} without overpaying","shoppingEvents.sortAriaLabel":"Sort deals","shoppingEvents.sortDiscountLabel":"Biggest discount","shoppingEvents.sortPriceLabel":"Lowest price","shoppingEvents.sortRatingLabel":"Highest rated","shoppingEvents.sortSavingsLabel":"Biggest savings","shoppingEvents.startsInDays":"{days, plural, one {Starts in # day} other {Starts in # days}}","shoppingEvents.startsSoonLabel":"Starts in hours","shoppingEvents.statCategoriesLabel":"Categories","shoppingEvents.statDealsLabel":"Live deals","shoppingEvents.statTopDiscountLabel":"Top discount","shoppingEvents.statTopSavingsLabel":"Top savings","shoppingEvents.statusHeadlineLive":"${event} deals are live right now","shoppingEvents.statusHeadlineOffSeason":"${event} is expected back in ${expected}","shoppingEvents.statusHeadlineUpcoming":"${event} ${eventYear} starts ${startDate}","shoppingEvents.statusTextLive":"The window runs through ${endDate}. Every product below is discounted right now, and prices are re-checked continuously, so what you see is what is actually charged.","shoppingEvents.statusTextOffSeason":"The exact window is confirmed a few weeks in advance and lands here first. In the meantime the page keeps listing the strongest discounts live today.","shoppingEvents.statusTextUpcoming":"The full window is ${dates}. Until then this page keeps listing the strongest discounts live today, so it is worth checking before the event as well.","shoppingEvents.toolbarCountLabel":"products","slideshow.currentItem":"Current Item","slideshow.itemOf":"Item ${current} of ${total}","slideshow.itemsLabel":"Image Slideshow Items","slideshow.next":"Show next slide","slideshow.previous":"Show previous slide","social.followOn":"Follow us on ${network}","social.itemTypeCardHeadline":"Best ${name}","social.itemTypeCardSubtitle":"Compare specs, prices and ratings across ${items} products, side by side.","social.kofiImageAlt":"Ko-fi donations","social.share":"Share","social.shareByEmail":"Share by Email","social.shareOn":"Share on ${network}","social.supportOnKofi":"Support Us on Ko-fi","social.shareProductText":'Take a look at "${product}" ${type} on @${account}. ${url}',"social.shareProductEmailBody":'Take a look at "${product}" ${type}. ${url}',"socialPost.byBrand":" by ${brand}","socialPost.priceLine":"- Price: ${price}","socialPost.discountSuffix":" (${percent}% OFF)","socialPost.connectivityLine":"- Connectivity: ${features}","socialPost.integrationsLine":"- Integrations: ${features}","socialPost.findMoreAt":"Find this and more products at","socialPost.discountSentence":" is ${percent}% OFF.","socialPost.nowPrice":"Now ${price} (Reg. ${regular}) \u{1F525}","socialPost.moreDeals":"More ${items} deals at ${url}","stats.adoptionChartDescription":"Share of products supporting ${metrics} by launch year, from ${from} to ${to}. The full figures are in the table below the chart.","stats.adoptionScopeNote":"Every share in this section is measured against the same ${scopeProducts} products: the ones in the ${scopeCategories} categories whose spec sheet asks at least one of these questions. Categories that ask none of them are left out rather than counted as a no.","stats.adoptionTableCaption":"Support for each feature measured in this section.","stats.adoptionTableLabel":"The numbers behind these tiles","stats.brandBarNote":"The bars above are scaled to the largest catalog, so their length compares product counts rather than showing a share.","stats.brandBreadthCaption":"How many different categories each brand appears in, and how many products it has in total.","stats.brandBreadthHeading":"Brands covering the most categories","stats.brandCountryCaption":"Brands and products by the country each brand is headquartered in.","stats.brandCountryHeading":"Where the brands are based","stats.brandCountryTableLabel":"Every country, as a table","stats.brandEyebrow":"Brands","stats.brandHeading":"Who makes what","stats.brandIntro":"${brands} brands are tracked, and ${half} of them account for half the catalog between them.","stats.brandMapBack":"Close","stats.brandMapEyebrow":"Global brand map","stats.brandMapLegendHigh":"More","stats.brandMapLegendLow":"Fewer","stats.brandMapTitle":"Global brand map","stats.brandMapTopLabel":"Top countries","stats.brandMetricCaption":"Share of each brand's catalog that supports ${metric}, among brands with at least ${sample} products in play.","stats.brandMetricHeading":"Brands furthest along on ${metric}","stats.brandTileFoot":"${count} categories","stats.catalogEyebrow":"Catalog","stats.catalogHeading":"What the catalog covers","stats.catalogIntro":"Every figure on this page is measured against this catalog, and this is how it is made up.","stats.catalogTableCaption":"Products by category, and the share of the catalog each one represents.","stats.catalogTableLabel":"Every category, as a table","stats.catalogTreemapLabel":"Categories by share of the catalog, drawn to scale","stats.catalogTreemapNote":"Each rectangle is a category, and its size is its share of the catalog. Hover a small one to see which it is.","stats.catalogTreemapTip":"${category}: ${share}
1 of the catalog","stats.catalogYearCaption":"Launch year of every tracked product. The current year is still in progress.","stats.catalogYearHeading":"The catalog by launch year","stats.catalogYearTableLabel":"Every launch year, as a table","stats.citationAcademic":"${site}. (${year}). ${title} [Data set]. Retrieved ${retrieved}, from ${url}","stats.citationHtml":'Source: <a href="${url}">${title} by ${site}</a> (n = ${items} products, ${retrieved})',"stats.citationPlain":'${site}, "${title}", n = ${items} products, retrieved ${retrieved}. ${url}',"stats.citationTitle":"Smart Home Statistics ${year}","stats.citeAcademicLabel":"Academic","stats.citeAction":"Cite this page","stats.citeEyebrow":"Reuse","stats.citeHeading":"Cite this page","stats.citeHtmlLabel":"HTML (keeps the link)","stats.citeIntro":"These figures are free to reuse. Copy whichever format fits, or take the raw data below.","stats.citePlainLabel":"Plain text","stats.columnChartLabelDefault":"Column chart","stats.copied":"Copied","stats.copyButton":"Copy","stats.counterBrands":"Brands","stats.counterCategories":"Categories","stats.counterDataPoints":"Verified data points","stats.counterProducts":"Products tracked","stats.countryUnknown":"Unknown","stats.dataAverageCustomerRating":"Average customer rating","stats.dataBrandsTracked":"Brands tracked","stats.dataCategoriesTracked":"Categories tracked","stats.dataCustomerReviews":"Customer reviews","stats.dataFeatureFirstQuartilePriceOfTheProductsThatSupportIt":"${feature}: first quartile price of the products that support it","stats.dataFeatureMedianPriceOfTheProductsThatSupportIt":"${feature}: median price of the products that support it","stats.dataFeatureThirdQuartilePriceOfTheProductsThatSupportIt":"${feature}: third quartile price of the products that support it","stats.dataHighestListPrice":"Highest list price","stats.dataLowestListPrice":"Lowest list price","stats.dataMedianListPrice":"Median list price","stats.dataProductsByBrand":"Products by brand","stats.dataProductsByLaunchYear":"Products by launch year","stats.dataProductsByPriceBand":"Products by price band","stats.dataProductsInCategory":"Products in category","stats.dataProductsTracked":"Products tracked","stats.datasetDescription":"Feature adoption, price and rating statistics computed from a catalog of ${items} products across ${categories} categories and ${brands} brands.","stats.datasetMethod":"Per-product specification review against each category's feature schema. A product counts as supporting a feature only when its verified support flag is set, and each share is measured only across the categories whose schema defines that feature.","stats.datasetName":"Smart Home Compared Product Statistics","stats.datasetVariableShareDescription":"${supported} of ${inScope} tracked products across the ${groupCategories} categories measured in this group, of which ${declared} are in the ${categories} categories that declare ${metric} (${declaredShare}% of those).","stats.datasetVariableShareName":"${metric} support share","stats.downloadAction":"Download the data","stats.downloadEyebrow":"Raw data","stats.downloadHeading":"Download the data","stats.downloadIntro":"The same figures rendered above, as one long table. Each row carries its own source link and retrieval date, so the attribution travels with the file.","stats.faqCombinationAnswer":"${share} of the products we measured ${phrase}, as of ${retrieved}.","stats.faqCombinationQuestion":"How many products ${phrase}?","stats.faqComparisonAnswer":"${leader} leads: ${leaderShare} of tracked products support it, against ${trailerShare} for ${trailer}, as of ${retrieved}.","stats.faqComparisonQuestion":"Is ${first} or ${second} more common?","stats.faqEyebrow":"Questions","stats.faqHeading":"Frequently asked questions","stats.faqMetricAnswer":"${share} of the ${total} products we track support ${metric}. Among the ${declared} products in the ${categories} categories where ${metric} applies at all, the share is ${declaredShare}, as of ${retrieved}.","stats.faqMetricQuestion":"What share of products support ${metric}?","stats.faqPriceAnswer":"The median list price across the ${count} products with a published price is ${median}, ranging from ${min} to ${max} depending on the category.","stats.faqPriceQuestion":"How much does a smart home device cost?","stats.faqReuseAnswer":"Yes. The figures are free to reuse with attribution and a link back to this page, and a downloadable CSV and JSON of the same numbers, each row with its own sample size, are published alongside it.","stats.faqReuseQuestion":"Can I use these statistics in my article?","stats.faqSourceAnswer":"From our own catalog of ${items} products across ${categories} categories and ${brands} brands, each documented feature by feature against the spec sheet of its category. The figures are recomputed on every site build.","stats.faqSourceQuestion":"Where does this data come from?","stats.findingCombination":"of products: ${combination}","stats.findingHalfCatalog":"of the ${total} brands we track make up <strong>half the catalog</strong> between them.","stats.findingLeader":"of the products we track work with <strong>${platform}</strong>, more than any other platform we measure.","stats.findingMedianPrice"
1:"is the <strong>median price</strong> of the products we track, from ${min} to ${max}.","stats.findingMetric":"of the products we track support <strong>${metric}</strong>","stats.findingTrendDown":"of the products launched in <strong>${year}</strong> support ${metric}, down from ${from} in ${fromYear}.","stats.findingTrendUp":"of the products launched in <strong>${year}</strong> support ${metric}, up from ${from} in ${fromYear}.","stats.findingsEyebrow":"Key findings","stats.findingsHeading":"What the data says right now","stats.findingsIntro":"The headline numbers, recomputed on every catalog update.","stats.fullDataTableRows":"{rows, plural, other {Full data table (# rows)}}","stats.heroEyebrow":"Live stats \xB7 Rebuilt with every catalog update","stats.heroHeadline":"The state of the smart home ecosystem,","stats.heroHeadlineHighlight":"in numbers","stats.heroSubtitle":"Which platforms and protocols products actually work with, what they cost, how they are rated and who makes them, measured across the smart home products we track and recomputed with every catalog update.","stats.indexLabel":"Sections of these statistics","stats.labelAdoptionByYear":"Adoption by year","stats.labelAverageRating":"Average rating","stats.labelBrand":"Brand","stats.labelBrands":"Brands","stats.labelCatalog":"Catalog","stats.labelCategories":"Categories","stats.labelCategory":"Category","stats.labelCheapest":"Cheapest","stats.labelCiteThisPage":"Cite this page","stats.labelDownload":"Download","stats.labelFaq":"FAQ","stats.labelFeature":"Feature","stats.labelGoDeeper":"Go deeper","stats.labelHeadquarters":"Headquarters","stats.labelKeyFindings":"Key findings","stats.labelLaunchYear":"Launch year","stats.labelMedian":"Median","stats.labelMethodology":"Methodology","stats.labelMiddleHalfFrom":"Middle half from","stats.labelMiddleHalfTo":"to","stats.labelMostExpensive":"Most expensive","stats.labelPriceBand":"Price band","stats.labelPrices":"Prices","stats.labelProducts":"Products","stats.labelProductsPriced":"Products priced","stats.labelProductsRated":"Products rated","stats.labelRatingBand":"Rating band","stats.labelRatings":"Ratings","stats.labelReviews":"Reviews","stats.labelShare":"Share","stats.labelShareOfCatalog":"Share of catalog","stats.licenseText":"Free to reuse with attribution and a link back to this page.","stats.licenseTextDownload":"Free to reuse with attribution and a link back to the source page.","stats.matrixCellTitle":"${category}, ${metric}: ${supported} of ${total} products","stats.matrixHeading":"${group} by category","stats.matrixIntro":"The whole picture in one grid: every category against every option, and how much of that category supports it. Darker means a bigger share of the products in that row.","stats.matrixLegendHigh":"Higher share","stats.matrixLegendLow":"Lower share","stats.matrixLegendNa":"the category does not define the feature","stats.matrixNotApplicable":"n/a","stats.matrixNotApplicableTitle":"${metric}: not applicable to ${plural}","stats.matrixNote":"Each cell is the share of that category's products that support that option. Categories with fewer than ${sample} products are left out, and so are the ones where fewer than half of these options apply at all. Hover a cell for the exact count.","stats.matrixRowHeader":"Category","stats.metaDescription":"Independent smart home market data from a catalog of ${items} products across ${categories} categories and ${brands} brands: Matter and Thread adoption by launch year, ecosystem compatibility, prices and ratings. Free to cite.","stats.metaTitle":"Smart Home Statistics ${year}: Matter, Thread and Ecosystem Adoption","stats.methodCountBody":"A product counts as supporting a feature only when we have verified that support against the manufacturer's own documentation. Everything else counts as not supported, including the products whose spec sheet leaves the question open.","stats.methodCountHeading":"How support is counted","stats.methodDenominatorBody":"Every figure in a section divides by the same number: the products in the categories whose spec sheet asks at least one of that section's questions. That is 
1what makes the bars comparable to each other. Categories that ask none of them stay out entirely, because counting a product as lacking a feature its category never had would deflate every share with products that were never candidates. Each figure also carries its narrower reading, the share among the products whose own category asks that exact question, on its card and in the downloadable data.","stats.methodDenominatorHeading":"What each share is a share of","stats.methodEyebrow":"Methodology","stats.methodHeading":"How these numbers are built","stats.methodIntro":"How every figure on this page is built.","stats.methodLimitsBody":"This is a curated catalog of the smart home products worth comparing, not a census of everything on the market. It skews toward what is actually sold and reviewed in the categories we cover, and it does not include commercial or industrial equipment. Read every figure as a share of the products we track, not as a share of the whole smart home market.","stats.methodLimitsHeading":"What this data is not","stats.methodPriceBody":"Prices all come from ${store}, so the medians of two categories are comparable, and they are list prices, not discounted ones: a discount is a moment, not a price level. Products not sold there are left out of the price figures.","stats.methodPriceHeading":"How prices are measured","stats.methodSourceBody":"Every figure is computed from our own smart home catalog: ${items} products across ${categories} categories, each one documented feature by feature against the spec sheet that category defines, from the manufacturer's own documentation. The numbers are recomputed on every site build, so this page never lags behind the catalog.","stats.methodSourceHeading":"Where the data comes from","stats.methodYearBody":"Products are grouped by the year they were released, not by when we added them. Support can also arrive later through a firmware update, so a product can carry a feature that did not exist when it launched. The current year is still in progress and is drawn as a dashed line, and years with too small a sample are left out entirely.","stats.methodYearHeading":"Reading the launch year chart","stats.metricDetailBest":"Strongest","stats.metricDetailHeading":"${group}, one by one","stats.metricDetailIntro":"Where each one stands, and the categories leading and lagging on it.","stats.metricDetailWorst":"Weakest","stats.pageTitle":"Smart Home Statistics","stats.pressCtrlC":"Press Ctrl+C","stats.priceBandFrom":"${from} and up","stats.priceBandUnder":"Under ${to}","stats.priceBandsCaption":"Products by price band.","stats.priceBandsHeading":"What the catalog costs","stats.priceBandsTableLabel":"The numbers behind this bar","stats.priceByCategoryHeading":"Price range by category","stats.priceByMetricCaption":"Price of the products that support each option, and how many of them carry a listed price.","stats.priceByMetricHeading":"Price by ${group}","stats.priceByMetricIntro":"Where the products that support each option sit on the price scale. The bar covers the middle half of them and the dot is the median.","stats.priceByMetricNote":"This is what the products carrying each option cost, not what the option costs. A product rarely carries one of these on its own: it tends to be the newer, better equipped model of its line, and the whole spec sheet moves with the price.","stats.priceByMetricTableLabel":"The numbers behind this chart","stats.priceDiscountLabel":"Products with an active discount","stats.priceEyebrow":"Prices","stats.priceHeading":"What things cost","stats.priceIntro":"Median list price by category, all read from ${store} so the categories are comparable.","stats.priceMedianCut":"median cut ${percent}","stats.priceMedianLabel":"Median price across the catalog","stats.priceMedianMarker":"Median","stats.priceQuartileMarker":"Where the middle half sits","stats.priceRange":"${from} to ${to}","stats.priceRangeLabel":"Full price range","stats.priceScaleNote":"The axis is logarithmic: prices here span more than two orders of magnitude, and on a linear axis four fifths of the catalog would pile into the first fifth of the track. The dot is the median of the category and the bar runs from its cheapest product to its most expensive.","stats.priceSpanMarker":"Cheapest to most expensive","stats.priceTableCaption":"Price by category on ${store}. Categories with fewer than ${sample} listed products are left out.","stats.priceTableLabel":"Every category, as a table","stats.ratingAverageLabel":"Average rating out of 5","stats.ratingBandBelow":"Below ${to}","stats.ratingBandRange":"${from} to ${to}","stats.ratingBucketCaption":"Products by rating band.","stats.ratingBucketTableLabel":"The numbers behind this chart","stats.ratingBucketTitle":"${band}: ${count} products","stats.ratingByCategoryHeading":"Ratings by category","stats.ratingDistributionHeading":"How the ratings are distributed","stats.ratingEyebrow":"Ratings","stats.ratingHeading":"How products are rated","stats.ratingIntro":"Customer ratings across the ${count} products with a published score, backed by ${reviews} reviews in total.","stats.ratingMedianLabel":"Median rating","stats.ratingReviewsLabel":"Customer reviews behind those ratings","stats.ratingTableCaption":"Average customer rating by category, and the review volume behind it.","stats.relatedEyebrow":"Go deeper","stats.relatedHeading":"See the products behind the numbers","stats.relatedIntro":"Every figure above is a filter over the catalog. These pages list the products each one counts.","stats.shareOf":"${supported} of ${total}","stats.showAllBrands":"Show more brands","stats.showAllCategories":"Show all categories","stats.showRemainingRows":"{rows, plural, other {Show the remaining # rows}}","stats.treemapLabelDefault":"Treemap","stats.variableAverageRatingDescription":"Average rating out of 5 across the ${rated} rated products, backed by ${reviews} customer reviews.","stats.variableAverageRatingName":"Average customer rating","stats.variableMedianPriceDescription":"Median list price across the ${count} tracked products listed on ${store}.","stats.variableMedianPriceName":"Median product price","stats.variableSupportShareDescription":"${supported} of ${inScope} tracked products with a ${year} launch year.","stats.variableSupportShareName":"${label}
1 support share, products launched in ${year}","stats.yearChartTitle":"Adoption by product launch year","stats.yearColumnTitle":"${year}: ${share} of the catalog","stats.yearEyebrow":"Adoption over time","stats.yearHeading":"Adoption by product launch year","stats.yearIntro":"The same measurement, split by the year each product was released. This is the closest the catalog gets to a trend line: it shows what manufacturers were shipping each year, not what the installed base looks like.","stats.yearNote":"Years before ${from} are left out: they hold too few products for a share to mean anything. ${current} is still in progress and is drawn dashed. A year only appears when every series has at least ${sample} products in it.","stats.yearTableCaption":"Share of each launch year's products that support the feature, with the sample in brackets.","stats.yearTableLabel":"The numbers behind this chart","stats.yearInProgress":"${year} (in progress)","store.actionBuild":"Build","store.actionBuy":"Buy","store.actionInstall":"Install","store.actionItem":"${action} ${item}","store.actionOnStore":"${action} on ${store}","store.actionReserve":"Reserve","store.allGuides":"All Guides","store.allSources":"All Sources","store.allStores":"All Stores","store.amazonRegion":"Amazon ${region}","store.buyItemOnStore":"Buy ${item} on ${store}","store.buyOnStore":"Buy on ${store}","store.chooseGuide":"Choose a guide","store.chooseSource":"Choose a source","store.chooseStore":"Choose a store","store.comparePricesAt":"Compare prices at ${count} stores","store.comparePricesOther":"Compare prices at other stores","store.officialStore":"Official Store","table.clear":"Clear","table.clearSelectionTitle":"Clear selection","table.closePanel":"Close panel","table.compare":"Compare","table.compareAllCount":"Compare all ${count} ${plural}","table.compareCtaPageSubtitle":"One table with every product in the catalog: filter by what you need, sort by price or rating, and pin the ones you are deciding between.","table.compareCtaSubtitle":"Side-by-side table with filters and sorting","table.compareWith":"Compare With","table.compareWithColon":"Compare with:","table.editorialAriaDefault":"About","table.faqTitle":"Frequently Asked Questions","table.filters":"Filters","table.loadMore":"Load more","table.loadNMore":"Load ${count} more","table.moreInfo":"More info","table.noResults":"No results","table.onlyDifferences":"Only differences","table.onlyDifferencesTitle":"Hide rows where all shown products are equal","table.openSelection":"Open selection","table.pickBestSeller":"Best Seller","table.pickBestValue":"Best Value","table.pickBiggestDiscount":"Biggest Discount","table.pickTopRated":"Top Rated","table.pickWhyRating":"Rated ${rating} stars across ${reviews} reviews.","table.productCount":"{count, plural, one {# product} other {# products}}","table.productsLeft":"{count, plural, one {# product left} other {# products left}}","table.productsNoun":"products","table.quickLinkEyebrow":"${plural} with","table.readFullReview":"Read full review","table.resetFilters":"Reset all filters","table.searchPlaceholder":"Search...","table.selectAtLeastTwo":"Select at least 2 products to compare.","table.selectNone":"Select","table.selectOption":"Select option","table.selectToCompare":"Select to compare","table.showingResults":"Showing ${shown} of ${total} results","table.slideToCompare":"Slide to compare ${products}","table.slideToCompareAll":"Slide to compare all ${products}","table.sortBy":"Sort by:","table.sortDefault":"Default","table.sortName":"Name","table.topPicksHeading":"The best ${plural} right now","table.topPicksLabel":"Top picks","table.topPicksTitle":"Our top picks","table.viewDiff":"Diff","table.viewFull":"Full","topRated.sectionReviewsWeighed":"${reviews} reviews weighed","useCases.columnActions":"Actions","useCases.columnPrice":"Price","useCases.columnProduct":"Product","useCases.columnRating":"Rating","useCases.columnReviews":"Reviews","useCases.exploreUseCase":"Explore ${useCase}","useCases.heroEyebrowDefault":"Use case","useCases.heroHeadlineDefault":"Start from your goal","useCases.itemListName":"${useCase} top picks","useCases.keyTakeaways":"Key takeaways","useCases.picksTitleDefault":"Top picks for this use case","useCases.related":"Related use cases","useCases.seeAllCategory":"See all ${category}","useCases.title":"Use cases","useCases.usedFor":"Used for","useCases.view":"View","vs.affiliateDisclosureLabel":"Affiliate disclosure","vs.affiliateDisclosureTitle":"Affiliate Disclosure","vs.brandGalleryDescription":"A sharper look at other ${brand} products worth comparing.","vs.bulletCon":"- ${title}: ${own} vs ${other}","vs.columnFeature":"Feature","vs.compareAllSubtitle":"You are looking at two of them. The full table lines up all ${plural} in the catalog with the same specs, so you can filter by what you need and sort by price or rating.","vs.compareAllTitle":"Compare all ${count}${nbsp}${plural} side by side","vs.dataSourceAmazonOnly":"Data from Amazon.","vs.dataSourceGeneric":"Data from Amazon and official brand sites.","vs.dataSourceOneBrand":"Data from Amazon and official ${brand} site.","vs.dataSourceTwoBrands":"Data from Amazon and official ${brand1} and ${brand2} sites.","vs.differencesTitle":"What the differences mean","vs.differentStrengths":"Different strengths","vs.fallbackCompetingAdvantages":"the competing advantages","vs.fallbackLeadingSpecs":"its leading specs","vs.fallbackOtherAreas":"other areas","vs.fallbackOwnStrengths":"its specific strengths","vs.fallbackSomeAreas":"some areas","vs.faqDifferenceA":"${feature} is one of the clearest differences: ${item1} lists ${value1}, while ${item2} lists ${value2}.","vs.faqDifferenceQ":"What is the biggest difference between ${item1} and ${item2}?","vs.faqOverallQ":"Which is better overall: ${item1} or ${item2}?","vs.faqOverallTieA":"This one is close. ${item1} leads in ${areas1}, while ${item2} leads in ${areas2}.","vs.faqOverallWinnerA":"${item} has the stronger overall profile in this comparison, especially for ${specs}.","vs.faqPriceA":"${item1} is listed at ${value1}, while ${item2} is listed at ${value2}. ${verdict}.","vs.faqPriceQ":"Which one looks better on price?","vs.faqWhoShouldBuyA":"Choose ${item} if your priority is ${priority} and that matters more than ${alternative}.","vs.faqWhoShouldBuyQ":"Who should buy ${item}?","vs.headToHead":"Head to head","vs.headToHeadWithPlural":"${plural} \xB7 Head to head","vs.leadFallback":"its strongest specs","vs.loserStrengthsFallback":"its specific feature mix","vs.metaCounter"
1:"${loser} wins on ${lead}.","vs.metaDescriptionTail":"Full ${year} spec-by-spec comparison.","vs.metaSplit":"${item1} leads on ${lead1}, ${item2} leads on ${lead2}.","vs.metaTitleDecisionSuffix":": Which to Buy?","vs.metaVerdict":"Winner: ${winner}, ahead on ${lead}.","vs.none":"None","vs.ownersTitle":"What owners say","vs.pairLabel":"${item1} vs ${item2}","vs.priceAboveLow":"{months, plural, one {${percent}% above its lowest price of the last month (${low})} other {${percent}% above its lowest price of the last # months (${low})}}","vs.priceAtLow":"{months, plural, one {Lowest price of the last month} other {Lowest price of the last # months}}","vs.priceHistoryStore":"Prices at ${store}","vs.priceHistorySubtitle":"Every price change of both, in the same store, so the gap between the two lines is what one costs more than the other.","vs.priceHistoryTitle":"Price history compared","vs.priceUnavailable":"Price unavailable right now","vs.reasonBetterSpec":"better spec","vs.reasonBothSupported":"both supported","vs.reasonDifferentStrengths":"different strengths","vs.reasonIncludedFeature":"included feature","vs.reasonListedSpecification":"listed specification","vs.reasonMatchingFeatureCount":"matching supported feature count","vs.reasonMatchingSpec":"matching spec","vs.reasonMoreFeatures":"more supported features","vs.scenariosTitle":"Which one to buy if","vs.secondaryFallback":"its broader overall balance","vs.swapAlt":"swap","vs.tie":"Tie","vs.upgradeTitle":"Upgrading from the ${item}?","vs.valueUnknown":"Unknown","vs.verdictTieClose0":"That makes this a use-case decision, not a blanket recommendation.","vs.verdictTieClose1":"The better pick depends on which side of the tradeoff matters more in y
1our setup.","vs.verdictTieClose2":"This is really about fit, not about one product winning everything.","vs.verdictTieClose3":"There is a real tradeoff here, so your priorities matter more than the headline verdict.","vs.verdictTieClose4":"Neither product wins cleanly enough to erase the other's strengths.","vs.verdictTieClose5":"The deciding factor is which advantages matter more in day-to-day use.","vs.verdictTieClose6":"This is less about a universal winner and more about choosing the right fit.","vs.verdictTieClose7":"That is why the final recommendation depends on your specific use case.","vs.verdictTieClose8":"The overall result stays balanced because each product solves a different problem better.","vs.verdictTieClose9":"The smarter buy is the one whose strengths line up with your priorities.","vs.verdictTieEnding0":"For most buyers, the right answer is whichever set of strengths matches the job better.","vs.verdictTieEnding1":"That leaves the final choice tied to context rather than to a single winner.","vs.verdictTieEnding2":"So the better buy is the one that matches your own priority list more closely.","vs.verdictTieEnding3":"In practice, this is a fit question more than a ranking question.","vs.verdictTieEnding4":"That is why the verdict stays conditional instead of absolute.","vs.verdictTieEnding5":"Both products still have a valid case, just for different buyers.","vs.verdictTieEnding6":"So the final call should be made around use case, not brand alone.","vs.verdictTieEnding7":"There is enough separation here to keep this from becoming a one-line answer.","vs.verdictTieEnding8":"That keeps the verdict useful without pretending there is a fake winner.","vs.verdictTieEnding9":"The smartest move is to buy the product whose strengths you will actually use.","vs.verdictTieMiddle0":"Choose {item1} if {item1Lead} and {item1Secondary} matter more to you.","vs.verdictTieMiddle1":"Go with {item1} for {item1Lead} and {item1Secondary}, but choose {item2} for {item2Lead} and {item2Secondary}.","vs.verdictTieMiddle2":"{item1} is the better fit for {item1Lead} and {item1Secondary}, while {item2} makes more sense for {item2Lead} and {item2Secondary}.","vs.verdictTieMiddle3":"Pick {item1} if your priority is {item1Lead} and {item1Secondary}; pick {item2} if you care more about {item2Lead} and {item2Secondary}.","vs.verdictTieMiddle4":"{item1} wins on {item1Lead} and {item1Secondary}, but {item2} answers with stronger results on {item2Lead} and {item2Secondary}.","vs.verdictTieMiddle5":"The decision comes down to priorities: {item1} is better for {item1Lead} and {item1Secondary}, while {item2} is better for {item2Lead} and {item2Secondary}.","vs.verdictTieMiddle6":"Choose between them based on fit: {item1} leads on {item1Lead} and {item1Secondary}, while {item2} leads on {item2Lead} and {item2Secondary}.","vs.verdictTieMiddle7":"{item1} is the stronger choice if you care about {item1Lead} and {item1Secondary}, but {item2} is better if {item2Lead} and {item2Secondary} matter more.","vs.verdictTieMiddle8":"{item1} makes the stronger case on {item1Lead} and {item1Secondary}, whereas {item2} is the better match for {item2Lead} and {item2Secondary}.","vs.verdictTieMiddle9":"There is no universal winner: {item1} is better for {item1Lead} and {item1Secondary}, while {item2} is better for {item2Lead} and {item2Secondary}.","vs.verdictTieOpening0":"{item1} vs {item2} is a close call in {year}: {item1} leads on {item1Lead}, while {item2} leads on {item2Lead}.","vs.verdictTieOpening1":"There is no clear winner between {item1} and {item2} in {year}; {item1} wins on {item1Lead} and {item2} wins on {item2Lead}.","vs.verdictTieOpening2":"In this {year} comparison, neither {item1} nor {item2} fully pulls away: {item1} takes {item1Lead}, {item2} takes {item2Lead}.","vs.verdictTieOpening3":"{item1} vs {item2} is a genuine split in {year}, with {item1} stronger on {item1Lead} and {item2} stronger on {item2Lead}.","vs.verdictTieOpening4":"For most buyers in {year}, {item1} and {item2} stay close: {item1} leads {item1Lead}, {item2} leads {item2Lead}.","vs.verdictTieOpening5":"There is no obvious leader between {item1} and {item2} in {year}; {item1} edges {item1Lead} while {item2} edges {item2Lead}.","vs.verdictTieOpening6":"{item1} and {item2} are balanced enough in {year} to stay conditional: {item1} on {item1Lead}, {item2} on {item2Lead}.","vs.verdictTieOpening7":"The {year} {item1} vs {item2} result is too close for a universal winner, with each leading a different area ({
1item1Lead} vs {item2Lead}).","vs.verdictTieOpening8":"In {year}, the {item1} vs {item2} verdict is conditional: {item1} wins {item1Lead}, {item2} wins {item2Lead}.","vs.verdictTieOpening9":"{item1} vs {item2} remains a tight race in {year}, split between {item1Lead} and {item2Lead}.","vs.verdictWinnerClose0":"Choose {loser} only if {loserStrengths} {loserStrengths#matters|matter} more to you than the broader advantage from {winner}.","vs.verdictWinnerClose1":"{loser} still makes sense if {loserStrengths} {loserStrengths#is|are} your priority, but most buyers should still lean toward {winner}.","vs.verdictWinnerClose2":"Pick {loser} only when {loserStrengths} {loserStrengths#is|are} the deciding factor for your setup.","vs.verdictWinnerClose3":"{loser} is still relevant if you care most about {loserStrengths}, but {winner} is the stronger recommendation overall.","vs.verdictWinnerClose4":"{loser} remains a niche alternative if {loserStrengths} {loserStrengths#matters|matter} more than the rest of the comparison.","vs.verdictWinnerClose5":"There is still a case for {loser}, but mainly if {loserStrengths} {loserStrengths#is|are} what you value most.","vs.verdictWinnerClose6":"{loser} is the better fit only for buyers who prioritize {loserStrengths} above everything else here.","vs.verdictWinnerClose7":"You should still consider {loser} if {loserStrengths} {loserStrengths#matters|matter} more than raw overall balance.","vs.verdictWinnerClose8":"{loser} can still be the right pick, but only if {loserStrengths} {loserStrengths#outweighs|outweigh} the wider strengths of {winner}.","vs.verdictWinnerClose9":"The only strong reason to choose {loser} is if {loserStrengths} {loserStrengths#is|are} more important to you than the overall verdict.","vs.verdictWinnerEnding0":"For most setups, {winner} is the smarter buy.","vs.verdictWinnerEnding1":"That makes {winner} the clearer recommendation in {year}.","vs.verdictWinnerEnding2":"For the average buyer, {winner} is the safer choice.","vs.verdictWinnerEnding3":"That is why {winner} wins the verdict here.","vs.verdictWinnerEnding4":"Overall, {winner} makes more sense for most people.","vs.verdictWinnerEnding5":"That keeps the verdict firmly in favor of {winner}.","vs.verdictWinnerEnding6":"In practical terms, {winner} is the easier product to recommend.","vs.verdictWinnerEnding7":"That is enough to make {winner} the better pick for most buyers.","vs.verdictWinnerEnding8":"As a general recommendation, {winner} comes out on top.","vs.verdictWinnerEnding9":"That is why the final call still favors {winner}.","vs.verdictWinnerMiddle0":"It has the clearer edge on {lead}, and it stays ahead on {secondary}.","vs.verdictWinnerMiddle1":"Its strongest advantages show up in {lead}, with {secondary} helping widen the gap.","vs.verdictWinnerMiddle2":"The main reason it wins is {lead}, and {secondary} {secondary#strengthens|strengthen} that case.","vs.verdictWinnerMiddle3":"It separates itself most clearly on {lead}, while still looking better on {secondary}.","vs.verdictWinnerMiddle4":"Its biggest wins come from {lead}, and {secondary} {secondary#adds|add} more confidence to the verdict.","vs.verdictWinnerMiddle5":"It builds its lead on {lead}, then backs it up with a stronger showing on {secondary}.","vs.verdictWinnerMiddle6":"The comparison tilts its way because of {lead}, with {secondary} keeping it in front.","vs.verdictWinnerMiddle7":"Its clearest strengths are {lead}, and it still looks stronger on {secondary}.","vs.verdictWinnerMiddle8":"It wins the broader comparison through {lead}, while {secondary} {secondary#helps|help} confirm the result.","vs.verdictWinnerMiddle9":"What pushes it ahead is {lead}, and {secondary} {secondary#keeps|keep} the advantage from looking narrow.","vs.verdictWinnerOpening0":"Between {winner} and {loser}, {winner} is the better overall pick in {year}, leading on {lead}.","vs.verdictWinnerOpening1":"{winner} beats {loser} in {year}, with its clearest edge on {lead}.","vs.verdictWinnerOpening2":"In this {year} {winner} vs {loser} comparison, {winner} comes out ahead thanks to {lead}.","vs.verdictWinnerOpening3":"{winner} wins the {year} matchup against {loser}, mainly on {lead}.","vs.verdictWinnerOpening4":"For most buyers in {year}, {winner} is the safer pick over {loser} because of {lead}.","vs.verdictWinnerOpening5":"{winner} edges out {loser} in {year}, led by {lead}.","vs.verdictWinnerOpening6":"In {year}, the recommendation leans toward {winner} over {loser}, driven by {lead}.","vs.verdictWinnerOpening7":"{winner} has the better all-around case than {loser} in {year}, starting with {lead}.","vs.verdictWinnerOpening8":"{winner} is the more complete option versus {loser} in {year}, helped most by {lead}.","vs.verdictWinnerOpening9":"Across the {year} comparison, {winner} earns the nod over {loser} on the strength of {lead}.","vs.versus":"vs","vs.viableFeatureSet":"+ ${item} has a viable feature set with no obvious deal-breaker in the available data.","vs.winner":"Winner","vs.yearVerdictEyebrow":"${year} verdict","worldMap.brandCount":"{count, plural, one {# brand} other {# brands}}"},i18nMessages=typeof I18N_MESSAGES<"u"?I18N_MESSAGES:{}
1,i18nLocale=typeof I18N_LOCALE<"u"?I18N_LOCALE:"en",i18nUsedKeys={},i18nCatalogLoaded=typeof I18N_MESSAGES<"u";function setMessages(r,t){i18nMessages=r??{},t!=null&&(i18nLocale=t),i18nUsedKeys={},i18nCatalogLoaded=!0}function i18nAddMessages(r){r!=null&&Object.keys(r).forEach(function(t){i18nMessages[t]==null&&(i18nMessages[t]=r[t])})}function usedMessageKeys(){return Object.keys(i18nUsedKeys).sort()}function messageKeys(){return Object.keys(i18nMessages).sort()}function missingMessage(r){return typeof process<"u"&&process.exit!=null&&process.exit(1),r}var I18N_PLURAL_RE=/^\{\s*([A-Za-z0-9_]+)\s*,\s*plural\s*,\s*(.+)\}$/s;function resolvePlural(r,t){var o=I18N_PLURAL_RE.exec(r.trim());if(o==null)return r;var l=o[1],d=t!=null?Number(t[l]):NaN;if(!isFinite(d))return r;var m=readPluralForms(o[2]),f=new Intl.PluralRules(i18nLocale).select(d),w=m[f]!=null?m[f]:m.other;return w==null?r:w.split("#").join(String(d))}function readPluralForms(r){for(var t={},o=0;o<r.length;){var l=/([A-Za-z0-9=]+)\s*\{/.exec(r.slice(o));if(l==null)break;for(var d=o+l.index+l[0].length,m=1,f=d;f<r.length&&m>0;)r[f]==="{"?m=m+1:r[f]==="}"&&(m=m-1),m>0&&(f=f+1);t[l[1]]=r.slice(d,f),o=f+1}return t}function i18n(r,t){i18nUsedKeys[r]=!0;var o=i18nMessages[r];return o==null?missingMessage(r):(o=resolvePlural(o,t),t==null||Object.keys(t).forEach(function(l){o=o.split("${"+l+"}").join(String(t[l]))}),o)}function i18nHas(r){return i18nMessages[r]==null?!1:(i18nUsedKeys[r]=!0,!0)}function i18nGroup(r){var t=r+".",o=null;return Object.keys(i18nMessages).forEach(function(l){if(l.indexOf(t)===0){i18nUsedKeys[l]=!0,o==null&&(o={});for(var d=l.slice(t.length).split("."),m=o,f=0;f<d.length-1;f++)(m[d[f]]==null||typeof m[d[f]]!="object")&&(m[d[f]]={}),m=m[d[f]];m[d[d.length-1]]=i18nMessages[l]}}),o==null?null:i18nGroupLists(o)}function i18nGroupLists(r){if(r==null||typeof r!="object")return r;var t=Object.keys(r);if(t.forEach(function(l){r[l]=i18nGroupLists(r[l])}),t.length===0)return r;for(var o=1;o<=t.length;o++)if(!Object.prototype.hasOwnProperty.call(r,String(o)))return r;return t.map(function(l,d){return r[String(d+1)]})}var i18nFormatters={};function i18nIntlLocale(){return i18nCatalogLoaded?i18n("locale.intl"):"en-US"}function i18nMeasurementSystem(){return i18nCatalogLoaded?i18n("locale.measurementSystem"):"imperial"}function i18nUsesIntlRegionNames(){return i18nCatalogLoaded&&i18n("locale.regionNames")==="intl"}function i18nLanguageTag(){return i18nLocale}function i18nFormatter(r,t){var o=i18nIntlLocale(),l=r+"|"+o+"|"+(t!=null?JSON.stringify(t):""),d=i18nFormatters[l];return d==null&&(r==="number"?d=new Intl.NumberFormat(o,t):r==="date"?d=new Intl.DateTimeFormat(o,t):r==="list"?d=new Intl.ListFormat(o,t):r==="region"?d=new Intl.DisplayNames([o],t):d=new Intl.Collator(o,t),i18nFormatters[l]=d),d}var i18nCompactSuffixCanon={},i18nCompactReferenceValues=[1e3,1e6,1e9,1e12];function i18nCompactCanonicalSuffixes(r,t){var o=i18nCompactSuffixCanon[r];if(o!=null)return o;var l={};return i18nCompactReferenceValues.forEach(function(d){var m=t.formatToParts(d).find(function(w){return w.type==="compact"});if(m!=null){var f=m.value.toLowerCase();l[f]==null&&(l[f]=m.value)}}),i18nCompactSuffixCanon[r]=l,l}function i18nNumber(r,t){var o=i18nFormatter("number",t);if(t==null||t.notation!=="compact")return o.format(r);var l=i18nCompactCanonicalSuffixes(i18nIntlLocale(),o);return o.formatToParts(r).map(function(d){if(d.type!=="compact")return d.value;var m=l[d.value.toLowerCase()];return m??d.value}).join("")}function i18nDecimalString(r,t){var o=String(r).trim(),l=/^-?\d+(?:\.(\d{1,20}))?$/.exec(o);if(l==null)return String(r);var d=l[1]!=null?l[1].length:0;return i18nNumber(Number(o),{minimumFractionDigits:d,maximumFractionDigits:d,useGrouping:t??"min2"})}function i18nFixed(r,t){return i18nDecimalString(Number(r).toFixed(t),!1)}function i18nSeparator(r){for(var t=i18nFormatter("number").formatToParts(12345.6),o=0;o<t.length;o++)if(t[o].type===r)return t[o].value;return r==="decimal"?".":","}function i18nEscapeRegExp(r){return r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function i18nParseNumber(r){if(typeof r=="number")return r;if(r==null)return NaN;var t=i18nSeparator("group"),o=i18nSeparator("decimal"),l=new RegExp("-?\\d(?:[\\d"+i18nEscapeRegExp(t)+"]*\\d)?(?:"+i18nEscapeRegExp(o)+"\\d+)?"),d=String(r).match(l);return d==null?NaN:parseFloat(d[0].split(t).join("").split(o).join("."))}function i18nList(r){return i18nFormatter("list",{style:"long",type:"conjunction"}).format(r)}function i18nCompare(r,t){return i18nFormatter("collator").compare(String(r),String(t))}function i18nDate(r,t){return i18nFormatter("date",t).format(r)}function i18nRegionName(r,t){if(!i18nUsesIntlRegionNames()||r==null||r==="")return t;try{var o=i18nFormatter("region",{type:"region",fallback:"none"}).of(String(r).toUpperCase());return o??t}catch{return t}}function i18nFold(r){return String(r??"").normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase()}if(typeof global<"u"&&typeof module<"u"&&module.exports){var i18nExports={i18n,i18nHas,i18nGroup,setMessages,i18nAddMessages,usedMessageKeys,messageKeys,i18nIntlLocale,i18nMeasurementSystem,i18nUsesIntlRegionNames,i18nLanguageTag,i18nNumber,i18nDecimalString,i18nFixed,i18nParseNumber,i18nList,i18nCompare,i18nDate,i18nRegionName,i18nFold};
1Object.keys(i18nExports).forEach(function(r){global[r]=i18nExports[r],module.exports[r]=i18nExports[r]})}(function(r,t){typeof module=="object"&&typeof module.exports=="object"?module.exports=r.document?t(r,!0):function(o){if(!o.document)throw new Error("jQuery requires a window with a document");return t(o)}:t(r)})(typeof window<"u"?window:this,function(r,t){var o=[],l=o.slice,d=o.concat,m=o.push,f=o.indexOf,w={},x=w.toString,I=w.hasOwnProperty,N={},_=r.document,Y="2.1.4",a=function(e,n){return new a.fn.init(e,n)},oe=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,G=/^-ms-/,le=/-([\da-z])/gi,me=function(e,n){return n.toUpperCase()};a.fn=a.prototype={jquery:Y,constructor:a,selector:"",length:0,toArray:function(){return l.call(this)},get:function(e){return e!=null?0>e?this[e+this.length]:this[e]:l.call(this)},pushStack:function(e){var n=a.merge(this.constructor(),e);return n.prevObject=this,n.context=this.context,n},each:function(e,n){return a.each(this,e,n)},map:function(e){return this.pushStack(a.map(this,function(n,i){return e.call(n,i,n)}))},slice:function(){return this.pushStack(l.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var n=this.length,i=+e+(0>e?n:0);return this.pushStack(i>=0&&n>i?[this[i]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:m,sort:o.sort,splice:o.splice},a.extend=a.fn.extend=function(){var e,n,i,s,c,u,p=arguments[0]||{},g=1,S=arguments.length,L=!1;for(typeof p=="boolean"&&(L=p,p=arguments[g]||{},g++),typeof p=="object"||a.isFunction(p)||(p={}),g===S&&(p=this,g--);S>g;g++)if((e=arguments[g])!=null)for(n in e)i=p[n],s=e[n],p!==s&&(L&&s&&(a.isPlainObject(s)||(c=a.isArray(s)))?(c?(c=!1,u=i&&a.isArray(i)?i:[]):u=i&&a.isPlainObject(i)?i:{},p[n]=a.extend(L,u,s)):s!==void 0&&(p[n]=s));return p},a.extend({expando:"jQuery"+(Y+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isFunction:function(e){return a.type(e)==="function"},isArray:Array.isArray,isWindow:function(e){return e!=null&&e===e.window},isNumeric:function(e){return!a.isArray(e)&&e-parseFloat(e)+1>=0},isPlainObject:function(e){return a.type(e)!=="object"||e.nodeType||a.isWindow(e)?!1:!(e.constructor&&!I.call(e.constructor.prototype,"isPrototypeOf"))},isEmptyObject:function(e){var n;for(n in e)return!1;return!0},type:function(e){return e==null?e+"":typeof e=="object"||typeof e=="function"?w[x.call(e)]||"object":typeof e},globalEval:function(e){var n,i=eval;e=a.trim(e),e&&(e.indexOf("use strict")===1?(n=_.createElement("script"),n.text=e,_.head.appendChild(n).parentNode.removeChild(n)):i(e))},camelCase:function(e){return e.replace(G,"ms-").replace(le,me)},nodeName:function(e,n){return e.nodeName&&e.nodeName.toLowerCase()===n.toLowerCase()},each:function(e,n,i){var s,c=0,u=e.length,p=pe(e);if(i){if(p)for(;u>c&&(s=n.apply(e[c],i),s!==!1);c++);else for(c in e)if(s=n.apply(e[c],i),s===!1)break}else if(p)for(;u>c&&(s=n.call(e[c],c,e[c]),s!==!1);c++);else for(c in e)if(s=n.call(e[c],c,e[c]),s===!1)break;return e},trim:function(e){return e==null?"":(e+"").replace(oe,"")},makeArray:function(e,n){var i=n||[];return e!=null&&(pe(Object(e))?a.merge(i,typeof e=="string"?[e]:e):m.call(i,e)),i},inArray:function(e,n,i){return n==null?-1:f.call(n,e,i)},merge:function(e,n){for(var i=+n.length,s=0,c=e.length;i>s;s++)e[c++]=n[s];return e.length=c,e},grep:function(e,n,i){for(var s,c=[],u=0,p=e.length,g=!i;p>u;u++)s=!n(e[u],u),s!==g&&c.push(e[u]);return c},map:function(e,n,i){var s,c=0,u=e.length,p=pe(e),g=[];if(p)for(;u>c;c++)s=n(e[c],c,i),s!=null&&g.push(s);else for(c in e)s=n(e[c],c,i),s!=null&&g.push(s);return d.apply([],g)},guid:1,proxy:function(e,n){var i,s,c;return typeof n=="string"&&(i=e[n],n=e,e=i),a.isFunction(e)?(s=l.call(arguments,2),c=function(){return e.apply(n||this,s.concat(l.call(arguments)))},c.guid=e.guid=e.guid||a.guid++,c):void 0},now:Date.now,support:N}),a.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,n){w["[object "+n+"]"]=n.toLowerCase()});function pe(e){var n="length"in e&&e.length,i=a.type(e);return i==="function"||a.isWindow(e)?!1:e.nodeType===1&&n?!0:i==="array"||n===0||typeof n=="number"&&n>0&&n-1 in e}
1var ne=(function(e){var n,i,s,c,u,p,g,S,L,E,B,H,O,ae,Z,re,Ne,Te,Oe,U="sizzle"+1*new Date,Ee=e.document,ie=0,Ce=0,Fe=Rt(),vt=Rt(),Be=Rt(),Ve=function(h,y){return h===y&&(B=!0),0},je=1<<31,qe={}.hasOwnProperty,$e=[],Ie=$e.pop,mr=$e.push,We=$e.push,kn=$e.slice,Ye=function(h,y){for(var b=0,A=h.length;A>b;b++)if(h[b]===y)return b;return-1},_t="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",he="[\\x20\\t\\r\\n\\f]",Ze="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",xn=Ze.replace("w","w#"),$n="\\["+he+"*("+Ze+")(?:"+he+"*([*^$|!~]?=)"+he+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+xn+"))|)"+he+"*\\]",Bt=":("+Ze+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+$n+")*)|.*)\\)|)",gr=new RegExp(he+"+","g"),bt=new RegExp("^"+he+"+|((?:^|[^\\\\])(?:\\\\.)*)"+he+"+$","g"),yr=new RegExp("^"+he+"*,"+he+"*"),vr=new RegExp("^"+he+"*([>+~]|"+he+")"+he+"*"),br=new RegExp("="+he+`*([^\\]'"]*?)`+he+"*\\]","g"),wr=new RegExp(Bt),Sr=new RegExp("^"+xn+"$"),wt={ID:new RegExp("^#("+Ze+")"),CLASS:new RegExp("^\\.("+Ze+")"),TAG:new RegExp("^("+Ze.replace("w","w*")+")"),ATTR:new RegExp("^"+$n),PSEUDO:new RegExp("^"+Bt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+he+"*(even|odd|(([+-]|)(\\d*)n|)"+he+"*(?:([+-]|)"+he+"*(\\d+)|))"+he+"*\\)|)","i"),bool:new RegExp("^(?:"+_t+")$","i"),needsContext:new RegExp("^"+he+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+he+"*((?:-\\d)?\\d*)"+he+"*\\)|)(?=[^-]|$)","i")},Cr=/^(?:input|select|textarea|button)$/i,Tr=/^h\d$/i,st=/^[^{]+\{\s*\[native \w/,Er=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Ht=/[+~]/,Ar=/'|\\/g,Re=new RegExp("\\\\([\\da-f]{1,6}"+he+"?|("+he+")|.)","ig"),Me=function(h,y,b){var A="0x"+y-65536;return A!==A||b?y:0>A?String.fromCharCode(A+65536):String.fromCharCode(A>>10|55296,1023&A|56320)},Pn=function(){H()};try{We.apply($e=kn.call(Ee.childNodes),Ee.childNodes),$e[Ee.childNodes.length].nodeType}catch{We={apply:$e.length?function(y,b){mr.apply(y,kn.call(b))}:function(y,b){for(var A=y.length,T=0;y[A++]=b[T++];);y.length=A-1}}}function ve(h,y,b,A){var T,$,D,F,V,te,K,X,be,se;if((y?y.ownerDocument||y:Ee)!==O&&H(y),y=y||O,b=b||[],F=y.nodeType,typeof h!="string"||!h||F!==1&&F!==9&&F!==11)return b;if(!A&&Z){if(F!==11&&(T=Er.exec(h)))if(D=T[1]){if(F===9){if($=y.getElementById(D),!$||!$.parentNode)return b;if($.id===D)return b.push($),b}else if(y.ownerDocument&&($=y.ownerDocument.getElementById(D))&&Oe(y,$)&&$.id===D)return b.push($),b}else{if(T[2])return We.apply(b,y.getElementsByTagName(h)),b;if((D=T[3])&&i.getElementsByClassName)return We.apply(b,y.getElementsByClassName(D)),b}if(i.qsa&&(!re||!re.test(h))){if(X=K=U,be=y,se=F!==1&&h,F===1&&y.nodeName.toLowerCase()!=="object"){for(te=p(h),(K=y.getAttribute("id"))?X=K.replace(Ar,"\\$&"):y.setAttribute("id",X),X="[id='"+X+"'] ",V=te.length;V--;)te[V]=X+St(te[V]);be=Ht.test(h)&&Ot(y.parentNode)||y,se=te.join(",")}if(se)try{return We.apply(b,be.querySelectorAll(se)),b}catch{}finally{K||y.removeAttribute("id")}}}return S(h.replace(bt,"$1"),y,b,A)}function Rt(){var h=[];function y(b,A){return h.push(b+" ")>s.cacheLength&&delete y[h.shift()],y[b+" "]=A}return y}function _e(h){return h[U]=!0,h}function He(h){var y=O.createElement("div");try{return!!h(y)}catch{return!1}finally{y.parentNode&&y.parentNode.removeChild(y),y=null}}function Mt(h,y){for(var b=h.split("|"),A=h.length;A--;)s.attrHandle[b[A]]=y}function Dn(h,y){var b=y&&h,A=b&&h.nodeType===1&&y.nodeType===1&&(~y.sourceIndex||je)-(~h.sourceIndex||je);if(A)return A;if(b){for(;b=b.nextSibling;)if(b===y)return-1}return h?1:-1}function Lr(h){return function(y){var b=y.nodeName.toLowerCase();return b==="input"&&y.type===h}}function kr(h){return function(y){var b=y.nodeName.toLowerCase();return(b==="input"||b==="button")&&y.type===h}}function Ge(h){return _e(function(y){return y=+y,_e(function(b,A){for(var T,$=h([],b.length,y),D=$.length;D--;)b[T=$[D]]&&(b[T]=!(A[T]=b[T]))})})}function Ot(h){return h&&typeof h.getElementsByTagName<"u"&&h}i=ve.support={},u=ve.isXML=function(h){var y=h&&(h.ownerDocument||h).documentElement;return y?y.nodeName!=="HTML":!1},H=ve.setDocument=function(h){var y,b,A=h?h.ownerDocument||h:Ee;return A!==O&&A.nodeType===9&&A.documentElement?(O=A,ae=A.documentElement,b=A.defaultView,b&&b!==b.top&&(b.addEventListener?b.addEventListener("unload",Pn,!1):b.attachEvent&&b.attachEvent("onunload",Pn)),Z=!u(A),i.attributes=He(function(T){return T.className="i",!T.getAttribute("className")}),i.getElementsByTagName=He(function(T){return T.appendChild(A.createComment("")),!T.getElementsByTagName("*").length}),i.getElementsByClassName=st.test(A.getElementsByClassName),i.getById=He(function(T){return ae.appendChild(T).id=U,!A.getElementsByName||!A.getElementsByName(U).length}),i.getById?(s.find.ID=function(T,$){if(typeof $.getElementById<"u"&&Z){var D=$.getElementById(T);return D&&D.parentNode?[D]:[]}},s.filter.ID=function(T){var $=T.replace(Re,Me);return function(D){return D.getAttribute("id")===$}}):(delete s.find.ID,s.filter.ID=function(T){var $=T.replace(Re,Me);return function(D){var F=typeof D.getAttributeNode<"u"&&D.getAttributeNode("id");return F&&F.value===$}}),s.find.TAG=i.getElementsByTagName?function(T,$){return typeof $.getElementsByTagName<"u"?$.getElementsByTagName(T):i.qsa?$.querySelectorAll(T):void 0}:function(T,$){var D,F=[],V=0,te=$.getElementsByTagName(T);if(T==="*"){for(;D=te[V++];)D.nodeType===1&&F.push(D);return F}return te},s.find.CLASS=i.getElementsByClassName&&function(T,$){return Z?$.getElementsByClassName(T):void 0},Ne=[],re=[],(i.qsa=st.test(A.querySelectorAll))&&(He(function(T){ae.appendChild(T).innerHTML="<a id='"+U+"'></a><select id='"+U+"-\f]' msallowcapture=''><option selected=''></option></select>",T.querySelectorAll("[msallowcapture^='']").length&&re.push("[*^$]="+he+`*(?:''|"")`),T.querySelectorAll("[selected]").length||re.push("\\["+he+"*(?:value|"+_t+")"),T.querySelectorAll("[id~="+U+"-]").length||re.push("~="),T.querySelectorAll(":checked").length||re.push(":checked"),T.querySelectorAll("a#"+U+"+*").length||re.push(".#.+[+~]")}),He(function(T){var $=A.createElement("input");$.setAttribute("type","hidden"),T.appendChild($).setAttribute("name","D"),T.querySelectorAll("[name=d]").length&&re.push("name"+he+"*[*^$|!~]?="),T.querySelectorAll(":enabled").length||re.push(":enabled",":disabled"),T.querySelectorAll("*,:x"),re.push(",.*:")})),(i.matchesSelector=st.test(Te=ae.matches||ae.webkitMatchesSelector||ae.mozMatchesSelector||ae.oMatchesSelector||ae.msMatchesSelector))&&He(function(T){i.disconnectedMatch=Te.call(T,"div"),Te.call(T,"[s!='']:x"),Ne.push("!=",Bt)}),re=re.length&&new RegExp(re.join("|")),Ne=Ne.length&&new RegExp(Ne.join("|")),y=st.test(ae.compareDocumentPosition),Oe=y||st.test(ae.contains)?function(T,$){var D=T.nodeType===9?T.documentElement:T,F=$&&$.parentNode;return T===F||!(!F||F.nodeType!==1||!(D.contains?D.contains(F):T.compareDocumentPosition&&16&T.compareDocumentPosition(F)))}:function(T,$){if($){for(;$=$.parentNode;)if($===T)return!0}return!1},Ve=y?function(T,$){if(T===$)return B=!0,0;var D=!T.compareDocumentPosition-!$.compareDocumentPosition;return D||(D=(T.ownerDocument||T)===($.ownerDocument||$)?T.compareDocumentPosition($):1,1&D||!i.sortDetached&&$.compareDocumentPosition(T)===D?T===A||T.ownerDocument===Ee&&Oe(Ee,T)?-1:$===A||$.ownerDocument===Ee&&Oe(Ee,$)?1:E?Ye(E,T)-Ye(E,$):0:4&D?-1:1)}:function(T,$){if(T===$)return B=!0,0;var D,F=0,V=T.parentNode,te=$.parentNode,K=[T],X=[$];if(!V||!te)return T===A?-1:$===A?1:V?-1:te?1:E?Ye(E,T)-Ye(E,$):0;if(V===te)return Dn(T,$);for(D=T;D=D.parentNode;)K.unshift(D);for(D=$;D=D.parentNode;)X.unshift(D);for(;K[F]===X[F];)F++;return F?Dn(K[F],X[F]):K[F]===Ee?-1:X[F]===Ee?1:0},A):O},ve.matches=function(h,y){return ve(h,null,null,y)}
vendor: 4,073 bytes, line 1
1,ve.matchesSelector=function(h,y){if((h.ownerDocument||h)!==O&&H(h),y=y.replace(br,"='$1']"),!(!i.matchesSelector||!Z||Ne&&Ne.test(y)||re&&re.test(y)))try{var b=Te.call(h,y);if(b||i.disconnectedMatch||h.document&&h.document.nodeType!==11)return b}catch{}return ve(y,O,null,[h]).length>0},ve.contains=function(h,y){return(h.ownerDocument||h)!==O&&H(h),Oe(h,y)},ve.attr=function(h,y){(h.ownerDocument||h)!==O&&H(h);var b=s.attrHandle[y.toLowerCase()],A=b&&qe.call(s.attrHandle,y.toLowerCase())?b(h,y,!Z):void 0;return A!==void 0?A:i.attributes||!Z?h.getAttribute(y):(A=h.getAttributeNode(y))&&A.specified?A.value:null},ve.error=function(h){throw new Error("Syntax error, unrecognized expression: "+h)},ve.uniqueSort=function(h){var y,b=[],A=0,T=0;if(B=!i.detectDuplicates,E=!i.sortStable&&h.slice(0),h.sort(Ve),B){for(;y=h[T++];)y===h[T]&&(A=b.push(T));for(;A--;)h.splice(b[A],1)}return E=null,h},c=ve.getText=function(h){var y,b="",A=0,T=h.nodeType;if(T){if(T===1||T===9||T===11){if(typeof h.textContent=="string")return h.textContent;for(h=h.firstChild;h;h=h.nextSibling)b+=c(h)}else if(T===3||T===4)return h.nodeValue}else for(;y=h[A++];)b+=c(y);return b},s=ve.selectors={cacheLength:50,createPseudo:_e,match:wt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(h){return h[1]=h[1].replace(Re,Me),h[3]=(h[3]||h[4]||h[5]||"").replace(Re,Me),h[2]==="~="&&(h[3]=" "+h[3]+" "),h.slice(0,4)},CHILD:function(h){return h[1]=h[1].toLowerCase(),h[1].slice(0,3)==="nth"?(h[3]||ve.error(h[0]),h[4]=+(h[4]?h[5]+(h[6]||1):2*(h[3]==="even"||h[3]==="odd")),h[5]=+(h[7]+h[8]||h[3]==="odd")):h[3]&&ve.error(h[0]),h},PSEUDO:function(h){var y,b=!h[6]&&h[2];return wt.CHILD.test(h[0])?null:(h[3]?h[2]=h[4]||h[5]||"":b&&wr.test(b)&&(y=p(b,!0))&&(y=b.indexOf(")",b.length-y)-b.length)&&(h[0]=h[0].slice(0,y),h[2]=b.slice(0,y)),h.slice(0,3))}},filter:{TAG:function(h){var y=h.replace(Re,Me).toLowerCase();return h==="*"?function(){return!0}:function(b){return b.nodeName&&b.nodeName.toLowerCase()===y}},CLASS:function(h){var y=Fe[h+" "];return y||(y=new RegExp("(^|"+he+")"+h+"("+he+"|$)"))&&Fe(h,function(b){return y.test(typeof b.className=="string"&&b.className||typeof b.getAttribute<"u"&&b.getAttribute("class")||"")})},ATTR:function(h,y,b){return function(A){var T=ve.attr(A,h);return T==null?y==="!=":y?(T+="",y==="="?T===b:y==="!="?T!==b:y==="^="?b&&T.indexOf(b)===0:y==="*="?b&&T.indexOf(b)>-1:y==="$="?b&&T.slice(-b.length)===b:y==="~="?(" "+T.replace(gr," ")+" ").indexOf(b)>-1:y==="|="?T===b||T.slice(0,b.length+1)===b+"-":!1):!0}},CHILD:function(h,y,b,A,T){var $=h.slice(0,3)!=="nth",D=h.slice(-4)!=="last",F=y==="of-type";return A===1&&T===0?function(V){return!!V.parentNode}:function(V,te,K){var X,be,se,fe,Ae,Le,Pe=$!==D?"nextSibling":"previousSibling",we=V.parentNode,lt=F&&V.nodeName.toLowerCase(),ct=!K&&!F;if(we){if($){for(;Pe;){for(se=V;se=se[Pe];)if(F?se.nodeName.toLowerCase()===lt:se.nodeType===1)return!1;Le=Pe=h==="only"&&!Le&&"nextSibling"}return!0}if(Le=[D?we.firstChild:we.lastChild],D&&ct){for(be=we[U]||(we[U]={}),X=be[h]||[],Ae=X[0]===ie&&X[1],fe=X[0]===ie&&X[2],se=Ae&&we.childNodes[Ae];se=++Ae&&se&&se[Pe]||(fe=Ae=0)||Le.pop();)if(se.nodeType===1&&++fe&&se===V){be[h]=[ie,Ae,fe];break}}else if(ct&&(X=(V[U]||(V[U]={}))[h])&&X[0]===ie)fe=X[1];else for(;(se=++Ae&&se&&se[Pe]||(fe=Ae=0)||Le.pop())&&!((F?se.nodeName.toLowerCase()===lt:se.nodeType===1)&&++fe&&(ct&&((se[U]||(se[U]={}))[h]=[ie,fe]),se===V)););return fe-=T,fe===A||fe%A===0&&fe/A>=0}}},PSEUDO:function(h,y){var b,A=s.pseudos[h]||s.setFilters[h.toLowerCase()]||ve.error("unsupported pseudo: "+h);return A[U]?A(y):A.length>1?(b=[h,h,"",y],s.setFilters.hasOwnProperty(h.toLowerCase())?_e(function(T,$){for(var D,F=A(T,y),V=F.length;V--;)D=Ye(T,F[V]),T[D]=!($[D]=F[V])}):function(T){return A(T,0,b)}):A}},pseudos:{not:_e(function(h){var y=[],b=[],A=g(h.replace(bt,"$1"));return A[U]?_e(function(T,$,D,F){for(var V,te=A(T,null,F,[]),K=T.length;K--;)(V=te[K])&&(T[K]=!($[K]=V))}
1):function(T,$,D){return y[0]=T,A(y,null,D,b),y[0]=null,!b.pop()}}),has:_e(function(h){return function(y){return ve(h,y).length>0}}),contains:_e(function(h){return h=h.replace(Re,Me),function(y){return(y.textContent||y.innerText||c(y)).indexOf(h)>-1}}),lang:_e(function(h){return Sr.test(h||"")||ve.error("unsupported lang: "+h),h=h.replace(Re,Me).toLowerCase(),function(y){var b;do if(b=Z?y.lang:y.getAttribute("xml:lang")||y.getAttribute("lang"))return b=b.toLowerCase(),b===h||b.indexOf(h+"-")===0;while((y=y.parentNode)&&y.nodeType===1);return!1}}),target:function(h){var y=e.location&&e.location.hash;return y&&y.slice(1)===h.id},root:function(h){return h===ae},focus:function(h){return h===O.activeElement&&(!O.hasFocus||O.hasFocus())&&!!(h.type||h.href||~h.tabIndex)},enabled:function(h){return h.disabled===!1},disabled:function(h){return h.disabled===!0},checked:function(h){var y=h.nodeName.toLowerCase();return y==="input"&&!!h.checked||y==="option"&&!!h.selected},selected:function(h){return h.parentNode&&h.parentNode.selectedIndex,h.selected===!0},empty:function(h){for(h=h.firstChild;h;h=h.nextSibling)if(h.nodeType<6)return!1;return!0},parent:function(h){return!s.pseudos.empty(h)},header:function(h){return Tr.test(h.nodeName)},input:function(h){return Cr.test(h.nodeName)},button:function(h){var y=h.nodeName.toLowerCase();return y==="input"&&h.type==="button"||y==="button"},text:function(h){var y;return h.nodeName.toLowerCase()==="input"&&h.type==="text"&&((y=h.getAttribute("type"))==null||y.toLowerCase()==="text")},first:Ge(function(){return[0]}),last:Ge(function(h,y){return[y-1]}),eq:Ge(function(h,y,b){return[0>b?b+y:b]}),even:Ge(function(h,y){for(var b=0;y>b;b+=2)h.push(b);return h}),odd:Ge(function(h,y){for(var b=1;y>b;b+=2)h.push(b);return h}),lt:Ge(function(h,y,b){for(var A=0>b?b+y:b;--A>=0;)h.push(A);return h}),gt:Ge(function(h,y,b){for(var A=0>b?b+y:b;++A<y;)h.push(A);return h})}},s.pseudos.nth=s.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})s.pseudos[n]=Lr(n);for(n in{submit:!0,reset:!0})s.pseudos[n]=kr(n);function Nn(){}Nn.prototype=s.filters=s.pseudos,s.setFilters=new Nn,p=ve.tokenize=function(h,y){var b,A,T,$,D,F,V,te=vt[h+" "];if(te)return y?0:te.slice(0);for(D=h,F=[],V=s.preFilter;D;){(!b||(A=yr.exec(D)))&&(A&&(D=D.slice(A[0].length)||D),F.push(T=[])),b=!1,(A=vr.exec(D))&&(b=A.shift(),T.push({value:b,type:A[0].replace(bt," ")}),D=D.slice(b.length));for($ in s.filter)!(A=wt[$].exec(D))||V[$]&&!(A=V[$](A))||(b=A.shift(),T.push({value:b,type:$,matches:A}),D=D.slice(b.length));if(!b)break}return y?D.length:D?ve.error(h):vt(h,F).slice(0)};function St(h){for(var y=0,b=h.length,A="";b>y;y++)A+=h[y].value;return A}function Ft(h,y,b){var A=y.dir,T=b&&A==="parentNode",$=Ce++;return y.first?function(D,F,V){for(;D=D[A];)if(D.nodeType===1||T)return h(D,F,V)}:function(D,F,V){var te,K,X=[ie,$];if(V){for(;D=D[A];)if((D.nodeType===1||T)&&h(D,F,V))return!0}else for(;D=D[A];)if(D.nodeType===1||T){if(K=D[U]||(D[U]={}),(te=K[A])&&te[0]===ie&&te[1]===$)return X[2]=te[2];if(K[A]=X,X[2]=h(D,F,V))return!0}}}function jt(h){return h.length>1?function(y,b,A){for(var T=h.length;T--;)if(!h[T](y,b,A))return!1;return!0}:h[0]}function xr(h,y,b){for(var A=0,T=y.length;T>A;A++)ve(h,y[A],b);return b}function Ct(h,y,b,A,T){for(var $,D=[],F=0,V=h.length,te=y!=null;V>F;F++)($=h[F])&&(!b||b($,A,T))&&(D.push($),te&&y.push(F));return D}function qt(h,y,b,A,T,$){return A&&!A[U]&&(A=qt(A)),T&&!T[U]&&(T=qt(T,$)),_e(function(D,F,V,te){var K,X,be,se=[],fe=[],Ae=F.length,Le=D||xr(y||"*",V.nodeType?[V]:V,[]),Pe=!h||!D&&y?Le:Ct(Le,se,h,V,te),we=b?T||(D?h:Ae||A)?[]:F:Pe;if(b&&b(Pe,we,V,te),A)for(K=Ct(we,fe),A(K,[],V,te),X=K.length;X--;)(be=K[X])&&(we[fe[X]]=!(Pe[fe[X]]=be));if(D){if(T||h){if(T){for(K=[],X=we.length;X--;)(be=we[X])&&K.push(Pe[X]=be);T(null,we=[],K,te)}for(X=we.length;X--;)(be=we[X])&&(K=T?Ye(D,be):se[X])>-1&&(D[K]=!(F[K]=be))}}else we=Ct(we===F?we.splice(Ae,we.length):we),T?T(null,F,we,te):We.apply(F,we)})}function Wt(h){for(var y,b,A,T=h.length,$=s.relative[h[0].type],D=$||s.relative[" "],F=$?1:0,V=Ft(function(X){return X===y},D,!0),te=Ft(function(X){return Ye(y,X)>-1},D,!0),K=[function(X,be,se){var fe=!$&&(se||be!==L)||((y=be).nodeType?V(X,be,se):te(X,be,se));return y=null,fe}];T>F;F++)if(b=s.relative[h[F].type])K=[Ft(jt(K),b)];else{if(b=s.filter[h[F].type].apply(null,h[F].matches),b[U]){for(A=++F;T>A&&!s.relative[h[A].type];A++);return qt(F>1&&jt(K),F>1&&St(h.slice(0,F-1).concat({value:h[F-2].type===" "?"*":""})).replace(bt,"$1"),b,A>F&&Wt(h.slice(F,A)),T>A&&Wt(h=h.slice(A)),T>A&&St(h))}K.push(b)}return jt(K)}function $r(h,y){var b=y.length>0,A=h.length>0,T=function($,D,F,V,te){var K,X,be,se=0,fe="0",Ae=$&&[],Le=[],Pe=L,we=$||A&&s.find.TAG("*",te),lt=ie+=Pe==null?1:Math.random()||.1,ct=we.length;for(te&&(L=D!==O&&D);fe!==ct&&(K=we[fe])!=null;fe++){if(A&&K){for(X=0;be=h[X++];)if(be(K,D,F)){V.push(K);break}te&&(ie=lt)}b&&((K=!be&&K)&&se--,$&&Ae.push(K))}if(se+=fe,b&&fe!==se){for(X=0;be=y[X++];)be(Ae,Le,D,F);if($){if(se>0)for(;fe--;)Ae[fe]||Le[fe]||(Le[fe]=Ie.call(V));Le=Ct(Le)}We.apply(V,Le),te&&!$&&Le.length>0&&se+y.length>1&&ve.uniqueSort(V)}return te&&(ie=lt,L=Pe),Ae};return b?_e(T):T}return g=ve.compile=function(h,y){var b,A=[],T=[],$=Be[h+" "];
1if(!$){for(y||(y=p(h)),b=y.length;b--;)$=Wt(y[b]),$[U]?A.push($):T.push($);$=Be(h,$r(T,A)),$.selector=h}return $},S=ve.select=function(h,y,b,A){var T,$,D,F,V,te=typeof h=="function"&&h,K=!A&&p(h=te.selector||h);if(b=b||[],K.length===1){if($=K[0]=K[0].slice(0),$.length>2&&(D=$[0]).type==="ID"&&i.getById&&y.nodeType===9&&Z&&s.relative[$[1].type]){if(y=(s.find.ID(D.matches[0].replace(Re,Me),y)||[])[0],!y)return b;te&&(y=y.parentNode),h=h.slice($.shift().value.length)}for(T=wt.needsContext.test(h)?0:$.length;T--&&(D=$[T],!s.relative[F=D.type]);)if((V=s.find[F])&&(A=V(D.matches[0].replace(Re,Me),Ht.test($[0].type)&&Ot(y.parentNode)||y))){if($.splice(T,1),h=A.length&&St($),!h)return We.apply(b,A),b;break}}return(te||g(h,K))(A,y,!Z,b,Ht.test(h)&&Ot(y.parentNode)||y),b},i.sortStable=U.split("").sort(Ve).join("")===U,i.detectDuplicates=!!B,H(),i.sortDetached=He(function(h){return 1&h.compareDocumentPosition(O.createElement("div"))}),He(function(h){return h.innerHTML="<a href='#'></a>",h.firstChild.getAttribute("href")==="#"})||Mt("type|href|height|width",function(h,y,b){return b?void 0:h.getAttribute(y,y.toLowerCase()==="type"?1:2)}),i.attributes&&He(function(h){return h.innerHTML="<input/>",h.firstChild.setAttribute("value",""),h.firstChild.getAttribute("value")===""})||Mt("value",function(h,y,b){return b||h.nodeName.toLowerCase()!=="input"?void 0:h.defaultValue}),He(function(h){return h.getAttribute("disabled")==null})||Mt(_t,function(h,y,b){var A;return b?void 0:h[y]===!0?y.toLowerCase():(A=h.getAttributeNode(y))&&A.specified?A.value:null}),ve})(r);a.find=ne,a.expr=ne.selectors,a.expr[":"]=a.expr.pseudos,a.unique=ne.uniqueSort,a.text=ne.getText,a.isXMLDoc=ne.isXML,a.contains=ne.contains;var ge=a.expr.match.needsContext,ue=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,z=/^.[^:#\[\.,]*$/;function C(e,n,i){if(a.isFunction(n))return a.grep(e,function(s,c){return!!n.call(s,c,s)!==i});if(n.nodeType)return a.grep(e,function(s){return s===n!==i});if(typeof n=="string"){if(z.test(n))return a.filter(n,e,i);n=a.filter(n,e)}return a.grep(e,function(s){return f.call(n,s)>=0!==i})}a.filter=function(e,n,i){var s=n[0];return i&&(e=":not("+e+")"),n.length===1&&s.nodeType===1?a.find.matchesSelector(s,e)?[s]:[]:a.find.matches(e,a.grep(n,function(c){return c.nodeType===1}))},a.fn.extend({find:function(e){var n,i=this.length,s=[],c=this;if(typeof e!="string")return this.pushStack(a(e).filter(function(){for(n=0;i>n;n++)if(a.contains(c[n],this))return!0}));for(n=0;i>n;n++)a.find(e,c[n],s);return s=this.pushStack(i>1?a.unique(s):s),s.selector=this.selector?this.selector+" "+e:e,s},filter:function(e){return this.pushStack(C(this,e||[],!1))},not:function(e){return this.pushStack(C(this,e||[],!0))},is:function(e){return!!C(this,typeof e=="string"&&ge.test(e)?a(e):e||[],!1).length}});var P,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ee=a.fn.init=function(e,n){var i,s;if(!e)return this;if(typeof e=="string"){if(i=e[0]==="<"&&e[e.length-1]===">"&&e.length>=3?[null,e,null]:q.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||P).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof a?n[0]:n,a.merge(this,a.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:_,!0)),ue.test(i[1])&&a.isPlainObject(n))for(i in n)a.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}return s=_.getElementById(i[2]),s&&s.parentNode&&(this.length=1,this[0]=s),this.context=_,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):a.isFunction(e)?typeof P.ready<"u"?P.ready(e):e(a):(e.selector!==void 0&&(this.selector=e.selector,this.context=e.context),a.makeArray(e,this))};ee.prototype=a.fn,P=a(_);var J=/^(?:parents|prev(?:Until|All))/,de={children:!0,contents:!0,next:!0,prev:!0};a.extend({dir:function(e,n,i){for(var s=[],c=i!==void 0;(e=e[n])&&e.nodeType!==9;)if(e.nodeType===1){if(c&&a(e).is(i))break;s.push(e)}return s},sibling:function(e,n){for(var i=[];e;e=e.nextSibling)e.nodeType===1&&e!==n&&i.push(e);return i}}),a.fn.extend({has:function(e){var n=a(e,this),i=n.length;return this.filter(function(){for(var s=0;i>s;s++)if(a.contains(this,n[s]))return!0})},closest:function(e,n){for(var i,s=0,c=this.length,u=[],p=ge.test(e)||typeof e!="string"?a(e,n||this.context):0;c>s;s++)for(i=this[s];i&&i!==n;i=i.parentNode)if(i.nodeType<11&&(p?p.index(i)>-1:i.nodeType===1&&a.find.matchesSelector(i,e))){u.push(i);break}return this.pushStack(u.length>1?a.unique(u):u)},index:function(e){return e?typeof e=="string"?f.call(a(e),this[0]):f.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,n){return this.pushStack(a.unique(a.merge(this.get(),a(e,n))))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}});function v(e,n){for(;(e=e[n])&&e.nodeType!==1;);return e}a.each({parent:function(e){var n=e.parentNode;return n&&n.nodeType!==11?n:null},parents:function(e){return a.dir(e,"parentNode")},parentsUntil:function(e,n,i){return a.dir(e,"parentNode",i)},next:function(e){return v(e,"nextSibling")},prev:function(e){return v(e,"previousSibling")},nextAll:function(e){return a.dir(e,"nextSibling")},prevAll:function(e){return a.dir(e,"previousSibling")},nextUntil:function(e,n,i){return a.dir(e,"nextSibling",i)},prevUntil:function(e,n,i){return a.dir(e,"previousSibling",i)},siblings:function(e){return a.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return a.sibling(e.firstChild)},contents:function(e){return e.contentDocument||a.merge([],e.childNodes)}},function(e,n){a.fn[e]=function(i,s){var c=a.map(this,n,i);return e.slice(-5)!=="Until"&&(s=i),s&&typeof s=="string"&&(c=a.filter(s,c)),this.length>1&&(de[e]||a.unique(c),J.test(e)&&c.reverse()),this.pushStack(c)}});var k=/\S+/g,R={};function j(e){var n=R[e]={};return a.each(e.match(k)||[],function(i,s){n[s]=!0}),n}a.Callbacks=function(e){e=typeof e=="string"?R[e]||j(e):a.extend({},e);var n,i,s,c,u,p,g=[],S=!e.once&&[],L=function(B){for(n=e.memory&&B,i=!0,p=c||0,c=0,u=g.length,s=!0;g&&u>p;p++)if(g[p].apply(B[0],B[1])===!1&&e.stopOnFalse){n=!1;break}s=!1,g&&(S?S.length&&L(S.shift()):n?g=[]:E.disable())},E={add:function(){if(g){var B=g.length;(function H(O){a.each(O,function(ae,Z){var re=a.type(Z);re==="function"?e.unique&&E.has(Z)||g.push(Z):Z&&Z.length&&re!=="string"&&H(Z)})})(arguments),s?u=g.length:n&&(c=B,L(n))}return this},remove:function(){return g&&a.each(arguments,function(B,H){for(var O;
1(O=a.inArray(H,g,O))>-1;)g.splice(O,1),s&&(u>=O&&u--,p>=O&&p--)}),this},has:function(B){return B?a.inArray(B,g)>-1:!(!g||!g.length)},empty:function(){return g=[],u=0,this},disable:function(){return g=S=n=void 0,this},disabled:function(){return!g},lock:function(){return S=void 0,n||E.disable(),this},locked:function(){return!S},fireWith:function(B,H){return!g||i&&!S||(H=H||[],H=[B,H.slice?H.slice():H],s?S.push(H):L(H)),this},fire:function(){return E.fireWith(this,arguments),this},fired:function(){return!!i}};return E},a.extend({Deferred:function(e){var n=[["resolve","done",a.Callbacks("once memory"),"resolved"],["reject","fail",a.Callbacks("once memory"),"rejected"],["notify","progress",a.Callbacks("memory")]],i="pending",s={state:function(){return i},always:function(){return c.done(arguments).fail(arguments),this},then:function(){var u=arguments;return a.Deferred(function(p){a.each(n,function(g,S){var L=a.isFunction(u[g])&&u[g];c[S[1]](function(){var E=L&&L.apply(this,arguments);E&&a.isFunction(E.promise)?E.promise().done(p.resolve).fail(p.reject).progress(p.notify):p[S[0]+"With"](this===s?p.promise():this,L?[E]:arguments)})}),u=null}).promise()},promise:function(u){return u!=null?a.extend(u,s):s}},c={};return s.pipe=s.then,a.each(n,function(u,p){var g=p[2],S=p[3];s[p[1]]=g.add,S&&g.add(function(){i=S},n[1^u][2].disable,n[2][2].lock),c[p[0]]=function(){return c[p[0]+"With"](this===c?s:this,arguments),this},c[p[0]+"With"]=g.fireWith}),s.promise(c),e&&e.call(c,c),c},when:function(e){var n=0,i=l.call(arguments),s=i.length,c=s!==1||e&&a.isFunction(e.promise)?s:0,u=c===1?e:a.Deferred(),p=function(E,B,H){return function(O){B[E]=this,H[E]=arguments.length>1?l.call(arguments):O,H===g?u.notifyWith(B,H):--c||u.resolveWith(B,H)}},g,S,L;if(s>1)for(g=new Array(s),S=new Array(s),L=new Array(s);s>n;n++)i[n]&&a.isFunction(i[n].promise)?i[n].promise().done(p(n,L,i)).fail(u.reject).progress(p(n,S,g)):--c;return c||u.resolveWith(L,i),u.promise()}});var M;a.fn.ready=function(e){return a.ready.promise().done(e),this},a.extend({isReady:!1,readyWait:1,holdReady:function(e){e?a.readyWait++:a.ready(!0)},ready:function(e){(e===!0?--a.readyWait:a.isReady)||(a.isReady=!0,e!==!0&&--a.readyWait>0||(M.resolveWith(_,[a]),a.fn.triggerHandler&&(a(_).triggerHandler("ready"),a(_).off("ready"))))}});function W(){_.removeEventListener("DOMContentLoaded",W,!1),r.removeEventListener("load",W,!1),a.ready()}a.ready.promise=function(e){return M||(M=a.Deferred(),_.readyState==="complete"?setTimeout(a.ready):(_.addEventListener("DOMContentLoaded",W,!1),r.addEventListener("load",W,!1))),M.promise(e)},a.ready.promise();var ce=a.access=function(e,n,i,s,c,u,p){var g=0,S=e.length,L=i==null;if(a.type(i)==="object"){c=!0;for(g in i)a.access(e,n,g,i[g],!0,u,p)}else if(s!==void 0&&(c=!0,a.isFunction(s)||(p=!0),L&&(p?(n.call(e,s),n=null):(L=n,n=function(E,B,H){return L.call(a(E),H)})),n))for(;S>g;
1g++)n(e[g],i,p?s:s.call(e[g],g,n(e[g],i)));return c?e:L?n.call(e):S?n(e[0],i):u};a.acceptData=function(e){return e.nodeType===1||e.nodeType===9||!+e.nodeType};function ye(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=a.expando+ye.uid++}ye.uid=1,ye.accepts=a.acceptData,ye.prototype={key:function(e){if(!ye.accepts(e))return 0;var n={},i=e[this.expando];if(!i){i=ye.uid++;try{n[this.expando]={value:i},Object.defineProperties(e,n)}catch{n[this.expando]=i,a.extend(e,n)}}return this.cache[i]||(this.cache[i]={}),i},set:function(e,n,i){var s,c=this.key(e),u=this.cache[c];if(typeof n=="string")u[n]=i;else if(a.isEmptyObject(u))a.extend(this.cache[c],n);else for(s in n)u[s]=n[s];return u},get:function(e,n){var i=this.cache[this.key(e)];return n===void 0?i:i[n]},access:function(e,n,i){var s;return n===void 0||n&&typeof n=="string"&&i===void 0?(s=this.get(e,n),s!==void 0?s:this.get(e,a.camelCase(n))):(this.set(e,n,i),i!==void 0?i:n)},remove:function(e,n){var i,s,c,u=this.key(e),p=this.cache[u];if(n===void 0)this.cache[u]={};else for(a.isArray(n)?s=n.concat(n.map(a.camelCase)):(c=a.camelCase(n),n in p?s=[n,c]:(s=c,s=s in p?[s]:s.match(k)||[])),i=s.length;i--;)delete p[s[i]]},hasData:function(e){return!a.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){e[this.expando]&&delete this.cache[e[this.expando]]}};var Q=new ye,Se=new ye,Ue=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ut=/([A-Z])/g;function Je(e,n,i){var s;if(i===void 0&&e.nodeType===1)if(s="data-"+n.replace(ut,"-$1").toLowerCase(),i=e.getAttribute(s),typeof i=="string"){try{i=i==="true"?!0:i==="false"?!1:i==="null"?null:+i+""===i?+i:Ue.test(i)?a.parseJSON(i):i}catch{}Se.set(e,n,i)}else i=void 0;return i}a.extend({hasData:function(e){return Se.hasData(e)||Q.hasData(e)},data:function(e,n,i){return Se.access(e,n,i)},removeData:function(e,n){Se.remove(e,n)},_data:function(e,n,i){return Q.access(e,n,i)},_removeData:function(e,n){Q.remove(e,n)}}),a.fn.extend({data:function(e,n){var i,s,c,u=this[0],p=u&&u.attributes;if(e===void 0){if(this.length&&(c=Se.get(u),u.nodeType===1&&!Q.get(u,"hasDataAttrs"))){for(i=p.length;i--;)p[i]&&(s=p[i].name,s.indexOf("data-")===0&&(s=a.camelCase(s.slice(5)),Je(u,s,c[s])));Q.set(u,"hasDataAttrs",!0)}return c}return typeof e=="object"?this.each(function(){Se.set(this,e)}):ce(this,function(g){var S,L=a.camelCase(e);if(u&&g===void 0){if(S=Se.get(u,e),S!==void 0||(S=Se.get(u,L),S!==void 0)||(S=Je(u,L,void 0),S!==void 0))return S}else this.each(function(){var E=Se.get(this,L);Se.set(this,L,g),e.indexOf("-")!==-1&&E!==void 0&&Se.set(this,e,g)})},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){Se.remove(this,e)})}}),a.extend({queue:function(e,n,i){var s;return e?(n=(n||"fx")+"queue",s=Q.get(e,n),i&&(!s||a.isArray(i)?s=Q.access(e,n,a.makeArray(i)):s.push(i)),s||[]):void 0}
1,dequeue:function(e,n){n=n||"fx";var i=a.queue(e,n),s=i.length,c=i.shift(),u=a._queueHooks(e,n),p=function(){a.dequeue(e,n)};c==="inprogress"&&(c=i.shift(),s--),c&&(n==="fx"&&i.unshift("inprogress"),delete u.stop,c.call(e,p,u)),!s&&u&&u.empty.fire()},_queueHooks:function(e,n){var i=n+"queueHooks";return Q.get(e,i)||Q.access(e,i,{empty:a.Callbacks("once memory").add(function(){Q.remove(e,[n+"queue",i])})})}}),a.fn.extend({queue:function(e,n){var i=2;return typeof e!="string"&&(n=e,e="fx",i--),arguments.length<i?a.queue(this[0],e):n===void 0?this:this.each(function(){var s=a.queue(this,e,n);a._queueHooks(this,e),e==="fx"&&s[0]!=="inprogress"&&a.dequeue(this,e)})},dequeue:function(e){return this.each(function(){a.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var i,s=1,c=a.Deferred(),u=this,p=this.length,g=function(){--s||c.resolveWith(u,[u])};for(typeof e!="string"&&(n=e,e=void 0),e=e||"fx";p--;)i=Q.get(u[p],e+"queueHooks"),i&&i.empty&&(s++,i.empty.add(g));return g(),c.promise(n)}});var et=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ze=["Top","Right","Bottom","Left"],tt=function(e,n){return e=n||e,a.css(e,"display")==="none"||!a.contains(e.ownerDocument,e)},Ut=/^(?:checkbox|radio)$/i;(function(){var e=_.createDocumentFragment(),n=e.appendChild(_.createElement("div")),i=_.createElement("input");i.setAttribute("type","radio"),i.setAttribute("checked","checked"),i.setAttribute("name","t"),n.appendChild(i),N.checkClone=n.cloneNode(!0).cloneNode(!0).lastChild.checked,n.innerHTML="<textarea>x</textarea>",N.noCloneChecked=!!n.cloneNode(!0).lastChild.defaultValue})();var nt="undefined";N.focusinBubbles="onfocusin"in r;var In=/^key/,_n=/^(?:mouse|pointer|contextmenu)|click/,zt=/^(?:focusinfocus|focusoutblur)$/,Vt=/^([^.]*)(?:\.(.+)|)$/;function dt(){return!0}function Qe(){return!1}function Yt(){try{return _.activeElement}catch{}}a.event={global:{}
vendor: 4,254 bytes, line 1
1,add:function(e,n,i,s,c){var u,p,g,S,L,E,B,H,O,ae,Z,re=Q.get(e);if(re)for(i.handler&&(u=i,i=u.handler,c=u.selector),i.guid||(i.guid=a.guid++),(S=re.events)||(S=re.events={}),(p=re.handle)||(p=re.handle=function(Ne){return typeof a!==nt&&a.event.triggered!==Ne.type?a.event.dispatch.apply(e,arguments):void 0}),n=(n||"").match(k)||[""],L=n.length;L--;)g=Vt.exec(n[L])||[],O=Z=g[1],ae=(g[2]||"").split(".").sort(),O&&(B=a.event.special[O]||{},O=(c?B.delegateType:B.bindType)||O,B=a.event.special[O]||{},E=a.extend({type:O,origType:Z,data:s,handler:i,guid:i.guid,selector:c,needsContext:c&&a.expr.match.needsContext.test(c),namespace:ae.join(".")},u),(H=S[O])||(H=S[O]=[],H.delegateCount=0,B.setup&&B.setup.call(e,s,ae,p)!==!1||e.addEventListener&&e.addEventListener(O,p,!1)),B.add&&(B.add.call(e,E),E.handler.guid||(E.handler.guid=i.guid)),c?H.splice(H.delegateCount++,0,E):H.push(E),a.event.global[O]=!0)},remove:function(e,n,i,s,c){var u,p,g,S,L,E,B,H,O,ae,Z,re=Q.hasData(e)&&Q.get(e);if(re&&(S=re.events)){for(n=(n||"").match(k)||[""],L=n.length;L--;)if(g=Vt.exec(n[L])||[],O=Z=g[1],ae=(g[2]||"").split(".").sort(),O){for(B=a.event.special[O]||{},O=(s?B.delegateType:B.bindType)||O,H=S[O]||[],g=g[2]&&new RegExp("(^|\\.)"+ae.join("\\.(?:.*\\.|)")+"(\\.|$)"),p=u=H.length;u--;)E=H[u],!c&&Z!==E.origType||i&&i.guid!==E.guid||g&&!g.test(E.namespace)||s&&s!==E.selector&&(s!=="**"||!E.selector)||(H.splice(u,1),E.selector&&H.delegateCount--,B.remove&&B.remove.call(e,E));p&&!H.length&&(B.teardown&&B.teardown.call(e,ae,re.handle)!==!1||a.removeEvent(e,O,re.handle),delete S[O])}else for(O in S)a.event.remove(e,O+n[L],i,s,!0);a.isEmptyObject(S)&&(delete re.handle,Q.remove(e,"events"))}},trigger:function(e,n,i,s){var c,u,p,g,S,L,E,B=[i||_],H=I.call(e,"type")?e.type:e,O=I.call(e,"namespace")?e.namespace.split("."):[];if(u=p=i=i||_,i.nodeType!==3&&i.nodeType!==8&&!zt.test(H+a.event.triggered)&&(H.indexOf(".")>=0&&(O=H.split("."),H=O.shift(),O.sort()),S=H.indexOf(":")<0&&"on"+H,e=e[a.expando]?e:new a.Event(H,typeof e=="object"&&e),e.isTrigger=s?2:3,e.namespace=O.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+O.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),n=n==null?[e]:a.makeArray(n,[e]),E=a.event.special[H]||{},s||!E.trigger||E.trigger.apply(i,n)!==!1)){if(!s&&!E.noBubble&&!a.isWindow(i)){for(g=E.delegateType||H,zt.test(g+H)||(u=u.parentNode);u;u=u.parentNode)B.push(u),p=u;p===(i.ownerDocument||_)&&B.push(p.defaultView||p.parentWindow||r)}for(c=0;(u=B[c++])&&!e.isPropagationStopped();)e.type=c>1?g:E.bindType||H,L=(Q.get(u,"events")||{})[e.type]&&Q.get(u,"handle"),L&&L.apply(u,n),L=S&&u[S],L&&L.apply&&a.acceptData(u)&&(e.result=L.apply(u,n),e.result===!1&&e.preventDefault());return e.type=H,s||e.isDefaultPrevented()||E._default&&E._default.apply(B.pop(),n)!==!1||!a.acceptData(i)||S&&a.isFunction(i[H])&&!a.isWindow(i)&&(p=i[S],p&&(i[S]=null),a.event.triggered=H,i[H](),a.event.triggered=void 0,p&&(i[S]=p)),e.result}},dispatch:function(e){e=a.event.fix(e);var n,i,s,c,u,p=[],g=l.call(arguments),S=(Q.get(this,"events")||{})[e.type]||[],L=a.event.special[e.type]||{};if(g[0]=e,e.delegateTarget=this,!L.preDispatch||L.preDispatch.call(this,e)!==!1){for(p=a.event.handlers.call(this,e,S),n=0;(c=p[n++])&&!e.isPropagationStopped();)for(e.currentTarget=c.elem,i=0;(u=c.handlers[i++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(u.namespace))&&(e.handleObj=u,e.data=u.data,s=((a.event.special[u.origType]||{}).handle||u.handler).apply(c.elem,g),s!==void 0&&(e.result=s)===!1&&(e.preventDefault(),e.stopPropagation()));return L.postDispatch&&L.postDispatch.call(this,e),e.result}},handlers:function(e,n){var i,s,c,u,p=[],g=n.delegateCount,S=e.target;if(g&&S.nodeType&&(!e.button||e.type!=="click")){for(;S!==this;S=S.parentNode||this)if(S.disabled!==!0||e.type!=="click"){for(s=[],i=0;g>i;i++)u=n[i],c=u.selector+" ",s[c]===void 0&&(s[c]=u.needsContext?a(c,this).index(S)>=0:a.find(c,this,null,[S]).length),s[c]&&s.push(u);s.length&&p.push({elem:S,handlers:s})}}return g<n.length&&p.push({elem:this,handlers:n.slice(g)}),p},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{}
1,keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,n){return e.which==null&&(e.which=n.charCode!=null?n.charCode:n.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var i,s,c,u=n.button;return e.pageX==null&&n.clientX!=null&&(i=e.target.ownerDocument||_,s=i.documentElement,c=i.body,e.pageX=n.clientX+(s&&s.scrollLeft||c&&c.scrollLeft||0)-(s&&s.clientLeft||c&&c.clientLeft||0),e.pageY=n.clientY+(s&&s.scrollTop||c&&c.scrollTop||0)-(s&&s.clientTop||c&&c.clientTop||0)),e.which||u===void 0||(e.which=1&u?1:2&u?3:4&u?2:0),e}},fix:function(e){if(e[a.expando])return e;var n,i,s,c=e.type,u=e,p=this.fixHooks[c];for(p||(this.fixHooks[c]=p=_n.test(c)?this.mouseHooks:In.test(c)?this.keyHooks:{}),s=p.props?this.props.concat(p.props):this.props,e=new a.Event(u),n=s.length;n--;)i=s[n],e[i]=u[i];return e.target||(e.target=_),e.target.nodeType===3&&(e.target=e.target.parentNode),p.filter?p.filter(e,u):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==Yt()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===Yt()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return this.type==="checkbox"&&this.click&&a.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(e){return a.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==void 0&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,n,i,s){var c=a.extend(new a.Event,i,{type:e,isSimulated:!0,originalEvent:{}});s?a.event.trigger(c,null,n):a.event.dispatch.call(n,c),c.isDefaultPrevented()&&i.preventDefault()}},a.removeEvent=function(e,n,i){e.removeEventListener&&e.removeEventListener(n,i,!1)},a.Event=function(e,n){return this instanceof a.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.defaultPrevented===void 0&&e.returnValue===!1?dt:Qe):this.type=e,n&&a.extend(this,n),this.timeStamp=e&&e.timeStamp||a.now(),void(this[a.expando]=!0)):new a.Event(e,n)},a.Event.prototype={isDefaultPrevented:Qe,isPropagationStopped:Qe,isImmediatePropagationStopped:Qe,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=dt,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=dt,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=dt,e&&e.stopImmediatePropagation&&e.stopImmediatePropagation(),this.stopPropagation()}}
1,a.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,n){a.event.special[e]={delegateType:n,bindType:n,handle:function(i){var s,c=this,u=i.relatedTarget,p=i.handleObj;return(!u||u!==c&&!a.contains(c,u))&&(i.type=p.origType,s=p.handler.apply(this,arguments),i.type=n),s}}}),N.focusinBubbles||a.each({focus:"focusin",blur:"focusout"},function(e,n){var i=function(s){a.event.simulate(n,s.target,a.event.fix(s),!0)};a.event.special[n]={setup:function(){var s=this.ownerDocument||this,c=Q.access(s,n);c||s.addEventListener(e,i,!0),Q.access(s,n,(c||0)+1)},teardown:function(){var s=this.ownerDocument||this,c=Q.access(s,n)-1;c?Q.access(s,n,c):(s.removeEventListener(e,i,!0),Q.remove(s,n))}}}),a.fn.extend({on:function(e,n,i,s,c){var u,p;if(typeof e=="object"){typeof n!="string"&&(i=i||n,n=void 0);for(p in e)this.on(p,n,i,e[p],c);return this}if(i==null&&s==null?(s=n,i=n=void 0):s==null&&(typeof n=="string"?(s=i,i=void 0):(s=i,i=n,n=void 0)),s===!1)s=Qe;else if(!s)return this;return c===1&&(u=s,s=function(g){return a().off(g),u.apply(this,arguments)},s.guid=u.guid||(u.guid=a.guid++)),this.each(function(){a.event.add(this,e,s,i,n)})},one:function(e,n,i,s){return this.on(e,n,i,s,1)},off:function(e,n,i){var s,c;if(e&&e.preventDefault&&e.handleObj)return s=e.handleObj,a(e.delegateTarget).off(s.namespace?s.origType+"."+s.namespace:s.origType,s.selector,s.handler),this;if(typeof e=="object"){for(c in e)this.off(c,n,e[c]);return this}return(n===!1||typeof n=="function")&&(i=n,n=void 0),i===!1&&(i=Qe),this.each(function(){a.event.remove(this,e,i,n)})},trigger:function(e,n){return this.each(function(){a.event.trigger(e,n,this)})},triggerHandler:function(e,n){var i=this[0];return i?a.event.trigger(e,n,i,!0):void 0}});var Gt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Jt=/<([\w:]+)/,Bn=/<|&#?\w+;/,Hn=/<(?:script|style|link)/i,Rn=/checked\s*(?:[^=]|=\s*.checked.)/i,Qt=/^$|\/(?:java|ecma)script/i,Mn=/^true\/(.*)/,On=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,De={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};De.optgroup=De.option,De.tbody=De.tfoot=De.colgroup=De.caption=De.thead,De.th=De.td;function Kt(e,n){return a.nodeName(e,"table")&&a.nodeName(n.nodeType!==11?n:n.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Fn(e){return e.type=(e.getAttribute("type")!==null)+"/"+e.type,e}function jn(e){var n=Mn.exec(e.type);return n?e.type=n[1]:e.removeAttribute("type"),e}function Tt(e,n){for(var i=0,s=e.length;s>i;i++)Q.set(e[i],"globalEval",!n||Q.get(n[i],"globalEval"))}function Xt(e,n){var i,s,c,u,p,g,S,L;if(n.nodeType===1){if(Q.hasData(e)&&(u=Q.access(e),p=Q.set(n,u),L=u.events)){delete p.handle,p.events={};for(c in L)for(i=0,s=L[c].length;s>i;i++)a.event.add(n,c,L[c][i])}Se.hasData(e)&&(g=Se.access(e),S=a.extend({},g),Se.set(n,S))}}function ke(e,n){var i=e.getElementsByTagName?e.getElementsByTagName(n||"*"):e.querySelectorAll?e.querySelectorAll(n||"*"):[];return n===void 0||n&&a.nodeName(e,n)?a.merge([e],i):i}function qn(e,n){var i=n.nodeName.toLowerCase();i==="input"&&Ut.test(e.type)?n.checked=e.checked:(i==="input"||i==="textarea")&&(n.defaultValue=e.defaultValue)}a.extend({clone:function(e,n,i){var s,c,u,p,g=e.cloneNode(!0),S=a.contains(e.ownerDocument,e);if(!(N.noCloneChecked||e.nodeType!==1&&e.nodeType!==11||a.isXMLDoc(e)))for(p=ke(g),u=ke(e),s=0,c=u.length;c>s;s++)qn(u[s],p[s]);if(n)if(i)for(u=u||ke(e),p=p||ke(g),s=0,c=u.length;c>s;s++)Xt(u[s],p[s]);else Xt(e,g);return p=ke(g,"script"),p.length>0&&Tt(p,!S&&ke(e,"script")),g},buildFragment:function(e,n,i,s){for(var c,u,p,g,S,L,E=n.createDocumentFragment(),B=[],H=0,O=e.length;O>H;H++)if(c=e[H],c||c===0)if(a.type(c)==="object")a.merge(B,c.nodeType?[c]:c);else if(Bn.test(c)){for(u=u||E.appendChild(n.createElement("div")),p=(Jt.exec(c)||["",""])[1].toLowerCase(),g=De[p]||De._default,u.innerHTML=g[1]+c.replace(Gt,"<$1></$2>")+g[2],L=g[0];L--;)u=u.lastChild;
1a.merge(B,u.childNodes),u=E.firstChild,u.textContent=""}else B.push(n.createTextNode(c));for(E.textContent="",H=0;c=B[H++];)if((!s||a.inArray(c,s)===-1)&&(S=a.contains(c.ownerDocument,c),u=ke(E.appendChild(c),"script"),S&&Tt(u),i))for(L=0;c=u[L++];)Qt.test(c.type||"")&&i.push(c);return E},cleanData:function(e){for(var n,i,s,c,u=a.event.special,p=0;(i=e[p])!==void 0;p++){if(a.acceptData(i)&&(c=i[Q.expando],c&&(n=Q.cache[c]))){if(n.events)for(s in n.events)u[s]?a.event.remove(i,s):a.removeEvent(i,s,n.handle);Q.cache[c]&&delete Q.cache[c]}delete Se.cache[i[Se.expando]]}}}),a.fn.extend({text:function(e){return ce(this,function(n){return n===void 0?a.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=n)})},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var n=Kt(this,e);n.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var n=Kt(this,e);n.insertBefore(e,n.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,n){for(var i,s=e?a.filter(e,this):this,c=0;(i=s[c])!=null;c++)n||i.nodeType!==1||a.cleanData(ke(i)),i.parentNode&&(n&&a.contains(i.ownerDocument,i)&&Tt(ke(i,"script")),i.parentNode.removeChild(i));return this},empty:function(){for(var e,n=0;(e=this[n])!=null;n++)e.nodeType===1&&(a.cleanData(ke(e,!1)),e.textContent="");return this},clone:function(e,n){return e=e??!1,n=n??e,this.map(function(){return a.clone(this,e,n)})},html:function(e){return ce(this,function(n){var i=this[0]||{},s=0,c=this.length;if(n===void 0&&i.nodeType===1)return i.innerHTML;if(typeof n=="string"&&!Hn.test(n)&&!De[(Jt.exec(n)||["",""])[1].toLowerCase()]){n=n.replace(Gt,"<$1></$2>");try{for(;c>s;s++)i=this[s]||{},i.nodeType===1&&(a.cleanData(ke(i,!1)),i.innerHTML=n);i=0}catch{}}i&&this.empty().append(n)},null,e,arguments.length)},replaceWith:function(){var e=arguments[0];return this.domManip(arguments,function(n){e=this.parentNode,a.cleanData(ke(this)),e&&e.replaceChild(n,this)}),e&&(e.length||e.nodeType)?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,n){e=d.apply([],e);var i,s,c,u,p,g,S=0,L=this.length,E=this,B=L-1,H=e[0],O=a.isFunction(H);if(O||L>1&&typeof H=="string"&&!N.checkClone&&Rn.test(H))return this.each(function(ae){var Z=E.eq(ae);O&&(e[0]=H.call(this,ae,Z.html())),Z.domManip(e,n)});if(L&&(i=a.buildFragment(e,this[0].ownerDocument,!1,this),s=i.firstChild,i.childNodes.length===1&&(i=s),s)){for(c=a.map(ke(i,"script"),Fn),u=c.length;L>S;S++)p=i,S!==B&&(p=a.clone(p,!0,!0),u&&a.merge(c,ke(p,"script"))),n.call(this[S],p,S);if(u)for(g=c[c.length-1].ownerDocument,a.map(c,jn),S=0;u>S;S++)p=c[S],Qt.test(p.type||"")&&!Q.access(p,"globalEval")&&a.contains(g,p)&&(p.src?a._evalUrl&&a._evalUrl(p.src):a.globalEval(p.textContent.replace(On,"")))}return this}}),a.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,n){a.fn[e]=function(i){for(var s,c=[],u=a(i),p=u.length-1,g=0;p>=g;g++)s=g===p?this:this.clone(!0),a(u[g])[n](s),m.apply(c,s.get());return this.pushStack(c)}});var pt,Zt={};function en(e,n){var i,s=a(n.createElement(e)).appendTo(n.body),c=r.getDefaultComputedStyle&&(i=r.getDefaultComputedStyle(s[0]))?i.display:a.css(s[0],"display");return s.detach(),c}function Et(e){var n=_,i=Zt[e];return i||(i=en(e,n),i!=="none"&&i||(pt=(pt||a("<iframe frameborder='0' width='0' height='0'/>")).appendTo(n.documentElement),n=pt[0].contentDocument,n.write(),n.close(),i=en(e,n),pt.detach()),Zt[e]=i),i}var tn=/^margin/,At=new RegExp("^("+et+")(?!px)[a-z%]+$","i"),ft=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):r.getComputedStyle(e,null)};function rt(e,n,i){var s,c,u,p,g=e.style;return i=i||ft(e),i&&(p=i.getPropertyValue(n)||i[n]),i&&(p!==""||a.contains(e.ownerDocument,e)||(p=a.style(e,n)),At.test(p)&&tn.test(n)&&(s=g.width,c=g.minWidth,u=g.maxWidth,g.minWidth=g.maxWidth=g.width=p,p=i.width,g.width=s,g.minWidth=c,g.maxWidth=u)),p!==void 0?p+"":p}function nn(e,n){return{get:function(){return e()?void delete this.get:(this.get=n).apply(this,arguments)}}}(function(){var e,n,i=_.documentElement,s=_.createElement("div"),c=_.createElement("div");if(c.style){let p=function(){c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",c.innerHTML="",i.appendChild(s);var g=r.getComputedStyle(c,null);e=g.top!=="1%",n=g.width==="4px",i.removeChild(s)};var u=p;c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",N.clearCloneStyle=c.style.backgroundClip==="content-box",s.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",s.appendChild(c),r.getComputedStyle&&a.extend(N,{pixelPosition:function(){return p(),e},boxSizingReliable:function(){return n==null&&p(),n},reliableMarginRight:function(){var g,S=c.appendChild(_.createElement("div"));return S.style.cssText=c.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",S.style.marginRight=S.style.width="0",c.style.width="1px",i.appendChild(s),g=!parseFloat(r.getComputedStyle(S,null).marginRight),i.removeChild(s),c.removeChild(S),g}})}})(),a.swap=function(e,n,i,s){var c,u,p={};for(u in n)p[u]=e.style[u],e.style[u]=n[u];c=i.apply(e,s||[]);for(u in n)e.style[u]=p[u];return c};var Wn=/^(none|table(?!-c[ea]).+)/,Un=new RegExp("^("+et+")(.*)$","i"),zn=new RegExp("^([+-])=("+et+")","i"),Vn={position:"absolute",visibility:"hidden",display:"block"},rn={letterSpacing:"0",fontWeight:"400"},an=["Webkit","O","Moz","ms"];function on(e,n){if(n in e)return n;for(var i=n[0].toUpperCase()+n.slice(1),s=n,c=an.length;c--;)if(n=an[c]+i,n in e)return n;return s}function sn(e,n,i){var s=Un.exec(n);return s?Math.max(0,s[1]-(i||0))+(s[2]||"px"):n}function ln(e,n,i,s,c){for(var u=i===(s?"border":"content")?4:n==="width"?1:0,p=0;4>u;u+=2)i==="margin"&&(p+=a.css(e,i+ze[u],!0,c)),s?(i==="content"&&(p-=a.css(e,"padding"+ze[u],!0,c)),i!=="margin"&&(p-=a.css(e,"border"+ze[u]+"Width",!0,c))):(p+=a.css(e,"padding"+ze[u],!0,c),i!=="padding"&&(p+=a.css(e,"border"+ze[u]+"Width",!0,c)));return p}function cn(e,n,i){var s=!0,c=n==="width"?e.offsetWidth:e.offsetHeight,u=ft(e),p=a.css(e,"boxSizing",!1,u)==="border-box";if(0>=c||c==null){if(c=rt(e,n,u),(0>c||c==null)&&(c=e.style[n]),At.test(c))return c;s=p&&(N.boxSizingReliable()||c===e.style[n]),c=parseFloat(c)||0}return c+ln(e,n,i||(p?"border":"content"),s,u)+"px"}function un(e,n){for(var i,s,c,u=[],p=0,g=e.length;g>p;p++)s=e[p],s.style&&(u[p]=Q.get(s,"olddisplay"),i=s.style.display,n?(u[p]||i!=="none"||(s.style.display=""),s.style.display===""&&tt(s)&&(u[p]=Q.access(s,"olddisplay",Et(s.nodeName)))):(c=tt(s),i==="none"&&c||Q.set(s,"olddisplay",c?i:a.css(s,"dis
1play"))));for(p=0;g>p;p++)s=e[p],s.style&&(n&&s.style.display!=="none"&&s.style.display!==""||(s.style.display=n?u[p]||"":"none"));return e}a.extend({cssHooks:{opacity:{get:function(e,n){if(n){var i=rt(e,"opacity");return i===""?"1":i}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:"cssFloat"},style:function(e,n,i,s){if(e&&e.nodeType!==3&&e.nodeType!==8&&e.style){var c,u,p,g=a.camelCase(n),S=e.style;return n=a.cssProps[g]||(a.cssProps[g]=on(S,g)),p=a.cssHooks[n]||a.cssHooks[g],i===void 0?p&&"get"in p&&(c=p.get(e,!1,s))!==void 0?c:S[n]:(u=typeof i,u==="string"&&(c=zn.exec(i))&&(i=(c[1]+1)*c[2]+parseFloat(a.css(e,n)),u="number"),i!=null&&i===i&&(u!=="number"||a.cssNumber[g]||(i+="px"),N.clearCloneStyle||i!==""||n.indexOf("background")!==0||(S[n]="inherit"),p&&"set"in p&&(i=p.set(e,i,s))===void 0||(S[n]=i)),void 0)}},css:function(e,n,i,s){var c,u,p,g=a.camelCase(n);return n=a.cssProps[g]||(a.cssProps[g]=on(e.style,g)),p=a.cssHooks[n]||a.cssHooks[g],p&&"get"in p&&(c=p.get(e,!0,i)),c===void 0&&(c=rt(e,n,s)),c==="normal"&&n in rn&&(c=rn[n]),i===""||i?(u=parseFloat(c),i===!0||a.isNumeric(u)?u||0:c):c}}),a.each(["height","width"],function(e,n){a.cssHooks[n]={get:function(i,s,c){return s?Wn.test(a.css(i,"display"))&&i.offsetWidth===0?a.swap(i,Vn,function(){return cn(i,n,c)}):cn(i,n,c):void 0},set:function(i,s,c){var u=c&&ft(i);return sn(i,s,c?ln(i,n,c,a.css(i,"boxSizing",!1,u)==="border-box",u):0)}}}),a.cssHooks.marginRight=nn(N.reliableMarginRight,function(e,n){return n?a.swap(e,{display:"inline-block"},rt,[e,"marginRight"]):void 0}),a.each({margin:"",padding:"",border:"Width"},function(e,n){a.cssHooks[e+n]={expand:function(i){for(var s=0,c={},u=typeof i=="string"?i.split(" "):[i];4>s;s++)c[e+ze[s]+n]=u[s]||u[s-2]||u[0];return c}},tn.test(e)||(a.cssHooks[e+n].set=sn)}),a.fn.extend({css:function(e,n){return ce(this,function(i,s,c){var u,p,g={},S=0;if(a.isArray(s)){for(u=ft(i),p=s.length;p>S;S++)g[s[S]]=a.css(i,s[S],!1,u);return g}return c!==void 0?a.style(i,s,c):a.css(i,s)},e,n,arguments.length>1)},show:function(){return un(this,!0)},hide:function(){return un(this)},toggle:function(e){return typeof e=="boolean"?e?this.show():this.hide():this.each(function(){tt(this)?a(this).show():a(this).hide()})}});function xe(e,n,i,s,c){return new xe.prototype.init(e,n,i,s,c)}a.Tween=xe,xe.prototype={constructor:xe,init:function(e,n,i,s,c,u){this.elem=e,this.prop=i,this.easing=c||"swing",this.options=n,this.start=this.now=this.cur(),this.end=s,this.unit=u||(a.cssNumber[i]?"":"px")},cur:function(){var e=xe.propHooks[this.prop];return e&&e.get?e.get(this):xe.propHooks._default.get(this)},run:function(e){var n,i=xe.propHooks[this.prop];return this.options.duration?this.pos=n=a.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=n=e,this.now=(this.end-this.start)*n+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),i&&i.set?i.set(this):xe.propHooks._default.set(this),this}},xe.prototype.init.prototype=xe.prototype,xe.propHooks={_default:{get:function(e){var n;return e.elem[e.prop]==null||e.elem.style&&e.elem.style[e.prop]!=null?(n=a.css(e.elem,e.prop,""),n&&n!=="auto"?n:0):e.elem[e.prop]},set:function(e){a.fx.step[e.prop]?a.fx.step[e.prop](e):e.elem.style&&(e.elem.style[a.cssProps[e.prop]]!=null||a.cssHooks[e.prop])?a.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},xe.propHooks.scrollTop=xe.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},a.easing={linear:function(e){return e},swing:function(e){return .5-Math.cos(e*Math.PI)/2}},a.fx=xe.prototype.init,a.fx.step={};var Ke,ht,Yn=/^(?:toggle|show|hide)$/,dn=new RegExp("^(?:([+-])=|)("+et+")([a-z%]*)$","i"),Gn=/queueHooks$/,mt=[Jn],it={"*":[function(e,n){var i=this.createTween(e,n),s=i.cur(),c=dn.exec(n),u=c&&c[3]||(a.cssNumber[e]?"":"px"),p=(a.cssNumber[e]||u!=="px"&&+s)&&dn.exec(a.css(i.elem,e)),g=1,S=20;if(p&&p[3]!==u){u=u||p[3],c=c||[],p=+s||1;do g=g||".5",p/=g,a.style(i.elem,e,p+u);while(g!==(g=i.cur()/s)&&g!==1&&--S)}return c&&(p=i.start=+p||+s||0,i.unit=u,i.end=c[1]?p+(c[1]+1)*c[2]:+c[2]),i}]};function pn(){return setTimeout(function(){Ke=void 0}),Ke=a.now()}function gt(e,n){var i,s=0,c={height:e};for(n=n?1:0;4>s;s+=2-n)i=ze[s],c["margin"+i]=c["padding"+i]=e;return n&&(c.opacity=c.width=e),c}function fn(e,n,i){for(var s,c=(it[n]||[]).concat(it["*"]),u=0,p=c.length;p>u;u++)if(s=c[u].call(i,n,e))return s}
1function Jn(e,n,i){var s,c,u,p,g,S,L,E,B=this,H={},O=e.style,ae=e.nodeType&&tt(e),Z=Q.get(e,"fxshow");i.queue||(g=a._queueHooks(e,"fx"),g.unqueued==null&&(g.unqueued=0,S=g.empty.fire,g.empty.fire=function(){g.unqueued||S()}),g.unqueued++,B.always(function(){B.always(function(){g.unqueued--,a.queue(e,"fx").length||g.empty.fire()})})),e.nodeType===1&&("height"in n||"width"in n)&&(i.overflow=[O.overflow,O.overflowX,O.overflowY],L=a.css(e,"display"),E=L==="none"?Q.get(e,"olddisplay")||Et(e.nodeName):L,E==="inline"&&a.css(e,"float")==="none"&&(O.display="inline-block")),i.overflow&&(O.overflow="hidden",B.always(function(){O.overflow=i.overflow[0],O.overflowX=i.overflow[1],O.overflowY=i.overflow[2]}));for(s in n)if(c=n[s],Yn.exec(c)){if(delete n[s],u=u||c==="toggle",c===(ae?"hide":"show")){if(c!=="show"||!Z||Z[s]===void 0)continue;ae=!0}H[s]=Z&&Z[s]||a.style(e,s)}else L=void 0;if(a.isEmptyObject(H))(L==="none"?Et(e.nodeName):L)==="inline"&&(O.display=L);else{Z?"hidden"in Z&&(ae=Z.hidden):Z=Q.access(e,"fxshow",{}),u&&(Z.hidden=!ae),ae?a(e).show():B.done(function(){a(e).hide()}),B.done(function(){var re;Q.remove(e,"fxshow");for(re in H)a.style(e,re,H[re])});for(s in H)p=fn(ae?Z[s]:0,s,B),s in Z||(Z[s]=p.start,ae&&(p.end=p.start,p.start=s==="width"||s==="height"?1:0))}}function Qn(e,n){var i,s,c,u,p;for(i in e)if(s=a.camelCase(i),c=n[s],u=e[i],a.isArray(u)&&(c=u[1],u=e[i]=u[0]),i!==s&&(e[s]=u,delete e[i]),p=a.cssHooks[s],p&&"expand"in p){u=p.expand(u),delete e[s];for(i in u)i in e||(e[i]=u[i],n[i]=c)}else n[s]=c}function hn(e,n,i){var s,c,u=0,p=mt.length,g=a.Deferred().always(function(){delete S.elem}),S=function(){if(c)return!1;for(var B=Ke||pn(),H=Math.max(0,L.startTime+L.duration-B),O=H/L.duration||0,ae=1-O,Z=0,re=L.tweens.length;re>Z;Z++)L.tweens[Z].run(ae);return g.notifyWith(e,[L,ae,H]),1>ae&&re?H:(g.resolveWith(e,[L]),!1)},L=g.promise({elem:e,props:a.extend({},n),opts:a.extend(!0,{specialEasing:{}},i),originalProperties:n,originalOptions:i,startTime:Ke||pn(),duration:i.duration,tweens:[],createTween:function(B,H){var O=a.Tween(e,L.opts,B,H,L.opts.specialEasing[B]||L.opts.easing);return L.tweens.push(O),O},stop:function(B){var H=0,O=B?L.tweens.length:0;if(c)return this;for(c=!0;O>H;H++)L.tweens[H].run(1);return B?g.resolveWith(e,[L,B]):g.rejectWith(e,[L,B]),this}}),E=L.props;for(Qn(E,L.opts.specialEasing);p>u;u++)if(s=mt[u].call(L,e,E,L.opts))return s;return a.map(E,fn,L),a.isFunction(L.opts.start)&&L.opts.start.call(e,L),a.fx.timer(a.extend(S,{elem:e,anim:L,queue:L.opts.queue})),L.progress(L.opts.progress).done(L.opts.done,L.opts.complete).fail(L.opts.fail).always(L.opts.always)}a.Animation=a.extend(hn,{tweener:function(e,n){a.isFunction(e)?(n=e,e=["*"]):e=e.split(" ");for(var i,s=0,c=e.length;c>s;s++)i=e[s],it[i]=it[i]||[],it[i].unshift(n)}
1,prefilter:function(e,n){n?mt.unshift(e):mt.push(e)}}),a.speed=function(e,n,i){var s=e&&typeof e=="object"?a.extend({},e):{complete:i||!i&&n||a.isFunction(e)&&e,duration:e,easing:i&&n||n&&!a.isFunction(n)&&n};return s.duration=a.fx.off?0:typeof s.duration=="number"?s.duration:s.duration in a.fx.speeds?a.fx.speeds[s.duration]:a.fx.speeds._default,(s.queue==null||s.queue===!0)&&(s.queue="fx"),s.old=s.complete,s.complete=function(){a.isFunction(s.old)&&s.old.call(this),s.queue&&a.dequeue(this,s.queue)},s},a.fn.extend({fadeTo:function(e,n,i,s){return this.filter(tt).css("opacity",0).show().end().animate({opacity:n},e,i,s)},animate:function(e,n,i,s){var c=a.isEmptyObject(e),u=a.speed(n,i,s),p=function(){var g=hn(this,a.extend({},e),u);(c||Q.get(this,"finish"))&&g.stop(!0)};return p.finish=p,c||u.queue===!1?this.each(p):this.queue(u.queue,p)},stop:function(e,n,i){var s=function(c){var u=c.stop;delete c.stop,u(i)};return typeof e!="string"&&(i=n,n=e,e=void 0),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var c=!0,u=e!=null&&e+"queueHooks",p=a.timers,g=Q.get(this);if(u)g[u]&&g[u].stop&&s(g[u]);else for(u in g)g[u]&&g[u].stop&&Gn.test(u)&&s(g[u]);for(u=p.length;u--;)p[u].elem!==this||e!=null&&p[u].queue!==e||(p[u].anim.stop(i),c=!1,p.splice(u,1));(c||!i)&&a.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var n,i=Q.get(this),s=i[e+"queue"],c=i[e+"queueHooks"],u=a.timers,p=s?s.length:0;for(i.finish=!0,a.queue(this,e,[]),c&&c.stop&&c.stop.call(this,!0),n=u.length;n--;)u[n].elem===this&&u[n].queue===e&&(u[n].anim.stop(!0),u.splice(n,1));for(n=0;p>n;n++)s[n]&&s[n].finish&&s[n].finish.call(this);delete i.finish})}}),a.each(["toggle","show","hide"],function(e,n){var i=a.fn[n];a.fn[n]=function(s,c,u){return s==null||typeof s=="boolean"?i.apply(this,arguments):this.animate(gt(n,!0),s,c,u)}}),a.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,n){a.fn[e]=function(i,s,c){return this.animate(n,i,s,c)}}),a.timers=[],a.fx.tick=function(){var e,n=0,i=a.timers;for(Ke=a.now();n<i.length;n++)e=i[n],e()||i[n]!==e||i.splice(n--,1);i.length||a.fx.stop(),Ke=void 0},a.fx.timer=function(e){a.timers.push(e),e()?a.fx.start():a.timers.pop()},a.fx.interval=13,a.fx.start=function(){ht||(ht=setInterval(a.fx.tick,a.fx.interval))},a.fx.stop=function(){clearInterval(ht),ht=null},a.fx.speeds={slow:600,fast:200,_default:400},a.fn.delay=function(e,n){return e=a.fx&&a.fx.speeds[e]||e,n=n||"fx",this.queue(n,function(i,s){var c=setTimeout(i,e);s.stop=function(){clearTimeout(c)}})},(function(){var e=_.createElement("input"),n=_.createElement("select"),i=n.appendChild(_.createElement("option"));e.type="checkbox",N.checkOn=e.value!=="",N.optSelected=i.selected,n.disabled=!0,N.optDisabled=!i.disabled,e=_.createElement("input"),e.value="t",e.type="radio",N.radioValue=e.value==="t"})();var Kn,mn,at=a.expr.attrHandle;a.fn.extend({attr:function(e,n){return ce(this,a.attr,e,n,arguments.length>1)},removeAttr:function(e){return this.each(function(){a.removeAttr(this,e)})}}),a.extend({attr:function(e,n,i){var s,c,u=e.nodeType;if(e&&u!==3&&u!==8&&u!==2)return typeof e.getAttribute===nt?a.prop(e,n,i):(u===1&&a.isXMLDoc(e)||(n=n.toLowerCase(),s=a.attrHooks[n]||(a.expr.match.bool.test(n)?mn:Kn)),i===void 0?s&&"get"in s&&(c=s.get(e,n))!==null?c:(c=a.find.attr(e,n),c??void 0):i!==null?s&&"set"in s&&(c=s.set(e,i,n))!==void 0?c:(e.setAttribute(n,i+""),i):void a.removeAttr(e,n))},removeAttr:function(e,n){var i,s,c=0,u=n&&n.match(k);if(u&&e.nodeType===1)for(;i=u[c++];)s=a.propFix[i]||i,a.expr.match.bool.test(i)&&(e[s]=!1),e.removeAttribute(i)},attrHooks:{type:{set:function(e,n){if(!N.radioValue&&n==="radio"&&a.nodeName(e,"input")){var i=e.value;return e.setAttribute("type",n),i&&(e.value=i),n}}}}}),mn={set:function(e,n,i){return n===!1?a.removeAttr(e,i):e.setAttribute(i,i),i}},a.each(a.expr.match.bool.source.match(/\w+/g),function(e,n){var i=at[n]||a.find.attr;at[n]=function(s,c,u){var p,g;return u||(g=at[c],at[c]=p,p=i(s,c,u)!=null?c.toLowerCase():null,at[c]=g),p}});var Xn=/^(?:input|select|textarea|button)$/i;a.fn.extend({prop:function(e,n){return ce(this,a.prop,e,n,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[a.propFix[e]||e]})}}),a.extend({propFix:{for:"htmlFor",class:"className"},prop:function(e,n,i){var s,c,u,p=e.nodeType;if(e&&p!==3&&p!==8&&p!==2)return u=p!==1||!a.isXMLDoc(e),u&&(n=a.propFix[n]||n,c=a.propHooks[n]),i!==void 0?c&&"set"in c&&(s=c.set(e,i,n))!==void 0?s:e[n]=i:c&&"get"in c&&(s=c.get(e,n))!==null?s:e[n]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||Xn.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),N.optSelected||(a.propHooks.selected={get:function(e){var n=e.parentNode;return n&&n.parentNode&&n.parentNode.selectedIndex,null}}),a.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){a.propFix[this.toLowerCase()]=this});var Lt=/[\t\r\n\f]/g;a.fn.extend({addClass:function(e){var n,i,s,c,u,p,g=typeof e=="string"&&e,S=0,L=this.length;if(a.isFunction(e))return this.each(function(E){a(this).addClass(e.call(this,E,this.className))});if(g){for(n=(e||"").match(k)||[];L>S;S++)if(i=this[S],s=i.nodeType===1&&(i.className?(" "+i.className+" ").replace(Lt," "):" ")){for(u=0;c=n[u++];)s.indexOf(" "+c+" ")<0&&(s+=c+" ");p=a.trim(s),i.className!==p&&(i.className=p)}}return this},removeClass:function(e){var n,i,s,c,u,p,g=arguments.length===0||typeof e=="string"&&e,S=0,L=this.length;if(a.isFunction(e))return this.each(function(E){a(this).removeClass(e.call(this,E,this.className))});if(g){for(n=(e||"").match(k)||[];L>S;S++)if(i=this[S],s=i.nodeType===1&&(i.className?(" "+i.className+" ").replace(Lt," "):"")){for(u=0;c=n[u++];)for(;s.indexOf(" "+c+" ")>=0;)s=s.replace(" "+c+" "," ");p=e?a.trim(s):"",i.className!==p&&(i.className=p)}}return this},toggleClass:function(e,n){var i=typeof e;
1return typeof n=="boolean"&&i==="string"?n?this.addClass(e):this.removeClass(e):this.each(a.isFunction(e)?function(s){a(this).toggleClass(e.call(this,s,this.className,n),n)}:function(){if(i==="string")for(var s,c=0,u=a(this),p=e.match(k)||[];s=p[c++];)u.hasClass(s)?u.removeClass(s):u.addClass(s);else(i===nt||i==="boolean")&&(this.className&&Q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":Q.get(this,"__className__")||"")})},hasClass:function(e){for(var n=" "+e+" ",i=0,s=this.length;s>i;i++)if(this[i].nodeType===1&&(" "+this[i].className+" ").replace(Lt," ").indexOf(n)>=0)return!0;return!1}});var Zn=/\r/g;a.fn.extend({val:function(e){var n,i,s,c=this[0];{if(arguments.length)return s=a.isFunction(e),this.each(function(u){var p;this.nodeType===1&&(p=s?e.call(this,u,a(this).val()):e,p==null?p="":typeof p=="number"?p+="":a.isArray(p)&&(p=a.map(p,function(g){return g==null?"":g+""})),n=a.valHooks[this.type]||a.valHooks[this.nodeName.toLowerCase()],n&&"set"in n&&n.set(this,p,"value")!==void 0||(this.value=p))});if(c)return n=a.valHooks[c.type]||a.valHooks[c.nodeName.toLowerCase()],n&&"get"in n&&(i=n.get(c,"value"))!==void 0?i:(i=c.value,typeof i=="string"?i.replace(Zn,""):i??"")}}}),a.extend({valHooks:{option:{get:function(e){var n=a.find.attr(e,"value");return n??a.trim(a.text(e))}},select:{get:function(e){for(var n,i,s=e.options,c=e.selectedIndex,u=e.type==="select-one"||0>c,p=u?null:[],g=u?c+1:s.length,S=0>c?g:u?c:0;g>S;S++)if(i=s[S],!(!i.selected&&S!==c||(N.optDisabled?i.disabled:i.getAttribute("disabled")!==null)||i.parentNode.disabled&&a.nodeName(i.parentNode,"optgroup"))){if(n=a(i).val(),u)return n;p.push(n)}return p},set:function(e,n){for(var i,s,c=e.options,u=a.makeArray(n),p=c.length;p--;)s=c[p],(s.selected=a.inArray(s.value,u)>=0)&&(i=!0);return i||(e.selectedIndex=-1),u}}}}),a.each(["radio","checkbox"],function(){a.valHooks[this]={set:function(e,n){return a.isArray(n)?e.checked=a.inArray(a(e).val(),n)>=0:void 0}},N.checkOn||(a.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value})}),a.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,n){a.fn[n]=function(i,s){return arguments.length>0?this.on(n,null,i,s):this.trigger(n)}}),a.fn.extend({hover:function(e,n){return this.mouseenter(e).mouseleave(n||e)},bind:function(e,n,i){return this.on(e,null,n,i)},unbind:function(e,n){return this.off(e,null,n)},delegate:function(e,n,i,s){return this.on(n,e,i,s)},undelegate:function(e,n,i){return arguments.length===1?this.off(e,"**"):this.off(n,e||"**",i)}});var kt=a.now(),xt=/\?/;a.parseJSON=function(e){return JSON.parse(e+"")},a.parseXML=function(e){var n,i;if(!e||typeof e!="string")return null;try{i=new DOMParser,n=i.parseFromString(e,"text/xml")}catch{n=void 0}return(!n||n.getElementsByTagName("parsererror").length)&&a.error("Invalid XML: "+e),n};var er=/#.*$/,gn=/([?&])_=[^&]*/,tr=/^(.*?):[ \t]*([^\r\n]*)$/gm,nr=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,rr=/^(?:GET|HEAD)$/,ir=/^\/\//,yn=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,vn={},$t={},bn="*/".concat("*"),Pt=r.location.href,Xe=yn.exec(Pt.toLowerCase())||[];function wn(e){return function(n,i){typeof n!="string"&&(i=n,n="*");var s,c=0,u=n.toLowerCase().match(k)||[];if(a.isFunction(i))for(;s=u[c++];)s[0]==="+"?(s=s.slice(1)||"*",(e[s]=e[s]||[]).unshift(i)):(e[s]=e[s]||[]).push(i)}}function Sn(e,n,i,s){var c={},u=e===$t;function p(g){var S;return c[g]=!0,a.each(e[g]||[],function(L,E){var B=E(n,i,s);return typeof B!="string"||u||c[B]?u?!(S=B):void 0:(n.dataTypes.unshift(B),p(B),!1)}),S}return p(n.dataTypes[0])||!c["*"]&&p("*")}function Dt(e,n){var i,s,c=a.ajaxSettings.flatOptions||{};for(i in n)n[i]!==void 0&&((c[i]?e:s||(s={}))[i]=n[i]);return s&&a.extend(!0,e,s),e}function ar(e,n,i){for(var s,c,u,p,g=e.contents,S=e.dataTypes;S[0]==="*";)S.shift(),s===void 0&&(s=e.mimeType||n.getResponseHeader("Content-Type"));if(s){for(c in g)if(g[c]&&g[c].test(s)){S.unshift(c);break}}if(S[0]in i)u=S[0];else{for(c in i){if(!S[0]||e.converters[c+" "+S[0]]){u=c;break}p||(p=c)}u=u||p}return u?(u!==S[0]&&S.unshift(u),i[u]):void 0}
1function or(e,n,i,s){var c,u,p,g,S,L={},E=e.dataTypes.slice();if(E[1])for(p in e.converters)L[p.toLowerCase()]=e.converters[p];for(u=E.shift();u;)if(e.responseFields[u]&&(i[e.responseFields[u]]=n),!S&&s&&e.dataFilter&&(n=e.dataFilter(n,e.dataType)),S=u,u=E.shift()){if(u==="*")u=S;else if(S!=="*"&&S!==u){if(p=L[S+" "+u]||L["* "+u],!p){for(c in L)if(g=c.split(" "),g[1]===u&&(p=L[S+" "+g[0]]||L["* "+g[0]])){p===!0?p=L[c]:L[c]!==!0&&(u=g[0],E.unshift(g[1]));break}}if(p!==!0)if(p&&e.throws)n=p(n);else try{n=p(n)}catch(B){return{state:"parsererror",error:p?B:"No conversion from "+S+" to "+u}}}}return{state:"success",data:n}}a.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Pt,type:"GET",isLocal:nr.test(Xe[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":bn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":a.parseJSON,"text xml":a.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,n){return n?Dt(Dt(e,a.ajaxSettings),n):Dt(a.ajaxSettings,e)},ajaxPrefilter:wn(vn),ajaxTransport:wn($t),ajax:function(e,n){typeof e=="object"&&(n=e,e=void 0),n=n||{};var i,s,c,u,p,g,S,L,E=a.ajaxSetup({},n),B=E.context||E,H=E.context&&(B.nodeType||B.jquery)?a(B):a.event,O=a.Deferred(),ae=a.Callbacks("once memory"),Z=E.statusCode||{},re={},Ne={},Te=0,Oe="canceled",U={readyState:0,getResponseHeader:function(ie){var Ce;if(Te===2){if(!u)for(u={};Ce=tr.exec(c);)u[Ce[1].toLowerCase()]=Ce[2];Ce=u[ie.toLowerCase()]}return Ce??null},getAllResponseHeaders:function(){return Te===2?c:null},setRequestHeader:function(ie,Ce){var Fe=ie.toLowerCase();return Te||(ie=Ne[Fe]=Ne[Fe]||ie,re[ie]=Ce),this},overrideMimeType:function(ie){return Te||(E.mimeType=ie),this},statusCode:function(ie){var Ce;if(ie)if(2>Te)for(Ce in ie)Z[Ce]=[Z[Ce],ie[Ce]];else U.always(ie[U.status]);return this},abort:function(ie){var Ce=ie||Oe;return i&&i.abort(Ce),Ee(0,Ce),this}};if(O.promise(U).complete=ae.add,U.success=U.done,U.error=U.fail,E.url=((e||E.url||Pt)+"").replace(er,"").replace(ir,Xe[1]+"//"),E.type=n.method||n.type||E.method||E.type,E.dataTypes=a.trim(E.dataType||"*").toLowerCase().match(k)||[""],E.crossDomain==null&&(g=yn.exec(E.url.toLowerCase()),E.crossDomain=!(!g||g[1]===Xe[1]&&g[2]===Xe[2]&&(g[3]||(g[1]==="http:"?"80":"443"))===(Xe[3]||(Xe[1]==="http:"?"80":"443")))),E.data&&E.processData&&typeof E.data!="string"&&(E.data=a.param(E.data,E.traditional)),Sn(vn,E,n,U),Te===2)return U;S=a.event&&E.global,S&&a.active++===0&&a.event.trigger("ajaxStart"),E.type=E.type.toUpperCase(),E.hasContent=!rr.test(E.type),s=E.url,E.hasContent||(E.data&&(s=E.url+=(xt.test(s)?"&":"?")+E.data,delete E.data),E.cache===!1&&(E.url=gn.test(s)?s.replace(gn,"$1_="+kt++):s+(xt.test(s)?"&":"?")+"_="+kt++)),E.ifModified&&(a.lastModified[s]&&U.setRequestHeader("If-Modified-Since",a.lastModified[s]),a.etag[s]&&U.setRequestHeader("If-None-Match",a.etag[s])),(E.data&&E.hasContent&&E.contentType!==!1||n.contentType)&&U.setRequestHeader("Content-Type",E.contentType),U.setRequestHeader("Accept",E.dataTypes[0]&&E.accepts[E.dataTypes[0]]?E.accepts[E.dataTypes[0]]+(E.dataTypes[0]!=="*"?", "+bn+"; q=0.01":""):E.accepts["*"]);for(L in E.headers)U.setRequestHeader(L,E.headers[L]);if(E.beforeSend&&(E.beforeSend.call(B,U,E)===!1||Te===2))return U.abort();Oe="abort";for(L in{success:1,error:1,complete:1})U[L](E[L]);if(i=Sn($t,E,n,U)){U.readyState=1,S&&H.trigger("ajaxSend",[U,E]),E.async&&E.timeout>0&&(p=setTimeout(function(){U.abort("timeout")},E.timeout));try{Te=1,i.send(re,Ee)}catch(ie){if(!(2>Te))throw ie;Ee(-1,ie)}}else Ee(-1,"No Transport");function Ee(ie,Ce,Fe,vt){var Be,Ve,je,qe,$e,Ie=Ce;Te!==2&&(Te=2,p&&clearTimeout(p),i=void 0,c=vt||"",U.readyState=ie>0?4:0,Be=ie>=200&&300>ie||ie===304,Fe&&(qe=ar(E,U,Fe)),qe=or(E,qe,U,Be),Be?(E.ifModified&&($e=U.getResponseHeader("Last-Modified"),$e&&(a.lastModified[s]=$e),$e=U.getResponseHeader("etag"),$e&&(a.etag[s]=$e)),ie===204||E.type==="HEAD"?Ie="nocontent":ie===304?Ie="notmodified":(Ie=qe.state,Ve=qe.data,je=qe.error,Be=!je)):(je=Ie,(ie||!Ie)&&(Ie="error",0>ie&&(ie=0))),U.status=ie,U.statusText=(Ce||Ie)+"",Be?O.resolveWith(B,[Ve,Ie,U]):O.rejectWith(B,[U,Ie,je]),U.statusCode(Z),Z=void 0,S&&H.trigger(Be?"ajaxSuccess":"ajaxError",[U,E,Be?Ve:je]),ae.fireWith(B,[U,Ie]),S&&(H.trigger("ajaxComplete",[U,E]),--a.active||a.event.trigger("ajaxStop")))}return U},getJSON:function(e,n,i){return a.get(e,n,i,"json")},getScript:function(e,n){return a.get(e,void 0,n,"script")}}),a.each(["get","post"],function(e,n){a[n]=function(i,s,c,u){return a.isFunction(s)&&(u=u||c,c=s,s=void 0),a.ajax({url:i,type:n,dataType:u,data:s,success:c})}}),a._evalUrl=function(e){return a.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,throws:!0})},a.fn.extend({wrapAll:function(e){var n;return a.isFunction(e)?this.each(function(i){a(this).wrapAll(e.call(this,i))}):(this[0]&&(n=a(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&n.insertBefore(this[0]),n.map(function(){for(var i=this;i.firstElementChild;)i=i.firstElementChild;return i}).append(this)),this)},wrapInner:function(e){return this.each(a.isFunction(e)?function(n){a(this).wrapInner(e.call(this,n))}:function(){var n=a(this),i=n.contents();i.length?i.wrapAll(e):n.append(e)})},wrap:function(e){var n=a.isFunction(e);return this.each(function(i){a(this).wrapAll(n?e.call(this,i):e)})},unwrap:function(){return this.parent().each(function(){a.nodeName(this,"body")||a(this).replaceWith(this.childNodes)}).end()}}),a.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0},a.expr.filters.visible=function(e){return!a.expr.filters.hidden(e)};var sr=/%20/g,lr=/\[\]$/,Cn=/\r?\n/g,cr=/^(?:submit|button|image|reset|file)$/i,ur=/^(?:input|select|textarea|keygen)/i;function Nt(e,n,i,s){var c;if(a.isArray(n))a.each(n,function(u,p){i||lr.test(e)?s(e,p):Nt(e+"["+(typeof p=="object"?u:"")+"]",p,i,s)});else if(i||a.type(n)!=="object")s(e,n);else for(c in n)Nt(e+"["+c+"]",n[c],i,s)}a.param=function(e,n){var i,s=[],c=function(u,p){p=a.isFunction(p)?p():p??"",s[s.length]=encodeURIComponent(u)+"="+encodeURIComponent(p)};if(n===void 0&&(n=a.ajaxSettings&&a.ajaxSettings.traditional),a.isArray(e)||e.jquery&&!a.isPlainObject(e))a.each(e,function(){c(this.name,this.value)});else for(i in e)Nt(i,e[i],n,c);return s.join("&").replace(sr,"+")},a.fn.extend({serialize:function(){return a.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=a.prop(this,"elements");return e?a.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!a(this).is(":disabled")&&ur.test(this.nodeName)&&!cr.test(e)&&(this.checked||!Ut.test(e))}).map(function(e,n){var i=a(this).val();return i==null?null:a.isArray(i)?a.map(i,function(s){return{name:n.name,value:s.replace(Cn,`\r
2`)}}):{name:n.name,value:i.replace(Cn,`\r
3`)}}).get()}}),a.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch{}};var dr=0,yt={},pr={0:200,1223:204},ot=a.ajaxSettings.xhr();r.attachEvent&&r.attachEvent("onunload",function(){for(var e in yt)yt[e]()}),N.cors=!!ot&&"withCredentials"in ot,N.ajax=ot=!!ot,a.ajaxTransport(function(e){var n;return N.cors||ot&&!e.crossDomain?{send:function(i,s){var c,u=e.xhr(),p=++dr;if(u.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(c in e.xhrFields)u[c]=e.xhrFields[c];e.mimeType&&u.overrideMimeType&&u.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(c in i)u.setRequestHeader(c,i[c]);n=function(g){return function(){n&&(delete yt[p],n=u.onload=u.onerror=null,g==="abort"?u.abort():g==="error"?s(u.status,u.statusText):s(pr[u.status]||u.status,u.statusText,typeof u.responseText=="string"?{text:u.responseText}:void 0,u.getAllResponseHeaders()))}},u.onload=n(),u.onerror=n("error"),n=yt[p]=n("abort");try{u.send(e.hasContent&&e.data||null)}catch(g){if(n)throw g}},abort:function(){n&&n()}}:void 0}),a.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return a.globalEval(e),e}}}
3),a.ajaxPrefilter("script",function(e){e.cache===void 0&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),a.ajaxTransport("script",function(e){if(e.crossDomain){var n,i;return{send:function(s,c){n=a("<script>").prop({async:!0,charset:e.scriptCharset,src:e.url}).on("load error",i=function(u){n.remove(),i=null,u&&c(u.type==="error"?404:200,u.type)}),_.head.appendChild(n[0])},abort:function(){i&&i()}}}});var Tn=[],It=/(=)\?(?=&|$)|\?\?/;a.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Tn.pop()||a.expando+"_"+kt++;return this[e]=!0,e}}),a.ajaxPrefilter("json jsonp",function(e,n,i){var s,c,u,p=e.jsonp!==!1&&(It.test(e.url)?"url":typeof e.data=="string"&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&It.test(e.data)&&"data");return p||e.dataTypes[0]==="jsonp"?(s=e.jsonpCallback=a.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,p?e[p]=e[p].replace(It,"$1"+s):e.jsonp!==!1&&(e.url+=(xt.test(e.url)?"&":"?")+e.jsonp+"="+s),e.converters["script json"]=function(){return u||a.error(s+" was not called"),u[0]},e.dataTypes[0]="json",c=r[s],r[s]=function(){u=arguments},i.always(function(){r[s]=c,e[s]&&(e.jsonpCallback=n.jsonpCallback,Tn.push(s)),u&&a.isFunction(c)&&c(u[0]),u=c=void 0}),"script"):void 0}),a.parseHTML=function(e,n,i){if(!e||typeof e!="string")return null;typeof n=="boolean"&&(i=n,n=!1),n=n||_;var s=ue.exec(e),c=!i&&[];return s?[n.createElement(s[1])]:(s=a.buildFragment([e],n,c),c&&c.length&&a(c).remove(),a.merge([],s.childNodes))};var En=a.fn.load;a.fn.load=function(e,n,i){if(typeof e!="string"&&En)return En.apply(this,arguments);var s,c,u,p=this,g=e.indexOf(" ");return g>=0&&(s=a.trim(e.slice(g)),e=e.slice(0,g)),a.isFunction(n)?(i=n,n=void 0):n&&typeof n=="object"&&(c="POST"),p.length>0&&a.ajax({url:e,type:c,dataType:"html",data:n}).done(function(S){u=arguments,p.html(s?a("<div>").append(a.parseHTML(S)).find(s):S)}).complete(i&&function(S,L){p.each(i,u||[S.responseText,L,S])}),this},a.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,n){a.fn[n]=function(i){return this.on(n,i)}}),a.expr.filters.animated=function(e){return a.grep(a.timers,function(n){return e===n.elem}).length};var An=r.document.documentElement;function Ln(e){return a.isWindow(e)?e:e.nodeType===9&&e.defaultView}a.offset={setOffset:function(e,n,i){var s,c,u,p,g,S,L,E=a.css(e,"position"),B=a(e),H={};E==="static"&&(e.style.position="relative"),g=B.offset(),u=a.css(e,"top"),S=a.css(e,"left"),L=(E==="absolute"||E==="fixed")&&(u+S).indexOf("auto")>-1,L?(s=B.position(),p=s.top,c=s.left):(p=parseFloat(u)||0,c=parseFloat(S)||0),a.isFunction(n)&&(n=n.call(e,i,g)),n.top!=null&&(H.top=n.top-g.top+p),n.left!=null&&(H.left=n.left-g.left+c),"using"in n?n.using.call(e,H):B.css(H)}},a.fn.extend({offset:function(e){if(arguments.length)return e===void 0?this:this.each(function(p){a.offset.setOffset(this,e,p)});var n,i,s=this[0],c={top:0,left:0},u=s&&s.ownerDocument;if(u)return n=u.documentElement,a.contains(n,s)?(typeof s.getBoundingClientRect!==nt&&(c=s.getBoundingClientRect()),i=Ln(u),{top:c.top+i.pageYOffset-n.clientTop,left:c.left+i.pageXOffset-n.clientLeft}):c},position:function(){if(this[0]){var e,n,i=this[0],s={top:0,left:0};return a.css(i,"position")==="fixed"?n=i.getBoundingClientRect():(e=this.offsetParent(),n=this.offset(),a.nodeName(e[0],"html")||(s=e.offset()),s.top+=a.css(e[0],"borderTopWidth",!0),s.left+=a.css(e[0],"borderLeftWidth",!0)),{top:n.top-s.top-a.css(i,"marginTop",!0),left:n.left-s.left-a.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||An;e&&!a.nodeName(e,"html")&&a.css(e,"position")==="static";)e=e.offsetParent;return e||An})}}),a.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var i=n==="pageYOffset";a.fn[e]=function(s){return ce(this,function(c,u,p){var g=Ln(c);return p===void 0?g?g[n]:c[u]:void(g?g.scrollTo(i?r.pageXOffset:p,i?p:r.pageYOffset):c[u]=p)},e,s,arguments.length,null)}}),a.each(["top","left"],function(e,n){a.cssHooks[n]=nn(N.pixelPosition,function(i,s){return s?(s=rt(i,n),At.test(s)?a(i).position()[n]+"px":s):void 0})}),a.each({Height:"height",Width:"width"},function(e,n){a.each({padding:"inner"+e,content:n,"":"outer"+e},function(i,s){a.fn[s]=function(c,u){var p=arguments.length&&(i||typeof c!="boolean"),g=i||(c===!0||u===!0?"margin":"border");return ce(this,function(S,L,E){var B;return a.isWindow(S)?S.document.documentElement["client"+e]:S.nodeType===9?(B=S.documentElement,Math.max(S.body["scroll"+e],B["scroll"+e],S.body["offset"+e],B["offset"+e],B["client"+e])):E===void 0?a.css(S,L,g):a.style(S,L,E,g)},n,p?c:void 0,p,null)}})}),a.fn.size=function(){return this.length},a.fn.andSelf=a.fn.addBack,typeof define=="function"&&define.amd&&define("jquery",[],function(){return a});var fr=r.jQuery,hr=r.$;return a.noConflict=function(e){return r.$===a&&(r.$=hr),e&&r.jQuery===a&&(r.jQuery=fr),a},typeof t===nt&&(r.jQuery=r.$=a),a});class RemoteResourcesLoader{constructor(){const t=JSON.parse(document.getElementById("app-config").textContent);this.version=t.version,this.jsonByUrl=new Map,this.freshUrls=new Set}getItemsJson(t){const o=`/json/${t}.json?v=${this.version}`;if(this.freshUrls.delete(o))return this.resolveJson(o,()=>this.fetchJsonUncached(o,2,{cache:"no-store"}));const l=typeof window<"u"?window.__itemsJsonWarmup:void 0;if(l!=null&&l.url===o){const d=l.promise!=null?l.promise:typeof l.escalate=="function"?l.escalate():void 0;if(d!=null)return this.resolveJson(o,()=>d.catch(()=>this.fetchJsonUncached(o)))}return this.fetchJson(o)}forgetItemsJson(t){const o=`/json/${t}.json?v=${this.version}`;this.jsonByUrl.delete(o),this.freshUrls.add(o)}getItemSocialImagePath(t,o){return`/img/item-types/${t}/${o}-social.png`}getItemMainImagePath(t,o){return`/img/item-types/${t}/${o}.webp`}getItemThumbImagePath(t,o){return`/img/item-types/${t}/${o}-thumb.webp`}getSearchJson(){return this.fetchJson(`/json/search.json?v=${this.version}`)}resolveJson(t,o){const l=this.jsonByUrl.get(t);if(l!=null)return l;const d=o();
3return this.jsonByUrl.set(t,d),d.catch(()=>this.jsonByUrl.delete(t)),d}fetchJson(t){return this.resolveJson(t,()=>this.fetchJsonUncached(t))}fetchJsonUncached(t,o=2,l=void 0){return fetch(t,l).then(d=>{if(!d.ok)throw new Error(`Failed to fetch ${t}: ${d.status}`);return d.json()}).catch(d=>{if(o>0&&d instanceof TypeError){const m=700*(3-o);return new Promise(f=>setTimeout(f,m)).then(()=>this.fetchJsonUncached(t,o-1,l))}throw d})}}let remoteResourcesLoader=new RemoteResourcesLoader;function loadResourcesCache(){return remoteResourcesLoader}var lazyScriptLoads={};function loadLazyScripts(r){var t=String(r??"").split(/\s+/).filter(Boolean);return Promise.all(t.map(function(o){var l=o.split("?")[0];return lazyScriptLoads[l]==null&&(lazyScriptLoads[l]=new Promise(function(d,m){var f=document.createElement("script");f.src=o,f.async=!1,f.onload=d,f.onerror=function(w){delete lazyScriptLoads[l],m(w)},document.body.appendChild(f)})),lazyScriptLoads[l]}))}var baseUrl="https://smarthomecompared.com",websiteName="Smart Home Compared",websiteAlternateName="SmartHomeCompared",foundingYear=2024,siteLocale="en",internalDatabaseDir="database",themeColor="#01579B",itemTypes=["air-purifiers","air-quality-monitors","cameras","displays","dongles","doorbells","door-locks","door-window-sensors","energy-monitors","garage-door-openers","gas-detectors","hubs","ir-remote-controls","led-bulbs","light-strips","mini-pcs","motion-sensors","nas","plugs","presence-sensors","radiator-valves","relays","robot-lawn-mowers","robot-pool-cleaners","robot-vacuums","routers","sirens","smoke-alarms","speakers","temperature-humidity-sensors","thermostats","vibration-sensors","voice-assistants","wall-outlets","wall-switches","water-leak-sensors","water-shutoff-valves","water-valves","window-coverings"],mainItemTypes=[],googleAnalyticsMeasurementId="G-SNT9W02T07",googleTagManagerContainerId,cookieConsentEnabled=!0,impactSiteVerification="421aa162-0670-465c-bfa9-c1cbd8626d06",footerAdUrl,footerAdImagePath,footerAdAlt,headerBitcoinPriceEnabled=!1,headerActionTitle,headerActionLink,htmlMetas=[],imagesValidationEnabled=!0,minItemCompletenessPercent=56.4,fastHtmlMinifyEnabled=!0,fastJsMinifyEnabled=!0,sentryId="5cf4625b012b7c199426d15dfa223dbb",sentrySampleRate=1,priceHistoryEnabled=!0,btcUsdPriceEnabled=!1,maxItemPrice=1e4,blogUrl="/blog",authorName,authorJobTitle,authorBio,authorImagePath,authorMediumUrl,authorXUrl,authorGithubUrl,authorLinkedinUrl,twitter="shcompared",instagram="smarthomecompared",alby,kofi,github,reddit="smarthomecompared",stackerNews="shcompared",bitcoinTalk,nostr,medium,youtube="@SmartHomeCompared",vsVersion="-v2",emailSubscriptionEnabled=!0,emailSubscriptionFormAction="https://fe20f6a5.sibforms.com/serve/MUIFAHCfjnezYRFp4v7wqMkDI_cADwBQ9SpjAmF8UmGTeeSEHn2SxlsJln17sYEFxXDs5P_aaUgxGphiYioXwfzq7KNeIyiQ1SphOfTDUX1NVPQG_quRZ9GkvlZXJLlN7R1SfQ8mg1kjoXHf7udpBXTQUKQvD_tvgAj9fYfJmb0t3oxoWLDKwmENkY1tdZWUmVEHLPjXDNoJ279RlA==",emailSubscriptionRecaptchaSiteKey="",buyQuantityEnabled=!0,officialDocumentationTitle="",legacyItemTypePages=!0,dealsPageEnabled=!0,latestPageEnabled=!0,itemCardsFacets=[{id:"category",type:"category"},{id:"brand",type:"brand"},{id:"rating",type:"threshold",cardAttr:"data-rating",options:[{value:"3"},{value:"3.5"},{value:"4"},{value:"4.5"}]},{id:"discount",type:"threshold",cardAttr:"data-discount",options:[{value:"5"},{value:"20"},{value:"30"},{value:"50"}]},{id:"integrations",type:"feature-group",categoryId:"integrations",options:[{value:"alexa",label:"Alexa",featureIds:["alexa"]},{value:"google-home",label:"Google Home",featureIds:["google-home"]},{value:"apple-homekit",label:"Apple HomeKit",featureIds:["apple-homekit"]},{value:"samsung-smart-things",label:"SmartThings",featureIds:["samsung-smart-things"]},{value:"home-assistant",label:"Home Assistant",featureIds:["home-assistant"]},{value:"matter",label:"Matter",featureIds:["matter"]}]},{id:"connectivity",type:"feature-group",categoryId:"connectivity",options:[{value:"wifi",label:"Wi-Fi",featureIds:["2-4-ghz-wifi","5-ghz-wifi","wifi"]},{value:"zigbee",label:"Zigbee",featureIds:["zigbee"]},{value:"bluetooth",label:"Bluetooth",featureIds:["bluetooth"]},{value:"z-wave",label:"Z-Wave",featureIds:["z-wave"]},{value:"thread",label:"Thread",featureIds:["thread"]},{value:"ethernet",label:"Ethernet",featureIds:["ethernet"]}]}],itemCardsSortByRatingEnabled=!0,topRatedPageEnabled=!0,statsPageEnabled=!0,statsPriceStoreId="amazon_us",statsPriceStoreName="Amazon",statsPriceCurrencySymbol="$",statsPriceBands=[50,100,250],statsDataFileName="smart-home-stats",statsLicenseUrl="https://smarthomecompared.com/stats#cite",reportsPageEnabled=!0,priceLandingsEnabled=!0,shoppingEvents=[{id:"black-friday",name:"Black Friday",timeZone:"America/Los_Angeles",promoPreviewLive:!1,promoPreviewUpcoming:!1,recurrence:{month:11,weekday:4,nth:4,offsetDays:1,durationDays:4}}
3,{id:"cyber-monday",name:"Cyber Monday",timeZone:"America/Los_Angeles",promoPreviewLive:!1,promoPreviewUpcoming:!1,recurrence:{month:11,weekday:4,nth:4,offsetDays:4,durationDays:1}},{id:"prime-day",name:"Prime Day",timeZone:"America/Los_Angeles",promoPreviewLive:!1,promoPreviewUpcoming:!1,primeExclusive:!0,editions:[{start:"2026-10-06",end:"2026-10-07"}]}],amazonPrimeSignupEnabled=!0,amazonPrimeFooterBannerEnabled=!0,brandsPagesEnabled=!0,brandsVsPagesEnabled=!0,brandsOnHeaderEnabled=!1,podcastEnabled=!0,defaultLocation={countryCode:"US",continentCode:"NA",timestamp:0,source:"default"},supportedStores=[{id:"amazon_us",tag:"smart-home-compared-20",countryCodes:["US"],continentCodes:["AF","AN","AS","NA","OC","SA"]},{id:"amazon_de",tag:"smart-home-compared-21",countryCodes:["DE"],continentCodes:["EU"]},{id:"amazon_uk",tag:"smart-home-compared-uk-21",countryCodes:["GB"]},{id:"amazon_it",tag:"smart-home-compared-it-21",countryCodes:["IT"]},{id:"amazon_es",tag:"smart-home-compared-es-21",countryCodes:["ES"]},{id:"amazon_fr",tag:"smart-home-compared-fr-21",countryCodes:["FR"]},{id:"amazon_nl",tag:"smart-home-compared-nl-21",countryCodes:["NL"]},{id:"amazon_ca",tag:"smart-home-compared-ca-20",countryCodes:["CA"]},{id:"amazon_au",tag:"smart-home-compared-au-22",countryCodes:["AU"]},{id:"amazon_in",tag:"cuelinkss26795-21",countryCodes:["IN"],network:"cuelinks"},{id:"aliexpress",tag:null},{id:"official",tag:null}],ignoredStoresDomainsValidation=["aliexpress.com","moeshouse.com","meross.com","aqara.com","tkqlhce.com","dpbolvw.net","switchbot.vip","switch-bot.com","sonoff.tech"],displayAmazonAssociatesDisclaimer=!0,amazonStoreUrl="https://a.co/d/02Yp2TFp",firestoreApiKey="AIzaSyBZ3_TFP9CX8bwPpslxmXDgm1GPUrs55-s",firestoreAuthDomain="smart-home-compared.firebaseapp.com",firestoreProjectId="smart-home-compared",firestoreStorageBucket="smart-home-compared.firebasestorage.app",firestoreMessagingSenderId="1049933774727",firestoreAppId="1:1049933774727:web:792109c4ad12951c725d22",firestoreMeasurementId="G-ND0PE116PX",salesTrackingEnabled=!0,supabaseUrl="https://xavgwpootupxrvtwaglz.supabase.co",supabaseAnonKey="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inhhdmd3cG9vdHVweHJ2dHdhZ2x6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODI5MzMyMzgsImV4cCI6MjA5ODUwOTIzOH0.VAOyqKGWK9KkAqdY0_cc0qWZPOAHdKnFqGuk8-UIIv8",localSalesTrackingEnabled=!1,recommendationsEnabled=!0,assistantEnabled=!1,assistantEndpoint="https://xavgwpootupxrvtwaglz.supabase.co/functions/v1/assistant",assistantBrainId="smart-home",webMcpEnabled=!0,webMcpOriginTrialToken="Amy5i/n/gX1m1g+lnIZK1tiswJII8cwj8K5enmsjeQlYnoCZh6MpoO/lWyJF2BiOgMIcRaHBO6MD82kOYhvfEgQAAABVeyJvcmlnaW4iOiJodHRwczovL3NtYXJ0aG9tZWNvbXBhcmVkLmNvbTo0NDMiLCJmZWF0dXJlIjoiV2ViTUNQIiwiZXhwaXJ5IjoxODA2MzY0ODAwfQ==",subscriptionTrackingEnabled=!0,localSubscriptionTrackingEnabled=!1;function getFeatureRenderers(r){return[]}function defaultSorting(r,t){return t}function sendGA(r,t={}){return typeof gtag!="function"?!1:(gaAgentMarkDepth>0&&(t.agent=!0),t.transport_type="beacon",gtag("event",r,t),!0)}var gaAgentMarkDepth=0;function withAgentMark(r){gaAgentMarkDepth++;try{return r()}finally{gaAgentMarkDepth--}}const LOCATION_STORAGE_KEY="location",TTL_MS=360*60*1e3,MOCK_LOCATION_ENABLED=!1,MOCK_LOCATION={countryCode:"DE",continentCode:"EU",timestamp:Date.now(),source:"mock"},MOCK_DELAY_MS=5e3;let locationJson=null,inFlight=!1;const ISO_COUNTRY=/^[A-Z]{2}$/,ISO_CONTINENT=/^(AF|AN|AS|EU|NA|OC|SA)$/,EU_COUNTRY_CODES=new Set(["AL","AD","AT","BA","BE","BG","BY","CH","CY","CZ","DE","DK","EE","ES","FI","FO","FR","GB","GE","GI","GR","HR","HU","IE","IS","IT","LI","LT","LU","LV","MC","MD","ME","MK","MT","NL","NO","PL","PT","RO","RS","RU","SE","SI","SK","SM","UA","VA","XK"]);function continentForCountry(r){return r===defaultLocation.countryCode?defaultLocation.continentCode:EU_COUNTRY_CODES.has(r)?"EU":"NA"}function cfTraceUrl(){return String(baseUrl).replace(/\/+$/,"")+"/cdn-cgi/trace"}function storesDependOnLocation(){return typeof supportedStores>"u"||!Array.isArray(supportedStores)?!0:supportedStores.some(r=>r&&(r.countryCodes?.length>0||r.continentCodes?.length>0))}const isFresh=r=>MOCK_LOCATION_ENABLED?!1:Date.now()-r<TTL_MS;function readStorage(){try{const r=localStorage.getItem(LOCATION_
3STORAGE_KEY);if(!r)return null;const t=JSON.parse(r);return t&&typeof t.timestamp=="number"?t:null}catch{return null}}function writeStorage(r){try{localStorage.setItem(LOCATION_STORAGE_KEY,JSON.stringify(r))}catch{}}function setLocation(r,{persist:t=!0}={}){var o=!locationJson||locationJson.countryCode!==r.countryCode||locationJson.continentCode!==r.continentCode;if(locationJson=r,t&&writeStorage(r),o)try{window.dispatchEvent(new CustomEvent("location:updated",{detail:r}))}catch{}}function refreshLocationInBackground(r=5e3){if(inFlight||!MOCK_LOCATION_ENABLED&&!storesDependOnLocation())return;if(inFlight=!0,MOCK_LOCATION_ENABLED){setTimeout(()=>{const l={...MOCK_LOCATION,timestamp:Date.now()};setLocation(l),inFlight=!1},MOCK_DELAY_MS);return}const t=new AbortController,o=setTimeout(()=>t.abort(new Error("timeout")),r);fetch(cfTraceUrl(),{signal:t.signal,cache:"no-store"}).then(l=>{if(!l.ok)throw new Error(`HTTP ${l.status}`);return l.text()}).then(l=>{const d=/(?:^|\n)loc=([A-Z]{2})(?:\r?\n|$)/.exec(l),m=d&&d[1]||defaultLocation.countryCode,f=continentForCountry(m);setLocation({countryCode:m,continentCode:f,timestamp:Date.now(),source:"remote"})}).catch(()=>{}).finally(()=>{clearTimeout(o),inFlight=!1})}function initLocation(){const r=readStorage();r?(setLocation(r,{persist:!1}),!isFresh(r.timestamp)&&r.source!=="override"&&refreshLocationInBackground()):(setLocation({...defaultLocation}),refreshLocationInBackground())}function getLocation(){return locationJson}initLocation(),window.addEventListener("storage",r=>{if(r.key===LOCATION_STORAGE_KEY&&r.newValue)try{const t=JSON.parse(r.newValue);setLocation(t,{persist:!1})}catch{}});function applyLocationOverrideFromUrl(){const r=new URL(window.location.href),t=r.searchParams,o=t.get("country"),l=t.get("continent");if(o&&o.toLowerCase()==="reset")return localStorage.removeItem(LOCATION_STORAGE_KEY),setLocation({...defaultLocation}),t.delete("country"),t.delete("continent"),history.replaceState(null,"",r.toString()),!0;if(!o)return!1;const d=String(o).toUpperCase().trim();if(!ISO_COUNTRY.test(d))return!1;let m;if(l){const f=String(l).toUpperCase().trim();ISO_CONTINENT.test(f)&&(m=f)}return m||(m=getLocation()?.continentCode||defaultLocation.continentCode),setLocation({countryCode:d,continentCode:m,timestamp:Date.now(),source:"override"}),t.delete("country"),t.delete("continent"),history.replaceState(null,"",r.toString()),!0}var CONVERSION_RETRY_DELAYS_MS=[500,2e3],CONVERSION_QUEUE_MAX_ROWS=20,CONVERSION_QUEUE_TTL_MS=10080*60*1e3,CONVERSION_LOCAL_HOSTS=["localhost","127.0.0.1"];function isConversionSupabaseConfigured(){return!(typeof supabaseUrl>"u"||typeof supabaseAnonKey>"u"||!supabaseUrl||!supabaseAnonKey)}function isConversionLocalHost(){var r=typeof location<"u"&&location.hostname?location.hostname:"";return CONVERSION_LOCAL_HOSTS.indexOf(r)!==-1}function isConversionInternalTraffic(){return typeof window<"u"&&window.internalTraffic===!0}function isConversionQueueAllowed(){return typeof window>"u"||window.analyticsConsent!==!1}function createConversionChannel(r){var t=r??{},o=t.optionalColumns!=null?t.optionalColumns:[];function l(){if(typeof t.isEnabled=="function"&&!t.isEnabled()||!isConversionSupabaseConfigured()||isConversionInternalTraffic())return!1;var N=typeof t.isLocalAllowed=="function"&&t.isLocalAllowed();return!(!N&&isConversionLocalHost())}function d(){return t.prefer!=null?t.prefer:"return=minimal"}function m(N,_){return fetch(supabaseUrl+"/rest/v1/"+t.table,{method:"POST",keepalive:!0,headers:{"Content-Type":"application/json",apikey:supabaseAnonKey,Authorization:"Bearer "+supabaseAnonKey,Prefer:_},body:JSON.stringify(N)}).catch(function(){})}function f(N){var _=!1;return o.forEach(function(Y){Object.prototype.hasOwnProperty.call(N,Y)&&(delete N[Y],_=!0)}),_}function w(N,_,Y){var a=Y??d();try{m(N,a).then(function(oe){if(!(oe&&oe.ok)){if(oe&&oe.status>=400&&oe.status<500){var G=t.preferFallback;if(G!=null&&G!==a){w(N,_,G);return}if(f(N)){w(N,_,a);return}return}var le=CONVERSION_RETRY_DELAYS_MS[_];if(le==null){x(N);return}setTimeout(function(){w(N,_+1,a)},le)}})}catch{}}function x(N){if(isConversionQueueAllowed())try{var _={};
3Object.keys(N).forEach(function(a){_[a]=N[a]}),_.created_at==null&&(_.created_at=new Date().toISOString());var Y=I();Y.push(_),Y.length>CONVERSION_QUEUE_MAX_ROWS&&(Y=Y.slice(Y.length-CONVERSION_QUEUE_MAX_ROWS)),localStorage.setItem(t.storageKey,JSON.stringify(Y))}catch{}}function I(){try{var N=localStorage.getItem(t.storageKey);if(!N)return[];var _=JSON.parse(N);if(!Array.isArray(_))return[];var Y=Date.now()-CONVERSION_QUEUE_TTL_MS;return _.filter(function(a){if(a==null||typeof a!="object")return!1;var oe=Date.parse(a.created_at);return isNaN(oe)||oe>=Y})}catch{return[]}}return{insert:function(N){l()&&w(N,0)},flush:function(){if(l()&&isConversionQueueAllowed()){var N=I();try{localStorage.removeItem(t.storageKey)}catch{return}N.forEach(function(_){w(_,0)})}}}}var SITE_BUY_PLACEMENTS_FIRST_ID=1e3,BUY_PLACEMENTS={PRODUCT_HEADER:{id:1,name:"Product page header"},PRODUCT_VERDICT:{id:2,name:"Product page verdict"},PRODUCT_STICKY_BAR:{id:3,name:"Product page sticky bar"},PRODUCT_PRICE_HISTORY:{id:4,name:"Product page price history"},COMPARISON_TABLE:{id:5,name:"Comparison table"},CATEGORY_TOP_PICKS:{id:6,name:"Category page Top picks"},GALLERY_CARD:{id:7,name:"Gallery card"},BEST_SELLERS_PAGE:{id:8,name:"Best Sellers page"},CATEGORY_BEST_SELLERS:{id:9,name:"Category Best Sellers page"},TOP_RATED_PAGE:{id:10,name:"Top Rated page"},VS_HERO:{id:11,name:"Vs page product cards"},VS_PROS_CONS:{id:12,name:"Vs page pros and cons"},VS_VERDICT:{id:13,name:"Vs page verdict"},VS_STICKY_BAR:{id:14,name:"Vs page sticky bar"},USE_CASE_TOP_PICKS:{id:15,name:"Use case page Top picks"},HOME_BEST_SELLERS:{id:16,name:"Home Best Sellers"},HOME_DEALS:{id:17,name:"Home Deals"},HOME_NEW_RELEASES:{id:18,name:"Home New Releases"},HOME_USE_CASE_RAILS:{id:19,name:"Home use case rails"},ASSISTANT:{id:20,name:"Assistant"},RECOMMENDATIONS_CONTINUE:{id:21,name:"Recommendations: continue where you left off"},RECOMMENDATIONS_FOR_YOU:{id:22,name:"Recommendations: you might also like"},AGENT_OPEN_STORE:{id:23,name:"Browser agent: open store"}};function listBuyPlacements(r){var t=r??(typeof SITE_BUY_PLACEMENTS<"u"?SITE_BUY_PLACEMENTS:{}),o=[];return[BUY_PLACEMENTS,t].forEach(function(l){Object.keys(l).forEach(function(d){o.push({key:d,id:l[d].id,name:l[d].name})})}),o}function resolveBuyPlacement(r,t){var o=r==null||r===""?NaN:Number(r);if(!Number.isInteger(o)||o<1)return{key:"none",label:"Not recorded",index:null};var l=listBuyPlacements(t).filter(function(d){return d.id===o})[0];return{key:String(o),label:l?l.name:"Placement "+o,index:o}}typeof module<"u"&&module.exports&&(typeof global<"u"&&(global.BUY_PLACEMENTS=BUY_PLACEMENTS,global.SITE_BUY_PLACEMENTS_FIRST_ID=SITE_BUY_PLACEMENTS_FIRST_ID),module.exports.BUY_PLACEMENTS=BUY_PLACEMENTS,module.exports.SITE_BUY_PLACEMENTS_FIRST_ID=SITE_BUY_PLACEMENTS_FIRST_ID,module.exports.listBuyPlacements=listBuyPlacements,module.exports.resolveBuyPlacement=resolveBuyPlacement);var REFERRER_STORAGE_KEY="referrer",REFERRER_TTL_MS=720*60*60*1e3,CAMPAIGN_PARAMS=["utm_source","utm_medium","utm_campaign","utm_content"],CAMPAIGN_VALUE_MAX=100;function isExternalReferrer(r){if(!r)return!1;try{return new URL(r).hostname!==location.hostname}catch{return!1}}function readCampaignParams(r){var t=null;try{var o=new URLSearchParams(r||"");CAMPAIGN_PARAMS.forEach(function(l){var d=String(o.get(l)||"").trim().toLowerCase().replace(/\s+/g," ").slice(0,CAMPAIGN_VALUE_MAX);d!==""&&(t==null&&(t={}),t[l]=d)})}catch{return null}return t}function liveCampaign(){return typeof location<"u"?readCampaignParams(location.search):null}function liveReferrer(){return typeof document<"u"&&document.referrer?document.referrer:""}function isReferrerStorageAllowed(){return typeof window>"u"||window.analyticsConsent!==!1}function readStoredTouch(){if(!isReferrerStorageAllowed())return null;try{var r=localStorage.getItem(REFERRER_STORAGE_KEY);if(!r)return null;var t=JSON.parse(r);if(!t||typeof t.timestamp!="number"||Date.now()-t.timestamp>=REFERRER_TTL_MS)return null;var o=t.campaign&&typeof t.campaign=="object"?t.campaign:null;return!t.referrer&&o==null?null:{referrer:t.referrer||null,campaign:o}}catch{return null}}function storeTouch(r,t){if(isReferrerStorageAllowed())try{localStorage.setItem(REFERRER_STORAGE_KEY,JSON.stringify({referrer:r,campaign:t,timestamp:Date.now()}))}catch{}}function captureReferrer(){var r=liveReferrer(),t=isExternalReferrer(r),o=liveCampaign();(t||o!=null)&&storeTouch(t?r:null,o)}function getAttributedReferrer(){var r=liveReferrer();if(isExternalReferrer(r))return r;
3if(liveCampaign()!=null)return null;var t=readStoredTouch();return t!=null?t.referrer:null}function getAttributedCampaign(){var r=liveCampaign();if(r==null&&!isExternalReferrer(liveReferrer())){var t=readStoredTouch();r=t!=null?t.campaign:null}var o={};return CAMPAIGN_PARAMS.forEach(function(l){o[l]=r!=null&&r[l]?String(r[l]).slice(0,CAMPAIGN_VALUE_MAX):null}),o}captureReferrer();var VISITOR_ID_STORAGE_KEY="visitor-id",VISITOR_INITIAL_PATH_KEY="initial-path",visitorIdCache=null;function newVisitorId(){try{if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID()}catch{}return"v-"+Date.now().toString(36)+"-"+Math.random().toString(36).slice(2,10)}function getVisitorId(){if(typeof window<"u"&&window.analyticsConsent===!1)return null;if(visitorIdCache)return visitorIdCache;try{if(typeof window<"u"&&window.__visitorId)return visitorIdCache=window.__visitorId,visitorIdCache}catch{}try{var r=localStorage.getItem(VISITOR_ID_STORAGE_KEY);if(r)return visitorIdCache=r,visitorIdCache}catch{}visitorIdCache=newVisitorId();try{localStorage.setItem(VISITOR_ID_STORAGE_KEY,visitorIdCache)}catch{}return visitorIdCache}function isIpad(r){return/iPad/i.test(r)?!0:/Macintosh/.test(r)&&typeof navigator.maxTouchPoints=="number"&&navigator.maxTouchPoints>1}function getDeviceType(){var r=typeof navigator<"u"&&navigator.userAgent?navigator.userAgent:"";if(isIpad(r)||/Tablet|PlayBook|Silk|Kindle|Nexus (7|9|10)/i.test(r)||/Android/.test(r)&&!/Mobile/.test(r))return"tablet";if(/Mobi|iPhone|iPod|Windows Phone|IEMobile|Opera Mini/i.test(r))return"mobile";var t=typeof navigator<"u"?navigator.userAgentData:null;return t&&typeof t.mobile=="boolean"&&t.mobile?"mobile":"desktop"}function getOs(){var r=typeof navigator<"u"&&navigator.userAgent?navigator.userAgent:"",t=typeof navigator<"u"?navigator.userAgentData:null,o=t&&t.platform?String(t.platform):"";return/Android/i.test(o)||/Android/.test(r)?"Android":/iOS/i.test(o)||/iPhone|iPod/.test(r)||isIpad(r)?"iOS":/Windows/i.test(o)||/Windows/.test(r)?"Windows":/Chrome OS/i.test(o)||/CrOS/.test(r)?"Chrome OS":/macOS/i.test(o)||/Macintosh|Mac OS X/.test(r)?"macOS":/Linux/i.test(o)||/Linux|X11/.test(r)?"Linux":null}var VISITOR_BROWSER_RULES=[{name:"Instagram",match:/Instagram/i},{name:"Facebook",match:/FBAN|FBAV|FB_IAB/i},{name:"TikTok",match:/BytedanceWebview|TikTok|musical_ly/i},{name:"Snapchat",match:/Snapchat/i},{name:"Pinterest",match:/Pinterest/i},{name:"LinkedIn",match:/LinkedInApp/i},{name:"Edge",match:/Edg(?:iOS|A|W)?\//i},{name:"Opera",match:/OPR\/|OPiOS\/|Opera/i},{name:"Samsung Internet",match:/SamsungBrowser/i},{name:"Firefox",match:/Firefox\/|FxiOS\//i},{name:"Chrome",match:/Chrome\/|CriOS\//i},{name:"Safari",match:/Safari\//}];function getBrowser(){var r=typeof navigator<"u"&&navigator.userAgent?navigator.userAgent:"";if(!r)return null;for(var t=0;t<VISITOR_BROWSER_RULES.length;t++)if(VISITOR_BROWSER_RULES[t].match.test(r))return VISITOR_BROWSER_RULES[t].name;return null}function captureInitialPath(){if(!(typeof window<"u"&&window.analyticsConsent===!1))try{sessionStorage.getItem(VISITOR_INITIAL_PATH_KEY)||sessionStorage.setItem(VISITOR_INITIAL_PATH_KEY,location.pathname)}catch{}}function getInitialPath(){if(typeof window<"u"&&window.analyticsConsent===!1)return null;try{var r=sessionStorage.getItem(VISITOR_INITIAL_PATH_KEY);if(r)return r}catch{}return typeof location<"u"&&location.pathname?location.pathname:null}function getVisitorContext(){return{user_id:getVisitorId(),device_type:getDeviceType(),os:getOs(),browser:getBrowser(),initial_path:getInitialPath()}}captureInitialPath();var VISIT_HISTORY_STORAGE_KEY="visit-history",VISIT_HISTORY_VERSION=1,VISIT_HISTORY_TTL_MS=720*60*60*1e3,VISIT_HISTORY_KIND_BUDGETS={view:250,buy:50,search:50,pin:40,filter:40,sort:20},VISIT_HISTORY_DEFAULT_BUDGET=40,VISIT_HISTORY_MAX_BYTES=64*1024,VISIT_HISTORY_WRITE_DELAY_MS=400,VISIT_HISTORY_KIND_WEIGHTS={buy:5,pin:3,filter:2,search:1,sort:1,view:1},VISIT_HISTORY_HALF_LIFE_DAYS=7,VISIT_HISTORY_MAX_PATH_LENGTH=240,VISIT_HISTORY_MAX_VALUE_LENGTH=80,visitHistoryCache=null,visitHistoryWriteTimer=null,visitHistoryFirstSeen=null;function isVisitHistoryText(r){return typeof r=="string"&&r.trim()!==""}function assignVisitHistoryField(r,t,o,l){isVisitHistoryText(o)&&
3(r[t]=o.trim().slice(0,l))}function normalizeVisitHistoryPath(r){if(!isVisitHistoryText(r))return null;var t=r.trim();for(t.charAt(0)!=="/"&&(t="/"+t);t.length>1&&t.charAt(t.length-1)==="/";)t=t.slice(0,t.length-1);return t.slice(0,VISIT_HISTORY_MAX_PATH_LENGTH)}function visitHistoryIdentity(r){return r.k==="view"?r.p||"":r.k==="search"?r.q||"":r.k==="filter"||r.k==="sort"?(r.it||"")+"|"+(r.f||""):(r.it||"")+"/"+(r.id||"")}function hasVisitHistoryIdentity(r){return r.k==="view"?isVisitHistoryText(r.p):r.k==="search"?isVisitHistoryText(r.q):r.k==="filter"||r.k==="sort"?isVisitHistoryText(r.f):isVisitHistoryText(r.id)}function visitHistoryKey(r){return r.k+"|"+visitHistoryIdentity(r)}function buildVisitHistoryEntry(r,t){if(!isVisitHistoryText(r))return null;var o=t||{},l={k:r.trim(),t:Date.now(),c:1},d=normalizeVisitHistoryPath(o.path);return d!=null&&(l.p=d),assignVisitHistoryField(l,"g",o.pageType,VISIT_HISTORY_MAX_VALUE_LENGTH),assignVisitHistoryField(l,"it",o.itemType,VISIT_HISTORY_MAX_VALUE_LENGTH),assignVisitHistoryField(l,"id",o.itemId,VISIT_HISTORY_MAX_VALUE_LENGTH),assignVisitHistoryField(l,"b",o.brandId,VISIT_HISTORY_MAX_VALUE_LENGTH),assignVisitHistoryField(l,"f",o.feature,VISIT_HISTORY_MAX_VALUE_LENGTH),assignVisitHistoryField(l,"s",o.storeId,VISIT_HISTORY_MAX_VALUE_LENGTH),isVisitHistoryText(o.query)&&(l.q=o.query.trim().toLowerCase().slice(0,VISIT_HISTORY_MAX_VALUE_LENGTH)),typeof o.results=="number"&&isFinite(o.results)&&(l.n=o.results),typeof o.placement=="number"&&isFinite(o.placement)&&(l.x=o.placement),hasVisitHistoryIdentity(l)?l:null}function visitHistoryBudget(r){return Object.prototype.hasOwnProperty.call(VISIT_HISTORY_KIND_BUDGETS,r)?VISIT_HISTORY_KIND_BUDGETS[r]:VISIT_HISTORY_DEFAULT_BUDGET}function pruneVisitHistory(r){if(!Array.isArray(r))return[];for(var t=Date.now(),o=[],l=0;l<r.length;l++){var d=r[l];!d||!isVisitHistoryText(d.k)||typeof d.t!="number"||t-d.t>=VISIT_HISTORY_TTL_MS||o.push(d)}for(var m=Object.create(null),f=[],w=o.length-1;w>=0;w--){var x=o[w].k,I=m[x]||0;I>=visitHistoryBudget(x)||(m[x]=I+1,f.push(o[w]))}return f.reverse(),f}function serializeVisitHistory(r){return JSON.stringify({v:VISIT_HISTORY_VERSION,f:visitHistoryFirstSeen,e:r})}function oldestVisitHistoryTimestamp(r){for(var t=null,o=0;o<r.length;o++)(t==null||r[o].t<t)&&(t=r[o].t);return t}function isVisitHistoryAllowed(){return typeof window>"u"||window.analyticsConsent!==!1}function readVisitHistoryEntries(){if(!isVisitHistoryAllowed())return visitHistoryFirstSeen=null,[];if(visitHistoryCache!=null)return visitHistoryCache;var r=[],t=null;try{var o=localStorage.getItem(VISIT_HISTORY_STORAGE_KEY);if(o){var l=JSON.parse(o);l&&l.v===VISIT_HISTORY_VERSION&&Array.isArray(l.e)&&(r=l.e,typeof l.f=="number"&&isFinite(l.f)&&(t=l.f))}}catch{r=[]}return visitHistoryCache=pruneVisitHistory(r),t==null&&(t=oldestVisitHistoryTimestamp(visitHistoryCache)),visitHistoryFirstSeen=t??Date.now(),visitHistoryCache}function writeVisitHistory(){if(visitHistoryWriteTimer=null,!!isVisitHistoryAllowed())try{for(var r=pruneVisitHistory(visitHistoryCache||[]),t=serializeVisitHistory(r);t.length>VISIT_HISTORY_MAX_BYTES&&r.length>0;)r=r.slice(Math.max(1,Math.ceil(r.length/10))),t=serializeVisitHistory(r);visitHistoryCache=r;try{localStorage.setItem(VISIT_HISTORY_STORAGE_KEY,t)}catch{r=r.slice(Math.floor(r.length/2)),visitHistoryCache=r;try{localStorage.setItem(VISIT_HISTORY_STORAGE_KEY,serializeVisitHistory(r))}catch{}}}catch{}}function scheduleVisitHistoryWrite(){if(visitHistoryWriteTimer==null)try{visitHistoryWriteTimer=setTimeout(writeVisitHistory,VISIT_HISTORY_WRITE_DELAY_MS)}catch{writeVisitHistory()}}function flushVisitHistory(){if(visitHistoryWriteTimer!=null){try{clearTimeout(visitHistoryWriteTimer)}catch{}visitHistoryWriteTimer=null,writeVisitHistory()}}function recordVisitHistoryEvent(r,t){if(isVisitHistoryAllowed())try{var o=buildVisitHistoryEntry(r,t);if(o==null)return;for(var l=readVisitHistoryEntries(),d=visitHistoryKey(o),m=l.length-1;m>=0;m--)if(visitHistoryKey(l[m])===d){var f=l[m];o.c=(typeof f.c=="number"?f.c:1)+1,l.splice(m,1);break}l.push(o),visitHistoryCache=l,scheduleVisitHistoryWrite()}catch{}}function recordPageVisit(){var r=typeof window<"u"&&window.pageContext?window.pageContext:{},t=typeof location<"u"&&location.pathname?location.pathname:null,o=r.type;!isVisitHistoryText(o)&&typeof window<"u"&&isVisitHistoryText(window.pageType)&&(o=window.pageType),recordVisitHistoryEvent("view",{path:isVisitHistoryText(r.path)?r.path:t,pageType:
3o,itemType:r.itemType,itemId:r.itemId,brandId:r.brandId})}function scheduleVisitHistoryPageVisit(){var r=function(){recordPageVisit(),flushVisitHistory()};try{if(typeof requestIdleCallback=="function"){requestIdleCallback(r,{timeout:1e3});return}}catch{}try{setTimeout(r,0)}catch{r()}}function getVisitHistory(){return readVisitHistoryEntries().slice()}function getRecentlyViewedItems(r){for(var t=typeof r=="number"&&r>0?r:10,o=readVisitHistoryEntries(),l=[],d=o.length-1;d>=0&&l.length<t;d--){var m=o[d];m.k!=="view"||!m.it||!m.id||l.push({itemType:m.it,itemId:m.id,brandId:m.b||null,path:m.p||null,lastSeen:m.t,count:typeof m.c=="number"?m.c:1})}return l}function visitHistoryRecencyWeight(r){var t=(Date.now()-r)/864e5;return t>0?Math.pow(.5,t/VISIT_HISTORY_HALF_LIFE_DAYS):1}function visitHistoryKindWeight(r){return Object.prototype.hasOwnProperty.call(VISIT_HISTORY_KIND_WEIGHTS,r)?VISIT_HISTORY_KIND_WEIGHTS[r]:1}function rankVisitHistoryField(r,t){for(var o=typeof t=="number"&&t>0?t:5,l=readVisitHistoryEntries(),d=Object.create(null),m=0;m<l.length;m++){var f=l[m],w=f[r];if(isVisitHistoryText(w)){var x=typeof f.c=="number"?f.c:1,I=visitHistoryKindWeight(f.k)*x*visitHistoryRecencyWeight(f.t);d[w]=(d[w]||0)+I}}var N=[];for(var _ in d)N.push({id:_,score:d[_]});return N.sort(function(Y,a){return a.score!==Y.score?a.score-Y.score:Y.id.localeCompare(a.id)}),N.slice(0,o)}function getVisitHistoryDaysKnown(){if(!isVisitHistoryAllowed())return null;if(readVisitHistoryEntries(),visitHistoryFirstSeen==null)return 0;var r=Math.floor((Date.now()-visitHistoryFirstSeen)/(1440*60*1e3));return r>0?r:0}function getTopItemTypes(r){return rankVisitHistoryField("it",r)}function getTopBrands(r){return rankVisitHistoryField("b",r)}function clearVisitHistory(){if(visitHistoryCache=[],visitHistoryFirstSeen=Date.now(),visitHistoryWriteTimer!=null){try{clearTimeout(visitHistoryWriteTimer)}catch{}visitHistoryWriteTimer=null}try{localStorage.removeItem(VISIT_HISTORY_STORAGE_KEY)}catch{}}if(typeof document<"u"){scheduleVisitHistoryPageVisit();try{window.addEventListener("pagehide",flushVisitHistory),document.addEventListener("visibilitychange",function(){document.visibilityState==="hidden"&&flushVisitHistory()})}catch{}}var CONSENT_MEASUREMENT_STORAGE_KEYS=["visitor-id","visit-history","referrer","pending-sales","pending-subscriptions"],CONSENT_MEASUREMENT_SESSION_KEYS=["initial-path"],CONSENT_ANALYTICS_COOKIE_RE=/^_ga(_|$)|^_gid$|^_gat/,consentBarElement=null,consentBarResizeObserver=null;function consentState(){return typeof window<"u"&&window.cookieConsent?window.cookieConsent:null}function setAnalyticsDisabled(r){typeof googleAnalyticsMeasurementId>"u"||!googleAnalyticsMeasurementId||(window["ga-disable-"+googleAnalyticsMeasurementId]=r===!0)}function expireCookie(r){var t=r+"=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/",o=location.hostname.split(".");try{document.cookie=t}catch{}for(var l=0;l<o.length-1;l++){var d=o.slice(l).join(".");try{document.cookie=t+"; domain="+d,document.cookie=t+"; domain=."+d}catch{}}}function removeMeasurementData(){typeof clearVisitHistory=="function"&&clearVisitHistory(),CONSENT_MEASUREMENT_STORAGE_KEYS.forEach(function(r){try{localStorage.removeItem(r)}catch{}}),CONSENT_MEASUREMENT_SESSION_KEYS.forEach(function(r){try{sessionStorage.removeItem(r)}catch{}});try{document.cookie.split(";").forEach(function(r){var t=r.split("=")[0].trim();CONSENT_ANALYTICS_COOKIE_RE.test(t)&&expireCookie(t)})}catch{}}function startMeasurement(){if(setAnalyticsDisabled(!1),typeof window.loadAnalytics=="function"&&window.loadAnalytics(),typeof getVisitorId=="function"){var r=getVisitorId();try{r&&!localStorage.getItem(CONSENT_MEASUREMENT_STORAGE_KEYS[0])&&localStorage.setItem(CONSENT_MEASUREMENT_STORAGE_KEYS[0],r)}catch{}}typeof captureInitialPath=="function"&&captureInitialPath(),typeof captureReferrer=="function"&&captureReferrer(),typeof scheduleVisitHistoryPageVisit=="function"&&scheduleVisitHistoryPageVisit()}function applyConsentChoice(r){var t=consentState();t!=null&&(t.save(r),r==="granted"?startMeasurement():(setAnalyticsDisabled(!0),removeMeasurementData()),hideConsentBar())}function updateConsentBarHeight(){consentBarElement!=null&&document.documentElement.style.setProperty("--consent-bar-height",consentBarElement.offsetHeight+"px")}function buildConsentBarButton(r,t){var o=document.createElement("button");
3return o.type="button",o.className="consentBarButton",o.textContent=r,o.addEventListener("click",function(){applyConsentChoice(t)}),o}function buildConsentBar(){var r=document.createElement("section");r.className="consentBar",r.setAttribute("aria-label",i18n("consent.regionLabel"));var t=document.createElement("div");t.className="consentBarInner";var o=document.createElement("p");o.className="consentBarText",o.appendChild(document.createTextNode(i18n("consent.message")+" "));var l=consentState();if(l!=null&&l.privacyPath){var d=document.createElement("a");d.className="consentBarLink",d.href=l.privacyPath,d.textContent=i18n("consent.privacyLink"),o.appendChild(d)}t.appendChild(o);var m=document.createElement("div");return m.className="consentBarActions",m.appendChild(buildConsentBarButton(i18n("consent.reject"),"denied")),m.appendChild(buildConsentBarButton(i18n("consent.accept"),"granted")),t.appendChild(m),r.appendChild(t),r}function showConsentBar(){if(consentBarElement==null){consentBarElement=buildConsentBar(),document.body.insertBefore(consentBarElement,document.body.firstChild),document.documentElement.classList.add("consentBarOpen"),updateConsentBarHeight();try{typeof ResizeObserver=="function"?(consentBarResizeObserver=new ResizeObserver(updateConsentBarHeight),consentBarResizeObserver.observe(consentBarElement)):window.addEventListener("resize",updateConsentBarHeight)}catch{}}}function hideConsentBar(){consentBarElement!=null&&(consentBarResizeObserver!=null&&(consentBarResizeObserver.disconnect(),consentBarResizeObserver=null),window.removeEventListener("resize",updateConsentBarHeight),consentBarElement.remove(),consentBarElement=null,document.documentElement.classList.remove("consentBarOpen"),document.documentElement.style.removeProperty("--consent-bar-height"))}function onConsentLocationUpdated(r){var t=consentState(),o=r&&r.detail?r.detail.countryCode:null;t==null||t.stored||t.gpc||t.region||t.inRegion(o)&&(t.region=!0,t.apply("pending"),setAnalyticsDisabled(!0),removeMeasurementData(),showConsentBar())}function initCookieConsent(){var r=consentState();r!=null&&(r.state==="pending"&&showConsentBar(),document.addEventListener("click",function(t){var o=t.target&&t.target.closest?t.target.closest("[data-consent-open]"):null;o!=null&&(t.preventDefault(),showConsentBar())}),window.addEventListener("location:updated",onConsentLocationUpdated))}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",initCookieConsent):initCookieConsent()),(function(){var r=document.getElementsByClassName("js-f-header");if(r.length>0){let ne=function(){r[0].classList.toggle("f-header--scrolled",window.pageYOffset>8)},ge=function(){for(var M=r[0].getElementsByClassName("f-header__nav")[0].querySelectorAll('[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex]:not([tabindex="-1"]), [contenteditable], audio[controls], video[controls], summary'),W=!1,ce=0;ce<M.length;ce++)if(M[ce].offsetWidth||M[ce].offsetHeight||M[ce].getClientRects().length){W=M[ce];break}return W},ue=function(M){return M.offsetWidth||M.offsetHeight||M.getClientRects().length},z=function(M){if(!M)return!1;var W=getComputedStyle(M);return W.display!="none"&&W.visibility!="hidden"&&W.opacity!="0"},C=function(M,W){var ce=M.closest(".f-header__item");ce&&ce.classList.toggle("f-header__item--closed",W)},P=function(M){M&&(M.setAttribute("aria-expanded","false"),C(M,j()!="mobile"))},q=function(){!ue(t)&&r[0].classList.contains("f-header--expanded")&&t.click(),v()},ee=function(M){document.getElementsByClassName("f-header__nav")[0].classList.toggle("f-header__nav--is-visible",M),r[0].classList.toggle("f-header--expanded",M),t.setAttribute("aria-expanded",M),de(M),M?((!o||!ue(o))&&(o=ge()),o&&o.focus()):l&&(l.focus(),l=!1)},J=function(M){M.target&&M.target.closest&&M.target.closest(".f-header__nav")||M.preventDefault()},de=function(M){var W=M?"addEventListener":"removeEventListener";window[W]("wheel",J,{passive:!1}),window[W]("touchmove",J,{passive:!1})},v=function(){document.documentElement.style.setProperty("--f-header-offset",r[0].getBoundingClientRect().top+"px")},k=function(){for(var M=window.location.pathname.replace(/\/+$/,"")||"/",W=r[0].querySelectorAll(".f-header__link[href], .f-header__dropdown-link[href]"),ce=!1,ye=-1,Q=0;Q<W.length;Q++){var Se;try{Se=new URL(W[Q].getAttribute("href"),window.location.origin)}catch{continue}if(Se.origin===window.location.origin){var Ue=Se.pathname.replace(/\/+$/,"");Ue&&(M===Ue||M.indexOf(Ue+"/")===0)&&Ue.length>ye&&(ce=W[Q],ye=Ue.length)}}if(ce){for(var ut=r[0].querySelectorAll('[aria-current="page"]'),Je=0;Je<ut.length;Je++)ut[Je].removeAttribute("aria-current");ce.setAttribute("aria-current","page")}},R=function(){for(var M=r[0].getElementsByClassName("js-f-header__dropdown-control"),W=0;W<M.length;W++){var ce="f-header-dropdown-"+W,ye=M[W].nextElementSibling;ye.hasAttribute("id")?ce=ye.getAttribute("id"):ye.setAttribute("id",ce),M[W].setAttribute("aria-controls",ce)}},j=function(){return getComputedStyle(r[0],":before").getPropertyValue("content").replace(/\'|"/g,"")};var m=ne,f=ge,w=ue,x=z,I=C,N=P,_=q,Y=ee,a=J,oe=de,G=v,le=k,me=R,pe=j,t=r[0].getElementsByClassName("js-anim-menu
3-btn")[0],o=!1,l=!1;v(),R(),k(),t.addEventListener("anim-menu-btn-clicked",function(M){ee(M.detail)}),window.addEventListener("keyup",function(M){if(M.keyCode&&M.keyCode==27||M.key&&M.key.toLowerCase()=="escape"){var W=r[0].querySelector(".f-header__categories-btn");W&&z(W.nextElementSibling)&&P(W),t.getAttribute("aria-expanded")=="true"&&ue(t)&&(l=t,t.click())}(M.keyCode&&M.keyCode==9||M.key&&M.key.toLowerCase()=="tab")&&t.getAttribute("aria-expanded")=="true"&&ue(t)&&!document.activeElement.closest(".js-f-header")&&t.click()}),r[0].addEventListener("click",function(M){var W=M.target.closest(".js-f-header__dropdown-control");W&&(W.getAttribute("aria-expanded")?W.removeAttribute("aria-expanded"):W.setAttribute("aria-expanded","true"))}),r[0].addEventListener("click",function(M){var W=M.target.closest(".f-header__categories-btn");!W||j()=="mobile"||(M.preventDefault(),z(W.nextElementSibling)?P(W):(W.setAttribute("aria-expanded","true"),C(W,!1)))}),r[0].addEventListener("mouseover",function(M){var W=M.target.closest(".f-header__item--closed");!W||W.contains(M.relatedTarget)||W.classList.remove("f-header__item--closed")}),document.addEventListener("click",function(M){if(!M.target.closest(".js-f-header")){var W=r[0].querySelector('.f-header__categories-btn[aria-expanded="true"]');W&&P(W)}}),r[0].addEventListener("mouseout",function(M){var W=M.target.closest(".js-f-header__dropdown-control");W&&j()!="mobile"&&W.removeAttribute("aria-expanded")}),r[0].addEventListener("focusin",function(M){var W=M.target.closest(".js-f-header__dropdown-control"),ce=M.target.closest(".f-header__dropdown");if(!ce&&!(W&&W.hasAttribute("aria-expanded"))&&j()!="mobile"){var ye=r[0].querySelector('.js-f-header__dropdown-control[aria-expanded="true"]');ye&&ye.removeAttribute("aria-expanded")}});var d=!1;window.addEventListener("resize",function(){clearTimeout(d),d=setTimeout(q,500)}),window.addEventListener("scroll",ne,{passive:!0}),ne()}})(),(function(){var r=document.getElementsByClassName("js-anim-menu-btn");if(r.length>0){let l=function(d){d.addEventListener("click",function(w){w.preventDefault();
3var f=!d.classList.contains("anim-menu-btn--state-b");d.classList.toggle("anim-menu-btn--state-b",f);var w=new CustomEvent("anim-menu-btn-clicked",{detail:f});d.dispatchEvent(w)})};for(var o=l,t=0;t<r.length;t++)(function(d){l(r[d])})(t)}})();function trackAmazonPrimeSignupClick(r){if(typeof sendGA=="function"){var t={placement:r.getAttribute("data-placement"),store:r.getAttribute("data-store")},o=r.getAttribute("data-shopping-event");o&&(t.shopping_event=o),sendGA("prime_signup_click",t)}}(function(){var r=document.getElementsByClassName("js-back-to-top")[0];if(r){let ne=function(){var J=o.scrollTop||document.documentElement.scrollTop;t||(J=window.scrollY||document.documentElement.scrollTop);var de=J>=m;f>0&&(de=J>=m&&window.innerHeight+J<f),r.classList.toggle("back-to-top--is-visible",de),w=!1},ge=function(){m=z(I,l,!0),f=z(N,d)},ue=function(){if(window.ResizeObserver){var J=[];if(I&&J.push(I),N&&N!==I&&J.push(N),J.length!==0)for(var de=new ResizeObserver(function(){ge(),ne()}),v=0;v<J.length;v++)de.observe(J[v])}},z=function(J,de,v){var k=0;if(J){var R=o.scrollTop||document.documentElement.scrollTop;t||(R=window.scrollY||document.documentElement.scrollTop);var j=J.getBoundingClientRect();k=v?j.bottom:j.top,k=k+R}return de&&de&&(k=k+parseInt(de)),k},C=function(){var J=P();if(J<=0)return;var de=window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches;if(de||!window.requestAnimationFrame){q(0);return}var v=450,k=null;function R(j){k===null&&(k=j);var M=Math.min((j-k)/v,1),W=1-Math.pow(1-M,3);q(Math.round(J*(1-W))),M<1&&window.requestAnimationFrame(R)}window.requestAnimationFrame(R)},P=function(){return t?o.scrollTop:window.scrollY||document.documentElement.scrollTop},q=function(J){t?o.scrollTo(0,J):window.scrollTo(0,J)},ee=function(J){J||(J=document.getElementsByTagName("body")[0]),J.focus({preventScroll:!0}),document.activeElement!==J&&(J.setAttribute("tabindex","-1"),J.focus({preventScroll:!0}))};var _=ne,Y=ge,a=ue,oe=z,G=C,le=P,me=q,pe=ee,t=r.getAttribute("data-element"),o=t?document.querySelector(t):window,l=parseInt(r.getAttribute("data-offset-in"))||parseInt(r.getAttribute("data-offset"))||0,d=parseInt(r.getAttribute("data-offset-out"))||0,m=0,f=0,w=!1,x=!1,I=r.getAttribute("data-target-in")?document.querySelector(r.getAttribute("data-target-in")):!1,N=r.getAttribute("data-target-out")?document.querySelector(r.getAttribute("data-target-out")):!1;ge(),ue(),r.addEventListener("click",function(J){J.preventDefault(),C(),ee(document.getElementById(r.getAttribute("href").replace("#","")))}),ne(),(m>0||f>0)&&o.addEventListener("scroll",function(J){w||(w=!0,window.requestAnimationFrame?window.requestAnimationFrame(ne):setTimeout(function(){ne()},250))}),window.addEventListener("resize",function(){clearTimeout(x),x=setTimeout(function(){ge(),ne()},200)}),window.addEventListener("load",function(){ge(),ne()})}})(),(function(){var r=["home","item","item-type","item-type-compare","deals","latest","best-sellers","vs"];function t(){document.documentElement.classList.remove("recsPending","recsPendingTwo")}function o(){if(typeof getVisitHistory!="function")return!1;var w=window.pageContext||{},x=typeof w.path=="string"?w.path:location.pathname;return getVisitHistory().some(function(I){return I.k==="view"?!!I.it&&I.p!==x:(I.k==="buy"||I.k==="pin")&&!!I.it&&!!I.id})}function l(w,x){var I=document.querySelector(w);return I?I.getAttribute(x):null}function d(w){return new Promise(function(x){var I=document.createElement("link");I.rel="stylesheet",I.href=w,I.onload=x,I.onerror=x,document.head.appendChild(I)})}function m(){var w=l("script[data-recommendations-panel]","data-recommendations-panel");if(w==null||!o()){t();return}var x=l("link[data-recommendations-css]","data-recommendations-css");Promise.all([loadLazyScripts(w),x?d(x):null]).then(function(){if(typeof renderRecommendations=="function")return renderRecommendations();t()}).catch(function(I){t()})}if(r.indexOf(window.pageType)===-1){t();return}function f(){typeof requestIdleCallback=="function"?requestIdleCallback(m,{timeout:1500}):setTimeout(m,0)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",f):f()})(),(function(){var r=document.modelContext||navigator.modelContext;if(r==null||typeof r.registerTool!="function")return;function t(d){for(var m=d!=null?d.toolName:null,f=document.querySelectorAll("form[toolname]"),w=0;w<f.length;w++)if(!(m!=null&&f[w].getAttribute("toolname")!==m))for(var x=f[w].querySelectorAll("[data-agent-empty]"),I=0;I<x.length;I++)x[I].value=""}window.addEventListener("toolactivated",t),typeof r.addEventListener=="function"&&r.addEventListener("toolactivated",t);function o(){var d=document.querySelector("script[data-webmcp-tools]"),m=d?d.getAttribute("data-webmcp-tools"):null;!m||typeof loadLazyScripts!="function"||loadLazyScripts(m).then(function(){typeof registerWebMcpTools=="function"&&registerWebMcpTools(r)},function(f){})}function l(){typeof requestIdleCallback=="function"?requestIdleCallback(o,{timeout:2e3}):setTimeout(o,0)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",l):l()})(),(function(){var r=function(f){this.element=f,this.triggers=document.querySelectorAll('[aria-controls="'+this.element.getAttribute("id")+'"]'),this.firstFocusable=null,this.lastFocusable=null,this.moveFocusEl=null,this.modalFocus=this.element.getAttribute("data-modal-first-focus")?this.element.querySelector(this.element.getAttribute("data-modal-first-focus")):null,this.selectedTrigger=null,this.preventScrollEl=this.getPreventScrollEl(),this.showClass="modal--is-visible",this.initModal()};r.prototype.getPreventScrollEl=function(){var f=!1,w=this.element.getAttribute("data-modal-prevent-scroll");return w&&(f=document.querySelector(w)),f},r.prototype.initModal=function(){var f=this;if(this.triggers)for(var w=0;w<this.triggers.length;w++)this.triggers[w].addEventListener("click",function(x){if(x.preventDefault(),f.element.classList.contains(f.showClass)){f.closeModal();return}f.selectedTrigger=x.currentTarget,f.showModal(),f.initModalEvents()});this.element.addEventListener("openModal",function(x){x.detail&&(f.selectedTrigger=x.detail),f.showModal(),f.initModalEvents()}),this.element.addEventListener("closeModal",function(x){x.detail&&(f.selectedTrigger=x.detail),f.closeModal()}),this.element.classList.contains(this.showClass)&&this.initModalEvents()},r.prototype.showModal=function(){var f=this;this.element.classList.add(this.showClass),this.getFocusableElements(),this.moveFocusEl&&(this.moveFocusEl.focus(),this.element.addEventListener("transitionend",function w(x){f.moveFocusEl&&f.moveFocusEl.focus(),f.element.removeEventListener("transitionend",w)})),this.emitModalEvents("modalIsOpen"),this.preventScrollEl&&(this.preventScrollEl.style.overflow="hidden")},r.prototype.closeModal=function(){this.element.classList.contains(this.showClass)&&(this.element.classList.remove(this.showClass),this.firstFocusable=null,this.lastFocusable=null,this.moveFocusEl=null,this.selectedTrigger&&this.selectedTrigger.focus(),this.cancelModalEvents(),this.emitModalEvents("modalIsClose"),this.preventScrollEl&&(this.preventScrollEl.style.overflow=""))},r.prototype.initModalEvents=function(){this.element.addEventListener("keydown",this),this.element.addEventListener("click",this)},r.prototype.cancelModalEvents=function(){this.element.removeEventListener("keydown",this),this.element.removeEventListener("click",this)},r.prototype.handleEvent=function(f){switch(f.type){case"click":this.initClick(f);case"keydown":this.initKeyDown(f)}},r.prototype.initKeyDown=function(f){f.keyCode&&f.keyCode==9||f.key&&f.key=="Tab"?this.trapFocus(f):(f.keyCode&&f.keyCode==13||f.key&&f.key=="Enter")&&f.target.closest(".
3js-modal__close")&&(f.preventDefault(),this.closeModal())},r.prototype.initClick=function(f){!f.target.closest(".js-modal__close")&&!f.target.classList.contains("js-modal")||(f.preventDefault(),this.closeModal())},r.prototype.trapFocus=function(f){this.firstFocusable==document.activeElement&&f.shiftKey&&(f.preventDefault(),this.lastFocusable.focus()),this.lastFocusable==document.activeElement&&!f.shiftKey&&(f.preventDefault(),this.firstFocusable.focus())},r.prototype.getFocusableElements=function(){var f=this.element.querySelectorAll(l);this.getFirstVisible(f),this.getLastVisible(f),this.getFirstFocusable()},r.prototype.getFirstVisible=function(f){for(var w=0;w<f.length;w++)if(t(f[w])){this.firstFocusable=f[w];break}},r.prototype.getLastVisible=function(f){for(var w=f.length-1;w>=0;w--)if(t(f[w])){this.lastFocusable=f[w];break}},r.prototype.getFirstFocusable=function(){if(!this.modalFocus||!Element.prototype.matches){this.moveFocusEl=this.firstFocusable;return}var f=this.modalFocus.matches(l);if(f)this.moveFocusEl=this.modalFocus;else{this.moveFocusEl=!1;for(var w=this.modalFocus.querySelectorAll(l),x=0;x<w.length;x++)if(t(w[x])){this.moveFocusEl=w[x];break}this.moveFocusEl||(this.moveFocusEl=this.firstFocusable)}},r.prototype.emitModalEvents=function(f){var w=new CustomEvent(f,{detail:this.selectedTrigger});this.element.dispatchEvent(w)};function t(f){return f.offsetWidth||f.offsetHeight||f.getClientRects().length}window.Modal=r;var o=document.getElementsByClassName("js-modal"),l='[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex]:not([tabindex="-1"]), [contenteditable], audio[controls], video[controls], summary';if(o.length>0){for(var d=[],m=0;m<o.length;m++)(function(f){d.push(new r(o[f]))})(m);window.addEventListener("keydown",function(f){if(f.keyCode&&f.keyCode==27||f.key&&f.key.toLowerCase()=="escape")for(var w=0;w<d.length;w++)(function(x){d[x].closeModal()})(w)})}})();function openModal(r){var t=new CustomEvent("openModal");r.dispatchEvent(t)}(function(){var r=function(v){!("CSS"in window)||!CSS.supports("color","var(--color-var)")||(this.options=de(r.defaults,v),this.element=this.options.element,this.input=this.element.getElementsByClassName("js-autocomplete__input")[0],this.results=this.element.getElementsByClassName("js-autocomplete__results")[0],this.resultsList=this.results.getElementsByClassName("js-autocomplete__list")[0],this.ariaResult=this.element.getElementsByClassName("js-autocomplete__aria-results"),this.resultClassName=this.element.getElementsByClassName("js-autocomplete__item").length>0?"js-autocomplete__item":"js-autocomplete__result",this.inputVal="",this.typeId=!1,this.searching=!1,this.searchingClass=this.element.getAttribute("data-autocomplete-searching-class")||"autocomplete--searching",this.dropdownActiveClass=this.element.getAttribute("data-autocomplete-dropdown-visible-class")||this.element.getAttribute("data-dropdown-active-class"),this.truncateDropdown=!!(this.element.getAttribute("data-autocomplete-dropdown-truncate")&&this.element.getAttribute("data-autocomplete-dropdown-truncate")=="on"),t(this),this.autocompleteClosed=!1)};function t(v){o(v),l(v),d(v)}function o(v){v.input.setAttribute("role","combobox"),v.input.setAttribute("aria-autocomplete","list");var k=v.resultsList.getAttribute("id");k&&(v.input.setAttribute("aria-controls",k),v.input.setAttribute("aria-owns",k)),v.input.setAttribute("aria-expanded","false"),v.resultsList.setAttribute("role","list")}function l(v){v.templateItems=v.resultsList.querySelectorAll("."+v.resultClassName+"[data-autocomplete-template]"),v.templateItems.length<1&&(v.templateItems=v.resultsList.querySelectorAll("."+v.resultClassName)),v.templates=[];for(var k=0;k<v.templateItems.length;k++)v.templates[k]=v.templateItems[k].getAttribute("data-autocomplete-template")}function d(v){v.input.addEventListener("keyup",function(k){f(v,k)}),v.input.addEventListener("search",function(k){x(v)}),v.input.addEventListener("click",function(k){x(v,!0)}),v.input.addEventListener("focus",function(k){if(v.autocompleteClosed){v.autocompleteClosed=!1;return}x(v,!0)}),v.input.addEventListener("blur",function(k){m(v,k)}),v.resultsList.addEventListener("keydown",function(k){oe(v,k)}),v.resultsList.addEventListener("focusout",function(k){m(v,k)}),window.addEventListener("keyup",function(k){k.keyCode&&k.keyCode==27||k.
3key&&k.key.toLowerCase()=="escape"?I(v,!1):(k.keyCode&&k.keyCode==13||k.key&&k.key.toLowerCase()=="enter")&&pe(v,document.activeElement.closest("."+v.resultClassName),k)}),document.addEventListener("pointerdown",function(k){v.element.classList.contains(v.dropdownActiveClass)&&(v.element.contains(k.target)||I(v,!1))}),v.resultsList.addEventListener("click",function(k){pe(v,k.target.closest("."+v.resultClassName),k)})}function m(v,k){v.element.contains(k.relatedTarget)||I(v,!1)}function f(v,k){k.key.toLowerCase()=="arrowdown"||k.keyCode=="40"?w(v):x(v)}function w(v){if(v.element.classList.contains(v.dropdownActiveClass)){a(v);var k=0;le(v.resultsItems[k])||(k=G(v,k,!0)),me(v.resultsItems[k]).focus()}}function x(v,k){var R=v.input.value;if(!(R==v.inputVal&&!k)){if(v.inputVal=R,v.typeId&&clearInterval(v.typeId),v.inputVal.length<v.options.characters){I(v,!1);return}if(k){_(v,"focus");return}v.typeId=setTimeout(function(){_(v,"type")},v.options.debounce)}}function I(v,k){if(k){if(v.element.classList.contains(v.dropdownActiveClass))return;v.element.classList.add(v.dropdownActiveClass),v.input.setAttribute("aria-expanded","true"),N(v)}else{if(!v.element.classList.contains(v.dropdownActiveClass))return;v.resultsList.contains(document.activeElement)&&(v.autocompleteClosed=!0,v.input.focus()),v.element.classList.remove(v.dropdownActiveClass),v.input.setAttribute("aria-expanded","false"),a(v)}}function N(v){if(v.truncateDropdown){v.resultsList.style.maxHeight="";var k=window.innerHeight-v.input.getBoundingClientRect().bottom-10,R=parseInt(getComputedStyle(v.resultsList).maxHeight);R>k?v.resultsList.style.maxHeight=k+"px":v.resultsList.style.maxHeight=""}}function _(v,k){v.searching||(v.searching=!0,v.element.classList.add(v.searchingClass),v.options.searchData(v.inputVal,function(R,j){ge(v,R,j),v.element.classList.remove(v.searchingClass),I(v,!0),Y(v),v.searching=!1},k))}function Y(v){v.resultsItems=v.resultsList.querySelectorAll("."+v.resultClassName+'[tabindex="-1"]'),v.ariaResult.length!=0&&(v.ariaResult[0].textContent=v.resultsItems.length)}function a(v){v.typeId&&clearInterval(v.typeId),v.typeId=!1}function oe(v,k){var R=k.key.toLowerCase()=="arrowdown"||k.keyCode=="40",j=k.key.toLowerCase()=="arrowup"||k.keyCode=="38";if(!(!R&&!j)){k.preventDefault();var M=document.activeElement.closest("."+v.resultClassName)||document.activeElement,W=Array.prototype.indexOf.call(v.resultsItems,M),ce=G(v,W,R);me(v.resultsItems[ce]).focus()}}function G(v,k,R){var j=R?k+1:k-1;return j<0&&(j=v.resultsItems.length-1),j>=v.resultsItems.length&&(j=0),le(v.resultsItems[j])?j:G(v,j,R)}function le(v){var k=v.getAttribute("role");return!(k&&k=="presentation")}function me(v){var k=v,R=k.querySelectorAll("button:not([disabled]), [href]");return R.length>0&&(k=R[0]),k}function pe(v,k,R){k&&(v.options.onClick?v.options.onClick(k,v,R,function(){I(v,!1)}):(v.input.value=ne(k),I(v,!1)),v.inputVal=v.input.value)}function ne(v){var k=v.querySelector("[data-autocomplete-label]");return k?k.textContent:v.textContent}function ge(v,k,R){for(var j="",M=0;M<k.length;M++)j=j+ue(v,k[M]);v.options.populate?v.resultsList.innerHTML=j:R&&R(j)}function ue(v,k){var R=z(v,k);R.classList.remove("autocomplete__item--is-hidden"),R.setAttribute("tabindex","-1");for(var j in k)k.hasOwnProperty(j)&&(j=="label"?C(R,k[j]):j=="class"?P(R,k[j]):j=="url"?q(R,k[j]):j=="src"?ee(R,k[j]):J(R,j,k[j]));return R.outerHTML}function z(v,k){var R=!1;if(v.templateItems.length==1||!k.template)R=v.templateItems[0];else{for(var j=0;j<v.templateItems.length;j++)k.template==v.templates[j]&&(R=v.templateItems[j]);R||(R=v.templateItems[0])}return R.cloneNode(!0)}function C(v,k){var R=v.querySelector("[data-autocomplete-label]");R?R.textContent=k:v.textContent=k}function P(v,k){var R=k.split(" ");v.classList.add(R[0]),R.length>1&&P(v,R.slice(1).join(" "))}function q(v,k){var R=v.querySelector("[data-autocomplete-url]");R&&R.setAttribute("href",k)}function ee(v,k){var R=v.querySelector("[data-autocomplete-src]");R&&R.setAttribute("src",k)}function J(v,k,R){var j=v.querySelector("[data-autocomplete-"+k+"]");
3j&&(j.hasAttribute("data-autocomplete-attr")?j.setAttribute(j.getAttribute("data-autocomplete-attr"),R):j.hasAttribute("data-autocomplete-html")?j.innerHTML=R:j.textContent=R)}var de=function(){var v={},k=!1,R=0,j=arguments.length;Object.prototype.toString.call(arguments[0])==="[object Boolean]"&&(k=arguments[0],R++);for(var M=function(ce){for(var ye in ce)Object.prototype.hasOwnProperty.call(ce,ye)&&(k&&Object.prototype.toString.call(ce[ye])==="[object Object]"?v[ye]=extend(!0,v[ye],ce[ye]):v[ye]=ce[ye])};R<j;R++){var W=arguments[R];M(W)}return v};r.defaults={element:"",debounce:200,characters:2,populate:!0,searchData:!1,onClick:!1},window.Autocomplete=r})();var advSearchItems=[],advSearchItemTypes=[],advSearchBrands=[],advTopCategories=[],advSearchExtra={},advSearchVsItemTypes=[],advSearchVsBrands=[],VS_MIN_SIDE_LENGTH=2,VS_SIDE_CANDIDATES=8,VS_MAX_COMPARISONS=10,advSearchDataReady=!1,SEARCH_TRACKING_DEBOUNCE_MS=1e3,SEARCH_TRACKING_MIN_LENGTH=2;(function(){var r=function(C){this.element=C,this.modal=this.element.closest(".js-modal"),this.input=this.element.getElementsByClassName("js-autocomplete__input"),this.filters=this.element.getElementsByClassName("js-adv-search__filters"),this.filter="all";var P=parseInt(this.element.getAttribute("data-adv-search-top-categories"),10);this.topCategoriesCount=isNaN(P)?12:P;var q=parseInt(this.element.getAttribute("data-adv-search-min-characters"),10);this.minCharacters=isNaN(q)?0:q;var ee=parseInt(this.element.getAttribute("data-adv-search-max-results"),10);this.maxResultsPerSection=isNaN(ee)?0:ee,this.submitMode=this.element.getAttribute("data-adv-search-submit"),this.seeAllTarget=this.element.getAttribute("data-adv-search-see-all"),this.categories=this.element.getElementsByClassName("js-adv-search__category"),this.categoryResults=this.element.getElementsByClassName("js-adv-search__category-results"),this.categoryHtml=[],f(this),w(this),x(this),oe(this),t(this),l(this),d(this)};function t(C){var P=C.element.getElementsByClassName("js-search-clear")[0];if(!(!P||C.input.length==0)){var q=C.input[0];P.addEventListener("click",function(ee){ee.preventDefault(),q.value="",q.focus(),q.dispatchEvent(new Event("click"))})}}function o(C,P){return!C.maxResultsPerSection||C.maxResultsPerSection<1?P:P.slice(0,C.maxResultsPerSection)}function l(C){if(!(C.submitMode!="first-result"||C.input.length==0)){var P=C.input[0];P.addEventListener("keydown",function(q){if(!(q.key!="Enter"&&q.keyCode!=13)&&(q.preventDefault(),P.value.trim()!="")){var ee=C.element.querySelector(".js-adv-search__category:not(.adv-search__item--is-hidden) [data-autocomplete-url][href]");ee&&(Y(C),window.location.href=ee.getAttribute("href"))}})}}function d(C){C.seeAllTarget&&C.element.addEventListener("click",function(P){P.target.closest&&P.target.closest("[data-adv-search-see-all-btn]")&&(P.preventDefault(),P.stopPropagation(),m(C))},!0)}function m(C){var P=document.getElementById(C.seeAllTarget);if(P){var q=P.getElementsByClassName("js-autocomplete__input")[0],ee=C.input.length>0?C.input[0].value:"";Y(C),P.dispatchEvent(new CustomEvent("openModal")),q&&(q.value=ee,q.focus(),q.dispatchEvent(new Event("click")))}}function f(C){C.templates=[];for(var P=0;P<C.categoryResults.length;P++){var q=C.categoryResults[P].querySelector("[data-autocomplete-template]");C.templates.push(q.getAttribute("data-autocomplete-template"))}}function w(C){C.categoryHeading=null;for(var P=0;P<C.templates.length;P++)if(C.templates[P]=="item-types"){var q=C.categories[P].querySelector(".resultTitle");q&&(C.categoryHeading=q,C.categoryHeadingDefault=q.textContent,C.categoryHeadingPopular=q.getAttribute("data-adv-search-popular-title")||q.textContent);break}}function x(C){C.searchTrackingTimeout=null,C.pendingSearch=null,C.trackedSearches={},C.element.addEventListener("click",function(P){P.target.closest&&P.target.closest("[data-autocomplete-url]")&&Y(C)})}function I(C){return String(C).trim().toLowerCase().replace(/\s+/g," ")}function N(C,P,q){var ee=I(P);if(ee.length<SEARCH_TRACKING_MIN_LENGTH){_(C);return}C.pendingSearch={term:ee,results:q,filter:C.filter},C.searchTrackingTimeout&&clearTimeout(C.searchTrackingTimeout),C.searchTrackingTimeout=setTimeout(function(){C.searchTrackingTimeout=null,Y(C)},SEARCH_TRACKING_DEBOUNCE_MS)}function _(C){C.searchTrackingTimeout&&(clearTimeout(C.searchTrackingTimeout),C.searchTrackingTimeout=null)}function Y(C){C.searchTrackingTimeout&&(clearTimeout(C.searchTrackingTimeout),C.searchTrackingTimeout=null);var P=C.pendingSearch;if(C.pendingSearch=null,!!P){var q=P.filter+"|"+P.term;C.trackedSearches[q]||(C.trackedSearches[q]=!0,a("search",{search_term:P.term,search_filter:P.filter,search_results:P.results}),P.results==0&&a("search_no_results",{search_term:P.term,search_filter:P.filter}))}}function a(C,P){if(C==="search"&&typeof recordVisitHistoryEvent=="function"&&recordVisitHistoryEvent("search",{query:P?P.search_term:null,results:P?P.search_results:null}),!(typeof sendGA!="function"||typeof gtag!="function"))try{sendGA(C,P)}catch{}}function oe(C){new Autocomplete({element:C.element,characters:C.minCharacters,searchData:function(P,q){G(C,P,q)},populate:!1}
3),C.filters.length>0&&C.filters[0].addEventListener("change",function(P){C.filter=P.target.value,C.input.length>0&&C.input[0].dispatchEvent(new Event("click"))}),C.modal&&C.modal.addEventListener("modalIsClose",function(P){Y(C),C.trackedSearches={},C.modal.addEventListener("transitionend",function q(ee){ee.propertyName=="visibility"&&(C.input.length>0&&(C.input[0].value=""),ge(C),C.modal.removeEventListener("transitionend",q))})})}function G(C,P,q){C.isEmptyState=P=="";var ee=(C.filter=="all"||C.filter=="item-types")&&C.topCategoriesCount>0;if(!advSearchDataReady&&(P!=""||ee)){loadAdvSearchData().then(function(){if(advSearchDataReady&&C.input.length!=0){var R=C.input[0];(R.value!=""||document.activeElement===R)&&R.dispatchEvent(new Event("click"))}}),_(C),q([{label:i18n("search.searching"),template:"no-results"}],function(R){le(C,R)});return}if(P==""){var J=ee?advTopCategories.slice(0,C.topCategoriesCount):[];_(C),q(J,function(R){le(C,R)});return}var de=[],v=0;advSearchSectionMatches(P,C.filter,C.templates.indexOf("vs")>-1).forEach(function(R){var j=R.entries;v+=j.length,R.key=="items"&&P.length==1&&(j=j.slice(0,10)),de=de.concat(o(C,j))});var k=v;C.seeAllTarget&&v>de.length&&de.push({label:i18n("search.seeAllResults",{count:v}),template:"see-all"}),N(C,P,k),de.length==0&&(de=[{label:i18n("search.noResults"),template:"no-results"}]),q(de,function(R){le(C,R)})}function le(C,P){var q=document.createElement("div");q.innerHTML=P;var ee=q.getElementsByClassName("js-autocomplete__item");me(C);for(var J=0;J<ee.length;J++){var de=C.templates.indexOf(ee[J].getAttribute("data-autocomplete-template"));C.categoryHtml[de]=C.categoryHtml[de]+ee[J].outerHTML}pe(C)}function me(C){for(var P=0;P<C.templates.length;P++)C.categoryHtml[P]=""}function pe(C){for(var P=0;P<C.templates.length;P++)C.categories[P].classList.toggle("adv-search__item--is-hidden",C.categoryHtml[P]==""),C.categoryResults[P].innerHTML=C.categoryHtml[P];ne(C)}function ne(C){C.categoryHeading&&(C.categoryHeading.textContent=C.isEmptyState?C.categoryHeadingPopular:C.categoryHeadingDefault)}function ge(C){for(var P=0;P<C.categories.length;P++)C.categories[P].classList.add("adv-search__item--is-hidden")}var ue=document.getElementsByClassName("js-adv-search");if(ue.length>0)for(var z=0;z<ue.length;z++)(function(C){new r(ue[C])})(z)})();function matchEntries(r,t){if(!r)return[];var o=r.filter(function(l){return searchByExactMatch(l,t)});return o.concat(r.filter(function(l){return searchByNotExactMatch(l,t)}))}function searchHaystack(r){var t=r.searchModel;return i18nFold(t?r.label+" "+t:r.label)}function searchByExactMatch(r,t){return searchHaystack(r).indexOf(i18nFold(t))>-1}function searchByNotExactMatch(r,t){if(searchByExactMatch(r,t))return!1;const o=searchHaystack(r);return i18nFold(t).split(" ").every(d=>o.includes(d))}function withMatchedModel(r,t){var o=r.searchModel;if(!o)return r;var l=i18nFold(t);if(i18nFold(r.label).indexOf(l)>-1)return r;var d=i18nFold(o),m=l.split(" ").filter(function(w){return w!=""}),f=d.indexOf(l)>-1||m.some(function(w){return d.indexOf(w)>-1});return f?Object.assign({},r,{model:o}):r}function matchWithSides(r,t,o,l){var d=new Set,m=[],f=[t];return o&&o.sides.forEach(function(w){w.length>=VS_MIN_SIDE_LENGTH&&f.push(w)}),f.forEach(function(w){matchEntries(r,w).forEach(function(x){d.has(x)||(d.add(x),m.push(l?l(x,w):x))})}),m}var vsSeparatorPattern=null;function getVsSeparatorPattern(){if(vsSeparatorPattern)return vsSeparatorPattern;var r=i18n("search.vsSeparators").split(",").map(function(t){return i18nFold(t.trim()).replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}).filter(function(t){return t!=""});return vsSeparatorPattern=r.length>0?new RegExp("(?:^|\\s)(?:"+r.join("|")+")\\.?(?=\\s|$)"):/$^/,vsSeparatorPattern}function splitVsQuery(r){var t=i18nFold(r),o=getVsSeparatorPattern().exec(t);if(!o)return null;var l=[t.slice(0,o.index).trim(),t.slice(o.index+o[0].length).trim()];return l[0]==""&&l[1]==""?null:{sides:l}}function rankVsSide(r,t){if(t.length<VS_MIN_SIDE_LENGTH)return[];var o=[];return r.forEach(function(l,d){var m=l.entry;if(!(!searchByExactMatch(m,t)&&!searchByNotExactMatch(m,t))){var f=i18nFold(m.label),w=f.indexOf(t)>-1?2:searchByExactMatch(m,t)?1.5:1,x=f.replace(/\([^)]*\)/g," ").replace(/\s+/g," ").trim()||f;o.push({candidate:l,score:w+Math.min(1,t.length/x.length),index:d})}}),o.sort(function(l,d){return d.score-l.score||l.index-d.index}),o.slice(0,VS_SIDE_CANDIDATES)}function vsPairSlug(r,t){return[r,t].sort().join("-vs-")}function vsComparisonRow(r,t,o,l,d){var m={label:i18n("vs.pairLabel",{item1:r.entry.label,item2:t.entry.label}),url:o,itemType:l,template:"vs"};return r.entry.src&&(m.src=r.entry.src),t.entry.src&&(m.secondSrc=t.entry.src),d&&(m.class=d),m}function buildVsComparisons(r){var t=[];
3function o(f,w,x){f.forEach(function(I){w.forEach(function(N){I.candidate.id!=N.candidate.id&&t.push({score:I.score+N.score,row:x(I.candidate,N.candidate)})})})}if(advSearchVsBrands.length>0){var l=i18n("search.vsBrandsLabel");o(rankVsSide(advSearchVsBrands,r.sides[0]),rankVsSide(advSearchVsBrands,r.sides[1]),function(f,w){return vsComparisonRow(f,w,"/brands/vs/"+vsPairSlug(f.id,w.id),l,"searchResultPair--brands")})}advSearchVsItemTypes.forEach(function(f){o(rankVsSide(f.products,r.sides[0]),rankVsSide(f.products,r.sides[1]),function(w,x){return vsComparisonRow(w,x,"/"+f.id+"/"+vsPairSlug(w.id,x.id),f.name)})}),t.sort(function(f,w){return w.score-f.score});var d=new Set,m=[];return t.forEach(function(f){m.length>=VS_MAX_COMPARISONS||d.has(f.row.url)||(d.add(f.row.url),m.push(f.row))}),m}function advSearchSectionMatches(r,t,o){var l=splitVsQuery(r),d=[];return(t=="all"||t=="vs")&&l&&o&&d.push({key:"vs",entries:buildVsComparisons(l)}),(t=="all"||t=="items")&&d.push({key:"items",entries:matchWithSides(advSearchItems,r,l,withMatchedModel)}),(t=="all"||t=="item-types")&&d.push({key:"item-types",entries:matchWithSides(advSearchItemTypes,r,l)}),(t=="all"||t=="brands")&&d.push({key:"brands",entries:matchWithSides(advSearchBrands,r,l)}),Object.keys(advSearchExtra).forEach(function(m){(t=="all"||t==m)&&d.push({key:m,entries:matchWithSides(advSearchExtra[m],r,l)})}),d}var advSearchDataPromise=null,advSearchDataLoadFailed=!1;function loadAdvSearchData(){return advSearchDataPromise||(advSearchDataLoadFailed=!1,advSearchDataPromise=(async()=>{const r=loadResourcesCache(),t=await r.getSearchJson();advSearchItems=[],advSearchVsItemTypes=[],t["item-types"].forEach(o=>{var l=o.vs===!0?{id:o.id,name:o.name,products:[]}:null;o.items.forEach(d=>{var m={label:d.name,src:r.getItemThumbImagePath(o.id,d.id),url:`/${o.id}/${d.id}`,itemType:o.name,brand:d.brand,template:"items"};d.model&&(m.searchModel=d.model),advSearchItems.push(m),l&&l.products.push({id:d.id,entry:m})}),l&&advSearchVsItemTypes.push(l)}),advSearchItemTypes=[],t["item-types"].forEach(o=>{advSearchItemTypes.push({label:o.name,url:`/${o.id}`,template:"item-types"})}),advTopCategories=t["item-types"].slice().sort((o,l)=>(l.items?l.items.length:0)-(o.items?o.items.length:0)).map(o=>({label:o.name,url:`/${o.id}`,template:"item-types"})),advSearchBrands=[],advSearchVsBrands=[],t&&t.brands&&t.brands.forEach(o=>{var l={label:o.name,url:`/brands/${o.id}`,template:"brands"};o.logo&&(l.src=o.logo,l.class="searchResultBrand--logo"),advSearchBrands.push(l),t["brands-vs"]===!0&&advSearchVsBrands.push({id:o.id,entry:l})}),advSearchExtra={},t&&Object.keys(t).forEach(o=>{if(!(o==="item-types"||o==="brands"||o==="brands-vs")){var l=t[o];Array.isArray(l)&&(advSearchExtra[o]=l.map(d=>({label:d.name,url:d.url,template:o})))}}),advSearchDataReady=!0})().catch(r=>{advSearchDataPromise=null,advSearchDataLoadFailed=!0}),advSearchDataPromise)}document.addEventListener("pointerdown",function(r){r.target&&r.target.closest&&r.target.closest('[aria-controls="adv-search-modal"]')&&loadAdvSearchData()}),document.addEventListener("focusin",function(r){r.target&&r.target.closest&&r.target.closest(".js-adv-search")&&loadAdvSearchData()}),window.addEventListener("online",function(){advSearchDataLoadFailed&&loadAdvSearchData()});class HtmlBuilder{constructor(){this.data=[]}push(t){t.includes("undefined"),this.data.push(t)}build(){return this.data.join("")}}const stores={aliexpress:{name:"Aliexpress",currency:"$",currency_iso:"USD"},amazon_ae:{name:"Amazon UAE",currency:"\u062F.\u0625",currency_iso:"AED",base_url:"https://www.amazon.ae/"},amazon_au:{name:"Amazon Australia",currency:"A$",currency_iso:"AUD",base_url:"https://www.amazon.com.au/"},amazon_be:{name:"Amazon Belgium",currency:"\u20AC",currency_iso:"EUR",base_url:"https://www.amazon.com.be/"},amazon_br:{name:"Amazon Brazil",currency:"R$",currency_iso:"BRL",base_url:"https://www.amazon.com.br/"},amazon_ca:{name:"Amazon Canada",currency:"C$",currency_iso:"CAD",base_url:"https://www.amazon.ca/"},amazon_de:{name:"Amazon Germany",currency:"\u20AC",currency_iso:"EUR",base_url:"https://www.amazon.de/"},amazon_es:{name:"Amazon Spain",currency:"\u20AC",currency_iso:"EUR",base_url:"https://www.amazon.es/"},amazon_fr:{name:"Amazon France",currency:"\u20AC",currency_iso:"EUR",base_url:"https://www.amazon.fr/"},amazon_in:{name:"Amazon India",currency:"\u20B9",currency_iso:"INR",base_url:"https://www.amazon.in/"},amazon_it:{name:"Amazon Italy",currency:"\u20AC",currency_iso:"EUR",base_url:"https://www.amazon.it/"},amazon_jp:{name:"Amazon Japan",currency:"\xA5",currency_iso:"JPY",base_url:"https://www.amazon.co.jp/"},amazon_mx:{name:"Amazon Mexico",currency:"MX$",currency_iso:"MXN",base_url:"https://www.amazon.com.mx/"},amazon_nl:{name:"Amazon Netherlands",currency:"\u20AC",currency_iso:"EUR",base_url:"https://www.amazon.nl/"},amazon_pl:{name:"Amazon Poland",currency:"z\u0142",currency_iso:"PLN",base_url:"https://www.amazon.pl/"},amazon_sa:{name:"Amazon Saudi Arabia",currency:"\u0631.\u0633",currency_iso:"SAR",base_url:"https://www.amazon.sa/"},amazon_se:{name:"Amazon Sweden",currency:"kr",currency_iso:"SEK",base_url:"https://www.amazon.se/"},amazon_sg:{name:"Amazon Singapore",currency:"S$",currency_iso:"SGD",base_url:"https://www.amazon.sg/"},amazon_uk:{name:"Amazon UK",currency:"\xA3",currency_iso:"GBP",base_url:"https://www.amazon.co.uk/"},amazon_us:{name:"Amazon USA",currency:"$",currency_iso:"USD",base_url:"https://www.amazon.com/"},meli_ar:{name:"Mercado Libre",currency:"$",currency_iso:"ARS",price_decimals:0},meli_ar_int:{name:"Mercado Libre (Internacional)",currency:"$",currency_iso:"ARS",price_decimals:0},official:{name:"Official Store",currency:"$",currency_iso:"USD"}
3,raspberry_pi_4:{name:"Raspberry Pi 4",currency:"$",currency_iso:"USD"},raspberry_pi_5:{name:"Raspberry Pi 5",currency:"$",currency_iso:"USD"}};typeof global<"u"&&typeof module<"u"&&module.exports&&(global.stores=stores);function getCurrency(r){return stores[r]?.currency}function getCurrencyISO(r){return stores[r]?.currency_iso}function getPriceDecimals(r){return stores[r]?.price_decimals}function truncatePriceDecimals(r,t){if(t==null)return r;var o=String(r).trim();if(!/^-?\d+(?:\.\d+)?$/.test(o))return r;var l=Number(o).toFixed(Math.max(2,t)).split(".");return t>0?l[0]+"."+l[1].slice(0,t):l[0]}function buildAmazonUrl(r,t,o){const l=new URL(`${stores[t].base_url}dp/${encodeURIComponent(o)}`);return l.searchParams.set("tag",r.find(d=>d.id===t).tag),l.toString()}function resolveBrandStores(r,t){return Array.isArray(t)?t.filter(o=>o!=null&&r.some(l=>l.id===o.id)).map(o=>{const l=r.find(m=>m.id===o.id).tag;if(!l||!o.url)return o;const d=new URL(o.url);return d.searchParams.set("tag",l),{...o,url:d.toString()}}):t}function isMarketplaceStore(r){return r!=null&&typeof r.id=="string"&&r.id.indexOf("amazon_")===0}function getStoreAsin(r){if(!r||!r.id||String(r.id).indexOf("amazon_")!==0)return"";var t=r.asin;if(!t){var o=/\/dp\/([A-Z0-9]{10})(?:[\/?#]|$)/i.exec(r.url||"");t=o?o[1]:""}return/^[A-Z0-9]{10}$/i.test(t)?String(t).toUpperCase():""}function buildAmazonCartUrl(r,t){var o=Math.floor(Number(t));if(!isFinite(o)||o<2)return"";var l;try{l=new URL(r)}catch{return""}var d=l.searchParams.get("tag"),m=/\/dp\/([A-Z0-9]{10})(?:[\/?#]|$)/i.exec(l.pathname);if(!d||!m)return"";var f=new URL(l.origin+"/gp/aws/cart/add.html");return f.searchParams.set("AssociateTag",d),f.searchParams.set("ASIN.1",m[1].toUpperCase()),f.searchParams.set("Quantity.1",String(o)),f.toString()}function isStoreChanged(r){const t=getMatchingStoreId(defaultLocation),o=getMatchingStoreId(r);return t!=o}function getMatchingStoreId(r){var t=void 0;for(const o of supportedStores){if(o.countryCodes?.includes(r.countryCode))return o.id;t==null&&o.continentCodes?.includes(r.continentCode)&&(t=o.id)}return t==null&&(t=supportedStores[0].id),t}var STORE_ATTR_SEPARATORS={asin:"~",price:":",listPrice:"%",percentage:"=",maxQuantity:"+",unavailable:"*",currency:"#",name:"@",url:"!"};function storeKeyToId(r){return r==null||r===""?"":stores[r]!=null?r:"amazon_"+r}function storeIdToKey(r){return String(r).indexOf("amazon_")===0?String(r).slice(7):String(r)}function trimStorePrice(r){if(r==null||r===""||r==="-"||r==="?")return"";var t=String(r);return t.indexOf(".")===-1?t:t.replace(/0+$/,"").replace(/\.$/,"")}function encodeStoresAttribute(r){if(!Array.isArray(r)||r.length===0)return"";for(var t="",o=0;o<r.length;o++){var l=getStoreAsin(r[o]);if(l!==""){t=l;break}}var d=[];return r.forEach(function(m){if(!(m==null||m.id==null)){var f=String(m.id),w=storeIdToKey(f),x=f.indexOf("amazon_")===0;if(x){var I=getStoreAsin(m);I!==""&&I!==t&&(w+=STORE_ATTR_SEPARATORS.asin+I)}var N=trimStorePrice(m.price);N!==""&&(w+=STORE_ATTR_SEPARATORS.price+N);var _=trimStorePrice(m.listPrice);_!==""&&_!==N&&(w+=STORE_ATTR_SEPARATORS.listPrice+_),m.percentage!=null&&m.percentage!==""&&(w+=STORE_ATTR_SEPARATORS.percentage+trimStorePrice(m.percentage)),m["max-quantity"]>0&&(w+=STORE_ATTR_SEPARATORS.maxQuantity+m["max-quantity"]),m.unavailable===!0&&(w+=STORE_ATTR_SEPARATORS.unavailable),m.currency!=null&&m.currency!==getCurrency(f)&&(w+=STORE_ATTR_SEPARATORS.currency+m.currency),m.name!=null&&m.name!==""&&(w+=STORE_ATTR_SEPARATORS.name+m.name),(!x||x&&getStoreAsin(m)==="")&&m.url!=null&&m.url!==""&&(w+=STORE_ATTR_SEPARATORS.url+m.url),d.push(w)}}),d.length===0?"":t+"|"+d.join(",")}function decodeStoresAttribute(r){if(r==null||r==="")return[];var t=String(r),o=t.indexOf("|");if(o===-1)return[];var l=t.slice(0,o),d=t.slice(o+1);if(d==="")return[];var m=[];return d.split(",").forEach(function(f){if(f!==""){var w=void 0,x=f.indexOf(STORE_ATTR_SEPARATORS.url);x!==-1&&(w=f.slice(x+1),f=f.slice(0,x));var I=void 0,N=f.indexOf(STORE_ATTR_SEPARATORS.name);N!==-1&&(I=f.slice(N+1),f=f.slice(0,N));var _=void 0,Y=f.indexOf(STORE_ATTR_SEPARATORS.currency);Y!==-1&&(_=f.slice(Y+1),f=f.slice(0,Y));var a=!1,oe=f.indexOf(STORE_ATTR_SEPARATORS.unavailable);oe!==-1&&(a=!0,f=f.slice(0,oe)+f.slice(oe+1));var G=void 0,le=f.indexOf(STORE_ATTR_SEPARATORS.maxQuantity);le!==-1&&(G=f.slice(le+1),f=f.slice(0,le));
3var me=void 0,pe=f.indexOf(STORE_ATTR_SEPARATORS.percentage);pe!==-1&&(me=f.slice(pe+1),f=f.slice(0,pe));var ne=void 0,ge=f.indexOf(STORE_ATTR_SEPARATORS.listPrice);ge!==-1&&(ne=f.slice(ge+1),f=f.slice(0,ge));var ue=void 0,z=f.indexOf(STORE_ATTR_SEPARATORS.price);z!==-1&&(ue=f.slice(z+1),f=f.slice(0,z));var C="",P=f.indexOf(STORE_ATTR_SEPARATORS.asin);P!==-1&&(C=f.slice(P+1),f=f.slice(0,P));var q=storeKeyToId(f);if(!(q===""||stores[q]==null)){var ee={id:q};if(w==null&&q.indexOf("amazon_")===0){var J=C!==""?C:l;if(J!==""&&stores[q].base_url!=null)try{w=buildAmazonUrl(supportedStores,q,J)}catch{w=void 0}}if(w!=null&&w!==""&&(ee.url=w),ue!=null&&ue!==""&&(ee.price=Number(ue)),ne!=null&&ne!==""&&ee.price!=null){var de=ee.price;ee.price=Number(ne);var v={price:de};me!=null&&me!==""&&(v.percentage=Number(me)),ee.discounts=[v]}G!=null&&G!==""&&(ee["max-quantity"]=Number(G)),a&&(ee.unavailable=!0),ee.currency=_??getCurrency(q),I!=null&&I!==""&&(ee.name=I),m.push(ee)}}}),m}function findStoresAttributeMismatch(r,t){var o=decodeStoresAttribute(t);if(o.length!==r.length)return r.length>0?String(r[0].id):"?";for(var l=0;l<r.length;l++){if(o[l].id!==r[l].id)return String(r[l].id);var d=r[l].url!=null?String(r[l].url):"",m=o[l].url!=null?String(o[l].url):"";if(d!==m||storePaidPrice(r[l])!==storePaidPrice(o[l])||trimStorePrice(storeListPrice(r[l]))!==trimStorePrice(storeListPrice(o[l]))||trimStorePrice(storeDiscountPercentage(r[l]))!==trimStorePrice(storeDiscountPercentage(o[l])))return String(r[l].id);var f=r[l]["max-quantity"]>0?String(r[l]["max-quantity"]):"",w=o[l]["max-quantity"]>0?String(o[l]["max-quantity"]):"";if(f!==w||r[l].unavailable===!0!=(o[l].unavailable===!0))return String(r[l].id)}return""}function storePaidPrice(r){if(r==null)return"";var t=Array.isArray(r.discounts)&&r.discounts.length>0?r.discounts[0]:void 0;return t!=null&&t.price!=null?trimStorePrice(t.price):trimStorePrice(r.price)}function storeListPrice(r){if(r==null)return"";if(r.listPrice!=null)return r.listPrice;var t=Array.isArray(r.discounts)&&r.discounts.length>0?r.discounts[0]:void 0;return t!=null?r.price:""}function storeDiscountPercentage(r){if(r==null)return"";if(r.percentage!=null)return r.percentage;var t=Array.isArray(r.discounts)&&r.discounts.length>0?r.discounts[0]:void 0;return t!=null&&t.percentage!=null?t.percentage:""}var BUY_STORES_DIALOG_HOST_ID="buyStoresDialogHost";function buyStoresDialogHost(){var r=document.getElementById(BUY_STORES_DIALOG_HOST_ID);return r||(r=document.createElement("dialog"),r.id=BUY_STORES_DIALOG_HOST_ID,r.className="buyStoresDialog js-buyStoresDialog",document.body.appendChild(r),bindBuyStoresDialogClose(r),r)}function bindBuyStoresDialogClose(r){r.dataset.buyDialogBound!=="true"&&(r.dataset.buyDialogBound="true",r.addEventListener("click",t=>{if(t.target===r){r.close();return}t.target.closest&&t.target.closest(".js-buyStoresDialog-close")&&r.close()}))}function buildBuyStoresDialogBody(r){var t=typeof itemFromBuyRowElement=="function"?itemFromBuyRowElement(r):void 0;if(t==null)return"";var o=Number(r.dataset.buyPlacement),l=t.actionButtonsConfig(Number.isInteger(o)&&o>0?o:null),d=l.dialogTitle!=null?l.dialogTitle:i18n("store.chooseStore");return t.buyStoresDialogHtml(t.getOrderedBuyStores(),r.dataset.dialogTarget,d,l)}function markTriggerOpen(r,t){r.setAttribute("aria-controls",t.id),r.setAttribute("aria-expanded","true"),t.addEventListener("close",function o(){t.removeEventListener("close",o),r.setAttribute("aria-expanded","false"),r.removeAttribute("aria-controls")})}function openBuyStoresDialog(r){var t=document.getElementById(r.dataset.dialogTarget);if(t&&typeof t.showModal=="function"){markTriggerOpen(r,t),t.showModal();return}var o=buyStoresDialogHost(),l=buildBuyStoresDialogBody(r);if(l!==""){var d=document.createElement("div");d.innerHTML=l;var m=d.querySelector("dialog");o.innerHTML=m?m.innerHTML:l,r.dataset.dialogTarget&&(o.id=r.dataset.dialogTarget);var f=m?m.getAttribute("aria-label"):void 0;f&&o.setAttribute("aria-label",f),markTriggerOpen(r,o),o.addEventListener("close",function w(){o.removeEventListener("close",w),o.id=BUY_STORES_DIALOG_HOST_ID}),typeof o.showModal=="function"&&o.showModal()}}function initBuyStoresDialog(){document.querySelectorAll(".js-buyStoresDialog-open").forEach(r=>{r.dataset.buyDialogBound!=="true"&&(r.dataset.buyDialogBound="true",r.addEventListener("click",()=>openBuyStoresDialog(r)))}),document.querySelectorAll(".js-buyStoresDialog").forEach(r=>{bindBuyStoresDialogClose(r)})}document.addEventListener("DOMContentLoaded",()=>{typeof initBuyStoresDialog=="function"&&initBuyStoresDialog()});function parseItems(r,t,o){var l=[];
3return t.items.forEach(function(d){try{var m=new Item(r,t.categories,t.metadata,d,o);m.updatePrice(),l.push(m)}catch(f){throw f}}),l}function parseItem(r,t,o){return new Item(r,t.categories,t.metadata,t.item,o)}function getBuyWarning(r){var t=void 0;return r.forEach(function(o){o.id==="basic-information"&&o.features.forEach(function(l){l.id=="price"&&(t=l.warning)})}),t}function getBuyLegend(r,t,o){var l=!isMarketplaceStore(o);return r.beta==!0?t=i18n("item.statusJoinBeta"):r["pre-order"]==!0?t=i18n("item.statusReserveNow"):r["coming-soon"]==!0?t=i18n("item.statusComingSoon"):r.discontinued==!0?t=i18n("item.statusDiscontinued"):r.buildable==!0&&l?t=i18n("item.statusBuildNow"):r.installable==!0&&l?t=i18n("item.statusInstallNow"):r["sold-out"]==!0&&(t=i18n("item.statusSoldOut")),t}function abBuyLabelSwaps(){return typeof window<"u"&&window.__abBuyLabels!=null?window.__abBuyLabels:typeof abBuyLabelVariants<"u"?abBuyLabelVariants:[]}function buyButtonLabelHtml(r,t){var o=t===!0?abBuyLabelSwaps():[];if(o.length===0)return`${r}`;var l=new HtmlBuilder;return l.push(`<span class="abLabelBase">${r}</span>`),o.forEach(function(d){l.push(`<span class="abLabel" data-ab-label="${d.test}:${d.variant}">${d.label}</span>`)}),l.build()}var FREE_PRICE_LABEL=i18n("price.free");function isFreePrice(r){if(r==null||r===""||r==="-"||r==="?")return!1;var t=Number(r);return Number.isFinite(t)&&t===0}function isInternalLinkUrl(r){var t=String(r||"");if(t==="")return!1;if(/^https?:\/\//i.test(t)){var o=typeof baseUrl<"u"&&baseUrl!=null?baseUrl:typeof location<"u"?location.origin:null;return o!=null&&t.indexOf(o)===0}return!/^[a-z][a-z0-9+.-]*:/i.test(t)}function relForLinkUrl(r){return isInternalLinkUrl(r)?"":"nofollow"}function itemFromBuyRowElement(r){if(!(r==null||typeof decodeStoresAttribute!="function"||typeof BaseItem!="function")){var t=r.dataset,o=decodeStoresAttribute(t.stores);if(o.length!==0){var l=t.quantitySuggested!=null||t.mainAction!=null||t.primaryAction!=null?r:typeof r.closest=="function"&&r.closest(".buyButtonsRow")||r,d={id:t.itemId,stores:o};t.brandId&&(d.brandId=t.brandId),t.pricesOff==="1"&&(d["price-enabled"]=!1),t.buyAction==="build"&&(d.buildable=!0),t.buyAction==="install"&&(d.installable=!0),t.buyAction==="coming-soon"&&(d["coming-soon"]=!0);var m=typeof remoteResourcesLoader<"u"?remoteResourcesLoader:void 0,f=new BaseItem(t.itemType,null,buyRowMetadataFromElement(l),d,m);return f.includeRepricingData=!0,f}}}function buyRowMetadataFromElement(r){if(r==null||r.dataset==null)return null;var t=r.dataset,o=null;return t.mainAction!=null&&(o={"details-main-action":t.mainAction}),t.primaryAction!=null&&(o=o??{},o["table-main-action"]=t.primaryAction),t.quantitySuggested!=null&&(o=o??{},o["details-buy-quantity"]=Number(t.quantitySuggested),t.quantityMax!=null&&(o["details-buy-quantity-max"]=Number(t.quantityMax)),t.quantityLegend!=null&&(o["details-buy-quantity-legend"]=t.quantityLegend),t.quantityLabel!=null&&(o["details-buy-quantity-label"]=t.quantityLabel)),o}function escapeStoresAttributeValue(r){return String(r).split("&").join("&amp;").split('"').join("&quot;").split("<").join("&lt;").split(">").join("&gt;")}function escapeFeatureValueHtml(r){return String(r).split("&").join("&amp;").split('"').join("&quot;").split("<").join("&lt;").split(">").join("&gt;")}function formatPriceLabel(r,t,o){return isFreePrice(t)?FREE_PRICE_LABEL:(r??"")+i18nDecimalString(truncatePriceDecimals(t,o))}function storeDisplayName(r){if(r=="official")return i18n("store.officialStore");var t=stores[r]!=null?stores[r].name:r,o=/^amazon_([a-z]{2})$/.exec(r);if(o!=null&&i18nUsesIntlRegionNames()){var l=o[1]==="uk"?"GB":o[1].toUpperCase();return i18n("store.amazonRegion",{region:i18nRegionName(l,t)})}return t}class FeatureRenderer{constructor(t,o){this.categoryId=t,this.featureId=o}getFlag(t){}}class LatestReleaseDateRenderer extends FeatureRenderer{getFlag(t){if(!(t=="-"||t=="?")){const o=new Date(t),l=new Date,d=new Date;d.setMonth(l.getMonth()-6);const m=new Date;return m.setFullYear(l.getFullYear()-1),o>=d?"positive":o>=m?"neutral":"negative"}}}class BaseItem{constructor(t,o,l,d,m){this.itemType=t,this.categories=o,this.metadata=l,this.json=d,this.id=d.id,this.remoteResourceLoader=m,this.calculatePrices()}fullName(){return this.json["full-name"]!=null?this.json["full-name"]:this.json.name}getDefaultStore(){let t;if(this.json.stores!=null){let o=getLocation();if(o!=null)for(const l of supportedStores){if(l.countryCodes?.includes(o.countryCode)&&(t=this.json.stores.find(d=>d.id===l.id),t!=null))break;t==null&&l.continentCodes?.includes(o.continentCode)&&(t=this.json.stores.find(d=>d.id===l.id))}t==null&&(t=this.json.stores[0])}return t}getPriceStore(){var t=this.getDefaultStore();if(t==null||t.price!=null||this.json.stores==null)return t;var o=this.json.stores.find(l=>l.price!=null);return o??t}pricesEnabled(){return this.metadata!=null&&this.metadata["price-enabled"]!=null?this.metadata["price-enabled"]!=!1:this.json["price-enabled"]!=!1}getStore(t){var o;
3return this.json.stores!=null&&this.json.stores.forEach(l=>{l.id==t&&(o=l)}),o}getDisplayedLastmod(){var t=this.getPriceStore();if(t==null)return null;if(typeof t.lastcheck=="string"){var o=Date.parse(t.lastcheck);if(Number.isFinite(o)&&o>0)return o}if(t.lastmod==null)return null;var l=Number(t.lastmod);return Number.isFinite(l)&&l>0?l:null}getFreshnessBadgesHtml(){var t=this.getDisplayedLastmod();if(t==null)return"";var o=2208*60*60*1e3;if(Date.now()-t>o)return"";var l=new Date(t);if(Number.isNaN(l.getTime()))return"";var d=i18nDate(l,{month:"long",year:"numeric"});return`<span class="rcUpdatedBadge">${i18n("item.lastUpdated",{date:d})}</span>`}getOrderedBuyStores(){var t=this.json.stores||[];if(t.length<=1)return t.slice();var o=this.getDefaultStore();if(o==null)return t.slice();var l=t.filter(d=>d.id!==o.id);return[o].concat(l)}storeName(t){return t.name!=null?t.name:storeDisplayName(t.id)}storeLogo(t){return`/img/${t.id.split("_")[0]}.png`}isUnnamedActionSource(t){var o=this.json.buildable==!0||this.json.installable==!0;return o&&t.name==null&&t.id=="official"}storeActionLabel(t,o){return this.isUnnamedActionSource(o)?t:i18n("store.actionOnStore",{action:t,store:this.storeName(o)})}storeActionTitle(t,o){var l=this.fullName(),d=l?i18n("store.actionItem",{action:t,item:l}):t;return this.isUnnamedActionSource(o)?d:i18n("store.actionOnStore",{action:d,store:this.storeName(o)})}isGuidedMarketplaceStore(t){var o=this.json.buildable==!0||this.json.installable==!0;return o&&isMarketplaceStore(t)}isBuyAction(t){return this.json.purchasable==!0||this.isGuidedMarketplaceStore(t)}storeActionConfig(t,o){return t==null?this.buyActionConfig():this.isGuidedMarketplaceStore(o)?this.buyActionConfig(t.trackingIndex):t}storeActionVerb(t){return t!=null&&t.storeActionVerb!=null?t.storeActionVerb:i18n("store.actionBuy")}singleStoreItem(t){var o=JSON.parse(JSON.stringify(this.json));return o.stores=[t],new BaseItem(this.itemType,this.categories,this.metadata,o,this.remoteResourceLoader)}storePriceLabel(t){var o=this.singleStoreItem(t);if(o.discountedPrice!=null)return o.formatPrice(o.discountedPrice)}fallbackTrackingPrice(){var t={price:"",currency:""};if(!this.pricesEnabled())return t;var o=this.getTrackingPrice();if(o!=="")return{price:o,currency:this.getTrackingCurrency()};for(var l=this.json.stores||[],d=0;d<l.length;d++)if(l[d].price!=null){var m=this.singleStoreItem(l[d]),f=m.getTrackingPrice();if(f!=="")return{price:f,currency:m.getTrackingCurrency()}}return t}buyTrackingArgs(t,o){var l=this.singleStoreItem(t),d=l.getTrackingPrice(),m=l.getTrackingCurrency(),f=d===""?this.fallbackTrackingPrice():{price:"",currency:""},w=getStoreAsin(t);return[this.itemType,this.json.id,this.brandId(),t.id,d,m,o??null,f.price,f.currency,w]}buyActionConfig(t){var o=this,l=t??null;return{affiliate:!0,trackingIndex:l,titleFor:function(d){var m=o.fullName();return m?i18n("store.buyItemOnStore",{item:m,store:o.storeName(d)}):i18n("store.buyOnStore",{store:o.storeName(d)})},onclickFor:function(d){var m=o.buyTrackingArgs(d,l);return`trackBuyItem('${m[0]}', '${m[1]}', '${m[2]}', '${m[3]}', '${m[4]}', '${m[5]}', ${m[6]}, '${m[7]}', '${m[8]}', '${m[9]}')`},showPrice:!0,quantity:this.buyQuantityConfig()}}buyQuantityConfig(){if(this.buyQuantityAllowed===!0&&!(typeof buyQuantityEnabled<"u"&&buyQuantityEnabled!=!0)&&this.metadata!=null){var t=Number(this.metadata["details-buy-quantity"]);if(!(!isFinite(t)||t<2)){var o=Number(this.metadata["details-buy-quantity-max"]);return{suggested:Math.floor(t),max:isFinite(o)&&o>1?Math.floor(o):void 0,legend:this.metadata["details-buy-quantity-legend"],shortcutLabel:this.metadata["details-buy-quantity-label"]}}}}buyQuantityHtml(t,o){var l=o??{},d=l.quantity;if(d==null||!(d.suggested>1)||buildAmazonCartUrl(t.url,2)===""||t.unavailable===!0)return"";var m=this.singleStoreItem(t),f=m.getTrackingPrice(),w=stores[t.id]!=null?stores[t.id].currency:"",x=getPriceDecimals(t.id),I=t["max-quantity"]>0?t["max-quantity"]:void 0,N=d.max>1?d.max:void 0,_=I!=null&&N!=null?Math.min(I,N):I??N;if(_!=null&&_<2)return"";var Y=_!=null?Math.min(d.suggested,_):d.suggested,a=d.shortcutLabel!=null&&Y===d.suggested?d.shortcutLabel:i18n("quantity.getSuggested",{count:Y}),oe=d.legend!=null?d.legend:"",G=new HtmlBuilder;return G.push('<div class="buyQuantity js-buyQuantity"'),_!=null&&G.push(`     data-max="${_}"`),f!==""&&(G.push(`     data-unit-price="${f}"`),G.push(`     data-currency="${w}"`),x!=null&&G.push(`     data-price-decimals="${x}"`)),G.push("     >"),G.push(`  <button type="button" class="buyQuantityStep js-buyQuantityDown" aria-label="${i18n("quantity.decrease")}" disabled>&minus;</button>
3`),G.push('  <output class="buyQuantityValue js-buyQuantityValue" aria-live="polite">1</output>'),G.push(`  <button type="button" class="buyQuantityStep js-buyQuantityUp" aria-label="${i18n("quantity.increase")}">+</button>`),G.push("</div>"),G.push('<p class="buyQuantityHint">'),oe!==""&&G.push(`  <span class="buyQuantityLegend">${oe}</span>`),G.push(`  <button type="button" class="buyQuantityShortcut js-buyQuantityShortcut" data-quantity="${Y}">${a}</button>`),G.push('  <span class="buyQuantityTotal js-buyQuantityTotal" hidden></span>'),G.push("</p>"),G.build()}abSwappableLabel(t,o){return o==null||o.affiliate!==!0?!1:getBuyLegend(this.json,void 0,t)==null}buyButtonAnchor(t,o,l,d,m){var f=d??this.buyActionConfig(),w="buyButton btn btn-item"+(l!=null?" "+l:""),x=f.affiliate?"nofollow sponsored":relForLinkUrl(t.url),I=new HtmlBuilder;return I.push(`<a href="${t.url}"`),I.push(`   class="${w}"`),x!=""&&I.push(`   rel="${x}"`),I.push('   target="_blank"'),I.push(`   title="${f.titleFor(t)}"`),I.push(`   onclick="${f.onclickFor(t)}">`),I.push(buyButtonLabelHtml(o,m)),I.push("</a>"),I.build()}getBuyButtonsHtml(t,o){var l=t??this.buyActionConfig(),d=l.moreLabel!=null?l.moreLabel:i18n("store.allStores"),m=l.dialogTitle!=null?l.dialogTitle:i18n("store.chooseStore"),f=this.getOrderedBuyStores(),w=this.metadata!=null?this.metadata["details-main-action"]:void 0,x=new HtmlBuilder,I=f.length>=2&&l.primaryOnly!==!0,N=I?"":this.buyStoresDataAttrs(l.trackingIndex),_=l.primaryOnly===!0?"buyButtonsRow buyButtonsRow--single":"buyButtonsRow";if(x.push(`<div class="${_}"${N}${this.buyRowMetadataAttrs()}>`),f.length===0)return x.push("</div>"),x.build();var Y=f[0],a=this.storeActionConfig(l,Y),oe=getBuyLegend(this.json,w,Y);if(w==null&&(oe=this.storeActionLabel(this.storeActionVerb(a),Y)),x.push(this.buyQuantityHtml(Y,a)),x.push(this.buyButtonAnchor(Y,oe,"buyButton--primary",a,this.abSwappableLabel(Y,a))),l.primaryOnly===!0)return x.push("</div>"),x.build();if(f.length>=2){var G=`buyStoresDialog-${this.json.id}${o!=null?"-"+o:""}`;x.push(`<button type="button" class="buyButton btn btn-item buyButton--secondary buyButton--more js-buyStoresDialog-open" aria-haspopup="dialog" data-dialog-target="${G}"${this.buyStoresDataAttrs(l.trackingIndex)}>`),x.push(`  <span>${d}</span>`),x.push('  <svg class="buyButtonMoreIcon" viewBox="0 0 12 12" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M11 4l-5 5-5-5"></path></svg>'),x.push("</button>")}return x.push("</div>"),x.build()}buyStoresDataAttrs(t,o){var l=o===!0||this.includeRepricingData===!0,d=(l?"r":"")+(this.buyQuantityAllowed===!0?"q":"");if(this.encodedStoresPayload==null||this.encodedStoresPayloadShape!==d){this.encodedStoresPayloadShape=d;var m=this.buyStoresPayloadRows(l);this.encodedStoresPayload=encodeStoresAttribute(m);var f=findStoresAttributeMismatch(m,this.encodedStoresPayload);f!==""&&typeof process<"u"&&typeof process.exit=="function"&&process.exit(1)}var w=this.encodedStoresPayload;if(w==="")return"";var x="";x+=` data-item-type="${this.itemType}"`,x+=` data-item-id="${this.json.id}"`;var I=this.brandId();I!=null&&I!=="-"&&(x+=` data-brand-id="${I}"`),x+=` data-buy-placement="${t??null}"`;var N=this.buyActionName();return N!==""&&(x+=` data-buy-action="${N}"`),this.pricesEnabled()||(x+=' data-prices-off="1"'),x+=` data-stores="${escapeStoresAttributeValue(w)}"`,x}buyStoresPayloadRows(t){var o=this,l=t!=null?t===!0:this.includeRepricingData===!0;return(this.json.stores||[]).map(function(d){var m={id:d.id,url:d.url},f=o.singleStoreItem(d);if(f.discountedPrice!=null&&(m.price=f.discountedPrice),l){var w=f.getActiveDiscount();w!=null&&d.price!=null&&trimStorePrice(d.price)!==trimStorePrice(f.discountedPrice)&&(m.listPrice=d.price,w.percentage!=null&&(m.percentage=w.percentage))}return o.buyQuantityAllowed===!0&&(d["max-quantity"]>0&&(m["max-quantity"]=d["max-quantity"]),d.unavailable===!0&&(m.unavailable=!0)),d.currency!=null&&(m.currency=d.currency),d.name!=null&&(m.name=d.name),m})}primaryActionContainerAttrs(t){var o=this.buyStoresDataAttrs(t);if(o==="")return"";o+=this.buyRowMetadataAttrs();var l=this.metadata!=null?this.metadata["table-main-action"]:void 0;return l!=null&&(o+=` data-primary-action="${escapeStoresAttributeValue(l)}"`),` data-buy-primary${o}`}buyBlockAttr(){return` data-buy-block="${this.itemType}/${this.json.id}"`}cardPriceHtml(){var t=this.discountedPrice!=null&&this.discountedPrice!="-"&&this.discountedPrice!="?",o=this.getActiveDiscount(),l=this.originalPrice!=null&&this.originalPrice!="-"&&this.originalPrice!=this.discountedPrice,d=new HtmlBuilder;return d.push(`<div class="fiatPrice${t?"":" hide"}">`),d.push(o!=null?`<div class="discount" data-buy-price="off">${Math.round(o.percentage)}% OFF</div>`:'<div class="discount hide" data-buy-price="off"></div>'),d.push(l?`<div class="originalPrice" data-buy-price="was">${this.formatPrice(this.originalPrice)}</div>`:'<div class="originalPrice hide" data-buy-price="was"></div>'),d.push(t?`<div class="discountedPrice" data-buy-price="now">${this.formatPrice(this.discountedPrice)}</div>`:'<div class="discountedPrice hide" data-buy-price="now"></div>'),d.push("</div>"),d.build()}buyRowMetadataAttrs(){if(this.metadata==null||this.metadata==null)return"";var t="",o=this.metadata["details-main-action"];o!=null&&this.includeRepricingData===!0&&(t+=` data-main-action="${escapeStoresAttributeValue(o)}"`);var l=this.buyQuantityAllowed===!0?this.metadata["details-buy-quantity"]:void 0;if(l!=null){t+=` data-quantity-suggested="${escapeStoresAttributeValue(l)}"`;var d=this.metadata["details-buy-quantity-max"];d!=null&&(t+=` data-quantity-max="${escapeStoresAttributeValue(d)}"`);var m=this.metadata["details-buy-quantity-legend"];m!=null&&(t+=` data-quantity-legend="${escapeStoresAttributeValue(m)}"`);var f=this.metadata["details-buy-quantity-label"];f!=null&&(t+=` data-quantity-label="${escapeStoresAttributeValue(f)}"`)}return t}buyActionName(){return this.json.buildable==!0?"build":this.json["coming-soon"]==!0?"coming-soon":this.json.installable==!0?"install":""}buyStoresDialogHtml(t,o,l,d){var m=d??this.buyActionConfig(),f=new HtmlBuilder;return f.push(`<dialog id="${o}" class="buyStoresDialog js-buyStoresDialog" aria-label="${l}">`),f.push('  <div class="buyStoresDialog__head">'),f.push(`    <h2 class="buyStoresDialog__title">${l}</h2>`),f.push(`    <button type="button" class="buyStoresDialog__close js-buyStoresDialog-close" aria-label="${i18n("chrome.close")}">`),f.push('      <svg viewBox="0 0 24 24" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 6l12 12M18 6L6 18"></path></svg>'),f.push("    </button>"),f.push("  </div>"),f.push('  <ul class="buyStoresDialog__list">'),t.forEach(w=>{var x=this.storeActionConfig(m,w),I=x.showPrice?this.storePriceLabel(w):void 0,N=x.affiliate?"nofollow sponsored":relForLinkUrl(w.url),_=N!=""?` rel="${N}"`:"";f.push("    <li>"),f.push(`      <a class="buyStoresDialog__item" href="${w.url}"${_} target="_blank" title="${x.titleFor(w)}" onclick="${x.onclickFor(w)}">`),f.push(`        <img class="buyStoresDialog__logo" src="${this.storeLogo(w)}" width="28" height="28" alt="${this.storeName(w)}" loading="lazy">
3`),f.push(`        <span class="buyStoresDialog__name">${this.storeName(w)}</span>`),I!=null&&f.push(`        <span class="buyStoresDialog__price">${I}</span>`),f.push('        <svg class="buyStoresDialog__arrow" viewBox="0 0 24 24" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 12h14M13 6l6 6-6 6"></path></svg>'),f.push("      </a>"),f.push("    </li>")}),f.push("  </ul>"),f.push("</dialog>"),f.build()}otherStoresControlHtml(t,o,l){var d=this.getOrderedBuyStores();if(d.length<=1)return"";var m=this.buyActionConfig(o),f=`buyStoresDialog-${this.json.id}${t!=null?"-"+t:""}`,w=new HtmlBuilder;return w.push(`<button type="button" class="buyButton btn btn-item buyButton--secondary buyButton--iconOnly js-buyStoresDialog-open" aria-haspopup="dialog" data-dialog-target="${f}" title="${i18n("store.comparePricesAt",{count:d.length})}" aria-label="${i18n("store.comparePricesOther")}"${this.buyStoresDataAttrs(m.trackingIndex,l)}>`),w.push('  <svg viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z"/><line x1="7" y1="7" x2="7.01" y2="7"/></svg>'),w.push("</button>"),w.build()}linkActionConfig(t,o,l,d,m){var f=this;return{affiliate:!1,showPrice:!1,storeActionVerb:o,moreLabel:l,dialogTitle:d,trackingIndex:m,titleFor:function(w){return f.storeActionTitle(o,w)},onclickFor:function(w){return`${t}('${f.itemType}', '${f.json.id}', '${f.brandId()}')`}}}actionButtonsConfig(t){return this.json.buildable==!0?this.linkActionConfig("trackBuildNow",i18n("store.actionBuild"),i18n("store.allGuides"),i18n("store.chooseGuide"),t):this.json["coming-soon"]==!0?this.linkActionConfig("trackComingSoon",i18n("store.actionReserve"),i18n("store.allStores"),i18n("store.chooseStore"),t):this.json.installable==!0?this.linkActionConfig("trackInstallNow",i18n("store.actionInstall"),i18n("store.allSources"),i18n("store.chooseSource"),t):this.buyActionConfig(t)}getActionButtonsHtml(t,o){return this.getBuyButtonsHtml(this.actionButtonsConfig(o),t)}getCardActionButtonsHtml(t,o){if(typeof cardSingleBuyAction>"u"||cardSingleBuyAction!==!0)return this.getActionButtonsHtml(t,o);var l=this.actionButtonsConfig(o);return l.primaryOnly=!0,this.getBuyButtonsHtml(l,t)}getPrimaryActionHtml(t){var o=this.getDefaultStore();if(o==null||o.url==null)return"";var l=getBuyLegend(this.json,this.metadata!=null?this.metadata["table-main-action"]:void 0,o);if(l==null)return this.getActionButtonsHtml(void 0,t);var d=this.storeActionConfig(this.actionButtonsConfig(t),o);return this.buyButtonAnchor(o,l,"buyButton--primary",d,this.abSwappableLabel(o,d))}brandId(){return this.json.company!=null&&this.json.company.brand!=null&&this.json.company.brand.value!="-"&&this.json.company.brand.value!="?"?this.json.company.brand.value.replace(/\s+/g,"-").replace(/'/g,"").toLowerCase():this.json.brandId!=null&&this.json.brandId!="-"&&this.json.brandId!="?"?this.json.brandId:"-"}getFacetValues(t){if(t==null)return[];if(t.type=="brand"){var o=this.brandId();if(o==null||o=="-"||o=="?")return[];var l=this.brandName();return[{value:o,label:l!=null&&l!=""?l:o}]}if(t.type=="feature-group"){var d=this.json[t.categoryId];if(d==null)return[];var m=[],f=t.options||[];return f.forEach(function(w){var x=w.featureIds||[w.value],I=x.some(function(N){return d[N]!=null&&d[N].supported==!0});I&&m.push({value:w.value,label:w.label})}),m}return[]}facetDataAttrs(){if(typeof itemCardsFacets>"u"||!Array.isArray(itemCardsFacets))return"";var t=this,o="";return itemCardsFacets.forEach(function(l){if(l.type=="brand"){var d=t.brandId();d!=null&&d!="-"&&d!="?"&&(o+=` data-brand="${d}"`)}else if(l.type=="feature-group"){var m=t.getFacetValues(l).map(function(f){return f.value});o+=` data-facet-${l.id}="${m.join(" ")}"`}}),o}brandName(){var t="";return this.json.company!=null&&this.json.company.brand!=null&&(t=this.json.company.brand.value),this.json.authorship!=null&&this.json.authorship.authors!=null&&(t=this.json.authorship.authors.value),t!="-"&&t!="?"?t:""}calculatePoints(){var t=0;
3return this.categories.forEach(o=>{(o.enabled==null||o.enabled==!0)&&o.features.forEach(l=>{if(l.enabled===void 0||l.enabled==!0){var d=this.json[o.id],m=d[l.id];m.flag=="positive"?t=t+2:m.flag=="neutral"&&(t=t+1)}})}),t}calculatePrices(){this.originalPrice=void 0,this.discountedPrice=void 0;var t=this.getPriceStore();if(t!=null&&t.price!=null){this.originalPrice=t.price.toFixed(2),this.discountedPrice=this.originalPrice,this.currency=t.currency,this.currencyISO=getCurrencyISO(t.id),this.priceDecimals=getPriceDecimals(t.id);var o=this.getActiveDiscount();if(o!=null&&o.percentage!=0)if(o.price!=null)this.discountedPrice=o.price.toFixed(2);else{var l=this.originalPrice*(1-o.percentage/100);this.discountedPrice=l.toFixed(2)}}}formatPrice(t){return formatPriceLabel(this.currency,t,this.priceDecimals)}getDisplayedPriceAmount(){var t=Number.parseFloat(this.discountedPrice);if(Number.isFinite(t))return Number(truncatePriceDecimals(t.toFixed(2),this.priceDecimals)).toFixed(2)}getOriginalPrice(){if(!isFreePrice(this.originalPrice)&&this.originalPrice!=this.discountedPrice)return this.formatPrice(this.originalPrice)}getDiscountedPrice(){if(this.discountedPrice!=null)return this.formatPrice(this.discountedPrice)}getDiscount(){var t=this.getActiveDiscount();if(t!=null)return Math.round(t.percentage)+"% OFF"}updatePrice(){var t=this.getPriceStore();this.json["basic-information"]==null&&(this.json["basic-information"]={}),t!=null&&t.price!=null?(this.json["basic-information"].price={value:formatPriceLabel(t.currency,t.price,getPriceDecimals(t.id))},t["price-legend"]!=null&&(this.json["basic-information"].price={texts:[t["price-legend"]]})):this.json["basic-information"].price={value:"-"};var o=this.getStore("amazon_us")!=null;if(this.json["basic-information"].amazon={supported:o},t!=null&&t.discounts!=null){var l="";t.discounts[0].percentage!=null?l=t.discounts[0].percentage+"%":l="$"+t.discounts[0].value,this.json["basic-information"].discounts={value:t.discounts[0].message,flag:"positive",supported:!0,discount:l}}else this.json["basic-information"].discounts={value:"-",supported:!1,discount:"0"}}getTrackingPrice(){return this.discountedPrice!=null&&this.discountedPrice!="-"&&this.discountedPrice!="?"&&!isFreePrice(this.discountedPrice)?this.discountedPrice:""}getTrackingCurrency(){return this.currencyISO?this.currencyISO:"USD"}toPriceHtmlSection(){var t=new HtmlBuilder;return!isFreePrice(this.originalPrice)&&this.originalPrice!=this.discountedPrice?t.push(`<div class="originalPrice">${this.formatPrice(this.originalPrice)}</div>`):t.push('<div class="originalPrice"></div>'),this.discountedPrice!=null?t.push(`<div class="discountedPrice">${this.formatPrice(this.discountedPrice)}</div>`):t.push('<div class="discountedPrice">-</div>'),this.metadata["sats-price"]==!0&&t.push('<div class="btcPrice"></div>'),t.build()}hasEnabledPriceFeature(){return this.categories==null?!1:this.categories.some(function(t){return t.enabled!=null&&t.enabled!=!0?!1:(t.features||[]).some(function(o){return o.id==="price"&&(o.enabled===void 0||o.enabled==!0)})})}toTableHeaderPriceHtml(){if(!this.hasEnabledPriceFeature())return"";var t=new HtmlBuilder;return t.push('<div class="tablePriceRow">'),this.discountedPrice!=null&&this.discountedPrice!="-"&&this.discountedPrice!="?"&&(t.push('<div class="tablePriceMain">'),t.push(`<span class="discountedPrice">${this.formatPrice(this.discountedPrice)}</span>`),!isFreePrice(this.originalPrice)&&this.originalPrice!=null&&this.originalPrice!=this.discountedPrice&&t.push(`<span class="originalPrice">${this.formatPrice(this.originalPrice)}</span>`),t.push("</div>"),this.metadata["sats-price"]==!0&&t.push('<div class="btcPrice"></div>')),t.push("</div>"),t.build()}getActiveDiscount(){var t=this.getPriceStore();if(t!=null&&t.discounts!=null)for(let o of t.discounts)if(o.start!=null&&o.end!=null){let l=new Date,d=new Date(o.start),m=new Date(o.end);if(l>d&&l<m)return o}else return o}getActiveSavings(){if(this.getActiveDiscount()==null)return 0;var t=parseFloat(this.originalPrice),o=parseFloat(this.discountedPrice);if(isNaN(t)||isNaN(o))return 0;var l=t-o;return l>0?Math.round(l*100)/100:0}getDisplayedSavings(){var t=this.getActiveSavings();if(t<=0||this.priceDecimals==null)return t;var o=Number(truncatePriceDecimals(this.originalPrice,this.priceDecimals)),l=Number(truncatePriceDecimals(this.discountedPrice,this.priceDecimals));return Math.round((o-l)*100)/100}hasAnyDiscount(){if(!this.json.stores)return!1;for(let t of this.json.stores)if(t.discounts)for(let o of t.discounts)if(o.start&&o.end){let l=new Date,d=new Date(o.start),m=new Date(o.end);if(l>d&&l<m)return!0}else return!0;return!1}getSummary(){if(this.metadata["summary-enabled"]==!0){var t=[],o=this.categories.filter(l=>l&&l["summary-enabled"]===!0);return o.forEach(l=>{if(l&&l["summary-enabled"]===!0&&this.json[l.id]&&typeof this.json[l.id]=="object"){const m={};for(const f of l.features)f&&typeof f.id=="string"&&(m[f.id]=f);var d=getSupportedFeatures(this.json[l.id],m);d.length>0&&t.push(`<b>${getCategoryTitleById(this.categories,l.id)}:</b> ${d.join(", ")}`)}}),t.join(`
4`)}return null}getSummaryGroups(){if(this.metadata["summary-enabled"]!=!0||!this.categories)return[];var t=[],o=this.categories.filter(l=>l&&l["summary-enabled"]===!0);return o.forEach(l=>{if(this.json[l.id]&&typeof this.json[l.id]=="object"){const m={};for(const f of l.features)f&&typeof f.id=="string"&&(m[f.id]=f);var d=getSupportedFeatures(this.json[l.id],m);d.length>0&&t.push({title:getCategoryTitleById(this.categories,l.id),items:d})}}),t}}typeof global<"u"&&typeof module<"u"&&module.exports&&(global.BaseItem=BaseItem);
4function getSupportedFeatures(r,t){return Object.entries(r).filter(([o,l])=>!(l?.supported===!1||t?.[o]?.["summary-enabled"]===!1)).map(([o,l])=>{const d=t?.[o];var m=void 0;if(typeof l.value=="string"&&l.value!=="-"&&l.value!=="?"&&l.value.length>0){if(d&&d["summary-type"]==="value")l.value.toLowerCase().includes("yes")?m=d&&d.title?d.title:o:m=d["data-type"]==="measurement"?formatMeasurement(l.value):l.value;else if(m=d&&d.title?d.title:o,!l.value.toLowerCase().includes("yes")&&!m.includes("(")&&!l.value.includes("(")){var f=d&&d["data-type"]==="measurement"?formatMeasurement(l.value).replace(`
5(`,", ").replace(/\)$/,""):l.value;m+=` (${f})`}}return m}).filter(o=>o!==void 0)}function getCategoryTitleById(r,t){const o=r.find(l=>l.id===t);return o?o.title:null}function trackViewItem(r,t,o){sendGA("view_item",{items:[{item_id:t,item_name:t,item_brand:o,item_category:r,quantity:1}]})}async function trackBuyItem(r,t,o,l,d,m,f=null,w="",x="",I=""){var N=d!==""&&d!=null,_=N?Number(d):void 0,Y=!N&&w!==""&&w!=null,a=N?_:Y?Number(w):null,oe=Y?x:m,G=typeof window<"u"&&window.pageType?window.pageType:null,le=typeof getBuyQuantity=="function"?getBuyQuantity(l):1;(!isFinite(le)||le<1)&&(le=1);var me={item_id:t,item_name:t,item_brand:o,item_category:r,quantity:le,affiliation:l,index:f};N&&(me.price=_);var pe={currency:m,items:[me]};N&&(pe.value=_*le);try{sendGA("purchase",pe)}catch{}typeof recordVisitHistoryEvent=="function"&&recordVisitHistoryEvent("buy",{itemType:r,itemId:t,brandId:o,storeId:l,placement:f});var ne=typeof getLocation=="function"?getLocation():null,ge=ne&&ne.countryCode?ne.countryCode:null,ue=typeof getVisitorContext=="function"?getVisitorContext():{},z=typeof getAttributedCampaign=="function"?getAttributedCampaign():{};insertSale({item_type:r,item_id:t,brand_id:o,store_id:l,amazon_asin:I||null,quantity:le,price:a,currency:oe,country_code:ge,page_type:G,page_path:location.pathname,referrer:typeof getAttributedReferrer=="function"?getAttributedReferrer():document.referrer||null,user_id:ue.user_id||null,device_type:ue.device_type||null,os:ue.os||null,browser:ue.browser||null,initial_path:ue.initial_path||null,days_known:typeof getVisitHistoryDaysKnown=="function"?getVisitHistoryDaysKnown():null,placement:salePlacement(f),utm_source:z.utm_source||null,utm_medium:z.utm_medium||null,utm_campaign:z.utm_campaign||null,utm_content:z.utm_content||null})}function salePlacement(r){return typeof r=="number"&&Number.isInteger(r)&&r>=1?r:null}var saleChannel=null;function getSaleChannel(){return saleChannel??(typeof createConversionChannel!="function"?null:(saleChannel=createConversionChannel({table:"sales",storageKey:"pending-sales",prefer:"return=minimal",optionalColumns:["amazon_asin","quantity","days_known","placement","utm_source","utm_medium","utm_campaign","utm_content"],isEnabled:function(){return typeof salesTrackingEnabled<"u"&&salesTrackingEnabled},isLocalAllowed:function(){return typeof localSalesTrackingEnabled<"u"&&localSalesTrackingEnabled}}),saleChannel))}function insertSale(r){var t=getSaleChannel();t?.insert(r)}function initAuxClickTracking(){document.addEventListener("auxclick",function(r){if(r.button===1){var t=r.target&&r.target.closest?r.target.closest("a[onclick]"):null;if(!(t==null||typeof t.onclick!="function")){var o=t.getAttribute("onclick")||"";if(o.replace(/^\s+/,"").indexOf("track")===0)try{t.onclick.call(t,r)}catch{}}}})}if(typeof document<"u"){initAuxClickTracking();var startupChannel=getSaleChannel();startupChannel?.flush()}function trackComingSoon(r,t,o){sendGA("coming_soon",{item_id:t,item_brand:o,item_category:r}),typeof recordVisitHistoryEvent=="function"&&recordVisitHistoryEvent("buy",{itemType:r,itemId:t,brandId:o})}function trackBuildNow(r,t,o){sendGA("build_now",{item_id:t,item_brand:o,item_category:r}),typeof recordVisitHistoryEvent=="function"&&recordVisitHistoryEvent("buy",{itemType:r,itemId:t,brandId:o})}function trackInstallNow(r,t,o){sendGA("install_now",{item_id:t,item_brand:o,item_category:r}),typeof recordVisitHistoryEvent=="function"&&recordVisitHistoryEvent("buy",{itemType:r,itemId:t,brandId:o})}document.addEventListener("DOMContentLoaded",function(){document.documentElement.removeAttribute("data-countdown-syncing");for(var r=document.querySelectorAll("[data-dismissible]"),t=0;t<r.length;t++)initShoppingEventDismiss(r[t]);for(var o=document.querySelectorAll("[data-shopping-event-countdown]"),l=0;l<o.length;l++)initShoppingEventCountdown(o[l])});var SHOPPING_EVENT_DISMISSED_KEY="shopping-event-dismissed";function shoppingEventDismissedKeys(){try{var r=JSON.parse(localStorage.getItem(SHOPPING_EVENT_DISMISSED_KEY)||"[]");return Array.isArray(r)?r:[]}catch{return[]}}function shoppingEventDismissKey(r){var t=Date.parse(r.getAttribute("data-start"));return r.getAttribute("data-dismissible")+"|"+(Date.now()<t?"upcoming":"live")}function shoppingEventIsDismissed(r){return shoppingEventDismissedKeys().indexOf(shoppingEventDismissKey(r))>=0}function initShoppingEventDismiss(r){var t=r.querySelector("[data-dismiss]");t&&t.addEventListener("click",function(){var o=shoppingEventDismissedKeys(),l=sh
5oppingEventDismissKey(r);o.indexOf(l)<0&&o.push(l);try{localStorage.setItem(SHOPPING_EVENT_DISMISSED_KEY,JSON.stringify(o.slice(-20)))}catch{}r.hidden=!0})}function initShoppingEventCountdown(r){var t=Date.parse(r.getAttribute("data-start")),o=Date.parse(r.getAttribute("data-end")),l=r.closest("[data-countdown-scope]")||document,d=r.getAttribute("data-countdown-state")==="upcoming",m=!1,f={days:r.querySelector('[data-unit="days"]'),hours:r.querySelector('[data-unit="hours"]'),minutes:r.querySelector('[data-unit="minutes"]'),seconds:r.querySelector('[data-unit="seconds"]')};if(!f.days&&!f.hours&&!f.minutes&&!f.seconds)return;var w=1440*60*1e3,x=3600*1e3,I=60*1e3,N=1e3,_=r.getAttribute("data-countdown-style")==="clock",Y=!1;function a(z){return z<10?"0"+z:String(z)}function oe(z,C){if(z){var P=String(C);z.textContent!==P&&(z.textContent=P,_&&Y&&(z.classList.remove("is-flipping"),z.offsetWidth,z.classList.add("is-flipping")))}}function G(z){var C=Array.prototype.slice.call(l.querySelectorAll(z));return l!==document&&l.matches(z)&&C.unshift(l),C.filter(function(P){return(P.closest("[data-countdown-scope]")||document)===l})}function le(){m=!0,G("[data-live-text]").forEach(function(z){z.textContent=z.getAttribute("data-live-text")}),G("[data-live-class]").forEach(function(z){var C=z.getAttribute("data-live-class").split(/\s+/);z.classList.remove(C[0]),z.classList.add(C[1])}),G("[data-dismissible]").forEach(function(z){z.hidden=shoppingEventIsDismissed(z)})}function me(){var z=r.closest("[data-countdown-wrap]");(z||r).hidden=!0,G("[data-hide-when-ended]").forEach(function(C){C.hidden=!0})}function pe(){var z=Date.now();d&&!m&&!isNaN(t)&&z>=t&&le();var C=!isNaN(t)&&z<t?t:o;if(isNaN(C)||z>=C)return me(),!1;var P=C-z,q=Math.floor(P%I/N),ee=Math.floor(P/w),J=Math.floor(P%w/x),de=Math.floor(P%x/I);return ee===0?r.classList.add("is-last-day"):r.classList.remove("is-last-day"),oe(f.days,_?a(ee):ee),oe(f.hours,_?a(J):J),oe(f.minutes,_?a(de):de),oe(f.seconds,a(q)),!0}var ne=f.seconds?N:I,ge=pe();if(Y=!0,ge){var ue=setInterval(function(){pe()||clearInterval(ue)},ne);document.addEventListener("visibilitychange",function(){document.hidden||pe()})}}(function(){var r=10,t=24;function o(d){var m=document.createElement("div");m.className="carouselIndicator",m.setAttribute("aria-hidden","true"),m.hidden=!0,d.parentNode.insertBefore(m,d.nextSibling);var f=null,w=[],x=null,I=!1;function N(){return Array.prototype.filter.call(d.children,function(G){return G.offsetWidth>0})}function _(G){var le=d.scrollWidth-d.clientWidth;if(le>0&&d.scrollLeft>=le-2)return G.length-1;var me=d.getBoundingClientRect().left+(parseFloat(getComputedStyle(d).scrollPaddingLeft)||0),pe=0,ne=1/0;return G.forEach(function(ge,ue){var z=Math.abs(ge.getBoundingClientRect().left-me);z<ne&&(ne=z,pe=ue)}),pe}function Y(){if(I=!1,!m.hidden){if(f==="dots"){var G=_(N());w.forEach(function(ge,ue){ge.classList.toggle("is-active",ue===G)})}else if(x){var le=m.clientWidth,me=Math.max(le*d.clientWidth/d.scrollWidth,t),pe=d.scrollWidth-d.clientWidth,ne=pe>0?d.scrollLeft/pe:0;x.style.width=me+"px",x.style.left=ne*(le-me)+"px"}}}function a(){I||(I=!0,window.requestAnimationFrame(Y))}function oe(){var G=d.scrollWidth>d.clientWidth+2;if(m.hidden=!G,!!G){var le=N().length,me=le<=r?"dots":"bar";if(me!==f||me==="dots"&&w.length!==le)if(f=me,w=[],x=null,m.textContent="",m.classList.toggle("carouselIndicator--bar",f==="bar"),f==="dots")for(var pe=0;pe<le;pe++){var ne=document.createElement("span");ne.className="carouselDot",m.appendChild(ne),w.push(ne)}else x=document.createElement("span"),x.className="carouselThumb",m.appendChild(x);Y()}}d.addEventListener("scroll",a,{passive:!0}),window.addEventListener("resize",oe),oe()}function l(){Array.prototype.forEach.call(document.querySelectorAll("[data-carousel]"),o)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",l):l()})();function buyBlockSetVisible(r,t){t?r.classList.remove("hide"):r.classList.add("hide")}function buyBlockSetText(r,t){var o=t!=null?String(t):"";r.textContent=o,buyBlockSetVisible(r,o!=="")}function buyBlockItem(r){for(var t=0;t<r.length;t++){var o=r[t],l=o.matches("[data-stores]")?o:o.querySelector("[data-stores]");if(l!=null){var d=typeof itemFromBuyRowElement=="function"?itemFromBuyRowElement(l):void 0;if(d!=null)return d}}}function buyBlockPlacement(r){var t=r.matches("[data-buy-placement]")?r:r.querySelector("[data-buy-placement]");if(t==null)return null;var o=Number(t.dataset.buyPlacement);return Number.isInteger(o)&&o>=1?o:null}function buyBlockDialogSuffix(r,t){var o=r.querySelector("[data-dialog-target]");if(o!=null){var l="buyStoresDialog-"+t.json.id+"-",d=o.dataset.dialogTarget||"";return d.indexOf(l)===0?d.slice(l.length):void 0}}function buyBlockOwnItem(r,t){var o=r.matches("[data-stores]")?r:r.querySelector("[data-stores]"),l=o!=null&&typeof itemFromBuyRowElement=="function"?itemFromBuyRowElement(o):void 0;return l??t}function localizeBuyRow(r,t){var o=buyBlockOwnItem(r,t),l=o.actionButtonsConfig(buyBlockPlacement(r));r.classList.contains("buyButtonsRow--single")&&(l.primaryOnly=!0),r.outerHTML=o.getBuyButtonsHtml(l,buyBlockDialogSuffix(r,o))}function localizeBuyPrimary(r,t){r.innerHTML=buyBlockOwnItem(r,t).getPrimaryActionHtml(buyBlockPlacement(r))}function localizeBuyPrices(r,t){var o=t.getDiscountedPrice(),l=t.getOriginalPrice(),d=t.getDiscount(),m=t.getPriceStore();r.querySelectorAll("[data-buy-price]").forEach(function(f){switch(f.dataset.buyPrice){case"now":o!=null&&(f.textContent=o,f.classList.remove("hide"));break;case"was":buyBlockSetText(f,l);break;case"off":buyBlockSetText(f,d);break;case"low":buyBlockSetVisible(f,m!=null&&m.id===f.dataset.buyStore);break}})}function localizeBuyBlocks(){var r=new Map;document.querySelectorAll("[data-buy-block]").forEach(function(o){var l=o.dataset.buyBlock;r.has(l)||r.set(l,[]),r.get(l).push(o)});var t=!1;r.forEach(function(o){var l=buyBlockItem(o);l!=null&&o.forEach(function(d){d.querySelectorAll(".buyButtonsRow").forEach(function(m){localizeBuyRow(m,l),t=!0}),d.querySelectorAll("[data-buy-primary]").forEach(function(m){localizeBuyPrimary(m,l),t=!0}),d.matches("[data-buy-primary]")&&(localizeBuyPrimary(d,l),t=!0),localizeBuyPrices(d,l)})}),t&&typeof initBuyStoresDialog=="function"&&initBuyStoresDialog()}function initBuyBlockLocalizer(){if(!(typeof getLocation!="function"||typeof isStoreChanged!="function")){var r=getLocation();r!=null&&isStoreChanged(r)&&localizeBuyBlocks(),window.addEventListener("location:updated",function(){localizeBuyBlocks()})}}typeof document<"u"&&typeof window<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",initBuyBlockLocalizer):initBuyBlockLocalizer());

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.